Spring 8

[Spring] HATEOAS - REST API & HATEOAS

이번에는 REST API 와 HATEOAS 에 대한 이야기를 해보겠습니다. 인프런의 백기선님의 강의 내용을 바탕으로 학습한 내용입니다. REST API REpresentational State Transfer Application Programming Interface 의 약자입니다. REST 는 인터넷 상에서 시스템 간의 상호 운용성을 제공하는 방법중 하나인데, 위키에서 정의한 것을 보면, 월드 와이드 웹과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이라고 소개 하고 있습니다. REST API 라고 하는 것은 이 REST 아키텍처 스타일을 따르는 API 입니다. https://ko.wikipedia.org/wiki/REST REST - 위키백과, 우리 모두의 백과사전 대한민국의..

BackEnd/Spring 2022.05.01

[ATDD] RestAssured

간단하게 ATDD에 대한 개념만 지난 글에서 잠깐 다루었습니다. 이번에는 ATDD 를 하기 위한 테스트 도구를 소개하고자 합니다. 1. RestAssured REST 어플리케이션의 HTTP Endpoint 에 초점을 맞춘 테스트 도구. RestAssured 를 본격적으로 소개하기 전에 먼저 인수 테스트는 블랙박스 테스트의 성격을 가지고 있고, 내부의 코드를 직접 호출하지 않고 외부에서만 요청하여 검증하는 것이 좋습니다. 예를 들어, 고객이 상품을 구매한다는 액션을 할 때, 상품의 재고를 확인하고 할인율을 적용하고 고객의 등급을 확인하고 이런 여러가지의 내부로직이 동작한다고 해봅시다. 그렇다면 인수 테스트로 검증하는 것은 "고객이 상품을 구매한다" → "상품 구매 성공" 이 시나리오를 검증하는것 입니다. ..

[Spring] Spring Security (4) - Spring Boot 에서의 동작 실습

앞선 글에서 Spring Boot가 어떻게 DelegatingFilterProxy 를 실행하는지 설명하였습니다. 이제 예시를 들어 실제로 FilterChainProxy의 코드가 동작하는지 살펴보겠습니다. SecurityConfig 라는 클래스를 만들어 Spring Security 가 동작하도록 간단하게 설정을 해주었습니다. 필터가 동작하는 경로로 "/foo/**" 를 등록해주었습니다 Controller 도 간단하게만 구성하였습니다. Security에 등록된 경로를 매핑하는 컨트롤러를 하나 만들어주었습니다. 이제 테스트를 돌려 작성한데로 Controller 를 호출하는지와, 동시에 FIlterChainProxy 를 타는지 디버깅으로 실행해보겠습니다. 디버깅을 FilterChainProxy 의 doFilte..

BackEnd/Spring 2022.02.27

[Spring] Spring Security (3) - Spring Boot의 Filter Chain

저번에 Spring Security에서 DelegatingFilterProxy 가 스프링 시큐리티가 생성하는 FilterChainProxy에 필터처리를 위임하고, 이 FilterChainProxy 는 다시 여러필터를 체인 형식으로 갖고 있는 SecurityFilterChain 에 처리를 위임하는 내용을 봤습니다. 그런데, Spring Boot 를 사용하다 보면 이런 설정들을 해준 기억이 없죠. Spring Boot 는 강력한 보일러 플레이트의 기능을 하기 때문에, 이러한 설정들이 사용자에게 보이지 않고 해주는 경우가 많습니다. 그래서 어떤 기능을 제공받고 있는지, 어떤 개념을 이해하고 써야되는지 놓치기 쉽죠. Spring Boot 에서 우리가 Spring Security 를 사용했음에도 Delegatin..

BackEnd/Spring 2022.02.27

[Spring] Spring Security (2) - Spring Security Filter Chain

스프링 시큐리티의 필터 체이닝에 대한 학습. 1. Spring Security Filter Chain 스프링 시큐리티는 서블릿 필터를 기반으로 동작합니다. 스프링 시큐리니는 내부적으로 각 필터가 책임을 갖게 하고, 서비스에 따라 추가/제거 되는 필터 체인을 가지고 있습니다. 네임스페이스 구성을 사용한다면, 내부적으로 FilterChainProxy 객체를 스프링 빈으로 등록하는데, FilterChainProxy는 접근제어, 로그인/로그아웃 등의 보안 관련 서블릿 필터들을 묶어서 실행해주는 기능을 제공합니다. 2. DelegatingFilterProxy 스프링 책을 보다보면 '스프링 시큐리티를 위한 web.xml 설정'이라는 부분에서 DelegatingFilterProxy 라는 부분이 나오는데, 대부분이 넘..

BackEnd/Spring 2022.02.23

[Spring] Spring Security (1)

스프링 시큐리티에 대한 기본 개념 학습 1. Spring Security 란 ? 어플리케이션에 인증과 권한 부여를 제공하는데 중점을 둔 스프링 하위의 프레임워크. 여기서 인증(Authenticate) 와 인가(Authorize) 에 대한 이해가 먼저 필요합니다. 인증(Authenticate)은 간단히 말해서 누구인지 확인하는 것입니다. 어떤 보호된 리소스에 접근할 때 접근하는 대상이 누구인지 확인하는 과정입니다. 인가(Authorize)는 리소스에 대한 접근 권한이 있는지 확인하는 것입니다. 어떤 대상을 인증했을때, 그럼 그 대상은 이 리소스에 접근이 가능한지 확인합니다. 스프링 시큐리티는 인증, 인가의 과정을 Filter 를 통해서 제어를 합니다. Filter 의 위치를 대략적으로 그려보면 위와 같습니..

BackEnd/Spring 2022.01.10

[TDD] TDD 란? (Test Driven Development)

[사진 : https://wooaoe.tistory.com/33] 우아한테크캠프 Pro 과정에서 배웠던 TDD 를 복습하고자 합니다. ✹ TDD란? Test Driven Development. 즉, 테스트가 주도하는 개발. 기존에 방식 : 설계 → 개발 → 테스트 TDD의 방식 : 설계 → (테스트 - 개발) 위와 같이 3가지의 cycle 을 돌며 개발을 진행하다 테스트를 통하여 설계의 오류를 잡을 수 있음. 🔄 TDD 개발 사이클 설계 → 실패하는 테스트 케이스 작성(작은 단위) → 테스트 통과하도록 작성 → 리팩토링 TDD 에서 코드는 크게 두가지로 나눕니다. 실제 구현 코드인 '프로덕션 코드' 와 테스트를 담당하는 '테스트 코드' TDD 로 개발을 진행하는 경우에는 TDD의 cycle에 맞게 프로덕..

[Spring] JWT + 2 Factor(SMS 인증)

JWT 를 사용하며 2 Factor (sms 인증) 을 하는 방법에 대해서 생각하며 프로젝트를 간단히 만들었습니다. 업무 중, 보안ㅇ 관련하여 2 Factor 인증과 동시접속을 제한해달라는 지시를 받았는데, 이 두 문제를 같이 고려하였습니다. ( 전체 소스 : https://github.com/KyungSik9870/JwtAuthentication ) ✹ JWT (Json Web Token) 사용 JWT 란? JSON 객체를 사용해서 토큰에 정보를 저장하는 Web Token. Header, Payload, Signature 로 이루어져 있습니다. 헤더에 담겨질때, Authorization : 의 형태를 띄고 type 에 대해서는 JWT 에 특정되는 표준은 없고, OAuth2 에 사용되는 Bearer 를 ..

BackEnd/Spring 2021.12.20