Spring(17)
-
@Async 사용법
@Async 사용법 @EnableAsync @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } @Service public class MessageService { @Async public void print(String message) { System.out.println(message); } } @RequiredArgsConstructor @RestController public class MessageController { private final MessageService messa..
2023.07.31 -
Spring Security - Rest API에 csrf protection을 사용하지 않는 이유
CSRF란 CSRF 링크 Rest API 에서 csrf를 disable하는 이유 CSRF의 취약점은 공격자가 사용자가 의도하지 않는 요청을 수행하게 하는 취약점입니다. 즉 공격자는 사용자가 가지고 있는 권한 범위 내에서 악의적인 행위를 할 수 있습니다. 일반적으로 해당 권한은 쿠키와 세션을 이용해서 인증을 하고 있기 때문에 발생하는 일입니다. 하지만 Rest API를 이용한 서버라면, session 기반 인증과는 다르게 stateless하기 때문에 서버에 인증 정보를 보관하지 않습니다. 일반적으로 jwt 같은 토큰을 사용하여 인증하기 때문에 해당 토큰을 Cookie에 저장하지 않는다면 csrf 취약점에 대해서는 어느 정도 안전하다고 말할 수 있습니다.
2022.05.02 -
Spring MVC
Spring MVC란 Spring MVC란 Front Controller Pattern에 기초한 웹 MVC 프레임워크입니다. Spring MVC는 Model, View, Controller를 명확한 클래스로 분할하고 losse coupling 시켜놓아서 매우 유연하고 확장성이 좋게 만들어 놓았습니다. Spring MVC의 구성요소 DispatcherServlet Spring MVC가 Front Controller Pattern에 기반하고 있는데 바로 그 Front Controller가 DispatcherServlet입니다. DispatcherServlet은 클라이언트의 모든 요청을 접수합니다. 그리고 받아들인 요청에 대한 처리를 다른 컴포넌트들에게 보내서 위임하고 있습니다. Infrastructure C..
2021.11.02 -
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