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

미루미·2022년 8월 7일
0

springbootStudy

목록 보기
4/5

책을 읽으면서 공부한 내용입니다.
책 제목: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

5장에서 배운 내용 (책 224쪽)

5-1. 스프링 부트 1.5와 스프링 부트 2.0에서 시큐리티 설정의 차이점
5-2. 스프링 시큐리티를 이용한 구글 / 네이버 연동 방법
5-3. 세션 저장소로 톰캣 / 데이터베이스 / 메모리 DB가 있으며 이중 데이터베이스를 사용하는 이유
5-4. ArgumentResolver를 이용하면 어노테이션으로 로그인 세션 정보를 가져올 수 있다는 것
5-5. 스프링 시큐리티 적용 시 기존 테스트 코드에서 문제 해결 방법

5-1. 스프링 부트 1.5와 스프링 부트 2.0에서 시큐리티 설정의 차이점

스프링 시큐리티는 사실상 스프링 기반의 애플리케이션에서 보안을 위한 표준이다. 따라서 책에서는 스프링 시큐리티와 OAuth 2.0을 구현한 구글 로그인을 연동하여 로그인 기능을 만든다.

OAuth 로그인 구현 시 로그인 시 보안, 비밀번호 찾기/변경, 회원가입 시 이메일 혹은 전화번호 인증 등의 것을 직접 구현할 필요 없이 구글, 페이스북, 네이버 등에 맡길 수 있다.

스프링 부트 1.5에서의 OAuth2 연동 방법이 2.0에서는 변경되었지만 설정 방법에 크게 차이가 없는 이유는 아래의 라이브러리 덕분이다.

spring-security-oauth2-autoconfigure

이 라이브러리를 사용하면 스프링 부트 2에서도 1.5에서 쓰던 설정을 그대로 사용할 수 있다.

그러나 책에서는 스프링 부트 2 방식인 Spring Security Oauth2 Client 라이브러리를 사용하는데, 그 이유에는 신규기능이 이제는 이 새 라이브러리에서만 지원된다는 것 등이 있다.

5-2. 스프링 시큐리티를 이용한 구글 / 네이버 연동 방법

  1. 새 프로젝트를 생성

  2. 메뉴 탭 > API 및 서비스 > 사용자 인증 정보 > 사용자 인증 정보 만들기
    책에서 구현하는 소셜 로그인은 OAuth 클라이언트 ID로 구현한다.

  3. 동의 화면 구성
    Google API의 범위를 다음과 같이 설정한다.
    -> email, profile, openid

  4. OAuth 클라이언트 ID 만들기
    승인된 리디렉션 URI에 다음의 주소를 추가한다.
    -> http://localhost:8080/login/oauth2/code/google
    (AWS 서버에서 배포하게 되면 localhost 외에 추가로 주소를 추가하게 된다.)

  5. 클라이언트 ID, 클라이언트 보안 비밀 코드 설정

생성된 애플리케이션을 클릭하면 인증 정보를 확인할 수 있다. 클라이언트 ID와 클라이언트 보안 비밀을 복사한다.
application.properties가 있는 디렉토리 아래에 application-oauth.properties 파일을 생성한다. 그리고 클라이언트 ID와 클라이언트 보안 비밀 코드를 등록한다.

spring.security.oauth2.client.registration.google.client-id=이곳에 클라이언트 ID
spring.security.oauth2.client.registration.google.client-secret=이곳에 클라이언트 보안 비밀
spring.security.oauth2.client.registration.google.scope=profile,email

application.properties에 위의 파일을 포함할 수 있도록 하는 코드를 추가한다.

spring.profiles.include=oauth
  1. .gitignore 등록

클라이언트 ID와 클라이언트 보안 비밀은 보안에 있어 중요한 정보들이다. 따라서 보안을 위해서 application-oauth.properties 파일이 깃허브에 올라가는 것을 방지하기 위한 코드를 .gitignore에 추가한다.

application-oauth.properties

5-3. 세션 저장소로 톰캣 / 데이터베이스 / 메모리 DB가 있으며 이중 데이터베이스를 사용하는 이유

톰캣을 사용하면 세션이 내장 톰캣의 메모리에 저장되기 때문에, 애플리케이션을 재시작할 때마다 메모리가 초기화된다는 문제가 있다. 또 2대 이상의 서버에서 서비스한다면 톰캣마다 세션 동기화 설정을 해야 한다.

메모리 DB은 B2C 서비스에서 가장 많이 사용하는 방식이지만, 사용자가 없는 현재로서는 부담스럽다.

데이터베이스는 보통 로그인 요청이 많이 없는 백오피스, 사내 시스템 용도에서 사용한다. 책에서 데이터베이스를 사용하는 이유는 설정이 간단하고 비용을 절감할 수 있기 때문이다.

profile
미루미루지마

0개의 댓글