티스토리 뷰
한달쓰기 26일차
민턴 끝나고 회식이 급잡혀서 술마시러 가는중에 적는
다.
오늘 부지런히 일어나서 신림에서 아는동생이랑 스터디
하고 삼겹살 먹고 바로 운동갔다가 술마시러 가는중이다
밧데리도 별로 없는관계로 공부하면서 정리한 내용으로
대체하겠다.
# 11장 웹 어플리케이션 제작
## JPA를 이용해 웹 어플리케이션을 제작하라!
1. 스프링 프레임워크와 JPA 를 사용해서 웹 어플리케이션을 개발할 수 있도록 개발환경을 설정
2. 요구사항을 분석해서 도메인 모델과 테이블을 설계하고 실제 어플리케이션 기능을 구현
나의 개발환경 -> 책과다른 다른 부분만
- 빌드 : 메이븐 -> 그래들
- Spring boot
## 11.1 프로젝트 환경설정
```groovy
// 프로젝트에서 필요로하는 의존성 라이브러리들 추가해줬다
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-web’
// Spring ORM
implementation ‘org.springframework:spring-orm:5.2.1.RELEASE’
// JPA, 하이버 네이트
implementation ‘org.hibernate:hibernate-entitymanager:5.4.8.Final’
//커넥션 풀
implementation 'org.apache.tomcat:tomcat-jdbc:9.0.27'
// H2 데이터 베이스
runtimeOnly 'com.h2database:h2' // h2 는 런타임시에만 필요
// WEB
runtimeOnly 'javax.servlet:jstl:1.2'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.27'
compileOnly 'org.projectlombok:lombok' // lombok은 컴파일시에만 필요하기때문에 compileOnly
annotationProcessor 'org.projectlombok:lombok' //어노테이션 기반
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
```
- application.yml 에 디비 접속 정보 추가 및 mvc prefix, suffix 추가
```
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:jpashop # JVM안에서 동작하는 인 메모리 데이터베이스를 사용한다.
username: sa
password:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
# H2 데이터베이스를 서버 모드로 접근하려면 url속성을 아래처럼 변경해주면 된다.
# jdbc:h2:tcp://localhost/~/jpashop:MVCC=TRUE
```
- JPA 설정
- 스프링 프레임 워크에서 JPA를 사용하려면 스프링 프레임워크가 제공하는 LocalContatinerEntityManagerFactoryBean을 스프링 빈으로 등록해야 한다.
- com.example.jpastudy.config.EntityConfig.class
- 여기서 필요한 설정을 다 할 수 있기 때문에 persistence.xml이 없어도 동작한다.
- 책에서는 스프링으로 진행을 하는데 나는 spring boot기에 spring data jpa를 추가하고 설정정보들은 application.yml에 책에 나온 설정들을 적어주겠다
```
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:jpashop # JVM안에서 동작하는 인 메모리 데이터베이스를 사용한다.
# H2 데이터베이스를 서버 모드로 접근하려면 url속성을 아래처럼 변경해주면 된다.
# jdbc:h2:tcp://localhost/~/jpashop:MVCC=TRUE
username: sa
password:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
show_sql: true
format_sql: true
use_sql_comments: true
id:
new_generator_mappings: true
hbm2ddl:
auto: create
logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace #SQL 문 중 물음표로 표기된 부분을 하이버네이트에서는 바인드 파라미터라고 한다. 이 바인드 파라미터를 출력해준다
```
- 하이버 네이트 속성 설정
- dialect : 방언 설정
- show_sql : 실행하는 SQL을 콘솔에 출력한다.
- format_sql : SQL을 보기좋게 정리해서 출력한다.
- use_sql_comments : SQL을 출력할 때 어떻게 실행된 SQL인지 또는 사용자가 설정한 코멘트를 남긴다.
- id.new_generator_mappings: JPA에 맞춘 새로운 ID 생성 방법을 사용한다. 하이버네이트 레거시를 운영하는 것이 아니면 항상 true로 설정해야한다.
- hbm2ddl.auto : 애플리케이션이 시작될 때 테이블과 기타 DDL을 자동으로 생성한다. 4가지 옵션에 대해 알아보자
- create : 기존 DDL 을 제거 하고 새로 생성한다.
- create-drop: create 와 같은데 애플리케이션을 종료할 때 생성한 DDL을 제거한다.
- update : 현재 데이터베이스 DDL 과 비교해서 변경사항만 수정한다.
- validate : 현재 엔티티 매핑 정보와 데이터베이스 스키마가 같은지 비교한다. 만약다르면 경고를 남기고 애플리케이션을 실행하지 않는다. 이설정은 DDL 을 변경하지 않는다.
### 로컬이나 개발단계에서 ddl auto옵션을 create로하지 개발환경, 운영환경에서는 절대하면 안된다 따로 설정하지 않으면 default : none
- 참고
- [스프링 부트 Auto-configuration과 JPA(하이버네이트) SQL문 로깅 | Popit](https://www.popit.kr/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-auto-configuration%EA%B3%BC-jpa%ED%95%98%EC%9D%B4%EB%B2%84%EB%84%A4%EC%9D%B4%ED%8A%B8-sql%EB%AC%B8-%EB%A1%9C%EA%B9%85)
- GitHub : [GitHub - YooYoungmo/article-spring-boot-hibernate-sql-logging](https://github.com/YooYoungmo/article-spring-boot-hibernate-sql-logging)
****
## 11.2 도메인 모델과 테이블 설계
### 11.2.1 요구사항을 분석하라!
- 책에서는 도메인으로 먼저 구분을 했다
- 회원기능, 상품기능, 주문기능
- 이렇게 크게 세개의 도메인으로 나눈뒤 각 도메인의 기능들을 나열했다.
- 만약 내가 도메인을 설계한다면?? 어떤 식으로 해야할까?
1. 회원기능
- 회원등록
- 회원조회
2. 상품 기능
- 상품 등록
- 상품 수정
- 상품 조회
3. 주문기능
- 상품 주문
- 주문 내역 조회
- 주문 취소
4. 기타 요구사항
- 상품의 종류는 도서, 음반, 영화가 있다.
- 상품을 카테고리로 구분할 수 있다.
- 상품 주문 시 배송 정보를 입력할 수 있다.
### 11.2.2 도메인 모델 설계
1. 첫번째로 요구사항을 분석해서 도메인 모델을 설계했다.-> UML
- 회원, 주문, 상품의 관계 -> 한 번 주문할때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계이다. 라고 설명이 나와있는데 위 글만 봐서는 일대다 로 밖에 이해가 안되서 예전에 이부분에 대해 자세히 나온곳을 찾아갔다
- P155 주문과 상품의 관계 : 주문할 때 여러 상품을 함께 선택할 수 있고, **같은 상품도 여러 번 주문**될 수 있으므로 둘은 다대다 관계다.
- UML 실전에서는 이것만 사용한다 책 읽기.
- 함께자라기 책 읽기
- 이펙티브 유닛테스팅 읽기
-> 다하고 나서 daliy에 11월 9일자에 링크 적어주기
#book/자바ORM표준JPA프로그래밍
'한달쓰기' 카테고리의 다른 글
한달쓰기 28/30 (1) | 2019.11.11 |
---|---|
한달쓰기 27/30 (2) | 2019.11.10 |
한달쓰기 25/30 (8) | 2019.11.08 |
한달쓰기 24/30 (4) | 2019.11.07 |
한달쓰기 23/30 (2) | 2019.11.06 |