MSA์—์„œ Response Entity์™€ Response custom class๋กœ ์‘๋‹ต ํ†ต์ผํ•˜๊ธฐ

2025. 3. 4. 04:53ยท๐Ÿ’ชBackend/Spring

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ํŒ€์›๊ณผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๋•Œ, ์‘๋‹ต ํ˜•์‹์ด ํ†ต์ผ๋˜์ง€ ์•Š์œผ๋ฉด ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
ํŠนํžˆ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)์—์„œ๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ์‘๋‹ต ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์ผ๊ด€์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋กœ์ ํŠธ์—์„œ๋“  ํ†ต์ผ๋œ ์‘๋‹ต ํฌ๋งท์€ ํด๋ผ์ด์–ธํŠธ์™€ ํ˜‘์—…ํ•˜๋Š” ํŒ€์› ๋ชจ๋‘์—๊ฒŒ ๋ช…ํ™•ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋””๋ฒ„๊น…๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
์˜ค๋Š˜ ํฌ์ŠคํŒ…์—์„œ ์†Œ๊ฐœํ•  ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” Spring Boot์—์„œ ์ œ๊ณตํ•˜๋Š” ResponseEntity์™€ ํ•จ๊ป˜, ์ œ๋„ค๋ฆญ ์ปค์Šคํ…€ Response ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!
 
 

Resposne ๊ฐ์ฒด ์ƒ์„ฑ

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ Response ํด๋ž˜์Šค๋ฅผ utility ๋ชจ๋“ˆ์— ์ž‘์„ฑํ•˜์—ฌ ์„ฑ๊ณต, ์‹คํŒจ์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
 

Response custom class

package com.example.module_utility.response;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Getter;

@Getter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response<T> {
    private final int status;
    private final String message;
    private final T data;

    public Response(int status, String message, T data) {
        this.status = status;
        this.message = message;
        this.data = data;
    }

    public static <T> Response<T> success(T data) {
        return new Response<>(200, "success", data);
    }

    public static Response<Void> successWithoutData() {
        return new Response<>(200, "success", null);
    }

    public static <T> Response<T> error(int status, String message) {
        return new Response<>(status, message, null);
    }
}

@JsonInclude annotation์„ ํ†ตํ•ด successWithoutData์™€ error ์‘๋‹ต๊ณผ ๊ฐ™์ด data ์— null ์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ, ์‘๋‹ต์—์„œ null ์ด ๋ณด์ด์ง€ ์•Š๋„๋ก ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
 
 
๋‹จ์ˆœ POJO ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์—, utility ๋ชจ๋“ˆ์€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ๊ฐ™์ด ์‹คํ–‰์‹œ์ผœ ์ค„ ํ•„์š”๊ฐ€ ์—†๊ณ , ํ•ด๋‹น ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์˜์กด์„ฑ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
 

์˜์กด์„ฑ ์ถ”๊ฐ€ ์˜ˆ์‹œ

project(':module-exchange') {
	dependencies {
		implementation project(':module-utility')
        // ๊ธฐํƒ€ ํ•„์š”ํ•œ ์˜์กด์„ฑ
	}
}

 
 
 

Response Entity

์œ„์˜ Response ํด๋ž˜์Šค๋งŒ ์‚ฌ์šฉํ•ด๋„ ์ถฉ๋ถ„ํžˆ ์ผ๊ด€๋œ ์‘๋‹ต ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์— ResponseEntity๋กœ ์ถ”๊ฐ€๋กœ ํ•œ ๋ฒˆ ๊ฐ์‹ธ๋Š” ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
 
Response Entity๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” HTTP ์‘๋‹ต์˜ ์ƒํƒœ ์ฝ”๋“œ, ํ—ค๋” ๋“ฑ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋˜๋Š” ์‘๋‹ต ๋ณธ๋ฌธ ๋ฟ๋งˆ๋ˆ„์•„๋‹ˆ๋ผ, HTTP ํ”„๋กœํ† ์ฝœ ์ฐจ์›์—์„œ์˜ ์ƒํƒœ ์ฝ”๋“œ๋‚˜ ํ—ค๋” ์„ค์ •๊นŒ์ง€ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
๋‹จ์ˆœํ•œ API์—์„œ๋Š” ๊ณตํ†ต Response ํด๋ž˜์Šค๋ฅผ ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, ResponseEntity์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง, ์ƒํƒœ ์ฝ”๋“œ ๊ด€๋ฆฌ ๋ฐ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 
 

Response Entity์™€ Response๋ฅผ ์ด์šฉํ•œ ์‘๋‹ต ๊ตฌํ˜„


