프로젝트 생성
- 먼저 저의 개발 환경이 intellij Community(무료버전)라는 IDE를 이용할 것입니다.
- 프로젝트 생성을 https://start.spring.io/에서 진행하시면 됩니다.
- 아래 사진처럼 구성해주시면 됩니다.
- 저는 Thymeleaf이라는 템플릿 엔진을 사용할 것이기 때문에 패키징은 JAR 패키징을 선택했습니다. 다만 JSP를 사용하신다면 WAR 패키징을 선택해야 합니다. (JSP는 Thymeleaf와는 달리 서블릿(Tomcat) 기반이기 때문에 꼭 WAR로 선택해야 합니다.)
깃(Git) 연동
- Ctrl + Shift + A 키를 눌러
share
를 검색 -> Share Project On GitHub 선택
- 자신의 깃허브 아이디와 비밀번호 정보를 입력하고 Share 버튼을 누르면 연동이 끝납니다. (정말 편하죠!)
- 앞으로는 사이드바에 Commit을 누르고
Commit - Push
를 진행하시면 됩니다. - 참고로 저는 협업 경험이 없어서
PR(Pull Request)
는 사용해보질 못했습니다.
- 스프링 부트를 생성하게 되면
.gitignore
파일이 자동으로 생성되기 때문에 따로 생성할 필요가 없습니다. - 혹시 모르니 Marketplace에서
.ignore
를 설치해주세요.
build.gradle
plugins {
id 'org.springframework.boot' version '2.4.8'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.azurealstn'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
jcenter() //추가
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
- io.spring.dependency-management : 이 플러그인은 스프링 부트의 의존성들을 관리해주기 때문에 반드시 있어야 합니다.
- repositories : 다양한 의존성들을 어떤 원격 저장소에서 받을지를 결정합니다.
- mavenCentral : 많이 사용되는 저장소이지만, 최근에는 jcenter를 많이 사용한다고 합니다.
- 저도 이 jcenter()를 추가해주겠습니다.
- org.springframework.boot : 여기서 스프링 부트의 버전이 명시되는데, *dependencies {} *에서 따로 의존성 버전들을 명시하지 않은 이유는
org.springframework.boot
의 스프링 부트 버전을 따라가기 때문입니다.
Main Class
package com.azurealstn.blogproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BlogProjectApplication {
public static void main(String[] args) {
SpringApplication.run(BlogProjectApplication.class, args);
}
}
- @SpringBootApplication 애노테이션이 붙은 클래스가 메인 클래스입니다.
- @SpringBootApplication으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정됩니다.
- @SpringBootApplication이 있는 위치부터 설정을 읽기 때문에 이 클래스는 항상 프로젝트 최상단에 위치해야 합니다.
SpringApplication.run
로 내장 WAS를 실행합니다. (외장 WAS를 둘 수 있지만 스프링 부트에서는 내장 WAS를 권장합니다. 굳이 외장 WAS로 사용할 필요도 없구요!)
프로젝트 시작 테스트
- controller 패키지 생성 -> HelloController 생성
HelloController 클래스
package com.azurealstn.blogproject.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello Spring Boot!";
}
}
- @RestController : JSON(데이터)을 반환하는 컨트롤러
- @GetMapping : HTTP Method인 GET의 요청을 받을 수 있는 애노테이션
테스트 코드 작성
- test 폴더에서 controller 패키지 생성 -> HelloControllerTest 클래스 생성
HelloControllerTest 클래스
package com.azurealstn.blogproject.controller;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello_Test() throws Exception {
String hello = "hello Spring Boot!";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
- @ExtendWith(SpringExtension.class) : JUnit4는 @RunWith(SpringRunner.class)를 쓰지만 JUnit5부터는 @ExtendWith(SpringExtension.class)로 써야합니다. 이는 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
- @WebMvcTest : Web에 집중할 수 있는 어노테이션
- @Autowired : 스프링이 관리하는 빈을 주입 받습니다.
- MockMvc : 웹 API를 테스트할 때 사용합니다.
- .andExpect(status().isOk()) : HTTP Header의 상태코드
- .andExpect(content().string(hello)) : mvc.perform의 결과를 검증
다음으로
- 테스트 코드까지 정상 동작한다면 일단은 프로젝트가 잘 작동한다는 뜻입니다.
- 다음 시간에는 Lombok 설정에 대해 알아보겠습니다.
References
'공부 기록' 카테고리의 다른 글
[스프링 부트로 게시판 만들기] 03. 데이터 베이스 설정 및 User 테이블 생성 (19) | 2021.07.18 |
---|---|
[스프링 부트로 게시판 만들기] 02. Lombok(롬복) 설정 (0) | 2021.07.18 |
[스프링 부트로 게시판 만들기] 00. 앞으로 만들 프로젝트 (0) | 2021.07.18 |
서블릿(Servlet) 간단 요약 (0) | 2021.05.20 |
GET 요청과 POST 요청 [간단 요약] (0) | 2021.05.20 |
댓글