본문 바로가기

legacy/Spring

(60)
[Spring] 서블릿 필터와 스프링 인터셉터 웹 컨테이너란?웹 컨테이너는 서블릿과 JSP 등 웹 애플리케이션을 실행시키기 위한 환경을 제공한다. HTTP 요청을 처리하기 위한 기능을 제공하고, 대표적인 웹 컨테이너로 Apache Tomcat, Jetty, GlassFish 등이 있다.역할서블릿 생명 주기서블릿 생성, 초기화, 요청 처리, 소멸클라이언트 요청 및 응답 처리HTTP 요청을 서블릿으로 전달하고, 서블릿으로부터 응답을 전달받아 클라이언트로 전달한다. 1. Servlet Filter클라이언트의 요청이 Dispatcher Servlet으로 전달되기 전, url 패턴에 맞는 요청을 먼저 받아 처리한다.사진에서 알 수 있듯이 Servlet Filter는 Spring 영역에 존재하는 것이 아니다. 서블릿 필터를 사용하기 위해서는 아래의 Filter..
[Spring] 스프링 빈 생명 주기 (Spring Bean Life Cycle) 애플리케이션 실행스프링 컨테이너 생성애플리케이션이 시작되면서 스프링 컨테이너가 생성된다. 스프링 컨테이너는 스프링 빈을 생성 및 관리한다.스프링 빈 등록스프링 빈은 기본적으로 싱글톤으로 생성되어 스프링 컨테이너에 등록된다.각 Bean의 인스턴스를 하나만 생성하고, 이를 모든 요청에 대해서 공유한다.@Configuration : 설정 클래스에 @Bean으로 등록된 객체를 스프링 빈으로 등록한다.@ComponentScan : @Component를 사용한 클래스를 스프링 빈으로 등록한다.의존성 주입생성된 빈들 간에 의존성을 주입한다. 필드 주입, 수정자 주입, 생성자 주입 방식이 사용된다.초기화 콜백추가적인 초기화 작업이 수행된다.ex. DB 연결 작업, 초기 데이터 로드@PostConstruct가 붙은 메서..
[Spring] 서블릿과 스프링의 차이점과 상호작용 스프링 컨테이너와 서블릿 컨테이어는 다른 목적으로 사용된다.스프링 컨테이너 : 애플리케이션의 비즈니스 로직을 관리하고, 객체의 생명주기와 의존성 관리를 담당서블릿 컨테이너 : 웹 요청과 응답(HTTP 프로토콜)을 처리하는 데 집중스프링 컨테이너는 IoC(Inversion of Control, 제어의 역전)을 기반으로 애플리케이션의 객체를 관리한다. IoC란 프로그램을 개발자가 아닌 프레임워크에 의해 관리되는 것을 의미한다.서블릿 컨테이너는 웹 서버와 통신을 하여 HTTP 요청을 받고, 서블릿을 사용하여 요청을 처리한 응답을 클라이언트로 전송한다. 스프링 컨테이너스프링 컨테이너는 애플리케이션을 실행시키기 위해 객체(빈) 생성, 초기화, 의존성 주입 등을 담당한다. 이는 개발자가 쉽게 객체 간의 의존성을 관..
[Spring] @Autowired 과정 @Autowired 주입 과정Spring Bean 생성애플리케이션이 시작되면서 스프링 컨테이너가 빈을 생성한다. 생성된 빈은 스프링 컨테이너에 의해 관리된다. → 이를 제어의 역전(IoC)라고 한다.의존성 탐색스프링 컨테이너는 @Autowired가 붙은 필드, 세터, 생성자를 탐색한다.의존성 주입2번을 통해 의존성 주입이 필요한 객체를 찾고, 찾은 객체의 클래스와 일치하는 인스턴스를 스프링 컨테이너에서 찾아서 주입한다. 이때, 찾은 객체의 클래스와 일치하는 Bean이 여러 개가 존재한다면 별도의 처리가 필요하다. → 아래에서 확인한다.주입 완료의존성 주입이 완료되면 초기화 콜백(@PostConstruct)이 호출된다. @Autowired를 통한 3가지 주입 방식생성자 주입@Servicepublic cla..
[Spring] Spring Bean이란? Spring Bean (스프링 빈)이란?IoC 컨테이너에 의해 프레임워크로부터 생성되고 관리되는 자바 객체를 의미한다. 스프링 컨테이너에 Bean을 등록하는 방법1. @ComponentScan에 의한 자동으로 Bean 등록@Component가 붙은 애너테이션을 사용하면 스프링 컨테이너에 의해 자동으로 Bean으로 등록된다. @Component가 붙은 대표적인 애너테이션은 다음과 같다.@Controller@Service@RepositoryControllerUserController는 UserService에 의존한다.@Controllerpublic class UserController { private UserService userService; public UserController(UserSe..
[Spring] DI(Dependency Injection)과 IoC(Inversion of Control) DI (Dependency Injection)다른 프레임워크와 달리 스프링은 의존 관계 주입이라는 차별점을 갖는다.개발자가 직접 객체를 생성하는 것이 아닌, 프레임워크에서 객체를 생성한 후 주입해 주는 방법이다. 방법 1. 개발자가 직접 객체를 생성한다.A 객체를 사용하기 위해 개발자가 생성자를 사용하여 B와 C 객체를 생성하는 방식이다.즉, 의존성 주입을 사용하지 않고 직접 객체를 생성하여 주입하는 방식이다.public class UserService { private UserRepository userRepository = new UserRepository(); public User findUser(String userId) { return userRepository.f..
[Spring] SSE(Server Sent Events)를 사용하여 실시간 알림 기능 사용하기 SSE (Servet Sent Events)란SSE는 Server Sent Events의 줄임말입니다. 서버에서 클라이언트로 실시간 이벤트를 전달하는 기술입니다.위 사진을 보면 클라이언트가 서버와 연결을 먼저 진행합니다. 이를 구독(subscribe)라고 합니다. 이후에 서버에서 클라이언트로 단방향 통신을 진행하며, 클라이언트의 요청이 없이도 서버에서 응답을 내릴 수 있습니다. SSE의 장점은 다음과 같습니다.실시간으로 이벤트를 발생시킬 수 있다.연결이 끊어지면 자동으로 연결을 시도한다.HTTP 통신이다. 실시간 알림의 경우 서버에서 클라이언트 방향으로만 데이터를 전송하면 되기 때문에, 양방향으로 통신을 진행할 필요가 없습니다. 따라서 SSE를 사용하여 실시간 알림을 구현해보도록 하겠습니다. 스프링부트에..
[Spring] 이미지를 AWS S3로 업로드하는 2가지 방법 (MultipartFile, PresignedUrl) 클라이언트가 이미지를 업로드할 때, 서버에서 처리할 수 있는 방법은 2가지가 존재합니다.서버에서 MultipartFile 형태로 데이터를 받아서 AWS S3로 업로드한다. 서버에서 presignedUrl을 발급하여 AWS S3로 업로드한다.2번에서 presignedUrl이 다소 생소할지라도 이번 글을 통해 이해할 수 있습니다. (AWS S3 생성 및 스프링과 연결 방법에 대해서는 생략합니다) 1. MultipartFile 형태로 서버에서 처리스프링에서는 MultipartFile 인터페이스를 제공합니다. 업로드한 파일의 이름, 크기 등을 제공하는 메서드가 존재합니다.Controllerform-data로 넘어오는 이미지를 MultipartFile로 받습니다.@RestController@RequestMappi..