본문 바로가기

프로젝트28

JPA N+1 발생 케이스과 MultipleBagFetchException 해결책 Fetch Join을 사용하다 만나는 MultipleBagFetchException 문제에 대해 알아보고, 해결책에 대해 정리 해보자. 목차는 다음과 같다. 프로젝트 요구사항 문제 상황 연관객체 조회 N+1 문제를 해결하기 위해 Fetch Join 해결방안 첫 번째 방안 : Set으로 선언한다. 두번째 방안 : Hibernate default_batch_fetch_size 내가 선택한 방안 : Set 타입으로 변경하고 조회결과를 DTO로 반환 참고자료 회고 프로젝트 요구사항 (문제 상황을 말하기 전에, 나의 프로젝트에 Join 쿼리가 왜 필요한지 설명하고자 한다.) 스터디 방에 참여한 유저 정보(프로필 사진, 스터디 시간, 자신의 공부태그)를 조회해야 한다. 아이디어 구상단계에서 '크아' .. 2024. 3. 20.
관계형 데이터베이스에서의 컬렉션 처리 : Room 엔티티의 구조 개선 이번 시간엔 프로젝트를 진행하면서 만난 RDB에서의 컬렉션 이슈를 정리해볼 예정이다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같아요. 목차 목차는 다음과 같다. Room에 대한 요구사항 : 여러 개의 태그를 가진다. 스터디방 태그 관리: RDB와 컬렉션 구조의 한계 RDB에는 내부적으로 컬렉션을 담을 수 있는 구조가 없다. RDB에서 컬렉션 타입의 처리: Entity로 정의하여 일대다(1:N) 관계를 정의한다. Room에 대한 연관관계 매핑정의 회고 Room에 대한 요구사항 : 여러 개의 태그를 가진다. 프로젝트 개발하기 이전에 Room에 대한 요구사항을 세웠었는데, 그 중 하나다. Room(스터디방)에 여러 개의 방 태그를 붙일 수 있다. 요구사항을 분석해서 만든 스.. 2024. 3. 18.
Stomp를 활용한 실시간 채팅 프로그램 구현 유저 간 소통을 할 수 있도록 실시간 채팅 구현을 해야 했었다. 채팅을 구현하거나 실시간성이 필요한 사이트의 경우 WebSocket 통신 프로토콜이 필요하다고 한다. 이번에 Spring에서 Websocket, STOMP를 이용하여 채팅 서버를 어떻게 구현해야 하는지 정리 해보자. 전체코드는 여기로 확인해주세요. 📚 목차 목차는 다음과 같다. HTTP 통신과 Socket 통신의 차이점 STOMP로 채팅서버 고도화하기 build.gradle에 라이브러리 추가 ChatPreHandler 생성 WebSocketConfig 생성 채팅 관련 Domain 설계 채팅창 Service 생성 채팅 Controller 생성 채팅창 Controller 생성 웹브라우저 확인 참고자료 회고 HTTP 통신과 Socket 통신의 차.. 2024. 3. 15.
Spring Security와 JWT로 로그인 구현 팀프로젝트를 하게 되면서 새롭게 다루는 주제들이 많았었다. 그 중에서 Spring Security와 JWT를 활용하여 로그인을 구현하는 부분이 있었다. (여태 나는 세션과 쿠키 방식의 로그인을 구현했었다. 프로젝트를 해본 경험은 있었지만 JWT를 구현해보지는 않았었다.) 프로젝트를 진행하며 알게 된 내용과 함께, springboot 버전마다 달라진 jwt관련 변경 사항들을 공유하고자 한다. 모든 코드는 Github에 있으니 참고하세요.📚 목차목차는 다음과 같다.JWT(JSON Web Token) 소개build.gradle 라이브러리 추가spring security, JWT 구현Spring Boot 3.x 이상의 Security Config 코드 변경 사항REST API 구현 & POSTMAN 확인참고자.. 2024. 3. 13.