
๐ To Do List

๐ฉ๐ป๐ป Today I Learned ...
@AuthenticationPrincipal ์ฌ์ฉํด์ ์ ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
@AuthenticationPrincipal์ Spring Security์ Authentication ๊ฐ์ฒด(๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ด๋ฆ, ๊ถํ, ์ญํ ๋ฑ์ด ๋ด๊ฒจ์์) ์์ ํ์ฌ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ง์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.

JWT Filter์์ Authentication ๊ฐ์ฒด๋ฅผ ์์ฑํด์ Security Context์ ์ ์ฅํ๋ฉด
์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก principal ์ ์ฅ๋๋ค.
SecurityContextHolder
โโ SecurityContext
โโ Authentication (UsernamePasswordAuthenticationToken)
โโ principal: AuthUser(id=123, email="user@...", ...)

Controller ์คํ ์, Spring์ด ๋ด๋ถ์ ์ผ๋ก SecurityContextHolder์์ principal ๊ฐ์ ๊ฐ์ ธ์์ Principal ํด๋์ค๋ก ์บ์คํ ํด์ค๋ค.
user ๊ฐ์ฒด์๋ user id, email ๋ฑ์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๊ธฐ ๋๋ฌธ์ , controller์ service ๋จ์์ ๋ณด์์ ์์ ํ๊ฒ ์ ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
@AuthenticationPrincipal ์ด๋ ธํ ์ด์ ์ด์ฉํด์ Controller์์ ์ ์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ๊ฐ์ ธ์ค๋ ๋ฐฉํฅ์ผ๋ก ๋ฆฌํฉํ ๋ง์ ์งํํ๋๋ฐ
์์ธํ ๋ด์ฉ์ ๊ฐ๋ฐ ์ผ์ง์ ๋ฐ๋ก ์์ฑํ ์์ ์ด๋ค. โ๏ธ
์ฐธ๊ณ :
Spring Security์ @AuthenticationPrincipal ์ดํดํ๊ธฐ
@AuthenticationPrincipal ์ด๋ ธํ ์ด์ ์ Spring Security์์ ์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค. Spring Security๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ ๋, ์ธ์ฆ๋ ์ฌ์ฉ์์ ์
stdio-han.tistory.com
Swagger ์ค์
build.gradle.kt
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.13")
Spring Boot 3.x ํ๊ฒฝ์์ ์ฌ์ฉํ๋ springdoc ์ต์ ๋ฒ์ ์ผ๋ก, /swagger-ui.html ๋๋ /swagger-ui/index.html ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
Swagger์ JWT ์ธ์ฆ ์ค์

info()
Swagger UI ์๋จ์ ํ์๋๋ API ๋ฌธ์ ์ ๋ณด๋ฅผ ์ค์ ํ๋ค.
.info(
Info()
.title("KOU App API") // ← API ์ ๋ชฉ
.version("v1.0.0") // ← ๋ฒ์
.description("...") // ← ์ค๋ช
)
components()
API ์ ์ญ์์ ์ฌ์ฉํ ๋ณด์ ์คํค๋ง, ๊ณตํต ๋ชจ๋ธ ๋ฑ์ ์ ์ํ๋ค.
.components(
Components()
.addSecuritySchemes( // ← ๋ณด์ ์คํค๋ง
"bearerAuth", // ← ์คํค๋ง ์ด๋ฆ (Controller์์ ์ฐธ์กฐ)
SecurityScheme()
.type(SecurityScheme.Type.HTTP) // ← HTTP ์ธ์ฆ ์คํค๋ง// ← ์ธ์ฆ ํ์
.scheme("bearer")
.bearerFormat("JWT") // ← Bearer ํฌ๋งท
.`in`(SecurityScheme.In.HEADER) // ← ์์น (ํค๋)
.name("Authorization") // ← ํค๋ ์ด๋ฆ
.description("JWT ํ ํฐ์ ์
๋ ฅํ์ธ์ (Bearer ์ ์ธ)"), // ← ์ค๋ช
),
)


Swagger UI์์ Authorize ๐ ๋ฒํผ์ ํด๋ฆญํ์ฌ AccessToken ๊ฐ์ ์ ๋ ฅํ๋ฉด ,
Postman์์ Authorization ํญ์ AccessToken ๊ฐ์ ์ ๋ ฅํ์ฌ API ์์ฒญํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ ๊ฑธ ๋ณผ ์ ์๋ค.

์ฐธ๊ณ :
Spring Boot(Kotlin) — 4ํธ. Swagger(OpenAPI) ์ค์ ๊ฐ์ด๋
๐ Spring Boot(Kotlin) ์๋ฒ ๊ธฐ๋ณธ ์ ํ — ์๋ฆฌ์ฆ ์๋ด์ ๋ฉํฐ ๋ชจ๋ ๊ตฌ์กฐ์ธ๊ฐ? (์ํคํ ์ฒ ์ฒ ํ & ์ ์ฒด ์ค๊ณ ํธ)API Response ํฌ๋งท ์ค๊ณ๊ธ๋ก๋ฒ ์์ธ ์ฒ๋ฆฌ(GlobalExceptionHandler)Swagger(OpenAPI) ์ค์ ← ํ์ฌ ๊ธSecuri
jaemoi8.tistory.com
'Today I Learned ๐ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [TIL-20260129] Docker ์ปจํ ์ด๋ ๋ค๋ฃจ๊ธฐ (0) | 2026.01.30 |
|---|---|
| [TIL-20260128] Nginx Basic Auth, Github Actions๋ก .htpasswd ์์ฑ (0) | 2026.01.28 |
| [TIL-20260124] Spring Batch Reader ๊ตฌํ (0) | 2026.01.24 |
| [TIL-20260122] ํ๊ฒฝ์ ๋ฐ๋ฅธ ๊ฐ ์ค์ ํ๊ธฐ (Spring Environment, Kotlin buildList) (0) | 2026.01.22 |
| [TIL-20260118] JPA ๋ณ๊ฒฝ ๊ฐ์ง (Dirty Checking) (3) | 2026.01.18 |