728x90 반응형 Spring137 @Builder 빌더패턴 @Builder (빌더패턴) 을 왜 사용하는지, 어떻게 사용하는지 알아보려고 한다. 아주 간단하게 정리했으니, 좀 더 깊이 알고싶으면 다른 블로그를 참고하면 좋을 것 같다. @Builder 는 Lombok 라이브러리를 설치해야만 사용 할 수 있다. 그냥 생성자를 사용하면 될것 같은데 굳이 왜 @Builder를 사용할까?? 예를 들어 어느 개발자가 매개변수의 순서를 바꿀 수 있다. 아래 예를보자 생성자의 매개변수 순서는 title, content 이다. 생성자를 사용하는 순서도 title:"제목입니다" , content:"내용입니다" 로 알맞게 들어갔다. 만약 생성자 매개변수의 순서를 바꾸면 어떻게될까?? 생성자 매개변수 title 과 content 의 순서를 바꾸었다. 생성자를 사용하는 곳에서는 그대로 .. 2022. 10. 1. HTTP 메서드 종류 HTTP 는 요청 메서드를 정의하여, 주어진 리소스에 수행하기를 원하는 행동을 나타낸다. 종류 기능 GET 특정 리소스의 표시를 요청. 오직 데이터를 조회(받기)만 한다. POST 특정 리소스에 엔티티를 제출할 때 사용(등록) PUT 목적 리소스 모든 현재 표시를 변경한다. PATCH 리소스의 부분만 수정한다. DELETE 특정 리소스를 삭제 HEAD GET 메서드와 동일한 응답을 요구하지만, 응답 본문을 포함하지 않는다 OPTIONS 해당 메서드를 통해 시스템에서 지원되는 메서드 종류를 확인할 수 있다. CONNECT 웹 서버에 프락시 기능을 요청할 때 사용 TRACE 목적 리소스의 경로를 따라 메시지 테스트를 한다.(루프백) 멱등성 : 한번 요청하든 여러번 요청하든 그 결과가 같다. PUT으로 예를 .. 2022. 10. 1. JPQL - Query타입, 결과조회, 파라미터, 프로젝션, 페이징, 조인 JPQL( Java Persistence Query Language ) JPQL 은 객체지향 쿼리 언어로, 테이블이 대상으로 하는 것이 아닌, 엔티티 객체를 대상으로 쿼리한다 JPQL 은 작성하고 실행하면 SQL 로 변환된다. Member 은 엔티티이다. Member m 처럼 별칭은 필수이다. String jpql = "select m From Member m where m.name like ‘%hello%'"; TypeQuery : 반환 타입이 명확할 때 사용한다. 아래의 코드는 Member.class 로 반환타입이 명확하다. TypedQuery query = em.createQuery("SELECT m FROM Member m", Member.class); Query : 반환 타입이 명확하지 않을때 .. 2022. 9. 27. 즉시로딩 지연로딩 즉시로딩과 지연로딩에 관련해서, JPA 강의에서는 프록시와 마찬가지로 첫 시작을 아래와같은 질문으로 시작한다. Member를 조회할때 Team을 함꼐 조회해야할까? 비즈니스 로직에 따라 다르겠지만, 보통은 항상 함께 조회하지 않고 필요할때만 조회하기를 원할 거라 생각한다. 이 주제의 핵심은, 즉시로딩을 사용하지 않는다 라고 정리할 수 있다 왜 사용하지 않을지 알아보자. - 가급적 지연로딩만 사용하기 - 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생한다. - 즉시 로딩은 JPQL 에서 N + 1 문제를 일으킨다. * 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상 + 아주아주 간단한 프로젝트에서는 즉시로딩을 사용해도.. 2022. 9. 27. JPA 프록시 지연로딩을 이해 하기 위해서는 프록시에 대해 이해해야 쉽게 다가갈 수 있다. 강의에서는 시작을 해당 질문으로 시작한다. " Member 엔티티를 조회할 때 Team 도 함께 조회해야 할까 ? " 해당 질문에 대한 답은 정해져있지 않다. 실제로 비즈니스 로직이 Member 엔티티를 조회할 때 꼭 Team 을 필요로 해야할 수도 있기 때문이다. 하지만, 보통은 같이 사용하지 않는 것이 일반적이다. - 비즈니스 로직에 꼭 필요하지 않다면 Team을 같이 조회할 필요가 없다. - 쿼리 등 낭비가 발생한다. - 해당 낭비를 줄이기 위해, 지연로딩과 프록시로 해결한다. JPA 에서는 em.find () 뿐만 아니라, em.getReference() 메서드도 제공하고 있다. em.find는 DB 를 통해서 실제 엔티.. 2022. 9. 26. 상속관계 매핑 ( @Inheritance , @DiscriminatorColumn ) 관계형 데이터 베이스에서는 상속 관계라는 것은 없다. 다만 슈퍼타입, 서브타입 관계라는 모델링 기법이 있으며 상속관계와 비슷하다. 아래와 같은 관계를 상속관계 매핑으로 나타내는 3가지 방법에 대해 알아보자. 상속관계 매핑의 방법 3가지 매핑방법 어노테이션 설명 조인전략 @Inheritance(strategey = InheritanceType.JOINED) 각각 테이블 단일 테이블 전략 @Inheritance(strategey = InheritanceType.SINGLE_TABLE) 통합 테이블 구현 클래스마다 테이블 전략 @Inheritance(strategey = InheritanceType.TABLE_PER_CLASS) 서브 타입 테이블 1. 조인 전략 - 공통된 부분을 부모처럼 사용하며 extend.. 2022. 9. 23. 연관 관계 매핑 연관관계에서 고려해야할 점은 아래와 같다 1. 다중성 - 일대다 / 다대일 / 다대다 / 일대일 2. 방향 - 단방향 / 양방향 3. 연관 관계의 주인 다중성 - 일대다 ( 1: N ) @OnetoMany - 다대일 ( N:1 ) @ManytoOne - 다대다 ( N:M ) @ManytoMany - 일대일 ( 1:1 ) @ OnetoOne 방향 - 단방향 : 한쪽으로 가는 방향 - 양방향 : 양쪽으로 가는 방향 DB 테이블에서는 외래키(FK) 하나로 조인을 사용해서 양방향으로 쿼리가 가능하다. ** DB 에서는 방향이라는 개념이 없다 객체는 방향의 개념이 존재한다. 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있다. ?? 무조건 양방향 관계를 하면 안될까 ?? - 일반적인 비즈니스에서 엔티.. 2022. 9. 22. 연관 관계가 필요한 이유 연관관계가 필요한 이유 : 협력 공동체를 만들 수 없다. Member.class - 현재 teamId 를 Long 타입으로 가지고 있다. @Entity public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @Column(name = "username") private String name; @Column(name = "team_id") private Long teamId; Team.class @Entity public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; private String name; 객체를 테이블에.. 2022. 9. 21. 유효성 검사(Validation) 유효성 검사 / 데이터 검증 (Validation) - 서비스의 비즈니스 로직이 옳바르게 동작하기 위해 사용되는 데이터에 대한 사점 검증하는 작업 - 데이터의 검증은 여러 계층에서 발생 - 데이터에 대해 의도한 형식의 값이 제대로 들어오는지에 대해 체크하는 과정 일반적인 Validation 은 문제가 많았다. 어플리에킹션 전체적으로 분산이 되어있었고, 코드의 중복이 심하고, 비즈니스 로직에 섞여 추적이 어려웠다. 이런 문제를 해결하기 위해 Bean Validation 프레임워크가 제공되었다. 어노테이션을 통해 다양한 데이터를 검증할 수 있다. 어노테이션 설명 @Size 문자의 길이 조건 @NotNull null 값 불가 @NotEmpty @NotNull + "" 값 불가 @NotBlank @NotEmpt.. 2022. 9. 21. 이전 1 ··· 8 9 10 11 12 13 14 ··· 16 다음 728x90 반응형