๐ŸŒผ Spring ๊ธฐ์ดˆ โ‘ฃ ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘ํ•˜๊ธฐ, ์–ด๋…ธํ…Œ์ด์…˜ ํ™œ์šฉ / TIL - day 23

ํ•˜๋ฆฌ๋น„ยท2025๋…„ 3์›” 24์ผ
2

๐ŸŒผ Spring

๋ชฉ๋ก ๋ณด๊ธฐ
5/11

โ–ช๏ธSpring Annotationโ–ช๏ธ


๐Ÿ“– @Slf4j

๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌ์„ฑ, ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค
log back ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

๐Ÿ“Œ Logging

Thread ์ •๋ณด๋‚˜ ํด๋ž˜์Šค ์ด๋ฆ„ ๊ฐ™์€ ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ํ™•์ธ
โž ์ด์ œ๊นŒ์ง€๋Š” println์œผ๋กœ ์ฝ˜์†”์— ์ถœ๋ ฅํ–ˆ๋‹ค๋ฉด ๋ณ„๋„์˜ ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค

@Slf4j // ๋กœ๊น… ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค ํ™œ์šฉ
@RestController // ์ปจํŠธ๋กค๋Ÿฌ ๋งŒ๋“ค๊ธฐ
public class Slf4jController {

    @RequestMapping("/logging") // ์Šคํ”„๋ง๋นˆ ๋งŒ๋“ค๊ธฐ
    public String logging() {

        String sparta = "Sparta";
        // ๋กœ๊ทธ ๋ ˆ๋ฒจ : TRACE -> DEBUG -> INFO -> WARN -> ERROR
        // ๋””ํดํŠธ : INFO
        
        // โŽ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค
        log.trace("๋ฌธ์ž trace={}", sparta);
        log.debug("๋ฌธ์ž debug={}", sparta);
		
        // โœ… ์‹คํ–‰๋œ๋‹ค
        log.info("๋ฌธ์ž info={}", sparta);
        log.warn("๋ฌธ์ž warn={}", sparta);
        log.error("๋ฌธ์ž error={}", sparta);
        
        return "success";
    }

}

โœ”๏ธlog level

  • ์šฉ๋„ : ์ด ์„ค์ •์„ ํ†ตํ•ด error๋งŒ ์ถœ๋ ฅํ•œ๋‹ค๋˜์ง€ (์ถœ๋ ฅ๋ชจ์œผ๊ธฐ)
    ๋กœ๊ทธ๋ฉ”์„ธ์ง€๋ฅผ ์ผ์ž๋ณ„๋กœ ๋ชจ์•„์„œ ์™ธ๋ถ€ ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•˜๊ธฐ๋„ ํ•œ๋‹ค (๋กœ๊ทธ ๋ชจ์•„๋†“๊ณ  ์—๋Ÿฌ ์ฐพ๊ธฐ)

๐ŸŒŸ TRACE > DEBUG > INFO > WARN > ERROR

  • ์œ„ ์ฝ”๋“œ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ (๋ ˆ๋ฒจ ์‹œ์ž‘ = TRACE ๋ผ๋Š” ๋œป)
  • ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ๋ ˆ๋ฒจ(defalut) : INFO

๐Ÿ“Œ log ์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•  ๊ฒƒ

โœ…โŽ
์ค‘๊ด„ํ˜ธ ์‚ฌ์šฉโญ•๏ธ์ค‘๊ด„ํ˜ธ ์‚ฌ์šฉ โŒ (๋ฌธ์ž์—ด+๋ฌธ์ž์—ด) ์—ฐ์‚ฐ ํ˜•ํƒœ ์‚ฌ์šฉ
์•Œ์•„์„œ ๊ด„ํ˜ธ๋ž‘ ๋ฌธ์ž๊ฐ€ ์น˜ํ™˜๋˜๊ณ  ๋กœ๊ทธ๋ ˆ๋ฒจ ์ ์šฉ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ƒ๊ด€์—†์ด ์—ฐ์‚ฐ ๋จผ์ € ํ•ด๋ฒ„๋ฆฐ๋‹ค


