JavaRush /Java Blog /Random-KO /๋ ˆ๋ฒจ 33. ๋ ˆ๋ฒจ ์ฃผ์ œ์— ๋Œ€ํ•œ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€
Afli
๋ ˆ๋ฒจ 41
ะกะฐะฝะบั‚-ะŸะตั‚ะตั€ะฑัƒั€ะณ

๋ ˆ๋ฒจ 33. ๋ ˆ๋ฒจ ์ฃผ์ œ์— ๋Œ€ํ•œ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์งˆ๋ฌธ/์ถ”๊ฐ€/๋น„ํŒ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ๋ฒจ 33. ๋ ˆ๋ฒจ-1 ์ฃผ์ œ์— ๊ด€ํ•œ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€
  1. JSON์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    JSON(JavaScript Object Notation)์€ JavaScript ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

  2. ์ž๋ฐ”์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

    ์ด๋ฆ„์ด ์œ ์‚ฌํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค C์™€ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • Java๋Š” ํ”„๋กœํ† ํƒ€์ž…์— ํด๋ž˜์Šค, JavaScript๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ OOP ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • Java์—๋Š” ์ •์  ํƒ€์ดํ•‘์ด ์žˆ๊ณ  JavaScript์—๋Š” ๋™์  ํƒ€์ดํ•‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • Java๋Š” ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ์—์„œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. JavaScript๋Š” ํŒŒ์ผ์—์„œ ์ง์ ‘ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

    ๋งํฌํ•  ํ…์ŠคํŠธ...

  3. JSON๊ณผ XML์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    JSON์€ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

    XML์€ ๊ตฌ๋ฌธ, ๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ฐ ํ•ด๋‹น ๋ชจ๋ธ์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆํฌ์—… ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

    ๋‘˜ ๋‹ค ๋ฐ์ดํ„ฐ ์ „์†ก์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ๋‘ ํ‘œ์ค€์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ ๊ตฌ๋ฌธ๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  4. JSON ์ž‘์—…์„ ์œ„ํ•œ ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์•Œ๊ณ  ์žˆ๋‚˜์š”?

    ๋ ˆ๋ฒจ 33์—์„œ๋Š” jackson ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ 3๊ฐœ๋ฅผ ๋” ์ œ๊ณตํ•˜๊ณ  ์ด๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    1. FasterXML์˜ ์žญ์Šจ
    2. Yidong Fang์˜ JSON.simple
    3. Google์˜ GSON
    4. ์˜ค๋ผํด์˜ JSONP

    JSON ์ž‘์—…์„ ์œ„ํ•œ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต: JSON.simple, GSON, Jackson ๋ฐ JSONP

  5. XML ์ž‘์—…์„ ์œ„ํ•œ ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

    XML์€ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ํ˜•์‹์ด๋ฏ€๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ์ˆ ์ด ๋”์šฑ ๋‹ค์–‘ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. Java ๊ฐ์ฒด๋ฅผ XML๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    1. JAXB(JDK์˜ J์— ํฌํ•จ๋จ)
    2. ์—‘์Šค์ŠคํŠธ๋ฆผ

    XML ์ž‘์—…์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ๊ฐœ์š” ๋งํฌ: JAVA + XML

  6. ์–ด๋–ค Jackson ์ฃผ์„์„ ์•Œ๊ณ  ์žˆ๋‚˜์š”?

    ๊ฐ•์˜์— ์‚ฌ์šฉ๋œ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    • @JsonAutoDetect - ํด๋ž˜์Šค ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ๊ธ€์„ ์“ฐ๊ฑฐ๋‚˜ ์ฝ์„ ๋•Œ ์ด ํด๋ž˜์Šค์˜ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก Jackson์—๊ฒŒ ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์•ˆ์— ๋งค๊ฐœ๋ณ€์ˆ˜(fieldVisibility = JsonAutoDetect.Visibility.ANY)๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉ๋  ํ•„๋“œ์˜ ๊ฐ€์‹œ์„ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณต๊ฐœ ํ•„๋“œ๋งŒ ์‚ฌ์šฉ๋จ).
    • @JsonIgnore - ํ•„๋“œ ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ/์“ฐ๊ธฐ ์‹œ ์ด ํ•„๋“œ๋ฅผ ๋ฌด์‹œํ•˜๋„๋ก Jackson์—๊ฒŒ ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.
    • @JsonProperty - ํ•„๋“œ, getter ๋˜๋Š” setter ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ง๋ ฌํ™” ์ค‘์— ๋‹ค๋ฅธ ํ•„๋“œ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • @JsonWriteNullProperties - ํด๋ž˜์Šค ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. null์ธ ๊ฐœ์ฒด ํ•„๋“œ๋Š” ๋ฌด์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • @JsonPropertyOrder - ํด๋ž˜์Šค ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. Java ๊ฐ์ฒด์˜ ํ•„๋“œ๊ฐ€ JSON์œผ๋กœ ์ง๋ ฌํ™”๋˜๋Š” ์ˆœ์„œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • @JsonDeserialize - ํ•„๋“œ ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. JSON ๊ฐœ์ฒด๊ฐ€ ์—ญ์ง๋ ฌํ™”๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Java์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๋ชฉ๋ก์ด ๋ฐฐ์—ด๋กœ ์ง๋ ฌํ™”๋˜๊ณ  ์—ญ์ง๋ ฌํ™” ์ค‘์— ์ •ํ™•ํžˆ ์ˆ˜์‹ ํ•˜๋ ค๋Š” ํ•ญ๋ชฉ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์„์ด ํฌํ•จ๋œ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๋งํฌ์ž…๋‹ˆ๋‹ค: Jackson Annotations

  7. ์–ด๋–ค JAXB ์ฃผ์„์„ ์•Œ๊ณ  ์žˆ๋‚˜์š”?

    ๋˜ํ•œ ๊ฐ•์˜์— ์‚ฌ์šฉ๋œ ๋‚ด์šฉ๋งŒ ๋ถ„์„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    • @XmlRootElement - ํด๋ž˜์Šค ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๊ฐ€ ์ตœ์ƒ์œ„ ์š”์†Œ์ผ ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์š”์†Œ๋Š” ๊ทธ ์•ˆ์— ์žˆ์Šต๋‹ˆ๋‹ค.
    • @XmlType - ํด๋ž˜์Šค ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. XML ์Šคํ‚ค๋งˆ์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ ์ˆœ์„œ, ์ด๋ฆ„ ๋“ฑ๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ์†์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • @XmlElement - ํ•„๋“œ ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. XML ์š”์†Œ ์ด๋ฆ„, ๊ธฐ๋ณธ๊ฐ’ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • @XmlAttribute - ํ•„๋“œ ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ํ•„๋“œ๋Š” XML ์†์„ฑ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • @XmlElementWrapper - ํ•„๋“œ ๋˜๋Š” getter ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์š”์†Œ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ํ…Œ๋‘๋ฆฌ ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • @XmlJavaTypeAdapter - ํด๋ž˜์Šค ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋ฅผ ๋งˆ์ƒฌ๋ง/์—ญ๋งˆ์ƒฌ๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ณด์กฐ ์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค๋Š” ๊ด„ํ˜ธ ์•ˆ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    • @XmlEnum - ์—ด๊ฑฐํ˜• ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์•ˆ์— ์—ด๊ฑฐํ˜• ๊ฐ’์ด ํ‘œ์‹œ๋  ์œ ํ˜•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • @XmlEnumValue โ€” ์—ด๊ฑฐํ˜• ๊ฐ’ ์•ž์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์—ด๊ฑฐํ˜• ๊ฐ’์— ๋Œ€ํ•ด ํŠน๋ณ„ํ•œ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์„์ด ์žˆ๋Š” ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๋งํฌ์ž…๋‹ˆ๋‹ค(์ฃผ์„์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๋ฒˆ์—ญ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ •๋ณด๋Š” ์ดํ•ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋Ÿฌ์‹œ์•„์–ด๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ „ํ˜€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค): https:// jaxb.java.net/tutorial/index.html

  8. JSON์—์„œ ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    ์งˆ๋ฌธ์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ƒํ˜ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๋Š” JSON๊ณผ XML์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋งํฌ๋Š” ๋‹ค์Œ ์งˆ๋ฌธ์— ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

  9. JSON๊ณผ XML ์ค‘ ์–ด๋Š ๊ฒƒ์ด ๋” ์ข‹๋‚˜์š”? ์™œ?

    ๋‹ค์Œ์€ JSON๊ณผ XML(JSON๊ณผ XML)์„ ๋น„๊ตํ•˜๋Š” ํ›Œ๋ฅญํ•œ ๊ธฐ์‚ฌ์ž…๋‹ˆ๋‹ค . ๋ฌด์—‡์ด ๋” ์ข‹๋‚˜์š”?

    ์•„๋งˆ๋„ ์–ด๋–ค ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ ํƒํ•  ๋•Œ ์ž‘์—… ์ž์ฒด๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์‚ฌ์šฉ ์‹œ ๋” ํšจ๊ณผ์ ์ธ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ ํƒ์€ ๊ฐœ๋ฐœ์ž์˜ ๊ฐœ์ธ์  ์„ ํ˜ธ๋„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  10. DTO ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

    DTO(Data Transfer Object)๋Š” ์ž‘์—…์„ ์œ„ํ•œ ๋…ผ๋ฆฌ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. DTO๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ๋˜๋Š” ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๊ณ„์ธต ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ •๋ณด๋ฅผ ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ๋ชฉ์ ์ธ ์ •๋ณด ์ €์žฅ์†Œ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ 33. ๋ ˆ๋ฒจ-2 ์ฃผ์ œ์— ๊ด€ํ•œ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€
2016๋…„ 11์›” 10์ผ 15์‹œ 50๋ถ„์— ์—…๋ฐ์ดํŠธ๋จ

๋Œ“๊ธ€์— ๋”ฐ๋ผ ์งˆ๋ฌธ 2๋ฒˆ, 3๋ฒˆ์ด ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION