[Spring Security] 환경설정(1)

SeungWoo Cha·2025년 10월 14일

Spring_Security

목록 보기
3/4
post-thumbnail

환경설정

본 프로젝트는 최주호 님의 「스프링부트 시큐리티 & JWT」 강의를 참고하여 진행하였습니다.

최주호 님의 「스프링부트 시큐리티 & JWT」 강의 git 주소
https://github.com/codingspecialist/-Springboot-Security-OAuth2.0-V3

버전 업데이트 이후 수정본으로 진행하는 git 주소
https://github.com/Solkot/Security_Oauth
-> branch마다 저장하면서 진행하고 있습니다. OAuth 전의 과정의 경우 Profile branch에 저장되어 있습니다.


1. 환경설정 (Spring Initializer)

1.1 Spring Initializer 설정

  • 사이트 접속: https://start.spring.io/

  • Project: Maven

  • Language: Java

  • Spring Boot Version: (최신 안정 버전)

  • Dependencies:

    • Spring Security
    • Spring Web
    • Mustache
    • Lombok

2. Git 설정


터미널로 들어가서 진행하시면 됩니다.

2.1 Git 초기화

git init

2.2 사용자 정보 설정

이미 설정되어 있다면 생략하셔도 됩니다.

git config user.email "이메일 주소"
git config user.name "사용자 이름"

2.3 브랜치 이름 변경

기본 브랜치를 mastermain으로 변경합니다.

git branch -M main

2.4 GitHub 저장소 생성

GitHub에서 새 repository를 만듭니다.
(예: spring-security-jwt)

2.5 파일 추가 및 커밋

git add .
git commit -m "프로젝트 초기 설정 완료"

3. Mustache 설정 (MVC)

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 등 여러가지 엔진이 있어 원하시는 것으로 진행하셔도 무방합니다.


4. SpringFilter chain 적용 전 후

4.1. SpringFilter 적용 전


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

4.2. SpringFilter 적용 후


SpringFilter가 적용되면 스프링 시큐리티 필터가 필터체인에 등록되고 이전에 제공되었던 것은 해제된다.


5. Trouble Shooting

5.1 WebSecurityConfigurerAdapter → SecurityFilterChain

  • WebSecurityConfigurerAdapterSpring Security 5.x 시절에 사용되던 방식으로,
    현재는 deprecated(사용 권장되지 않음) 상태입니다.
  • 대신 SecurityFilterChain 방식으로 변경되었으며,
    메서드 체인 기반에서 람다 형식으로 작성하는 것이 권장됩니다.
  • anyMatchers -> requestMatchers
  • .access(hasRole("")) -> .hasRole("") (단수일 경우) .hasAnyRole("", "") (복수일 경우)
    *.formLogin의 경우도 내부 요소는 람다로 따로 처리하도록 변경

예시:

@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은 누구나 접근 가능하도록 허용

5.2 Lombok 문제 해결

  • Lombok 의존성을 추가했음에도 User 엔티티 작성 시 인식 오류가 발생할 수 있습니다.
  • IDE에서 annotation processor 설정을 켜거나, 최신 버전 Lombok 의존성을 명시적으로 추가하면 해결됩니다.
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version> <!-- 최신 버전 사용 권장 -->
    <scope>provided</scope>
</dependency>

6. 마무리

이로써 Spring Boot Security + JWT 프로젝트의 기본 환경 구성이 완료되었습니다.
다음 단계에서는 시큐리티 권한 처리를 진행할 예정입니다.


profile
한 발자국씩

0개의 댓글