본문 바로가기

패스트캠퍼스/100% 환급 챌린지_2

패스트캠퍼스 환급챌린지 43일차 : Netplix 구독형 멤버십 프로젝트로 배우는 Spring Security 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

안녕하세요 :)

오늘은 챌린지 43일차로, 무사히 헬요일을 잘 보내고 상대적으로 말짱한(?) 정신으로 공부를 하려 합니다.

 

오늘 배울 내용은,

Part B. 스프링 시큐리티 심화

Ch 6. 실전: 인증 서버와 애플리케이션 서버 분리

"03. 인증서버 구현 - 1" 입니다.


 

오늘은 인증서버가 무엇인지에 대해 알아보는 시간을 가졌다. 인증 서버의 역할은 사용자 자격 증명하고, OTP를 생성하여 데이터베이스에 저장하는 것이다.

인증서버의 흐름을 보면 클라이언트 → 비즈니스 논리 서버 → 인증 서버 → 자격 증명 데이터베이스 이렇게 흘러가는 것을 알 수 있다.

1. 클라이언트가 /login 엔드포인트를 호출함
- 사용자 ID/PW 함께 전달
2. user/auth 엔드포인트 호출
- 사용자 ID/PW 함께 전달
3. 데이터베이스에서 사용자를 검색/인증함
4. 인증 성공 시 OTP 전달

구현해야 하는 엔드포인트는 총 3개의 엔드포인트를 생성한다.
1. POST /api/v1/users
- 사용자를 추가하는 엔드포인트

2. POST /api/v1/users/auth
- 사용자를 인증
- 인증에 성공하면 OTP 를 전송

3. POST api/v1/otp/check
- 특정 사용자에게 발급된 OTP 가 유효한지 확인

인증 서버의 클래스 설계는 일반적인 Controller-Service-Repository 흐름으로 구현할 예정이다.

데이터베이스와 테이블은 사용자 ID/PW 를 저장하고 OTP 를 관리하기 위해서는 테이블 생성이 필요하다.
- 사용자 ID/PW 를 저장하는 User 테이블
- 사용자 별 OTP 값을 관리하는 Otp 테이블
- 두 테이블 간의 관계는 1:1
- 두 테이블은 user_id 로 연결되어 있음

Schema.sql 은 스프링 애플리케이션이 시작될 때 테이블이 생성될 수 있도록 schema.sql 파일을 설정한다. 데이터베이스는 'spring' 으로 생성하고(직접 생성), 테이블은 users 와 otp 를 생성하도록 설정한다. application.yml 은 데이터베이스 관련 설정을 application.yml에 설정한다. docker-compose.yml 은 로컬 환경에서 도커를 활용하여 MySQL 데이터베이스를 구동한다. 비밀번호는 데이터베이스에 저장되는 비밀번호는 BCryptPasswordEncoder 활용하여 해싱되고, 이 프로젝트의 목적은 안전한PasswordEncoder 활용하는 것이 아니기 때문에 간단하게 적용할 수 있는 BCryptPasswordEncoder 적용할 예정이다.