spring boot 2.4 버전부터 애플리케이션 설정 파일( application.properties, application.yml, application.yaml ) 에 대한 구동방식이 변경됐다. 변경된 이유는 k8s 볼륨 마운트 구성때문이라고 하는데 이것에 대해선 논하지 않는다. 설정파일에 대해 어떤것들이 변경됐고, 어떻게 마이그레이션해야하는지 알아보자. # 설정이 단순한 경우 애플리케이션 설정파일을 멀티 모듈로 구성하거나 profile 별로 분리해놓지 않았다면 크게 신경 쓸 필요 없이 그대로 구동하면 된다. # 설정이 분리되어 있는 경우 엔터프라이즈 환경에서 규모있는 애플리케이션을 구성한다면 위처럼 설정 파일이 단일로 있지는 않을 것이다. 멀티모듈로 구성되어있다면 애플리케이션 설정 파일에서 추가적..
1. 이슈와 해결 레거시 코드가 있는 상태에서 기존 코드의 동작을 확장시키는 코드를 만들일이 있었다. 한 문장이지만 표현이 거창해서 그렇지 사실 대부분의 개발은 첫 문장과 같은 형태가 될것이다. 기존 코드를 어떤방식으로 확장하면 좋을까를 고민하다가 상속과 오버라이딩을 이용하기로 했다. 간략화된 코드는 아래와 같다. @Service @RequiredArgsConstructor class AService { private final BService bService; @Transactional void aMethod() { bService.bMethod1(); bService.bMethod2(); } } @Service class BService { @Transactional void bMethod1() { ..
spring bean 설정시 lite mode 라는게 있어서 찾아보고, 그에대해 정리해보려한다. 일단 lite mode 는 java 설정에서만 사용할 수 있다. 보통의 java 설정파일을 알아보자. @Configuration public class BeanConfig1 { @Bean public ObjectMapper objectMapperBean() { return new ObjectMapper(); } }평소에 많이 사용하는 java 설정 내용이다. @Bean 애노테이션을 이용해 spring bean 을 생성한다. 그리고 이 java 클래스가 설정 클래스임을 나타내기위해 @Configuration 애노테이션을 사용한다. @Configuration 애노테이션은 설정 클래스임을 나타내며 그 자신도 spr..
빠르게 알아보자. 포스팅은 gradle 기준으로 설명한다. build.gradle에 아래 설정을 추가해준다. test { useJUnitPlatform() } spring starter test 에서 기존 junit을 제외해준다. dependencies에서 아래처럼 설정해준다. testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude module: 'junit' } 이제 junit5 의존성을 추가해줄차례다. testImplementation('org.junit.jupiter:junit-jupiter-api') testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine') 위 ..
Spring 에서 제공하는 http client로는 대표적으로 RestTemplate이 있다. 이 RestTemplate으로 http 요청을 날리게되면 기본적으로 그때마다 connection을 맺고 응답을 받으면 끊게된다. 이를 db connection pool 처럼 connection pool을 만들어서 관리할 수 있다. 이를 설정하기위해서는 일단 RestTemplate에 대해서 먼저 이해를 해야하는데 Spring 에서 제공하는 RestTemplate은 직접 http 요청을 하는 역할을 수행하지않는다. 직접 수행하는 클래스를 한번 래핑한 어댑터 역할을 하는 클래스이다. 기본적으로는 jdk에서 제공하는 HttpUrlConnection 클래스를 이용한다. 우리는 apache 에서 제공하는 HttpClien..
오늘은 Spring Cloud Hystrix 에 대해서 포스팅하려한다. 넷플릭스에서 Hystrix 를 만들어서 공개했는데 이를 좀 더 스프링 친화적으로 스프링에서 래핑해놓았다. Hystrix는 Circuit Breaker 패턴을 적용하여 서비스를 제공하는 Supplier에 장애가 생겼을때 Supplier를 호출하는 Consumer까지 장애가 전파되지않도록 Circuit Breaker 를 오픈하는 방식의 라이브러리이다. 외부 API를 호출하는 경우가 있다면 장애전파를 막고자할때 유용하게 사용할 수 있다. 이번 포스팅에서 작성할 애플리케이션은 Supplier, Consumer와 모니터링에 사용할 Dashboard, 그리고 여러 인스턴스를 모아서 모니터링할때 필요한 Eureka와 Turbine까지 총 5개다...
Spring Cloud Config Client지난 포스팅에서 config server를 띄우는것 까지 진행했다. 이제 config server가 구동되고있는 상태에서 그 정보들을 받아올 client 를 구현해보자. config 를 제대로 받아오는지 확인하는 용도의 스프링 부트 웹 애플리케이션을 만들면된다. 아래 의존성을 넣어주면 된다. implementation('org.springframework.boot:spring-boot-starter-web') implementation('org.springframework.cloud:spring-cloud-starter-config') 그리고 아무것도 하지않고 서버를 띄워보자. 8080으로는 이미 config server가 사용되고있으니 아래설정을 넣어주고 ..
보통 스프링 부트 애플리케이션을 만들다보면 설정파일은 properties나 yml 파일로 추출해서 관리하게된다. profile 별로 파일을 분리까지하게되면 그 자체로 훌륭하게 설정을 분리해냈다고 할 수 있다. 하지만 여전히 존재하는 문제중 하나는 설정만 바뀌었음에도 빌드를 다시하고, 배포를 다시해야한다는 점이다. 나같은 경우는 AB 테스트를 진행하게됐고, AB의 비율을 자주 변경해야하는 이슈가 있었는데, 이를 기존대로 설정파일 분리만 해놓을 경우 비율을 바꿀때마다 릴리즈 배포를 해야했다. Spring Cloud Config 는 별도 config 서버를 두고 애플리케이션이 해당 서버에서 설정을 받아오는 방식이다. 중간에 설정이 바뀌는 일이 발생하면 config 서버만 변경해주고 애플리케이션은 설정을 갱신하..
spring cloud config client를 사용하여 갱신된 config 정보를 받아오기위해선 /actuator/refresh 를 호출해야한다. 그런데 이때 전혀 신경도 쓰지않았던 Hikari 에서 예외가 발생하는 경우가 있다. java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes. 이런 에러메세지가 나오는데 정확히 파본건 아니지만 refresh 를 하면서 config들을 갱신할때 Hikari 쪽을 호출하는듯 하다. 이것도 확인해본건 아니지만 아래처럼 @ConfigurationProperties 애노테이션을 사용해서 생성할..
음..아마 2~3년전에 DI에 관한 포스팅을 하나 했던걸로 기억하는데 그때는 DI가 무엇인지에 대해 적었다면 이번엔 Spring이 어떤방식으로 DI를 해주는지 적어보려한다. 이 글을 적게된 계기는 가장 마지막에 소개할 생성자 주입 방식을 요근래에 알게됐기때문이다. 1. Field Injection가장 간단하고 코드량이 적고, 그때문에 가장 많은 분들이 이용하는 방식이 아닐까싶다. 3개 회사를 다녀봤지만 전부 필드 주입방식을 사용하고있었다. @Service class PersonService{ @Autowired private PersonRepository personRepository; } 이 방식은 가장 간단하고 편리하지만 스프링에 종속적이게된다는 단점이 있다. 뭐 사실 코드의 변경없이 기반 프레임워크..
- Total
- Today
- Yesterday
- java8
- frontend개발환경
- mariadb
- go-core
- generics
- spring cloud
- programming
- java
- http
- JavaScript Core
- db
- JPA
- DesignPattern
- Design Pattern
- EffectiveJava
- frontcode
- backend개발환경
- clean code
- code
- OOP
- servlet
- Jackson
- 정규표현식
- toby
- Spring
- TEST
- Kotlin
- MySQL
- Git
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |