본문 바로가기

Framework/Spring Boot

(4)
JPA 복합키 + @MapsId 삽질 기록 TL;DR같은 의미의 복합키는 @Embeddable 한 개로 통일@MapsId는 부모의 PK 객체를 자식 PK에 그대로 세팅하므로 타입이 반드시 같아야 함부모와 자식의 컬럼이 다르면 @AttributeOverride로 매핑하기Repository 제네릭의 PK 타입도 엔티티와 동일해야 함문제 상황부모 테이블 experience와 자식 테이블 exported_content이 같은 의미의 복합키를 (nfc_card_id, session_token)을 사용하다가 다음 에러가 발생했다.java.lang.IllegalArgumentException: Can not set com.example.test.domain.ExportedContentId fieldcom.example.test.domain.ExportedCo..
[Spring Data JPA] N + 1 쿼리 문제와 JOIN FETCH 이 포스트에서는 ORM을 사용할 때 발생할 수 있는 N + 1 문제에 대해 알아보고 이를 해소하는 방법을 예시를 통해 알아본다. 사용 스택은 Spring Data JPA이다.N + 1 문제N + 1 문제는 첫 번째 쿼리(1)로 가져온 N 개의 데이터에 대해 각각의 연관 데이터를 얻기 위해 N 개의 쿼리(N)가 필요해지는 상황을 의미한다. 이를 그대로 쿼리를 날릴 경우 성능이 영 좋지 못할 것이다. 정의에서 느낄 수 있지만 N + 1 문제는 뜻이 직관적이지 않다. 1 + N이 아닌 이유는 무엇일까... N + 1 문제가 발생할 수 있는 예시 상황을 보고, 어떻게 해결하는지 살펴보자.1:N 관계를 가진 테이블 구조이 예시에서는 experience, experience_mages 두 개의 테이블이 있고, 1:..
OpenAPI를 이용한 백엔드 기술스택 이전 - FastAPI -> 스프링 부트 FastAPI로 개발하던 API를 다시 스프링 부트로 옮길 일이 생겼다. 어쩌다 그렇게 되었는지는 생략하고 옮겨나 보자. 다행히도 요즘 백엔드는 OpenAPI로 API 명세를 통일하기 때문에 그렇게 어렵지는 않다고 한다.redoc에서 명세 다운로드 하기FastAPI의 redoc에 가면 openapi.json을 다운로드할 수 있다. download 버튼을 누르면 openapi.json이 다운로드 되는데, 이거를 전환하려는 스프링 프로젝트의 루트에 넣도록 한다.build.gradle.kts 수정이 포스트는 Gradle - Kotlin 기준으로 설명하므로 kts 스크립트를 수정할 거다. 플러그인 블럭에 openapi generator를 추가해 준다. plugins { ... id("org.ope..
챗지피티와 함께하는 스프링 부트 입문부터 배포까지 이 포스트는 스프링 부트 학습을 입문하는 한 방법으로 챗지피티의 도움을 받아 CRUD 서비스를 만드는 과정을 담았다.잡담2025년 초까지 한국에서 웹 백엔드는 스프링이 대부분을 차지하고 있다. 프로그래머스 설문조사에서는 현업인 응답자의 29%가 스프링을 쓰는 것으로 나타났다.  그렇다. 한국 국적을 가진 개발자는 기본 소양으로 스프링 부트를 할 줄 알아야 한다.  한국 개발 시장은 자바 공화국이라는 밈이 유지되어 스프링 공화국까지 온 것이다. 그러면 기본 소양을 쌓기 위해 스프링을 알아볼까... 그런데 내가 개발해 왔던 환경보다 너무 복잡해서 이해할 수 없었다. 노드 할 때는 대충 npm, yarn에서 받고 파이썬 할 때는 대충 pip으로 받고 유니티 엔진 할 때는 에셋스토어에서 구매 버튼 딸깍이면 할 ..