Spring 15

[Spring] Custom exception로 공통 예외 처리하기(feat. @ExceptionHandler, @ControllerAdvice)

토이 프로젝트에서 예외를 처리 하는 과정에서 custom exception을 구현했다.(가장 큰 이유는 실무 로직을 짜다보면 다양한 상황에 대해 예외가 발생할 수 있는데, 협업을 함에 있어 프론트단에 구체적인 예외를 알려주는게 좋다고 생각했다. 또한 예외처리를 한 곳에서 관리할 수 있다는 점에서 유지보수에 용이하다고 생각한다.) 스프링은 예외처리를 하기 위해 @ExceptionHandler라는 유연한 기능을 제공한다. 그리고 이러한 예외처리를 전역에서 제공하기 위해 @ControllerAdvice, @RestControllerAdvice를 사용할 수 있다. 이번 포스팅은 각 어노테이션이 어떠한 기능을 수행하며, 어떻게 예외처리를 깔끔하게 할 수 있는지 정리해보고자 한다.  1. Spring의 기본 예외처..

Spring 2024.05.07

스프링 배치(Spring Batch)로 대용량 데이터 관리하기

토이 프로젝트를 진행하며 대용량 데이터를 일괄적으로 관리하기 위해 Spring batch를 사용하였다. 복습 겸 구조를 이해하기 위해 글로 정리해보려하고 한다. 1. Spring Batch 란 Spring batch란 스프링에서 제공하는 대용량 데이터 처리를 위한 기능을 제공하는 프레임워크이다. 배치란 일괄처리를 의미한다. 즉, Spring batch는 지정한 스케줄러에 의해 정해진 시간에 맞춰 작업을 수행한다. 기능으로는 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등이 있다. Spring Batch는 스케줄러인가? 결론적으로 Spring Batch는 스케줄러가 아니다. Batch는 데이터를 대용량으로 일괄처리하기 위한 Job이라는 형태의 객체를 제공할 뿐이고, ..

Spring 2024.04.01

[Spring] Spring Security

1. Spring Security 란 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크 용어정리 인증 : Authentication. 사용자의 신원을 검증하는 프로세스 ex) 로그인 인가 : Authorization. 인증된 사용자가 어떠한 자원에 접근할 수 있는지를 확인하는 절차 ex) 관리자 페이지는 관리자만 들어갈 수 있고 일반 유저는 들어갈 수 없음 즉, 인증이 먼저 이루어지고 인가가 이뤄져야 한다. Spring Security에서는 이러한 인증, 인가를 위해 Principal을 아이디로 Credential을 비밀번호로 사용하는 Credential 기반의 인증방식을 사용한다. 2. Servlet Filter 스프링 시큐리티는 서블릿의 필터를 기반으로 동작..

Spring 2023.02.08

[Spring] Servlet 과 Spring

1. Servlet (서블릿) 출현 배경 일반적으로 웹서버는 정적 페이지만을 제공한다. (Web Server는 정적 데이터만 전달할 수 있었다.) 따라서 동적인 페이지를 제공하기 위해서 웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야만 한다. 따라서 나온 것이 CGI이다. CGI 동적 데이터를 처리하는 인터페이스 (Web Server와 프로그램 사이의 규약) CGI는 어떠한 프로그래밍 언어로도 구현이 가능하며, 별도로 만들어 놓은 프로그램에 HTML의 GET/POST 방법으로 클라이언트의 데이터를 환경변수로 전달하고, 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것이다. 한계 request가 들어올 때 마다 Process를 생성하기 때문에 많은 사용자를 처리하기엔 무리였다. 같은 re..

Spring 2023.02.06

[Spring] 빈 스코프

1. 빈 스코프 스코프란 빈이 존재할 수 있는 범위를 뜻한다. 스프링 빈은 기본적으로 싱글톤 스코프로 생성된다. 스프링은 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입, 초기화까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request : HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다. session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 (HTTP Session과 동일한 생명주기를 가지는 스코프) application : 웹의 서블..

Spring 2023.02.01

[Spring] 빈 생명주기 콜백

1. 빈 생명주기 콜백 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 스크링 빈 라이프 사이클 객체 생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고, 의존주입이 끝난 다음에 데이터를 사용할 수 있는 준비가 된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야한다. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메소드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> ..

Spring 2023.01.30

[Spring] 조회된 Bean이 두 개 이상일 때 - @Autowired 필드명, @Qualifier, @Primary

0. 조회 대상 빈이 2개 이상일 때 해결 방법 @Autowired 필드 명 매칭 @Qualifier -> @Qualifier끼리 매칭 -> 빈 이름 매칭 @Primary 사용 1. @Autowired 필드 명 매칭 @Autowired가 등록된 빈을 찾을 때는 다음과 같은 매칭 규칙으로 빈을 조회한다. 주입받고자 하는 타입으로 매칭을 시도한다. 타입이 여러 개면 필드 또는 파라미터 이름으로 매칭을 시도한다. @Autowired private DiscountPolicy discountPolicy; @Component public class FixDiscountPolicy implements DiscountPolicy {} //그리고 @Component public class RateDiscountPolic..

Spring 2023.01.30

[Spring] 필터(Filter) & 인터셉터(Intercepter)

1. 필터(Filter) 필터(Filter)는 J2EE 표준 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위밖에서 처리가 된다. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것이고(스프링 빈으로 등록은 된다.), 디스패처 서블릿 전/후에 처리하는 것이다. 필터 제한 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 //로그인 사용자 HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) //비 로그인 사용자 필터에서 적..

Spring 2023.01.30

[Spring] @RequestParam, @ModelAttribute, @RequestBody 정리

Spring에서 클라이언트로부터 받은 요청을 객체로 바인딩하기 위해 사용하는 방법들 1. @RequestParam 1개의 HTTP 요청 파라미터를 받기 위해서 사용한다. RequestParam은 필수 여부가 true이기 때문에 반드시 해당 파라미터가 전송되어야 한다. (위배시 400에러 발생) 반드시 필요한 값이 아니라면 required를 false로 설정하면 되고, defaultValue 옵션을 사용하여 기본값을 지정할 수 있다. String, int, Integer 등의 단순 타입일경우 @RequestParam 생략 가능 생략할 경우 스프링 MVC는 내부에서 required=false를 적용한다. @ResponseBody @RequestMapping("/request-param-required") p..

Spring 2023.01.29

[Spring] MVC 패턴 & 프론트 컨트롤러(Dispatcher-Servlet)

1. Model View Controller 컨트롤러 -> HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과데이터를 조회해서 모델에 담는다. 모델 -> 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다. 뷰 -> 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. MVC 패턴 한계 MVC 패턴은 공통 처리가 어렵다는 한계가 있다. 기능이 복잡해질수록 컨트롤러에서 공통으로 처리해야 하는 부분이 점점 더 증가할 것이다. 이 문제를 해결하기 위해서 컨트롤러 호출 전에 먼저 공통 기능을 처리해야한다. 2. 프론트 컨트롤..

Spring 2023.01.29