Spring을 처음 접해본 사람들이 공통적으로 느끼는 막막함은 아마 최초에 아무것도 없을 때 어떻게 초기 Project를 시작하느냐 일 것이다. 나 또한 예전에 그랬던 기억이 있어서,

이걸 정리하거나 해두면 좋겠다고 항상 생각했으나 생각만했고...-_-

이번 기회에 글로 적어두고 github에 따로 template 형태를 유지하여 향후 필요시 git을 통해 해당 틀만 가져가도록 만들어두면 좋겠다고 생각이 들었다.

 

이 글은 Eclipse STS에서 Spring-boot를 최초로 생성하고 기본 API를 추가 하는 방법을 적어보겠다.

 

0. 개발 환경 설정

Eclipse를 통한 개발환경 구축은 jdk 설치, Eclipse STS 설치, 환경설정 등 작업이 필요하지만, 이 글의 성격과 맞지 않으므로 따로 적지는 않고, 추후에 다른 글로 추가 할 예정

 

1. Project 생성

File > New > Project... > Spring Boot > Spring Starter Project 선택

2. 기본 Project 설정

Gradle 환경을 이용할 것이고, java8을 활용 그 외 버전이나 package명 등 입력

Project 생성 이후에 build.gradle 파일에서 dependency를 추가해도 되지만, STS에서 미리 선택해서 추가 할 수 있다.

아래 드롭다운 메뉴들을 보면 생각보다 다양한 선택을 할수가 있으니, 적절히 필요한 dependency를 추가할 수 있다.

여기서는 spring-boot 시작과 간단한 API 만들기가 목적이므로 Spring Web을 선택했다.

그렇게 Finish 버튼을 누르면 자동으로 기초적인 spring-boot project가 생성된다.

 

초기 파일 구조는 아래와 같이 매우 간단... 

 

초기 build.gradle 파일은 아래와 같을 것이다.

plugins {
    id 'org.springframework.boot' version '2.1.8.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'java'
}

group = 'org.ijeee.spring'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

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

spring-boot-starter-web 이 자동으로 dependency에 추가 된 것 확인 가능

 

3. gradle refresh

이제 본격적으로 코드를 작성해야 하지만 잠깐 시작하기 전에 gradle refresh를 한번 해준다.

refresh를 통해 local repository에 dependency가 있는 jar들을 미리 다운받아서 향후 빨간줄(?!)의 귀찮음과 자동완성의 편리함을 도모하자.

4. Controller 추가

controller package를 추가 하고 실제 API를 정의할 Controller class를 추가 한다.

향후 API의 목적에 따라서 Controller class를 분류하여 다수의 class를 생성하는 것도 가능하다.

 

5. API 정의

package org.ijeee.spring.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @RequestMapping(value="/health", method=RequestMethod.GET)
    public ResponseEntity<?> health() {
        return ResponseEntity.ok().build();
    }
}

ApiController는 @RestController annotation을 이용하여 spring framework에 Controller임을 명시해준다.

 

Class에 실제 호출되는 각 API 별로 public method를 정의 해주고

@RequestMapping annotation을 통해 해당 API의 uri와 HTTP method를 지정한다.

 

위의 예시는 가장 간단한 health check에 활용할 수 있는 method 이다.

 

 

위 내용을 응용해서 CRUD에 해당하는 method를 간단히 작성해 보면 아래와 같다.

package org.ijeee.spring.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    private List value = new ArrayList ();
    @RequestMapping(value="/health", method=RequestMethod.GET)
    public ResponseEntity<?> health() {
        return ResponseEntity.ok().build();
    }

    @RequestMapping(value="/value/index/{index}", method=RequestMethod.GET)
    public ResponseEntity getValue(@PathVariable Integer index) {
        return new ResponseEntity(value.get(index), HttpStatus.OK);
    }

    @RequestMapping(value="/value/elem/{element}", method=RequestMethod.PUT)
    public ResponseEntity<?> postValue(@PathVariable Integer element) {
        this.value.add(element);
        return ResponseEntity.ok().build();
    }

    @RequestMapping(value="/value/index/{index}/elem/{element}", method=RequestMethod.POST)
    public ResponseEntity<?> postValue(@PathVariable Integer index, @PathVariable Integer element) {
        this.value.add(index, element);
        return ResponseEntity.ok().build();
    }
	
    @RequestMapping(value="/value/index/{index}", method=RequestMethod.DELETE)
    public ResponseEntity<?> deleteValue(@PathVariable int index) {
        this.value.remove(index);
        return ResponseEntity.ok().build();
    }
}

 

로직은 대충 적어서 의미가 없고 @RequestMapping을 이용하여 method를 정의하고 @PathVariable을 통해 RESTful한 uri를 만들 수 있음을 파악하면 기본적인 API 정의는 완료~!

+ Recent posts