01. @Entity @Entity란? @Entity가 붙은 클래스는 JPA가 관리한다. JPA로 테이블과 매핑할 클래스는 @Entity를 꼭! 붙여야 한다. @Entity 사용 시 주의할 점 파라미터가 없고 접근 지정자는 public 혹은 protected인 기본 생성자가 필수로 있어야 한다. final 클래스, inner 클래스, enum, interface 에 사용하면 안된다. 저장할 필드에 final을 사용하면 안된다. @Entity의 속성 name JPA에서 사용할 엔티티 이름을 지정한다. 기본값은 클래스 이름을 그대로 사용하는 것이다. 같은 클래스 이름이 없으면 가급적 기본값을 사용하는 것이 좋다. 02. @Table @Table이란? 엔티티와 매핑할 테이블을 지정하는 것이다. @Table의 ..
요구사항 지난번에는 ConstraintViolationException이 발생했을 때 응답을 커스터마이징 했다. 하지만 Exception은 하나의 애플리케이션에서 여러 개가 발생할 수 있다. 이 때 마다 응답 형식이 다르면 일관성이 없어보일 수 있지 않을까? 라는 생각을 했다. 그래서 이번에는 Exception에 대한 응답 형식을 만들고, 해당 형식에 맞게 응답을 반환하는 것을 구현하고자 한다. 구현 먼저, global 패키지의 exception 패키지에 enum 타입인 ErrorCode를 작성한다. ErrorCode에는 세 개의 속성이 있는데, code는 오류 코드를 식별하는 문자열로, message는 응답에 포함되는 오류 메시지, status는 HTTP 응답에서 사용될 상태 코드이다. package ..
요구사항 프론트에서 받은 값을 백엔드에서 처리할 때, 값이 비어있는 경우에 대한 검증을 하고 오류 메세지를 응답으로 내려주고자 한다. 다음과 같은 코드가 있다. api/account/check-id?id=thisIsId 경로로 요청이 들어오면 응답으로 불린 타입을 리턴해 주는 Controller 를 작성한 것이다. package kr.go.data.member.controller; import jakarta.validation.constraints.NotEmpty; import kr.go.data.member.service.MemberServiceImpl; import org.springframework.http.HttpStatus; import org.springframework.http.Respons..
01. 준영속 상태 준영속 상태란? 영속 상태에서 준영속 상태로 바뀌면, 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)됨을 말한다. 따라서 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다. 영속 상태란? JPA가 관리하는 상태로, 1차 캐시에 올라간 상태이다. 02. 준영속 상태로 만드는 방법 1) em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다. 2) em.clear() : 영속성 컨텍스트를 완전히 초기화한다. 3) em.close() : 영속성 컨텍스트를 종료한다. 03. 준영속 상태 예시 코드 detach 예시 코드 em.detach(member) 코드는 더 이상 member를 JPA에서 관리하지 않도록 하는 것이다. detach 했기 때문에 update..
01. 플러시의 개념 플러시란? 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것이다. 플러시라는 용어 때문에 혼동이 올 수 있는데, 영속성 컨텍스트를 비우는 것이 절대 아니다. 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화 하는 것이다. 트랜잭션이라는 작업 단위를 기준으로, 커밋 직전에만 동기화를 하면 된다. 플러시가 발생한다는 것은 무엇일까? 변경을 감지하는 것이다. 수정된 엔티티 쓰기 지연 SQL 저장소에 등록하는 것이다. 쓰기 지연 SQL 저장소의 쿼리문(등록, 수정, 삭제)을 데이터베이스에 전송하는 것이다. 02. 영속성 컨텍스트를 플러시하는 방법 플러시하는 방법 em.flush()를 직접 호출한다. (수동) 트랜잭션 커밋 시 플러시가 자동 호출된다. JPQL 쿼리를 실행하면 플러시가 ..
이 글은 https://spring.io/guides/gs/rest-service/ 를 따라하며 스프링으로 RESTful 웹 서비스를 만드는 과정을 보여줄 것이다. 01. 우리가 만들 것은? http://localhost:8080/greeting 에서 HTTP GET 요청을 받는 서비스를 만들 것이다. 이 요청에 대해 JSON 형식으로 다음과 같은 응답을 반환할 것이다. { "id" : 1, "content" : "Hello, World!" } 아래와 같이 쿼리 스트링에 있는 선택적 파라미터인 name으로 커스터마이징 할 수 있다. http://localhost:8080/greeting?name=User name 의 값은 기본값인 World를 오버라이딩하고, 아래와 같이 응답에 반영된다. { "id" :..
01. 영속성 컨텍스트의 개념 JPA에서 가장 중요한 것은 객체와 관계형 데이터베이스의 매핑하기, 그리고 영속성 컨텍스트라고 할 수 있다. EntityManagerFactory와 EntityManager의 동작 사용자로부터 요청이 들어오면 웹 어플리케이션에서, EntityManagerFactory가 EntityManager를 생성하고, EntityManager는 커넥션 풀에 있는 Connection 객체를 사용하여 DB에 접근한다. 영속성 컨텍스트란? JPA를 이해하는데 가장 중요한 용어 중 하나로,엔티티를 영구 저장하는 환경이라는 뜻이다. 논리적인 개념으로 눈에 보이지 않는다. EntityManager.persist(entity); 처럼, EntityMananger를 통해 영속성 컨텍스트에 접근이 가능..
01. JPA 구동 방식 Persistence로 META-INF/persistence.xml를 읽어 설정 정보를 조회한다. EntityManagerFactory 라는 클래스를 생성한다. 필요할 때 마다 EntityManager 를 생성한다. 02. 객체와 테이블을 생성하고 매핑하기 Annotation @Entity 는 JPA가 관리할 객체임을 명시한다. @Id 는 데이터베이스의 Primary Key와 매핑할 때 사용한다. Member 클래스 작성하기 @Entity @Getter @Setter public class Member { @Id private Long id; private String name; } @Getter와 @Setter를 사용하면 다음과 같이 길게 작성해야 하는 코드를 자동으로 만들어준..