Spring 8

Filter, Interceptor, AOP

웹 개발시 반복되는 로직들이 종종 발생한다. 예를 들면 로그인 관련(세션처리), XSS 공격 방어 등. 이러한 반복되는 로직들이 발생하는 곳 마다 해당 코드를 작성하면, 코드 중복이 심해진다. 이러한, 공통부분(공통로직)을 프로그램의 흐름 앞, 중간, 뒤에 추가하여 모듈화 하여 관리할 수 있다. Spring 에서는 이러한 기능을 세가지 방법을 통해 제공한다. 1. Filter 2. Interceptor 3. AOP 각 방법들은 실행되는 타이밍(시점)이 다르다. Filter filter는 그림을 통해 알 수 있겠지만, DispatcherServlet 보다도 앞단에서 처리된다. 이는 즉, Spring 영역 밖에 있음을 의미한다. filter는 결국 Spring Bean을 사용하지 않는 단순 ServletRe..

Spring 2021.08.26

Database Transaction과 데이터 동기화 -2

지난 포스팅에서 Database Transaction이 무엇인지 알아보았다. 참고: https://ldh-developer.tistory.com/30 Database Transaction과 데이터 동기화 -1 트랜잭션이란? 데이터베이스가 수행할 연산들의 논리적인 작업 단위(하나의 질의가 아닐 수 있다) 트랜잭션의 특징 원자성(Atomictiy) 트랜잭션이 데이터베이스에 모두 반영이 되거나, 하나도 반 ldh-developer.tistory.com Transaction의 기본적인 개념들은 인터넷에 워낙 자료들이 많아서 굳이 자세하게 다루지는 않았다. 문득, Transaction에 대한 이론은 알고있었지만 내가 알던대로 제대로 동작하고 있을까 ? 라는 의문이 들었다. 눈으로 직접 확인하는게 가장 좋을 것 같..

Spring 2021.08.01

Database Transaction과 데이터 동기화 -1

트랜잭션이란? 데이터베이스가 수행할 연산들의 논리적인 작업 단위(하나의 질의가 아닐 수 있다) 트랜잭션의 특징 원자성(Atomictiy) 트랜잭션이 데이터베이스에 모두 반영이 되거나, 하나도 반영이 안되어야 한다.( 1 or 0이어야 함. 0.5는 없다.) 트랜잭션 도중 하나의 작업이라도 성공하지 못하면 모두 Rollback 되어야 함 일관성(Consistency) 트랜잭션이 성공한 후에도 언제나 일관성 있는 데이터베이스 상태를 유지해야 함 독립성(Isolation) 특정 트랜잭션이 수행 중이라면, 해당 트랜잭션이 완료될 때까지 다른 트랜잭션의 연산이 끼어들 수 없다 수행 중인 트랜잭션은 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다 영속성(Durability) 트랜잭션이 완료된 후에는 해..

Spring 2021.08.01

스프링 MVC 구성 요소

( 왼쪽에 *이 붙어있는 class는 하나 이상의 객체를 가질 수 있는 class 이다.) Dispatcher Servlet의 기본 전략 DispatcherServlet.properties에 정의 MultipartResolver 파일 업로드 요청 처리에 필요한 인터페이스 HttpServletRequest를 MultipartHttpServletRequest로 변환해주어 요청이 담고 있는 File을 꺼낼 수 있는 API 제공 LocaleResolver 클라이언트의 위치(Locale) 정보를 파악하는 인터페이스 Default 전략은 요청의 accept-language를 보고 판단 ThemeResolver 애플리케이션에 설정된 테마를 파악하고 변경할 수 있는 인터페이스 HandlerMapping 요청을 처리할 ..

Spring 2020.08.02

DispatcherServlet이란

DispatcherServlet이란? 모든 url 마다 서블릿을 생성하고, 그것을 web.xml에 등록하고 하는 과정이 굉장히 비효율적이었고, 이를 해결하기 위해 Front Conroller 개념이 도입되었다. Front Controller는 모든 Http 요청을 받아서, 해당 요청을 처리할 Handler들에게 분배하는 역할을 한다. Spring에서 이 Front Controller가 바로 DispatcherServlet이다. DispatcherServlet 동작 원리 DispatcherServlet 초기화 아래의 특별한 타입의 빈들을 찾거나, 기본 전략에 해당하는 빈들을 등록한다. HandlerMapping: 핸들러를 찾아주는 인터페이스 HanlderAdapter: 핸들러를 실행하는 인터페이스 Hand..

Spring 2020.08.02

서블릿 리스너와 서블릿 필터

서블릿 리스너 웹 애플리케이션에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특별한 작업이 필요한 경우에 사용할 수 있다. 서블릿 컨텍스트 수준의 이벤트 컨텍스트 라이프 사이클 이벤트 컨텍스트 어트리뷰트 변경 이벤트 세션 수준의 이벤트 세션 라이프 사이클 이벤트 세션 어트리뷰트 변경 이벤트 서블릿 필터 들어온 요청을 서블릿으로 보내고, 또 서블릿이 작성한 응답을 클라이언트로 보내기 전에 특별한 처리가 필요한 경우 사용. 체인 형태의 구조. 서블릿 리스너 동작 확인 public class MyListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System...

Spring 2020.08.01

서블릿이란 ?

서블릿이란 ? Java EE은 웹 애플리케이션 개발용 스펙과 API를 제공한다. 각 요청 마다 Thread를 사용한다 (생성하거나, pool에서 가져와서 사용) 가장 중요한 클래스 중 하나가 HttpServlet 그렇다면 서블릿 이전에 사용하던 기술은 ?? Common Gateway Interface 서블릿과는 달리 요청 당 Thread 가 아닌 Process를 만들어 처리 -> 속도가 느리다 서블릿의 장점 요청 당 Process가 아닌 Thread로 처리하기 때문에 빠르다. Java 기반이므로 플랫폼 독립적이다. Java 기반이므로 Java가 제공하는 보안을 사용할 수 있기 때문에 보안성 좋다. 이식성 서블릿은 누가 관리하는가 ?? : 서블릿 엔진 혹은 서블릭 컨테이너가 서블릿을 관리한다. (ex. 톰..

Spring 2020.07.31

스프링 MVC 소개

MVC란 ? M: Model (평범한 자바 객체 POJO) V: View (ex. HTML, JSP, Thymeleaf, mustache 등등 ) C: Controller(스프링 @MVC) MVC의 역할 모델: 도메인 객체, 또는 DTO로 화면에 전달할 또는 화면에서 전달 받은 데이터를 담고 있는 객체 뷰: 데이터를 보여주는 역할. 다양한 형태로 보여줄 수 있다. (HTML, JSON, XML ..) 컨트롤러: 사용자 입력을 받아 모델 객체를 수정하거나, 모델 객체를 뷰에 전달하는 역할 (입력값 검증 포함) MVC 패턴의 장점 동시 다발적 개발이 가능하다 - 프론트 개발자와 백엔드 개발자가 각자 자기 업무를 동시에 진행할 수 있다. 높은 결합도 - 논리적으로 관련있는 기능을 하나의 컨트롤러로 묶거나, 특..

Spring 2020.07.30