Spring Framework
-
Spring Boot Multiple Port 사용 (멀티 커넥트, 다중 포트)Spring Framework 2023. 7. 31. 00:01
개요 Spring Boot Application을 개발하며 여러 개의 Multipl Port로 접근가능하도록 설계할 순 없을까?라는 생각이 들었습니다. 예를 들어 8080, 8081, 8082로 모두 요청을 받고 싶은 경우 즉, Multiple Port를 사용하려면 어떻게 해야 할까요? 또는 HTTPS 접속, HTTP 접속 모두 해야 하는 경우에 사용할 수 있습니다. Tomcat의 Multiple Connectors @Configuration class EmbeddedTomcatConfiguration { @Bean fun servletContainer(): ServletWebServerFactory { val tomcat = TomcatServletWebServerFactory() tomcat.addA..
-
Spring Cloud Data Flow란?Spring Framework 2023. 7. 25. 00:01
Spring Cloud Data Flow란? 약자를 따서 SCDF라고도 불리며 핵심 요소로 Streaming과 Batch 작업을 수행할 수 있도록 도와줍니다. Source, Sink, Processor 등을 추상화하여 개발자가 비즈니스 로직과 데이터 처리 작업을 집중할 수 있도록 도와줍니다. Data Flow Server와 Skipper Server 2가지 주요 서버 컴포넌트로 구성되어 있습니다. Data Flow server은 데이터 흐름의 주요 진입점을 담당합니다. Restful API를 통해 이루어지고, 웹 대시보드가 제공됩니다. 이외에도 Cloud Foundry, Kubernetes 또는 local 머신에서 실행할 수 있습니다. Skipper Server는 하나 이상의 플랫폼에 스트림을 배포하거나..
-
Spring RequestContextHolder으로 Client IP 주소 가져오기Spring Framework 2023. 7. 22. 00:01
RequestContextHolder란? Spring 2.x부터 제공되던 기능으로 Spring 전역으로 Request에 대한 정보를 가져오고자 할 때 사용하는 유틸성 클래스입니다. 주로 Controller가 아닌, Service에서 Request 객체를 참고하려 할 때 사용합니다. private static final boolean jsfPresent = ClassUtils.isPresent("jakarta.faces.context.FacesContext", RequestContextHolder.class.getClassLoader()); private static final ThreadLocal requestAttributesHolder = new NamedThreadLocal("Request attr..
-
Spring Local Cache란?Spring Framework 2023. 7. 19. 00:01
Spring Local Cache란? Cache는 자주 액세스하는 데이터를 메모리에 저장하여 애플리케이션의 성능을 향상하는 데 사용되는 강력한 기술입니다. Spring Local Cache는 개발자가 애플리케이션의 메모리 내에서 응답 시간을 개선하고 백엔드 시스템의 부하를 줄이기 위해 데이터를 Local (일반적으로 JVM Heap)에 저장하는 메모리 내 캐시입니다. 장점 WAS의 인스턴스 메모리에 데이터를 저장하기 때문에 네트워크 지연 없이 매우 접근속도가 매우 빠릅니다. AWS/GCP Cloud의 Redis 등의 별도의 외부 종속성이 필요없습니다. 단점 메모리에 데이터를 저장하므로 캐시 크기는 사용 가능한 Heap 공간에 영향을 받습니다. 캐시가 너무 커지면 OOM이 발생할 수 있으며 적절한 캐시 크..
-
Kotlin + Spring Boot 3 Spring Data envers 적용Spring Framework 2023. 7. 18. 00:01
Spring Data envers란? 데이터베이스 테이블의 변경하면 가장 최근 상태만 알 수 있습니다. 하지만 envers를 사용하면 데이터 변경 이력을 관리하는 기능을 제공합니다. Gradle plugins { id("org.springframework.boot") version "3.1.0" id("io.spring.dependency-management") version "1.1.0" kotlin("jvm") version "1.8.21" kotlin("plugin.spring") version "1.8.21" kotlin("plugin.jpa") version "1.8.21" } dependencies { //Spring Web 의존성 implementation("org.springframewor..
-
log4j, logback, log4j2 비교Spring Framework 2023. 7. 16. 00:01
Logback이란? Logback은 Java에서 가장 많이 사용되었던 로깅 라이브러리인 log4j의 후속 버전입니다. 어떻게 보면 logback은 더욱 좋아진 log4j라고 보아도 무방합니다. log4j는 2015년에 단종을 발표했으며 logback은 Java 커뮤니티에서 가장 널리 사용되는 로깅 프레임워크 중 하나입니다. 물론 log4j의 후속버전으로 lo4j2가 존재합니다. log4j -> logback -> log4j2 순서로 출시되었습니다. Simple Logging Facade For Java(slf4 j)는 logback이나 log4js와 같은 로깅 프레임워크의 인터페이스 역할을 수행합니다. System.out.println() vs log4j 그냥 println으로 기록하면 안 될까요? 로깅..
-
FeignClient vs WebClient vs RestTemplateSpring Framework 2023. 7. 13. 00:01
개요 다른 서버와 통신하기 위해서 즉, REST API로 서비스 간 통신하기 위해서 ReignClient, WebClient, RestTemplate 등을 활용하곤 합니다. 이 셋에 대해 알아보고 장/단점에 대해 비교해보고자 합니다. RestTemplate이란? HTTP 요청을 만들기 위해 Spring Framework에서 제공하는 동기식 클라이언트 라이브러리입니다. 오랫동안 인기 있는 선택이였기 때문에 많은 개발자들이 사용법에 익숙하며 대규모 커뮤니티가 존재하는 안정적인 라이브러리입니다. 단점으로는 Blocking I/O를 사용합니다. 이로 인해 동시성이 높은 시나리오에서 성능 문제가 발생할 수 있습니다. 또한 Spring 5.0 이후부터 RestTemplate은 레거시 라이브러리로 간주되면 WebCl..
-
FeignClient 헤더 가져오기Spring Framework 2023. 7. 12. 00:01
개요 FeignClient에서 Header 값 가져오는 방법 Feign @FeignClient( name = "my-feign-client", url = "\${clients.my-server.URL}", ) interface MyFeignClient { @PostMapping(value = ["/test/header"]) fun testFeignGetHeader( @RequestParam("testParam") testParam: String, ): Response 이때 Feign.Response를 통해 가져온다. 호출하는 부분 val response = myFeignClient.testFeignGetHeader(testParam) val token = response.headers()["Authori..