Back-end/Spring-핵심& webMVC 25

SpringBoot Actuator

Actuator는 외부 라이브러리로 의존성을 추가하면 바로 애플리케이션 모니터링 및 관리를 할 수 있다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator'}     https://velog.io/@mohai2618/SpringBoot-Actuator-안전하게-사용하기 SpringBoot Actuator 안전하게 사용하기안전하게 모니터링 의존성을 사용하는 방법에 대해서 알아봤습니다velog.io

파일 다운로드, 파일 업로드 API 구현 시 보안 상 유의점

1. 파일 다운로드 Directory Traversal Attacks: Attackers might attempt to traverse directories by manipulating the fileName parameter. To prevent this, you should validate and sanitize the fileName parameter to ensure it only points to files within the designated storage directory. Authentication and Authorization: Implement proper authentication and authorization mechanisms to ensure that only authori..

Rate Limiting Mechanism

Spring Boot REST API to prevent users from making too many requests within a short period of time 서버가 제공할 수 있는 자원에는 제한이 있기 때문에 안정적으로 서비스를 제공하기 위해 예를 들어api 호출횟수를 1분당 60회로 제한하고, 60회를 넘어서는 순간 요청을 처리하지 않고 리턴한다. 이를 Throttling이라고도 한다. Rate Limit가 필요한 사례 1. 서비스의 안정성 및 성능보장 : 서버가 다운되는 등의 사고를 미연에 방지하기 위해 2. 서비스의 가용성 확보 : 과도한 트래픽으로부터 서비스를 보호 3. 보안 : 로그인, 프로모션 코드와 같이 보안적으로 중요한 기능을 brute force attck으로부터 보호한..

Spring Filter, Interceptor의 범위 및 SpringSecurity FilterChain와의 관계

0. Servlet Filter VS. HandlerInterceptor 아래 그림에서와 같이 Filter는 DispatcherSevlet 앞에서 먼저 동작한다. Interceptor는 Dispatcher Servlet에서 Controller(Handler)사이에서 동작한다. 1) 필터 웹 어플리케이션의 Context 역할 스프링 기능을 활용하기 어려움 일반적으로 인코딩, CORS, XSS, LOG, 인증, 권한 등을 구현 2) 인터셉터 스프링의 Spring Context의 기능이며 일종의 빈 스프링 컨테이너여서 다른 빈을 주입하여 활용성이 좋다. 다른빈을 활용할 수 있어 보통 인증, 권한 등 구현함 1. JwtFilter에서 OncePerRequestFilter 상속 VS GenericFilterBea..

Lombok @Setter 사용 지양 & lombok.config

1. Lombok의 Setter 사용 지양해야하는 이유 - Builder 패턴을 사용해라 1) Setter 메소드를 사용하면 값을 변경한 의도를 파악하기 어렵다. 왜, 어떠한 의도로 데이터를 변경하는지 명확하게 알 수 없다. 코드를 역추적해봐야 한다 2) 객체의 일관성을 유지하기 여럽다. 자바 빈 규약을 따르면 Setter는 public으로 언제든지 변경할 수 있는 상태가 된다. 따라서 모든 곳에서 데이터를 변경할 수 있는 상태가 되기 때문에 객체의 일관성을 유지하기 어려워진다. 2. Setter의 대안 1) 생성자 오버로딩 -> 생성자를 오버로딩하기, 그러나 멤버변수가 많고 다양한 생성자를 가지게 된다면 코드가 길어지고 가독성이 떨어짐 따라서 Builder 패턴 사용 public class School..

Spring 예외 처리 전략 및 Global 예외처리 // @RestControllerAdivce

1. 예외처리 - 발생위치에 따른 구분 Dispatcher Servlet 내에서 발생하는 예외(99%-Controller, Service, Repository) vs. Dispatcher Servlet 전 Filter에서 발생하는 예외 2. 예외처리 방법 1. Controller 단에서의 예외처리 @ExceptionHandler - Contorller 메서드 내의 하위 레이어(Service, Repository 등)에서 예외 발생해도 중간에 처리하지 않는 이상 Controller단까지 예외처리가 던져지고 @ExceptionHandler가 예외를 처리하게 됨. 2. 전역에서 예외처리 - @(Rest)ControllerAdvice - Controller 내의 @ExceptionHandler와 Controll..

Spring - 인터셉터

1. HandlerInterceptor 인터셉터는 Controller의 핸들러가 실행 되기 전이나 후에 추가적인 작업을 실행하기 위해 사용한다. 예를 들어 권한 체크, 로그인 체크 등 관리자 인터셉터 public class AdminInterceptor implements HandlerInterceptor { static final Logger LOGGER = LoggerFactory.getLogger(AdminInterceptor.class); /** * 관리자 페이지는 관리자만 접근 허용. */ public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) { HttpSession session = re..

SessionStatus, @SessionAttributes, @SessionAttribute

1.SessionStatus란 SessionStatus는 @SessionAttributes를 활용해 Session에 남긴 데이터를 정리하는데 활용을 하는 인터페이스이다. model.addAttribute("dutch", "hello"); 일반적으로 위 코드 처럼 "dutch" 라는 키로 model에 세팅하면 응답 이후 값이 삭제 된다. 하지만 컨트롤러 클래스 상단에 @SessionAttribues 를 세팅 후 사용한다면 동작이 변경되게 된다. @RequestMapping("dutch") @Controller @SessionAttributes("dutch") public class DutchController @SessionAttributes선언 후 model.addAttribute 를 호출한다면 해당 k..