단의 개발 블로그

Spring 구성속성 본문

Web/Spring

Spring 구성속성

danso 2024. 11. 1. 14:34

구성 속성이란

스프링에는 다음 두 가지 형태의 서로 다른 구성이 존재한다. 아래 두가지 구성은 XML 구성과 자바 구성 모두에서 사용된다. 

  • 빈 연결 (Bean wiring): 스프링 애플리케이션 컨텍스트에서 빈으로 생성되는 애플리케이션 컴포넌트 및 상호 간에 주입되는 방법을 선언하는 구성
  • 속성 주입 (Property Injection): 스프링 애플리케이션 컨텍스트에서 빈의 속성 값을 설정하는 구성

예를 들어 우리가 데이터 베이스 연결할 때 sql문을 지정할 경우가 있었다. datasource 메소드를 빈으로 등록하는 방법이 빈 연결 방법이다.

@Bean
public DataSource dataSource() {
	return new ...;
}

 

스프링 환경 추상화

스프링 환경 추상화는 구성 가능한 속성을 한 곳에서 관리한다. 속성을 필요로 하는 빈이 스프링 자체에서 해당 속성을 사용할 수 있게한다. 스프링 환경은 아래 다음 환경으로 부터 원천 속성을 가져와서 사용한다.

  • JVM 시스템 속성
  • 운영체제의 환경변수
  • 명령행 인자
  • 애플리케이션의 속성 구성 파일

이 속성을 한곳으로 모아 스프링 환경으로 전달한다. 스프링 애플리케이션의 컨텍스트에 등록된 각종 빈들은 해당 값을 가져와서 알맞게 사용한다. 예를들어 우리 애플리케이션의 포트를 변경할 경우 위에서 언급한 4가지 방법이 아래와 같이 적용하여 사용한다.

구성파일(propertie)
server.port=9999

구성파일(yaml)
server:
	port: 9999
    
명령행 인자
java -jar service --server.port=9999

운영체제 환경 변수 사용
export SERVER_PORT=9999

 

데이터 소스 구성

스프링 부트의 경우 데이터 베이스 연결을 속성 파일로 지정할 수 있다. 속성에 해당 값을 추가하기만 하면 부트가 알아서 해당 정보로 데이터베이스 구성을 완료해준다. 또한 실제 서비스라면 데이터베이스 연결 시 커넥션 풀을 사용하게 되는데 해당 설정도 구성속성을 사용하면 끝난다.

spring:
	datasource:
            url: jdbc:mysql://localhost/service
            username: tester
            password: tester
            driver-class-name: com.mysql.jdbc.Driver

 

 

서버 구성

위에서 언급한 서버 설정 중 서버 포트를 0 으로 변경하면 스프링은 빈 포트를 찾아 애플리케이션을 실행한다. 이 경우는 애플리케이션 시작 되는 포트가 중요하지 않은 마이크로 서비스를 사용할 때 유용하다. 또한, 실제 서비스를 하게 되면 HTTP 요청이 아닌 HTTPS 요청으로 보안된 통신으로 주고 받게 된다. 

JDK의 keytool 명령행 유틸리티를 사용하여 키스토어를 생성하고 이를 스프링 부트의 속성 값으로 지정해준다. 그리고 해당 명령어를 입력하면 패스워드 지정하는데 해당 패스워드를 서버 설정파일에 설정해야 하니 기억해야 한다.

keytool -keystore serviceKeys.jks -genkey -alias tomcat -keyalg RSA

스프링 부트 설정 파일은 다음과 같다.

server:
	port:0
    ssl:
    	key-store: file//path/serviceKeys.jks
        key-store-password: tester
        key-password: tester

 

로깅 구성

실제 서비스를 운영하면 이슈 발생 시 서버로그로 이슈를 해결한다. 해당 설정은 중요하니 꼭 해야한다. 스프링 레거시에서는 logback.xml 파일에 로그 설정을 지정하면 해당 설정대로 로그가 기록됐다. 스프링 부트는 yaml로 간단하게 지정하여 복잡한 xml를 대체할 수 있다. 기본 설정 값인 10MB가 가득차면 새로운 로그 파일을 생성하여 기록한다. 또한 일정 시간이 지난 로그 파일은 삭제된다.

logging:
	path: /var/logs/
    file: service.log
	level:
    	root: WARN
        org:
        	springframework:
            	security: DEBUG

 

사용자 지정 구성

구성 속성은 빈이 사용하는 속성이며, 스프링 환경 추상화로 부터 여러가지 설정값을 전달 받는다. 사용자가 지정하고 싶은 구성 속성이 존재하면 아래와 같은 방법으로 속성을 추가할 수 있다.

yaml파일
user:
	custom: 
    		msg: 하하하
    

java 파일
@ConfigurationProperties(prefix="user.custom")
....

	private String msg = "호호호";
....

 

프로필 속성 정의

서비스를 개발하고 배포하는 과정에서 다양한 개발환경으로 빌드해야 한다. 스프링은 프로필 설정을 통해 각기 다른 개발환경에서 사용할 수 있게 도와준다. 다음과 같은 규칙을 따라 파일을 생성한다.

application-프로필명].yaml 
application-프로필명].properties

 만약 간단한 서비스로 동작한다면 서버 설정파일이 길지 않을 수 있다. 이때는 서버 설정파일을 한개로 사용하는데, 아래와 같은 설정으로 하면 된다.

logging:
	level:
    		root: DEBUG
---
spring:
	profiles: prod
...

---
spring:
	profiles: dev
logging:
	level:
    		root: TRACE

'Web > Spring' 카테고리의 다른 글

소셜로그인  (0) 2024.11.07
Security 사용하기  (3) 2024.10.08
Security  (0) 2024.10.08
JPA  (1) 2024.09.05
데이터 베이스  (0) 2024.09.04