2018년 4월 20일 금요일

패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 19일차(Spring Boot, gradle, jpa, QueryDSL)

  • URL, URI
    • URI는 URL을 포함하고 있다. 
    • URI는 유니크 하다.
  • Web API 디자인 가이드
    • URI는 정보의 자원을 표현해야 한다.
    • 자원에 대한 행위는 HTTP Method로 표현해야 한다.
    • 단어는 단수보다는 복수로표현한다.
    • URI 마지막 문자로 슬래시 구분자(/)를 포함하지 않는다.
    • 하이픈(-)은 URI가독성을 높일때 사용
    • 언더바(_)는 사용하지 않는다.
    • URI경로는 소문자만 사용한다. RFC 3986(URI문법형식)은 URI스키마와 호스트를 제외하고는 대소 문자를 구별한다.
    • 파일 확장자는 URI에 포함시키지 않는다. Accept Header를 사용한다.
    • REST API에서 HATEOAS를 사용하지 않으면 Web API 부른다.
    • 스타일 : 제약조건의 집합을 의미
  • Spring Boot 2.0(JDk 1.8이상만 지원, Hibernate 5.0)
    • 기본적으로 jsp는 지원하지 않는다.
    • Tomcat을 설치할 필요가 없다.
    • tomcat을 설치하고, Spring Boot애플리케이션을 배포할 수도 있다. 이때는 jsp가 사용가능하다.(추천하지않는다.)
    • 실행가능한 jar파일이 만들어진다.(java -jar 파일명.jar) JVM만 있으면 구동된다.
    • 어떤 라이브러리가 있으면 라이브러리에 대한 설정을 자동으로 해준다.
    • H2 dbms에 대한 의존성을 추가하면, Spring boot는 in memory형태로 자동으로 Datasource를 설정한다.
    • @SpringBootApplication 가 있으면 base package 이하로 component를 찾는다. 많을 설정을 자동으로 해주고 있다.
    • Spring Boot는 application.properties 이나 application.yml 파일을 어플리케이션에서 자동으로 읽어서 매핑시켜준다.(Snake YAML 라이브러리를 내장)
    • Spring Boot는 schema.sql, data.sql 파일이 있으면 자동으로 실행시켜준다.
    • Spring Security가 의존성에 추가되어있으면, 자동으로 인증관련 설정이 된다.( 기본 사용자 id : user, Using generated security password: 콘솔에서 확인)
    • Spring Data JPA의 JpaRepository는 인터페이스를 준비하기만 하면, 자동으로 클래스를 만들고 Bean을 생성한다.
    • 프로젝트
      • Spring Data JPA + QueryDSL
      • Spring Security
      • Gradle
      • SPRING INITIALIZR(web, devtools, jpa, mysql, security, Thymeleaf(비동기))
      • H2 Database
  •  ORM JPA
    • ORM이란 객체와 관계형 데이터베이스를 매핑하는 것이다.
    • JPA는 표준 명세이다.
    • 하이버네이트가 먼저 나왔다. 내부적으로는 Hibernate를 구현하고 있다.
    • (객체) - (Table 컬럼 <-> DMBS) 의 관계를 연결해 주는것
    • 영속성을 가진다.
    • 내부적으로 sql을 만든다.
    • JDBC API를 활용한다
    • DMBS에 에 맞춰서 구동된다.
    • JPQL은 SQL과 유사하지만 객체지향 언어이다.
    • JPQL의 오타문제를 해결하기위해 QueryDSL가 나왔다.
    • QueryDSL
      • 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크
      • 타입에 안전한 방식으로 HQL 쿼리를 실행하기 위한 목적으로 만들어졌다.
      • Fluent API를 이용하여 쿼리를 생성할 수 있다.
        • IDE의 코드 자동 완성 기능 사용
        • 문법적으로 잘못된 쿼리를 허용하지 않음
        • 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음
        • 도메인 타입의 리팩토링을 더 잘 할 수 있음
      • Maven과 gradle에 QueryDSL 설정이 있으면 Book 엔티티가 있으면 컴파일할때 QBOOK 파일을 만들어 준다. QBOOK클래스 파일을 이용해서 QueryDSL을 사용한다.
    • SQL입력할때 오타문제를 해결하기 위해 JOOQ가 나왔다.
    • 사용하는 이유.
      • 패러다임 불일치 해결
      • SQL 중심적인 개발에서 객체 중심으로 개발
      • 생산성
      • 유지보수
      • 성능
      • 데이터 접근 추상호와 벤더 독립성
      • 표준
  • JPA 실습
    • 클래스는 Serializable를 구현해야 한다.
    • 다음과 같은 애노테이션이 설정되어 있어야 한다.
      • javax.persistence.Entity 애노테이션
      • javax.persistence.Table 애노테이션
        • 엔티티와 연관을 맺는 테이블 정보를 설정한다.
      • javax.persistence.Id
        • table이 라면 primary key로 생각하면 된다.
      • javax.persistence.GenerationType
        • 자동으로 id를 생성하겠다.
        • DBMS마다 id를 생성하는 방법이 다르다.(DMBS따라서 자동으로 지원)
        • ex) Oracle : sequence객체를 사용
      • javax.persistence.GeneratedValue
        • jpa를 사용할 경우 자동으로 생성되는 id를 주는 것이 효율적
    • JpaRepository 인터페이스가 제일 중요하다
    • JpaRepository를 상속
  • Gradle
    • gradle clean
    • gradle build 
    • gradle build -x test
      • build는 수행하는데 test 빼고
    • gradle compileQuerydsl
      • target / java소스폴더 / QUser 클래스 생성
  • Spring boot 테이블 관련 설정
    • 스프링 부트 애플리케이션이 테이블을 자동으로 생성 삭제 한다.
    • chema.sql에는 테이블 삭제, 생성관련된 sql을 넣는다.
    • data.sql도 애플리케이션이 실행될때마다 자동으로 실행한다.sample data를 넣는다.
    • properties로 설정하면 spring.java.hibernate.ddl-auto=create-drop과 같다.
      • ddl-auto : 테이블 생성 및 삭제여부
      
      spring:
        jpa:
          hibernate:
            ddl-auto: create-drop
      
  • @RestController
    • spring 4.0 이전에는 다음의 애노테이션을 붙였다.
      @Controller, @ResponseBody
    • 그냥 @Controller가 붙은 클래스의 메소드가 리턴하는 것은 view 이름이었다. @Controller, @ResponseBody가 붙어있을 경우에는 리턴하는 값이 출력값이다. 
    • 객체를 브라우저에게 알맞게 출력하기 위해서 사용하는 것이 MessageConverter다. 빈으로 여러개가 등록되어있다. Spring boot에서는 기본으로 설정되어 있다. 하지만 맘에안들때가 있으면 사용자가 바꿔야 한다.
  • vaadin 공부해보기
Share:

0 개의 댓글:

댓글 쓰기