PathVariable 간단한 예제

|

PathVariable 간단한 예제

샘플 프로젝트를 생성하고 다음 파일들을 생성합니다.


SimpleService.kt

import org.springframework.stereotype.Service

@Service
class SimpleService {
    fun hello(name: String): String {
        return "hello $name"
    }
}

위 클래스는 아직 큰 의미는 없고, 단순 메소드를 제공하는 클래스입니다.


SimpleController.kt

import com.snowdeer.board.service.SimpleService
import org.springframework.stereotype.Controller
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.ResponseBody

@Controller
class SimpleController(val simpleService: SimpleService) {

    @RequestMapping(value = ["/user/{name}"], method = arrayOf(RequestMethod.GET))
    @ResponseBody
    fun hello(@PathVariable name: String): String {
        return simpleService.hello(name)
    }
}

위와 같이 코드를 만들면, /user/name에 해당하는 URL의 name 부분을 경로 파라메터로 받을 수 있습니다.

H2 Database 사용하기

|

H2 Database

H2 데이터베이스는 자바 기반의 RDBMS(Relational DataBase Management System)입니다. 용량이 적으며, 브라우저 기반의 콘솔 등을 지원하여 장점이 많습니다. Spring Boot에서 별도 데이터베이스를 설치하지 않고 바로 사용할 수 있는 점도 장점입니다.

Spring Initializer 웹사이트에서 의존성(Dependencies) 부분에서 ‘H2 Database’ 항목과 ‘Spring Data JPA’ 항목을 선택하고 프로젝트를 생성해주면 자동으로 build.gradle에 반영이 됩니다.


application.properties

그리고 application.properties 파일에 속성값을 지정해줘야 합니다. 여기서는 application.yaml 파일을 이용해서 설정하도록 하겠습니다. 기존의 application.properties 파일을 지우고 application.yaml 파일을 생성하고 아래의 내용을 작성합니다.

server:
  port: 8000

spring:
  h2:
    console:
      enabled: true
      path: /h2_db

  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:file:./h2_db;AUTO_SERVER=TRUE
    username: snowdeer
    password: 1234

url 항목에서 jdbc:h2:file는 데이터베이스를 파일에 저장하겠다는 의미이며, ./h2_db는 파일 경로입니다.

위와 같이 설정한 다음 http://localhost:8000 주소에 접속하면 H2 Console 웹페이지가 열립니다.

JDBC URL 항목이 jdbc:h2:~/test으로 되어 있을텐데, 위에서 yaml 파일에 작성한 jdbc:h2:file:./h2_db 값을 넣어줘야 합니다.


데이터베이스 연결하기

Hikari CP

Spring Boot 2.0.0 M2 버전부터 기본적으로 사용하는 커넥션 풀(Connection Pool)이 Tomcat에서 HikariCP로 변경되었습니다.

application.yaml에 HikariCP 연결 정보를 반영해서 다음과 같이 수정합니다.

server:
  port: 8000

spring:
  h2:
    console:
      enabled: true
      path: /h2_db

  datasource:
    hikari:
      driver-class-name: org.h2.Driver
      jdbc-url: jdbc:h2:file:./h2_db
      username: snowdeer
      password: 1234
      connection-test-query: SELECT 1


DatabasConfiguration.kt

데이터베이스 사용을 위한 기본적인 설정을 합니다.

import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.PropertySource
import javax.sql.DataSource

@Configuration
@PropertySource("classpath:application.yaml")
class DatabaseConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.hikari")
    fun hikariConfig(): HikariConfig {
        return HikariConfig()
    }
    
    @Bean
    @Throws(Exception::class)
    fun dataSource(): DataSource {
        val dataSource = HikariDataSource(hikariConfig())
        println(dataSource.toString())
        return dataSource
    }
}

지금까지 문제없이 작성되었다면 빌드 및 실행이 가능할 것입니다.

Hello World 프로젝트 생성하기

|

프로젝트 생성하기

프로젝트 생성은 Spring Initializer 웹사이트를 이용해서 생성할 수 있습니다. 또는 CLI(Command line interface)를 이용해서도 동일한 결과를 얻을 수 있습니다.


start.spring.io 사이트 이용

해당 페이지에 접속해서 다음과 같이 항목을 선택합니다.

  • Gradle Project
  • Kotlin
  • 2.2.1
  • Group: com.snowdeer
  • Artifact: hello
  • Dependencies: Spring Web

그리고 Generate 버튼을 누르면 hello.zip 파일이 생성될 것입니다. 원하는 경로에 압축을 풉니다.


CLI를 이용한 경우

spring init \
--dependencies=web \
--groupId=com.snowdeer \
--artifactId=hello \
--name="Hello SnowDeer" \
--package-name=com.snowdeer.hello \
--language=kotlin \
--version=2.2.0 \
--build gradle \
hello

위 명령어를 이용해서 빈 프로젝트를 생성할 수 있습니다.


curl을 이용해서 다운로드하는 방법

