프로젝트에 참고한 책: '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'
시작에 앞서 구현 순서를 정리해 보았다
1. 구글 서비스 등록
2.application.properties에 서비스 id,pw 등록
3.domain에서 user,role 클래스와 userRepository 생성
4. config/auth 패키지 만들어서 SecurityConfig, CustomOAuth2UserService 생성
5. config/auth/dto 패키지에 OAuthAttributes, SessionUser 생성
6. config/auth/dto 패키지에 LoginUser 어노테이션, LoginUserArgumentResolver 생성
7. config 패키지에 WebConfig 생성
스프링 시큐리티란
막강한 인증(authentication)과 인가(authorization) 기능을 가진 프레임워크이다
로그인 기능은 스프링 시큐리티(spring security)를 이용해서 구현했다
최근에는 인터셉터,필터 기반의 보안 기능을 구현하는 것보다 스프링 시큐리티를 통해 구현하는 것을 권장하고 있다
이유는 확장이 용이해서 다양한 요구사항을 쉽게 추가하고 변경할 수 있다.
본 초기 프로젝트에서는 내부 로그인 서비스를 개발하려고 했으나, 소셜 로그인 기능을 이용하는 것이 더 이익일 것 같아
구글,네이버 로그인 기능을 이용했다
자체 로그인 기능 개발시 개발해야하는 것들이 많다
예를 들면 로그인시 보안, 전화번호,이메일 인증, 비밀번호 찾기/변경, 회원정보 변경 등
소셜 로그인을 하면 위 부분은 개발 안해도 되니 다른 기능에 초점을 두어 개발할 수 있다
구글 로그인 구현 시작
1. 구글,네이버에 서비스 등록
코드 위주로 기록을 할 것이기 때문에 등록 과정은 다음 링크를 참조하면 될 것 같다
구글: https://smpark1020.tistory.com/203
네이버: https://loosie.tistory.com/301
위 과정을 통해서 등록을 했으면, 생성된 클라이언트 ID와 비밀번호를 main/main/java/resource 패키지에 application-oauth.properties 파일을 생성해서 다음과 같이 작성하면된다
oauth properties의 설정을 가져오기 위해서 application.properties에 spring.profiles.include=oauth
그리고 이 정보가 github에 push 되면 안되므로 git.ignore에 application-oauth.properties를 추가한다
2. User 클래스 생성
이것도 posts와 비슷하게 필드들 채워나가면 된다.
다른 점은 role이라는 필드가 생겼다는 점이다. 사용자가 처음 방문하면 Guest라는 권한으로 접근을 하게 되고, 한번 로그인한 기록이 있다면 User 권한을 부여해 서비스를 이용할 수 있게 하기위해 있는 것 같다
이는 Role enum클래스를 user 클래스와 같은 /domain/user 패키지에 생성하면된다
@Enumerated(Enum Type.STRING)에 대해서
JPA로 db에 저장할 때 enum값은 기본적으로 int값으로 저장되는데
숫자로 저장되면 db를 확인할 때 무슨 코드를 의미하는지 알 수가 없기 때문에 문자열로 저장하게 위한 어노테이션을 선언한다
자세한 user 클래스 코드는 다음 링크를 참조하면된다
entity 클래스 작성할 때 @builder로 생성자 작성하면 더 용이하다
해당 엔티티로 update 기능도 만든다면 update 생성자(?)도 만들어 놓아야한다
3. UserRepository 생성
User의 CRUD를 책임지는 리포지토리도 posts와 같은 방식으로 하면되고 email로 찾는 것만 추가해주면 된다
4. Role 클래스 생성
스프링 시큐리티에서는 권한 코드에 항상 ROLE_이 있어야해서 붙여서 key를 작성했다
Role(key: , title: ) 이므로 key와 title 필드를 final로 작성한다
'개인프로젝트 > My Book' 카테고리의 다른 글
[개인프로젝트 #1] 5. 로그인 구현(Dto) (0) | 2022.01.27 |
---|---|
[개인프로젝트 #1] 5. 로그인 구현(SecurityConfig,UserService) (0) | 2022.01.27 |
배포 전에 프로젝트 하면서 아쉬웠던 점들 (0) | 2022.01.27 |
[개인프로젝트 #1] 4. 게시글 수정 View 생성 (0) | 2022.01.27 |
[개인프로젝트 #1] 4. 게시글 저장 View 생성 (0) | 2022.01.27 |