티스토리 뷰

한달쓰기

한달쓰기 26/30

ljh3259 2019. 11. 9. 22:01
반응형

한달쓰기 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
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함