Spring Boot๋ก ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์๋์น ์๊ฒ JSON ์๋ต ํ๋๋ช
์ด ์์๊ณผ ๋ค๋ฅด๊ฒ ์ ๋ฌ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ํนํ boolean ํ์
๋ณ์๋ช
์ ์ฌ์ฉํ ๋ ๋ง์ด ๊ฒช๋ ๋ฌธ์ ๋ค.
์๋ฅผ ๋ค์ด
@Getter
public class UserDto {
private boolean isActive; // ํ์ฑ ์ํ
}Java์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ UserDto๋ฅผ ์ ์กํ ๋ {“isActive”: true} ๊ฐ ์๋ตํ ๊ฒ์ด๋ผ๊ณ ์์์ ํ ๊ฒ์ด๋ค. ํ์ง๋ง ์ค์ ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ตํ๋ค.
{
"active": true
}JSON์ด๋ผ? ‘is’๋ ๋์ฒด ์ด๋๋ก ์ฌ๋ผ์ก๋จ ๋ง์ธ๊ฐ? ์ด ํ์์ ๋ชจ๋ฅด๊ณ ๋์ด๊ฐ๋ฉด ํ๋ฐํธ์๋์์ ์ฐ๋ ๊ณผ์ ์์ ๋ถํ์ํ ์ปค๋ฎค๋์ผ์ด์
๋น์ฉ์ด ๋ฐ์ํ ์ ์๋ค.
์ด๋ฒ ํฌ์คํ
์์๋ boolean ํ๋์ ‘is’๊ฐ ์ฌ๋ผ์ง๋ ์ด์ ์ ํด๊ฒฐ๋ฒ์ ์์๋ณด๊ณ Primitive Type(boolean)๊ณผ Wrapper Class(Boolean)๋ฅผ ์ฌ์ฉํ ๋์ ๊ฒฐ์ ์ ์ธ ์ฐจ์ด์ ๋ํด์ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
boolean ํ๋์ ‘is’๊ฐ ์ฌ๋ผ์ง๋ ์ด์
Jackson ์ด๋ Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ‘JavaBeans ๊ท์ฝ’์ ๋ฐ๋ฅด๋๋ฐ ์ด ๊ท์ฝ์ด booleanํ์
์ ๋ค๋ฃจ๋ ๋ฐฉ์์ด ์กฐ๊ธ ๋
ํนํ๋ค. Jackson์ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ ํ ๋ ํ๋ ์์ฒด๊ฐ ์๋ Getter๋ฉ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ฆ์ ๊ฒฐ์ ํ๋ค. ‘JavaBeans ๊ท์ฝ’์ ๋ฐ๋ฅด๋ฉด boolean ํ์
์ Getter๋ is๋ฅผ ์ ๋์ฌ๋ก ์ฌ์ฉํ๋๋ฐ Jackson์ ์ด is๋ฅผ ํ๋ ์ด๋ฆ์ด ์๋ ๊ท์ฝ์์ ์ ๋์ฌ๋ก ํ๋จํ์ฌ ์ ๊ฑฐํ๊ณ ๋๋จธ์ง ์ด๋ฆ์ธ ‘active’๋ง ์ฌ์ฉํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ง์ฝ Lombok์ ์ฌ์ฉํ์ฌ @Getter๋ฅผ ์ง์ ํ์ ๋ boolean ํ์
์ ์ฌ์ฉํ๋ค๋ฉด isXXX()์ ๊ฐ์ด ‘is’๊ฐ ์ ๋์ฌ๋ก ๋ถ๊ฒ ๋๋ค.
ํ์ง๋ง Primitive Type์ธ boolean๊ณผ Wrapper Class์ธ Boolean ์ค์ ์ด๋ค ํ์
์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ์๋ค.
| ํ์ | ํ๋๋ช | ์์ฑ๋๋ Getter | JSON ๊ฒฐ๊ณผ |
| boolean (primitive) | isActive | isActive() | active |
| Boolean (wrapper) | isActive | getIsActive() | isActive |
ํด๊ฒฐ ๋ฐฉ๋ฒ
- Wrapper ํด๋์ค ํ์
(Boolean) ์ฌ์ฉ
- ๊ธฐ๋ณธํ์ธ boolean ํ์ ์ ์ฌ์ฉํ๋ ๋์ ์ Boolean์ ์ฌ์ฉํ๋ฉด lombok์ getIsActive()๋ฅผ ์์ฑํ๊ณ Jackson์ isActive๋ผ๋ ์ด๋ฆ์ ๊ทธ๋๋ก ์ ์งํ ์ ์๋ค. ๋ฌผ๋ก Boolean์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ null ์ฒ๋ฆฌ๋ฅผ ์ ํด์ค์ผ ํ๋ค.
private Boolean isActive;Java- @JsonProperty ์ด๋
ธํ
์ด์
ํ์ฉ
- ํ์ ๊ณผ ์๊ด์์ด JSON ํค ๊ฐ์ ๊ฐ์ ๋ก ์ง์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ทธ๋ฅ ์ด๊ฒ์ ๊ฒ ์๊ฐํ ๊ฒ์ด ๊ฐ์ฅ ๊น๋ํ๋ค.
@JsonProperty("isActive")
private boolean isActive;Java- ํ๋๋ช
์์ ‘is’ ์ ๊ฑฐํ๊ธฐ
- ์ ์ด์ ํ๋๋ช ์ ‘active’๋ก ์ง๊ณ ํ์ํ ๋๋ง is๋ฅผ ๋ถ์ฌ์ ์ฝ๋ ๋ฐฉ์์ด๋ค. ์๋ฐ ํ์ค์ ๊ฐ์ฅ ๋ถํฉํ๋ ๊น๋ํ ๋ค์ด๋ฐ ๋ฐฉ์์ด๋ค.
private boolean active;
// Getter๋ isActive()๊ฐ ๋๋ฉด JSON์ {"active": true}Java- Gson ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ (์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ๊ฒ ๋น์ถ!!!)
- Gson์ ๋ฆฌํ๋ ์ ๋ฐฉ์์ผ๋ก DTO์ ๋ณ์ ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ‘is’๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- ํ์ง๋ง DTO๋ฅผ ์ง๋ ฌํ, ์ญ์ง๋ ฌํ๊ฐ ํ์ํ ๊ณณ์์ jackson -> gson์ผ๋ก ๋ณ๊ฒฝํ๋ ์ผ์ ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ๋ ํฐ ํ๊ตญ์ด ๋ ๊ฒ ๊ฐ๋ค.
| Jackson(Default) | Gson | |
| ๊ธฐ๋ณธ์ ๊ทผ ๋ฐฉ์ | Getter ๋ฉ์๋ ๊ธฐ์ค | ํ๋(๋ณ์๋ช ) ๊ธฐ์ค |
| JavaBeans ๊ท์ฝ | ์๊ฒฉํ ๋ฐ๋ฆ (is ์ ๊ฑฐ) | ๋ฐ๋ฅด์ง ์์ |
| isActive ์ฒ๋ฆฌ ๊ฒฐ๊ณผ | active | isActive |
DTO ์์ boolean ํ์ ์ ํ๋์ ๊ฒฝ์ฐ ‘is’๋ฅผ ๋ถ์ด์ง ์๋ ๊ฒ์ด ์๋ฐ ํ์ค์ ๋ถํฉํ๋ ๋ค์ด๋ฐ ๋ฐฉ์์ด๊ณ ์ด๋ฌํ is๊ฐ ์ฌ๋ผ์ง๋ ์ด์๋ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ ๊น๋ํ ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ๋ค.
๋ถ๋์ด ํ๊ฒ isActive์ ๊ฐ์ด ๋ถ์ฌ์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด @JsonProperty ์ด๋ ธํ ์ด์ ์ผ๋ก ํ์คํ ์ด๋ฆ์ ์ ํด ์ฃผ๋๋ก ํ์.
boolean ํ๋์ is๊ฐ ์ ์ฌ๋ผ์ง๋์ง ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํ๋ฉด ๋๋์ง ์ ๋ฆฌํด ๋ณด์๋๋ฐ, ๋ด์ฉ์ ์์ฃผ ๊ฐ๋จํ์ง๋ง ์์นซํ๋ฉด ์ฝ์ง์ ๊ธธ๋ก ๊ฐ ์๋ ์๋ ํฌ์ธํธ์ด๋ ์์๋ฌ์ ๋์ ๊ฑด ์์ ๊ฒ ๊ฐ๋ค.
์ถ๊ฐ)
mongodb์ ์ ์ฅ๋ Document์ boolean ํ์
์ผ๋ก isXXX ํ๋๋ฅผ ์ง์ ํด์ ํ
์คํธ ํด ๋ณด์๋ค. ๊ฒฐ๊ณผ๋ ์ ์์ ์ผ๋ก isXXX ํ๋๋ช
์ผ๋ก ์
๋ ฅ๋์๋ค. ์ด์ ๋ mongodb์ ์ ์ฅํ๋ ๊ฒ์ Spring Data MongoDB์ ์์ญ์ด๋ผ ๋์ ๋ฐฉ์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
Spring Data MongoDB๋ ๊ธฐ๋ณธ์ ์ผ๋ก Getter๊ฐ ์๋ Reflection์ ์ฌ์ฉํ์ฌ ๋ณ์ ์์ฒด์ ์ ๊ทผํ์ฌ ์ง๋ ฌํ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๋ค๊ณ ํ๋๋ผ๋ isXXX์ ๊ฐ์ด ๊ผญ ‘is’๋ฅผ ๋ถ์ฌ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๊ทธ๋ฅ ๊ณ ๋ฏผ์์ด is๋ฅผ ๋ผ๊ณ ์ด๋ฆ์ ์ ์ํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค๋ ์๊ฐ์ด๋ค.
