패스트캠퍼스"한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지" 강의의 "안정적인 서비스를 위한 스프링DATA와 Security - 스프링 시큐리티" 파트를 정리한 글입니다.
강의 관련 코드 https://github.com/jongwon/sp-fastcampus-spring-sec
다음 내용은 스프링 시큐리티 실습을 위한 프로젝트를 gradle 통해 구성하는 방법에 대해서 다룹니다.
gradle 프로젝트 구성하기
settings.gradle
· settings.gradle에서는 전체 프로젝트의 구조를 빌드한다.
· 다음 설정으로 한개의 프로젝트를 구성할 수 있다.
rootProject.name="project-name"
include "project-name"
· 다음 설정으로 여러 모듈 프로젝트를 포함하도록 구성할 수 있다.
rootProject.name="project-name"
include ":sub-project1"
include ":sub-project2"
· 모듈 프로젝트들이 많아서 이들을 group으로 관리하고 싶다면, 다음과 같이 자동 빌드하는 스크립트를 쓰면 편리하다.
rootProject.name = 'security-gradle3'
["comp", "web", "server"].each {
def compDir = new File(rootDir, it)
if(!compDir.exists()){
compDir.mkdirs()
}
compDir.eachDir {subDir ->
def gradleFile = new File(subDir.absolutePath, "build.gradle")
if(!gradleFile.exists()){
gradleFile.text =
"""
dependencies {
}
""".stripIndent(20)
}
[
"src/main/java/com/sp/fc",
"src/main/resources",
"src/test/java/com/sp/fc",
"src/test/resources"
].each {srcDir->
def srcFolder = new File(subDir.absolutePath, srcDir)
if(!srcFolder.exists()){
srcFolder.mkdirs()
}
}
def projectName = ":${it}-${subDir.name}";
include projectName
project(projectName).projectDir = subDir
}
}
Gradle 설치하기
· gradle을 설치한다. (여기서는 맥 전용)
brew install gradle
Gradle 구성하기
· 깃헙의 소스코드를 가져온다.
git clone https://github.com/jongwon/sp-fastcampus-spring-sec
· gradle 초기화하기
gradle init
이때 프로젝트 타입을 basic, 빌드 스크립트 도메인 특화 언어(DSL)을 Groovy로 선택한다.
· 인텔리제이로 프로젝트 구성이 올바른가 확인한다.
· 프로젝트의 settings.gradle 파일을 클릭하고, 앞서 모듈 프로젝트를 group으로 관리하기 위한 설정에서 rootProject.name만 본인의 프로젝트 이름으로 바꿔서 다음과 같이 입력한다.
rootProject.name = 'sp-fastcampus-spring-sec'
["comp", "web", "server"].each {
def compDir = new File(rootDir, it)
if(!compDir.exists()){
compDir.mkdirs()
}
compDir.eachDir {subDir ->
def gradleFile = new File(subDir.absolutePath, "build.gradle")
if(!gradleFile.exists()){
gradleFile.text =
"""
dependencies {
}
""".stripIndent(20)
}
[
"src/main/java/com/sp/fc",
"src/main/resources",
"src/test/java/com/sp/fc",
"src/test/resources"
].each {srcDir->
def srcFolder = new File(subDir.absolutePath, srcDir)
if(!srcFolder.exists()){
srcFolder.mkdirs()
}
}
def projectName = ":${it}-${subDir.name}";
include projectName
project(projectName).projectDir = subDir
}
}
gradle을 refresh하면,
설정대로 comp, web, server 세 폴더가 생성된다.
이 중 server 폴더에 basic-test라는 폴더를 만들고, gradle을 refresh하면 설정한대로 server 프로젝트가 구성된다.
· 루트 프로젝트의 build.gradle의 설정을 구성한다.
// 별도의 외부 라이브러리를 가져와야 할 때 사용
buildscript {
// build.gradle에서 사용하는 전역 변수 설정
ext {
spring = "2.4.1"
boot = "org.springframework.boot"
lombok = "org.projectlombok:lombok"
}
repositories {
// mavenCentral 레퍼지토리 사용 https://mvnrepository.com/repos/central
mavenCentral()
}
// 레파지토리에서 찾을 라이브러리 입력
dependencies {
// 스프링 부트를 gradle로 빌드할 때 사용하는 라이브러리
classpath("$boot:spring-boot-gradle-plugin:$spring")
}
}
// (rootproject 포함) 모든 프로젝트의 공통 내용
allprojects {
// 모든 프로젝트에서 공통으로 사용될 그룹 id와 버전 id
group = "com.sp.fc"
version = "1.0.0"
}
// (rootproject 제외) 하위 프로젝트의 공통 내용
subprojects {
apply plugin: "java" // 자바 플러그인
// 스프링 관련 플로그인
apply plugin: boot
apply plugin: "io.spring.dependency-management"
apply plugin: "idea"
repositories {
mavenCentral()
}
configurations {
runtimeClasspath {
extendsFrom developmentOnly
}
}
dependencies {
implementation "$boot:spring-boot-starter-security" // 스프링 시큐리티 관련 라이브러리
implementation 'com.fasterxml.jackson.core:jackson-annotations' // json 관련 라이브러리
compileOnly lombok
testCompileOnly lombok
annotationProcessor lombok
testAnnotationProcessor lombok
testImplementation "$boot:spring-boot-starter-test" // 단위 테스트를 위한 라이브러리
}
test {
useJUnitPlatform()
}
}
위 설정 후 comp 패키지의 common-utils 폴더를 만들고, gradle을 refresh한다. 그러면 자동으로 프로젝트가 구성된다.
· server 프로젝트를 구성하자.
server 프로젝트 build.gradle 파일에 아래 설정을 입력하고, gradle refresh한다.
dependencies {
// 웹을 사용하기 위한 라이브러리
implementation("$boot:spring-boot-starter-web")
}
프로젝트가 정상적으로 구성되었는지 확인하기 위해, java 패키지에 스프링부트 애플리케이션 역할을 하는 BasicTestApplication 클래스를 생성한다.
@SpringBootApplication
public class BasicTestApplication {
public static void main(String[] args) {
SpringApplication.run(BasicTestApplication.class, args);
}
}
해당 코드를 실행하여, 성공을 확인한다.
다음으로 테스트가 정상적으로 작동하는지 확인한다. test 패키지에 Test1 클래스를 생성한다.
public class Test1 {
@DisplayName("1. 테스트")
@Test
void test_1() {
assertEquals("test", "test");
}
}
해당 코드를 실행하여, 성공을 확인한다.
지금까지 작성한 server 프로젝트 구조는 다음과 같다.
· 방금 작성한 server 프로젝트에서 comp 프로젝트의 코드를 사용할 수 있도록 설정하자.
server 프로젝트의 build.gradle 파일의 dependencies에 다음 설정을 추가한다.
dependencies {
... 생략 ...
implementation project(":comp-common-utils")
}
스프링 시큐리티란?
댓글