Spring Framework (7) 썸네일형 리스트형 [Spring WebFlux] 왜 WebFlux를 선택했는가? (Tomcat NIO와 비교) 목차들어가며티켓팅 프로젝트에서 Spring WebFlux를 사용했다는 이야기를 하면 종종 이런 질문을 받습니다.“톰캣도 NIO를 지원하는데, 굳이 WebFlux를 선택한 이유가 뭔가요?” 저도 처음에는 “어차피 둘 다 non-blocking이면 큰 차이가 없지 않을까?” 라고 생각했지만, 실제로 비교해보면 철학과 활용 범위에서 확실한 차이가 있었습니다. 이번 글에서는 WebFlux와 Tomcat NIO를 비교하며 WebFlux를 선택한 이유를 정리해 보겠습니다.아키텍처의 차이Tomcat NIOServlet API 기반으로 동작필터 체인, Request/Response 객체 등 서블릿 스펙의 제약 존재WebFluxReactive Streams 표준 기반Netty 같은 이벤트 루프 서버에 최적화서버-프레임워.. [Spring Batch] 동일한 Job과 Step이 반복 실행되지 않는 문제 목차# 문제티켓팅 프로젝트에서 배치 잡을 구현하면서 다음과 같은 예외를 마주하였다.java.lang.IllegalStateException: Failed to execute ApplicationRunner ...Caused by: org.springframework.batch.core.repository.JobExecutionAlreadyRunningException: A job execution for this job is already running: # 원인스프링 배치는 기본적으로 잡과 스텝의 상태를 저장하고 이에 기반하여 잡과 스텝의 실행을 1번 만 수행할 수 있도록 보장한다. 배치 잡이 실행되면 JobInstance가 생성된다. 이때 JobInstance는 잡의 논리적 실행을 나타내며 두 가지 .. [Spring Batch] @EnableBatchProcessing 적용시 배치 잡이 동작하지 않는 문제 목차# 문제 티켓팅 프로젝트를 개발하면서 Spring Batch를 이용하여 배치 잡을 구현했다. 배치 잡을 구현하면서 배치 서버 기동 시 헬스체크 테스트를 위한 배치 잡을 구현하였는데, @EnableBatchProcessing 어노테이션을 configuration 클래스에 적용했음에도 기본 잡이 실행되지 않는 문제가 발생하였다. 테스트 배치 잡의 경우 프로젝트에서 필요한 기능은 아니었기 때문에 중요한 문제는 아니었지만, 왜 동작하지 않았는지에 대해서 간단하게 정리해보고자 한다. # 원인 문제의 원인은 SpringBoot 3.0 부터 DefaultBatchConfiguration 클래스 혹은 EnableBatchProcessing 어노테이션을 선언할 경우 배치 잡의 자동 실행하는 것을 제한하는 로직이 추가.. [Redisson] SpringBoot + Redisson을 활용한 동시성 문제 해결하기 목차 들어가며 SpringBoot를 기반으로 실시간 투표 애플리케이션을 구현하면서, 한 가지 실험을 수행했다. 멀티 스레드 환경에서 다수의 클라이언트 요청이 동시에 하나의 글에 투표를 진행하면 정상적으로 동작할 수 있을까? 실험의 시나리오는 다음과 같다. [상황] 찬성 투표가 100개인 투표 글이 있다. 찬성표를 반대표로 변경하기 위한 업데이트 요청을 동시에 100번 수행한다. [예상 결과] 투표 글의 찬성 투표수는 0이 된다. 투표 글의 반대 투표수는 100이 된다. 시나리오 테스트 코드를 작성한 결과, 예상한 결과와는 다른 결과를 얻을 수 있었다. 문제 정의 테스트를 수행하면서 마주한 문제는 멀티 스레드 환경에서 접할 수 있는 동시성 문제이다. 애플리케이션은 스프링부트를 기반으로 구현되었고, 내장 톰.. [SpringBoot / ERROR] @RequestParam 예외: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. 목차 프로젝트를 수행하면서 우연히 질문을 받게 되었다. @RequestParam에 value 속성을 지정하지 않으면 예외가 발생하는가? -sky- 기본적으로 @RequestParam과 @PathVariable은 request의 파라미터와 매개변수의 이름이 동일하다면, value 속성을 생략할 수 있다. 또한 @RequestParam 어노테이션도 생략할 수 있다. 그렇기 때문에 당연하게 발생하지 않고, 매개변수의 이름과 파라미터의 이름이 같다면 어노테이션도 생략할 수 있다고 답했다. 하지만 당연하다고 생각했던 것이 예외를 발생시켰다. 예외를 발생시킨 코드는 아래와 같다. @GetMapping("/login") public ResponseEntity getPostByParam(@RequestParam Str.. [Servlet] 서블릿과 JSP란? 자바로 웹 개발을 공부하면 반드시 공부하는 것이 스프링 Web MVC 프레임워크(이하 스프링 MVC)다. 그만큼 스프링 MVC는 웹 애플리케이션을 개발함에 있어서 필요한 다양한 기술적 편의를 제공한다. 그중에서 가장 강력한 부분이 Bean이 아닐까 싶다. 스프링 MVC를 사용해서 웹 애플리케이션 개발 하다 보면 간혹 가다 만나는 것이 서블릿(Servlet)과 JSP(Java Server Pages)이다. 서블릿? JSP? 간단하게 설명하자면, 서블릿은 Java EE 기술 스택 중 하나로 서버에서 동적으로 클라이언트의 요청에 대한 응답을 처리할 수 있는 API들을 정의한 집합이다. JSP의 경우 서블릿과 같은 맥락이지만 화면을 처리하는 역할에 초점이 맞추어져 있다. 이전에 웹 애플리케이션은 정적인 리소스(.. [JSP] JSP / Maven / Tomcat 프로젝트 생성하기 본 포스팅은 Intellij Ultimate IDEA, Tomcat 9.0.73, Java 11.0.18을 통해 진행되었습니다. Intellij Ultimate IDEA는아래의 링크에서 다운로드 받을 수 있습니다. https://www.jetbrains.com/idea/ IntelliJ IDEA – the Leading Java and Kotlin IDE IntelliJ IDEA is undoubtedly the top-choice IDE for software developers. It makes Java and Kotlin development a more productive and enjoyable experience. www.jetbrains.com # 프로젝트 생성 먼저 New Project 로.. 이전 1 다음