Application configuration, print `Hello World!`

GEONNY·2024년 7월 15일
0

Building-API

목록 보기
3/28
post-thumbnail

Spring boot application 의 setting 은 resources 경로의 application.properties 파일에서 합니다. Spring application 에서는 특정 경로의 .xml 파일로 설정하던 작업들이 .properties 파일 내에서 거의 모두 가능하게 되었죠.

📌application.properties

src/main/resources 경로의 application.properties 파일을 열어봅시다.

처음에는 spring.application.name 하나의 설정만 있습니다.
application 의 설정을 할수 있는 확장자에는 .properties 말고도 .yml 확장자도 있는데요,
우선 application.properties 의 확장자를 .yml 로 변경해 봅니다.

📌application.yml

rename 단축키는 Shift + f6 입니다. 변경 후에는 기존의 application name 을 아래와 같이 바꿔줍니다.

차이가 보이시나요? 저는 개인적으로 보다 계층적이고 반복구분이 없는 .yml 을 선호하는 편 입니다.

몇가지 설정을 추가해보겠습니다.

spring:
  application:
    name: api
  profiles:
    active: dev
server:
  port: 13713
  servlet:
    context-path: /my-api
    encoding:
      charset: utf-8
      enabled: true
      force: true

---
spring:
  config:
    activate:
      on-profile: dev

---
spring:
  config:
    activate:
      on-profile: prod

서버의 포트와 contex-path, encoding 설정을 추가했고, profiles 를 구분했습니다.
.yml 에서 '---' 를 사용해서 파일을 구분할 수 있습니다.
기본적인 설정은 가장 위의 설정 내용에서 참고하고 profiles.active 설정으로 개발 환경에 따라 다른 파일('---'로 구분된)의 설정내용을 불러오게 구성했습니다.

프로젝트를 실행(Shift + f10) 해보면 설정 내용들이 반영된 것을 확인할 수 있습니다.

이제 실제 요청에 의한 응답을 처리하는 Controller 를 작성해보겠습니다.

📌Hello world!

main package 에 domain/greeting 이라는 package 를 추가하고 GreetingController 를 추가합니다.

package com.geonlee.api.domin.greeting;

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

/**
 * @author GEONLEE
 * @since 2024-07-15
 */
@RestController
public class GreetingController {

    @GetMapping(value = "/greeting", produces = MediaType.TEXT_PLAIN_VALUE)
    public String greeting() {
        return "Hello world!";
    }
}

단순하게 request 가 들어오면 "Hello world!" 라는 텍스트를 리턴하는 메서드 입니다. 프로젝트를 실행하고 'http://localhost:13713/my-api/greeting' 주소를 브라우저에서 요청하면 'Hello world!' 가 출력됩니다.

브라우저에서 F12 를 눌러 개발 도구를 보면 설정한 내용에 맞게 데이터가 전달 된 것을 확인 할 수 있습니다.😄

📚참고

📕@Controller vs @RestController

Controller annotation 은 예전 MVC 모델에서 View를 반환하기 위해 사용했었습니다. 물론 데이터를 반환할 때는 @ResponseBody 를 붙여 사용했습니다. 하지만 API 에서는 View 를 제외한 데이터만 반환하기 때문에(ViewResolver X) Controller + ResponseBody 인 @RestController 를 사용합니다.

📙HTTP Methods

대표적인 HTTP Methods 에는 GET, POST, PUT, DELETE 이 있습니다. 메서드의 용도에 따라 구분해 사용해야 하지만, 요청에 의한 행위가 유추되면 보안상의 이슈가 발생할 수 있기 때문에 현업에서는 보통 GET, POST Method 만 사용합니다.

📒RequestMapping

// Use Class, Method Level
@RequestMapping(value = "/greeting", method = RequestMethod.GET)
// Use Method Level
@GetMapping("/greeting")

@RequestMapping 은 request 와 method 를 매핑하기 위해 사용합니다. method 속성 설정으로 HTTP Method를 설정할 수 있지만, @RestController 사용 시에는 @GetMapping, @PostMapping 등을 사용합니다. class level 에서 매핑을 해야 할 경우(URI prefix 가 필요한 경우)에는 @RequestMapping을 사용하기도 합니다.

📗consumes, produces

RequestMapping 의 속성으로 사용되는 comsumes, produces 는 request, response header 의 Content-type 제약을 주기 위해 사용됩니다. 예를들어 아래와 같이 consumes 를 추가할 경우 요청 데이터가 Json type 이 아닐 경우 415 Unsupported Media Type 오류가 발생하게 됩니다.

    @GetMapping(value = "/greeting", consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.TEXT_PLAIN_VALUE)
    public String greeting(@RequestBody TestRecord parameter) {
        return "Hello world!";
    }

📘@RequestBody @ResponseBody

두 어노테이션은 HTTP request/response body의 데이터를 처리할 때 사용됩니다. 보통 Json message 를 Java 객체로, 또는 그 반대의 경우 데이터를 전달할 때 사용됩니다. 직렬화(Serialization) 라는 용어를 사용하고, 내부적으로는 HttpMessageConverter 의 구현체가 동작하여 해당 기능을 수행합니다.

profile
Back-end developer

0개의 댓글