본문 바로가기

프로젝트

(35)
[05] 230108 게임 개발 일지 - 직업 특수 스킬 구현 직업별 특수 스킬을 구현해 보았다 1. 도발 사용 시 5초간 어그로 1순위가 된다. 몬스터 AI 함수에서 몬스터가 피격 될 시 실행되는 함수에, 타겟 순위를 도발 버프가 있을 때 1순위로 지정한다. 도발건 유저가 없으면, 때린 유저가 어그로가 지정된다. 이렇게 지정하면, 도발이 없을 때 여러 유저가 몬스터를 때릴때마다 어그로가 계속 갱신될 것 같다. 내부 타이머를 설정해서 일정 시간동안 어그로가 고정되도록 해야 하나 고민중이다... 일단 어그로가 풀릴 때의 함수 지정은, 몬스터 AI함수에서 2초마다 자동 실행되는 함수에, 타겟으로 잡은 유저가 도발 버프가 없다면 어그로를 해제한다. 로 설정했지만, 도발한 유저가 없을 때, 그냥 때린 유저도 어그로가 풀리는데, 이게 2초마다 실행되는 함수가 피격 기준으로 ..
[21] mutsa-SNS-2 3일차 - (2) 마이 피드 기능 구현 내가 쓴 글 리스트를 보여주는 마이피드 기능을 구현했다. 내가 작성한 글만 보이는 기능 제목, 글쓴이, 내용, 작성날짜가 표시 목록 기능은 페이징 기능이 포함 (Post 조회와 동일) 단지 Post 전체 조회와 다른 것이 user로 post를 검색하는 로직 추가 밖에 없어 간단히 구현했다. 1. Repository PostRepository public interface PostRepository extends JpaRepository { Page findAllByUser(User user, Pageable pageable); } 해당 User로 post를 검색하여 page에 담아 return하는 method를 추가했다. 2. Service PostService @Service @RequiredArgsC..
[20] mutsa-SNS-2 3일차 - (1) soft delete 관련 리펙토링 (@Transactional 이슈) post가 delete될 때, 그와 관련되어 있는 comment와 like도 soft delete처리를 추가해 주었다. 이 과정에서 생겼던 Transactional 관련 이슈와 그로 인해 jpql method를 줄이고 jpa를 사용하기 위해 리펙토링 한 과정을 적어보았다... 1. @Transactional jpa의 경우 더티체킹을 지원한다. 이는 상태 변경에 대한 검사라 생각하면 된다. JPA로 엔티티를 조회하게 되면, 엔티티 조회 상태 그대로 스냅샷을 만들게 되고, 엔티티를 수정하여 트랜젝션을 커밋 할 때, flush가 일어나게 되는데, 그 때 초기 조회 상태의 스냅샷과 비교하여 변화가 발생하면, update query를 날리게 된다. 이로 인해 따로 save를 해주지 않아도 update query가..
[04] 230104 게임 개발 일지 - 직업 스탯 보너스 수정 내가 구현했던 직업에 따른 스탯 보너스와, 기획자 엉님이 원했던 스탯 보너스 방식이 달랐다. 기획서를 좀 더 꼼꼼히 읽어보고 헷갈리는 것이 있음 그때그때 물어봐야 되겠다... 1. 총 스킬 레벨 -> 해당 직업 스킬 레벨 스탯 보너스 표 옆의 예시를 안보고 짐작해서 총 스킬 레벨로 구현했던 것이 아니었다. 간단히 직업별 table에 해당 스킬 dataID 항목을 추가하여 반복문을 돌려 해당 직업 스킬레벨의 총 합을 구하도록 수정하였다. 2. 스킬 레벨에 따른 스탯 보너스 수치 제한 요구사항에 스탯 보너스의 증감 수치의 제한이 있는 것을 깜빡하고 구현하지 않았다... 해당 조건은 간단한 조건문 추가로 해결하였다. 3. 마이너스 스탯 보정 현재 네코랜드는 스탯이 마이너스까지 내려가도록 구현이 되어있다. 우리..
[19] mutsa-SNS-2 2일차 - (2) 좋아요 기능 test code 앞서 만든 좋아요 기능이 제대로 작동하는지 test code를 통해 검증해보았다. 좋아요 누르기 성공 좋아요 누르기 실패 - 로그인 하지 않은 경우 좋아요 누르기 실패 - 해당 Post가 없는 경우 1. PostControllerTest @WebMvcTest(PostController.class) class PostControllerTest { @Autowired MockMvc mockMvc; @MockBean PostService postService; @Autowired ObjectMapper objectMapper; ... @Test @DisplayName("좋아요 누르기 성공") @WithMockUser void like_do_success() throws Exception { when(postS..
[18] mutsa-SNS-2 2일차 - (1) 좋아요 기능 구현 (soft delete 복구) 좋아요 기능을 구현해 보았다. 로그인 한 유저만 좋아요 누르기 가능 이미 좋아요 상태에서 한번 더 누르면 좋아요 취소 (soft delete로 구현) 글에 달린 좋아요 수는 모두 열람 가능 기능 구현 중, SQL naming Error 이슈 발생하여 시간을 꽤나 잡아먹었다. 아래에세 좀 더 이야기를 풀어보겠다... 1. Domain Like (Entity) @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Setter @Table(name = "likes") @Entity @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) //soft delete @SQLDelete(sql = "UPDAT..
[03] 230103 게임 개발 일지 - 스탯 함수 + 장비 장착시 스킬 배우기 멋사에서 진행하는 개인 프로젝트와 연말 행사와 약속에 정신이 없어 게임 개발에 소홀해졌다... 연말에 휴강하며 쉬면서 충전된 에너지를 토대로 앞으로 열심히 해야겠다... 1. 스탯 함수 전투 스킬 레벨에 따른 스탯 보너스를 구현하기 위해 스탯 함수를 튜닝 했다. 그러던 도중, 함수 내에서 스탯을 불러 올 때 원래 계산되었던 스탯이 아니라, 캐릭터 레벨에 따른 초기 셋팅값을 불러와 혼동이 많이 왔다. 또한, 아이템 착용 시 실행되는 Server.onRefreshStat 함수와, 그 함수에 추가시킨 커스텀 함수 간의 작동 차이가 있는 것을 발견했다. 이로 인해 데미지 함수에서 전투 스킬 레벨이 오를 때, 커스텀 함수가 아니라, 스탯을 다시 계산하는 unit.RefreshStats()을 불러와야 함을 깨닳았다..
[17] mutsa-SNS-2 1일차 - (2) 댓글 기능 test code 댓글 기능 관련 test code를 작성해 보았다. controller test code를 작성해 보았으며, 아래의 경우에 대하여 진행하였다. 댓글 등록 댓글 작성 성공 댓글 작성 실패(1) - 로그인 하지 않은 경우 댓글 작성 실패(2) - 게시물이 존재하지 않는 경우 댓글 수정 댓글 수정 성공 댓글 수정 실패(1) : 인증 실패 댓글 수정 실패(2) : 댓글 불일치 댓글 수정 실패(3) : 작성자 불일치 댓글 수정 실패(4) : 데이터베이스 에러 댓글 삭제 댓글 삭제 성공 댓글 삭제 실패(1) : 인증 실패 댓글 삭제 실패(2) : 댓글 불일치 댓글 삭제 실패(3) : 작성자 불일치 댓글 삭제 실패(4) : 데이터베이스 에러 PostControllerTest @WebMvcTest(PostControl..