스프링부트 너 뭐 돼?🤷‍♀️(6) - 필터, 인터셉처, ORM, JPA

joyfulwave·2022년 12월 5일
0

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




📚 session time out

세션이 유지되는 시간을 설정해줄 수 있어요.

📌 설정 방법

  • application.properties 작성해줘요.
server.servlet.session.timeout=시간
  • 시간 : 초단위, 기본은 1800초(30분), 분단위로 설정해줄 수 있는데 60초 보다 작은 값은 안돼요.



📚 필터

  • 클라이언트로부터 요청이 백엔드로 가기 전에 가로채기 위해서 서버로부터의 응답이 클라이언트로 보내지기 전에 조작하기 위해서 사용해요. 한글이 깨지는 것을 방지한다던지, 특정 인코딩 방식을 부여한다던지하는 필터링이 가능해져요.
  1. HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러
  2. 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

0개의 댓글