๐ŸŽฝ ์ธํ”„๋Ÿฐ ์›Œ๋ฐ์—… ํด๋Ÿฝ 0๊ธฐ ๋ฐฑ์—”๋“œ ๋‘ ๋ฒˆ์งธ ๊ณผ์ œ

nyangยท2024๋…„ 2์›” 20์ผ
0

์ธํ”„๋Ÿฐ

๋ชฉ๋ก ๋ณด๊ธฐ
2/7
post-thumbnail

์ถœ์ฒ˜
https://inf.run/XKQg

โ›ณ๏ธ ๋ฌธ์ œ 1

@RequestParam

@GetMapping("/api/v1/calc")
public CalcResponse getCalcResults(
	@RequestParam int num1, 
    @RequestParam int num2) {
	// ..
}

@RequestParam ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด, HTTP ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
(ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„๊ณผ ๋ณ€์ˆ˜์ด๋ฆ„์ด ๋‹ค๋ฅด๋‹ค๋ฉด, @RequestParam์˜ value๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.)

๋‹ค๋งŒ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ @RequestParam์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Dto๋กœ ๋ฐ›์•„์˜ค๋„๋ก ํ•œ๋‹ค.


Dto(Data Transfer Object)

// Request Dto
public record CalcRequest(int num1, int num2) {
}
// Response Dto
public record CalcResponse(int add, int minus, int mul) {
}

Dto๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
Controller์˜ API method์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Dto๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ Dto์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.
๋˜ํ•œ, ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ Dto์— ๋‹ด์•„ ๋ฆฌํ„ดํ•˜๋ฉด, ์Šคํ”„๋ง์ด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜์—ฌ ์‘๋‹ต์„ ํ•ด์ค€๋‹ค.


์—ฌ๊ธฐ์„œ class ๋Œ€์‹  ์ ์€ ์ฝ”๋“œ๋กœ ๋ช…ํ™•ํ•œ ์˜๋„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” record ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

record ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” private final๋กœ ์„ ์–ธ๋œ๋‹ค. (๋ถˆ๋ณ€)
  • getter๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
  • ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ public ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
  • equals, hashcode, toString์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

๐Ÿ’ป ์ตœ์ข… ์ฝ”๋“œ

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

@RestController
public class CalcController {

  @GetMapping("/api/v1/calc")
  public CalcResponse getCalcResults(CalcRequest request) {
      int num1 = request.num1();
      int num2 = request.num2();
      return new CalcResponse(num1 + num2, num1 - num2, num1 * num2);
  }
}

โ›ณ๏ธ ๋ฌธ์ œ 2

LocalDate

๊ณผ๊ฑฐ์—๋Š” ๊ธฐ๋ณธ ๋‚ ์งœ ํƒ€์ž…์ธ Date ํด๋ž˜์Šค, Calendar ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, Java 8๋ถ€ํ„ฐ LocalDate ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

LocalDate์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋‚ ์งœ(yyyy-MM-dd)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋ถˆ๋ณ€ ๊ฐ์ฒด์ด๋ฏ€๋กœ thread-safeํ•˜๋‹ค.

๐Ÿ’ป ์ตœ์ข… ์ฝ”๋“œ

import java.time.DayOfWeek;
import java.time.LocalDate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DayController {

    @GetMapping("/api/v1/day-of-the-week")
    public DayResponse getDay(@RequestParam("date") LocalDate date) {
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        return new DayResponse(dayOfWeek.toString());
    }
}

์ด๋ฒˆ์—๋Š” @RequestParam ์–ด๋…ธํ…Œ์ด์…˜๊ณผ LocalDate๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๋ฐ”์ธ๋”ฉํ–ˆ๋‹ค.
๋˜ํ•œ, ์š”์ผ์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•˜๋ฏ€๋กœ LocalDate ํด๋ž˜์Šค์˜ getDayOfWeek() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.


โ›ณ๏ธ ๋ฌธ์ œ 3


@RequestBody

POST API๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด @RequestBody ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
@RequestBody๋Š” ์Šคํ”„๋ง์—์„œ ์š”์ฒญ ๋ณธ๋ฌธ์„ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋ฉฐ, ๋ณธ๋ฌธ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด 400 Bad Request ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•œ๋‹ค.


๐Ÿ’ป ์ตœ์ข… ์ฝ”๋“œ

public record SumRequest(List<Integer> numbers) {

}
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CalcController {

    @PostMapping("/api/v1/sum")
    public int sumNumbers(@RequestBody SumRequest request) {
        return request.numbers().stream()
                .mapToInt(number -> number)
                .sum();
    }
}

Request Dto์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ List<Integer>๋กœ ์ง€์ •ํ•˜์—ฌ JSON ๋ฐฐ์—ด์„ ๋งคํ•‘ํ•˜๊ณ , ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์š”์†Œ์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฆฌํ„ดํ•˜๋„๋ก ํ–ˆ๋‹ค.

profile
๐Ÿพ

0๊ฐœ์˜ ๋Œ“๊ธ€