Spring/개념

    OSIV와 필터

    OSIV와 필터

    🔍 OSIV란? (Open Session In View) 스프링의 트랜잭션 범위는 Service, Repository 레이어에서만 유지된다. 보통 JPA의 영속성 컨텍스트는 트랜잭션의 생명주기를 따라가는데, OSIV를 이용하면 영속성 컨텍스트의 생명주기를 뷰(컨트롤러)레이어까지 유지할 수 있다. 즉, 영속 상태를 컨트롤러에서까지 유지하기 때문에 컨트롤러 레이어에서 지연로딩이 가능해진다. 🔍 스프링 OSIV의 동작 원리 스프링이 제공하는 OSIV에는 두 가지 방법이 있으며 차이는 영속성 컨텍스트가 언제 생기는지에 있다. Servlet Filter를 이용하는 방법 Interceptor를 이용하는 방법 기본적으로 동작하는 과정은 동일하다. 사용자로부터 요청이 들어오면 설정에 따라 Filter 또는 Interc..

    [Spring] JWT토큰 개념

    [Spring] JWT토큰 개념

    JWT 토큰이란? 사용자 인증을 위해 사용하는 암호화된 토큰으로, 인증받은 사용자에게 토큰을 발급해주고 사용자는 헤더에 이 토큰 정보를 담아 특정 작업을 요청한다. 이러한 토큰은 서버에 따로 저장되지 않고 사용되기 때문에 stateless하다고 할 수 있다. JWT 토큰은 헤더, 페이로드, 서명으로 구성되어 있다. 1. 헤더 -> 토큰 타입과, 암호화 알고리즘에 대한 정보가 담긴다. { "alg": "HS256", "typ": "JWT" } 2. 페이로드 토큰에 담을 정보가 들어가며, 정보의 한 조각을 클레임이라고 부른다. 클레임은 key, value 형태로 한 쌍을 이루고 있다. 2-1. 기본적으로 제공되는 클레임 : 발행시간, 만료 시간 등 2-2. 공개 클레임 :충돌을 방지하기 위해 URI 형식으로..

    [Spring] BindingResult를 이용한 검증

    [도입] 컨트롤러의 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 이 때 검증은 클라이언트와 서버단에서 모두 이루어 지는게 좋다. 그 이유는 다음과 같다. 클라이언트 검증은 조작할 수 있으므로 보완에 취약하다. -> 데이터를 조작해서 서버로 보낼 수 있다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 따라서 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수적이다. Spring에서는 서버단에서 검증을 할 때 에러를 확인하고 이를 view로 쉽게 전달하기 위해서 BindingResult객체를 제공한다. [BindingResult] 보통 errors 메세지를 담고 활용하기 위해 HashMap을 이용하는데, 스프링은 이를 더 쉽게 처리하기 위해 BindingResult객체를 제..

    [Spring] 요청 파라미터

    HttpServeltRequest의 request.getParameter()를 사용하면 두 가지 요청 파라미터를 조회할 수 있다. GET 쿼리 파라미터, POST HTML Form 전송 방식이든 둘다 형식이 같으므로 구분없이 조회할 수 있다. RequestParam @ResponseBody @RequestMapping("/request-param") public String requestParam( @RequestParam("username") String memberName, @RequestParam("age") int memberAge return "ok"; } 1. RequestParam의 이름와 변수명이 같으면 생략할 수 있다. @ResponseBody @RequestMapping("/reques..

    [Spring] 쿼리 파라미터 매핑

    요청을 매핑하는 방법으로 RequestMapping과 PathVariable이 있다. RequestMapping 1. "/hello-basic" URL이 호출되면 이 메서드가 실행되도록 매핑한다. @RequestMapping("hello-basic") public String helloBasic() {} 2. method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다. @RequestMapping("/hello-basic", method=RequestMethod.GET) public String helloBasic(); 3. HTTP 메서드를 축약한 어노테이션을 사용하는 것이 더 직관적이다. @GetMapping("/hello-basic") public String hel..