Jackson ObjectMapper

Jackson & ObjectMapper

  • ๋‹จ์–ด ๋œปํ’€์ด๋ฅผ ํ•ด๋ณด๋ฉด, ObjectMapper๋ž€ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•œ๋‹ค๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ๋งคํ•‘์ด ์™œ ํ•„์š”ํ• ๊นŒ? ์งˆ๋ฌธ์„ ๋ฐ”๊ฟ”์„œ, ๋งคํ•‘์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์€ ์–ด๋–ค ์ƒํ™ฉ์ผ๊นŒ?

  • ๋งคํ•‘์ด ํ•„์š”ํ•œ ์ƒํ™ฉ : ๋‘ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ์„œ๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•  ์ƒํ™ฉ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์–‘์ž ๊ฐ„์— Tierํ˜น layer๊ฐ€ ๋‹ค๋ฅธ ์ƒํ™ฉ์ด๋ผ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ผ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ ์˜ˆ ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ F/E์™€ B/E๊ฐ„์˜ ํ†ต์‹ ์ƒํ™ฉ์ผ ๊ฒƒ์ด๊ณ . F/E์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋กœ๋Š” Javascript๊ฐ€ ์žˆ๊ณ , B/E๋Š” Java๋‚˜ Python, PHP ๋“ฑ๋“ฑ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

  • ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฒฐ๊ตญ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ์–ธ์–ด์ฐจ์ด์— ์˜ํ•œ ๊ฒƒ์ผ๊นŒ? ๋ฌผ๋ก  ๊ทธ๋ ‡๊ฒŒ ๋‹จ์ •์ง€์„ ์ˆ˜๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ ๊ฐ ์–ธ์–ด๋ณ„ ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ณ  ์„ ํ˜ธ๋˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋‹ค๋ฅผ ๊ฒƒ์ด๋‹ค. ์–ธ์–ด๋ณ„๋กœ ์ง€ํ–ฅํ•˜๋Š” ์ฒ ํ•™์ด ๋‹ค๋ฅด๊ณ , ๊ตฌํ˜„๋œ ๋ฐฉ์‹๋„ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์•„๋ฌดํŠผ, ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋‹ค์‹œ F/E์™€ B/E๋กœ ๋Œ์•„๊ฐ€์„œ, F/E๋Š” JS, B/E๋Š” Java๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜์ž.

  • Javascript์˜ ๊ฒฝ์šฐ ๊ฐ€์žฅ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐํƒ€์ž…์œผ๋กœ json์ด ์žˆ๊ณ , java์—์„œ๋Š” Map์ด๋‚˜ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ DTO๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Jasckson์€ Json๊ณผ dto(ํ˜น์€ map)๊ฐ„์˜ ๋งคํ•‘์„ ๋„์™€์ฃผ๊ฒŒ ๋œ๋‹ค.

  • ๊ทธ ์ „์—, HTTP ํ†ต์‹ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ์—๋Š” ์ง๋ ฌํ™”/ ์—ญ์ง๋ ฌํ™”์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํƒ€์ž… ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ json์ด๊ธฐ๋„ ํ•˜๋‹ค. HTTP๋ฅผ ํ†ตํ•ด์„œ๋Š” ๊ฒฐ๊ตญ String ๋ฐ์ดํ„ฐ๋“ค์ด ์™”๋‹ค๊ฐ”๋‹ค ํ• ํ…๋ฐ, F/E์—์„œ B/E๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด ๋‹จ์ˆœ String์ธ ๋ฐ์ดํ„ฐ๋ฅผ Java์— ๊ฐ์ฒดํ™”๋ฅผ ์‹œ์ผœ์ค˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋Œ€๋กœ Java์—์„œ ๊ฐ์ฒดํ™”๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ HTTP๋กœ ๋ณด๋‚ด๋ ค๋ฉด Stringํ™”ํ•ด์„œ JSON์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณด๋‚ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์ด ์ž‘์—…์„ Jackson์˜ ObjectMapper๊ฐ€ ์•„์ฃผ ๋งŽ์ด ๋„์™€์ค€๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด Java์—์„œ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑํ•œ DTO๊ฐ์ฒด๋ฅผ JSON ๊ธฐ๋ฐ˜์˜ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋ ค๋Š” ์ž‘์—…์„ ์ง์ ‘ ํ•˜๋ ค๋ฉด, ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํœด๋จผ์—๋Ÿฌ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์ง„๋‹ค. double quote ์ง€์˜ฅ์— ๋น ์ ธ์„œ ํ—ˆ์šฐ์ ๊ฑฐ๋ฆด ํ™•๋ฅ ์ด ๋†’๋‹ค... ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ์˜ ObjectMapper๋Š” ๊ทธ๊ฒƒ์„ ์ž๋™ํ™”ํ•ด์คฌ๋‹ค(๋ˆ„๊ตฐ๊ฐ€์˜ ํ”ผ๋•€์–ด๋ฆฐ ๋…ธ๋ ฅ์˜ ๊ฒฐ๊ณผ์ผ ๊ฒƒ์ด๋‹ค.). ๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋กœ JSON(๋ฌธ์ž์—ด)์„ Java์˜ DTO(๊ฐ์ฒด)๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

  • ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ๋ณด๋”๋ผ๋„ ๊ต‰์žฅํžˆ ํ™œ์šฉ์„ฑ์ด ๋†’๊ณ  ์‚ฌ์šฉํ•  ํ™•๋ฅ ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์—, Spring Web ์˜์กด์„ฑ์— Jackson์„ ํฌํ•จ์‹œ์ผฐ๋‹ค. Web์„ ์‚ฌ์šฉํ•˜๋Š” application์ด๋ผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ์•„๋ฌดํŠผ Spring web์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด ๋”ฐ๋กœ Jackson์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋‹ˆ ๊ผญ ๊ธฐ์–ตํ•˜์ž.

  • ์ฐธ๊ณ ๋กœ Jackson์€ JSON๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, XML/YAML/CSV ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

