이전 강의에서
우리는 보안이 무엇인지와
웹 애플리케이션을 보호하는 것이
중요하다는 것에 대해 배웠습니다
자 이번 강의에서는
우리는 간단한 Spring Boot 웹 애플리케이션을 만들어 봅시다
왜냐하면 보안과 Spring Security 프레임워크의
모든 컨셉에 대해 알아보기 위해서는
웹 애플리케이션이 필요하기 때문입니다
따라서 초기 단계로
우리는 Spring Boot 웹 애플리케이션을 만들 수 있고
이 Spring Boot 웹 애플리케이션 내에
저는 간단한 REST 서비스를 개발할 것입니다
이 웹 애플리케이션을 설정하고
우리가 개발한 REST서비스에 접속할 수 있게 되면
우리는 REST 서비스를 보안할 수 있는 법을 살펴볼 수 있습니다
그리고 이 과정에서
저는 여러분들에게 REST 서비스를 보안하는 것이
Spring Security 의존성을 추가함으로써
얼마나 쉬운지 보여줄 것입니다
화면에서 볼 수 있듯이
Spring Boot 애플리케이션을 만들기 위해서
start.spring.io 라는 웹사이트를 접속했습니다
이것은 Spring 팀이 직접 관리하는
공식 웹사이트입니다
여기에
만들고 싶은 프로젝트 종류
고려할 언어와 사용하고 싶은
Spring Boot 버전의 종류 등의 다양한 정보를 입력해야 합니다
자 이제 세부 정보를 입력해 봅시다
제공해야 하는 첫 번째 입력은
프로젝트 유형이 무엇인지에 관한 것입니다
제가 만들고 싶은 프로젝트 유형은 Maven입니다
본 강의에서 Maven 툴을 사용하기 싶기에
Maven을 선택합니다
사용하고 싶은 언어는 Java입니다
Spring Boot는 Kotlin과 Groovy 같은
다른 언어들 또한 지원합니다
언어를 선택한 후
사용할 Spring Boot 버전도 골라야 합니다
화면에서 보이는 것과 같이 현재 선택된 Spring Boot 버전은
제일 안정적인 3.0.2 버전입니다
웹사이트에서 기본으로
선택된 값을 항시 사용해주시기를 부탁드립니다
그리고 저는 GitHub 리포지터리에서
제가 사용하는 코드가 항상
가장 최신이자 안정적인 버전인 것을 확인하겠습니다
Group으로 넘어가서
이름을 com.eazybytes 라고 할 것입니다
그 후에 artifact 이름은
springsecuritybasic라 하고 싶습니다 왜냐하면 우리는
간단한 Spring Security 웹 애플리케이션을 만들기 때문입니다
description으로 넘어가서
더 많은 세부 정보를 주고 싶습니다
여기서 기본 설정으로 description이
Demo project for Spring Boot 라고 되어 있습니다
저는 Demo project for Spring Boot and Spring Security와
같이 더 세부 사항을 적고 싶습니다
Package name 은 자동으로 채워집니다
기본으로 설정된 Jar은 바꿀 필요없이 괜찮습니다
사용하고 싶은 Java 버전은
가장 안정적인 LTS 버전인 Java 17입니다
Spring Boot 3 와 Spring Security 6 버전의
최소 요구 사항이 Java 17 이기에
Java 17 보다 더 낮은
Java 버전은 고르지 마십시오
그렇기 때문에 최소한 Java 17 버전을
선택했는지 확인하십시오
세부 입력 사항을 다 제공한 후
dependencies 정보도 제공해야 합니다
이 Spring Boot 웹 애플리케이션 안에
REST 서비스를 빌드하고 싶기에
dependency는 Spring Web 를 선택할 것입니다
Spring Web을 사용하여 우리는 웹 애플리케이션
REST 서비스 그리고 Spring MVC 애플리케이션을
Spring Boot 내에 빌드 할 수 있습니다
또한 이 dependency는
내장된 Tomcat 서버를 제공하기에
Spring Boot 애플리케이션을 시작할 때마다
수동으로 웹 애플리케이션을
Tomcat 서버에 배포할 필요가 없습니다
내부적으로 Tomcat 서버의
웹 애플리케이션 배포는
이 dependency가 처리할 것입니다
그래서 저는 이 dependency를 선택할 것이고
다음으로 선택할 dependency는
DevTools입니다
Spring Boot DevTools는 생산상을 증진시킴으로써
개발자들을 로컬 개발에서
돕는 dependency입니다.
더 빠른 애플리케이션 재시작과 live record를 제공하기에
개발자들의 생산성을 향상 시킵니다
가령 코드를 일부분 바꿀 때마다
Spring Boot 웹 애플리케이션을 수동으로
재시작할 필요가 없습니다
그리고 이러한 안 보이는 곳에서의 DevTools
도움으로 자동 재시작이 일어날 것입니다
그리고 이러한 재시작이 일어날 때
Spring Boot은 변화가 있는 클래스에만
로딩하기에 재시작이 빠르게 일어납니다
따라서 이것을 선택할 것입니다
이 두 가지 dependencies은
우리는 기본적인 Spring Boot 웹 애플리케이션에 충분할 것입니다
이제 generate 버튼을 누르겠습니다
generate 버튼을 누르자마자
제 로컬 시스템에
Maven 프로젝트가 다운로드 되는 것을 확인할 수 있습니다
이제 제가 할 수 있는 것은 이 Maven 프로젝트를
제 workspace location에 복제할 수 있어
IntelliJ IDEA로 가져올 수 있도록 합니다
화면에서 볼 수 있듯이
저는 springsecurity의 이름을 가진
새로운 빈 워크플레이스 폴더 장소를 만들었습니다
이것은 새로운 폴더입니다
이제 이 폴더 안에
다운로드한 Maven 프로젝트를 붙여넣기 할 것입니다
이게 springsecuritybasic의 이름을 가진
다운로드한 프로젝트입니다
이것을 더블 클릭하면
보시다시피 이제 폴더로 추출되었습니다
이제 .zip file을 삭제할 수 있습니다
Maven project 안에
Maven 구조에 맞게
소스 폴더와 pom.xml이 있는 것을 확인할 수 있습니다
모든 것이 좋아 보입니다
이제 다음 단계로 할 수 있는 것은
이 Maven 프로젝트를 제 IntelliJ IDEA에 가져와
프로젝트에 작업할 수 있습니다
똑같이 IntelliJ IDEA를 열어 보겠습니다
화면에 보이는 것이 제 IntelliJ IDEA입니다
이것은 제 오프닝 페이지입니다
여기서 제가 할 수 있는 것은
여기 있는 오픈 옵션을 누를 수 있습니다
그리고 오픈 옵션을 누르면
프로젝트의 위치를 선택할 수 있는 창이 뜹니다
제 프로젝트는 storage안에
workspaces 안에 workspaces springsecurity에 있으며
프로젝트 이름은 springsecuritybasic입니다
그리고 이것은 제 pom.xml 입니다
이 pom.xml 선택할 시
여기서 open을 고를 수 있습니다
여기서 이것을 파일로 열지
프로젝트로 열지 물어보는 것입니다
저는 이 프로젝트에 작업하고 싶으니
project로 오픈하고 싶습니다
그래서 'open as project'를 선택하겠습니다
이제 성공적으로 Maven 프로젝트를
IntelliJ IDEA로 가져온 것을 확인할 수 있습니다
다음 단계로는
이 Maven project를 개발할 수 있습니다
저는 'build module spring security basic'
옵션을 선택할 것입니다
이것은 모든 Maven dependencies를
제 로컬 Maven 리포트에 다운로드 시킬 것입니다
하지만 웹 애플리케이션을 빌드하기 전에
Java를 다운로드 여부
Java home path를 설정했는지
그리고 Maven 다운로드 여부
Maven home path 설정 여부를 꼭 확인해주시기 바랍니다
고급 프레임워크인
Spring Security에 대해서 배우고 있기에
모든 기본 개념에 능숙하다고 가정하고 있습니다
Code Java, code java 컨셉
Maven을 설정하는 법 등에 대해서 이미 익숙하다고 가정하고 있습니다
이러한 가정을 토대로 저는 수업을 진행하고 있습니다
하지만 이러한 컨셉들이 익숙치 않다면
유튜브에서 영상을 찾아보거나
웹에 검색하면
Java home 과 Maven home paths를 설정는데에
도움을 줄 수 있는 수많은 블로그들이 있습니다
이제 빌드가 성공적이니 소스 폴더로 돌아가
소스 폴더 내에
Red Spring Boot application 주석이 있는 Java 클래스가 있습니다
이것이 이제 Spring Boot 웹 애플리케이션 내에
주요 class입니다
이제 로컬 개발에서
웹 애플리케이션을 시작하고 싶을 때마다
이 클래스로 들어와서 웹 애플리케이션을 시작해야 합니다
다음 단계로는 우리는
Spring Boot 웹 애플리케이셔 내에
REST 서비스를 빌드할 수 있습니다
이전과 똑같이
parent 패키지인 com.eazybytes.springsecuritybasic 밑에
새로운 서브 패키지를 만들 것입니다
이제 여기서 New - package 옵션을 선택하고
패지키 이름은 controller로 생각했습니다
새로운 패키지를 만든 후
새 Java 클래스를 생성할 수 있습니다
그리고 이 Java 클래스 이름은 WelcomeController 입니다
저는 이제 빈 Java 클래스가 있습니다
제가 연기서 언급할 수 있는 첫 번째 주석은
REST 서비스를 만들기 위해
@RestController 입니다
이 주석을
제 클래스의 맨 위에 언급 후
저는 간단한 public Java method를 만들 수 있습니다
따라서 method 는 public이며 written type 은 string입니다
그리고 이 메소드에게 주고 싶은 이름은
sayWelcome이며
어떠한 입력 매개변수도 허용하지 않을 것입니다
그리고 이 메소드는 string value를 반환할 것이며
반환할 string은
welcome to spring application without security 입니다
따라서 이것은 우리가 이 메소드로부터
반환하고 싶은 메세지입니다
그리고 REST 서비스는 연관된 경로를 가지게 될 것이기에
Get Mapping 주석과
지원하고 싶은 경로 가치를 정의해야합니다
우리가 지원하고 싶은 경로는 /welcome입니다
따라서 누군가 이 경로를 접근할 때
그들은 welcome to spring application
without security 라는 메세지를 받을 것입니다
이렇게 하면 제 Spring Boot 웹 애플리케이션과
괜찮을 것 같습니다
이제 웹 애플리케이션 빌드를 할 수 있습니다
빌드 완성 후
Spring Boot 애플리케이션 Main class로 돌아가
웹 애플리케이션을 디버그 모드로 시작할 수 있습니다
이것은 제 웹 애플리케이션을
port 8080에 내장된 Tomcat 서버에 배포할 것 입니다
이제 브라우저로 돌아가 localhost 8080/welcome
경로의 도움으로 접근 하려고 하면
welcome spring application without security 라는 메세지가
나타나는 것을 확인할 수 있습니다
이것은 백엔드 웹 애플리케이션에
언급한 메세지입니다
어떠한 이유로 이 welcome controller를
parent package 밖의 패키지에 만들었다면
이러한 시나리오에서는
Spring Boot 애플리케이션 main class에
component scan이라는
주석이 하나 더 필요합니다
Component scan을 언급하게 되면
패키지 세부 사항을 기록할 수 있습니다
우리의 controller가 어디 있는지
controller는 이 package 안에 있습니다
따라서 그 밸류를 복사한 후 언급을 하고 있습니다
이러한 변화를 기록하였고 이제 빌드할 수 있습니다
Package를 다시 새로고침하면
똑같은 답변 받는 것을 확인할 수 있습니다
여기서 제가 주목하고 싶은 점은
component scan 요구사항에
각별한 주의를 기울이십시오
이 시나리오에서는 이것은 완벽히 선택사항입니다
왜냐하면 제가 선택한 package는
Spring Boot 애플리케이션 main 클래스가 존재하는
main 패키지내에 하위 패키지로 존재하기 때문입니다
하지만 말했듯이 만약에
Spring Boot main 클래스 밖의 패키지의
controller 클라스들을 언급하는 것이면
분명히 component scan을 사용해야 합니다
그렇지 않으면 제대로 작동이 안 될 것입니다
이제 성공적으로
웹 애플리케이션을 빌드했으며 그 안에
REST 서비스를 개발했고 접근도 할 수 있는 것을 볼 수 있습니다
자 이제
이게 진짜 현존하는 심각한 REST 서비스로
기밀 정보를 반환하는데
쿼리가 이 서비스를 호출하고 있는 시나리오를 가정해봅시다
그래서 지금은 누구나 호출할 수 있는
대중 REST 서비스로 보안이 없습니다
따라서 다음 단계로는 이 웹 애플리케이션을 보호해야 합니다
다음 강의에서는
Spring Security의 도움으로
우리의 웹 애플리케이션을 보호할 수 있는 법에 대해서 배울 것이고
저는 여러분들한테 이것이 얼마나 쉬운 일인지 보여줄 것입니다
우리가 너무 작은 애플리케이션을 빌드한다고
걱정하지 마십시오
제가 약속드리지만 앞으로의 강의에서는
더 복잡한 웹 퍼블리케이션을 빌드할 예정입니다
감사합니다 다음 강의에서 뵙겠습니다
수고하셨습니다