[Spring Petclinic]1. application properties
스프링 펫 클리닉 프로젝트의 소스 분석의 시작으로 설정 파일을 먼저 알아보자
이 설정 파일을 통해서 어떤 DB를 썼는지 등 기초적인 정보를 파악할 수 있다.
1. DB 설정
기본 DB는 H2 데이터베이스로 설정되어 있다.
h2 데이터 베이스라는 것을 명시하고
스키마를 초기화 하는 위치와 초기 데이터를 넣는 sql 쿼리 파일의 위치를 명시한다.
해당 설정을 통해서 스프링 어플리케이션이 실행할때 쿼리파일을 실행하여 스키마와 데이터를 생성해준다
이외에도 MySQL, PostgreSQL 등 RDB를 지원한다.
해당 DB에 맞는 설정 파일 일부가 각 디렉토리에 위치하고 있으며 각 DB에 마즌 SQL 쿼리 파일 또한 개별로 존재한다.
database=h2
spring.sql.init.schema-locations=classpath*:db/${database}/schema.sql
spring.sql.init.data-locations=classpath*:db/${database}/data.sql
2. Web 설정
spring.thymeleaf.mode=HTML
Spring의 thymeleaf의 모드를 HTML로 한다는 의미이며
TEXT,XML 등 다양한 타임리프의 모드중 HTML을 선택하는 것이다.
이렇게 되면 타임리프가 HTML 구문을 해석하여 템플릿 엔진을 적용하게 된다.
3. JPA 설정
spring.jpa.hibernate.ddl-auto=none
spring.jpa.open-in-view=true
👉 jpa.hibernate.ddl-auto
이 옵션은 하이버네이트가 데이터베이스 스키마를 처리하는 방법을 제어한다.
none으로 설정시 자동 스키마 생성을 하지 않는다.
이미 mysql 등 DB에 스키마가 생성되어 있고 이를 정의된 어플리케이션과 일치시키기만한다.
실제 현업에서는 validation과 none을 제외하고는 절대 사용하지 않는다.
특히 create 관련 옵션을 수행하다가 운영 DB를 다 날리는 최악의 상황이 있다
✅ ddl-auto 설정 옵션
◾ create
말 그대로 엔티티로 등록된 클래스에 맵핑되는 테이블을 자동으로 생성하는 옵션
데이터이 존재하면 삭제하고 새롭게 만든다
◾ create-drop
create 와 동일하게 동작하며 어플리케이션 종료시 테이블 삭제
◾ update
엔티티로 등록된 클래스와 매핑되는 테이블이 없으면 새로 생성
기존의 테이블이 존재하면 테이블 컬럼을 변경하게 된다
존재하는 컬럼의 속성은 유지하며, 새로운 컬림이 추가되는 변경 사항만 변경
◾ validate
DDL을 작성하여 테이블을 생성하거나 수정하지 않고, 엔티티 클래스와 테이블이 정상적으로 매핑되는지만 검사
테이블이 존재하지 않거나, 엔티티 필드와 맵핑되지 않는 컬럼이 존재하지 않으면 예외발생 후 정지
◾ none
4가지 옵션을 모두 제외한 경우이다.
👉 jpa.hibernate.open-in-view=true
관례상 OSIV 라고도 하며 true 인 경우 영속성 컨텍스트가 트랜젝션 범위를 넘어선 레이어까지 살아있다.
여기서 트랜젝션 범위 넘어서라 함은 API 에서 클라이언트에게 응답을 보낼 때 까지 를 의미
false 인 경우에는 트랜젝션이 종료될 때 영속성 컨텍스트 또한 닫힌다.
3. 다국어지원/엑추에이터
◼ 다국어 지원
다국어 지원에 관한 경로를 지정하는 것이다.
스프링의 다국어 지원을 위해서 사용되는 메시지 파일의 위치를 지정한다.
해당 경로에 기본 메시지 파일이 위치해 있다.
각 언어별 메시지를 포함하는 프로퍼티 파일 존재
spring.messages.basename=messages/messages
◼ 엑추에이터
이 설정은 엑추에이터 엔드포인트가 노출되는 정책을 지정한다.
* 는 모든 엔드포인트를 노출한다는 의미이다.
즉 모든 엔드포인트가 사용 가능하도록 설정된다.
이 엑추에이터의 필요성은 다른 포스팅에서 조금 더 상세하게 정리해보겠다.
management.endpoints.web.exposure.include=*
4. Logging
logging.level.org.springframework=DEBUG
기본 로깅 레벨을 DEBUG 수준으로 설정한다는 의미이다.
6. cached
정적 자원, CSS,JS, 이미지 등의 캐시를 제어하는 설정으로
최대 캐시 시간을 12시간으로 설정한다는 의미이다.
즉 정적 자원을 클라이언트 측에서 최대 12시간 동안 캐시된다.
spring.web.resources.cache.cachecontrol.max-age=12h
'Spring' 카테고리의 다른 글
Spring Interceptor 동작 방식 (1) | 2024.06.10 |
---|---|
HandlerMethodArgumentResolver 동작 (1) | 2024.06.10 |
Spring MVC - frontController (0) | 2024.03.14 |
Spring MVC 패턴 - Servlet (0) | 2024.03.06 |
Spring 빈 생명주기 (0) | 2024.02.15 |