ObjectMapper

  • ObjectMapper์˜ ์—ญํ• ์€ ๋‹ค์‹œํ•œ๋ฒˆ ๋งํ•˜์ง€๋งŒ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”๋ฅผ ๋•๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”ํ•˜๊ณ , ์ „์†ก๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ๋งž์€ ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ์—ญ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ณต์›ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

@JsonProperty

  • jackson์„ ์‚ฌ์šฉํ•ด์„œ layer ๊ฐ„ ํ†ต์‹ ์„ ํ•˜๋‹ค๋ณด๋ฉด, json์˜ ํ‚ค๊ฐ’์ด ์• ๋งคํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. F/E์—์„œ๋Š” a๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— a๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ณด๋‚ด์ง€๋งŒ, B/E์—์„œ๋Š” a๋ผ๋Š” ์ด๋ฆ„์ด ์ด๋ฏธ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— aa๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ”์„œ ๋งคํ•‘์„ ํ•ด์•ผํ•  ๋•Œ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

  • ์•„๋‹ˆ๋ฉด B/E์—์„œ๋„ ๋น„์ฆˆ๋‹ˆ์Šค ๋ ˆ์ด์–ด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ์ด์–ด์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๊ฒฝ์šฐ์—๋„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ ๋ช…์ด ๋ง˜์— ๋“ค์ง€ ์•Š๊ฑฐ๋‚˜, ์ปฌ๋Ÿผ๋ช…์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— @JsonProperty๊ฐ€ ์œ ์šฉํ•˜๋‹ค.

  • ์„œ๋ก ์ด ๊ธธ์—ˆ์ง€๋งŒ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, Java ๊ธฐ์ค€์œผ๋กœ Dto์˜ ํ•„๋“œ๋ช…์ด a์ด๋”๋ผ๋„ @JsonProperty๋ฅผ ์‚ฌ์šฉํ•ด์„œ a-1์œผ๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • ์ด ์™ธ์— ์œ ์šฉํ•œ ์˜ต์…˜์œผ๋กœ @JsonInclude๋„ ์žˆ๋‹ค. jackson์€ ๊ฐ’์˜ ์œ ๋ฌด์™€ ์ƒ๊ด€์—†์ด ๋ชจ๋“  property๋ฅผ serializeํ•˜๋Š” ๊ฒŒ ๊ธฐ๋ณธ๋™์ž‘ ๋ฐฉ์‹์ธ๋ฐ, ์ด annotation์„ ํ†ตํ•ด์„œ serialize์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด @JsonInclude(JsonInclude.Include.NON_NULL)์˜ ๊ฒฝ์šฐ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ serializeํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋˜๊ฒ ๋‹ค. ์ž์„ธํ•œ ๊ฒƒ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์ž

Last updated