๐ŸŒฑ Spring Boot ์‹œ์ž‘ํ•˜๊ธฐ - 2. ์ž๋ฐ” ๋ช…๋ช… ๊ทœ์น™ ยท ํด๋ผ์ด์–ธํŠธ & ์„œ๋ฒ„ ยท JSON vs XML

๊น€์„ธํ˜„ยท2025๋…„ 10์›” 22์ผ

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
2/19

๋‚ ์งœ:2025-10-22


ํ•™์Šต ๋ชฉํ‘œ

  • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ช…๋ช… ๊ทœ์น™์„ ์ดํ•ดํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ(Client)์™€ ์„œ๋ฒ„(Server)์˜ ๊ฐœ๋…์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • JSON๊ณผ XML์˜ ๊ตฌ์กฐ์™€ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ช…๋ช… ๊ทœ์น™

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„์—์„œ๋Š” ๊ฐ๊ฐ์˜ ์–ธ์–ด, ํ™˜๊ฒฝ์— ๋งž๋Š” ๋ช…๋ช… ๊ทœ์น™์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๊ทœ์น™๋“ค์€ ํ˜‘์—… ์‹œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ์ผ๊ด€๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋ช…๋ช… ๊ทœ์น™ ์ •๋ฆฌ

๊ทœ์น™์„ค๋ช…์˜ˆ์‹œ
kebab-case๋‹จ์–ด ์‚ฌ์ด๋ฅผ -(๋Œ€์‹œ)๋กœ ์ด์–ด์ค๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž์ž…๋‹ˆ๋‹ค.hello-world, user-profile
PascalCase๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.HelloWorld, UserProfileService
camelCase์ฒซ ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž, ์ดํ›„ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋งŒ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.userName, getUserInfo
snake_case๋‹จ์–ด ์‚ฌ์ด๋ฅผ _(์–ธ๋”๋ฐ”)๋กœ ์ด์–ด์ค๋‹ˆ๋‹ค. ์ฃผ๋กœ Python, DB Table/Column์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.user_name, created_at

์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ช… ๊ทœ์น™

์ž๋ฐ”์—์„œ๋Š” PascalCase์™€ camelCase ๋‘ ๊ฐ€์ง€๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

PascalCase โ€” ํด๋ž˜์Šค ์ด๋ฆ„

public class HelloWorldController {
    // ํด๋ž˜์Šค ์ด๋ฆ„์ด PascalCase ๊ทœ์น™์„ ๋”ฐ๋ฆ„
    }

camelCase โ€” ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ ์ด๋ฆ„

public void leftClick() {}
    public void rightClick() {}
    public void scrollWheel() {}    

โœ… ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ (Client & Server)

  • ๐Ÿ’ฌ Client์™€ Server๋Š” ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)์„ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐœ๋…

  • ํด๋ผ์ด์–ธํŠธ(Client) โ†’ ์š”์ฒญ(Request)์„ ๋ณด๋‚ด๋Š” ์ชฝ
  • ์„œ๋ฒ„(Server) โ†’ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต(Response)์„ ๋ณด๋‚ด๋Š” ์ชฝ

ํด๋ผ์ด์–ธํŠธ = ํ”„๋ก ํŠธ์—”๋“œ, ์„œ๋ฒ„ = ๋ฐฑ์—”๋“œ์ผ๊นŒ?

  • ๊ผญ ๊ทธ๋ ‡์ง„ ์•Š์Šต๋‹ˆ๋‹ค.ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” โ€œ์—ญํ• (Role)โ€์˜ ๊ฐœ๋…์ด๋ฉฐ, ๊ธฐ์ˆ  ์Šคํƒ์ด๋‚˜ ์œ„์น˜์— ๊ณ ์ •๋œ ๊ฐœ๋…์ด ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ์‹œ)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ โ†’ ๋ธŒ๋ผ์šฐ์ €(ํ”„๋ก ํŠธ์—”๋“œ)๊ฐ€ ํด๋ผ์ด์–ธํŠธ

  • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ โ†’ ์„œ๋ฒ„

  • ํ•˜์ง€๋งŒ ์„œ๋ฒ„ A๊ฐ€ ์„œ๋ฒ„ B์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค๋ฉด, ๊ทธ ์ˆœ๊ฐ„ ์„œ๋ฒ„ A๋„ ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ’ฌ ์ฆ‰, โ€œ์š”์ฒญํ•˜๋Š” ์ชฝโ€์€ ํด๋ผ์ด์–ธํŠธ, โ€œ์‘๋‹ตํ•˜๋Š” ์ชฝโ€์€ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.
    ํด๋ผ์ด์–ธํŠธ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!


JSON๊ณผ XML

