Spring

    [토비 스프링] CH1-2. 제어의 역전

    [토비 스프링] CH1-2. 제어의 역전

    제어의 역전(IoC) 오브젝트 팩토리 초난감 DAO를 리팩토링 하는 과정에서 생긴 UserDaoTest를 살펴보자. 이 클래스는 어떤 ConnectionMaker구현 클래스를 사용할지를 결정하는 기능을 엉겁결에 떠맡았다. 하지만 원래 UserDaoTest는 UserDao의 기능이 잘 동작하는지를 테스트하기 위한 것이다. 성격이 다른 책임이나 관심사는 분리해버리는 과정은 지금까지 해왔던 주요한 작업이다. 따라서 이를 분리할 필요가 있다. public classUserDaoTest { public static voidmain(String[] args)throwsClassNotFoundException, SQLException { ConnectionMaker connectionMaker =newDConnect..

    [토비 스프링] Ch1. 오브젝트와 의존관계

    오브젝트와 의존관계 CH1 에서는 오브젝트의 설계와 구현, 동작원리를 집중적으로 살펴보자. 엉망진창의 UserDao 사용자 정보를 JDBC API를 통해 DB에 저장하고 조회할 수 있는 간단한 DAO를 만들어보자. DAO : DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트. 먼저 Dao에서 사용할 User객체를 생성한다. 위의 형식처럼 스프림 프레임워크에서는 자바빈 규약을 지켜 작성한다. 자바빈 : 디폴트 생성자와 프로퍼티를 가진 오브젝트 디폴트 생성자 : 파라미터가 없는 디폴트 생성자 프로퍼티 : 자바빈이 노출하는 이름을 가진 속성으로 getter, setter public class User { String id, name, password; public String get..

    [Spring] JWT토큰 개념

    [Spring] JWT토큰 개념

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

    [Spring] Controller에서 List 받는 방법

    [Spring] Controller에서 List 받는 방법

    [개요] 지난 포스팅에서 Controller에서 데이터를 받는 2가지 방법(사실 3가지)에 대해서 소개했다. 쿼리 파라미터 형식으로 데이터를 받는 @RequestParam, @ModelAttribute와 흔히 JSON형태로 데이터를 받는 @RequestBody이다. 클래스를 만들어서 @ModelAttribute 또는 @RequestBody로 받을 수 있기 때문에 List를 받는 방법에 대해서 따로 소개하지 않았다. 그런데 List로 된 리스트 하나를 받기 위해 클래스를 만드는 것은 어딘가 불편해보인다. 이를 해결하기 위해 @RequestParam 어노테이션은 Multi-Value를 가질 수 있도록 도와준다. [본문] http://localhost:8080/multi?userIds=1,2,3,4,5 다음과..

    [Spring] 스프링의 세션 정책과 JWT 토큰 버그

    [Spring] 스프링의 세션 정책과 JWT 토큰 버그

    [문제] react-spring 팀 프로젝트에서는 JWT토큰을 기반으로 기능이 동작하고 있다. 인증 정보가 필요한 구간에서는 인터셉터를 이용하여 토큰 정보로 사용자 정보를 얻고 있는데, SecurityContextHolder에 Auth를 넣는 코드를 작성하고 이상한 버그가 발생하였다. 2번에 한 번 꼴로 계속 구글 로그인 html파일이 응답으로 떨어졌다. [분석] Security는 필터안에서 동작하기에 Filter의 로그를 출력해보기로 했다. 다음과 같이 EnableWebSecurity 어노테이션에 debug = true를 설정해주면 로그를 확인할 수 있다. 구글 로그인 html 파일을 리턴 받았을 때도 다음과 같은 필터 체인이 실행되었다. (정상일 때와 같음) debug = true를 하면 필터 정보 ..