์ด์ „์—๋Š” ์„œ๋น„์Šค ๋‹จ์—์„œ Response ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋˜ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@Service
public class ExchangeService {
    public Response<AccountUpdateResponseDTO> executeTransactionProcess(TransactionDTO transactionDTO) {
        // ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ
        AccountUpdateResponseDTO dto = // ... ๋กœ์ง ๊ฒฐ๊ณผ
        // ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ๋ฐ”๋กœ Response ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜
        return Response.success(dto);
    }
}

 
๊ทธ๋ฆฌ๊ณ  ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ๋‹จ์ˆœํžˆ ์ด ๋ฐ˜ํ™˜๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 
@PostMapping("/transactions")
public ResponseEntity<Response<AccountUpdateResponseDTO>> saveTransaction(@RequestBody TransactionDTO transactionDTO) {
    // ์„œ๋น„์Šค ๋‹จ์—์„œ Response๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ณ„๋„์˜ ์‘๋‹ต ๊ตฌ์„ฑ ๋กœ์ง์ด ํ•„์š” ์—†์Œ
    Response<AccountUpdateResponseDTO> response = exchangeService.executeTransactionProcess(transactionDTO);
    return ResponseEntity.ok(response);
}

 
๊ทธ๋Ÿฌ๋‚˜, ์„œ๋น„์Šค ๊ณ„์ธต์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต ๊ตฌ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ ์›์น™ ๋ฐ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋ถ€ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
 

  • ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(Separation of Concerns)
    ์„œ๋น„์Šค ๊ณ„์ธต์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. HTTP ์ƒํƒœ ์ฝ”๋“œ, ์‘๋‹ต ํฌ๋งท, ํ—ค๋” ๋“ฑ์€ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต(์ปจํŠธ๋กค๋Ÿฌ)์˜ ์ฑ…์ž„์œผ๋กœ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(Single Responsibility Principle)
    ์„œ๋น„์Šค ๊ณ„์ธต์ด ์‘๋‹ต ์ƒ์„ฑ๊นŒ์ง€ ๋‹ด๋‹นํ•˜๋ฉด, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์‘๋‹ต ํฌ๋งท ์„ค์ •์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ฑ…์ž„์„ ๋™์‹œ์— ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ์— ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 
๋”ฐ๋ผ์„œ, ํ˜„์žฌ๋Š” ์„œ๋น„์Šค ๋‹จ์—์„œ๋Š” ๋‹จ์ˆœํžˆ Response DTO(์˜ˆ: AccountUpdateResponseDTO)๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ด๋ฅผ ๋ฐ›์•„์„œ ResponseEntity์™€ ๊ณตํ†ต Response ํด๋ž˜์Šค๋กœ ๊ฐ์‹ธ์„œ ์‘๋‹ต์„ ๊ตฌ์„ฑํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.
 
 
์˜ˆ๋ฅผ ๋“ค์–ด, ExchangeController์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ExchangeController ์—์„œ ResponseEntity์™€ Response ๊ฐ์ฒด ์‚ฌ์šฉ

    @PostMapping("/transactions")
    public ResponseEntity<Response<AccountUpdateResponseDTO>> saveTransaction(@RequestBody TransactionDTO transactionDTO) {
        AccountUpdateResponseDTO accountUpdateResponseDTO = exchangeService.executeTransactionProcess(transactionDTO);
        Response<AccountUpdateResponseDTO> response = Response.success(accountUpdateResponseDTO);
        return ResponseEntity.ok(response);
    }

 
์‹ค์ œ ์ฝ”๋“œ์—์„œ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
 
ํ˜„์žฌ๋Š” ์‘๋‹ต ๊ตฌ์„ฑ์ด ๋‹จ์ˆœํ•˜์—ฌ builder ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹(Response.success())์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํ–ฅํ›„ ์‘๋‹ต์— ํ—ค๋”๋‚˜ ์ฟ ํ‚ค ๋“ฑ ์ถ”๊ฐ€์ ์ธ ์š”์†Œ๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” builder ํŒจํ„ด์„ ๋„์ž…ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
 
ํ˜„์žฌ ์ƒํ™ฉ์—์„œ๋Š”, ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ ์ „๋‹ฌ(ok, badRequest ๋“ฑ)๊ณผ ๊ฐ„๊ฒฐํ•จ ์ธก๋ฉด์—์„œ ์žฅ์ ์ด ์žˆ์–ด ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
 
 

์‘๋‹ต ์˜ˆ์‹œ

Response Entity์™€ Response ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ ์‘๋‹ต์˜ ์„ฑ๊ณต ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
    "status": 200,
    "message": "success",
    "data": {
        "id": 2,
        "totalValue": 2130.00
    }
}

 
HTTP ์ƒํƒœ ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 
 