JSON์ด๋ž€?

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐ์ดํ„ฐ ํฌ๋งท์ž…๋‹ˆ๋‹ค.
    • Key์™€ Value๋กœ ๊ตฌ์„ฑ๋œ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ
    • ์–ธ์–ด๋‚˜ ํ”Œ๋žซํผ์— ์ƒ๊ด€์—†์ด ํ†ต์ผ๋œ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ๊ฐ€๋Šฅ
    • ๊ฐ€๋ณ๊ณ  ๊ฐ€๋…์„ฑ์ด ๋†’์•„ ํ˜„๋Œ€ API ํ†ต์‹ ์— ๋„๋ฆฌ ์‚ฌ์šฉ
    {
    "์ด๋ฆ„": "๊น€์„ธํ˜„",
    "๋‚˜์ด": 26,
    "์‚ฌ๋Š”๊ณณ": "๋™ํƒ„",
    "๊ฐœ๋ฐœ์ž์ธ๊ฐ€": true
    }
Key: ์ด๋ฆ„, ๋‚˜์ด, ์‚ฌ๋Š”๊ณณ, ๊ฐœ๋ฐœ์ž์ธ๊ฐ€
Value: "ํ™๊ธธ๋™", 30, "์„œ์šธ", true

Value์—๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฐ์ฒด(Object) ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "์ด๋ฆ„": "๊น€์„ธํ˜„",
  "๋‚˜์ด": 26,
  "์‚ฌ๋Š”๊ณณ": {
  "์‹œ": "ํ™”์„ฑ์‹œ",
  "๋™": "์ฒญ๊ณ„๋™"
   },
  "๊ฐœ๋ฐœ์ž์ธ๊ฐ€": true
  }

XML์ด๋ž€?

  • XML์€ ๊ณผ๊ฑฐ ์›น ์ดˆ๊ธฐ์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๋˜ ๋ฐ์ดํ„ฐ ํฌ๋งท์ž…๋‹ˆ๋‹ค.

  • ํ•˜์ง€๋งŒ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์šฉ๋Ÿ‰์ด ํฌ๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ํƒœ๊ทธ๊ฐ€ ๋งŽ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ๋•Œ๋ฌธ์— ์š”์ฆ˜์€ JSON์ด ๊ฑฐ์˜ ๋ชจ๋“  ๊ณณ์—์„œ XML์„ ๋Œ€์ฒดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

<root>
    <์ด๋ฆ„>๊น€์„ธํ˜„</์ด๋ฆ„>
    <๋‚˜์ด>26</๋‚˜์ด>
    <์‚ฌ๋Š”๊ณณ>
    <์‹œ>ํ™”์„ฑ์‹œ</์‹œ>
    <๋™>์ฒญ๊ณ„๋™</๋™>
    </์‚ฌ๋Š”๊ณณ>
    <๊ฐœ๋ฐœ์ž์ธ๊ฐ€>true</๊ฐœ๋ฐœ์ž์ธ๊ฐ€>
    </root>

ํ•ต์‹ฌ ๋น„๊ต

ํ•ญ๋ชฉJSONXML
๊ฐ€๋…์„ฑ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์›€๋ณต์žกํ•œ ํƒœ๊ทธ ๊ตฌ์กฐ
๋ฐ์ดํ„ฐ ํฌ๊ธฐ์ž‘์Œํผ
ํƒœ๊ทธ ๊ตฌ์กฐ์—†์Œ์žˆ์Œ
์ฃผ์š” ์‚ฌ์šฉ์ฒ˜๋Œ€๋ถ€๋ถ„์˜ REST API ํ†ต์‹ ๊ณผ๊ฑฐ ์‹œ์Šคํ…œ, ์ผ๋ถ€ ๊ธˆ์œต๊ถŒ
  • JSON์€ ์‚ฌ๋žŒ๊ณผ ๊ธฐ๊ณ„ ๋ชจ๋‘ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ์šฉ๋Ÿ‰์ด ์ž‘๋‹ค.
  • ํ˜„๋Œ€์ ์ธ API ํ†ต์‹ ์˜ ํ‘œ์ค€์€ XML์ด ์•„๋‹Œ JSON์ด๋‹ค.

์ •๋ฆฌ

  • camelCase / PascalCase๋Š” ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ๋ช…๋ช… ๊ทœ์น™
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์—ญํ• (Role)์˜ ๊ฐœ๋… โ€” ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ฃผ์ฒด
  • JSON์€ ๊ฐ€๋ณ๊ณ  ํšจ์œจ์ ์ธ ํ˜„๋Œ€ ์›น ํ†ต์‹ ์˜ ํ‘œ์ค€ ํฌ๋งท
profile
๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ•œ ๊ฑธ์Œ

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