본문 바로가기

전체 글

(55)
[24] mutsa-SNS-2 6일차 - (1) 알람 기능 test code 알람 기능의 controller의 test code를 추가하였다. 해당 test는 아래 두가지로 진행하였다. 알람 목록 조회 성공 알람 목록 조회 실패 - 로그인하지 않은 경우 AlarmControllerTest @WebMvcTest(AlarmController.class) class AlarmControllerTest { @Autowired MockMvc mockMvc; @MockBean AlarmService alarmService; @Test @DisplayName("알람 목록 조회 성공") @WithMockUser void alarm_get_success() throws Exception { when(alarmService.getAlarm(any(), any())) .thenReturn(Page...
[23] mutsa-SNS-2 5일차 - 알람 기능 추가 알람 기능을 추가해 보았다. 로그인 한 유저에게 달린 모든 댓글과 좋아요를 page형태로 return 자신이 자신의 글에 댓글과 좋아요를 달 시 알람 x 좋아요 취소후 재등록시 알람 x 1. Domain Alarm (Entity) @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Setter @Table(name = "alarm") @Entity @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class Alarm extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id..
[06] 230108 게임 개발 일지 - 활 스킬 구현 제일 미뤄놨던 활 스킬을 구현할 차례가 왔다... 역시역시나 생각한 대로 좀 복잡했다. 활 스킬을 어떻게 구현할지 기획자 엉님과 의논 결과, 아래와 같이 구현하기로 했다. 바라본 방향에서 위 아래로 45도 이내에 가장 가까운 타겟을 잡아 자동으로 발사한다. 타겟이 없으면 그냥 바라본 방향으로 직선으로 화살을 날린다. 타겟을 잡을 때 오랜만에 수학공식을 쓰려하니... 기억이 나지 않는다... 좌표계 이동... 극좌표계... 삼각함수... 음... 이걸 다시 꺼내다니... 저번 통계쪽 계산할때도 그렇고 은근 쓸일이 있구나 하고 느꼈다. 타겟을 잡는 간단 로직은 아래와 같다. 원하는 픽셀 내의 몬스터를 갖고온다. 몬스터의 x,y좌표를 캐릭터의 x,y 좌표를 기준으로 좌표계 이동을 해준다. 캐릭터가 바라보고 있..
[22] mutsa-SNS-2 4일차 - 마이 피드 기능 test code 마이 피드 기능 test code를 추가하였다. 아래의 case를 테스트 해보았다. 마이피드 조회 성공 마이피드 조회 실패 - 로그인 하지 않은 경우 PostControllerTest @WebMvcTest(PostController.class) class PostControllerTest { @Autowired MockMvc mockMvc; @MockBean PostService postService; @Autowired ObjectMapper objectMapper; ... @Test @DisplayName("마이피드 조회 성공") @WithMockUser void myFeed_get_success() throws Exception { when(postService.getMyFeed(any(), any..
[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. 마이너스 스탯 보정 현재 네코랜드는 스탯이 마이너스까지 내려가도록 구현이 되어있다. 우리..