Backend
Algorithm
Project
codesche’s blog
/
Project
/
miniblog
/
miniblog
Backend
Algorithm
Project
codesche’s blog
/
Project
/
miniblog
/
miniblog
Share
Backend
Algorithm
Project
miniblog
miniblog
Search
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
OAuth 인증 적용 위한 테스트 코드 작성
•
테스트코드 수정 - 굵은 글씨로 표시한 부분 참고
핵심 요약
1.
쿠키란 사용자가 어떠한 웹사이트를 방문했을 때, 그 웹사이트가 사용하는 서버를 통해 로컬에 저장되는 작은 데이터이다. 쿠키는 키와 값으로 이루어져 있으며 만료 기간, 도메인 등의 정보를 가지고 있다.
2.
OAuth는 제3의 서비스에게 계정을 맡기는 방식이다. OAuth 에서 정보를 취득하는 방법은
권한 부여 코드 승인 타입,
암시적 승인 타입, 리소스 소유자 암호 자격증명 승인 타입, 클라이언트 자격증명 승인 타입으로 나뉜다.
3.
OAuth 방식 중 권한 부여 코드 승인 타입은 클라이언트가 리소스에 접근하는 데 사용되며, 권한에 접근할 수 있는 코드를 제공받으면 리소스 오너에 대한 액세스 토큰을 제공받게 된다.
18일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
스프링 시큐리티로 OAuth2를 구현하고 적용하기
•
스프링 시큐리티를 사용하여 OAuth2 구현 시작
•
가장 먼저 쿠키 관리 클래스를 구현하고, OAuth2에서 제공받은 인증 객체로 사용자 정보를 가져오는 역할을 하는 서비스를 구현하기
•
기존 ‘시큐리티 설정하기’ 에서 구현했던 WebSecurityConfig 클래스 대신 사용할 OAuth2 설정 파일을 구현하기
•
마지막에는 직접 테스트할 수 있도록 뷰를 구성
의존성 추가
•
build.gradle
쿠키 관리 클래스 구현
OAuth2 인증 플로우를 구현하며 쿠키를 사용할 일이 생기는데 그때마다 쿠키를 생성하고 삭제하는 로직을 추가하면 불편하므로 유틸리티를 사용할 쿠키 관리 클래스를 미리 구현한다.
17일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
토큰 발급받기
•
구글 클라우드 콘솔에 접속하여 구글 클라우드 사용 동의 절차를 진행한 이후에 새 프로젝트 생성하기
•
프로젝트 이름 지은 다음에 만들기 버튼 클릭
•
프로젝트 생성 후에 왼쪽 햄버거 메뉴에서 [API 및 서비스 → 사용자 인증 정보] 버튼을 눌러 사용자 인증을 관리하는 페이지로 이동
•
사용자 인증 정보를 만들려면 OAuth 동의 화면을 먼저 구성해야 한다. [동의 화면 구성] 버튼을 누르고 User Type을 외부용으로 선택한 후 [만들기] 버튼을 클릭한다.
16일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
OAuth란?
OAuth는 제3의 서비스에 계정 관리를 맡기는 방식이다. 흔히 볼 수 있는 네이버로 로그인하기, 구글로 로그인하기 같은 것이다.
•
리소스 오너(resource owner)
•
리소스 서버(resource server)
•
인증 서버(authorization server)
•
클라이언트 애플리케이션(client application)
OAuth를 사용하면 인증 서버에서 발급받은 토큰을 사용하여 리소스 서버에 리소스 오너의 정보를 요청하고 응답받아 사용할 수 있다. 그런데 클라이언트는 어떻게 리소스 오너의 정보를 취득할 수 있을까? 리소스 오너 정보를 취득할 수 있는 방법은 4가지가 있다.
•
리소스 오너 정보를 취득하는 4가지 방법
15일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
JWT 서비스 구현 - 테스트 코드
•
테스트 코드 작성
리프레시 토큰 도메인 구현하기
•
리프레시 토큰 도메인
•
RefreshToken.java
추가
14일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
JWT 서비스 구현
•
의존성 추가
•
토큰 제공자 추가
•
해당 값들을 변수로 접근하는 데 사용할 JwtProperties 작성
•
토큰을 생성하고 올바른 토큰인지 유효성 검사를 하기 위해 토큰에서 필요한 정보 가져오는 클래스 작성 (TokenProvider.java)
13일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
회원가입, 로그인 뷰 작성하기
•
뷰 컨트롤러 구현
•
뷰 작성 - login.html, signup.html
로그아웃 메서드 작성
•
UserApiController 수정
12일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
회원가입 구현하기
•
사용자 정보 담고 있는 객체 작성
•
AddUserRequest 객체를 인수로 받는 회원 정보 추가 메서드 작성 - 서비스
•
회원가입 폼에서 회원 가입 요청을 받으면 서비스 메서드 사용해 사용자 저장 후 로그인 페이지로 이동하는 signup 메서드 작성
11일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
시큐리티 설정하기
•
requestMathcers(): 특정 요청과 일치하는 url에 대한 액세스를 설정한다.
•
permitAll(): 누구나 접근이 가능하게 설정한다.
•
anyRequest(): 위에서 설정한 url 이외의 요청에 대해 설정한다.
•
loginPage(): 로그인 페이지 경로 설정한다.
•
defaultSuccessUrl(): 로그인이 완료되었을 때 이동할 경로를 설정한다.
•
logoutSuccessURl(): 로그아웃이 완료되었을 때 이동할 경로를 설정한다.
•
invalidateHttpSession(): 로그아웃 이후에 세션을 전체 삭제할지 여부를 결정한다.
•
userDetailService: 사용자 정보를 가져올 서비스를 설정한다. 이때 설정하는 서비스 클래스는 반드시 UserDetailsService를 상속받은 클래스여야 한다.
•
passwrodEncoder(): 비밀번호를 암호화하기 위한 인코더를 설정한다.
10일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
회원 도메인 만들기
•
의존성 추가하기
•
회원 엔티티 만들기
•
domain 패키지에 UserDetail 클래스를 상속하는 User 클래스 생성
•
UserRepository 생성
9일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
생성 기능 마무리
•
article.js 에 코드 작성
•
article.js 파일을 열어 [등록] 버튼을 누르면 입력 칸에 있는 데이터를 가져와 게시글 생성 API에 글 생성 관련 요청을 보내준다.
•
id가 create-btn인 엘리먼트를 찾아 그 엘리먼트에서 클릭 이벤트 발생 시 id가 title, content인 엘리먼트의 값을 가져와 fetch() 메서드를 통해 생성 API로 /api/articles/ POST 요청을 보낸다.
•
articleList.html 파일 수정
•
결과 확인
8일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
트러블슈팅
•
스프링 부트 3.2 버전 매개변수 이름 인식 문제
•
에러 해결 후 정상적으로 글 상세 화면이 잘 나오는 것을 확인할 수 있다.
•
테스트 확인 - 삭제 알람 및 DB에서 삭제된 내용 확인
수정/생성 기능 추가
7일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
블로그 글 목록 뷰 구현
•
요청을 받아 사용자에게 뷰를 보여주려면 뷰 컨트롤러가 필요함
•
뷰 컨트롤러 메서드는 뷰의 이름을 반환하고, 모델 객체에 값을 담음
•
뷰에 전달하기 위한 객체 생성
•
/article GET 요청을 처리할 코드 작성 - 블로그 글 전체 리스트를 담은 뷰를 반환
•
HTML 뷰 만들기
6일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
타임리프
•
뷰 작성 - example.html
•
출력 결과
5일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
타임리프
•
타임리프는 템플릿 엔진이다.
•
문법
•
타임리프 의존성 추가
•
타임리프 문법 익히기용 컨트롤러 작성
4일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
블로그 글 삭제 API 구현
•
BlogService.java
•
BlogApiController.java
•
삭제 결과 확인
•
테스트 코드 작성 - BlogApiControllerTest.java
블로그 글 수정 API 구현
3일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
블로그의 모든 글 조회하는 API 구현
•
BlogService.java
응답을 위한 DTO 생성
•
ArticleResponse.java
전체 글을 조회한 뒤 반환
2일차
본 프로젝트는 “스프링부트 3 백엔드 개발자 되기” 서적을 참고하여 진행하였음
엔티티 구성
리포지토리 만들기
API 구현
•
DTO (Data Transfer Object)
1일차