Home > Spring > ๐Ÿƒ[Spring] Controller์—์„œ getter๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด JSON์ด ๋œ๋‹ค?!

๐Ÿƒ[Spring] Controller์—์„œ getter๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด JSON์ด ๋œ๋‹ค?!
Spring Framework

๐Ÿƒ[Spring] Controller์—์„œ getter๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด JSON์ด ๋œ๋‹ค?!

  • Controller์—์„œ getter๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
    • ์ด ๋™์ž‘์€ Spring Framework์—์„œ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.

1๏ธโƒฃ Spring์—์„œ ๊ฐ์ฒด๊ฐ€ JSON์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •.

1. ๊ฐ์ฒด ๋ฐ˜ํ™˜ ๋ฐ @RestController

  • Spring์—์„œ๋Š” @RestController ๋˜๋Š” @ResponseBody ์• ๋„ˆํ…Œ์ด์…˜์ด ๋ถ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ํ•ด๋‹น ๊ฐ์ฒด๋Š” ์ž๋™์œผ๋กœ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • Spring์€ ๋‚ด๋ถ€์ ์œผ๋กœ Jackson์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๊ณผ์ •์—์„œ ๊ฐ์ฒด์˜ getter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋ ค JSON์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. Jackson์— ์˜ํ•œ ์ง๋ ฌํ™”.

  • Spring Boot๋Š” Jackson์„ ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด, ์ถ”๊ฐ€์ ์ธ ์„ค์ • ์—†์ด Java ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์˜ getter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ , ์ด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, getName() ์ด๋ผ๋Š” getter๊ฐ€ ์žˆ์œผ๋ฉด, ์ด๋Š” name์ด๋ผ๋Š” ํ•„๋“œ๋กœ JSON์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์˜ˆ์‹œ.

1. ๊ฐ์ฒด ํด๋ž˜์Šค.

public class User {
    private Long id;
    private String name;
    private String email;
    
    // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
    public User() {}
    
    // Getter์™€ Setter
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getEmail() {
        return email;
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
}

2. Controller ํด๋ž˜์Šค.

@RestController
@RequestMapping("/users")
public class UserController {
    
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        // User ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ (์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜ด)
        User user = new User();
        user.setId(id);
        user.setName("Kobe");
        user.setEmail("kobe@example.com");
        
        // ์ด ๊ฐ์ฒด๋Š” ์ž๋™์œผ๋กœ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜๋จ.
        return user;
    }
}

3๏ธโƒฃ ๋™์ž‘ ์›๋ฆฌ.

1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ.

  • ํด๋ผ์ด์–ธํŠธ /users/1 ๊ณผ ๊ฐ™์ด ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, Spring์€ ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋งคํ•‘๋œ getUserById ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

2. Java ๊ฐ์ฒด ๋ฐ˜ํ™˜.

  • ์ด ๋ฉ”์„œ๋“œ๋Š” User ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3. ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜.

  • Spring์€ @RestController ๋˜๋Š” @ResponseBody๋ฅผ ๋ณด๊ณ , User ๊ฐ์ฒด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋•Œ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ getter ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๊ฐ’์„ ์ถ”์ถœํ•˜๊ณ , ์ด๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ™‹โ€โ™‚๏ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด์ 

4. ํด๋ผ์ด์–ธํŠธ์— JSON ์‘๋‹ต.

  • ์ง๋ ฌํ™”๋œ JSON ๋ฐ์ดํ„ฐ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ›๋Š” JSON

{
    "id": 1,
    "name": "Kobe",
    "email": "kobe@example.com"
}

4๏ธโƒฃ ์ฃผ์˜ ์‚ฌํ•ญ.

  • ๊ฐ์ฒด์— getter๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.
    • Jackson์€ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ธฐ๋ณธ์ ์œผ๋กœ getter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ getter ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ.
    • ๊ฐ์ฒด๊ฐ€ null์ด๊ฑฐ๋‚˜, ํŠน์ • ํ•„๋“œ๊ฐ€ null์ธ ๊ฒฝ์šฐ ๊ทธ ํ•„๋“œ๋Š” JSON์— ํฌํ•จ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ null๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ์„ค์ •.
    • ํ•„์š”์— ๋”ฐ๋ผ Jackson์˜ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ๋ฐฉ์‹์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•„๋“œ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํŠน์ • ํ•„๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” @JsonProperty, @JsonIgnore ๊ฐ™์€ Jackson ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5๏ธโƒฃ ์š”์•ฝ.

  • Java ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋กœ ๊ตฌํ˜„ํ•œ ํ›„ Controller์—์„œ getter๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, Spring์€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Spring์˜ Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ์„ค์ • ์—†์ด๋„ ๊ฐ์ฒด์˜ getter๋ฅผ ํ†ตํ•ด JSON์œผ๋กœ ์ง๋ ฌํ™”๋ฉ๋‹ˆ๋‹ค.