김컴공랩

[스프링부트] Spring 으로 웹 서비스 만들기 - 컨트롤러 생성 1 본문

스프링부트

[스프링부트] Spring 으로 웹 서비스 만들기 - 컨트롤러 생성 1

김컴공 2021. 1. 11. 21:31

헬로월드! 김컴공입니다.

 

이번 포스팅에서는 이전 포스팅에서 생성했던 스프링 프로젝트에서, 클라이언트의 웹 요청에 대응하는 컨트롤러를 생성하도록 하겠습니다. 오늘의 목표로는, 사용자가 "/hello" 라는 GET 요청을 했을 때 서버가 "Hello World!" 라는 문자열을 반환하게끔 만들어 보겠습니다.

 

프로젝트 초기 화면입니다. 왼쪽의 Project Navigator 에서 프로젝트를 열어 프로젝트의 디렉터리 구조를 한번 살펴볼까요?

 

 

 

스프링 프로젝트 구조

대표적인 디렉터리만 살펴보겠습니다. project/src/main 디렉터리가 가장 많이 다루게 될 디렉터리입니다.

 

1. main/java 내에서 컨트롤러, 서비스 클래스들을 생성할 것이고, 데이터베이스와 연동할 때 사용하게 될 모델 또한 이 디렉터리에 생성합니다. 데이터베이스 연동에 관해서는 이후 다른 포스팅에서 꼭 살펴볼 예정이니 우선은 가볍게 이해하고 넘어갑니다.

 

2. main/resources 내에서는 웹 서비스에서 사용되는 리소스들을 저장하는 디렉터리입니다.

  static/ 에는 웹서비스에 사용되는 웹 문서나 이미지 등이 사용되기도 하고 React, Vue 와 같은 프론트엔드 빌드파일이 들어가서 배포되기도 합니다.

  templates/ 에는 thymeleaf 라는 템플릿언어로 만들어진 웹페이지를 저장하는 곳으로, 웹 문서 등이 들어가기 때문에 static 과 비슷한 역할을 합니다. 후에 타임리프를 이용해 웹페이지를 생성해볼 것이기 때문에 이런 디렉터리 구조가 있구나 정도로만 파악하시면 됩니다.

  application.properties 는 서버 설정파일로, 서버가 어떤 포트로 배포되는지, 어떤 데이터베이스와 연동되는지 등에 관한 정보들을 다룹니다. 이 또한 앞으로 자주 다룰 파일입니다.

 

3. pom.xml 에는 Spring 프로젝트에 사용되는 의존성이나 플러그인 등을 주입할 수 있고, 현재 프로젝트의 이름이나 버전이 어떤지 등 프로젝트의 상세정보를 기록해둔 파일입니다. 어떤 새로운 기능을 위해 의존성을 추가하려고할 때, 이 파일에 선언을 하면 됩니다.

 

 

 

컨트롤러 생성

이론을 많이 배워놨으니, 실전도 한번 연습해보겠습니다. Project명Application.java 가 존재하는 디렉터리에 다음과 같이 MainController.java 를 생성하겠습니다.

 

package com.kimce.testbackend;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MainController {
	@GetMapping("/hello")    
    public @ResponseBody String hello() {       
    	return "Hello World!";   
    }
}

사용자(클라이언트)가 웹 서비스를 요청하면, 우리가 개발할 서버는 그에 대한 답을 해야겠죠? 그러한 역할은 컨트롤러가 수행합니다.

위의 컨트롤러는 사용자가 "/hello" 라고 GET 호출을 하면 서버는 "Hello World!" 라는 문자열로 답장을 해주는 겁니다.

 

@Controller - 해당 클래스가 컨트롤러 임을 표현합니다.

@GetMapping("/hello") - 서버가 GET Request 중에서 "/hello" 에 해당하는 요청을 매핑했을 때 다음 함수를 수행한다고 선언합니다.

@ResponseBody - 해당 함수는 리턴 결과가 Thymeleaf 템플릿이 아닌, 문자열로 클라이언트에게 Response 값을 건네줍니다.

 

위 세 가지 Annotation을 이해하고 넘어가셔야 합니다. 그럼 다음 포스팅에서 스프링에 적용해서, 로컬에서 결과를 체크해보도록 하겠습니다.