그 외에도 curl 명령어를 이용해서 가져오는 방법이 있는데, 3가지 전부 start.spring.io로부터 가져오는 방법이라 동일합니다. [여기(https://spring.io/guides/tutorials/spring-boot-kotlin/)를 참고하세요.


실행 확인

해당 프로젝트가 있는 디렉토리로 이동하여

gradle bootRun

명령을 내리면 기본 웹사이트가 구동이 됩니다. http://localhost:8080으로 접속해서 확인을 해봅니다. ‘Whitelabel Error Page’ 페이지가 뜨면 정상 동작하고 있는 것입니다.


Hello World 요청 페이지 구현하기

이제 해당 프로젝트의 src/main/kotlin/com/snowdeer/hello 디렉토리로 이동합니다. 아마 HelloSnowDeerApplication.kt 파일은 자동으로 만들어졌을 것입니다. 같은 디렉토리에 HelloController.kt 파일을 생성하고 아래 내용을 입력합니다.

package com.snowdeer.hello

import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.RequestMapping

@RestController
class HelloController {
  
 	@RequestMapping("/")
 	fun hello() : String {
 		return "Hello, SnowDeer"
 	}
}

여기까지 구현한 다음, 해당 프로젝트를 새로 실행합니다. 그리고 http://localhost:8080에 접속하면 위에서 구현한 페이지가 정상적으로 출력되는 것을 확인할 수 있습니다.

  • @RestController: 클래스 앞에 붙으며, 해당 클래스가 REST 컨트롤러 기능을 수행하도록 함
  • @RequestMapping: 메소드 앞에 붙으며, 해당 함수를 실행할 수 있는 주소를 설정함


컴포넌트 스캔

위에서 HelloController 클래스를 생성하고 그 뒤로 아무런 작업을 안해도 어플리케이션이 컨트롤러를 찾고 요청을 처리하는 것을 볼 수 있습니다. 스프링 부트 어플리케이션이 시작될 때, 어플리케이션 컨텍스트 클래스 아래의 모든 클래스와 패키지를 반복적으로 스캔하고, 어떤 클래스라고 하더라도 컴포넌트 어노테이션만 추가하면 클래스의 인스턴스를 생성하고 스프링 부트 어플리케이션 컨텍스트에 추가합니다. 이러한 기능을 컴포넌트 스캔(Component Scan)이라고 합니다.

좀 더 정확히 말하면 컴포넌트 스캔은 @Component 어노테이션이 붙은 모든 클래스를 스캔합니다. 위에서 @RestController 어노테이션을 사용했고, 그 외에도 보통 @Controller 어노테이션을 사용하는데 선언부로 가면 다음과 같이 @Component 어노테이션이 포함되어 있는 것을 확인할 수 있습니다.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

	@AliasFor(annotation = Component.class)
	String value() default "";

}

CLI 이용해서 Spring Boot 프로젝트 생성하는 방법

|

스프링 부트 프로젝트 시작하기

다음 명령어를 이용해서 간단한 스프링 부트 프로젝트를 생성할 수 있습니다.

$ spring init

Using service at https://start.spring.io
Content saved to 'demo.zip'

명령어 실행 후 디렉토리를 보면 demo.zip 파일이 있으며 이 안에는 maven 기반의 pom.xml 빌드 명세가 들어 있는 기본 프로젝트가 들어 있습니다.

프로젝트 구조는 다음과 같습니다.

.
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── demo
    │   │               └── DemoApplication.java
    │   └── resources
    │       └── application.properties
    └── test
        └── java
            └── com
                └── example
                    └── demo
                        └── DemoApplicationTests.java

12 directories, 7 files


빌드 옵션 추가하기

다음과 같이 spring init 명령어 다음에 파라메터를 이용하여 커스텀 옵션을 추가할 수 있습니다.

$ spring init --d web,jpa,security --build gradle

Using service at https://start.spring.io
Content saved to 'demo.zip'

빌드 타입을 gradle로 설정했으며, 데이터 영속성으로 JPA를 사용하고, Spring Security로 보안을 적용하는 예제입니다.

또한 demo.zip 압축 파일이 아니라 snowdeer라는 이름의 디렉토리에 war 형태의 프로젝트를 생성하려면 다음과 같은 명령어를 사용합니다.

spring init -dweb,jpa,security --build gradle -p war snowdeer

Using service at https://start.spring.io
Project extracted to '/Users/snowdeer/Workspace/SpringBoot/snowdeer'

이 때 디렉토리 구조는 다음과 같습니다. gradle 기반이라 안드로이드 개발자들에겐 더 친숙한 구조 같습니다.

.
├── HELP.md
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── snowdeer
    │   │               ├── DemoApplication.java
    │   │               └── ServletInitializer.java
    │   └── resources
    │       ├── application.properties
    │       ├── static
    │       └── templates
    └── test
        └── java
            └── com
                └── example
                    └── snowdeer
                        └── DemoApplicationTests.java

16 directories, 11 files


도움말

그 외에 spring help init 명령어나 spring init --list 명령어를 이용해서 도움말이나 지원하는 서비스 리스트를 확인할 수 있습니다.


실행

실행은 터미널에서 다음 명령어를 입력하면 됩니다.

gradle bootRun

그런 다음 웹 브라우저에서 http://127.0.0.1:8080를 입력하면 페이지가 하나 출력이 될 것입니다.

만약 포트 번호를 바꾸려면 application.properties 파일을 수정하면 됩니다. 이 파일은 src/main/resources 디렉토리 아래에 있으며 기본적으로 아무 것도 적혀 있지 않은 빈 파일입니다.

아래와 같이 속성 값을 수정해서 기본 포트 번호를 8080에서 8000으로 변경할 수도 있습니다.

server.port=8000

Spring Boot 설치(Mac OS)

|

Spring Boot 설치 방법(Mac OS 기준)

여기서는 brew를 이용해서 설치하는 방법을 포스팅 합니다.

brew tap pivotal/tap

brew install springboot


설치 후 다음 명령으로 스프링 부트 버전을 확인할 수 있습니다.

$ spring --version

Spring CLI v2.2.1.RELEASE

그리고 gradle도 다음과 같이 설치할 수 있습니다.

brew install gradle