Spring Security 비활성화
//Spring Security 접근 전체 허용 및 로그인UI 비활성화
@Configuration
@EnableWebSecurity
class SecurityConfig {
@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
http
.csrf { it.disable() }
.authorizeHttpRequests { authorize ->
authorize.anyRequest().permitAll()
}
.formLogin { it.disable() }
.httpBasic { it.disable() }
return http.build()
}
}
나중에 개발할 때 필요하지만 개발단계에서는 (아직) 거추장스러운 Spring Security
계속 로그인화면이 테스트를 막아서 비활성화 해줬다.
Swagger
@Configuration
class SwaggerConfig {
@Bean
fun openAPI(): OpenAPI = OpenAPI()
.info(
Info()
.title("Sodamjae API")
.description("소담재 API 문서")
.version("v1.0.0")
)
}
그리고 간단하게 스웨거도 적용했다.
http://localhost:8080/swagger-ui/index.html

테스트용 화면이지만 잘 뜬다.
이제 여기에 JWT 인증 버튼을 넣어주어서 Token을 받아 사용하도록 할거다. (나중에)
----
이대로 끝내기에는 아쉬워서 간단하게 User 테이블을 만들어보려고 한다.

회원가입에 요즘 필수로 들어가는 Oauth2 연동, 또는 이메일로 가입하는 경우에 대해서 생각했다.
Oauth2든 이메일로 가입하든 user는 하나의 테이블에서 관리되어야하며, email이 유니크값이 될 것이다.
그리고 사용자 맞춤 정보를 처음에 보여주기 위한 관심사, 나중에 확장을 위해서 초반에 받을 생각이다.
이를 바탕으로 만든 스키마는 아래와 같다.

users 테이블을 기반으로 ID를 키값으로 가진다.
email / password은 반드시 필요한 값이고, 그 외 사용자 정보들은 나중에 받을 예정.
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
password VARCHAR(255) NULL,
name VARCHAR(100) NOT NULL,
nickname VARCHAR(100) NOT NULL UNIQUE,
gender ENUM('M', 'F', 'O') NULL,
birth_date DATE NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by BIGINT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
updated_by BIGINT NULL
);
CREATE TABLE oauth_users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
provider ENUM('google', 'naver', 'kakao') NOT NULL,
provider_id VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by BIGINT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
updated_by BIGINT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE user_interests (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
category VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by BIGINT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
updated_by BIGINT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
생성완료.
----
03.03 조금 더 수정을 했다.
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) UNIQUE NULL,
name VARCHAR(100) NOT NULL UNIQUE,
role ENUM('ADMIN', 'SELLER', 'USER') NOT NULL DEFAULT 'USER',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by VARCHAR(100) NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
updated_by VARCHAR(100) NOT NULL
);
CREATE TABLE auth_users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
provider ENUM('google', 'naver', 'kakao', 'email') NOT NULL,
provider_id VARCHAR(255) UNIQUE NULL, -- OAuth 로그인 유저는 provider_id 저장
password VARCHAR(255) NULL, -- 이메일 로그인 유저는 비밀번호 저장
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by VARCHAR(100) NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
updated_by VARCHAR(100) NOT NULL
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
회원의 정보는 최소한으로 받는 것이 좋다는 생각이 들었다. 그리고 user는 언제든지 정보가 추가될 수 있도록 확장성을 고려해봤다.
oauth 로그인과 email 로그인을 고려한 테이블 auth_users를 만들어서 users에서 언제든지 정보가 확장 가능하도록 설계했다. 만약 다른 형식이 나오면 table 수정을 최소한으로 하기 위해서
결론적으로 사용자는 email만 있어도 회원가입이 가능한 구조가 되었다.
그리고 관심사는 나중에 갖는 것이 좋을 거 같아 삭제했다.

'PROJECT' 카테고리의 다른 글
week3-1: Product Entity와 Domain 설계 (0) | 2025.03.10 |
---|---|
week2-2: User JPA Repository 만들기 (0) | 2025.03.03 |
week1-1: 요구사항 나열해보기 feat. 도메인 주도 개발 (0) | 2025.02.22 |
Week 1: 사이드프로젝트를 시작해보자 with AI (0) | 2025.02.21 |
[SpringBoot] WebSecurityConfigurerAdapter 지원 불가 (6) | 2022.04.05 |