이번시간에는 앞선 시간에 생성한 프로젝트에서 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 페이지를 확인하면
위와같은 페이지가 나오게 됩니다. Spring Security를 추가하였기 때문입니다.
로그인이 완료 되었다면, 웹 브라우저에서 각각의 Mapping 된 테스트 주소를 실행해 보겠습니다.
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
'Spring Boot' 카테고리의 다른 글
SpringBoot를 활용한 Rest api 만들기(6) - ControllerAdvice를 이용한 Exception처리 (0) | 2023.03.06 |
---|---|
SpringBoot를 활용한 Rest api 만들기(5) - API 인터페이스 및 결과 데이터 구조 설계 (0) | 2023.03.04 |
SpringBoot를 활용한 Rest api 만들기(4) - Swagger Api 문서 자동화 설정하기 (0) | 2023.02.27 |
SpringBoot를 활용한 Rest api 만들기(3) - H2 Database 연동하기 (2) | 2023.02.26 |
SpringBoot를 활용한 Rest api 만들기(1) - Intellij, start.spring.io, 프로젝트 생성 (0) | 2023.02.23 |