Spring (17) 썸네일형 리스트형 Spring Boot에서 전략 패턴 사용하기 전략패턴 전략 패턴은 런타임 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우 적합한 패턴이다. 첫 번째 시도 우선 전략 패턴을 위한 인터페이스와 enum을 작성하였다. public interface Strategy { void execute(); } @Getter @RequiredArgsConstructor public enum StrategyType { A("strategyA"), B("strategyB"), C("strategyC") private final strategyName; } 전략 패턴을 위.. JAVA를 사용한 외부 API 호출 방법 Java로 외부 API를 통신하는 HTTP Library에 대해 알아보겠습니다. HttpURLConnection Java에서 기본적인 HTTP 통신을 수행하기 위한 클래스이다. 장점 Java 표준 라이브러리에 포함되어 있어 추가적인 의존성이 필요 없다 간단한 HTTP 통신에 적합하며 기본적인 요청 및 응답 처리가 가능하다. 단점 기능이 제한적이며, 고급 기능이나 편의 기능이 부족할 수 있다. 코드가 비교적 복잡하다. 응답코드가 4xx 이거나 5xx 일 경우 IOException 타임아웃을 설정할 수 없다. 쿠키 제어가 불가능하다. HttpClient Java 11에 도입된 새로운 HTTP 클라이언트이고 HTTP/2, WebSocket을 지원한다. HttpURLConnection은 비동기 처리를 위해 별도.. Spring Mulipart Error [Error] Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported] @RequestPart를 이용한 MultipartFile + RequestBody 처리를 Postman에서 테스트 결과 정상적으로 작동하였으나 Swagger에서 테스트 시 해당 오류가 발생하여 Swagger에서도 정상 작동하도록 수정하기 위함 Controller @PostMapping() public ResponseEntity createCommunity(@AuthUser CustomUserPrincipal customUserPrincipal,@RequestPart(va.. Spring Boot Redis + Cache를 사용하여 성능 최적화하기 Cache Spring Boot 에서 Redis + Cache를 적용하여 같은 데이터를 사용하는 경우 서버의 부하를 줄이고 성능을 최적화하여 응답시간을 단축시켜보자 보통 DB로부터 데이터를 조회할 때 동일한 데이터를 반복해서 조회하는 것을 막음으로써 불필요한 일을 없애줍니다. 이로 인해 응답시간을 단축하는 효율성을 가져옵니다. Cache 어노테이션 캐시 어노테이션들은 기본적으로 AOP로 동작합니다. @Cacheable 캐시의 이름과 키를 확인하여 이미 저장된 데이터가 있으면 해당 데이터를 리턴합니다. 만약 데이터가 업다면 메서드를 수행한 후 결과값을 저장합니다. @CachePut 메소드의 실행결과를 항상 저장합니다. 주로 캐시 데이터를 갱신할 때 사용합니다. @CacheEvict 캐시에 있는 데이터를 삭.. SpringBoot, Prometheus, Grafana를 사용하여 Monitoring 구축하기 (2) 지난 글에서 Spring Boot를 이용해서 Metric 데이터를 수집하였다. 이번 글에서는 Docker를 사용해서 Prometheus와 Grafana를 설치하고 Metric 데이터를 시각화해보자 디렉토리 구조 . ├── docker-compose.yml ├── grafana │ └── volume │ ├── grafana.db │ ├── grafana.db-journal │ └── plugins └── prometheus ├── config │ ├── prometheus.yml │ └── query_log_file.log │ └── volume └── data ├── chunks_head ├── lock ├── queries.active └── wal └── 00000000 Docker-compose... [Spring] log 파일 생성 시 LOG_PATH_IS_UNDEFINED 생성 문제 Spring Boot에서 logback-spring.xml을 통해서 logging 설정을 하게 됩니다. 이때 yml 파일에서 Spring boot의 logging에 대한 설정을 넣을 수 있습니다. application.yml 파일에서 아래와 같이 지정한 후 logback-spring.xml 에서 ${LOG_PATH}를 사용하여 파일 경로를 가져올 경우 LOG_PATH_IS_UNDEFINED 파일이 생성되는 것을 확인할 수 있습니다. 원인 Spring boot 설정에 의해서 application.yml와 logback-spring.xml을 읽어오는 순서상의 문제로 인하여 logback이 먼저 읽어지면서 ${LOG_PATH}에 빈 값이 들어가게 되고 이로 인해 LOG_PATH_IS_UNDEFINED 파일이 .. Spring Actuator 와 Swagger를 사용할 시 의존성 오류 Spring Swagger가 적용되어 있는 환경 속에 모니터링 시스템을 위해 Actuator를 추가하였더니 아래와 같은 오류가 발생했다. Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: 기본적으로 해당 오류는 Swagger에서 발생하는 오류로 spring fox에서 업데이트를 진행하지 않아 생긴 버전 이슈이다. application.yml spring: mvc: pathmatch: matching-strategy: ant_path_matcher Actuator를 사용하지 않는다면 해당 설정으로 오류를 해결할 수 있다. 하지만 Swagger와 Actuator를 .. SpringBoot, Prometheus, Grafana를 사용하여 Monitoring 구축하기 (1) 모니터링 시스템은 기본적으로 데이터 수집 → 통합 → 시각화의 단계로 이루어진다. Metric 일반적으로 성능, 성과 또는 기타 측정 가능한 요소를 나타내는 데이터를 의미합니다. 시간이 지남에 따라 변화하는 데이터 → CPU , 메모리 사용량 등 Prometheus 시스템 및 서비스의 성능 및 작동을 지속적으로 모니터링할 수 있는 오픈 소스 모니터링 시스템입니다. 특징 메트릭 이름과 Key-Value 쌍으로 식별되는 시계열 데이터가 있는 다차원 데이터 모델 PromQL, 이차 원성을 활용하는 유연한 쿼리 언어 기본적으로 Pull 방식으로 다른 곳의 시계열 데이터를 가지고 온다, 또한, Push 방식의 데이터도 가져올 수 있도록 하는 Push gateway가 존재하여 두 방식 모두 지원한다. 다양한 대시보.. 이전 1 2 3 다음