전체 글

배움을 기록합니다.
·JPA
01. 양방향 매핑 양방향 매핑 양방향으로 참조할 수 있는 것을 양방향 매핑이라고 한다. 테이블 연관 관계에서는, Team 입장에서 속한 Member를 알려면 Team의 TEAM_ID와 Member의 TEAM_ID를 조인하면 된다. 반대로 Member 입장에서 속한 Team을 알려면 Member의 TEAM_ID와 Team의 TEAM_ID를 조인하면 된다. 결국 같은 말이다. 즉 테이블 연관관계에서는, 외래키 하나로 양방향이 존재하는 것이다. 하지만 객체 연관관계의 경우에는 그렇지 않다. 양방향 객체 연관관계 양방향 객체 연관관계를 그림으로 나타내면 다음과 같다. 이를 코드로 나타내면 다음과 같다. Member 엔티티는 단방향과 동일하고, Team 엔티티만 Member를 List 형식으로 추가하면 된다. ..
·JPA
01. 간단한 용어 정리 방향 (Direction) : 단방향, 양방향 다중성 (Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 연관관계의 주인 (Owner) : 객체 양항뱡 연관관계는 관리 주인이 필요하다. 02. 연관관계가 필요한 이유 객체를 테이블에 맞추어 모델링 하는 경우 즉, 연관관계가 없는 객체를 말한다. 이 경우, 참조 대신에 외래 키를 그대로 사용한다. Entity는 다음과 같이 작성할 수 있다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column..
·JPA
01. 요구사항 추가 정리 요구사항은 다음과 같다. 회원은 일반 회원과 관리자로 구분된다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명하는 필드가 있어야 하고, 이 필드는 길이 제한이 없다. 02. 요구사항에 따른 코드 및 Mapping Annotation 정리 요구사항에 따른 코드 다음은 Member 클래스이다. @Entity @Getter @Setter public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIM..
·JPA
01. 데이터베이스 스키마 자동 생성 데이터베이스 스키마 자동 생성 DDL(Data Definition Language)을 애플리케이션 실행 시점에 자동으로 생성한다는 뜻이다. 테이블 중심보다는 객체 중심이다. 데이터베이스 방언을 활용하여 데이터베이스에 맞는 적절한 DDL이 생성된다. 생성된 DDL은 개발 장비에서만 활용해야 한다. 운영서버에서는 사용하지 않기를 적극 권장하고, 적절히 다듬은 후 사용해야 한다. 02. 데이터베이스 스키마 자동 생성의 속성 속성은 다음과 같다. 옵션 설명 create 기존테이블 삭제 후 다시 생성 (drop + create) create-drop create와 동일하지만 종료 시 테이블 drop update 변경된 내용만 반영 validate 엔티티와 테이블이 정상 매핑되..
·JPA
01. @Entity @Entity란? @Entity가 붙은 클래스는 JPA가 관리한다. JPA로 테이블과 매핑할 클래스는 @Entity를 꼭! 붙여야 한다. @Entity 사용 시 주의할 점 파라미터가 없고 접근 지정자는 public 혹은 protected인 기본 생성자가 필수로 있어야 한다. final 클래스, inner 클래스, enum, interface 에 사용하면 안된다. 저장할 필드에 final을 사용하면 안된다. @Entity의 속성 name JPA에서 사용할 엔티티 이름을 지정한다. 기본값은 클래스 이름을 그대로 사용하는 것이다. 같은 클래스 이름이 없으면 가급적 기본값을 사용하는 것이 좋다. 02. @Table @Table이란? 엔티티와 매핑할 테이블을 지정하는 것이다. @Table의 ..
·TIL
요구사항 지난번에는 ConstraintViolationException이 발생했을 때 응답을 커스터마이징 했다. 하지만 Exception은 하나의 애플리케이션에서 여러 개가 발생할 수 있다. 이 때 마다 응답 형식이 다르면 일관성이 없어보일 수 있지 않을까? 라는 생각을 했다. 그래서 이번에는 Exception에 대한 응답 형식을 만들고, 해당 형식에 맞게 응답을 반환하는 것을 구현하고자 한다. 구현 먼저, global 패키지의 exception 패키지에 enum 타입인 ErrorCode를 작성한다. ErrorCode에는 세 개의 속성이 있는데, code는 오류 코드를 식별하는 문자열로, message는 응답에 포함되는 오류 메시지, status는 HTTP 응답에서 사용될 상태 코드이다. package ..
·TIL
요구사항 프론트에서 받은 값을 백엔드에서 처리할 때, 값이 비어있는 경우에 대한 검증을 하고 오류 메세지를 응답으로 내려주고자 한다. 다음과 같은 코드가 있다. 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..
·JPA
01. 준영속 상태 준영속 상태란? 영속 상태에서 준영속 상태로 바뀌면, 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)됨을 말한다. 따라서 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다. 영속 상태란? JPA가 관리하는 상태로, 1차 캐시에 올라간 상태이다. 02. 준영속 상태로 만드는 방법 1) em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다. 2) em.clear() : 영속성 컨텍스트를 완전히 초기화한다. 3) em.close() : 영속성 컨텍스트를 종료한다. 03. 준영속 상태 예시 코드 detach 예시 코드 em.detach(member) 코드는 더 이상 member를 JPA에서 관리하지 않도록 하는 것이다. detach 했기 때문에 update..
coding-orange
코딩하는 오렌지