โ–ช๏ธ@Controller VS @RestControllerโ–ช๏ธ

๐Ÿ’ก ์Šคํ”„๋ง์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜


๐Ÿ“– @Controller

@Controller
public class ViewController {

    @RequestMapping("/view")
    public String example() {
        // logic
        return "sparta"; // ViewName์ด return๋œ๋‹ค (๋ฆฌ์†Œ์Šค์˜ ํƒ€์ž„๋ฆฌํ”„๋กœ ๋งŒ๋“  ๋ทฐ)
    }

}
  • ์‘๋‹ตํ•  View๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ = *ํƒ€์ž„๋ฆฌํ”„๋‚˜ jsp๋ฅผ ์“ฐ๋Š”๊ฒฝ์šฐ์— ์‚ฌ์šฉ

*ํƒ€์ž„๋ฆฌํ”„ ์‚ฌ์šฉ
๊ทธ๋ ˆ์ด๋“ค์— ํƒ€์ž„๋ฆฌํ”„ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ทฐ์˜ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ main/resources/templates ๋กœ ์„ค์ •๋œ๋‹ค
โž ์•Œ๋งž์€ View๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์—์„œ return๊ฐ’์ด string์ด๋ฉด ThymeleafViewResolver์— ์˜ํ•ด view name์œผ๋กœ ์ธ์‹๋œ๋‹ค


๐Ÿ“– @RestController

@RestController
public class ResponseController {

    @RequestMapping("/string")
    public String example() {
        // logic
        return "sparta"; // ViewName์ด return ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, String Data๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.
    }
    
}
  • ์‘๋‹ตํ•  Data๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
  • ํ˜„์žฌ๋Š” ๋Œ€๋ถ€๋ถ„ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ด API๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค (Restful API)
    โž *return ๊ฐ’์œผ๋กœ View๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ HTTP Message Body์— Data๋ฅผ ์ž…๋ ฅํ•œ๋‹ค

*์•Œ๋งž๋Š” View๋ฅผ ์ฐพ๊ณ  View Resolverํ•œํ…Œ ๊ฐ€๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ! ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค
(ํ™”๋ฉด์ด ๊ทธ๋ ค์ง€๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜จ๋‹ค)


โ–ช๏ธAnnotation ์ž์„ธํžˆ ๋ณด๊ธฐโ–ช๏ธ


๐Ÿ“– @Conponent

  • ์Šคํ”„๋ง ๋นˆ์— ๋“ฑ๋กํ•˜๋Š” ์—ญํ•  = ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ๋น„์Šทํ•œ ์—ญํ• 
    *๋นˆ? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด

๐Ÿ’ก @Indexed

  • ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์Šคํ”„๋ง ๋นˆ์— ๋” ๋น ๋ฅด๊ฒŒ ๋“ฑ๋ก๋˜๋„๋ก ๋„์™€์ค€๋‹ค

๐Ÿ“– @Target

  • ํ•˜์œ„ ์–ด๋…ธํ…Œ์ด์…˜์ด ์–ด๋–ค ๋ฒ”์œ„์— ์ ์šฉ๋˜๋Š”์ง€ ์„ค์ •
  • ์—˜๋ฆฌ๋จผํŠธ ํƒ€์ž…์˜ ์ด๋„˜์œผ๋กœ ์†์„ฑ์„ ์„ค์ •..

๐Ÿ“– @Retention

  • ํ•˜์œ„์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์œ ์ง€๋˜๋Š”์ง€๋ฅผ ์„ค์ •
  1. SOURCE
    • ์†Œ์Šค ์ฝ”๋“œ(.java)์—์„œ๋งŒ ์œ ์ง€
    • ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค
  2. CLASS
    • ์ปดํŒŒ์ผ๋œ ํด๋ž˜์Šค ํŒŒ์ผ(.class)์— ์ €์žฅ๋˜์ง€๋งŒ, JVM์ด ์‹คํ–‰ ์‹œ ์ฝ์ง€ ์•Š๋Š”๋‹ค(์ฃผ์„๊ณผ ๊ฐ™์Œ)
    • Default ๊ฐ’์ž„
  3. RUNTIME
    • ํด๋ž˜์Šค ํŒŒ์ผ(.class)์— ์ €์žฅ๋˜๊ณ , JVM์— ์˜ํ•ด ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค
    • ์ฆ‰, ์‹ค์ œ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์˜ ์ฝ”๋“œ์— ๋ฐ˜์˜๋˜์–ด ์˜ํ–ฅ์„ ์ค€๋‹ค

