본문 바로가기

Spring46

[Project] 개발 환경 구성 개발 환경을 구성할 때 고려할 요소 1. 통합 개발 환경 (Integrated Development Environment, IDE) 선택 2. JDK (Java Development Kit) 선택 3. 프레임워크 (Framework) 선택 4. 빌드 방식 선택 5. 형상 관리 (Sofrware Configuration Management) 방법 결정 1. 통합 개발 환경 (Integrated Development Environment, IDE) 선택 : 팀 단위로 개발하다보면 IDE를 맞추고 개발하는 경우가 대부분이다. 2. JDK (Java Development Kit) 선택 JDK = 자바 언어, 자바 프로그래밍을 할 수 있게 하는 자바 개발 도구 OpenJDK 라는 무료 버전의 자바 개발 도구 有 .. 2022. 12. 16.
[Spring WebFlux] Project Reactor 란? / 마블 다이어그램(Marble Diagram) / 스케쥴러 (Scheduler) / Operators Project Reactor (=Reactor) 란? : 리액티브 스트림즈(Reactive Streams) 표준 사양의 구현체 중 하나 ➡ Spring Reactive Web Application의 개발에 있어 핵심 of 핵심 역할 라이브러리! (Spring 5 ~ 지원 : 리액티브 스택) Reactor의 특징 1) Reactive Stream를 구현한 리액티브 라이브러리 2) 완전한 Non-Blocking 통신 지원 : 요청 쓰레드가 차단되지 X 3) Publisher 타입 - Mono, Flux 제공 Mono[0|1] : 0, 1건의 데이터 emit 가능 Flux[N] : 여러 건의 데이터 emit 가능 4) MSA(Microservie Architecture) 구조에 적합 : 서비스간 통신이 잦기 .. 2022. 11. 30.
[Spring Webflux] 리액티브 프로그래밍 구조 / 사용 용어 명령형 프로그래밍 vs 선언형 프로그래밍 : 명령형 프로그래밍 = 무엇을 '어떻게' 할 것인가 선언형 프로그래밍 = '무엇을' 할 것인가 * 리액티브 프로그래밍의 대표적 특징 = 선언형 프로그래밍 방식 사용! 명령형 프로그래밍 public class ImperativeProgrammingExample { public static void main(String[] args){ // List에 있는 숫자들 중에서 4보다 큰 짝수의 합계 구하기 List numbers = List.of(1, 3, 6, 7, 8, 11); int sum = 0; for(int number : numbers){ if(number > 4 && (number % 2 == 0)){ sum += number; } } System.out... 2022. 11. 29.
[Spring Webflux] 리액티브 프로그래밍이란? / 리액티브 스트림즈 컴포넌트 리액티브 시스템 (Reactive System) 이란? : 클라이언트의 요청에 반응을 잘하는 시스템 = 클라이언트의 요청에 대한 응답 대기 시간을 최소화하기 위해 요청 쓰레드가 차단되지 않도록 함!(Non-Blocking) ➡ 클라이언트에게 즉각적으로 반응하도록 구성된 시스템 리액티브 시스템 설계 원칙 ✨ MEANS : 리액티브 시스템에서 사용하는 커뮤니케이션 수단 Message Driven : 메세지 기반 통신 ➡ 시스템들 간에 느슨한 결합 유지 ✨ FORM : 어떤 특성을 가지는 구조로 형성되는지 Elastic : 시스템 요청량에 상관없이 일정한 응답성 유지 Resilient : 시스템 일부분에 장애 발생해도 일정한 응답성 유지 ✨ VALUE : 리액티브 시스템의 핵심 가치 Responsive : 클.. 2022. 11. 29.
[OAuth2] OAuth2 란? / OAuth2의 동작 방식 OAuth2 : 특정 애플리케이션(Client) 에서 사용자의 인증을 직접 처리하는 것이 아닌, 사용자 정보를 보유하고 있는 신뢰할만한 3rd party 애플리케이션 (Github, Google, Facebook 등) 에서 사용자 인증을 대신 처리 Resource에 대한 자격 증명용 토큰을 발급 Client가 해당 토큰을 이용해 써드파티 애플리케이션의 서비스를 사용하게 해주는 방식 ➡ 사용자의 크리덴셜이 클라이언트 서비스 애플리케이션에 직접적으로 제공되지 않아도 됨! ex) 사용자의 Google Calendar 일정 기능을 이용하는 A 애플리케이션 로그인 자체는 구글 로그인 인증, 로그인 성공시 AccessToken 발급, 구글 Calendar API 이용 위해 AccessToken 이용 ⬇ A 애플리케.. 2022. 11. 28.
[JWT] (수정중) Spring Security에서의 JWT 인증 코드 정리 📁 디렉토리 * 🌳 = 클래스, 🌱 = 해당 클래스 내 메서드, 내부 클래스 JWT 적용을 위한 사전 작업 : JWT 적용 코드를 작성하기 전에 기초적인 Spring Security 설정 작업을 한다. - build.gradle 에 의존 라이브러리 추가 (jjwt) - UserDto의 Post 내부클래스에 password 필드 추가 - Member 엔티티 클래스에 password 필드 추가 - MemberService 클래스에 사용자 등록시 패스워드+권한정보 함께 DB에 저장되도록 관련 코드 추가 (PasswordEncoder, CustomAuthorityUtils DI) *🌳CustomAuthorityUtils : 메모리, DB에 저장된 Role 기반으로 권한 정보 생성해주는 Util 이다. - 🌳 S.. 2022. 11. 25.
[JWT] JWT(JSON Web Token)란? JWT(JSON Web Token) : 데이터를 안전, 간결하게 전송하기 위해 고안된 인터넷 표준 인증 방식 토큰 인증 방식에서 가장 범용적으로 사용됨 *간략 순서 JSON 포맷의 토큰 정보를 인코딩 ⬇ 인코딩 된 토큰 정보를 Secret Key로 서명(Sign)한 메세지를 Web Token으로써 인증 과정에 사용 JWT의 종류 1. 액세스 토큰 (Access Token) 2. 리프레시 토큰 (Refresh Token) : 클라이언트가 로그인 시 두 가지 모두 받음 Access Token - 보호된 정보들에 접근할 수 있는 권한 부여에 사용 - 짧은 유효기간 (Access Token 탈취 될 경우 오래 쓰지 못하게 하려고) ⬇ Refresh Token - Refresh Token 을 이용하여 새로운 Ac.. 2022. 11. 23.
[JWT] 자격 증명 방식 : 세션 기반 vs 토큰 기반 * 세션? : HTTP 가 비연결성(Connectionless), 비상태성(Stateless)의 특성을 가지고 있기 때문에 인증된 사용자 request의 상태를 유지하기 위한 수단! 세션 기반 자격 증명 방식? : 서버 측에 인증된 사용자의 정보를 세션 형태로 세션 저장소에 저장 클라이언트한테 요청이 들어오면, 세션 저장소에 저장된 세션 정보 = 사용자가 제공하는 정보가 일치하는지 확인 세션 기반 자격 증명의 특징 인증된 사용자 정보 : 서버 측 세션 저장소에서 관리 세션 ID (=사용자 세션의 고유 ID) 쿠키에 저장되어 인증된 사용자 증명 수단으로 사용 상대적으로 적은 네트워크 트래픽 (서버 측에서 세션 정보 관리) 세션 불일치 문제 발생 가능성 ⬆ (서버의 확장성 면) 세션 데이터 ⬆, 서버의 부담.. 2022. 11. 23.
[Spring Security] 웹 요청의 일반적 처리 흐름 / Spring Security 의 인증 & 권한 부여 처리 흐름 Spring Security에서 제공하는 컴포넌트들이 애플리케이션 내부에서 User의 인증, 권한에 대한 처리를 알아서 진행해준다! (filter chain) but, Spring Security 의 동작 방식을 조금 더 잘 알기 위해서는 각각의 흐름 잘 아는 것이 중요하다. Spring Security 의 주요 기능이 1. 인증, 2. 인가(권한 부여) 이므로 이에 대한 흐름을 알아보도록 한다! 웹 요청의 일반적인 처리 흐름 (1)에서 사용자가 보호된 리소스를 요청 ➡ 사용자 김보리가 A사이트의 그룹 B에 가입된 회원들만 볼 수 있는 글을 보려고 함 (2)에서 인증 관리자 역할을 하는 컴포넌트가 사용자의 크리덴셜(Credential)을 요청 * 사용자의 크리덴셜 = 신원 증명 정보 (password) .. 2022. 11. 22.
[Spring Security] Spring Security 란? + 용어 정리 ✨ Section 3에서 만들었던 샘플 애플리케이션에 없는 요소들 : - 인증(Authentication) 기능 : 로그인 기능 - 인가(Authorization) 기능 : API 대한 권한 부여 기능 - 웹 보안 취약점 대비 Spring Security 란? : Spring MVC 기반 애플리케이션의 인증(Authentication), 인가(Authorization) 기능을 지원하는 보안 표준 프레임워크 Spring Security로 할 수 있는 보안 강화 기능 다양한 유형의 사용자 인증 기능 적용 ex) 폼 로그인 인증, 토큰 기반 인증, OAuth 2 기반 인증, LDAP 인증 애플리케이션 사용자의 역할(Role)에 따른 권한 레벨 적용 애플리케이션에서 제공하는 리소스에 대한 접근 제어 민감한 정보.. 2022. 11. 22.