본문 바로가기
Spring Boot

SpringBoot를 활용한 Rest api 만들기(2) - Hello, World 찍기

by ZIAHO 2023. 2. 24.

이번시간에는 앞선 시간에 생성한 프로젝트에서 Hello, World를 찍어보도록 하겠습니다.

* java 코드는 src/main/java 하위에 package를 생성하고 진행합니다.


package?

java 라이브러리들 간의 충돌을 막기 위해 class들을 구분하기 위한 방법입니다.

 

예를들면

org.ziaho.test1.Test.java와 org.ziaho.test2.Test.java는

class이름(Test.java)은 같지만 package명(tset1 / test2)이 다르므로 다른 class로 구분되어집니다.

 

java는 수 많은 라이브러리를 impotrt하여 사용하기 때문에 이름만으로는 class의 충돌을 막을 수 없어

package를 계층적으로 구성하여 class의 충돌을 방지합니다.

 

package를 생성할때는

src/main/java에서 우클릭으로 메뉴를 호출하여 [New > Package]를 실행, package명을 정하고 package를 생성합니다.


@SpringBootApplication

SpringBoot에서는 @SpringBootApplication 어노테이션 선언만으로 대부분의 설정이 자동으로 완료되어집니다.

 

start.spring.io에서 패키지를 실행하면 아래와 같은 기본 소스가 제공됩니다.

package org.ziaho.ziahorestapi;

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

@SpringBootApplication
public class ZiahoRestApiApplication {

	public static void main(String[] args) {

		SpringApplication.run(ZiahoRestApiApplication.class, args);
	}

}

application.yml

resource를 우클릭하여 [New > File 선택] 이후

프로잭트 환경설정 값을 저장할 application.yml 파일을 생성합니다.

 

파일을 생성하고나면 처음엔 내용이 없으므로 아래 내용처럼 port를 지정 해 봅시다.

server:
	port: 8080

이와같이 설정하고 서버를 실행하면 8080 port로 서버가 실행됩니다.

* 1024 이하의 port는 특권(privileged) 포트로 지정되어 있어 root 권한으로만 사용할 수 있는 port 입니다.


이제 controller라는 package를 생성하고 이 하위에 class를 생성하겠습니다.

controller package 안에 HelloController를 생성 후 아래 처럼 작성합니다.

* Controller는 Spring에서 클라이언트 요청의 진입점이 되는 Class입니다.

package org.ziaho.ziahorestapi.controller;

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

@Controller
public class HelloController {

    /*
    1. 화면에 helloworld가 출력됩니다.
    */
    @GetMapping(value = "/helloworld/string")
    @ResponseBody
    public String helloworldString() {
        return "helloworld";
    }
    /*
    2. 화면에 {message:"helloworld"} 라고 출력됩니다.
    */
    @GetMapping(value = "/helloworld/json")
    @ResponseBody
    public Hello helloworldJson() {
        Hello hello = new Hello();
        hello.message = "helloworld";
        return hello;
    }
    /*
    3. 화면에 helloworld.ftl의 내용이 출력됩니다.
    */
    @GetMapping(value = "/helloworld/page")
    public String helloworld() {
        return "helloworld";
    }

    @Setter
    @Getter
    public static class Hello {
        private String message;
    }
}

 

@Controller

Spring에 해당 Class가 Controller임을 알려주기 위해 class명 상단에 @Controller 어노테이션을 붙여줍니다.

 

@GetMapping("RequestURI")

@GetMapping 어노테이션을 붙이면 해당 주소의 resource를 이용하기 위해서는 Get method로 호출해야한다는 뜻입니다.

웹 브라우저 주소창에서 아래 주소를 실행하면 Get방식으로 호출됩니다.

http://localhost:8080/helloworld/json

/helloworld/json을 Mapping하고 있는 메서드가 실행됩니다. : helloworldJson()

 

@ResponseBody

결과를 응답에 그대로 출력한다는 의미입니다.

@ResponseBody 어노테이션을 지정하지 않으면 return에 지정된 "helloworld" 이름으로 된 파일을 프로젝트 경로에 찾아 화면에 출력합니다.

 

@Getter / @Setter

lombok

선언되어 있는 변수의 값을 가져오거나(getter) 변수에 값을 새로 대입할 때(setter) 사용합니다.


서버 실행

실행결과를 확인하기 위해 아래 사진처럼 ZiahoRestApiApplication 파일을 우클릭하여 메뉴를 호출하고

Run ~~~ ... main()을 클릭합니다.


결과 확인

서버를 구동하고서 local 페이지를 확인하면

Username : user / Password : Run 페이지에서 확인

위와같은 페이지가 나오게 됩니다. Spring Security를 추가하였기 때문입니다.

 

패스워드 확인

로그인이 완료 되었다면, 웹 브라우저에서 각각의 Mapping 된 테스트 주소를 실행해 보겠습니다.

ResponseBody가 지정되어 있지 않기 때문에 return된 "helloworld" 파일을 찾아 출력해야 하는데 해당 파일이 존재하지 않기 때문에 오류 페이지가 출력


helloworld.ftl 생성

resourse > templates 하위에 helloworld.ftl을 생성합니다. 내용은 Hello, World!

ftl 형식의 파일을 실행하기 위해서는 추가적인 설정을 해주어야 한다.

freemarker를 build.gradle에서 설정을 안해줬었기 때문에!

1. application.yml

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    suffix: .ftl

2. build.gradle

implementation("org.springframework.boot:spring-boot-starter-freemarker")

위와 같이 새로 설정을 해주고 페이지를 다시 요청하면 정상적인 페이지가 출력되는것을 확인 할 수 있습니다.


출처

SpringBoot2로 Rest api 만들기(2) – HelloWorld (daddyprogrammer.org)

 

SpringBoot2로 Rest api 만들기(2) – HelloWorld

이번 시간에는 앞 장에서 실습한 프로젝트를 기반으로 HelloWorld를 만들어 보겠습니다.java code 개발은 src/main/java 하위에 package를 생성하고 진행합니다. package란? java 라이브러리들 간의 충돌을 막

www.daddyprogrammer.org

springboot로 Rest api 만들기(2) HelloWorld (tistory.com)

 

springboot로 Rest api 만들기(2) HelloWorld

전체 소스코드 https://github.com/GHGHGHKO/Springboot/tree/main/pepega_chapter_2 GitHub - GHGHGHKO/Springboot: 블로그에 업로드 된 소스코드 블로그에 업로드 된 소스코드. Contribute to GHGHGHKO/Springboot development by creating a

pepega.tistory.com

codej99/SpringRestApi: SpringBoot2, SpringSecurity, JWT, Stateless Restful API (github.com)

 

GitHub - codej99/SpringRestApi: SpringBoot2, SpringSecurity, JWT, Stateless Restful API

SpringBoot2, SpringSecurity, JWT, Stateless Restful API - GitHub - codej99/SpringRestApi: SpringBoot2, SpringSecurity, JWT, Stateless Restful API

github.com