Toy Project - Server 초기 설정

JJStone·2022년 10월 25일
0

Toy Project

목록 보기
2/5
post-thumbnail

Server 초기 설정

1. 프로젝트 생성

  1. File > New > Project
  2. Gradle 선택
  3. OpenJDK11을 사용한다.
  4. Additional Libraties and Frameworks는 Java만 체크하고 다음으로 넘어간 뒤 프로젝트 이름을 지정하고 생성
  5. 생성 완료 화면

2. Spring Boot Gradle 설정

2-1. Gradle 설정

  • build.gradle 최상단에 다음 추가
buildscript {
    ext {
        springBootVersion = '2.1.7.RELEASE' // build.gradle에 전역변수로 springBootVersion을 추가함
    }
    repositories {
        mavenCentral() // 플러그인을 받을 레포지토리 지장
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") // 이 스크립트의 경우 플러그인으로 2.1.7.RELEASE를 사용한다는 의미임
    }
}
  • build.gradle에 기존에 있던 plugins를 지우고 다음 추가
// 자바와 스프링 부트 관련한 필수 플러그인들
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management' // 스프링 의존성 관리 플러그인
  • build.gradle에 있는 repositories를 다음과 같이 수정
// 라이브러리(종속성)을 어디서 받을것인가?
repositories {
    mavenCentral()
    jcenter()
}
  • build.gradle에 있는 dependencies에 다음을 추가
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web' // spring boot web 라이브러리
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}
  • 버전을 명시하지 않는 이유는 그래야지 "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"버전을 따라감

  • 최종 build.gradle

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'

group 'com.startup'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

test {
    useJUnitPlatform()
}

2-2. Lombok 설정

  • File > Settings > annotation 검색

  • Enable annotation processing 을 체크하고 설정 저장

3. main class 생성

  1. com.startup 패키지 생성
  2. 패키지 안에 Application 클래스를 생성한 뒤 아래 코드 생성
package com.startup;

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);
    }
}

4. Test Controller 생성

  1. com.startup.controller 패키지 생성
  2. TestController class 생성
  3. 아래 코드 삽입
package com.startup.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping("/") // http 주소가 "/" 로 들어오면 
    public String test(){
        return "Hello world"; // 해당 String 데이터를 Response로 넘겨줌
    }
}

5. Intellj Configuration

  • 우측 상단의 Edit Configuration 클릭
  • 아래와 같이 설정

6. Spring boot 실행

  • 정상적으로 실행이 되는 모습을 확인할 수 있다.
  • http://localhost:8080/ 로 접속하면 다음과 같은 페이지를 확인할 수 있다.

7. Test Controller 작성

package com.startup.controller;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@RunWith(SpringRunner.class) // Spring boot와 Junit 사이의 연결자. Junit 실행시 SpringRunner라는 스프링 실행자 사용
@WebMvcTest(controllers = TestController.class) // Web (Spring MVC)에만 집중할 수 있는 어노테이션, Controller, ControllerAdvice 사용 가능.
public class TestControllerTest {

    @Autowired // Java Bean 주입
    private MockMvc mvc; // 웹 API 테스트시 사용, HTTP, GET, POST 등에 대해 테스트 가능

    @Test
    public void test1() throws Exception {
        MvcResult result =  mvc.perform(get("/")) // get 요청을 / 에 보내라
                .andExpect(status().isOk()) // response status를 검증 ok 가 아닐시 테스트 실패
                .andExpect(content().string("Hello world")) // response body 검증, return 되는 값이 Hello world 이면 테스트 성공
                .andReturn();

        System.out.println(result.getResponse().getContentAsString()); // response body를 꺼내와 string으로 보여줌
    }
}

출력 [테스트는 성공한다.]

...
Hello world
...
profile
java, scala 개발자 입니다.

0개의 댓글