Notion - Spring Security 6 - Authentication Persistence and Session Management 이 글에서는 Spring Security 5와 6의 인증 영속성, 세션 관리에 대한 차이점과 트러블 슈팅을 진행하며 자세히 정리하기 애매했던 내용을 작성해보려고 한다.아래 내용을 참고하여 작성하였다.Authentication Persistence and Session Management :: Spring Security Authentication Persistence and Session Management :: Spring SecuritySession fixation attacks are a potential risk where it is possible for ..
Notion - Spring Aop와 Proxy오늘은 Spring의 Proxy에 대해서 알아 볼 예정이다.추가로 Proxy에 대해 알아보려면 Spring의 AOP에 대해서도 이해하면 좋기 때문에 이도 같이 다룰 예정이다. Proxy?Proxy Server프록시는 어디서 들어본 것 같은 느낌이 많이 드는데, 이는 프록시 서버 떄문일 것같다.프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 시스템 혹은 프로그램을 뜻한다. 클라이언트와 서비스 사이의 중계기능을 하는 것을 뜻하며, 쉽게 말하자면 중계 서비스, 즉 대리로 동작을 수행하는 것이다. 즉, 프록시 서버는 대리 통신을 해준다고 생각하면 된다. Spring에서의 Proxy그렇..
이번에는 이전부터 계속 언급이 되었던 HTTP 메시지 컨버터에 대해 알아보려고 한다. 스프링 MVC는 메시지 바디에 맞춰서 알맞게 메시지 컨버터를 적용한다. 메시지 컨버터 구조 메시지 컨버터는 인터페이스로 이루어져있다. package org.springframework.http.converter; public interface HttpMessageConverter { boolean canRead(Class clazz, @Nullable MediaType mediaType); boolean canWrite(Class clazz, @Nullable MediaType mediaType); List getSupportedMediaTypes(); T read(Class
이번에는 어노테이션 기반 컨트롤러에서 요청을 처리하는 방법에 대해서 알아보려고한다. 이전에는 어떻게 처리했는지와 어노테이션 기반의 처리방법들을 살펴보자. HttpRequest 헤더 처리 Servlet 이용 먼저 HttpServlet를 이용한 방법이다. @RestController public class RequestHeaderController { @RequestMapping("/headers") public String headers(HttpServletRequest request, HttpServletResponse response){ return "ok"; } } HttpServletRequest, HttpServletResponse 우리가 이전에도 사용해봤었던 요소이다. 요청, 응답 정보에 대한 ..
이번에는 Spring을 이용한 여러가지 매핑 방법에 대해 알아보려고한다. 기본적으로 지금까지 사용했던 RequestMapping 이외에 몇번 사용해봤던 Get, PostMapping 그리고 활용법까지 살펴보자. @RequestMapping 가장 기본적으로 사용되는 요청에 대한 매핑법이다. @RequestMapping("/hello-basic") public String helloBasic(){ log.info("helloBasic"); return "ok"; } @RequestMapping(value = "/mapping-get-v1", method = RequestMethod.GET) public String mappingGetV1() { log.info("mappingGetV1"); return "o..
앞으로 로그를 사용하게 될텐데 이에 대해서 간단히 알아보자. 평소에 사용하던 System.out.println()과 같은 시스템 콘솔을 이용한 출력을 사용하지 않고, 로그 라이브러리를 이용해서 로깅을 하는 것이 좋다. 로깅 라이브러리 SLF4J slf4j는 로그 인터페이스로써 주로 사용되는 것은 logback 같은 구현체이다. import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class Lo..
개발 내용을 기준으로 정리한 내용을 작성해보겠다. 기존에 웹 서비스를 개발 할 때 사용되던 서블릿과 JSP는 다음과 같은 한계가 있었다. 서블릿과 JSP의 한계 서블릿 서블릿으로 개발할 때는 사용자에게 표시되는 화면이 자바 코드에 섞여서 지저분하고 복잡했다. JSP JSP를 사용하면서 HTML 작업을 깔끔하게 가져갈 수 있었고 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용할 수 있었다. 하지만 JSP를 살펴보았을 때 반은 회원을 저장, 관리하기 위한 비즈니스 로직이었고 나머지 반은 결과를 표시하기 위한 뷰 영역이였다. 즉 비즈니스 로직 또한 모두 JSP에 노출되어 있다는 말이되고 JSP가 너무 많은 역할을 하고 있는 것을 볼 수 있다. 이는 유지보수에도 너무 큰 수고가 들어가기에 문제가 될 ..
정적 리소스 고정된 HMTL 파일, CSS, JS, 이미지, 영상 등을 제공한다. 웹 브라우저 ↔ Web서버 HTML 페이지 동적으로 필요한 HTML 파일을 생성해서 전달한다. 웹 브라우저 ↔ (HTML전달) ← WAS ↔ DB JSP, 타임리프 등으로 동적으로 HTML을 생성해 보내주게된다. HTTP API HTML이 아니라 데이터 자체를 전달한다. 주로 JSON 형식을 사용하며 다양한 시스템에서 호출하여 사용된다. 웹 클라이언트 ↔ WAS 서버 앱 클라이언트 ↔ WAS 서버 WAS 주문서버 ↔ WAS 결제서버 백엔드 개발자는 위 각각의 리소스를 어떻게 제공할 건지 생각을 잘해야한다. SSR (서버 사이드 렌더링, Server Side Rendering) HTML 최종 결과를 서버에서 만들어서 웹 브라..
웹 애플리케이션 웹 서버 HTTP를 기반으로 동작하는 서버 정적 리소스(HTML, CSS, JS)를 제공하고, 기타 부가기능을 제공한다. 클라이언트 (HTTP 요청) → 웹 서버 (HTTP 응답) ex_) NGINX, APACHE 웹 애플리케이션 서버 (WAS) HTTP를 기반으로 동작하는 서버 웹 서버 기능을 포함하며 프로그램 코드를 실행하여 애플리케이션 로직을 수행한다. 클라이언트 (HTTP 요청) → WAS (HTTP 응답) 동적 HTML, HTTP API(JSON), Servlet, JSP, SpringMVC ex_) Tomcat, Jetty, Undertow 차이점 웹 서버는 정적 리소스, WAS는 애플리케이션 로직을 실행하는 서버이다. 사실은 둘의 용어도 경계도 모호하기에 굳이 나누자면 WAS..
이번 글에서는 빈 스코프에 대해서 알아보려고 한다. 일단 빈 스코프라는 단어가 조금 생소하기도 해서 짚고 넘어가겠다. 빈 스코프는 빈이 존재할 수 있는 범위를 말한다. 저번 글에서는 빈의 생명주기를 살펴본 만큼 이번에는 어느 범위 까지 존재할 수 있는 가를 알아보려는 것이다. 빈 스코프의 종류로는 세가지가 있다. 싱글톤 전에도 설명했겠지만 싱글톤 빈은 객체가 1개로 유지된다. 스프링에서 기본적으로 적용되는 빈이기도 하며, 스프링 컨테이너의 시작부터 종료까지 1개의 객체로 유지되는 것이 특징이다. 프로토타입 프로토타입 빈은 싱글톤과는 반대로 빈이 요청될 때마다 초기화 메서드가 호출 된다. 프로토타입 빈의 스코프는 스프링 컨테이너가 시작 될 때 한 번 초기화가 되며, 그 뒤로는 관리를 받지않기에 ..
이번 글에서는 빈의 생명주기 콜백에 대해서 알아보려고 한다. 애플리케이션 구동 환경에서 원하는 객체를 제대로 사용하려면 생명주기에 대해서는 꼭 알아둬야 한다. 시작 지점에 DB 연결작업이나, 종료 지점에 연결 종료 작업 등은 코딩에서 필수이다. 이전에 안드로이드 앱 코딩 할 때도 생명주기는 매우 중요했었던 기억이 있다. 이번에는 스프링 빈에 대한 생명주기에 대해 자세히 알아 볼 것이다. 스프링 빈의 이벤트 생명주기 스프링 컨테이너 생성 => 스프링 빈 생성 => 의존관계 주입 => 초기화 콜백 => 사용 => 소멸 전 콜백 => 스프링 종료 우리가 스프링 빈을 제대로 사용하려면 의존관계 주입까지 끝난 상태여야만 사용할 수 있게 된다. 이런 상황을 우리는 콜백 메서드를 통해서 알 수 있고, 이 콜백..