Spring(20)
-
Spring MVC와 WebFlux의 차이
Spring WebFlux Spirng WebFlux는 Event driven 방식이고 비동기 논블로킹 방식입니다. WebFlux는 Node.js처럼 이벤트 루프가 돌아서 요청이 발생할 경우 그것에 맞는 핸들러에게 처리를 위임하고 처리가 완료되면 callback 메소드 등을 통해 응답을 반환합니다. 그래서 이 방식의 경우 Spirng MVC에 비해 적은 스레드로 많은 사용자의 요청을 받아낼 수 있습니다. Spirng MVC Spring Mvc는 사용자의 요청이 들어왔을 때마다 Thread를 생성하여 요청을 처리합니다. 하지만 다수의 사용자 요청이 들어왔을 때, Thread를 계속 생성하는 것은 리소스가 굉장히 많이 들어갑니다. 그래서 Spring MVC의 경우 어플리케이션이 실행되면서 Thread Poo..
2021.10.29 -
Spring + Hibernate Validator Custom Message
Java Bean Validation 일반적으로 데이터 검증(Validation)은 여러 계층에 걸쳐서 이루어지게 됩니다. 거의 동일한 내용의 검증 로직이 각 계층별로 구현된다면 그것은 중복이고 낭비가 심한 작업입니다. 또한 그러한 경우 각 계층별로 구현된 검증 로직간 불일치로 인해 오류가 발생하기도 쉽습니다. 이를 해결하기 위해 데이터 검증을 위한 로직을 도메인 모델 자체에 묶어서 표현하는 방법이 있습니다. 실제 코드로 표현된다면 너무 장황하고 복잡하기 때문에, Java에서는 Bean Validation이라는 이름으로 Annotation을 데이터 검증을 위한 메타 데이터로 사용하는 방법을 제시하고 있습니다. Hibernate Validator Hibernate Validator는 Bean Validat..
2020.09.15 -
Spring Integration
Spring Integration이란 Spring Integration은 스프링 기반 어플리케이션 내에 메시징 기반 서비스를 제공하고 선언적 어댑터를 사용해 외부 시스템과의 통합을 쉽게 해줍니다. 이런 어댑터들은 리모팅, 메시징, 스케줄링과 같이 스프링이 제공하는 기능들을 추상화하고 있습니다. Spring Integration의 컴포넌트 Message Spring Integration에서 메시지란 메타데이터와 함께 결합되어 있는 일련의 자바 오브젝트를 위한 포괄적인 Wrapper를 말합니다. 아래 메시지 인터페이스가 보여주듯이 메시지는 페이로드와 여러 개의 헤더로 구성됩니다. public interface org.springframework.integration.Message { MessageHeader..
2020.09.15 -
Spring WebFlux
Bloking I/O Block I/O는 어플리케이션에서 I/O 요청을 한 후, 완료되기 전까지는 Application이 Block 되어 다른 작업을 수행할 수 없습니다. 이는 해당 자원이 효율적으로 사용되지 못하고 있음을 의미합니다. 하지만 실제 어플리케이션들은 Blocking 방식임에도 불구하고 마치 Block이 안 되듯이 동작하는 것처럼 보입니다. 이것은 Single Thread 기반이 아닌 Multi Thread를 기반으로 동작하기 때문입니다. Block 되는 순간 다른 Thread가 동작함으로써 Block의 문제를 해소하였습니다. 그러나 Thread 간 전환에 드는 비용이 존재하므로 여러 개의 I/O를 처리하기 위해 여러 개의 Thread를 사용하는 것은 비효율 적으로 보입니다. Synchron..
2020.09.13 -
Spring boot 와 Spring Legacy 비교
Pre-set 설정 빌드 도구로 maven을 사용한다고 가정했을 때, Spring Legacy 프로젝트는 다양한 라이브러리를 pom.xml에 추가하고 추가적인 설정또한 xml로 작성해야합니다. 예를 들어 DB 연결이 들어간다면, pom.xml에 jdbc 관련 라이브러리르 추가하고 ORM을 mybatis를 쓴다면 함께 추가해야 합니다. 하지만 Spring Boot는 많은 사람들이 사용하던 설정을 Pre-set으로 구성해서 제공하므로 https://start.spring.io/에서 원하는 의존성 기능들을 추가한 뒤 다운로드 받고 import하면 빠르게 설정 내용을 프로젝트에 적용할 수 있습니다. WAS Spring Legacy 프로젝트를 진행하게 되면 WAS를 설치하고, 설정하는 등 초기에 적지 않은 시간을..
2020.09.10 -
Spring Batch
Batch Application Batch는 일괄처리 라는 뜻을 가지고 있습니다. 만약 하루 전 날의 데이터를 집계해야한다고 가정해보겠습니다. 하루 전 날의 데이터들을 모으면 상당히 많은 양의 데이터가 모입니다. 이렇게 큰 데이터를 읽고 가공하고 저장한다면 해당 서버는 순식간에 CPU, I/O등의 자원을 다 써버려서 다른 Request를 처리하지 못합니다. 그리고 이 기능은 하루에 1번 수행됩니다. 이를 위해 API를 구성하는 것은 많은 낭비입니다.이렇게 단발성으로 대용량의 데이터를 처리하는 Application을 Batch Application이라고 합니다. Batch Application은 다음의 조건들을 만족해야만 합니다. 대용량 데이터: Batch Application은 대량의 데이터를 가져오거나..
2020.07.02