본문 바로가기
공부 기록

[스프링 부트로 게시판 만들기] 01. 프로젝트 생성

by 매트(Mat) 2021. 7. 18.

 

 

프로젝트 생성

  • 먼저 저의 개발 환경이 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)는 사용해보질 못했습니다.
tempsnip
  • 스프링 부트를 생성하게 되면 .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

댓글