ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SpringBoot] SpringBoot 되새기기 프로젝트 3일차 (2020/05/13)
    Server/SpringBoot 2020. 5. 13. 15:34

    - 롬복은 코드를 단순화시켜 주지만 필수 어노테이션은 아님

    - JPA를 사용할 때 DB 데이터 작업 경우 실제 쿼리날리기 보다 Entity 클래스의 수정을 통해 작업 이루어짐

     

    JPA에서 제공하는 어노테이션 몇 가지

    -> @Entity -  테이블과 링크될 클래스, 기본값으로 클래스의 카멜케이스 이름을 (_)으로 테이블 이름 매칭

    -> @Id - 테이블의 PK, Spring Boot 2.0에서는 GenerationType.IDENTITY 옵션 추가해야 auto_increment가능

    -> @Column - 선언하지 않아도 클래스의 필드는 모두 컬럼이 됨 but 사용하는 이유는 기본값 외 추가 옵션있을 때 사용

     

    롬복 라이브러리 

    -> @NoArgsConstructor - 기본 생성자 자동 추가, public Posts(){} 와 같은 효과

    -> @Getter - 클래스 내 모든 필드의 Getter 자동 생성

    -> @Builder - 해당 클래스의 빌더 패턴 클래스 생성, 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함 

     

    Entity 클래스에서는 절대 Setter 메소드 만들지 않음

    why? 해당 클래스의 인스턴스 값들이 언제 어디서 변해야하는지 코드 사응로 구분 못함

    따라서. - 명확히 목적과 의도를 나타낼 수 있는 메소드 추가하여 필드 값 변경

     

    그렇다면 setter가 없는 상황에서 어떻게 DB에 값을 삽입할까?

    -> 생성자를 통해 최종값을 채우고 DB에 삽입하는 것이 기본구조

    -> 값 변경 필요시 public 메소드 호출하여 변경

     

    @Builder통해 제공되는 빌더 클래스

    -> 생성 시점에 값을 채워주는 역할은 생성자와 같음

    But. 생성자는 지금 채워야 할 필드가 무엇인지 명확히 지정x

    -> 빌더는 어떤 필드에 어떤 값을 넣어야 하는지 명확하게 인지 가능

    /*예시*/
    Example.builder()
    	.a(a)
        .b(b)
        .build();

     

    Repository

    -> JPA에서 database에 접근하게해줄 interface

    -> 인터페이스 생성후 JpaRepository<Entity클래스, PK타입>을 상속하면 기본 CRUD가 자동생성

    -> ibatis나 MyBatis에서 Dao라고 불리는 DB Layer 접근자

     

    resources폴더 아래에 application.properties 생성해서 아래 코드 입력하면 콘솔에서 쿼리로그 확인 가능

    /* src/main/resources/application.properties */
    spring.jpa.show_sql=true
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

     

    API 만들 때 필요한 3가지 클래스

    Dto - Request 데이터를 받음

    Controller - API 요청을 받음

    Service - 트랜잭션, 도메인 기능 간의 순서 보장

    Domain에서 비즈니스 처리 담당!!!

     

    스프링에서 Bean을 주입받는 방식

    -> @Autowired

    -> setter

    -> 생성자

     

    가장 권장되는 방식 : 생성자 방식

    생성자로 Bean 객체를 받도록 하면 @Autowired와 동일한 효과

    final이 선언된 모든 필드를 인자값으로 하는 생성자를 @RequestArgsConstructor에서 해결해줌

     

    Entity 클래스를 Request/Response 클래스로 사용해서는 안됨

    why? Entity클래스는 DB와 맞닿은 핵심 클래스 , Entity는 자주변경xxxx

            Request와 Response용 Dto는 View를 위한 클래스라 자주변경필요 

     

    View Layer와 DB Layer 역할 분리를 철저히!!

     

     

     

Designed by Tistory.