프로젝트 생성
인텔리제이 IDEA로 프로젝트를 생성합니다. gradle로 생성해봅니다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.5.6'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
group = 'com.springboot'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '11'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
GET API 만들기
GET API는 웹 에플리케이션 서버에서 값을 가져올때 사용하는 API입니다.
controller package를 만들고 하위 GetController를 만들어
@RestController, @RequestMapping 어노테이션을 클래스에 추가해줍니다.
package com.springboot.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
}
클래스 수준에서 @RequestMapping을 설정하면 내부 선언한 메서드의 URL 리소스 앞에
@RequestMapping 값이 공통 값으로 추가 됩니다.
@RequestMapping으로 구현하기
@RequestMapping 어노테이션을 별다른 설정없이 선언하면 HTTP의 모든 요청을 받습니다.
그래서 GET 형식의 요청을 받기 위한 method 요소 값을 RequestMethod.GET 로 설정해 줍니다.
package com.springboot.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String getHello() {
return "Hello World!";
}
}
스프링 4.3 버전 이후로는 새로운 어노테이션이 나와 @RequestMapping은 사용하지 않고
각 HTTP 메서드에 맞는 어노테이션을 사용합니다.
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
매개변수가 없는 GET 메서드 구현
별도의 매개변수 없이 GET API를 구현하는 경우 아래와 같이 적용할 수 있습니다.
package com.springboot.api.controller;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
// http://localhost:8080//api/v1/get-api/hello
@GetMapping("/hello")
public String getHello() {
return "Hello World!";
}
}
@PathVariable을 활용한 GET 메서드 구현
웹 통신의 기본 목적은 데이터를 주고 받는 것이기에 대부분 매개변수를 받는 메서드를 작성합니다.
매개변수르를 받을 때 자주 쓰이는 방법 중 하나는 URL 자체에 값을 담아 요청하는 것입니다.
// http://localhost:8080/api/v1/get-api/variable/hello
@GetMapping("/variable/{input}")
public String getVariable(
@PathVariable String input
) {
return "입력받은 매개변수는 " + input + " 입니다.";
}
@GetMapping 어노테이션 값으로 URL 입력시 중괄호를 이용해 매개변수를 지정할 수 있으며
@PathVariable 어노테이션을 사용해 매개변수와 동일한 이름으로 명시해주면 됩니다.
@RequestParam을 활용한 GET 메서드 구현
쿼리 형식으로 값을 전달할 때 사용합니다.
URL 에서 ?를 기준으로 우측에 {키}={값} 형태로 구성된 요청을 전송하는 방법입니다.
// http://localhost:8080/api/v1/get-api/request1?name=잔망루피&email=loopy@loppy.com&mobile=01011112222
@GetMapping("/request1")
public String getRequest1(
@RequestParam String name,
@RequestParam String email,
@RequestParam String mobile
) {
return "이름 : " + name + "<br>"
+ "email : " + email + "<br>"
+ "mobile : " + mobile;
}
이는 원시적인 방법이기도 하고 보안 및 유지보수에 불리하기 때문에
@PathVariable을 사용하거나 Map 객체를 활용해 응답을 JSON 형식으로 보내는 방법이 적합합니다.
@GetMapping("/request2")
public Map getRequest2(
@RequestParam String name,
@RequestParam String email,
@RequestParam String mobile
) {
Map<String, String> response = new HashMap<>();
response.put("name", name);
response.put("email", email);
response.put("mobile", mobile);
return response;
}
@GetMapping("/request3")
public String getRequest3(
@RequestParam Map<String, String> param
) {
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
DTO 객체를 활용한 GET 메서드 구현
DTO는 Data Transfer Object 의 약자로, 다른 레이어 간의 데이터 교환에 활용됩니다.
각 클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체입니다.
DTO는 데이터를 교환하는 용도로만 활용되기에 별도의 로직이 포함되지 않습니다.
프로젝트 패키지 안에 dto 패키지를 생성하고 MemberDto를 추가합니다.
package com.springboot.api.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class MemberDto {
private String name;
private String email;
private String mobile;
@Override
public String toString() {
return "MemberDto { " +
"name'" + name + '\'' +
", email='" + email + '\'' +
", mobile'" + mobile + '\'' +
"}";
}
}
@GetMapping("/request4")
public String getRequest4(MemberDto memberDto) {
return memberDto.toString();
}
데이터 베이스를 활용한 부분은 추후에 다시 정리하겠습니다.
'BACKEND > SPRING' 카테고리의 다른 글
05. API를 작성하는 다양한 방법 - DELETE API 만들기 (0) | 2023.07.30 |
---|---|
05. API를 작성하는 다양한 방법 - POST, PUT API 만들기 (0) | 2023.07.30 |
04. 스프링 부트 애플리케이션 개발하기 - 프로젝트 생성과 Hello World 출력하기 (1) | 2023.07.28 |
트랜잭션과 spring 트랜잭션 알아보기 (0) | 2023.07.27 |
03. 개발 환경 구성 - JDK 및 IDE 설치 (0) | 2023.07.23 |