
본 프로젝트는 최주호 님의 「스프링부트 시큐리티 & JWT」 강의를 참고하여 진행하였습니다.
최주호 님의 「스프링부트 시큐리티 & JWT」 강의 git 주소
https://github.com/codingspecialist/-Springboot-Security-OAuth2.0-V3
버전 업데이트 이후 수정본으로 진행하는 git 주소
https://github.com/Solkot/Security_Oauth
-> branch마다 저장하면서 진행하고 있습니다. OAuth 전의 과정의 경우 Profile branch에 저장되어 있습니다.
사이트 접속: https://start.spring.io/
Project: Maven
Language: Java
Spring Boot Version: (최신 안정 버전)
Dependencies:

터미널로 들어가서 진행하시면 됩니다.
git init
이미 설정되어 있다면 생략하셔도 됩니다.
git config user.email "이메일 주소"
git config user.name "사용자 이름"
기본 브랜치를 master → main으로 변경합니다.
git branch -M main
GitHub에서 새 repository를 만듭니다.
(예: spring-security-jwt)
git add .
git commit -m "프로젝트 초기 설정 완료"

Spring Boot에서는 Mustache 템플릿 엔진을 사용하여 MVC 구조의 View를 구성할 수 있습니다.
기본적으로 src/main/resources/templates 경로에서 .mustache 파일을 자동 인식합니다.
src
└─ main
├─ java
├─ resources
│ ├─ static
│ └─ templates
│ └─ index.mustache
해당 위치에 index.html이 와서 mustache로 오도록 진행합니다.
Mustache는 서버 사이드 템플릿 엔진으로서, 웹 애플리케이션에서 동적으로 HTML을 생성하는 데 사용됩니다.
물론, Thymleaf나 Mybatis 등 여러가지 엔진이 있어 원하시는 것으로 진행하셔도 무방합니다.

SpringFilter 적용 전에는 Spring Security에서 제공해주는 창을 및 비밀번호를 통해 인증이 가능하다.
로그아웃의 경우 localhost:8080/logout 을 통해 가능하다.

SpringFilter가 적용되면 스프링 시큐리티 필터가 필터체인에 등록되고 이전에 제공되었던 것은 해제된다.
WebSecurityConfigurerAdapter는 Spring Security 5.x 시절에 사용되던 방식으로,
예시:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/user/**").authenticated()
.requestMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER") //ROLE_ADMIN에서 이제 ROLE_ 같은 접두사는 자동으로 붙기 때문에 사용 X
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().permitAll()
)
.formLogin(form -> form
.loginPage("/login")
.permitAll() // 로그인 페이지와 로그인 요청 URL은 누구나 접근 가능하도록 허용
Lombok 의존성을 추가했음에도 User 엔티티 작성 시 인식 오류가 발생할 수 있습니다.<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version> <!-- 최신 버전 사용 권장 -->
<scope>provided</scope>
</dependency>
이로써 Spring Boot Security + JWT 프로젝트의 기본 환경 구성이 완료되었습니다.
다음 단계에서는 시큐리티 권한 처리를 진행할 예정입니다.