
마침내 프로젝트에서 회원 관리를 맡았다.
우와!
이번 시리즈의 목표는 뭐냐
Spring Security + JWT + OAuth2 로 소셜 로그인(카카오) 구현하기
인증, 권한 부여 및 기타 보안 기능을 제공하는 Java/Java EE 프레임워크.
Filter 기반으로 동작한다.
인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준.
어렵죠 ,,
쉽게 말하자면 우리 쪽에서 인증/인가 처리를 해야하는 데 이걸 다른 서버가 인증해주는 방식입니다. 우리는 카카오한테서 어떤 사용자의 정보를 가져오고 그를 통해 인증 및 인가를 해야하기 때문에 사용합니다.
JSON Web Token. 위의 인증/인가 처리를 위해 사용되는 개체가 JWT가 된다.
이 토큰을 통해 서버에서는 사용자가 인증을 받았는지 알 수 있다.
자세한 건 다음에 ..
보안을 위해서다.
위의 내용은 추후에 재정리 하겠음.
그럼 본격적으로 시작해보자.
이번 포스팅에서는 프로젝트 생성 및 세팅. Spring Security 적용된 프로젝트 확인까지 해보도록 하려구요
spring starter를 통해 프로젝트 생성했다.
본 프로젝트 개발환경은 아래와 같음.

build.gradle 파일
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.17'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'com.ssafy'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '11'
}
ext {
queryDslVersion = "5.0.0"
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
//implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//testImplementation 'org.springframework.security:spring-security-test'
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
//swagger
implementation 'org.springdoc:springdoc-openapi-ui:1.6.9'
// 이게 뭔지 모르겠다
implementation group: 'org.json', name: 'json', version: '20160810'
implementation 'io.jsonwebtoken:jjwt:0.9.1'
}
tasks.named('test') {
useJUnitPlatform()
}
// script for querydsl
def querydslDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl
}
추후에 추가될 수 있지만 일단 이정도로 하고 넘어간다.
로컬에 redis를 설치하고(이미 깔려있었음), 백그라운드로 실행해놓았다.
# 설치 되어있는지 버전 확인
redis-server --version
# 레디스 서비스 실행하기(백그라운드로)
brew services start redis
# 실행 상태 확인
brew services info redis
# 접속
redis-cli

아래는 기본적인 명령어들

mysql도 실행하고 test connection 되는 것 확인한 다음,
프로젝트에 가서
application.property에 db 연결 해준다!
spring.datasource.url=jdbc:mysql://localhost:포트번호/__________?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=_______________
spring.datasource.password=_______________
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
redis.host=localhost
redis.port=______
redis.password=______
실행해보면 임시로 비밀번호를 알려준다.

localhost:8080 으로 들어가보면,
spring security 설정에 의해 redirect 되어 /login 으로 리다이렉팅된다.

id, pw 를 입력해주면 정상적으로 되었을 때, 아무 화면이 없으므로 Whitelabel 화면이 뜨는 것을 확인할 수 있다.

본격적으로.. 카카오로그인적용하러 가보자.
기필코 해내겠습니다 아좌좡