๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project ESG+AI/Tech Basics

11์ผ์ฐจ. IT ๊ฐœ๋… ์ •๋ฆฌ

by GreenJin_S2 2025. 10. 23.

 

 

์–ดํŠธ๋ฆฌ๋ทฐํŠธ -๋ฐ์ดํ„ฐ ๊ทธ ์ž์ฒด

ํ”„๋กœํผํ‹ฐ-๋‹ด๋Š” ๊ทธ๋ฆ‡

 

 

HTML Attributes

 

๊ด„ํ˜ธ์˜ ์ข…๋ฅ˜

<>

() : ํ•จ์ˆ˜, ์กฐ๊ฑด์‹

{}

[]

 

๐Ÿ“‹ ์š”์•ฝ ํ‘œ

๊ด„ํ˜ธ ๋ช…์นญ ์ฃผ์š” ์“ฐ์ž„์ƒˆ
() ์†Œ๊ด„ํ˜ธ ํ•จ์ˆ˜, ์กฐ๊ฑด์‹, ์ˆ˜ํ•™ ์—ฐ์‚ฐ
{} ์ค‘๊ด„ํ˜ธ ์ฝ”๋“œ ๋ธ”๋ก, ์ง‘ํ•ฉ
[] ๋Œ€๊ด„ํ˜ธ ๋ฐฐ์—ด, ์ธ๋ฑ์Šค, ๊ตฌ๊ฐ„, ์ธ์šฉ
<> ๊บพ์‡ ๊ด„ํ˜ธ HTML ํƒœ๊ทธ, ์ œ๋„ค๋ฆญ, ๋น„๊ต์—ฐ์‚ฐ

 

 

์•ก์…˜ ์–ดํŠธ๋ฆฌ ๋ทฐํŠธ

 

 

๐Ÿงฉ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ‘๋‹คํ˜•์„ฑ(Polymorphism)’์— ์†ํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.


โœ… ๊ฐ์ฒด์ง€ํ–ฅ์˜ 4๋Œ€ ํŠน์ง• ๋ณต์Šต

๊ตฌ๋ถ„์˜๋ฏธํ•ต์‹ฌ ํ‚ค์›Œ๋“œ
1. ์บก์Аํ™”(Encapsulation) ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊น€ ์ •๋ณด ์€๋‹‰, ์ ‘๊ทผ์ œ์–ด์ž
2. ์ƒ์†(Inheritance) ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ฆ ์žฌ์‚ฌ์šฉ์„ฑ
3. ๋‹คํ˜•์„ฑ(Polymorphism) ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ ์˜ค๋ฒ„๋ผ์ด๋”ฉ, ์˜ค๋ฒ„๋กœ๋”ฉ
4. ์ถ”์ƒํ™”(Abstraction) ๊ณตํ†ต๋œ ํŠน์ง•๋งŒ ๋ฝ‘์•„๋‚ด์„œ ๋‹จ์ˆœํ™” ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒ ํด๋ž˜์Šค

๐Ÿง  ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)์ด๋ž€?

์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ‘์ž์‹ ํด๋ž˜์Šค’์—์„œ ์žฌ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

์ฆ‰, ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋‹ค์‹œ ๊ตฌํ˜„(override) ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 


“์–ดํŠธ๋ฆฌ๋ทฐํŠธ(Attribute)”์™€ “ํ”„๋กœํผํ‹ฐ(Property)”

 

 

