
전체 글
Spring Security 프레임워크로 OAuth2 로그인
기본적인 이론을 모두 정리했으니 직접 구현해봅시다. Spring Security에서 제공하는 로그인 기능이 아닌 OAuth2를 사용하는 로그인 기능을 구현해보겠습니다. ( form 로그인 방법도 노션에 정리는 해뒀지만,,, OAuth2 보다 작성할 내용이 많아 추후에 하겠습니다. ) 구현할 로그인 과정의 대략적인 순서는 다음과 같습니다. - 클라이언트에서 Spring Boot 서버로 로그인을 요청합니다. - 클라이언트에게 OAuth2 로그인 redirect url을 전달하여 로그인을 시도합니다. - 로그인에 성공하면 OAuth2 리소스 서버에서 사용자의 정보를 가져와 Refresh JWT 를 발급합니다. - 발급된 Refresh JWT를 Redis 에 저장하여 관리하고, 클라이언트에게 쿠키(Http on..

OAuth2가 뭐죠?
OAuth2 (Open Authorization 2.0) 는 인증을 위한 개방형 표준 프로토콜입니다. 이 기능을 통해서 Naver, Kakao, Google 등에 로그인하는 방법으로 간편한 소셜 로그인을 구현할 수 있으며, 서버 혹은 클라이언트에서는 로그인된 해당 애플리케이션에서 사용자의 정보를 받아와 사용할 수 있습니다. OAuth2 를 구성하는 역할을 소개하고 OAuth2를 사용해 로그인하는 과정을 순서대로 정리해보겠습니다. 구성 OAuth2 를 구성하기 위해서는 리소스 소유자(사용자), 클라이언트(애플리케이션 서버), 권한 서버, 리소스 서버가 필요합니다. 리소스 소유자는 로그인을 하는 주체입니다. 즉, Naver, Google 등에 로그인을 시도 할 사용자입니다. 클라이언트는 소셜 로그인을 통해 ..
JWT가 뭐죠?
JWT는 JSON Web Token의 약자입니다. 말 그대로 JSON 데이터 형태로 구성된 웹 토큰입니다. 일반적으로 로그인이 되었을 때, 로그인을 유지하거나 권한이 필요한 곳에 접근할 수 있도록 하는 등으로 사용됩니다. 그렇다면 이 토큰의 구성은 어떻게 되어있고 사용했을 때의 장점이 무엇이며, 언제 어디에 주로 사용되는지 순서대로 살펴봅시다!! 구조 JWT는 점(.)으로 구분되는 세 부분으로 구성됩니다. Header . Payload . Signature Header 헤더는 일반적으로 토큰의 유형(JWT)과 Signature 부분을 암호화하는 알고리즘으로 JSON 데이터를 구성합니다. { "alg" : "HS256", "typ" : "JWT" } 그 후 이 JSON 데이터를 Base64Url로 인코딩해..

Spring Security가 뭐죠?
많은 분들이 Spring boot를 사용하면서 인증/인가 기능을 추가하고자 한다면 Spring Security를 적극 추천합니다. Spring boot 환경에서 많은 부분을 쉽게 구현하도록 편의성을 제공해 주기 때문이죠!! 그렇다면 Spring 에서 Spring Security의 구조가 어떻게 되어있는지와 기본적인 로그인이 어떻게 동작하는 과정을 살펴봅시다. 구조 Spring Security를 알기 전에 서블릿 기반의 Spring 애플리케이션에서 Filter의 역할을 알아봅시다! Client의 요청이 다양한 Filter와 Servlet을 포함하는 FilterChain을 거쳐 컨트롤러로 보내집니다. FilterChain의 Filter에서는 HttpServletReqeust 와 HttpServletRespo..
[CS] SOLID 객체 지향 설계 (feat. OOP의 4가지 특징)
객체 지향 설계에서 지켜야 할 5개의 소프트웨어 개발 원칙인 SOLID에 관해 정리해보고자 합니다. OOP의 4가지 특징 SOLID를 정리하기에 앞서, 간단하게 객체 지향 프로그래밍의 특징 4가지를 살펴봅시다. 추상화 공통적인 속성이나 기능들을 추출하여 복잡한 시스템을 단순화하는 것 상속 하위 클래스가 상위 클래스의 속성과 메서드를 사용 혹은 재정의할 수 있도록 하는 것 다형성 어떤 한 요소에 여러 개념을 넣어 놓는 것 ex) 오버라이딩, 오버로딩 캡슐화 객체의 속성과 행위를 하나로 묶고, 그 내용의 일부를 외부로부터 감추는 것 SOLID SRP ( Single Responsibility Principle ) 단일 책임 원칙 OCP ( Open/Closed Principle ) 개방-폐쇄 원칙 LSP (..

[JAVA 8] Supplier
Supplier interface 함수형 인터페이스를 공부하면서 Java가 기본으로 제공하는 인터페이스 중 Supplier를 알게 되었습니다. 이 인터페이스는 구현체에서 반환할 타입을 지정하고 추상 메서드인 get() 메서드를 재정의하여 지정된 타입의 값을 반환받는 아주 간단한 인터페이스입니다. 저는 이 인터페이스의 존재가 "굳이..?" 라는 생각이 들어서 찾아보니 Lazy Evaluation을 위해서 존재한다는 것을 찾게 되었습니다. Lazy Evaluation 이것은 불필요한 연산을 피하기 위해서 연산을 지연시키는 것을 뜻합니다. 뜻만 알아서는 존재의 이유를 잘 모르겠어서 예제를 통해 이해해 보겠습니다. 추상 메서드인 get() 메서드를 재정의하여 현재 시간을 time 변수에 저장하고 3초를 멈추었다..
[Spring JPA] IncorrectResultSizeDataAccessException
IncorrectResultSizeDataAccessException 제가 JPA 레포지토리에서 findBy~~ 메서드를 통해 단일 select를 하면서 발생한 예외입니다. 원하는 조건의 데이터는 단일 데이터인데, db에 해당 조건의 데이터가 여러개가 존재하며 모든 데이터가 가져와지면서 예외가 발생했습니다. 팀원 중 한 명이 서비스의 시나리오와는 별개로 데이터를 추가하면서 발생한 문제로, 서비스의 시나리오대로 로직이 구동될 경우 발생하지 않았습니다. Reference https://computer-science-student.tistory.com/496 [스프링, Spring] JDBC queryForObject의 결과가 없을 때(null) 혹은 결과가 2개 이상일 때 - IncorrectResultSi..

[Spring Boot] API Docs를 자동으로 만들어보자!
많은 분들이 그렇겠지만 저는 지금까지 FE 팀원들과 소통하기 위해서 Notion에 API Docs를 만들어서 사용했습니다. 이렇게 만들면 귀찮아서 하기 싫고... 코드에 수정이 발생하면 이것도 수정해야하고... 오타 검수도 힘들고.... 너무 불편해서 찾아봤더니 Swagger라는 툴을 주로 사용한다고 해서 저도! 사용해보고자 합니다. ㅎㅎ 왜 Swagger? 다른 문서화 도구도 있지만 Swagger는 특히 적용하기 쉽습니다! 정말 몇 줄의 코드만으로 만들 수 있어요! 그리고 테스트를 할 수 있는 UI를 제공해줘서 Swagger 문서 화면에서 API를 바로 테스트할 수도 있습니다! 저는 지금까지 Postman을 사용해서 API를 테스트했는데, Postman에서 API를 문서화하면... Notion이랑 다를..