본문 바로가기

전체 글292

Spring Webflux - Reactive Programming Ref - https://www.reactivemanifesto.org/ Reactive System ✔ MEANS - Reactive System에서 사용하는 커뮤니케이션 수단이다. Message Driven - 메시지 기반의 통신을 통해 여러 시스템 간에 느슨한 결합을 유지한다. ✔ FORM - 메시지 기반 통신을 통해 리액티브 시스템이 어떤 특성을 가지는 구조로 형성되는지 의미한다. Elastic - 시스템으로 들어오는 요청량에 상관없이 일정한 응답성을 유지하는 것을 의미한다. Resillient - 시스템의 일부분에 장애가 발생하더라도 응답성을 유지하는 것을 의미한다. ✔ VALUE - Reactive System의 핵심 가치가 무엇인지를 표현하는 영역이다. Responsive - 클라이언트의 요.. 2022. 11. 29.
OAuth 2 + JWT 샘플 애플리케이션 구현 먼저, 간단한 Frontend와 Backend 간의 OAuth 2 인증 처리 흐름은 다음과 같다. 구글 벤더를 사용하는 OAuth 2를 예시로 자세한 과정을 살펴보자. Resource Owner가 웹 브라우저에서 ‘Google 로그인 링크’를 클릭 Frontend 애플리케이션에서 Backend 애플리케이션의 http://localhost:8080/oauth2/authorization/google로 request를 전송 (이 URI의 requet는 OAuth2LoginAuthenticationFilter가 처리) Google의 로그인 화면을 요청하는 URI로 Redirect 여기서 Authorization Server가 Backend 애플리케이션 쪽으로 Authorization Code를 전송할 Redir.. 2022. 11. 29.
2022. 11. 28. § 학습 전(계획) § ▶ 학습 목표는 무엇인가? OAuth 2 OAuth 2 샘플 애플리케이션 구현 OAuth 2와 JWT를 이용한 샘플 애플리케이션 구현 ▶ 이미 알고 있는 내용은 무엇인가? OAuth 2에 대한 이론적인 부분과 애플리케이션 구현을 위한 사전 작업까지 학습했다. OAuth 2를 적용한 애플리케이션 구현은 처음이다. § 학습 후(점검 및 평가) ▶ 새롭게 배운 내용은 무엇인가? spring-boot-starter-oauth2-client 으로 추가하면, 별도의 설정을 하지 않아도 Spring Boot의 자동 구성을 통해 OAuth 2 로그인 인증 기능이 활성화됨 ClientRegistration은 OAuth 2 시스템을 사용하는 Client 등록 정보를 표현하는 객체 Spring Sec.. 2022. 11. 28.
OAuth 2 샘플 애플리케이션 구현 // 서버 측에서 HTML을 렌더링해주는 SSR(Sever Side Rendering) 방식의 애플리케이션 구현 - 의존성 추가 dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' ... } - OAuth 2로 보호되는 .html 파일 생성 (뷰 생성) - 뷰를 리턴하는 Controller를 생성 - application.yml 파일에 .. 2022. 11. 28.
중첩 삼항연산자 삼항연산자 문법 및 사용법 조건 ? 참인 경우 반환 값 : 거짓인 경우 반환 값 if문 예제 public class Test { public String ternaryOperator { int a = 1; if (a == 1) { return "a는 1임"; } else return "a는 1이 아님"; } } 삼항연산자 예제 public class Test { public String ternaryOperator { int a = 1; return a == 1 ? "a는 1임" : "a는 1이 아님"; } } 중첩 if문 예제 public class Test { public String ternaryOperator { int a = 1; int b = 2; if (a == 1) { if (b == 2).. 2022. 11. 26.
OAuth2 개요 OAuth 2 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티 애플리케이션(GitHub, Google, Facebook 등)에서 사용자의 인증을 대신 처리해주고, Resource에 대한 자격 증명용 토큰을 발급한 후, Client가 해당 토큰을 통해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식 사용자의 크리덴셜을 이중으로 관리할 필요가 없음 - 관리하는 크리덴셜이 줄어들기 때문에, 보안성 향상 - OAuth 2에 대해 - https://www.rfc-editor.org/rfc/rfc6749 OAuth 2를 사용하는 애플리케이션 유형 써드 파티 애플리케이션에서 제공하는 API의 직접적인 사용 추가적인 인증 서비스 제공 용도 - 아이디/패스워드 로그인 인증 이외에 OAuth 2를 이용한 로그인.. 2022. 11. 25.
*** 조합(Combination) 조합은 n 개의 숫자 중에서 r 개의 수를 순서 없이 뽑는 경우를 의미한다. - https://ko.wikipedia.org/wiki/%EC%A1%B0%ED%95%A9 조합은 기호로 다음과 같이 나타낼 수 있다. ** 조합은 하나의 원소를 선택할 경우 + 하나의 원소를 선택하지 않을 경우 * n개 중에 m개를 뽑는 경우의 수를 구하는 신기한 풀이 (이해 필요) * class Test { public long solution(int N, int M) { M = Math.min(N - M, M); if (M == 0) return 1; long answer = solution(N - 1, M - 1); answer *= N; answer /= M; return answer; } } // 순열과 조합의 공식을.. 2022. 11. 25.
JWT - Secret Key를 시스템 환경 변수로 등록할 때 주의점 상황 : JWT 서명에 사용되는 Secret Key 정보는 민감한 정보이기 때문에 시스템 환경 변수의 변수로 등록 - 시스템 환경 변수에 등록한 변수는 application.yml 파일의 Property 명과 동일한 문자열을 사용하지 않도록 주의한다. 만약, 동일한 문자열을 포함하고 있을 때, 정해진 우선 순위에 따라 override되기 때문에, 고려해서 명명을 잘 해주어야할 것 같다. 먼저, Spring Environment에 대해 알아보자. Spring Environment는 애플리케이션에서 사용되는 모든 Property Source를 관리하는 컴포넌트이다. Property Source는 애플리케이션에서 사용되는 key/value 쌍의 property를 포함한다. Spring에서는 OS 환경 변수, .. 2022. 11. 25.
Spring Security + JWT 적용 (로그인 인증, 자격 증명, 검증 구현) JWT 적용을 위한 사전 작업 1. 의존 라이브러리 추가 // Spring Security 적용 implementation 'org.springframework.boot:spring-boot-starter-security' // JWT 기능을 위한 jjwt 라이브러리 implementation 'io.jsonwebtoken:jjwt-api:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' runtimeOnly'io.jsonwebtoken:jjwt-jackson:0.11.5' 2. SecurityConfiguration 추가 H2 웹 콘솔을 정상적으로 사용 .frameOptions().sameOrigin() CSRF(Cross-Site Request Forg.. 2022. 11. 25.