1. Environment
- ApplicationContext는 EnvirementCapable을 상속받아 envirement를 제공
- envirement: 애플리케이션이 처한 환경 ex)개발환경, 테스트 환경 , 운영환경
ApplicationContext 에서 빈들이 관리 , 빈들에 영향
ex) 개발시 H2 DateBase를 사용하도록 빈 등록 ->사용하는 Datasource에 Connenction 대상이 H2 -> 운영중 MySql을 사용하도록 변경 -> 디비 변경 -> 환경 변경
- 프로파일에 따라 환경이 바뀍 그에따라 Properties들이 바뀜
즉 환경에 따란 프로파일 프로포티가 다르게 설정된 envirement Object사용한다고 볼수 있음
- Db접속정보나 서버포트 등 다양한 정보를 Properties들로 정의하고 설정
코드상에 직접 입력하ㅕㅁㄴ 배포할때마다 매번변경해야 하거나 Pw같은 보안정보는 로컬 정보에 노출되면 안되기 때문에 외부속성으로 관리 .
자바에서 default로 설정하는 properties파일
properties는 대체로 key,value값으로 설정
orderService나 다른 컴포넌트에서 properties를 쓰고싶다면?
필드에 주입시킬수 있는 방법잉ㅆ음 value annotation을 이용하면 값을 필드에 주입ㄱ 간으
@ 이용하여 우리가 작성한 pro파일에 해당하는 키값에 있는 벨류를 읽음
생성자 없이 값을 필드에 주입시킬 수 있다
그룹화시킬떄 하나의 클래스로 정의하고 프로퍼티 사용한쪽에서 주입받을수 있을때 많이 씀
큰 프로젝트일경우에는 속성이 다양하기때문에 그룹화를 많이 시킴 작으면 value로 충븐
2. Yaml
2-1 xml과 같이 데이터 전달할때 쓰는 메세지 포맷
-
- 키값과 value값 입력할때 version: 다음에 한칸 공백 주의
키워드 이용해서 배열로 저장, - a 여기서도 한칸 공백 주의
-
- Spring은 Yaml을 지원 안하기 때문에(SprintBoot는 가능) @ProperTySource("application.yaml")로 하면 인식 못함
따라서 YamlPropertiesFactory를 만들어서 지정해줬다.
- @ConfigurationProperties를 추가함으로써 @value로 주입시켜주던것을 간소화 할수 있다. 여기서 prefic = "kdt" 는 application.yaml 에 kdt를 의미
- 위 에노테이션은 스프링부트만 지원하기 때문에 AppConfiguration에 가능하도록 하는 @EnableConfugurationProperties 추가
3. Resource
- 종종 외부 리소스(이미지파일,텍스트파일,암호화를 위한 key파일등)읽을 필요성이 있을떄
- 파일에따라 호출하는 Api가 다르지만 스프링은 Rewource를 통해 하나의 API로 제공
resourceloader을 통해 resource를 가져온다
- 모든 applicationContext가 resourceloader 인터페이스를 구현 하고 있다
-
인식할수 없는 경로 전달시 예외 발생
-
resource3 처럼 파일로처리안하고 외부에서 다운받아 처리하는 리소스
-
원하는 리소스의 패쓰를 지정할때마다 classpath,file,https을 전달 할고 이를통해 구현체를 몰라도 인터페이스를 통해 원하는 리소스를 받아올수 있는 일관된 방법을 제공해줌
웹상에 있는 리소스등
스프링은 리소스를통해 웹상에 있는 리소스들을 쉽게 접근할수 있는인터페이스 제공
4.Profile
프로파일 : 특징이나, 공통점을 찾아 그룹화
ex)30대 직장 남성
스프링은 설정이나 빈같은 것을 그룹화 해서 하나의 프로파일로 정의
정의된 프로파일 중에 원하는 것으로 애플리케이션 구동
ex)DB접속 정보를 스테이징 이라는 환경에서만 구동하기우해 스테이징 이라는 프로파일 만듦
로컬환경,운영환경,등으로 프로파일으로 만들어 놔
프로파일 지정해 그런환경이 동작하게 함
빈정의할떄 프로파일
빈으로 등록될때 @Profile 달려있으면 Profile로 저장
ApplicationContext에서 할수도 있음 @Bean @profile