본문 바로가기

Develop/Spring40

Spring Security 인증 처리 흐름 • 사용자가 로그인 폼을 이용한 Request(Username, Password 포함)를 Spring Security가 적용된 애플리케이션에 전송 • 여러 Filter 중에서 UsernamePasswordAuthenticationFilter가 요청을 전달 받음 • UsernamePasswordAuthenticationFilter가 Username, Password를 이용해 UsernamePasswordAuthenticationToken을 생성 ( UsernamePasswordAuthenticationToken은 Authentication 인터페이스를 구현한 클래스 ) • UsernamePasswordAuthenticationFilter는 아직 인증되지 않은 Authentication을 Authentica.. 2022. 11. 21.
Spring Security 웹 요청 흐름 보안이 적용된 웹 요청의 일반적인 흐름 1. 사용자가 보호된 리소스를 요청 2. 인증 관리자 역할을 하는 컴포넌트가 사용자의 Credential(password)을 요청 3. 사용자가 Credential 제공 4. 인증 관리자 컴포넌트가 Credential 저장소에서 사용자의 Credential을 조회 5. 인증 관리자 컴포넌트가 Credential 저장소에 있는 Credential과 비교하며 검증 작업 수행 6-1. 유효한 Credential이 아닐 경우, Exception throw 6-2. 유효한 Credential일 경우, 접근 결정 관리자 역할을 하는 컴포넌트가 사용자가 적절한 권한을 부여받았는지 검증 7-1. 적절한 권한을 부여받지 못한 사용자일 경우, Exception throw 7-2. 적.. 2022. 11. 19.
Spring Security - 기본 Spring Security Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization) 기능을 지원하는 보안 프레임워크 Spring Security로 할 수 있는 보안 강화 기능 사용자 인증 기능 적용 권한 레벨 적용 리소스에 대한 접근 제어 데이터 암호화 SSL 적용 웹 보안 공격 차단 Spring Security에서 사용하는 용어 정리 Principal(주체) - 인증이 성공적으로 수행된 사용자의 계정 정보 Authentication(인증) - 사용자가 본인이 맞음을 증명하는 절차 - 사용자를 식별하기 위한 정보를 Credential(신원 증명 정보)라고 함 ex) 주민등록증 Authorization(인가) - 특정 리소스에 접근할 수 있도록 권한을 부.. 2022. 11. 19.
인증/보안 기초 HTTPS(Hyper Text Transfer Protocol Secure Socket layer) = HTTP + Secure HTTP 프로토콜 내용을 암호화를 통해서 보안성을 추가 HTTP 요청을 SSL 혹은 TLS라는 알고리즘을 이용해, 데이터를 암호화하여 전송하는 방법 HTTPS 특징 암호화 제 3자가 서버와 클라이언트가 주고받는 정보를 탈취할 수 없도록 서로가 합의한 방법으로 데이터를 암호화하여 주고받는다. 비대칭키 방식과 대칭키 방식을 혼용하여 사용한다. 대칭키 방식은 양쪽이 공통의 비밀키를 공유해서 데이터를 암호화, 복호화하는 것이다. 비대칭키 방식은 각각 공개키와 비밀키를 가지고 상대가 나의 공개키로 암호화한 데이터를 개인이 가진 비밀키로 복호화하는 것이다. 인증서 브라우저가 서버의 응답과.. 2022. 11. 17.
Intellij에서 MySQL 연동 및 DB에 데이터 저장 1. build.gradle에 MySQL을 사용하기 위해, 의존성을 추가해준다. implementation 'mysql:mysql-connector-java'// dependencies 부분에 추가 추가해준 후, 꼭 build.gradle을 reload(Windows기준 단축키 ctrl+shift+O) 해준다!! 2. 데이터를 저장하기 위해, MySQL Workbench에서 'test'라는 이름의 schema를 만들어주었다. 그냥 기본값으로 schema를 만들어주었다. 3. 오른쪽 탭 'Database'를 눌러서, 어떤 DB를 사용할지와 DB에 대한 설정을 해준다. 자신의 MySQL id, password를 입력하고, Workbench에서 만들어주었던 schema 이름을 Database 칸에 적어준다. .. 2022. 11. 16.
Spring Rest Docs - Asciidoc Asciidoc이란? Spring Rest Docs를 통해 생성되는 텍스트 기반의 문서 포맷이다. (기술 문서 작성을 위해서 설계된 가벼운 마크업 언어이기도 하다) Asciidoc에 대해 https://docs.asciidoctor.org/asciidoc/latest/ https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/#ex-normal Asciidoc 목차 구성 (1) 문서의 제목을 작성하기 위해서 =를 추가 (====와 같이 =의 개수가 늘어날 수록 글자는 작아짐) (2) 목차에서 각 섹션에 넘버링을 해주기 위해서 :sectnums:를 추가 (3) :toc: 목차를 문서의 어느 위치에 구성할 것인지를 설정 (4) :toclevel.. 2022. 11. 14.
TDD TDD란? Test Driven Development의 약자로, 테스트 주도 개발이라는 뜻이다. 테스트 주도 개발이란 건 테스트를 먼저 하고 코드 구현은 그 다음에 한다는 의미이다. TDD 개발 방식 실패하는 테스트 → 실패하는 테스트를 성공할 만큼의 기능 구현 → 성공하는 테스트 → 리팩토링 → 실패하는 테스트와 성공하는 테스트 확인 유효한 패스워드인지 검증하는 방식을 예로 들면 다음 과정과 같다. 패스워드가 특수문자를 포함하면서 알파벳 소문자를 포함하는지 테스트, 검증, 리팩토링 단계 반복 패스워드가 특수문자 + 알파벳 소문자 + 알파벳 대문자를 포함하는지 테스트, 검증, 리팩토링 단계 반복 패스워드가 특수문자 + 알파벳 소문자 + 알파벳 대문자 + 숫자를 포함하는지 테스트, 검증, 리팩토링 단계 반.. 2022. 11. 13.
Testing - Mockito Mock이란? 가짜 객체를 의미한다. 단위 테스트나 슬라이스 테스트 등에 Mock 객체를 사용하는 것을 Mocking이라고 한다. 테스트에서 Mock 객체를 사용하는 이유 Mock 객체를 사용하지 않는 슬라이스 테스트 실행 흐름을 보면 다음과 같다. (Controller를 테스트하기 위한 슬라이스 테스트) Controller만을 테스트 한다기에는 서비스 계층과 데이터 액세스 계층, 그리고 데이터베이스까지 동작 흐름이 이어진다는 것을 알 수 있다. (거의 통합 테스트라고 봐도 무방하다) 이 경우에 하나의 계층만을 테스트 하는 슬라이스 테스트의 목적에 맞지 않는다. 이때 필요한 것이 바로 Mock 객체이다. Mock 객체를 사용한 Controller의 슬라이스 테스트 실행 흐름을 보자. Mock 객체를 사용.. 2022. 11. 13.
Spring Rest Docs Controller 테스트 케이스에 Spring Rest Docs 적용하기 https://jaeyoungb.tistory.com/196 여기서 Spring Rest Docs를 사용하기 위한 준비를 마쳤고, 이제 Controller 테스트 케이스에 Spring Rest Docs를 적용시켜보자. API 문서 생성을 위한 테스트 케이스 기본 구조 (1) @WebMvcTest은 Controller를 테스트 하기 위한 전용 애너테이션, 괄호 안에는 테스트 대상 Controller 클래스를 지정 (2) JPA에서 사용하는 Bean 들을 Mock 객체로 주입 (Spring Boot 기반의 테스트는 항상 최상위 패키지 경로에 있는 xxxxxxxApplication 클래스를 찾아서 실행) (3) Spring Rest D.. 2022. 11. 12.