작업한 것
- 설계 ( ER 다이어그램 )

- 개발
- 상대방과 채팅 구현

- 채팅 리스트 구현

대화상대, 최근 대화, 최근 대화 시간, 읽지 않은 메시지 개수 구현
배운 것
- PK와 FK는 내부 JOIN용이다. 클라이언트용 식별자는 UUID로 만들어 제공해야 한다.
( https://americanopeople.tistory.com/378 )
- null 값 if/else 문 안쓰고 처리하기
Optional.ofNullable(findChatRoom).orElse(new ChatRoom("0"));
- @Builder 와 @NoArgsConstructor를 같이 쓰려면 @AllArgsConstructor도 선언하면 됨
이슈
- JPA 개념을 많이 잊고 있다
@OneToMany(mappedBy = "chatRoom")
private List<RoomUser> roomUsers = new ArrayList<>();
roomUsers는 JPA가 프록시 엔티티 객체를 생성할때 값을 넣어주기 위한 것이지
개발자가 직접 호출해서 세팅하는 것이 아니다.
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: cohttp://m.example.chattingservice.entity.ChatRoom.roomUsers, could not initialize proxy - no Session
트랜잭션이 종료되어 참조하는 엔티티를 호출하는 경우 발생하는 에러
findByRoomId 함수로 엔티티를 가져오면 지연로딩 전략을 사용하는 객체는 Transaction이 종료된 뒤 가져오지 못하는 현상 => 페치조인 사용하기 => JPQL 사용 => QueryDSL 사용!
- QueryDSL 테스트 중에 연관관계 엔티티를 가져오지 못하는 현상 발생
=> em.persist로 영속성 컨테이너만 변경하고 DB는 그대로 두었다. QueryDSL은 JPQL을 실행하는데 JPQL은 영속성 컨테이너를 거치지 않고 바로 DB에 실행한다. DB와 영속성 컨텍스트를 동기화 하지 않으면 원하는 결과를 얻을 수 없다....
- Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query
@Transactional
//프록시로 생성된 Respository 객체는 @Transactional(ReadOnly=true)이므로 update, delete 메소드 작업시 어노테이션을 메소드 위에 정의해주어야 한다. entityManager.flush()로 동기화 하고 entityManager.clear()로 확실히 DB에서 데이터를 가져오면 된다.
- java.lang.NoSuchMethodException: cohttp://m.example.chattingservice.domain.ChatRoomResponse.<init>()
ModelMapper로 ChatRoom을 ChatRoomResponse로 변환하는 도중 위와 같은 에러 발생. ChatRoomResponse로에 어규먼트가 하나인 생성자를 생성하면서 어규먼트가 없는 생성자가 사라졌기에 발생한 문제
ModelMapper는 Refletion으로 객체를 생성하기에, 어규먼트 없는 생성자가 필요하다.
@NoArgsConstructor( access = AccessLevel.PROTECTED) 추가해 줌.
마무리
조금씩 느껴져 오는 시간의 압박...
SpringCloud를 이용한 MSA 구현이 가능할까?...
'프로젝트 > DevLink' 카테고리의 다른 글
[프로젝트] 설계하기 - 프로젝트 환경 맞추기 + 프로젝트 멘토링 ( 2023.12.06(수) ) (1) | 2023.12.07 |
---|---|
[프로젝트] 설계하기 - API 설계 ( 2023.12.05(화) ) (0) | 2023.12.06 |
[프로젝트] 설계하기 - 와이어프레임 ( 2023.12.01(금) ) (1) | 2023.12.02 |
[프로젝트] 설계하기 - 와이어프레임 ( 2023.11.30(목) ) (0) | 2023.12.01 |
[프로젝트] 설계하기 - UserFlow 작성 ( 2023.11.29(수) ) (0) | 2023.11.30 |