Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
$실전! 스프링과 함께하는
환경변수 관리 변천사{ {
KSUG 이수홍
$환경변수가 뭔가요??
$
$
$
$
$WIKI를 찾아보니
“환경변수는 프로세스가 컴퓨터에서 동작하는 방
식에 영향을 미치는, 동적인 값들의 모임이다.”
$“스프링 프레임워크”
환경변수
$
$ 그냥 하면 되는
것 아닌가?
$ 하지만 ...
그냥 하면 되는
것 아닌가?
$
$
자주 변경되거나 확정되지 않은
데이터
$
자주 변경되거나 확정되지 않은
데이터
같은 용도 이지만 

개발, 테스트, 운영 등
다양한 조건마다 다른 데이터
$
자주 변경되거나 확정되지 않은
데이터
같은 용도 이지만 

개발, 테스트, 운영 등
다양한 조건마다 다른 데이터
다양한 곳에서 사용하는
공통 데이터 존재
$그래서 환경변수가 중요한
이유?
$그래서 환경변수가 중요한
이유?
바로 시스템의 유연성
$기존 환경변수 방법
$기존 환경변수 방법
JAVA
$
(1) 클래스 상수
• JAVA의 static final 키워드를 사용하여 클래스 변하지 않는
변수로 사용
• 상수를 가지는 특정 클래스 의존적
• 변수 변경 때 마다 참조하고 있는 클래스를 재 컴파일
• 현재도 많...
$
(2) properties 파일
• Key=Value 형태의 데이터
• JAVA에서 기본 지원 ( java.util.Properties )
• 한글 미지원
$Spring
with Not Profile
$Spring
with Not Profile
$기본적으로
Profile기능을 지원하지 않는
스프링 3.0 이하 버전들
$기본적으로
Profile기능을 지원하지 않는
스프링 3.0 이하 버전들
$Profile 기능란?
특정 Profile에 따라
환경변수 및 기능 등 을
다르게 할 수 있도록 구성하는 것
$
예를들면
$
예를들면
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발
$
예를들면
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발
db.driver=oracle.jdbc.drive...
$
예를들면
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발
db.driver=oracle.jdbc.drive...
$
예를들면
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발
db.driver=oracle.jdbc.drive...
$Profile 기능을 적용할만한
방법이 없을까?
$
약간 무식한(?) 방법?
1. 모든 속성의 데이터를 구분
2. java 실행시 -D옵션으로 프로파일정보를 넘기고
• 예를 들면 java -Dprofile=prod
3. 내부에서 코딩(?)한다.
$
약간 무식한(?) 방법?
$
약간 무식한(?) 방법?
$
약간 무식한(?) 방법?
$
약간 무식한(?) 방법?
$Maven과 Profile 기능
그리고 properties
$
Maven, Profile
$
Maven, Profile
• Maven은 빌드 및 배포 프로그램
$
Maven, Profile
• Maven은 빌드 및 배포 프로그램
• 빌드시 Profile을 선택할 수 있는 기능 제공
$
Maven, Profile
• Maven은 빌드 및 배포 프로그램
• 빌드시 Profile을 선택할 수 있는 기능 제공
• “$ mvn -P프로파일명 install” 형태로 빌드
$
Maven, Profile
• Maven은 빌드 및 배포 프로그램
• 빌드시 Profile을 선택할 수 있는 기능 제공
• “$ mvn -P프로파일명 install” 형태로 빌드
• 플러그인 사용하여 Profile ...
$
예제에 앞서
$
예제에 앞서
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발: build-local.properties
$
예제에 앞서
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발: build-local.properties
d...
$
예제에 앞서
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발: build-local.properties
d...
$
예제에 앞서
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;MODE=Oracle;
db.user=sa
db.password=
개발: build-local.properties
d...
$
Maven Profile 활용 1
$
Maven Profile 활용 1
<context:property-placeholder location=“classpath:META-INF/
config.xml"/>
스프링 “mvc-config.xml”
$
Maven Profile 활용 1
<context:property-placeholder location=“classpath:META-INF/
config.xml"/>
스프링 “mvc-config.xml”
<prope...
$
Maven Profile 활용 2
$
Maven Profile 활용 2
$ mvn -Plocal install
$
Maven Profile 활용 2
$ mvn -Plocal install
build-local.properties
$
Maven Profile 활용 2
<properties>

<comment>환경변수 설정파일</comment>

<entry key="profiles.active">local</entry>

<entry key="d...
$
Maven Profile 활용 2
<properties>

<comment>환경변수 설정파일</comment>

<entry key="profiles.active">local</entry>

<entry key="d...
$
Maven Profile 활용 3
$
Maven Profile 활용 3
$ mvn -Pstaging install
$
Maven Profile 활용 3
$ mvn -Pstaging install
build-staging.properties
$
Maven Profile 활용 3
$ mvn -Pstaging install
build-staging.properties
<properties>

<comment>환경변수 설정파일</comment>

<entry k...
$
Maven Profile 활용 3
$ mvn -Pstaging install
build-staging.properties
<properties>

<comment>환경변수 설정파일</comment>

<entry k...
$
Maven Profile 장점
$
Maven Profile 장점
• 스프링 애플리케이션에서는 단순한 설정형태 유지
$
Maven Profile 장점
• 스프링 애플리케이션에서는 단순한 설정형태 유지
• 이클립스 및 인텔리J 등 IDE 플러그인에서 Profile
지원 

( Profile을 변경하면 자동으로 빌드 된다거나 ... )
$
Maven Profile 단점
• Profile 단위로만 properties 생성하기 때문에
중복 환경변수들이 생성
• properties 변경시마다 maven build 필요
• Maven이라는 도구에 종속되는 문제
$
Maven Profile 전체소스
http://bit.ly/1ERbVFX
$그 이후 드디어 ...
$프로파일 기능을 지원하는
스프링 3.1 출시
그 이후 드디어 ...
$
스프링 3.1 기능?
프레임워크에서 Profile 기능이 추가

Profile에 따른 Bean 정보 제어 

( @Profile(“...”), <beans profile=“...”> )
• 환경변수 기능이 “Envi...
$
스프링 3.1 기능 적용
$• web.xml 또는 애플리케이션 실행시 Profile 파라
메터를 넘겨서 선택하는 형태
스프링 3.1 기능 적용
$• web.xml 또는 애플리케이션 실행시 Profile 파라
메터를 넘겨서 선택하는 형태
스프링 3.1 기능 적용
<context-param>

<param-name>spring.profiles.default</pa...
$• web.xml 또는 애플리케이션 실행시 Profile 파라
메터를 넘겨서 선택하는 형태
스프링 3.1 기능 적용
<context-param>

<param-name>spring.profiles.default</pa...
$• web.xml 또는 애플리케이션 실행시 Profile 파라
메터를 넘겨서 선택하는 형태
mvc-config.xml
<context:property-placeholder location="classpath:META-...
$
개선 후 장점
$• Maven 종속 부분 제거
개선 후 장점
$• Maven 종속 부분 제거
• 프로퍼티 변경 시 부담감 축소 ( No Build! )
개선 후 장점
$• Maven 종속 부분 제거
• 프로퍼티 변경 시 부담감 축소 ( No Build! )
• 스프링 Bean 자체도 Profile 별로 구성 가능
개선 후 장점
$• Maven 종속 부분 제거
• 프로퍼티 변경 시 부담감 축소 ( No Build! )
• 스프링 Bean 자체도 Profile 별로 구성 가능
개선 후 장점
<beans profile="prod">

<bean c...
$여전히
properties와 Profile
조합의 단점이 존재
$
Spring 3.1 프로젝트 개선
전체소스
http://bit.ly/1baeg3v
$
$그 이후 Spring Boot
프로젝트 활성
$아하! 최근 Spring Boot 에
서 “YAML” 설정방법을 지원
하는구나!
$
YAML 핵심 장점
• 심플! ( json 비슷 )
• 한글지원!
• 들여쓰기 강제화!

( 파이썬 느낌 !? )
• 하나의 파일에서 문서
를 나눌 수 있는 문법
(---) 지원
service:	
  
	
  	
 ...
$
Spring Boot와 YAML
• YAML 문서를 나누는
특징을 Profile기능에
활용
• 하나의 파일에서 여러가
지 Profile을 기술
#공통부분 (모든프로파일의 속성)

---

spring.profiles...
$
Spring Boot 환경변수 지원
• 환경변수와 

Java bean과 자동
바인딩 기능을 제공
$
Spring Boot 환경변수 지원
• 환경변수와 

Java bean과 자동
바인딩 기능을 제공
환경변수 데이터를
Java bean과 바인딩
$
Spring Boot 환경변수 지원
• 환경변수와 

Java bean과 자동
바인딩 기능을 제공
환경변수 데이터를
Java bean과 바인딩
Spring Bean 형태로 객체
를 주입시켜 사용
$검토 후 현재 프로젝트에서
YAML로 형태로 변경 적용
결정!
$
YAML적용 후 장점
$
YAML적용 후 장점
• 파일 기준 Profile 위주의 구성 

-> 문서 내용 위주로 변경
$
YAML적용 후 장점
• 파일 기준 Profile 위주의 구성 

-> 문서 내용 위주로 변경
$
YAML적용 후 장점
• 파일 기준 Profile 위주의 구성 

-> 문서 내용 위주로 변경
• 환경변수의 구조화
$
YAML적용 후 장점
• 파일 기준 Profile 위주의 구성 

-> 문서 내용 위주로 변경
• 환경변수의 구조화
• 중복된 데이터 축소
$
Spring Boot 와 YAML
전체소스
http://bit.ly/1GUc0KB
$
지금까지 내용 정리
$
지금까지 내용 정리
자바 상수 클래스
$
지금까지 내용 정리
자바 상수 클래스
JAVA 소스에 종속적인 환경
변수
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Key=Value의 심플한
환경변수
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven ProfileBuild 시 Profile결정
후 환경정보 추가
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile프레임워크에서 Profile
환경변수 선택
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile
YAML
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile
YAMLYAML형태의
환경변수
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile
YAML
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile
YAML
$
지금까지 내용 정리
자바 상수 클래스
Properties 파일
Maven Profile
Spring 3.1 Profile
YAML
시스템
규모의
대형화
$운영할수록 늘어 가는
서버, 애플리케이션,
환경변수
$환경변수 변경시 마다
재배포와 재시작
그리고
$클라우드, MSA
( Micro Services Architecture)
$늘어나는 애플리케이션의
환경변수를 제어 필요성
$그런 요구에 의해서 나온
프로젝트
Spring Cloud Config
$
Spring Cloud Config ?
• 환경변수를 제공 해주는 REST API 서버 (필수)와 

환경변수를 받는 클라이언트로 구성 (옵션)
• JSON 형식으로 제공 ( 어떤 서버에서도 사용가능 )
• 환경변수...
$
기존 환경변수 구조
시스템
서버1
환경변수정보
시스템
서버2
환경변수정보
시스템
서버3
환경변수정보
소스버전관리 시스템
$
기존 환경변수 구조
시스템
서버1
환경변수정보
시스템
서버2
환경변수정보
시스템
서버3
환경변수정보
소스버전관리 시스템
소스 배포로 인한
환경변수 갱신
$
기존 환경변수 구조
시스템
서버1
환경변수정보
시스템
서버2
환경변수정보
시스템
서버3
환경변수정보
소스버전관리 시스템
$
Spring Cloud Config
시스템 구조
Spring
시스템
서버1
Spring Cloud Config Server
Spring
시스템
서버2
NodeJS
시스템
서버3
환경변수 저장소
( GIT, SVN, ...
$
Spring Cloud Config
시스템 구조
Spring
시스템
서버1
Spring Cloud Config Server
Spring
시스템
서버2
NodeJS
시스템
서버3
환경변수 저장소
( GIT, SVN, ...
$
Spring Cloud Config
시스템 구조
Spring
시스템
서버1
Spring Cloud Config Server
Spring
시스템
서버2
NodeJS
시스템
서버3
환경변수 저장소
( GIT, SVN, ...
$API서버를 통하여 다수의
애플리케이션에 환경변수를
제공
$API서버를 통하여 다수의
애플리케이션에 환경변수를
제공
$
Spring Boot의 모듈은 대
부분 환경변수로 제어가능
Spring Cloud Config 와
결합으로 다수의 시스템의
세세한 컨트롤까지 가능
$
Spring Boot의 모듈은 대
부분 환경변수로 제어가능
Spring Cloud Config 와
결합으로 다수의 시스템의
세세한 컨트롤까지 가능
$
관련 소스
https://github.com/sbcoba/
spring-camp-2015-sample
$감사합니다.
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
eclipse에서 intelliJ IDEA로
Next
Download to read offline and view in fullscreen.

178

Share

Download to read offline

실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료

Download to read offline

스프링캠프 2015
실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료

  1. 1. $실전! 스프링과 함께하는 환경변수 관리 변천사{ { KSUG 이수홍
  2. 2. $환경변수가 뭔가요??
  3. 3. $
  4. 4. $
  5. 5. $
  6. 6. $
  7. 7. $WIKI를 찾아보니 “환경변수는 프로세스가 컴퓨터에서 동작하는 방 식에 영향을 미치는, 동적인 값들의 모임이다.”
  8. 8. $“스프링 프레임워크” 환경변수
  9. 9. $
  10. 10. $ 그냥 하면 되는 것 아닌가?
  11. 11. $ 하지만 ... 그냥 하면 되는 것 아닌가?
  12. 12. $
  13. 13. $ 자주 변경되거나 확정되지 않은 데이터
  14. 14. $ 자주 변경되거나 확정되지 않은 데이터 같은 용도 이지만 
 개발, 테스트, 운영 등 다양한 조건마다 다른 데이터
  15. 15. $ 자주 변경되거나 확정되지 않은 데이터 같은 용도 이지만 
 개발, 테스트, 운영 등 다양한 조건마다 다른 데이터 다양한 곳에서 사용하는 공통 데이터 존재
  16. 16. $그래서 환경변수가 중요한 이유?
  17. 17. $그래서 환경변수가 중요한 이유? 바로 시스템의 유연성
  18. 18. $기존 환경변수 방법
  19. 19. $기존 환경변수 방법 JAVA
  20. 20. $ (1) 클래스 상수 • JAVA의 static final 키워드를 사용하여 클래스 변하지 않는 변수로 사용 • 상수를 가지는 특정 클래스 의존적 • 변수 변경 때 마다 참조하고 있는 클래스를 재 컴파일 • 현재도 많이 사용
  21. 21. $ (2) properties 파일 • Key=Value 형태의 데이터 • JAVA에서 기본 지원 ( java.util.Properties ) • 한글 미지원
  22. 22. $Spring with Not Profile
  23. 23. $Spring with Not Profile
  24. 24. $기본적으로 Profile기능을 지원하지 않는 스프링 3.0 이하 버전들
  25. 25. $기본적으로 Profile기능을 지원하지 않는 스프링 3.0 이하 버전들
  26. 26. $Profile 기능란? 특정 Profile에 따라 환경변수 및 기능 등 을 다르게 할 수 있도록 구성하는 것
  27. 27. $ 예를들면
  28. 28. $ 예를들면 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발
  29. 29. $ 예를들면 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발 db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.11.221:1521/test1 db.user=test1 db.password=test1 테스트 서버
  30. 30. $ 예를들면 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발 db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.11.221:1521/test1 db.user=test1 db.password=test1 테스트 서버 db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.131.221:1521/staging db.user=staging1 db.password=staging1 스테이징 서버
  31. 31. $ 예를들면 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발 db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.11.221:1521/test1 db.user=test1 db.password=test1 테스트 서버 db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.131.221:1521/staging db.user=staging1 db.password=staging1 스테이징 서버 db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@(DESCRIPTION = (LOAD_BALANCE = OFF) … db.user=prod db.password=prod 상용 서버
  32. 32. $Profile 기능을 적용할만한 방법이 없을까?
  33. 33. $ 약간 무식한(?) 방법? 1. 모든 속성의 데이터를 구분 2. java 실행시 -D옵션으로 프로파일정보를 넘기고 • 예를 들면 java -Dprofile=prod 3. 내부에서 코딩(?)한다.
  34. 34. $ 약간 무식한(?) 방법?
  35. 35. $ 약간 무식한(?) 방법?
  36. 36. $ 약간 무식한(?) 방법?
  37. 37. $ 약간 무식한(?) 방법?
  38. 38. $Maven과 Profile 기능 그리고 properties
  39. 39. $ Maven, Profile
  40. 40. $ Maven, Profile • Maven은 빌드 및 배포 프로그램
  41. 41. $ Maven, Profile • Maven은 빌드 및 배포 프로그램 • 빌드시 Profile을 선택할 수 있는 기능 제공
  42. 42. $ Maven, Profile • Maven은 빌드 및 배포 프로그램 • 빌드시 Profile을 선택할 수 있는 기능 제공 • “$ mvn -P프로파일명 install” 형태로 빌드
  43. 43. $ Maven, Profile • Maven은 빌드 및 배포 프로그램 • 빌드시 Profile을 선택할 수 있는 기능 제공 • “$ mvn -P프로파일명 install” 형태로 빌드 • 플러그인 사용하여 Profile 에따른 properties 선택
  44. 44. $ 예제에 앞서
  45. 45. $ 예제에 앞서 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발: build-local.properties
  46. 46. $ 예제에 앞서 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발: build-local.properties db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.11.221:1521/test1 db.user=test1 db.password=test1 테스트: build-test1.properties
  47. 47. $ 예제에 앞서 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발: build-local.properties db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.11.221:1521/test1 db.user=test1 db.password=test1 테스트: build-test1.properties db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.131.221:1521/staging db.user=staging1 db.password=staging1 스테이징: build-staging.properties
  48. 48. $ 예제에 앞서 db.driver=org.h2.Driver db.url=jdbc:h2:mem:test;MODE=Oracle; db.user=sa db.password= 개발: build-local.properties db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.11.221:1521/test1 db.user=test1 db.password=test1 테스트: build-test1.properties db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@// 123.232.131.221:1521/staging db.user=staging1 db.password=staging1 스테이징: build-staging.properties db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@(DESCRIPTION = (LOAD_BALANCE = OFF) … db.user=prod db.password=prod 상용서버: build-prod1.properties
  49. 49. $ Maven Profile 활용 1
  50. 50. $ Maven Profile 활용 1 <context:property-placeholder location=“classpath:META-INF/ config.xml"/> 스프링 “mvc-config.xml”
  51. 51. $ Maven Profile 활용 1 <context:property-placeholder location=“classpath:META-INF/ config.xml"/> 스프링 “mvc-config.xml” <properties>
 <comment>환경변수 설정파일</comment>
 
 <entry key="profiles.active">${profiles.active}</entry>
 
 <entry key="db.driver">${db.driver}</entry>
 <entry key="db.url">${db.url}</entry>
 <entry key="db.user">${db.user}</entry>
 <entry key="db.password">${db.password}</entry>
 </properties> 환경변수 “META-INF/config.xml”
  52. 52. $ Maven Profile 활용 2
  53. 53. $ Maven Profile 활용 2 $ mvn -Plocal install
  54. 54. $ Maven Profile 활용 2 $ mvn -Plocal install build-local.properties
  55. 55. $ Maven Profile 활용 2 <properties>
 <comment>환경변수 설정파일</comment>
 <entry key="profiles.active">local</entry>
 <entry key="db.driver">org.h2.Driver</entry>
 <entry key="db.url">jdbc:h2:mem:test(생략)</entry>
 <entry key="db.user">sa</entry>
 <entry key="db.password"></entry>
 </properties> 환경변수 “META-INF/config.xml” $ mvn -Plocal install build-local.properties
  56. 56. $ Maven Profile 활용 2 <properties>
 <comment>환경변수 설정파일</comment>
 <entry key="profiles.active">local</entry>
 <entry key="db.driver">org.h2.Driver</entry>
 <entry key="db.url">jdbc:h2:mem:test(생략)</entry>
 <entry key="db.user">sa</entry>
 <entry key="db.password"></entry>
 </properties> 환경변수 “META-INF/config.xml” $ mvn -Plocal install build-local.properties
  57. 57. $ Maven Profile 활용 3
  58. 58. $ Maven Profile 활용 3 $ mvn -Pstaging install
  59. 59. $ Maven Profile 활용 3 $ mvn -Pstaging install build-staging.properties
  60. 60. $ Maven Profile 활용 3 $ mvn -Pstaging install build-staging.properties <properties>
 <comment>환경변수 설정파일</comment>
 <entry key="profiles.active">staging</entry>
 <entry key="db.driver">oracle.jdbc.driver.OracleDriver</entry>
 <entry key="db.url">jdbc:oracle:thin:@//123.232.1(생략)</entry>
 <entry key="db.user">prod</entry>
 <entry key="db.password">prod</entry>
 </properties> 환경변수 “META-INF/config.xml”
  61. 61. $ Maven Profile 활용 3 $ mvn -Pstaging install build-staging.properties <properties>
 <comment>환경변수 설정파일</comment>
 <entry key="profiles.active">staging</entry>
 <entry key="db.driver">oracle.jdbc.driver.OracleDriver</entry>
 <entry key="db.url">jdbc:oracle:thin:@//123.232.1(생략)</entry>
 <entry key="db.user">prod</entry>
 <entry key="db.password">prod</entry>
 </properties> 환경변수 “META-INF/config.xml”
  62. 62. $ Maven Profile 장점
  63. 63. $ Maven Profile 장점 • 스프링 애플리케이션에서는 단순한 설정형태 유지
  64. 64. $ Maven Profile 장점 • 스프링 애플리케이션에서는 단순한 설정형태 유지 • 이클립스 및 인텔리J 등 IDE 플러그인에서 Profile 지원 
 ( Profile을 변경하면 자동으로 빌드 된다거나 ... )
  65. 65. $ Maven Profile 단점 • Profile 단위로만 properties 생성하기 때문에 중복 환경변수들이 생성 • properties 변경시마다 maven build 필요 • Maven이라는 도구에 종속되는 문제
  66. 66. $ Maven Profile 전체소스 http://bit.ly/1ERbVFX
  67. 67. $그 이후 드디어 ...
  68. 68. $프로파일 기능을 지원하는 스프링 3.1 출시 그 이후 드디어 ...
  69. 69. $ 스프링 3.1 기능? 프레임워크에서 Profile 기능이 추가
 Profile에 따른 Bean 정보 제어 
 ( @Profile(“...”), <beans profile=“...”> ) • 환경변수 기능이 “Environment”클래스로 통합관리 ( 관련내용 )
  70. 70. $ 스프링 3.1 기능 적용
  71. 71. $• web.xml 또는 애플리케이션 실행시 Profile 파라 메터를 넘겨서 선택하는 형태 스프링 3.1 기능 적용
  72. 72. $• web.xml 또는 애플리케이션 실행시 Profile 파라 메터를 넘겨서 선택하는 형태 스프링 3.1 기능 적용 <context-param>
 <param-name>spring.profiles.default</param-name>
 <param-value>프로파일명</param-value>
 </context-param> 또는 애플리케이션 실행시 $ java … -Dspring.profiles.active=프로파일명
  73. 73. $• web.xml 또는 애플리케이션 실행시 Profile 파라 메터를 넘겨서 선택하는 형태 스프링 3.1 기능 적용 <context-param>
 <param-name>spring.profiles.default</param-name>
 <param-value>프로파일명</param-value>
 </context-param> 또는 애플리케이션 실행시 $ java … -Dspring.profiles.active=프로파일명 • 선택된 Profile을 Spring 프레임워크에서 환경변 수 파일을 직접 선택
  74. 74. $• web.xml 또는 애플리케이션 실행시 Profile 파라 메터를 넘겨서 선택하는 형태 mvc-config.xml <context:property-placeholder location="classpath:META-INF/ config-${spring.profiles.active:local}.properties"/> 스프링 3.1 기능 적용 <context-param>
 <param-name>spring.profiles.default</param-name>
 <param-value>프로파일명</param-value>
 </context-param> 또는 애플리케이션 실행시 $ java … -Dspring.profiles.active=프로파일명 • 선택된 Profile을 Spring 프레임워크에서 환경변 수 파일을 직접 선택
  75. 75. $ 개선 후 장점
  76. 76. $• Maven 종속 부분 제거 개선 후 장점
  77. 77. $• Maven 종속 부분 제거 • 프로퍼티 변경 시 부담감 축소 ( No Build! ) 개선 후 장점
  78. 78. $• Maven 종속 부분 제거 • 프로퍼티 변경 시 부담감 축소 ( No Build! ) • 스프링 Bean 자체도 Profile 별로 구성 가능 개선 후 장점
  79. 79. $• Maven 종속 부분 제거 • 프로퍼티 변경 시 부담감 축소 ( No Build! ) • 스프링 Bean 자체도 Profile 별로 구성 가능 개선 후 장점 <beans profile="prod">
 <bean class="abc"/>
 <!-- ... -->
 </beans>
 <beans profile="local">
 <bean class="cde"/>
 <!-- ... -->
 </beans>
  80. 80. $여전히 properties와 Profile 조합의 단점이 존재
  81. 81. $ Spring 3.1 프로젝트 개선 전체소스 http://bit.ly/1baeg3v
  82. 82. $
  83. 83. $그 이후 Spring Boot 프로젝트 활성
  84. 84. $아하! 최근 Spring Boot 에 서 “YAML” 설정방법을 지원 하는구나!
  85. 85. $ YAML 핵심 장점 • 심플! ( json 비슷 ) • 한글지원! • 들여쓰기 강제화!
 ( 파이썬 느낌 !? ) • 하나의 파일에서 문서 를 나눌 수 있는 문법 (---) 지원 service:      name:  LeeSuHong      phone:  "010-­‐5482-­‐1212"      sex:  'M'   -­‐-­‐-­‐   spring.profiles:  prod1,prod2,prod3   db:      driver:  oracle.jdbc.driver.OracleDriver      url:  jdbc:oracle:thin:@//123.45.67.78:1521/prod      user:  prod      password:  prod1234   -­‐-­‐-­‐   spring.profiles:  test1,test2   db:      driver:  oracle.jdbc.driver.OracleDriver      url:  jdbc:oracle:thin:@//123.45.67.78:1521/dev      user:  devtest      password:  test
  86. 86. $ Spring Boot와 YAML • YAML 문서를 나누는 특징을 Profile기능에 활용 • 하나의 파일에서 여러가 지 Profile을 기술 #공통부분 (모든프로파일의 속성)
 ---
 spring.profiles: prod1,prod2
 #상용 서버 관련 속성
 
 ---
 spring.profiles: test1
 # 테스트1 서버 속성 
 ---
 spring.profiles: test2
 # 테스트2 서버 속성
 
 ---
 spring.profiles: local
 #로컬 관련 속성
  87. 87. $ Spring Boot 환경변수 지원 • 환경변수와 
 Java bean과 자동 바인딩 기능을 제공
  88. 88. $ Spring Boot 환경변수 지원 • 환경변수와 
 Java bean과 자동 바인딩 기능을 제공 환경변수 데이터를 Java bean과 바인딩
  89. 89. $ Spring Boot 환경변수 지원 • 환경변수와 
 Java bean과 자동 바인딩 기능을 제공 환경변수 데이터를 Java bean과 바인딩 Spring Bean 형태로 객체 를 주입시켜 사용
  90. 90. $검토 후 현재 프로젝트에서 YAML로 형태로 변경 적용 결정!
  91. 91. $ YAML적용 후 장점
  92. 92. $ YAML적용 후 장점 • 파일 기준 Profile 위주의 구성 
 -> 문서 내용 위주로 변경
  93. 93. $ YAML적용 후 장점 • 파일 기준 Profile 위주의 구성 
 -> 문서 내용 위주로 변경
  94. 94. $ YAML적용 후 장점 • 파일 기준 Profile 위주의 구성 
 -> 문서 내용 위주로 변경 • 환경변수의 구조화
  95. 95. $ YAML적용 후 장점 • 파일 기준 Profile 위주의 구성 
 -> 문서 내용 위주로 변경 • 환경변수의 구조화 • 중복된 데이터 축소
  96. 96. $ Spring Boot 와 YAML 전체소스 http://bit.ly/1GUc0KB
  97. 97. $ 지금까지 내용 정리
  98. 98. $ 지금까지 내용 정리 자바 상수 클래스
  99. 99. $ 지금까지 내용 정리 자바 상수 클래스 JAVA 소스에 종속적인 환경 변수
  100. 100. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일
  101. 101. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Key=Value의 심플한 환경변수
  102. 102. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile
  103. 103. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven ProfileBuild 시 Profile결정 후 환경정보 추가
  104. 104. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile
  105. 105. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile프레임워크에서 Profile 환경변수 선택
  106. 106. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile
  107. 107. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile YAML
  108. 108. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile YAMLYAML형태의 환경변수
  109. 109. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile YAML
  110. 110. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile YAML
  111. 111. $ 지금까지 내용 정리 자바 상수 클래스 Properties 파일 Maven Profile Spring 3.1 Profile YAML 시스템 규모의 대형화
  112. 112. $운영할수록 늘어 가는 서버, 애플리케이션, 환경변수
  113. 113. $환경변수 변경시 마다 재배포와 재시작 그리고
  114. 114. $클라우드, MSA ( Micro Services Architecture)
  115. 115. $늘어나는 애플리케이션의 환경변수를 제어 필요성
  116. 116. $그런 요구에 의해서 나온 프로젝트 Spring Cloud Config
  117. 117. $ Spring Cloud Config ? • 환경변수를 제공 해주는 REST API 서버 (필수)와 
 환경변수를 받는 클라이언트로 구성 (옵션) • JSON 형식으로 제공 ( 어떤 서버에서도 사용가능 ) • 환경변수 관리 ( GIT, SVN 등 이용 ) • 환경변수에 대한 암복호화 기능 내장 • 다양한 Application, Profile, Version 형태를 지원
  118. 118. $ 기존 환경변수 구조 시스템 서버1 환경변수정보 시스템 서버2 환경변수정보 시스템 서버3 환경변수정보 소스버전관리 시스템
  119. 119. $ 기존 환경변수 구조 시스템 서버1 환경변수정보 시스템 서버2 환경변수정보 시스템 서버3 환경변수정보 소스버전관리 시스템 소스 배포로 인한 환경변수 갱신
  120. 120. $ 기존 환경변수 구조 시스템 서버1 환경변수정보 시스템 서버2 환경변수정보 시스템 서버3 환경변수정보 소스버전관리 시스템
  121. 121. $ Spring Cloud Config 시스템 구조 Spring 시스템 서버1 Spring Cloud Config Server Spring 시스템 서버2 NodeJS 시스템 서버3 환경변수 저장소 ( GIT, SVN, Database 등 ) Spring Cloud Config Client Spring Cloud Config Client
  122. 122. $ Spring Cloud Config 시스템 구조 Spring 시스템 서버1 Spring Cloud Config Server Spring 시스템 서버2 NodeJS 시스템 서버3 환경변수 저장소 ( GIT, SVN, Database 등 ) 환경변수 정보 버전 관리 Spring Cloud Config Client Spring Cloud Config Client
  123. 123. $ Spring Cloud Config 시스템 구조 Spring 시스템 서버1 Spring Cloud Config Server Spring 시스템 서버2 NodeJS 시스템 서버3 환경변수 저장소 ( GIT, SVN, Database 등 ) JSON API 형태 로 환경변수를 시 스템에 공급 환경변수 정보 버전 관리 Spring Cloud Config Client Spring Cloud Config Client
  124. 124. $API서버를 통하여 다수의 애플리케이션에 환경변수를 제공
  125. 125. $API서버를 통하여 다수의 애플리케이션에 환경변수를 제공
  126. 126. $ Spring Boot의 모듈은 대 부분 환경변수로 제어가능 Spring Cloud Config 와 결합으로 다수의 시스템의 세세한 컨트롤까지 가능
  127. 127. $ Spring Boot의 모듈은 대 부분 환경변수로 제어가능 Spring Cloud Config 와 결합으로 다수의 시스템의 세세한 컨트롤까지 가능
  128. 128. $ 관련 소스 https://github.com/sbcoba/ spring-camp-2015-sample
  129. 129. $감사합니다.
  • ssuser0b2ddd

    Jun. 17, 2020
  • SoYoungPark17

    May. 23, 2020
  • ssuser55fe3c

    Dec. 24, 2019
  • sungwonyun2

    Aug. 16, 2019
  • ssusera1a254

    Jul. 3, 2019
  • incheolkim37

    Feb. 8, 2019
  • ssuser564af1

    Jan. 6, 2019
  • TaeJunJeon3

    Nov. 1, 2018
  • thispell

    Sep. 4, 2018
  • SOOHYUNCHO8

    Jul. 27, 2018
  • josh1017

    Jun. 25, 2018
  • ParkChangJune

    Oct. 11, 2017
  • MingyuLee3

    Sep. 11, 2017
  • fourthcafe

    Sep. 3, 2017
  • ssuser263553

    Aug. 16, 2017
  • risekon

    Jul. 19, 2017
  • kyoungminyoon7

    Apr. 18, 2017
  • jinhyeongb

    Mar. 24, 2017
  • cbacc

    Mar. 13, 2017
  • Jwn83

    Feb. 20, 2017

스프링캠프 2015 실전! 스프링과 함께하는 환경변수 관리 변천사 발표자료

Views

Total views

15,559

On Slideshare

0

From embeds

0

Number of embeds

1,192

Actions

Downloads

317

Shares

0

Comments

0

Likes

178

×