6. 로그인 기능 구현하기

 

구글/카카오/네이버 계정 사용해서 로그인하기 기능을 사용해보신 적이 있나요?

소셜 로그인은 우리가 처음 접하는 사이트에서 id와 password를 만들지 않고도 서비스를 사용할 수 있도록 돕습니다.

또한 개발자들을 api 구현의 고통에서 벗어나게 해주죠!

OAuth 로그인을 사용하면 개발자들은 아래와 같은 기능을 신경쓰지 않고 서비스 개발에만 집중할 수 있습니다.

 

* 로그인 시 보안

* 회원가입 시 이메일 혹은 전화번호 인증

* 비밀번호 찾기

* 비밀번호 변경

* 회원정보 변경

 

6.1. Spring Security

Spiring Sequrity는 스프링 기반 어플리케이션의 보안을 담당하는 프레임워크입니다.

보안과 관련된 다양한 옵션을 지원하고 java bean 설정만으로도 간단하게 사용할 수 있습니다.

본 섹션에서는 Spring Sequrity가 무엇이고 어떻게 동작하는지 보다도, OAuth에 사용된다는 점만 알고 넘어가려 합니다.

 

6.2. Google Login

구글 로그인을 제 SpringBoot 프로젝트와 연동시키기 위해 구글 클라우드 플랫폼에서 신규 서비스 정보를 만들었습니다. application-oauth.properties에 여기서 생성한 client id와 보안 코드를 붙여넣습니다.

spring.security.oauth2.client.registration.google.client-id="제 클라이언트 id"
spring.security.oauth2.client.registration.google.client-secret="제 클라이언트 secret"
spring.security.oauth2.client.registration.google.scope = profile, email

 

잊지말고 .gitignore에도 등록해주어야 합니다!

구글 로그인을 연동하기 위해 다음 과정을 거쳤습니다.

 

1. domain/user에 User 패키지를 생성합니다.

        @Getter
        @NoArgsConstructor
        @Entity
        
        public class User extends BaseTimeEntity {

            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            private Long id;

            @Column(nullable = false)
            private String name;

            @Column(nullable = false)
            private String email;

            @Column
            private String picture;

            @Enumerated(EnumType.STRING)
            @Column(nullable = false)
            private Role role;
            @Builder
            public User(String name, String email, String picture, Role role) {
                this.name = name;
                this.email = email;
                this.picture = picture;
                this.role = role;
            }

            public User update(String name, String picture) {
                this.name = name;
                this.picture = picture;
                return this;
            }

            public String getRoleKey() {
                return this.role.getKey();
            }
        }

 

2. 각 사용자의 권한을 관리할 Enum 클래스 Role.java을 생성합니다.

        @Getter
        @RequiredArgsConstructor
        public enum Role {
            GUEST("ROLE_GUEST", "손님"),
            USER("ROLE_USER", "일반 사용자");
            private final String key;
            private final String title;
        }

 

3. USER의 CRUD를 다루기 위해 UserRepository.java를 생성합니다.

        public interface UserRepository extends JpaRepository<User, Long> {

        	Optional<User> findByEmail(String email);

        }

 

스프링 시큐리티를 설정하기 위해 다음 과정을 거쳤습니다.

 

1. build.gradle에 스프링 시큐리티 의존성을 추가합니다.

compile('org.springframework.boot:spring-boot-starter-oauth2-client')

 

2. config/auth 패키지를 생성해 관련 파일을 작성합니다.

    * config/auth/SecurityConfig.java

    * config/auth/CustomOAuth2UserService.java

    * config/auth/OAuthAttributes.java

    * config/auth/dto/SessionUser.java

 

references

* 스프링 부트와 aws로 혼자 구현하는 웹 서비스 - 이동욱님 (👍)

* <https://mangkyu.tistory.com/76>

* <https://sjh836.tistory.com/165>

+ Recent posts