본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.



패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 46일차!
오늘은 Websocket을 활용한 실시간 메시징 도메인 서버의 로그인 기능 적용 작업을 진행하였다.
지난 시간에는 주소만 입력한다면 누구나 접속할 수 있는 채팅 기능을 만들었다면, 이번에는 채팅 기능에 Spring Security를 이용한 로그인 기능을 적용시켜 로그인한 사용자만 채팅창에 접근할 수 있도록 구현하였다.
Spring Security란 인증 및 인가를 위한 스프링의 하위 프레임워크이다.
서블릿(Servlet)은 클라이언트의 http 요청을 처리하고 동적으로 응답을 생성하는 자바 기반의 웹 프로그래밍 기술로, 웹 서버 상에서 동작하는 자바 클래스이다.
스프링부트에서는 기본적으로 Tomcat이라는 내장 웹 서버를 사용하며, 이는 서블릿 컨테이너 역할을 하여 우리가 작성한 웹 애플리케이션 코드를 실행하고 HTTP 요청을 처리한다.
서버로 들어온 HTTP 요청은 여러 개의 서블릿 필터를 거쳐서 서블릿에 도달하게 된다.
이러한 필터 계층 구조 중 하나로 스프링 시큐리티의 FilterChainProxy가 삽입되어 동작한다.
FilterChainProxy는 하나의 필터로 보이지만, 내부적으로 여러 개의 SecurityFilterChain을 관리한다. 개발자는 이 체인을 커스터마이징하여 인증, 인가, 세션 관리 등 보안 기능을 확장할 수 있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.springframework.boot:spring-boot-starter-security'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
build.gradle 파일에 spring security 관련 의존성을 추가해 주었다.

어플리케이션을 실행시키고 localhost:8080으로 접속하니, index.html 화면이 바로 뜨는 것이 아니라 /login 경로의 로그인 화면으로 접속되는 것을 확인할 수 있다. 스프링 부트의 장점 중 하나인 auto configuration 덕분에 프로젝트의 classpath에 스프링 시큐리티가 있는 것을 확인하여 자동으로 기본 form login 기능이 적용된 것이다.

username에는 'user'를, password에는 프로젝트 콘솔에 출력되는 Using generated security password 값을 복사하여 붙여넣고 sign in 버튼을 누르면 로그인이 되어 기존의 채팅창으로 넘어가게 된다.
프로젝트를 진행하면서 스프링 시큐리티를 사용해 본 경험이 있다.
매번 느끼지만 스프링에서 제공하는 하위 프레임워크를 잘 활용하면 개발 생산성에 정말 큰 도움이 되는 것 같다.