
배경 홈페이지에 선거 기능을 추가하고자 API 개발 도중 데이터베이스 설계상 컬럼 2개를 사용하여 복합키를 가지는 테이블을 발견하였습니다. 이전까지의 테이블은 하나의 컬럼을 통해 데이터를 식별하도록 설계하였기에 @Id 어노테이션을 사용하여 간단히 엔티티로 생성할 수 있었지만 복합키를 가지는 경우는 처음 마주쳤기에 이를 해결하는 과정을 정리해보고자 합니다. 복합키 단점 1. FK를 맺을 때 사이드 이펙트가 크다 CREATE TABLE library ( region_no varchar(10), library_name varchar(50), CONSTRAINT PK_library PRIMARY KEY (region_no, library_name) ); CREATE TABLE book ( book_id int,..

메시지 개요 다음과 같이 화면을 구성하였는데 기획자분께서 문구가 마음에 안 든다고 책 목록을 도서 목록으로, 제목을 타이틀로, 작가를 저자로, 요약을 한줄평으로 바꾸자는 요청을 합니다. 저런 문구들이 HTML에 하드 코딩되어 있다면 일일이 바꿔야 하는 참사가 발생합니다. 화면이 적다면 일일이 바꾸는 것도 나쁘지 않습니다. 하지만 비슷한 맥락을 가진 화면들이 무수히 많이 존재한다면... 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능이 메시지 기능입니다. 메시지에 대한 파일을 작성 후 가져와서 사용한다면 변경과 관리에서 유연함을 가질 수 있습니다. 스프링에서는 messages.properties에 위에 보이는 형식처럼 key, value 형태로 작성하여 메시지를 관리할 수 있습니다. // messag..

Spring Boot 프로젝트를 진행하면서 웹 브라우저를 통해 API의 결과를 확인하고자 하였습니다. 확인하고자 했던 API는 아래와 같습니다. @GetMapping("/api/v1/posts/{id}") public PostsResponseDto findById(@PathVariable Long id) { return postsService.findById(id); } URI를 통해 ID값을 전달받아 해당 ID에 해당하는 Posts 엔티티를 Dto로 변환 후 반환하게 되는 아주 간단한 API입니다. Dto를 반환하기에 웹 브라우저에서 해당 URI로 접근하여도 JSON 형태로 올바른 결과를 확인할 수 있을 것이라 기대하였습니다. 하지만 예상과 다르게 다음과 같은 화면과 로그를 보게 되었습니다. 406 N..

SQL을 사용할 때 연관관계가 있는 다른 테이블의 정보를 이용하려고 한다면 JOIN을 사용해야 합니다. INNER JOIN, OUTER JOIN과 같은 JOIN 형태가 존재합니다. 그렇다면 FETCH JOIN은 무엇을 의미할까요? Fetch Join 페치 조인은 SQL에서 이야기하는 조인의 종류는 아닙니다. JPQL에서 성능 최적화를 위해 제공하는 조인의 종류입니다. 이를 설명하기 전에 JPQL에 대해 간략히 설명하겠습니다. JPQL(Java Persistence Query Language) SQL이 DB에 있는 테이블을 조회하는 쿼리라고 한다면 JPQL은 엔티티 객체를 조회하는 객체지향 쿼리를 의미합니다. 문법은 SQL과 비슷하고 SQL이 제공하는 기능을 유사하게 지원합니다. public class M..

문제 자바 프로젝트에서 JPA에 대해 실습하던 도중 JPA가 Entity를 인식하지 못하는 문제가 발생하였습니다. hibernate와 h2 의존성도 잘 가져오고 persistence.xml도 참고하던 강의의 내용을 복사하였기에 잘 작성하였습니다. @Entity 어노테이션도 잘 작성하였지만 public class Main { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(..