본문 바로가기
Framework/Spring

Core Spring Security | 인증 API | 01강 프로젝트 구성 및 의존성 추가

by YIAN 2021. 10. 24.

Core Spring Security

핵심 개념 및 아키텍처 이해와 실전 예제로 완성하는 스프링 시큐리티 프로그래밍

 

1장 Spring Security 기본 API & Filter 이해

01강 인증 API - 프로젝트 구성 및 의존성 추가

 


📚 목차 | 다음 글 👉 

 


 

1. Spring Security 프로젝트 생성

 

프로젝트를 생성하는 방법은 인텔리제이에서 바로 생성하는 방법과, spring.io를 활용하여 생성하는 방법이 있습니다.

인텔리제이에서 프로젝트 생성하는 방법

 

강의에서는 인텔리제이에서 프로젝트를 생성하는 방법을 설명합니다. 저는 spring.io를 활용하는 방법을 추천합니다. 인텔리제이가 업데이트될 때마다, 프로젝트 생성하는 프로세스가 버전별로 조금씩 달라서 헷갈릴 때가 있습니다. spring initializr(https://start.spring.io/)에서 몇 가지 설정만 입력하면 프로젝트 하나를 뚝딱 만들 수 있습니다.

 

spring initializr로 프로젝트 생성하는 방법

 

다른 항목들은 입력값에 따라서 자동으로 채워집니다. Group, Artifact 부분만 작성하고 Spring Web을 선택한 뒤에  [GENERATE] 버튼을 누르셔도 됩니다. 물론 작성된 내용은 다음에 변경할 수 있습니다. Zip 파일로 다운받았다면, 인텔리제이에서 프로젝트를 실행해주세요.

 

 

2. Controller 생성

 

 

@RestController
public class SecurityController {

    @GetMapping("/")
    public String index() {
        return "Hello World";
    }

}

 

Controller를 하나 생성합니다. 저는 임의로 SecurityController를 만들고, 위 코드처럼 작성했습니다. https://localhost:8080 의 루트 경로로 접속하게 되면 하단과 같이 "Hello World"라는 문자열이 나오게 됩니다.

 

현재까지는 정상적으로 서버를 기동하고 자원에 접근할 수 있지만, 문제는 어떠한 보안도 적용되지 않은 상태입니다. 그래서 이 시스템에는 누구나 접근이 가능하고, 특별한 권한과 인증이 없어도 원하는 자원에 접근이 가능하므로 보안에 취약합니다. 안정된 시스템으로 변경하기 위해서는 추가 작업이 필요합니다.

 

 

3. 의존성 추가

 

 

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

 

pom.xml에 의존성을 추가해줍니다. 위 코드를 입력하고 Maven을 Reload 하여 적용하는 즉시, 보안이 적용된 시스템으로 바뀌게 됩니다.

 

 

 

Using generated security password: c1ec1266-4e71-438c-ae95-d94f54332545

 

서버를 다시 기동하면 콘솔 창에서 Using generated security password를 확인하실 수 있습니다. 이 값을 복사한 뒤  https://localhost:8080 의 루트 경로로 접속해주세요.

 

 

4. 로그인 페이지 확인

 

 

아까와는 달리 로그인 페이지로 접속됩니다. 이 페이지는 Spring Security에서 기본으로 제공하는 페이지로, 따로 설정한 로그인 페이지가 없다면 해당 페이지를 노출하게 됩니다. 이 시스템은 인증을 받아야만 자원에 접근이 가능한 구조로 변경되었습니다.

 

Spring Security에서 제공하는 페이지에서 로그인할 때는 기본적으로 제공하는 계정이 있습니다. 다음과 같이 입력하시고 [Sign in] 버튼을 클릭해주세요.

 

  • Username: user
  • Password: 콘솔에 출력된 기본 제공 랜덤 문자열

 

로그인하면 위와 같이 자원에 접근이 가능해집니다. 의존성을 추가한 이후 인증을 받은 사용자만 접근이 가능하도록 시스템이 변경되었다는 것을 확인할 수 있습니다. 그렇다면 의존성 추가 후 어떤 절차를 걸쳐서 보안 기능이 작동하게 될까요?

 

 

5. Spring Security의 의존성 추가 후 일어나는 일들

  • 서버가 기동 되면 Spring Security의 초기화 작업 및 보안 설정이 이루어집니다.
  • 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동합니다.
  1. 모든 요청은 인증이 되어야만 자원에 접근이 가능합니다.
  2. 인증 방식은 Form 로그인 방식과 Http Basic 로그인 방식을 제공합니다.
  3. Spring Security에서는 기본 로그인 페이지를 제공합니다.
  4. Spring Security에서는 기본 계정 1개를 제공합니다. (username: user / password: 랜덤 문자열)

 

위 내용은 의존성을 추가하면 보안 기능이 작동하게 되는데요. 문제점은 다음과 같습니다.

 

 

6. Spring Security의 의존성 추가 후 문제점

  • 계정 추가 필요
    • 1개의 계정을 제공하므로 계정을 추가해야 합니다.
  • 권한 추가 필요
    • 인증을 받아도 어떤 자원에는 특정 권한이 있어야 접근이 가능하도록 제어할 수 있어야 합니다.
  • DB 연동 필요
    • 계정과 권한이 있어도 구별하려면 DB로 관리해야 합니다.
  • 추가적인 보안 기능 필요
    • 기본적인 보안 기능 외에 시스템에서 필요로 하는 더 세부적이고 추가적인 보안 기능이 필요합니다.

 

다음 글부터는 이러한 문제점을 해결할 수 있는 내용을 다루겠습니다.

 


📚 목차 | 다음 글 👉 

 


 

 

✍ 회고

 

Spring Security의 의존성 추가 후 문제점에서 계정과 권한을 구별하려면 DB로 관리해야 한다고 적었는데요. 사실 계정의 개수와 권한의 개수가 많지 않다면 Security Configuration에 하드코딩 할 수 있고, DB를 사용하지 않을 수도 있습니다. 하지만 유지보수 측면에서는 좋은 방법이 아닐 수 있으므로 권한과 계정 개수가 많아진다면 DB 연동하는 것을 권장해 드리고 싶습니다.

 

 

🍰 참고사항

  • 해당 강의는 인프런에서 정수원 님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 통해 보실 수 있습니다.
  • 해당 포스팅을 진행하면서 생성된 코드들은 GitHub 저장소에 올리고 있습니다. 도움이 되실지 모르겠지만 하단의 GitHub Repository 주소를 참고해 주세요.
  • Code in GitHub: https://github.com/Yian-Kim/learning-Spring-Security
 

GitHub - Yian-Kim/learning-Spring-Security: 🔥 Wanna be Java Spring Security Master

🔥 Wanna be Java Spring Security Master. Contribute to Yian-Kim/learning-Spring-Security development by creating an account on GitHub.

github.com

 

댓글