티스토리 뷰
반응형
스프링 시큐리티 완전 처음부터 11편 (Kotlin)
실무 투입 전 최종 체크리스트 + 바로 쓰는 템플릿 (이 글 하나면 다시 안 헤맨다)
이제 진짜 마지막이다.
11편은 새 개념을 추가하는 글이 아니라,
지금까지 만든 모든 걸 **“실무에서 바로 쓰게 만드는 정리 글”**이다.
솔직히 말해서
스프링 시큐리티는 한 번 이해해도
몇 달만 손 놓으면 다시 헷갈린다.
그래서 이 글은:
- 프로젝트 시작할 때
- 이직 과제할 때
- 면접 전날
- 실무에서 “우리 보안 구조 뭐지?” 싶을 때
👉 북마크해두고 다시 보는 글을 목표로 쓴다.
1️⃣ 전체 구조 한 번 더 리마인드 (머릿속 지도)

이 그림을 보고
아래 문장이 바로 떠오르면 성공이다.
“로그인은 인증,
이후 요청은 JWT 검증,
인가는 ROLE + tenant 기준”
2️⃣ 실무 투입 전 필수 체크리스트 (이거 안 하면 사고 난다)
✅ 인증(Authentication)
- formLogin 제거했는가?
- 로그인 API는 Filter에서 처리하는가?
- UserDetailsService + PasswordEncoder 연결 확인
- JWT 만료(exp) 설정되어 있는가?
- secretKey를 환경변수로 관리하는가?
✅ 인가(Authorization)
- URL 레벨 접근 제어 존재하는가?
- Service 레벨에 @PreAuthorize 적용했는가?
- ROLE prefix(ROLE_) 일관되게 쓰는가?
- 관리자 로직이 Controller에만 있지 않은가?
✅ JWT
- Payload에 최소 정보만 있는가?
- username
- role
- (멀티 테넌트면) tenantId
- 개인정보가 들어가 있지 않은가?
- 토큰 검증 실패 시 SecurityContext 비워지는가?
✅ 멀티 테넌트 (해당 시)
- JWT에 tenant 식별자 포함했는가?
- Repository 쿼리에 tenant 조건 빠진 곳 없는가?
- findAll() 남아 있지 않은가?
- 테스트 데이터에 tenant 2개 이상 있는가?
3️⃣ “이 구조로 프로젝트 하나 시작한다면” 최소 템플릿
반응형
이건 진짜 실무용이다.
복붙해서 시작해도 되는 구조다.
📁 패키지 구조 추천
security
├── config
│ └── SecurityConfig.kt
├── filter
│ ├── CustomAuthenticationFilter.kt
│ └── JwtAuthenticationFilter.kt
├── jwt
│ └── JwtProvider.kt
├── principal
│ └── TenantUserPrincipal.kt
└── service
└── CustomUserDetailsService.kt
👉 보안 코드는 한 패키지에 모아둔다.
이것만으로도 유지보수 난이도가 내려간다.
4️⃣ 실무에서 자주 쓰는 코드 조각 모음
✔ 현재 로그인 사용자 꺼내기
fun currentUser(): TenantUserPrincipal {
val auth = SecurityContextHolder.getContext().authentication
return auth.principal as TenantUserPrincipal
}
✔ 현재 tenantId 가져오기
fun currentTenantId(): Long =
currentUser().tenantId
✔ 관리자 전용 서비스 메서드
@PreAuthorize("hasRole('ADMIN')")
fun adminOnlyLogic() {
// 위험한 로직
}
✔ tenant + ROLE 동시에 체크
@PreAuthorize("hasRole('ADMIN') and #tenantId == principal.tenantId")
fun updateTenantConfig(tenantId: Long) { }
5️⃣ “이 구조, 언제까지 써도 되나요?”에 대한 현실적인 답
✔ 충분한 경우
- 대부분의 스타트업
- 내부 서비스
- B2B SaaS
- 관리자 시스템
- 모바일/웹 서비스
❗ 재설계 고려 시점
- 글로벌 서비스
- SSO 필수
- 대기업 연동
- 감사/컴플라이언스 요구
그때는:
- OAuth2 Authorization Server
- Keycloak
- Auth0
- AWS Cognito
같은 외부 인증 서버를 붙인다.
👉 지금 구조는 “그 전까지 쓰는 정답”이다.
6️⃣ 이 시리즈를 끝까지 따라온 사람에게, 진짜로
여기까지 왔다는 건
단순히 글을 많이 읽었다는 게 아니다.
- 인증/인가를 기능이 아니라 설계 문제로 보게 됐고
- “왜 이렇게 했는지” 설명할 수 있고
- 보안 사고 포인트를 미리 의식하게 됐다
이 차이는 생각보다 크다.
7️⃣ 이 시리즈를 이렇게 활용해도 좋다
- ✔ 포트폴리오 “보안 설계” 섹션
- ✔ 기술 블로그 연재
- ✔ 사내 위키/온보딩 문서
- ✔ 면접 대비 스크립트
- ✔ 다음 프로젝트의 베이스 코드
🎯 마지막 한 문장
스프링 시큐리티는
외워서 쓰는 기술이 아니라,
구조를 이해하고 선택하는 기술이다.
여기까지 왔다면
당신은 이미 그 단계를 넘었다.
스프링시큐리티, springsecurity, 코틀린, kotlin, jwt, 인증인가, 보안설계, 백엔드개발, 실무시큐리티, 개발블로그
'study > kotlin' 카테고리의 다른 글
| 스프링 시큐리티 완전 처음부터 13편 (Kotlin) (0) | 2026.01.06 |
|---|---|
| 스프링 시큐리티 완전 처음부터 12편 (Kotlin) (0) | 2026.01.05 |
| 스프링 시큐리티 완전 처음부터 9편 (Kotlin) (0) | 2025.12.31 |
| 스프링 시큐리티 완전 처음부터 8편 (Kotlin) (0) | 2025.12.30 |
| 스프링 시큐리티 완전 처음부터 7편 (Kotlin) (0) | 2025.12.26 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CI/CD
- 쿠버네티스
- flax
- fastapi
- Prisma
- JWT
- 백엔드개발
- Redis
- SEO최적화
- 딥러닝
- node.js
- 웹개발
- 압박면접
- rag
- llm
- 개발블로그
- Express
- 프론트엔드개발
- kotlin
- JAX
- Docker
- REACT
- nextJS
- PostgreSQL
- Next.js
- Python
- DevOps
- seo 최적화 10개
- NestJS
- ai철학
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
글 보관함
반응형

