분류 전체보기 1341

Ch05. 외부설정과 프로필(1) - 외부 설정(커맨드 라인 인수, 커멘드 라인 옵션 인수, 커맨드 라인 옵션 인수와 스프링 부트)

커맨드 라인 인수 커맨드 라인 인수(Command line arguments)는 애플리케이션 실행 시점에 외부 설정값을 main(args) 메서드의 args 파라미터로 전달하는 방법이다. 예) java -jar app.jar dataA dataB 필요한 데이터를 마지막 위치에 스페이스로 구분해서 전달하면 된다. 이 경우 dataA , dataB 2개의 문자가 args 에 전달된다. CommandLineV1 @Slf4j public class CommandLineV1 { public static void main(String[] args) { for (String arg : args) { log.info("arg = {}", arg); //Key=value 형식이 아니다. String[] keyValue ..

Ch05. 외부설정과 프로필(1) - 외부 설정(자바 시스템 속성)

자바 시스템 속성(Java System properties)은 실행한 JVM 안에서 접근 가능한 외부 설정이다. 추가로 자바가 내부에서 미리 설정해 두고 사용하는 속성들도 있다. 자바 시스템 속성은 다음과 같이 자바 프로그램을 실행할 때 사용한다. 예) java -Durl=dev -jar app.jar -D VM 옵션을 통해서 key=value 형식을 주면 된다. 이 예제는 url=dev 속성이 추가된다. 순서에 주의해야 한다. -D 옵션이 -jar 보다 앞에 있다. JavaSystemProperties @Slf4j public class JavaSystemProperties { public static void main(String[] args) { System.setProperty("hello_key..

Ch05. 외부설정과 프로필(1) - 외부 설정(OS 환경 변수)

OS 환경 변수(OS environment variables)는 해당 OS를 사용하는 모든 프로그램에서 읽을 수 있는 설정값이다. 한마디로 다른 외부 설정과 비교해서 사용 범위가 가장 넓다. 조회 방법 윈도우 OS: set Mac, 리눅스 OS: printenv 설정 방법 Google에 검색하면 수많은 방법이 나온다. 검색해 보자 애플리케이션에서 조회 @Slf4j public class OsEnv { public static void main(String[] args) { Map envMap = System.getenv(); for (String key : envMap.keySet()) { log.info("env {} = {}", key, System.getenv(key)); } //DBURL=dev...

Ch05. 외부설정과 프로필(1) - 외부 설정이란?

하나의 애플리케이션을 여러 다른 환경에서 사용해야 할 때가 있다. 대표적으로 개발이 잘 진행되고 있는지 내부에서 확인하는 용도의 개발 환경, 그리고 실제 고객에게 서비스하는 운영 환경이 있다. 개발 환경: 개발 서버, 개발 DB 사용 운영 환경: 운영 서버, 운영 DB 사용 문제는 각각의 환경에 따라서 서로 다른 설정값이 존재한다는 점이다. 예를 들어서 애플리케이션이 개발 DBDB 에 접근하려면 dev.db.com이라는url 정보가 필요한데, 운영DB에 접근하려면 prod.db.com이라는 서로 다른 url을 사용해야 한다 환경에 맞게 애플리케이션을 빌드 개발 환경에는 dev.db.com 이 필요하므로 이 값을 애플리케이션 코드에 넣은 다음에 빌드해서 app.jar 를 만든다. 운영 환경에는 prod.d..

Ch05. 외부설정과 프로필(1) - 프로젝트 설정

external 프로젝트 Import build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starte..

Ch04. 자동 구성(Auto Configuration) - 정리

스프링 부트의 자동 구성을 직접 만들어서 사용할 때 참고사항 @AutoConfiguration 에 자동 구성의 순서를 지정할 수 있다. @AutoConfiguration 도 설정 파일이다. 내부에 @Configuration 이 있는 것을 확인할 수 있다. 하지만 일반 스프링 설정과 라이프사이클이 다르기 때문에 컴포넌트 스캔의 대상이 되면 안된다. 파일에 지정해서 사용해야 한다(resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports) 그래서 스프링 부트가 제공하는 컴포넌트 스캔에서는 @AutoConfiguration 을 제외하는 AutoConfigurationExcludeFilter 필터가 포함되어 ..

Ch04. 자동 구성(Auto Configuration) - 자동 구성 이해

스프링 부트의 동작 스프링 부트는 다음 경로에 있는 파일을 읽어서 스프링 부트 자동 구성으로 사용한다. resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 스프링 부트가 제공하는 spring-boot-autoconfigure 라이브러리의 다음 파일을 확인해 보면 스프링 부트 자동 구성을 확인할 수 있다. spring-boot-autoconfigure - org.springframework.boot.autoconfigure.AutoConfiguration.imports org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAu..

Ch04. 자동 구성(Auto Configuration) - 자동 구성 라이브러리 사용하기(1)

project-v2 구성하기 build.gradle plugins { id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web..

Ch04. 자동 구성(Auto Configuration) - 자동 구성 라이브러리 만들기

우리가 만든 라이브러리를 사용해 주는 고마운 고객 개발자를 위해, 프로젝트에 라이브러리를 추가만 하면 모든 구성이 자동으로 처리되도록 해 보자.. 쉽게 이야기해서 스프링 빈들이 자동으로 등록되는 것이다. 여기에 추가로 memory=on 옵션도 적용할 수 있게 해보자. memory-v1 프로젝트를 복사해서 memory-v2를 만들자. settings.gradle - 수정 rootProject.name = 'memory-v2' 해당 내용을 변경 시 프로젝트가 memory-v1으로 보이던 게 memory-v2로 보인다. 자동 구성 추가 MemoryAutoConfig @AutoConfiguration @ConditionalOnProperty(name = "memory", havingValue = "on") pu..

Ch04. 자동 구성(Auto Configuration) - 순수 라이브러리 사용하기

project-v1 기본 설정하기 build.gradle plugins { id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-..