๐Ÿ“– @Documented

  • ๋ฌธ์„œํ™” ๋„๊ตฌ์— ์˜ํ•ด ๋ฌธ์„œํ™”๋˜์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ„

โ–ช๏ธRequest Mappingโ–ช๏ธ


1๏ธโƒฃ Request Mapping

๐Ÿ’ก ํŠน์ • URL๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ๊ทธ ์š”์ฒญ๊ณผ ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด๋ถ€์˜ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐ / ๋งคํ•‘ํ•จ
(์‹ค์ œ๋กœ๋Š” ์—ฌ๋Ÿฌ์š”์†Œ๋ฅผ ์กฐํ•ฉํ•ด ๋งคํ•‘ํ•œ๋‹ค)

โœ”๏ธ ์‚ฌ์šฉ์˜ˆ์‹œ

@RequestMapping(value = "/v1", method = RequestMethod.GET)

  • ๋ฒ„์ „ ๋ณ„๋กœ ์„ ์–ธ ๋ฐฉ์‹ ๋‹ค๋ฅด๋‹ค! โž ํ˜„์žฌ๋Š” ๋งจ ๋’ค์— ์Šฌ๋ž˜์‹œ ์—†์–ด์•ผํ•œ๋‹ค

  • ์†์„ฑ๊ฐ’๋“ค์„ ์„ค์ •ํ• ๋•Œ ๋ฐฐ์—ดํ˜•ํƒœ๋กœ ์„ ์–ธํ•˜๋ฉด ๋‹ค์ค‘์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  Http ๋ฉ”์„œ๋“œ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค (๋ฉ”์„œ๋“œ ์†์„ฑ ์„ค์ • ์•ˆํ–ˆ์„๋•Œ)

  • ๋ฉ”์„œ๋“œ ์†์„ฑ์œผ๋กœ ๋”ฐ๋กœ ์ง€์ •์„ ํ•ด๋ฒ„๋ฆฌ๋ฉด ์ง€์ •๋œ ๊ฒƒ๋งŒ ํ—ˆ์šฉ๋„ ๊ฐ€๋Šฅ

       // HTTP Method ๋Š” GET๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.
       @RequestMapping(value = "/v1", method = RequestMethod.GET)
       public String exampleV1() {
           // logic
        return "this is sparta!";
       }

2๏ธโƒฃ @GetMapping

โœ”๏ธ ์‚ฌ์šฉ์˜ˆ์‹œ

@GetMapping(value = "/v2")

  • method = {RequestMethod.GET} ์ด ์„ค์ •๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค
  • POST, PUT, PATCH, DELETE ๋ชจ๋‘ ์‚ฌ์šฉ๊ฐ€๋Šฅ !
  • @RequestMapping ๋ณด๋‹ค ์ง๊ด€์ ์ด๋ฏ€๋กœ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค
@GetMapping(value = "/v2")
public String exampleV2() {
	// logic
	return "this is sparta!";
}

๐Ÿ“Œ @RequestMapping ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

@PostMapping, @PutMapping, @DeleteMapping, @PatchMapping@RequestMapping
TargetMethod LevelClass Level, Method Level
  • ์˜ˆ์‹œ : users/{userId}, category/{categoryId}/product/{productId}
    prefix๋กœ ์„ ์–ธํ•  URL์„ class ๋ ˆ๋ฒจ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์— ์ฃผ๋กœ ์‚ฌ์šฉ

3๏ธโƒฃ @PathVariable

