나의 개발 성장일지

Yml설정하기 본문

개인 공부/스프링부트 개념정리

Yml설정하기

qkq5821 2022. 11. 16. 22:00

1. yaml 이란

https://www.inflearn.com/questions/16184

 

yaml파일 이란 무엇인가요 - 인프런 | 질문 & 답변

안녕하세요 강사님 너무 질문이 많아서 죄송합니다. yaml파일 이라는 단어를 요 근래 많이 듣고 있는데 정확인 무슨 파일인가요 검색해 보지도 않고 무조건 질문을 드리는것 같아서 죄송하지만

www.inflearn.com

 

2. yml 설정

web.xml, root-context.xml, servlet-context.xml의 합본

application.yml

server:
  port: 8000
  servlet:
    context-path: /blog
    encoding:
      charset: UTF-8
      enabled: true
      force: true
    
spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
      
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul
    username: root
    password: 1234
    
  jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate.format_sql: true

  jackson:
    serialization:
      fail-on-empty-beans: false

(1) jasper

.jsp 경로를 설정한 이유는 스프링 부트는 기본적으로 jsp사용이 권장하기 않기 때문에 timeleaf 같은 다른 템플릿 엔진을 사용해야 한다. 하지만  jsp를 사용하기 위해서는 해당 구조로 폴더 구성을 한 뒤 세팅하여야 한다. (jasper)

 

(2) com.mysql.cj.jdbc.Driver

datasource 의 mysql 드라이버에 cj가 들어간 이유는 mysql 6점대 이상 버전부터는 해당 드라이버를 사용하고 그 이전 드라이버는 cj가 없는 com.mysql.jdbc.Driver를 사용한다.

 

(3) open-in-view

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 클래스

영속성을 프리젠테이션 계층까지 가져간다. 트랜잭션은 Service계층에서 종료된다. Transaction이 종료된 후에도 Controller의 Session이 close되지 않았기 때문에, 영속 객체는 Persistence 상태를 유지할 수 있으며, 따라서 프록시 객체에 대한 Lazy Loading을 수행할 수 있게 된다.

버전 2.0부터 스프링 부트는 기본적으로 OSIV가 활성화되어있을 때 경고를 발행하므로 프로덕션 시스템에 영향을 주기 전에 이 문제를 발견 할 수 있다.

서블릿 필터에서 Session 을 오픈하고 트랜잭션을 시작하던 전통적인 방식의 OPEN SESSION IN VIEW 패턴과 달리 SpringMVC 에서 제공하는 OpenSessionInViewFilter 는 필터 내에서 Session 은 오픈하지만 트랜잭션은 시작하지 않는다. 따라서 서블릿 필터 안에서는 커넥션 풀로부터 JDBC 커넥션을 얻을 필요가 없다.

hibernate.enable_lazy_load_no_trans: true  

OSIV를 활성화 하였다면 위에 옵션을 필요 없다. 그리고 OSIV는 스프링부트가 디폴트로 활성화하고 있는 옵션이다. 경고를 제거하기 위해 명확하게 적어준 것 뿐!!

(4) ddl-auto

  • create - 서버 시작시마다 DB초기화
  • update - 수정사항만 DB에 반영
  • none - DB에 아무런 반영을 하지 않음.

(5) physical-strategy

  • org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  • 엔티티를 만들 때 변수명 그대로 DB에 필드를 만들어 준다.
  • org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
  • 엔티티를 만들 때 변수명에 언더스코어를 붙여준다. 예) createDate -> create_date

 

(6) show-sql: true

(7) use-new-id-generator-mappings: false

use-new-id-generator-mappings 는 mysql로 말하면 auto_increment 오라클로 말하면 시퀀스를 어떤식으로 사용할지 방식을 결정하는 것인데 false를 하면 jpa가 사용하는 기본 넘버링 전략을 따라가지 않는다는 뜻이고 true를 하면 기본 넘버링 전략을 따라간다는 뜻이다.

 

(8) jackson:
          serialization:
              fail-on-empty-beans: false

 

Lazy-loading으로 인해 empty-beans이 생길 수 있다. 너그럽게 빈 객체를 허락해주는 옵션이다.

 

 

3.yaml파일에서 ContextPath 변경해주기(기본URL)

 

 4.Controller에서 뷰파일 경로

 4-1 RestController는 디스패쳐에게  데이터를 리턴

  Controller는 뷰페이지경로와 모델을 보낸다.

 

4-2

4-2-1브라우져는 정적페이지(HTML,CSS,JS)만 인식가능하다

4-2-2 스프링부트는 JSP파일을 지원하지않는다->  jasper를 Porm.xml에 넣어줌

4-2-3 static폴더는 브라우져가인식가능한파일만 넣어야됨(HTML,CSS,JS)

4-2-4 JSP는 동적인파일이라 그냥주면 브라우져가 인식할수없다.(컴파일필수)

 

위에는 인식 밑에는 브라우져인식 X

4-2-5 

 

views폴더->동적페이지넣어둠->반환시 웹서버가아닌 톰캣이 정적페이지로 만들어줌

 

5. 요약하기 

스프링부트는 application.yml 파일에 설정하면 된다
 
@RestController는 문자 그 자체를 return 하는 반면, @Controller는 해당 경로 이하에 있는 파일을 리턴하므로 슬러시(/)를 붙여야 한다.

스프링부트는 기본적으로 jsp 지원을 하지 않는다.
jsp파일을 리턴해줘도 정상적으로 동작하지 않는다.
스프링부트에서 jsp를 인식하기 위한 사전설정은 다음과 같다.
 
1. pom.xml에 JSP 템플릿 엔진 dependency 추가
 
<!-- JSP 템플릿 엔진 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
 
2. application.yml에 다음 코드를 추가한다.
 
spring: mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
src/main/webapp/WEB-INF/views 디렉토리를 직접 만들어야 한다.
이때 뒤에 확장자명이 이미 설정파일에 추가되어 있으므로 파일이름만을 return한다
. EX) return "temp"; JSP파일은 정적 파일이 아니므로 웹서버인 아파치가 처리하지 못한다.
톰캣이 대신 컴파일해서 웹브라우저에게 전달한다.
 
 

 

'개인 공부 > 스프링부트 개념정리' 카테고리의 다른 글

테이블 연관관계의 주인(보완필요)  (0) 2022.11.20
테이블 생성  (0) 2022.11.20
Lombok과 Maven환경설정  (0) 2022.11.16
HTTP연결방식 2  (0) 2022.11.15
Http연결방식 1  (0) 2022.11.15