[SpringBoot] (1) 스프링부트 프로젝트와 Gradle 연동하기 + 테스트 코드 작성하기
✔️ 프로젝트 생성
💡 이 포스트에서는 지금껏 start.spring.io로 프로젝트를 생성했던 것과는 달리 하나하나 직접 설정해본다.
해당 프로젝트는
💡 이 포스트에서는 지금껏 start.spring.io로 프로젝트를 생성했던 것과는 달리 하나하나 직접 설정해본다.
Gradle → Java
GroupId
는 com.book
ArtifactId
는 prac-springboot로 설정
ArtifactId
: 프로젝트 이름
build.gradle
키워드 설명
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
깃의 원격 저장소 역할을 하는 대표적인 서비스
- Github
- Gitlab
여기서는 Github를 사용하도록 하겠고 .idea 디렉토리는 커밋하지 않는다.
이것은 인텔리제이에서 프로젝트 실행시 자동으로 생성되는 파일이라 굳이 올릴 필요는 없다.
이렇게 커밋 대상에서 제외시키기 위해서는 .gitignore을 이용한다.
이 플러그인은 파일 위치 자동완성, 이그노어 처리 여부 확인, 다양한 이그노어 파일 지원을 제공한다.
ignore 플러그인
⚠️ 맥에서는
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 사용을 권장)
Controller
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로 혼자 구현하는 웹 서비스> 를 보고 작성한 글입니다.
Author And Source
이 문제에 관하여([SpringBoot] (1) 스프링부트 프로젝트와 Gradle 연동하기 + 테스트 코드 작성하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dbsrud11/SpringBoot저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)