๐Ÿ’ก ๊ฒฝ๋กœ ๋ณ€์ˆ˜์ž„, ๋น„์—ฐ๊ฒฐ์„ฑ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•จ
URL๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์˜จ๋‹ค

โœ”๏ธ ์‚ฌ์šฉ์˜ˆ์‹œ

user/{id}

  • ๊ฒฝ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ค‘๊ด„ํ˜ธ์— ๋‘˜๋Ÿฌ ์‹ธ์„œ ์‚ฌ์šฉ
  • ๋ฐ˜๋“œ์‹œ ๊ฒฝ๋กœ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค!
  • Restful API ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ๋†’์•„์ง€๊ณ  ์žˆ์Œ

1๏ธโƒฃ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€์ˆ˜๋ช…๊ณผ PathVariable ๋ณ€์ˆ˜๋ช…์ด ๊ฐ™์œผ๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ

[์ƒ๋žต์ „โŒ]

@RequestMapping("/posts")
@RestController
public class PathVariableController {
	
	// postId๋กœ ๋œ post ๋‹จ๊ฑด ์กฐํšŒ
	@GetMapping("/{postId}")
	public String pathVariableV1(@PathVariable("postId") Long data) {
		// logic
		String result = "PathvariableV1 ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค : " + data;
		return result;
	}
}

---------------

[์ƒ๋žตํ›„โญ•๏ธ]

@RequestMapping("/posts")
@RestController
public class PathVariableController {
	
	// ๋ณ€์ˆ˜๋ช…๊ณผ ๊ฐ™๋‹ค๋ฉด ์†์„ฑ๊ฐ’ ์ƒ๋žต๊ฐ€๋Šฅ
	@GetMapping("/{postId}")
	public String pathVariableV2(@PathVariable Long postId) {
		// logic
		String result = "PathvariableV2 ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค : " + postId;
		return result;
	}
	
}

2๏ธโƒฃ @PathVariable ๋‹ค์ค‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

[1๊ฐœ ์‚ฌ์šฉ]

@RestController
public class PathVariableController {
	
	@GetMapping("/{postId}/comments/{commentId}")
	public String pathVariableV3(
								@PathVariable Long postId,
           					    @PathVariable Long commentId
                                 ) {
		// logic
		String result = "PathvariableV3 ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค postId : " + postId + "commentsId : " + commentId;
		return result;
	}
	
}

---------

[๋‹ค์ค‘ ์‚ฌ์šฉ]

@RequestMapping("/posts/{postId}")
@RestController
public class PathVariableController {
	
	@GetMapping("/comments/{commentId}")
	public String pathVariableV4(
    							@PathVariable Long postId,
                                @PathVariable Long commentId
                                ) {
		// logic
		String result = "PathvariableV4 ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค postId : " + postId + "commentsId : " + commentId;
		return result;
	}
	
}

4๏ธโƒฃ Request Parameter

๐Ÿ’ก ์š”์ฒญ๊ณผ ์†์„ฑ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ 1. ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋งคํ•‘ํ•˜๊ธฐ

โœ”๏ธ ์‚ฌ์šฉ์˜ˆ์‹œ

@GetMapping(value = "/users", params = "gender=man")

