기록과 정리

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 05 본문

IT/스프링 부트와 AWS로 혼자 구현하는 웹 서비스

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 05

zepetto 2021. 3. 30. 22:05

이 글은 이동욱(jojoldu)님의 <스프링 부트와 AWS로 혼자 구현하는 웹 서비스> 를 참고하였습니다.

m.yes24.com/Goods/Detail/83849117

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 

m.yes24.com

또한 해당글에 대한 소스는 github.com/jojoldu/freelec-springboot2-webservice

 

jojoldu/freelec-springboot2-webservice

Contribute to jojoldu/freelec-springboot2-webservice development by creating an account on GitHub.

github.com

에서 자세하게 확인 가능합니다.

 

스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

많은 서비스에는 로그인 기능이 있습니다. 스프링에는 스프링 시큐리티라는 기능으로 비교적 쉽게 인증 시스템을 구현할 수 있습니다. ( 비교적입니다...) 

 

스프링 시큐리티가 없다면 각 화면마다 session 이라던지 구현의 로직을 설정을 해주어야하고 내가 로그인을 구현하는 건지 프로그램을 만드는 건지하는 배보다 배꼽이 커지는 상황이 발생합니다. 이러한 수고를 조금 덜기 위해서 사용합니다.

 

또한 스프링 부트에서는 스프링 시큐리티 2.0을 지원합니다. 그리고 스프링 시큐리티와 더불어 OAuth2 연동을 통하여 구글 및 네이버에서 제공하는 OpenAPI를 사용한 로그인 기능을 구현하고 있습니다.

 

구글 연동

 

 

GoogleCloudFlatform

서적과 달리 구글이 조금 업데이트 되었기때문에 책과 내용이 상이할 수 있습니다. 우선 구글 클라우드 플랫폼에 들어가 본인의 프로젝트를 구성합니다.

 

사용자 인증정보에 '사용자 인증 정보 만들기'라는 버튼이 있습니다. 클릭.

우리는 OAuth 클라이언트 ID를 만들어줍니다.

 

웹어플리케이션을 선택하겠습니다.

 

어플리케이션의 이름과 구글 입장에서 요청이 들어오는 URI 를 입력해줍니다. 

만들어진 항목을 보면 다음과 같이 클라이언트 ID, 보안 비밀이 보입니다. 이것이 바로 OAuth2.0을 이용하기 위한 key 값입니다. 

보안이슈가 있을 수 있으니 Github이나 다른 버전 관리 서버에는 빼놓고 커밋하도록 합시다. ( gitIgnore 사용! )

 

 

application-oauth.properties

위와 같은 appliocation-oauth.properties 파일을 생성한 후, 아까 본 클라이언트 ID, 보안 비밀 키를 입력해줍니다. 이 파일은 따로 관리를 하세요. scope 의 경우 profile,email로 관리를 합니다. openid까지 추가 할 경우 Open id Provider로 인식이 되어 그렇지 않은 서비스 ( 카카오/ 네이버) 와 달리 따로 Service를 만들어야 하는 번거로움을 줄이기 위함입니다.

 

구글 로그인 연동하기

 

User Entity

회원을 관리하는 도메인 User Entity를 하나 생성합니다.

User에 Enum 설정
권한을 관리하는 enum class

권한을 관리하는 Enum Class를 하나 생성합니다.

 

build.gradle

Oauth2.0을 관리하기 위한 의존성을 추가해줍니다.

커스텀한 설정을 관리하는 SecurityConfigurerAdapter, 책에서는 SecurityConfig로 되어 있음

 

커스텀한 시큐리티 설정을 할 수 있는 파일입니다. URL에 따른 권한별 관리 , 권한 대상 지정, 로그아웃 기능 정리, 진입정 설정 등 다양한 설정을 가능하게 해줍니다. OAuth2UserService를 구현하는 것을 중점으로 기억합니다.

 

사용자의 정보 기반으로 가입 및 정보 수정, 세션 저장의 기능을 하는 CustomOAuth2UserService
UserEntity 의 DTO 생성
SessionUser

인증된 사용자 정보를 넣을 DTO 를 만들어주고 지금은 name , email, picture을 필드로 선언합니다.

컨트롤러

컨트롤러 구성시 , @LoginUser라는 커스터마이징한 어노테이션을 사용해서 Session을 불러오고 있다. 

중복된 코드를 방지하는 커스텀어노테이션

실행해보면 화면이 다음과 같다.

 



 

로그인 성공

로그인 성공했다. 책에서는 Naver 로그인도 구현하고 있다.