Global Exception Handler

์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(GlobalExceptionHandler)๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋ชจ๋“  ์˜ˆ์™ธ์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ์—๋Ÿฌ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ๋Š” HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ์žก์•„ Response ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. 
 

package com.example.module_utility.response;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler
    public ResponseEntity<Response<Void>> handleRuntimeException(RuntimeException e) {

        Response<Void> response =Response.error(500, e.getMessage());
        return new ResponseEntity<>(response,HttpStatus.INTERNAL_SERVER_ERROR);
    }

}

 
์ด์ „์˜ Response class๋Š” ๋‹จ์ˆœ POJO ์ฝ”๋“œ์˜€๊ธฐ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋  ํ•„์š”๊ฐ€ ์—†์—ˆ์œผ๋‚˜, Global Exception Handler๋Š” @RestControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜์–ด์•ผ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ ๊ฐ„์— ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์„ค์ •์ด ์ œ๋Œ€๋กœ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด, ํ•ด๋‹น ๋นˆ์ด ๋“ฑ๋ก๋˜์ง€ ์•Š์•„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 

์Šค์บ” ์„ค์ •

@SpringBootApplication(scanBasePackages = {"com.example.module_exchange", "com.example.module_utility"})

 
์œ„์™€ ๊ฐ™์ด scan์ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋ช…์‹œํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
 
 

์‘๋‹ต ์˜ˆ์‹œ
 

throw new RuntimeException("์ž”์•ก ๋ถ€์กฑ: ์ถœ๊ธˆ ๊ธˆ์•ก์ด ๊ณ„์ขŒ ์ž”์•ก๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค.");

 
throw๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉด, ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ๋Š” ์ด๋ฅผ ๊ฐ€๋กœ์ฑ„์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค
 

{
    "status": 500,
    "message": "์ž”์•ก ๋ถ€์กฑ: ์ถœ๊ธˆ ๊ธˆ์•ก์ด ๊ณ„์ขŒ ์ž”์•ก๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค."
}

 
runtimeException์— ํ•ด๋‹นํ•˜๋Š” 500 status์™€ ํ•จ๊ป˜ error message๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
์ด์ฒ˜๋Ÿผ Response ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜๋ฉด, HTTP ์ƒํƒœ ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•ญ์ƒ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ฒŒ ๋˜์–ด ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ํŒŒ์‹ฑ์ด๋‚˜ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์ด ํ•œ์ธต ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ถ”๊ฐ€์ ์ธ ํ•„๋“œ(์˜ˆ: timestamp, ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋“ฑ)๋ฅผ ์ถ”ํ›„ ํ™•์žฅํ•  ๋•Œ์—๋„ ๋ชจ๋“  ์—๋Ÿฌ ์‘๋‹ต์— ์ผ๊ด€๋˜๊ฒŒ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ „์ฒด API์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
 
 
์ฐธ๊ณ 
https://woodcock.tistory.com/19

'๐Ÿ’ชBackend > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] DI(์˜์กด์„ฑ ์ฃผ์ž…): ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?  (5) 2025.02.07
'๐Ÿ’ชBackend/Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] DI(์˜์กด์„ฑ ์ฃผ์ž…): ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?
.๋ฐ.
.๋ฐ.
  • .๋ฐ.
    Do IT
    .๋ฐ.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (38)
      • ๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜ (21)
        • PS (16)
        • ์ด๋ก  (5)
      • ๐ŸŽˆcapstone (2)
      • ๐Ÿ’ชBackend (10)
        • Django (8)
        • Spring (2)
      • STD (0)
      • SQL (4)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    programmers
    MYSQL
    ๋ฐฑ์ค€
    resposneentity
    ๋ฌธ์ œํ’€์ด
    responsecustomclass
    bruteforce
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    python
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์ž๊ธฐ์ฐธ์กฐ
    ์„œ๋ธŒ์ฟผ๋ฆฌ
    windowํ•จ์ˆ˜
    PS
    ์‘๋‹ตํ˜•์‹
    ์žฌ๊ท€
    14907
    Django
    SQL
    apiresponse
    BFS
    ํŒŒ์ด์ฌ
    ์ž๋ฐ”
    sql๊ณ ๋“์ ํ‚คํŠธ
    GlobalExceptionHandler
    ์ฝ”ํ…Œ
    BOJ
    crud
    ๋‹ค์ค‘์กฐ์ธ
    prgms
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
.๋ฐ.
MSA์—์„œ Response Entity์™€ Response custom class๋กœ ์‘๋‹ต ํ†ต์ผํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”