(์š”์ฒญ :URL GET http://localhost:8080/users?gender=man )

โœ”๏ธ ๊ทœ์น™

  1. params = "gender"

    • params์˜ key๊ฐ’์€ ์ปค์Šคํ…€์ด ๊ฐ€๋Šฅํ•˜๋‹ค
    • value๋Š” ์—†์–ด๋„ ๋œ๋‹ค.
  2. params = "!gender"

    • gender๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ
  3. params = "gender=man"

    • gender=man ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ
  4. params = "gender!=man"

    • params์˜ value๊ฐ’์ด man๊ฐ€ ์•„๋‹ˆ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ
  5. params = {"gender=man", "gender=woman"}

    • ๋ฐฐ์—ด๋กœ ์†์„ฑ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๊ฐœ ์„ค์ •์ด ๊ฐ€๋Šฅ

๐Ÿ“Œ 2. ํŠน์ • ํ—ค๋”์™€ ๋งคํ•‘ํ•˜๊ธฐ

โœ”๏ธ ์‚ฌ์šฉ์˜ˆ์‹œ

@PostMapping(value = "/users", headers = "Content-Type=application/json")

  • ํŠน์ • ํ—ค๋”์™€ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์†์„ฑ ์ž‘์„ฑ ๊ทœ์น™์€ ์œ„ params ์†์„ฑ ๊ฐ’์˜ ๊ทœ์น™๊ณผ ๊ฐ™๋‹ค


๐Ÿ“Œ 3. MediaType ๋งคํ•‘, consume(์ˆ˜์šฉ)

โœ”๏ธ ์‚ฌ์šฉ์˜ˆ์‹œ

@PostMapping(value = "/users", consumes = "application/json")

  • ๐ŸŒŸHTTP Header Content-Type(์š”์ฒญ)๊ณผ ๋งคํ•‘
  • consumes ๊ฐ’์€ //MediaType.APPLICATION_JSON_VALUE
  • ์ตœ๋Œ€ํ•œ MediaType์˜ Enum์„ ์‚ฌ์šฉํ•ด๋ผ!

โœ”๏ธ ๊ทœ์น™

  1. consumes=โ€application/jsonโ€

    • application/json ๋ฏธ๋””์–ด ํƒ€์ž… ํ—ˆ์šฉ
  2. consumes=โ€!application/jsonโ€

    • application/json ์ œ์™ธ ๋ฏธ๋””์–ด ํƒ€์ž… ํ—ˆ์šฉ
  3. consumes=โ€application/*โ€

    • application/ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๋ฏธ๋””์–ด ํƒ€์ž… ํ—ˆ์šฉ
  4. consumes=โ€*\/*โ€

    • ๋ชจ๋‘ ํ—ˆ์šฉ

๐Ÿ“Œ 4. MediaType ๋งคํ•‘, produces(์ œ๊ณต)

โœ”๏ธ ์‚ฌ์šฉ์˜ˆ์‹œ

@GetMapping(value = "/users", produces = "text/plain")

  • ๐ŸŒŸ์š”์ฒญ ํ—ค๋”์˜ Accept ๊ฐ’์— ๋”ฐ๋ผ์„œ produces ํ•˜๋Š” ๊ฐ’์ด ๋ณ€ํ•จ
  • ์ตœ๋Œ€ํ•œ MediaType์˜ Enum์„ ์‚ฌ์šฉํ•ด๋ผ!

๐Ÿ“– Spring์ด ์ง€์›ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ

๐Ÿ“Œ Http ํ—ค๋” ์กฐํšŒํ•˜๊ธฐ

[์˜ˆ์‹œ]

// ๋กœ๊น…
@Slf4j
@RestController
public class RequestHeaderController {

    @GetMapping("/request/headers")
    public String headers(
            HttpServletRequest request, // Servlet์—์„œ ์‚ฌ์šฉํ•œ๊ฒƒ๊ณผ ๊ฐ™์Œ
            HttpServletResponse response, // Servlet์—์„œ ์‚ฌ์šฉํ•œ๊ฒƒ๊ณผ ๊ฐ™์Œ
            @RequestHeader MultiValueMap<String, String> headerMap,
            @RequestHeader("host") String host,
            @CookieValue(value = "cookie", required = false) String cookie,
            HttpMethod httpMethod,
            Locale locale
    ) {
		    // Servlet
        log.info("request={}", request);
        log.info("response={}", response);
        
        // @RequestHeader
        log.info("headerMap={}", headerMap);
        log.info("host={}", host);
        
        // @CookieValue
        log.info("cookie={}", cookie);
        
        // HttpMethod
        log.info("httpMethod={}", httpMethod);
        
        // Locale
        log.info("Locale={}", locale);

        return "success";
    }
}
  • API ํ˜ธ์ถœ

  • Log ์ถœ๋ ฅ ๊ฒฐ๊ณผ

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