“์–ดํŠธ๋ฆฌ๋ทฐํŠธ(Attribute)”์™€ “ํ”„๋กœํผํ‹ฐ(Property)”๋Š” ๋น„์Šทํ•˜๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ, ๋งฅ๋ฝ์— ๋”ฐ๋ผ ์˜๋ฏธ๊ฐ€ ์กฐ๊ธˆ ๋‹ฌ๋ผ์š”. ์ฃผ๋กœ **ํ”„๋กœ๊ทธ๋ž˜๋ฐ(ํŠนํžˆ ๊ฐ์ฒด์ง€ํ–ฅ, ์›น, C# ๋“ฑ)**์—์„œ ์“ฐ์ด๋Š” ๊ฐœ๋…์œผ๋กœ ์„ค๋ช…ํ• ๊ฒŒ์š”.


1๏ธโƒฃ ํ”„๋กœํผํ‹ฐ(Property)

  • ์ •์˜: ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์ด๋‚˜ ์ƒํƒœ(state)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜ ๊ฐ™์€ ๊ฒƒ.
  • ์šฉ๋„: ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต.
  • ์–ธ์–ด ์˜ˆ์‹œ: C#, JavaScript, Python
  • ํŠน์ง•:
    • ์ ‘๊ทผ์ž(getter)์™€ ์„ค์ •์ž(setter)๊ฐ€ ์žˆ์Œ.
    • ์™ธ๋ถ€์—์„œ ์ง์ ‘ ํ•„๋“œ๋ฅผ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ , ์ œ์–ด ๊ฐ€๋Šฅ.

์˜ˆ์‹œ (C#):

 
class Person { private string name; // ์‹ค์ œ ๊ฐ’ public string Name // ํ”„๋กœํผํ‹ฐ { get { return name; } set { name = value; } } } Person p = new Person(); p.Name = "Alice"; // setter ํ˜ธ์ถœ Console.WriteLine(p.Name); // getter ํ˜ธ์ถœ

์—ฌ๊ธฐ์„œ Name์ด ํ”„๋กœํผํ‹ฐ, name์ด ํ•„๋“œ(field) ์ž…๋‹ˆ๋‹ค.


2๏ธโƒฃ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ(Attribute)

  • ์ •์˜: **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(metadata)**๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ์š”์†Œ๋กœ, ์ฝ”๋“œ๋‚˜ ๊ฐ์ฒด์— ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ๋ถ™์ผ ๋•Œ ์‚ฌ์šฉ.
  • ์šฉ๋„: ์ปดํŒŒ์ผ๋Ÿฌ, ๋Ÿฐํƒ€์ž„, ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•  ๋•Œ ์‚ฌ์šฉ.
  • ์–ธ์–ด ์˜ˆ์‹œ: C#, Python ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ, HTML
  • ํŠน์ง•:
    • ์ฃผ๋กœ ์ฝ”๋“œ์— ๋ถ™์ด๋Š” ์ฃผ์„์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ •๋ณด
    • ์‹คํ–‰ ์‹œ ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ์Œ
    • ๊ฐ์ฒด ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ์†์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด

์˜ˆ์‹œ (C#):

 
[Serializable] // ์ด ํด๋ž˜์Šค๋Š” ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ class Person { public string Name { get; set; } public int Age { get; set; } }

์˜ˆ์‹œ (HTML):

 
<img src="cat.jpg" alt="๊ท€์—ฌ์šด ๊ณ ์–‘์ด" width="200">
  • ์—ฌ๊ธฐ์„œ src, alt, width๊ฐ€ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ.
  • HTML ํƒœ๊ทธ์˜ ์†์„ฑ๊ฐ’์ด๋ผ๋Š” ์ ์—์„œ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ๋น„์Šทํ•œ ๊ฐœ๋….

๐Ÿ”น ํ•ต์‹ฌ ์ฐจ์ด

๊ตฌ๋ถ„ ํ”„๋กœํผํ‹ฐ(Property) ์–ดํŠธ๋ฆฌ๋ทฐํŠธ(Attribute)
์˜๋ฏธ ๊ฐ์ฒด์˜ ์ƒํƒœ/๊ฐ’ ๊ฐ์ฒด๋‚˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€์ •๋ณด
๋™์ž‘ ๊ฐ’ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ฝ”๋“œ ๋™์ž‘ ์ œ์–ด, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ณต
์กด์žฌ ์œ„์น˜ ๊ฐ์ฒด ๋‚ด๋ถ€ ๊ฐ์ฒด/ํด๋ž˜์Šค/ํ•„๋“œ/๋ฉ”์„œ๋“œ ๋“ฑ
์˜ˆ์‹œ Person.Name = "Alice" [Serializable], HTML์˜ alt="..."

์–ดํŠธ๋ฆฌ๋ทฐํŠธ : ์•ˆ ๋ฐ”๋€Œ๋Š” ๊ฑฐ

ํ”„๋กœํผํ‹ฐ: ๋ฐ”๋€œ


! ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ **์ธํ„ฐํŽ˜์ด์Šค(Interface)**์™€ **ํด๋ž˜์Šค(Class)**๋Š” ์„œ๋กœ ๊ด€๋ จ์ด ๊นŠ์ง€๋งŒ, ๋ชฉ์ ๊ณผ ์—ญํ• ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ž์„ธํžˆ ๋น„๊ตํ•ด๋ณผ๊ฒŒ์š”.


1๏ธโƒฃ ํด๋ž˜์Šค(Class)

  • ์ •์˜: ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ‹€(template) ๋˜๋Š” ์ฒญ์‚ฌ์ง„ ์—ญํ• ์„ ํ•˜๋Š” ๊ตฌ์กฐ
  • ์šฉ๋„: ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ƒํƒœ(state)์™€ ๋™์ž‘(behavior)์„ ๊ตฌํ˜„
  • ๊ตฌ์„ฑ์š”์†Œ:
    • ํ•„๋“œ(Field) → ์ƒํƒœ ์ €์žฅ
    • ๋ฉ”์„œ๋“œ(Method) → ๋™์ž‘ ์ •์˜
    • ์ƒ์„ฑ์ž(Constructor) → ๊ฐ์ฒด ์ดˆ๊ธฐํ™”
  • ํŠน์ง•:
    • ์ƒํƒœ์™€ ๋™์ž‘์„ ๋ชจ๋‘ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
    • ๋‹จ๋…์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ๊ฐ€๋Šฅ
    • ์ƒ์† ๊ฐ€๋Šฅ

์˜ˆ์‹œ (Java):

 
class Car { String color; // ํ•„๋“œ void drive() { // ๋ฉ”์„œ๋“œ System.out.println("์ž๋™์ฐจ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค."); } } Car myCar = new Car(); // ๊ฐ์ฒด ์ƒ์„ฑ myCar.drive(); // ๋™์ž‘ ํ˜ธ์ถœ

2๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค(Interface)

  • ์ •์˜: ํด๋ž˜์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ง‘ํ•ฉ๋งŒ ์ •์˜ํ•œ ๊ตฌ์กฐ
  • ์šฉ๋„: ํด๋ž˜์Šค๊ฐ€ **์–ด๋–ค ๋™์ž‘์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ทœ์•ฝ(Contract)**์„ ๋ช…์‹œ
  • ๊ตฌ์„ฑ์š”์†Œ:
    • ์ถ”์ƒ ๋ฉ”์„œ๋“œ(Abstract Method)๋งŒ ๊ฐ€์ง (Java 8 ์ดํ›„ default, static ๋ฉ”์„œ๋“œ ๊ฐ€๋Šฅ)
    • ํ•„๋“œ๋Š” ๋ณดํ†ต ์ƒ์ˆ˜(final static)๋งŒ ๊ฐ€๋Šฅ
  • ํŠน์ง•:
    • ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€ (๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์‚ฌ์šฉ)
    • ๋‹ค์ค‘ ์ƒ์† ํ—ˆ์šฉ → ์—ฌ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๊ฐ€๋Šฅ
    • ๊ตฌํ˜„์„ ๊ฐ•์ œํ•จ → ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

์˜ˆ์‹œ (Java):

 
interface Drivable { void drive(); // ๊ตฌํ˜„ X, ๊ทœ์•ฝ๋งŒ } class Car implements Drivable { public void drive() { // ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ System.out.println("์ž๋™์ฐจ๊ฐ€ ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค."); } }

3๏ธโƒฃ ํ•ต์‹ฌ ์ฐจ์ด

๊ตฌ๋ถ„ํด๋ž˜์Šค(Class)์ธํ„ฐํŽ˜์ด์Šค(Interface)
๋ชฉ์  ๊ฐ์ฒด ์ƒ์„ฑ, ์ƒํƒœ์™€ ๋™์ž‘ ๊ตฌํ˜„ ๋™์ž‘ ๊ทœ์•ฝ ์ •์˜, ๊ฐ•์ œ ๊ตฌํ˜„
์ƒํƒœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ (ํ•„๋“œ) ์ผ๋ฐ˜์ ์œผ๋กœ ์—†์Œ (์ƒ์ˆ˜๋งŒ ๊ฐ€๋Šฅ)
๋™์ž‘ ๊ตฌํ˜„ ๊ฐ€๋Šฅ ๊ตฌํ˜„ ๋ถˆ๊ฐ€ (Java 8 ์ดํ›„ default ๊ฐ€๋Šฅ)
์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ ์ง์ ‘ ์ƒ์„ฑ ๋ถˆ๊ฐ€
์ƒ์†/๊ตฌํ˜„ ๋‹จ์ผ ์ƒ์† ๊ฐ€๋Šฅ ๋‹ค์ค‘ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
์˜ˆ์‹œ Car, Person Drivable, Serializable

๐Ÿ’ก ํ•œ ์ค„ ์š”์•ฝ:
ํด๋ž˜์Šค = “์‹ค์ฒด ์žˆ๋Š” ์„ค๊ณ„๋„ + ๋™์ž‘”, ์ธํ„ฐํŽ˜์ด์Šค = “๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ทœ์น™๋งŒ”

 

 

 

 


1๏ธโƒฃ CRUD๋ž€?

CRUD๋Š” ์˜์–ด ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๋”ฐ์„œ ๋งŒ๋“  ์•ฝ์ž์ž…๋‹ˆ๋‹ค:

์•ฝ์ž์˜๋ฏธ์„ค๋ช…
C Create ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (INSERT)
R Read ๋ฐ์ดํ„ฐ ์กฐํšŒ (SELECT)
U Update ๋ฐ์ดํ„ฐ ์ˆ˜์ • (UPDATE)
D Delete ๋ฐ์ดํ„ฐ ์‚ญ์ œ (DELETE)

์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ , ์ฝ๊ณ , ์ˆ˜์ •ํ•˜๊ณ , ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ๋งํ•ด์š”.


2๏ธโƒฃ ์Šคํ”„๋ง์—์„œ CRUD ๊ตฌํ˜„

์Šคํ”„๋ง์—์„œ๋Š” ๋ณดํ†ต Spring Data JPA๋‚˜ MyBatis ๊ฐ™์€ ORM์„ ์‚ฌ์šฉํ•ด์„œ ์‰ฝ๊ฒŒ CRUD๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์˜ˆ์‹œ: Spring Data JPA

 

3๏ธโƒฃ ํ•ต์‹ฌ ์š”์•ฝ

  • CRUD = ๋ฐ์ดํ„ฐ ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ
  • ์Šคํ”„๋ง์—์„œ๋Š” JPA Repository๋‚˜ MyBatis Mapper๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ์‹ค์ œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” Controller → Service → Repository ๊ตฌ์กฐ๋กœ CRUD๋ฅผ ์ฒ˜๋ฆฌ

๐Ÿ’ก ํ•œ ์ค„ ์š”์•ฝ:
“CRUD = DB์—์„œ ๋ฐ์ดํ„ฐ ๋งŒ๋“ค๊ณ , ๋ณด๊ณ , ๋ฐ”๊พธ๊ณ , ์ง€์šฐ๋Š” ๊ธฐ๋ณธ ์ž‘์—…”

 


1๏ธโƒฃ CQRS๋ž€?

CQRS = Command Query Responsibility Segregation
ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•˜๋ฉด **“๋ช…๋ น๊ณผ ์กฐํšŒ ์ฑ…์ž„ ๋ถ„๋ฆฌ”**์˜ˆ์š”.

  • Command → ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ(Create/Update/Delete)
  • Query → ๋ฐ์ดํ„ฐ ์กฐํšŒ(Read)

์ฆ‰, ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ์„ค๊ณ„ํ•˜๋Š” ํŒจํ„ด์ด์—์š”.


2๏ธโƒฃ ๊ธฐ์กด CRUD vs CQRS

๊ตฌ๋ถ„CRUDCQRS
๊ตฌ์กฐ ํ•˜๋‚˜์˜ ๋ชจ๋ธ/ํ…Œ์ด๋ธ”์—์„œ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋ชจ๋‘ ์ฒ˜๋ฆฌ ์ฝ๊ธฐ(Read) ๋ชจ๋ธ๊ณผ ์“ฐ๊ธฐ(Command) ๋ชจ๋ธ ๋ถ„๋ฆฌ
์žฅ์  ๋‹จ์ˆœ, ์ง๊ด€์  ์„ฑ๋Šฅ ์ตœ์ ํ™”, ํ™•์žฅ์„ฑ, ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ์ฒ˜๋ฆฌ ์šฉ์ด
๋‹จ์  ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋กœ์ง์ด ์„ž์—ฌ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Œ ์„ค๊ณ„ ๋ณต์žก, ๊ตฌํ˜„ ๋‚œ์ด๋„ ↑

3๏ธโƒฃ CQRS ์žฅ์ 

  1. ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ฐ€๋Šฅ
    • ์กฐํšŒ์šฉ ๋ชจ๋ธ๊ณผ ์“ฐ๊ธฐ์šฉ ๋ชจ๋ธ์„ ๋ณ„๋„๋กœ ์ตœ์ ํ™” ๊ฐ€๋Šฅ
    • ์˜ˆ: ์กฐํšŒ๋Š” ์บ์‹œ, ์“ฐ๊ธฐ๋Š” ํŠธ๋žœ์žญ์…˜ DB
  2. ํ™•์žฅ์„ฑ
    • ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ๊ณผ ์“ฐ๊ธฐ ํŠธ๋ž˜ํ”ฝ์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
  3. ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ์ฒ˜๋ฆฌ ์šฉ์ด
    • DDD(Domain-Driven Design)์—์„œ ์œ ์šฉ

๐Ÿ˜Š ์ „์ž์ •๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ(eGovFrame) ํ”„๋กœ์ ํŠธ์—์„œ **JPA(Java Persistence API)**๊ฐ€ ์ฑ„ํƒ๋œ ์ด์œ ๋ฅผ ๋ฐฐ๊ฒฝ, ์žฅ์ , ์‹ค์ œ ์ ์šฉ ๊ด€์ ์—์„œ ์„ค๋ช…ํ• ๊ฒŒ์š”.


1๏ธโƒฃ ๋ฐฐ๊ฒฝ: ์ „์ž์ •๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ DB ์ฒ˜๋ฆฌ

  • eGovFrame ํ”„๋กœ์ ํŠธ๋Š” ๊ณต๊ณต๊ธฐ๊ด€ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ
  • ๋Œ€๋ถ€๋ถ„ **๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDB)**๋ฅผ ์‚ฌ์šฉ
  • ์˜ˆ์ „์—๋Š” JDBC, MyBatis ๋“ฑ SQL ์ง์ ‘ ์ž‘์„ฑ ๋ฐฉ์‹์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋จ

๋ฌธ์ œ์ :

  1. SQL์ด ์ง์ ‘ ์ž‘์„ฑ๋˜์–ด ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง์ด ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์Œ → ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€
  2. ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด(Java)์™€ RDB ๊ตฌ์กฐ ๊ฐ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ(Object-Relational Impedance Mismatch) ๋ฐœ์ƒ
  3. ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ, ๋ณต์žกํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์›€

→ ๊ทธ๋ž˜์„œ JPA๊ฐ€ ๋„์ž…๋จ


2๏ธโƒฃ JPA ์ฑ„ํƒ ์ด์œ 

โ‘  ๊ฐ์ฒด ์ง€ํ–ฅ์  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ

  • ์—”ํ‹ฐํ‹ฐ(Entity) ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด DB ํ…Œ์ด๋ธ”์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋‹ค๋ฃธ
  • SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ๊ฐ์ฒด ์กฐ์ž‘๋งŒ์œผ๋กœ CRUD ๊ฐ€๋Šฅ
 
User user = new User(); user.setName("Alice"); userRepository.save(user); // INSERT ์ž๋™ ์ฒ˜๋ฆฌ

โ‘ก ์ฝ”๋“œ ๊ฐ„๊ฒฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

  • DAO, SQL ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ , Repository ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ •์˜
  • ์œ ์ง€๋ณด์ˆ˜ ์‹œ DB ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ์ฝ”๋“œ ์ˆ˜์ • ์ตœ์†Œํ™”

โ‘ข ํŠธ๋žœ์žญ์…˜ ๋ฐ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ

  • JPA๋Š” 1:N, N:M ๊ด€๊ณ„ ๋งคํ•‘ ๊ฐ€๋Šฅ → ๊ฐ์ฒด ๊ด€๊ณ„๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ‘œํ˜„
  • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ์ž๋™ํ™” → @Transactional ํ•œ ์ค„๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

โ‘ฃ ํ‘œ์ค€ํ™”์™€ ๋ฒค๋” ๋…๋ฆฝ์„ฑ

  • JPA๋Š” Java ํ‘œ์ค€ API → ํŠน์ • DB ๋ฒค๋”(MySQL, Oracle, PostgreSQL) ๋…๋ฆฝ์ 
  • eGovFrame ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ๊ณต๊ณต๊ธฐ๊ด€ ํ‘œ์ค€ ํ”Œ๋žซํผ์— ์ ํ•ฉ

โ‘ค ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋Šฅ

  • ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading), ์บ์‹ฑ ์ œ๊ณต → ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ฐ€๋Šฅ

3๏ธโƒฃ ํ•œ๋ˆˆ์— ๋น„๊ต

๊ตฌ๋ถ„JDBC/MyBatisJPA
SQL ์ž‘์„ฑ ์ง์ ‘ ์ž‘์„ฑ ๊ฐ์ฒด ์กฐ์ž‘, ์ž๋™ SQL
๊ฐ์ฒด ๋งคํ•‘ ์ˆ˜๋™ ์ž๋™ ๋งคํ•‘(Entity)
ํŠธ๋žœ์žญ์…˜ ์ˆ˜๋™ @Transactional ์ง€์›
์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€ ์šฉ์ด
๋ฒค๋” ์˜์กด์„ฑ ๋†’์Œ ๋‚ฎ์Œ

๐Ÿ’ก ์ •๋ฆฌ ํ•œ ์ค„:
“eGovFrame์—์„œ JPA๋ฅผ ์ฑ„ํƒํ•œ ์ด์œ  = ๊ฐ์ฒด ์ง€ํ–ฅ์  DB ์ฒ˜๋ฆฌ, ์ฝ”๋“œ ๊ฐ„๊ฒฐ์„ฑ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ํ‘œ์ค€ํ™”, ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ ๋•Œ๋ฌธ”

 

 


1๏ธโƒฃ HTTP ๋ฉ”์„œ๋“œ์™€ CRUD ๋งคํ•‘

CRUD๋ชฉ์ HTTP ๋ฉ”์„œ๋“œ์Šคํ”„๋ง ๋งคํ•‘ ์–ด๋…ธํ…Œ์ด์…˜

 

Create ๋ฐ์ดํ„ฐ ์ƒ์„ฑ POST @PostMapping
Read ๋ฐ์ดํ„ฐ ์กฐํšŒ GET @GetMapping
Update ๋ฐ์ดํ„ฐ ์ˆ˜์ • PUT / PATCH @PutMapping / @PatchMapping
Delete ๋ฐ์ดํ„ฐ ์‚ญ์ œ DELETE @DeleteMapping