개발 (66) 썸네일형 리스트형 [JPA 활용2 스터디] week 7 API 개발 기본 Controller에서 Entity를 바로 받거나 반환하면 안되는 이유 예) saveMember(@RequestBody @Valid Member member) // Member는 Entity 1) 요청마다 Member 내 validation의 조건이 달라진다. : 회원가입시 전화번호가 필수지만, 회원 수정시 전화번호는 null 가능. 2) Entity의 column명 변경시, api의 스펙이 변경되는 문제 발생. 3) parameter 파악 위해 Dto만 열어보면 되는데, Entiy 받으면 api 스펙 문서를 열어봐야함. -> 요청 파라메터/응답은 dto를 쓰자 4) 필요하지 않은 필드 (예. member의 order)도 가져오므로 성능 이슈 참고: @Data 애노테이션 사용 유무 En.. [JPA] 쿼리 언어 문법 (기본, 중급) 기본: JPA에서 지원하는 쿼리 방법 - JPQL : 객체 지향 쿼리 : 동적쿼리를 짜는데 불편. -> 대책: Criteria (실무에서 안 쓴다.) - QueryDSL * 특수한 경우만 JDBC API, MyBatis, SpringJdbcTemplate 함께 사용 Note OneToMany 관계 설정시, 메모리 낭비가 있더라도 바로 초기화하자. @OneToMany(mappedBy = "team") private List members = new ArrayList(); @Embedded, @Embedable 1) @Embedded: Entity내 객체에 붙이기 (예. Person 내 Address에) 2) @Embedable: 클래스에 붙이기 (예. Address class 위) 기본: JPQL 문법 기.. [이펙티브 자바 스터디] 아이템 41-46 아이템 41. 정의하려는 것이 타입이라면 마커 인터페이스를 사용해라. 마커인터페이스(marker interface) - 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스. 아무 메서드도 없다. - 예. Seria 마커 인터페이스가 마커 애너테이션 보다 나은점. - 컴파일 타임에 타입 불일치 체크 가능 : 마커 인터페이스는 구현 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있다 cf. 마커 에너테이션은 불가능. - 마커 인터페이스는 적용 가능 대상을 세밀하게 제한 가능하다 : 마킹하고 싶은 클래스에만 인터페이스 구현하면 됨. cf. 애너테이션은 모든 타입에 달 수 있다. (클래스, 인터페이스, 열거타입 등) TODO: 마커 인터페이스, 마커 애너테이션 구현 후 비교하는 코드 추가 마커 애.. [JPA 기본] 9. 값 타입 주요 개념 1. 임베디드 타입 2. 값 타입 컬렉션 JPA의 데이터 타입 1. 엔티티 타입 - @Entity 애노테이션 붙는 객체 - 데이터 변해도 PK 사용하여 추적 가능. (예. 6번 학생의 키가 바뀌어도, 6번 학생은 찾을 수 있다.) 2. 값타입 - 자바 기본 타입, 객체 (int, Integer, String...) - 식별자 없다. 값 변경시 추적 불가 - 예. 100 -> 200 으로 변경 값타입 종류 1. 기본 값 타입 - 기본 타입 (int, double) / 래퍼 클래스 (Ineger, Long) / String ** 래퍼 클래스나 String은 공유 가능하지만 (= 같은 주소값 가지지만) setter 제공하지 않아서 변경 불가. - 생명주기를 엔티티에 의존 (예. 회원 삭제시 나이 삭.. [JPA 기본] 8. 프록시와 연관관계 정리 프록시 프록시 등장 배경 : Member가 Team의 정보를 가지고 있다. 그런데 Member의 정보를 조회할 때 Team도 같이 조회되는 비효율 발생 해결법: Proxy, 지연 로딩 em.find vs em.getReference em.find(): DB에서 실제 엔티티 조회 em.getReference: DB 조회를 미룬다. 대신 프록시 객체 조회 프록시 특징 - 실재 클래스 상속 받아 만듦. - 프록시 객체는 실제 객체의 참조 보관 - 처음 사용시 한 번만 초기화 프록시 주의 사항 - 프록시 객체를 초기화할 경우, 실제 엔티티로 바뀌지 x. - 타입 체크시 == 비교 대신 instance of 사용 - 영속성 컨텍스트에 내가 찾는 엔티티가 있다면, em.getReferene()도 실제 엔티티 반환 .. [JPA 기본] 7. 고급 매핑 1. 상속관계 매핑 - 객체의 상속 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑 1.1 테이블 구성 전략 (이론) 조인 전략 ITEM의 하위에 ALBUM, MOVIE, BOOK 테이블 둠. ITEM 테이블의 DTYPE에 따라 조인할 테이블 결정 단일 테이블 전략 ITEM 테이블에 하위 테이블의 속성 값(ARTIST, AUTHOR등)을 모두 넣음. 보통 성능 때문에 사용 클래스별 테이블 전략 공통요소(NAME, PRICE)를 각 테이블이 지님. 예. ITEM 테이블 없이 3개의 테이블 가져감 (ALBUM, MOVIE, BOOK) 2. 슈퍼타입-서브타입을 JPA에서 매핑하는 방법 extends 키워드 사용 public class Album extends Item 3. 각 전략별 특징 상세 내용 조인 전략 .. [JPA 기본] 6. 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 1. 다중성 예) ManyToOne, OneToMany, OneToOne, ManyToMany 2. 단방향인지 양방향인지 3. 연관관계의 주인 다중성 - 주의: ManyToMany는 실무에서 쓰면 안된다. - ManyToOne, OneToMany를 주로 쓰며, OneToOne은 가끔 나온다. 양방향 vs 단방향 - 테이블은 외래 키 하나로 양쪽 조인 한다. 따라서 방향이라는 개념이 없다. - 반면 객체는 참조용 필드로 참조 가능. 따라서 방향 개념 존재 (양방향, 단방향) 연관 관계의 주인 객체 2개가 양방향 관계를 맺을 때, 둘 중 테이블의 외래키를 관리할 곳을 찾아야 함. - 주인 : 외래 키를 관리 - 주인 반대편: 외래 키 영향 x. 단순 조회만 가능. 1. 다대일.. [클린코드 10장] 클래스 클래스 체계 변수 public static private static private 함수 공개 함수 비공개 함수 비공개 함수는 자신을 호출하는 공개함수 직후에 넣자. 캡슐화 캡슐화를 최우선시 하자. 테스트 코드에 꼭 필요하다면 함수나 변수를 protected로 선언하거나, 패키지 전체로 공개할 수도 있다. 클래스 생성시 고려할 사항 1. 클래스는 작아야 한다. 얼마나 작아야 하는가? 위 질문이 떠오른다면, 해법은 간단하다. 클래스가 맡은 책임을 세자. 책에서는 SuperDashboard 클래스를 예시로 들었다. 내가 생각한 예제는 주방 가전 제품이다. 만약 아래의 기능을 모두 가진 가전 제품이 있다면 어떨까 밥을 한다 빵을 굽는다. 달걀 후라이도 가능하다. 빙수를 만들 수 있다. 기능이 너무 많다 보니,.. 이전 1 2 3 4 5 ··· 9 다음