분류 전체보기(114)
-
MSA 에서 알람 메세지 Firebase Cloud Messaging(FCM) 처리하기
https://organic-hunter-0ab.notion.site/FCM-60b5f7ebbb1f486a8b139ebe4ea5a09c?pvs=4 이 글은 위 팀 노션에서 서로 공유하기 위한 글이지만, 다른 사람들에게도 공유되면 좋겠어서 옮긴 글입니다 :) 배경 Firebase Cloud Messaging(이하 FCM) 관련해서 user-service는 알람 이벤트를 어떻게 핸들링할지 의뢰가 들어왔습니다. 이 부분에 대해서 협의가 충분히 고려해야 되는 이유는 사용자에게 실제로 가는 알람까지 여러 마이크로서비스의 협업이 동반되기 때문입니다. 간략히 FCM 의 과정을 설명하자면 사용자가 애플리케이션에 로그인할 때 생성되는 FCM 토큰을 활용하여 사용자가 주문 상태 변경과 같은 중요한 이벤트를 실시간으로 받아..
2023.11.08 -
Hibernate의 "Detached Entity Passed to Persist" 오류 이해와 해결
오류 이해하기 Detached(준영속) 상태란? Hibernate 및 JPA에서 엔티티의 생명주기 중 하나인 'Detached' 상태는 영속석 컨텍스트가 더 이상 해당 객체를 추적하지 않을 때 발생합니다. 세션이 닫히거나(close), 클리어될 때(clear), 또는 수동으로 영속성 컨텍스트에서 제거(detach) 될 때 이 상태에 도달할 수 있습니다. Entity의 상태 코드 EntityState enum을 보면 public enum EntityState { PERSISTENT, TRANSIENT, DETACHED, DELETED; static final CoreMessageLogger LOG = CoreLogging.messageLogger( EntityState.class ); /** * Deter..
2023.11.08 -
org.mockito.exceptions.misusing.UnnecessaryStubbingException 해결
// PostService의 게시글 수정(updatePost) 정상 케이스 테스트 코드 @Test public void updatePost_ShouldChangePostDetails_WhenUpdateInfoIsValid() throws Exception { // given - 상황 만들기 Long postId = 1L; PostUpdateDTO postUpdateDTO = PostUpdateDTO.builder() .title("Updated Title") .content("Updated Content") .build(); Post existingPost = Post.builder() .id(postId) .title("Title") .content("Content") .build(); when(pos..
2023.11.07 -
테스트를 더 빨리 끝내보기 (feat. 자료구조, singletonList)
https://github.com/xpmxf4/HaeChuk-Gallery/blob/main/src/test/java/HailYoungHan/Board/controller/PostControllerTest.java 위와 같은 코드가 있는 데 테스트하는 게 일일이 귀찮아서 시작했던 테스트 코드를 이제는 더 빨리 굴려볼 수는 없을까 라는 고민이 들어 코드를 한번 개선해보고자 했습니다. 그렇다면 어떤 부분을 개선할 수 있을까 라는 고민을 하다가 List allPosts 부분을 봤습니다. 자료구조를 사용한다면 어떻게 더 빠른 코드가 생성이 될 수도 있지 않을까 싶었습니다. 그래서 다음 2가지 코드를 한번 짜봤습니다. List 자료구조를 활용해 게시물 담기 처음은 기존처럼 Arrays.asList() 를 사용해 ..
2023.11.02 -
테스트 코드 작성 시 유의할 점 (Mockito doNothing)
https://github.com/xpmxf4/HaeChuk-Gallery/blob/main/src/test/java/HailYoungHan/Board/controller/CommentControllerTest.java 위는 다 작성된 테스트 코드입니다. 중간에 오늘의 주제가 있는 데 바로 doNothing입니다. 해축갤 프로젝트에서 댓글 생성을 담당하는 Controller의 API 슬라이스 테스트 코드를 작성 중에 쓴 글입니다. 이 함수는 dto를 파라미터로 넘겨받아 Entity 객체로 전환 후, 이를 repository를 통해서 save 하는 함수입니다. CommentService는 Mock 객체이기 때문에 사실할 이유가 없어도 무방하지만 그래도 하는 게 좋은 이유가 있습니다. CommentServi..
2023.11.02 -
Jackson과 @Getter를 이용한 JSON 직렬화시 필드 이름이 바뀌는 에러
Java에서 데이터를 표현하는 클래스는 종종 필드와 해당 필드에 접근하기 위한 getter, setter 메서드를 포함하고 있습니다. Lombok의 @Getter 어노테이션을 사용하면, 이러한 getter 메서드를 자동으로 생성할 수 있죠. 그런데 Jackson 라이브러리를 이용해서 이러한 클래스를 JSON으로 직렬화할 때, 일부 메서드의 네이밍이 JSON의 키로 변환될 때 직렬화 하고자 한 객체의 필드 네이밍과는 다른 경우가 있습니다. 특히, boolean 타입의 필드의 경우, getter 메소드의 이름이 is로 시작하는 경우가 많습니다. 그럼 Jackson은 이러한 메소드 이름을 어떻게 처리하고 JSON의 키로 변환할까요? 예제 코드(이자 실제 저의 코드 ㅠ) @Getter @NoArgsConstru..
2023.11.01