현재 Flow 정리 JwtAuthenticationFilter 클래스 Login 요청이 오면 JwtAuthenticationFilter에서 attemptAuthentication()를 호출하여 인증을 처리한다. Username&Password가 정상이면 -> AuthenticationToken을 발급한다. 인증토큰 객체를 이용해서 UserDetailsService의 loadUserByUsername()을 호출하여 회원 존재 여부를 검증 한다. UserDetails 객체로 반환된 객체에 대해서 PasswordEncoder를 통해 패스워드를 검증한다. 제대로 검증이 됐다면 인증토큰 객체를 반환하여 시큐리티_세션에 저장한다. 검증 결과에 따라 successfulAuthentication() 또는 unsucc..
Username, Password를 이용한 검증은 완료된 상태로 다음 수행될 successfulAuthenticaiton() 메서드에서 JWT토큰을 발급해보도록 하겠다. JwtAuthenticaitnoFilter 클래스 @Slf4j @RequiredArgsConstructor public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; // login 요청을 하면 로그인 시도를 위해서 실행되는 함수 @Override public Authentication attemptAuthentication(HttpServle..
GraphQL을 사용하면 기존의 REST 엔드 포인트의 집합이 아니라 타입 집합으로 API가 보이게 된다. 따라서 GraphQL API를 만들기 전에는 우선적으로 API에서 반환할 데이터 타입에 대해 생각하고 정의해야 한다. 이러한 데이터 타입의 집합을 스키마(Schema)라고 부른다. GraphQL은 스키마 정의를 위해 SDL(Shema Definition Language)를 지원한다. 이 스키마 문서는 애플리케이션에서 사용할 타입을 정의해 둔 텍스트 문서이다. 여기서 정의한 타입은 나중에 클라이언트-서버 통신 시 GraphQL 요청에 대한 유효성 검사에서 사용된다. 사진 공유 애플리케이션 사진 공유 애플리케이션을 만들어 보면서 GraphQL 타입과 스키마를 공부해보자. 사진 공유 애플리케이션은 깃허브..
이전 포스팅에서 정리한 내용을 기반으로 로직을 작성해겠다. 회원 로그인을 검증하기 위한 UsernamePasswordAuthenticationFilter를 상속받아 로그인 검증을 하고 토큰을 발급받는 JwtAthenticationFilter 클래스를 구현해본다. 로그인 검증 로직 로그인 요청 (username, password) UsernamePasswordAuthenticationFilter에서 [username, password]를 이용해서 정상적인 로그인 여부를 검증 DI로 받은 AuthenticationManager 객체를 통해 로그인을 시도한다. UserDetailsService를 상속받은 PrincipalDetailsService 클래스가 호출되고 loadUserByUsername() 메소드가..
GraphQL이 한글패치해서 제공하는 공식 튜토리얼이 있다. 잘 정리해서 알려주고 있어 매우 도움이 되니 참고하자. https://graphql-kr.github.io/learn/ GraphQL: API를 위한 쿼리 언어 GraphQL은 API에 있는 데이터에 대한 완벽하고 이해하기 쉬운 설명을 제공하고 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공하며 시간이 지남에 따라 API를 쉽게 진화시키고 graphql-kr.github.io 회사에 들어가니 REST API가 아닌 GraphQL을 사용한다고해서 급하게 공부하게 됐다. 학부 4년 내내 공부 및 플젝을 하면서 서버-클라이언트 통신 구조에서 REST를 사용하지 않는 경우는 배워본적도 들어본적도 없었지만 이는 매우 우물한 개구리에 불과..
UserDetails, UserDetailsService를 왜 사용해야하는 것일까? 먼저 스프링 시큐리티의 동작을 이해해보자. 시큐리티는 "~/login" 주소로 요청이 오면 가로채서 로그인을 진행한다. 로그인 진행이 완료되면 시큐리티_session을 만들고 SecurityContextHolder에 저장한다. ( SecurityContextHolder = 시큐리티 인메모리 세션 저장소 ) 시큐리티가 갖고있는 시큐리티_session에 들어갈 수 있는 Object는 정해져있다. ( Object == Athentication 타입 객체 ) Authentication 안에 User 정보가 있어야 한다. User 객체 타입은 UserDetails 타입 객체 이다. 정리해보면 Security Session에 객체를..
카카오스타일 백엔드 인턴에 합격하여 지원 과정에 대해 정리해본다. 특이한 점이 하나 있는데 지원 당시 공고에 6개월 인턴이라 나와있었지만 합격 메일을 통해 알게된 사실로 3개월을 하고 중간 평가 후 연장 여부를 결정하고 다시 3개월을 한 후 정규직 전환 평가를 하게 된다. 3 + 3 채용전환형 인턴이랄까? 이래저래 열심히 해서 6개월 다채우고 정규직 전환까지 되는게 목표이다. 화이팅! 1. 서류 자기소개서 쓰는 칸이 없었다. 당황... 포트폴리오를 제출하라고 되어있어서 깔끔하게 포폴 정리를 하고 링크만 넣고 제출했다. (포폴이 궁금하면 여기) 2. 코딩테스트 4일만에 서류 합격 메일이 왔다. 코딩테스트는 프로그래머스 코테 링크를 받았고 일주일 기간내에 제출하면 되는 방식이였다. 문제가 좀 많았는데 알고리..
Filter 필터는 외부 요청을 가장 먼저 검증하는 곳이다. 커스텀 필터를 만들어서 테스트해보자. Filter 생성 @Slf4j public class MyFilter1 implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { log.info("Filter 1"); chain.doFilter(request, response); } } Filter 인터페이스를 상속받아서 구현해주면 된다. 이때 메소드는 init(), destroy(), doFilter()가 있다. Parameter로..
4문제 중 2솔을 해서 기대하지 않고 있었는데 합격 소식을 받을 수 있었다. 총 2시간동안 4문제를 풀어야했다. 문제 구성은 3문제 알고리즘, 1문제 SQL 문제였고 SQL은 처음 보는 난이도의 문제였다. 프로그래머스에서 제공하는 sql 문제와는 차원이 달랐다. 프로그래머스가 실버5 정도 라면 코테 sql는 골드3 정도...? sql 문제를 낸 코테 중에서 못푼건 처음이였다ㅋㅋ 1번 문제는 어떠한 값 x를 만들기 위한 수를 구하는 문제로 이분탐색을 통해서 풀었다. 1번치고 난이도는 있었지만 그래도 이분탐색 + 구현정도라 시간적 여유만 있다면 문제가 없는 문제였다. 2번 문제는 주어진 조건에 만족하는 사람이 가장 많도록 구성을 했을 때 사람수를 구하는 문제였다. 딱 문제를 읽자마자 조합 문제임을 알 수 있..
JWT에 대한 기초 지식은 아래 포스팅을 통해 먼저 알아보고 오자 Json Web Token 정리 JWT 사용이유 JWT 이제 jwt를 왜 사용해야하는지는 충분히 알았을 거라 생각하고 어떤 매커니즘으로 jwt를 이용해서 로그인을 구현하고 인증과 인가를 처리하는지 알아보도록 하자. 우리가 가장 먼저 해야할 부분은 JWT를 사용하기 위해 의존성을 추가하는 것이다. 스프링 시큐리티과 JWT를 이용하여 인증/인가를 구현할 것이므로 관련 의존성을 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'com.auth0:java-jwt:3.19.2' Spring Security Configuration ..
1. 서류 SK ICT Family 라고해서 여러 sk 계열서를 모아놓고 진행한 채용이였는데 블라인드 채용 전형이라 서류가 없었다. 2. 1차 코테 3문제로 쉬웠는데 2문제 + 3번 일부 맞춤 이였다. 3솔 컷을 예상했으나 다행히도 붙여줬다 ㅎㅎ 3. 2차 코테 4문제를 5시간인가 푸는거였고 2번부터 바로 어려웠다. 정확히 2솔을 하고 제출했다. 2솔하고도 떨어졌다는 사람들이 있는걸로 봐선 히든케이스에서 걸린 경우가 많았던거 같다. 4. 면접 2차코테를 보고나서 따로 sk채용 페이지에서 지원서를 작성했다. 자기소개서란이 단 500자라 도대체 뭘 적어야할 지 모르겠어서 그냥 했던 프로젝트 중 기억에 남는 부분을 적었다. 계열사마다 면접 횟수가 달랐다. 다른 계열사인 SKT 같은 경우는 1/2차 기술면접에 ..
Cookie, Session, JWT 이러한 방법들을 사용해서 사용자 정보를 갖는 이유는 HTTP의 Stateless한 특징 때문이다. Cookie HTTP의 무상태를 보완하기 위해 사용자 정보를 쿠키에 담아서 요청 시 함께 보내는 방법 매커니즘 클라이언트(브라우저)가 로그인을 하면 서버가 응답 시 쿠키에 사용자 정보를 담아서 반환해준다. 클라이언트는 사용자 정보를 저장하고 서버에 요청할 때마다 HTTP HEADER에 해당 쿠키를 실어서 보낸다. 주의사항 HTTPS가 아니라면 쿠키가 암호화되지 않으므로 노출될 가능성이 있다. 따라서 회원관련 정보는 담지 않는것이 좋다. HTTP Only 설정 시 브라우저를 통한 요청이 아닌 Javascript 등을 통해 Cookie를 담아 요청하면 HTTP ONLY가 아..
- Total
- Today
- Yesterday