피할 수 없다면 즐기자! 스프링부트 너.. 뭐 돼?

📚 session time out
세션이 유지되는 시간을 설정해줄 수 있어요.
📌 설정 방법
- application.properties 작성해줘요.
server.servlet.session.timeout=시간
- 시간 : 초단위, 기본은 1800초(30분), 분단위로 설정해줄 수 있는데 60초 보다 작은 값은 안돼요.
📚 필터
- 클라이언트로부터 요청이 백엔드로 가기 전에 가로채기 위해서 서버로부터의 응답이 클라이언트로 보내지기 전에 조작하기 위해서 사용해요. 한글이 깨지는 것을 방지한다던지, 특정 인코딩 방식을 부여한다던지하는 필터링이 가능해져요.
- HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러
- HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 필터3(필터체인) -> 서블릿 -> 컨트롤러
- 필터를 여러개 두는 것을 필터체인이라고 한다.
📚 인터셉터

-
스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이이에요. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이에요.
-
둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 달라요.
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러
-
스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출돼요.
-
스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 돼요.
-
정밀한 URL 패턴을 적용할 수 있어요.
- HandlerInterceptor 인터페이스 사용
- 컨트롤러 호출 전 : preHandle
- 컨트롤러 호출 후 : postHandle
- 요청 완료 이후 : afterCompletion, 뷰가 렌더링 된 이후에 호출돼요.
📌 interceptor 등록
- order() : 인터셉터의 호출 순서를 지정해요. 낮을수록 먼저 호출.
- appPathPatterns("/**") : 인터셉터를 적용한 URL패턴을 지정해요..
- excludePathPatterns(/on) : 인터셉터에서 제외한 패턴을 지정해요.
📌 URL 패턴
- addPathPatterns("/sub1/test1", "/sub1/test2")
- 1개의 "어떠한" 경로에 상관없이 쓰려면 / => /sub1/
- 1개를 넘어서서 몇개의 어디든지의 경로에 추가하고 싶으면 => sub1/**
📚 ORM이란

- Object-relational mapping(객체 관계 매핑)
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 테이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
- 우리가 일반적으로 알고 있는 애플리케이션 class와 RDB(Relational Datase)의 테이블을 매핑(연결) 한다는 뜻이며, 기술적으로 어플리케이션의 객체를 RDB테이블에 자동으로 영속화 해주는 것이라고 보면 돼요.
📌 장점
- SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비지니스 로직을 구성하는 데만 집중할 수 있어요. (내부적으로는 쿼리를 생성하여 DB를 조작해요. 하지만 개발자가 이를 신경쓰지 않아도 돼요)
- Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어, 각종 객체에 대한 코드를 별도록 작성하여 코드의 가독성을 높여줘요.
- 객체지향적인 코드 작성이 가능해요. 오직 객체지향적 접근만 고려하면 되기 때문에 생산성이 증가해요.
- 매핑하는 정보가 Class로 명시 되었기 때문에 ERD(Entity Relationship Diagram)를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리해져요.
- 예를들어 기존 방식에서 MySQL 데이터베이스를 사용하다가 PostgreSQL로 변환하다고 가정해보면, 새로 쿼리를 짜야하는 경우가 생겨요. 이런 경우에 ORM을 사용한다면 쿼리를 수정할 필요가 없어요.
📌 단점
- 학습비용이 비싸요 :(
- 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속소 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있어요.
- 복잡하고 비지니스 로직에 종속적인 쿼리는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있어요.
📚 JPA

- Java Persistence API
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- 자바 진영의 ORM 기술 표준
- JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하지 않아도 돼요.
- JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로 Mapping 해줘요.
📚 데이터베이스 방언
- JPA는 특정 데이터베이스에 종속 X
- 각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 달라요.
⚫예
- 가변 문자 : MySQL -> varchar / Oracle -> varchar2
- 문자열을 자르는 함수 : SQL 표준 -> SUBSTRING() / Oracle -> SUBSTR()
- 페이징 : MySQL은 LIMIT, Oracle rownum
⚫ 방언
SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능
무사히 적응할 그 날을 기대 ✔️

출처
https://media.giphy.com/media/kyUIknbbDNvID5XzU4/giphy.gif
https://media.giphy.com/media/A6aHBCFqlE0Rq/giphy.gif