💡 이 포스트에서는 지금껏 start.spring.io로 프로젝트를 생성했던 것과는 달리 하나하나 직접 설정해본다.
Gradle → Java
GroupId
는 com.book
ArtifactId
는 prac-springboot로 설정
ArtifactId
: 프로젝트 이름
키워드 설명
ext
: "build.gradle에서 사용하는 전역 변수를 설정하겠다"apply plugin: 'io.spring.dependency-management'
: 이 플러그 인은 스프링 부트의 의존성들을 관리해주는 플러그인이라 꼭 추가해야 한다.repositories{}
:
각 라이브러리들을 어떤 원격 저장소에서 받을지 정함jcenter
:
원래mavenCenteral
을 많이 사용해왔지만, 본인이 만든 라이브러리를 업로드하기 위해선 많은 과정이 필요해 그 문제점을 개선해 라이브러리 업로드 과정을 간단히 한 것
buildscript {
ext {
springBootVersion = '2.1.7.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
//plugins {
// id 'java'
//}
group 'com.book'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
testCompileOnly('org.springframework.boot:spring-boot-starter-test')
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
test {
useJUnitPlatform()
}
깃의 원격 저장소 역할을 하는 대표적인 서비스
여기서는 Github를 사용하도록 하겠고 .idea 디렉토리는 커밋하지 않는다.
이것은 인텔리제이에서 프로젝트 실행시 자동으로 생성되는 파일이라 굳이 올릴 필요는 없다.
이렇게 커밋 대상에서 제외시키기 위해서는 .gitignore을 이용한다.
이 플러그인은 파일 위치 자동완성, 이그노어 처리 여부 확인, 다양한 이그노어 파일 지원을 제공한다.
⚠️ 맥에서는
shift+command+A
로 Action 검색창을 여는데 이때 노란 터미널 창이 켜진다면 환경설정-키보드에서해당 박스를 체크 해제 해주면 된다.
ignore
를 찾아 설치 후 적용해주면 플러그인 설정 끝
그리고 이렇게 gitignore 파일 만들어 아래와 같이 작성해주기
.gradle
.idea
여기까지 기본 인텔리제이, 깃허브 설정을 완료했다.
코드는 [🔗Github]를 참고
우선 TDD와 단위 테스트(Unit test)는 다른 개념이다.
TDD
: 테스트가 주도하는 개발
즉, 테스트 코드를 먼저 작성하고, 테스트가 통과하는 프로덕션 코드를 작성하고, 테스트가 통과하면 프로덕션 코드를 리팩토링하는 과정이다.
단위 테스트는 TDD의 첫번째 과정이다.
단위 테스트의 장점은 다음과 같다.
우선 src/main/java에 새로운 패키지를 생성한다.
⚠️ 일반적으로 패키지명은 웹 사이트 주소의 역순
그 패키지에 Application.java
를 생성해 다음과 같이 작성한다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
이 클래스가 이제 앞으로 만들 프로젝트의 메인 클래스
@SpringBootApplication
: 스프링 부트의 자동 설정, 스프링 Bean 읽기/생성
특히, 이 어노테이션이 있는 위치부터 설정을 읽어들이기 때문에 이 클래스는 항상 프로젝트의 최상단에 위치해야 한다.SpringApplication.run
: 내장 WAS 실행
(스프링부트에서는 언제 어디서나 같은 환경에서 스프링부트를 배포하기 위해 내장 WAS 사용을 권장)
main/java/book/springboot/에 컨트롤러와 관련된 클래스들을 담을 web 패키지 생성
코드는 [🔗깃허브]에서 확인
@RestController
: JSON으로 반환하는 컨트롤러임
(각 메소드마다@ResponseBody
어노테이션을 이 어노테이션 한 방으로 해결)@GetMapping
: HTTP Method GET요청 API
main에서와 같이 test도 패키지를 아래와 같이 생성해주기
이 패키지에 /web/HelloControllerTest.java
생성
코드는 [🔗깃허브]에서 확인
설명
@Runwith(SpringRunner.class)
: 테스트를 진행할 때 JUnit에 내장된 실행자 외 다른 실행자를 실행시킴.
즉, 여기서는 SpringRunner라는 스프링 실행자 사용. (스프링부트 테스트와 JUnit 사이 연결자 역할)@WebMvcTest
: 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션
➡️ @Controller, @ControllerAdvice는 사용 가능
@Service, @Component, @Repository는 사용 불가@Autowired
: Bean 주입@private MockMvc mvc
: 웹 API를 테스트할 때 사용
스프링 MVC 테스트의 시작점으로 GET, POST 등 API 테스트 가능mvc.perform(get("/hello"))
: MockMvc를 통해 /hello 이 주소로 GET 요청andExpect(status().isOk())
: mvc.perform의 결과를 검증
➡️ 응답이 200인지andExpect(content().string(hello))
: mvc.perform의 결과를 검증
➡️ 응답이 hello인지
아, 테스트가 엄청 늦게 돌아간다면 아래와 같이 설정을 변경해주기
성공!
이 글은 이동욱님의 <스프링 부트와 AWS로 혼자 구현하는 웹 서비스> 를 보고 작성한 글입니다.