메뉴

문서정보

목차

ToDo List

ToDo 리스트를 관리하는 애플리케이션을 만들어보려고 한다. Java는 문외한이니 많은 걸 기대하지는 말자. Intellij도 익숙하지 않은 몸이다. 공부 과정의 기록으로 보면 되겠다.

개발 환경

Spring Initializr

Spring Initializr 사이트에서 Gradle Project 를 만들었다.

 Gradle initializr

Generate 버튼을 누르면 프로젝트 파일을 다운로드 한다. 작업 디렉토리는 $HOME/workspace 다.
# mv Todo.zip ~/workspace/
# cd ~/workspace 
# unzip Todo.zip

아래와 같은 프로젝트 구조가 만들어졌다.
.
├── HELP.md
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── co
    │   │       └── kr
    │   │           └── joinc
    │   │               └── Todo
    │   │                   └── TodoApplication.java
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    └── test
        └── java
            └── co
                └── kr
                    └── joinc
                        └── Todo
                            └── TodoApplicationTests.java
build.gradle 내용이다.
plugins {
    id 'org.springframework.boot' version '2.3.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'co.kr.joinc'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}
크게 이해하기 어려운 부분은 없는 것 같다. 생소한 부분만 따로 찾아봤다.

main 메서드

main 메서드다. 파일이름은 TodoApplication.java 다.
package co.kr.joinc.Todo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TodoApplication {

	public static void main(String[] args) {
		SpringApplication.run(TodoApplication.class, args);
	}
}
@springBootApplication 은 @Configuration, @EnableAutoConfiguration, @ComponentScan 어노테이션을 사용하는 것과 같다. @Configuration 어노테이션은 개발자가 만든 클래스를 Bean 으로 생성 할 때 Singleton으로 한번만 생성되도록 한다. @Component는 Bean을 만들 때 new로 생성하듯이 생성한다. @ComponentScan은 @Component와 @Configuration 어노테이션이 붙은 class를 스캔해서 Bean으로 등록한다.

SpringApplication.run 을 이용해서 TodoApplication 을 실행한다.

최초 컨트롤러를 만들어보자.

controller 패키지를 만들고 여기에 controller를 배치하기로 했다. 첫번째 만들 컨트롤러는 /ping 으로 애플리케이션이 작동중인지 테스트하는 목적으로 사용한다. co.kr.joinc.Todo.controller.ping 패키지를 만들었다. 여기에 PingController를 만들었다.
package co.kr.joinc.Todo.controller.ping;

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

@RestController
public class PingController {
    @GetMapping("/ping")
    public String Ping() {
        return "pong";
    }
}
GET /ping을 호출하면 "pong"를 리턴한다.

패키지 구성은 아래와 같다.
co.kr.joinc.Todo.
                ├── TodoApplication.java
                └── controller
                    ├── README.md
                    └── ping
                        └── PingController.java

애플리케이션을 빌드하고 테스트했다.
# curl -XGET localhost:8080/ping       
pong

정리

2-3년간 Go 언어를 이용해서 API를 개발했떤 경험에 비추어서 spring 사용기를 정리한다. 이건 어디까지나 첫 인상이다. 어쨋든 하기로 했으니, 하긴 해야 할 것 같다. 다음 번에 할 일은 아래와 같다. Spring Boot REST API 서버 만들기 2 - JPA »