스프링/스프링부트
-
외부 설정 - 스프링 통합스프링/스프링부트 2023. 9. 30. 15:40
지금까지 포스팅했던 외부 설정들(OS 환경변수, 자바 시스템 속성, 커맨드 라인 옵션 인수)은 모두 외부 설정을 key=value 형식으로 사용한다. 그런데 어디에 있는 외부 설정값을 읽어야 하는지에 따라서 각각 읽는 방법이 다르다는 단점이 존재한다. 예를 들어 OS 환경변수에 두면 System.getenv(key)를 사용해야 하며 자바 시스템 속성을 사용하면 System.getProperty(key)를 사용해야 한다는 것이다. 만약에 외부 설정 정책이 변경되면 해당 코드들을 전부 변경해야 한다. OS 환경변수로 설정을 하다가 자바 시스템 속성으로 정책이 변경된다면 System.getenv(key)를 전부 System.getProperty(key)로 변경하는 등 많은 변경이 필요하다. 외부 설정값이 어디..
-
외부 설정 3 - 커맨드 라인 인수스프링/스프링부트 2023. 9. 30. 15:20
커맨드 라인 인수는 애플리케이션 실행 시점에 외부 설정값을 main(args) 메서드의 args 파라미터로 전달하는 방법이다. java -jar app.jar dataA dataB와 같이 사용된다. 필요한 데이터를 마지막 위치에 스페이스로 구분해서 전달한다. 위의 방법에서는 dataA, dataB 2개의 문자가 args에 전달된다. 사진의 동그라미 부분에 dataA, dataB를 넣어준다. 이 때, 한 칸 띄어쓰기 하는 것은 꼭 필요하다. @Slf4j public class CommandLineV1 { public static void main(String[] args) { for (String arg : args) { log.info("arg {}", arg); } } } 테스트코드로 args를 하나씩..
-
외부 설정 2 - 자바 시스템 속성스프링/스프링부트 2023. 9. 30. 14:46
자바 시스템 속성은 실행한 JVM 안에서 접근 가능한 외부 설정이다. 추가로 자바가 내부에서 미리 설정해두고 사용하는 속성들도 있다. 자바 시스템 속성은 아래처럼 자바를 실행할 때 사용된다. 예) java -Durl=dev -jar app.jar -D 옵션을 통해서 key=value 형식으로 주면 된다. 여기서는 url이라는 key 값에 dev라는 value를 넣어줬다. -D 옵션이 jar 보다 앞에 위치해야 한다. 사진 순서에 따라 설정을 해주면 Test 코드 @Slf4j public class JavaSystemProperties { public static void main(String[] args) { Properties properties = System.getProperties(); for (..
-
외부 설정 1 - OS 환경 변수스프링/스프링부트 2023. 9. 30. 14:31
OS 환경 변수는 해당 OS를 사용하는 프로그램에서 읽을 수 있는 설정값이고, 다른 외부 설정과 비교해서 사용 범위가 가장 넓다. window에서 환경 변수 설정을 수정하면 시스템의 환경 변수 설정을 수정할 수 있다. @Slf4j public class OsEnv { public static void main(String[] args) { Map envMap = System.getenv(); // 전체 환경 변수를 Map으로 조회 for (String key : envMap.keySet()) { log.info("env {}={}", key, System.getenv(key)); } } } System.getenv()로 전체 환경 변수를 Map으로 조회하고 출력해보면 아래처럼 나온다. 이렇게 환경 변수들..
-
외부 설정이란?스프링/스프링부트 2023. 9. 30. 14:18
애플리케이션이 사용되고 있을 때, 개발이 잘 진행되고 있는지, 운영이 잘 되고 있는지 확인하는 환경이 있다. 개발 환경 : 개발 서버, 개발 DB 사용 운영 환경 : 운영 서버, 운영 DB 사용 개발DB와 운영DB에 접근하려면 서로 다른 url을 사용해야 한다는 문제점이 있다. 문제점을 해결하는 가장 단순한 방법은 각각의 환경에 맞게 애플리케이션을 빌드하는 방법이다. 하지만 이러한 방법은 환경에 따라서 빌드를 여러번 해야하기 때문에 좋은 방법이 아니다. 다른 빌드 결과를 사용하기 때문에 예상치 못한 문제가 발생할 수 있기 때문이다. 또한, 각 환경에 맞추어 최종 빌드가 나온 결과물은 다른 환경에서 사용할 수 없어서 유연성이 떨어지기에 다른 환경이 필요한 그곳에 맞춘 빌드를 또 생성해야 한다. 외부 설정 ..
-
스프링 부트 자동 구성스프링/스프링부트 2023. 9. 29. 14:34
스프링 부트는 자동 구성이라는 기능을 제공하는데, 일반적으로 자주 사용하는 많은 빈들을 자동으로 구성해주는 기능이다. 물론 개발자가 직접 빈을 등록하면 개발자가 등록한 빈을 사용하고, 자동 구성은 동작하지 않는다. @Slf4j @Configuration public class DbConfig { @Bean public DataSource dataSource() { log.info("dataSource 빈 등록"); HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setJdbcUrl("jdbc:h2:mem:test"); dataSource.setUsern..
-
WAR(Web Application Archive)스프링/스프링부트 2023. 9. 27. 22:43
JAR 자바는 여러 클래스와 리소스를 묶어서 JAR(Java Archive)라고 하는 압축 파일을 만드는데 JVM 위에서 실행되거나 다른 곳에서 사용하는 라이브러리를 제공한다. WAR WAR는 Web Application Archive의 약자로 웹 애플리케이션 서버(WAS)에 배포할 때 사용하는 파일이다. JAR 파일이 JVM 위에서 실행된다면 WAR는 웹 애플리케이션 서버 위에서 실행된다. 웹 애플리케이션 서버 위에서 실행되고, HTML 같은 정적 리소스와 클래스 파일을 모두 포함하기 때문에 JAR보다 훨씬 복잡하다. WAR의 서버 사용 방법 지금은 모두 JAR만 사용하고 나도 프로젝트를 진행할 때 JAR로만 build를 했다. WAR라는 것이 있다는 것만 알고 있었는데 정확히 뭔지는 모르고 있었다. ..