Spring
-
스프링 컨테이너와 @Configuration and @BeanSpring 2024. 1. 5. 09:21
[spring container가 나온 이유 (IOC)] 일단 Ioc(Inversion of control)를 만족하기 위해특정 클래스 내에서는 자신이 의존하는 타 클래스 객체를 생성하는 코드가 없어야한다말이 좀 애매할 수 있는데 아래 한 문장이 제일 중요한 말이다 자신이 의존하는 클래스 객체를 생성하면 안된다 만약 이런 상황이면 서비스 상황이 바뀌면 모든 클래스 내 생성하는 객체 코드도 바꿔야하므로 복잡해진다 그래서 따로 모든 객체들을 생성하고 해당 객체들을 이를 사용하는 클래스에 주입하는 클래스가 존재해야한다즉 특정 어플리케이션이 필요한 모든 객체들을 생성하기만 하는 역할을 가진 클래스가 필요하다는 것임 ㅇㅇ그래서 나온게 spring container와 Bean 이라는 개념임 위에 필요한 모든 객체를..
-
스프링 인터셉터Spring 2023. 12. 29. 20:53
스프링 인터셉터도 서블릿 필터, AOP와 동일하게 공통 관심 사항을 해결할 수 있는 기능임. 인터셉터는 그림에서 볼 수 있듯이 스프링 영역(Spring Context) 안에서 실행됨. 특정 Controller가 실행되기 전이나 실행된 후 추가적인 작업을 할 수 있도록 함. 서블릿 필터가 서블릿이 제공하는 기술이라면,스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘 다 공통관심사항을 처리하지만, 적용되는 순서와 범위, 사용방법이 다름. preHandle1. 세션 체크: 세션에서 로그인 여부를 확인하고 로그인되지 않았으면 리다이렉트.2. API Rate Limit (속도 제한): 사용자의 API 호출 횟수를 제한3. 특정 URL 접근 제한: 관리자 페이지 접근 권한 체크postHandle4. 공통 응..
-
서블릿 필터Spring 2023. 12. 28. 17:07
HTTP Request가 컨트롤러까지 도달하기 전에 여러 관문을 거치는데이 중에서 스프링 컨텍스트 밖의 서블릿 단에서 한번 HTTP Request들을 필터링해주는 기능을서블릿 필터라고 한다! 1. CORS 처리 : 다른 도메인에서 오는 요청을 허용할지 제한할지 결정2. XSS 및 SQL Injection 방지 : 입력값을 필터링하여 악성 코드 삽입 방지3. 로깅 (@Slf4j) : 모든 HTTP 요청과 응답을 기록4. JWT 인증 처리: 요청 헤더에서 JWT 토큰을 확인하고 인증 여부 결정5. 인코딩 변환 간단하게 말하면 Filter는 Spring 영역에 들어오기 전에 Filter 작업을 하는 역할을 합니다. 즉, 적합한 Controller 매핑을 해주는 DispatcherServlet이 실행되기 전에앞..
-
@RestController를 사용하는 이유Spring 2023. 10. 9. 01:38
@RestController = @ResponseBody + @Controller 로써,ViewResolver를 거치지 않고 HttpMessageConverter를 통해 HttpResponseBody에 데이터를 담아 보내라는 어노테이션이다. 원래 Spring은 아래와 같이 viewResolver를 통해서 Thymeleaf 같은 뷰 템플릿을 활용해서 완성된 View 를 보내준다.하지만 최근 Client Side Rendering이 유행을 타며 아래와 같은 서버 사이드 렌더링 방식을 사용하지 않게 되었다. 그럼 우리는 이제 SSR 방식이 아니므로 viewResolver가 동작할 필요가 없고,그냥 Client 단에서 (React 단에서) 필요한 데이터만 JSON 같은 형식으로 넘겨주기만 하면 되는 것이다. 이..
-
Spring MVC 동작방식Spring 2023. 10. 6. 23:28
[ DispatcherServlet ]기존의 frontcontroller가 DispatcherServlet임.이 DispatcherServlet은 부모클래스에서 HttpServlet을 상속받고 있기 때문에 Servlet으로 작동함. Spring Boot 구동 시 DispatcherServlet은 자동등록하며 모든 경로(urlPatterns="/")에 대해 매핑함. 이 DispatcherServlet은 명시적으로 코드로 작성하여 호출하지 않아도 됨.그냥 자동으로 생성되고 등록됨. 얘가 HTTPRequest를 받고 그에 맞는 응답을 보내는데 모든 작업에 관여하는 관리자임.즉 얘가 다른 놈들(Controller/viewResolver)을 호출하고 사용하는거임. 즉 얘가 @Controller 붙은 클래스에서 ..
-
Spring ContainerSpring 2023. 10. 6. 19:58
[Spring은 DI와 IoC를 기반으로 설계된 프레임워크이다] 1. IoC (Inversion of Control)일반적으로 개발자가 객체를 생성하고 필요한 의존성을 연결하지만, IoC는 그 제어권한을 프레임워크(즉, Spring Container)가 가져가는 것이다.즉, 개발자의 객체에 대한 제어 권한을 Spring Container에게 넘겨줬다는 의미로 제어의 역전이라고 표현하는 것이다! 2. DI(Dependency Injection)객체가 필요로 하는 의존성을 외부에서 주입받는 방식이다.Spring은 객체를 만들고, 그 객체가 필요로 하는 의존성을 찾아서 알아서 주입해준다. [스프링 컨테이너] 스프링에서 Bean 들을 관리하는 객체 == 객체들을 관리하는 객체이다 해당 스프링 어플리케이션에 필요..
-
Spring Boot Application 아키텍처Spring 2023. 10. 6. 10:14
[웹 어플리케이션 아키텍쳐] 웹 어플리케이션의 아키텍쳐가 다양할 수 있다는 생각을 가지고 공부를 진행하면 좀 더 유연하게 공부를 진행할 수 있다. 웹서버와 WAS는 독립적인 서버로만 생각 된다.하지만 이는 아키텍쳐를Client - Web Server - WAS - DB로 잡아서 해석하면 그렇게 된다. 하지만 웹서버의 아키텍쳐는 보다 다양하게 설계되어질 수 있다. 1. Client - Web Server - DB 정적인 컨텐츠만 처리하는 서버 (이게 Nginx) 2. Client - WAS - DB WAS내에 Web Server를 포함하는 구조 (이게 Spring Boot)Spring은 WAS 내부에 Web Server가 있는 구조로, WAS가 Web Server를 포함하는 구조로아래부터는 Spring을..
-
Web Server와 Web Application Server(WAS)Spring 2023. 10. 5. 11:36
1. 동적 웹페이지의 탄생 배경과 역사초창기 웹이 출현했을때는 정적(Static)인 웹 페이지들이 많았고 그것들만으로도 충분했다. 하지만 정적 웹 페이지의 모든 내용은 정해져있었기 때문에 각각의 사용자의 요구를 맞출 수 없었고 이로 인해 동적(Dynamic)인 웹페이지를 필요로 하게 되었다. 그래서 등장한 것이 CGI(Common Gateway Interface)였다.CGI는 프로그래밍 언어나 스크립트는 아니었고, 서버에서 수행중인 일반 프로세스 사이에서 정보를 주고 받는 규칙을 의미했다.CGI는 Perl, C, C++등의 언어를 지원하면서 1) 웹 서버를 통해 요청을 받고 2) 실행 결과를 다시 웹 서버를 거쳐 클라이언트의 브라우저로 보낼 수 있는 기능을 가지고 있다. 하지만 CGI 방식의 근본적인 문..