
์ดํธ๋ฆฌ๋ทฐํธ -๋ฐ์ดํฐ ๊ทธ ์์ฒด
ํ๋กํผํฐ-๋ด๋ ๊ทธ๋ฆ
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#):
์ฌ๊ธฐ์ Name์ด ํ๋กํผํฐ, name์ด ํ๋(field) ์ ๋๋ค.
2๏ธโฃ ์ดํธ๋ฆฌ๋ทฐํธ(Attribute)
- ์ ์: **๋ฉํ๋ฐ์ดํฐ(metadata)**๋ฅผ ํํํ๋ ํน์ํ ์์๋ก, ์ฝ๋๋ ๊ฐ์ฒด์ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ถ์ผ ๋ ์ฌ์ฉ.
- ์ฉ๋: ์ปดํ์ผ๋ฌ, ๋ฐํ์, ํ๋ ์์ํฌ๊ฐ ํน์ ๋์์ ์ํํ๋๋ก ์ง์ํ ๋ ์ฌ์ฉ.
- ์ธ์ด ์์: C#, Python ๋ฐ์ฝ๋ ์ดํฐ, HTML
- ํน์ง:
- ์ฃผ๋ก ์ฝ๋์ ๋ถ์ด๋ ์ฃผ์์ฒ๋ผ ๋ณด์ด๋ ์ ๋ณด
- ์คํ ์ ๋ฐ์๋ ์ ์์
- ๊ฐ์ฒด ์ํ๊ฐ ์๋๋ผ ๊ฐ์ฒด ์์ฑ์ ๋ํ ์ ๋ณด
์์ (C#):
์์ (HTML):
- ์ฌ๊ธฐ์ src, alt, width๊ฐ ์ดํธ๋ฆฌ๋ทฐํธ.
- HTML ํ๊ทธ์ ์์ฑ๊ฐ์ด๋ผ๋ ์ ์์ ๊ฐ์ฒด์งํฅ์ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋น์ทํ ๊ฐ๋ .
๐น ํต์ฌ ์ฐจ์ด
| ๊ตฌ๋ถ | ํ๋กํผํฐ(Property) | ์ดํธ๋ฆฌ๋ทฐํธ(Attribute) |
| ์๋ฏธ | ๊ฐ์ฒด์ ์ํ/๊ฐ | ๊ฐ์ฒด๋ ์ฝ๋์ ๋ํ ๋ฉํ์ ๋ณด |
| ๋์ | ๊ฐ ์ฝ๊ธฐ/์ฐ๊ธฐ | ์ฝ๋ ๋์ ์ ์ด, ๋ฉํ๋ฐ์ดํฐ ์ ๊ณต |
| ์กด์ฌ ์์น | ๊ฐ์ฒด ๋ด๋ถ | ๊ฐ์ฒด/ํด๋์ค/ํ๋/๋ฉ์๋ ๋ฑ |
| ์์ | Person.Name = "Alice" | [Serializable], HTML์ alt="..." |
์ดํธ๋ฆฌ๋ทฐํธ : ์ ๋ฐ๋๋ ๊ฑฐ
ํ๋กํผํฐ: ๋ฐ๋
! ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ **์ธํฐํ์ด์ค(Interface)**์ **ํด๋์ค(Class)**๋ ์๋ก ๊ด๋ จ์ด ๊น์ง๋ง, ๋ชฉ์ ๊ณผ ์ญํ ์ด ๋ค๋ฆ ๋๋ค. ์์ธํ ๋น๊ตํด๋ณผ๊ฒ์.
1๏ธโฃ ํด๋์ค(Class)
- ์ ์: ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ(template) ๋๋ ์ฒญ์ฌ์ง ์ญํ ์ ํ๋ ๊ตฌ์กฐ
- ์ฉ๋: ์ค์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ์ํ(state)์ ๋์(behavior)์ ๊ตฌํ
- ๊ตฌ์ฑ์์:
- ํ๋(Field) → ์ํ ์ ์ฅ
- ๋ฉ์๋(Method) → ๋์ ์ ์
- ์์ฑ์(Constructor) → ๊ฐ์ฒด ์ด๊ธฐํ
- ํน์ง:
- ์ํ์ ๋์์ ๋ชจ๋ ๊ฐ์ง ์ ์์
- ๋จ๋ ์ผ๋ก ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
- ์์ ๊ฐ๋ฅ
์์ (Java):
2๏ธโฃ ์ธํฐํ์ด์ค(Interface)
- ์ ์: ํด๋์ค๊ฐ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ๋ฉ์๋์ ์งํฉ๋ง ์ ์ํ ๊ตฌ์กฐ
- ์ฉ๋: ํด๋์ค๊ฐ **์ด๋ค ๋์์ ์ ๊ณตํด์ผ ํ๋์ง ๊ท์ฝ(Contract)**์ ๋ช ์
- ๊ตฌ์ฑ์์:
- ์ถ์ ๋ฉ์๋(Abstract Method)๋ง ๊ฐ์ง (Java 8 ์ดํ default, static ๋ฉ์๋ ๊ฐ๋ฅ)
- ํ๋๋ ๋ณดํต ์์(final static)๋ง ๊ฐ๋ฅ
- ํน์ง:
- ๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ (๊ตฌํํ๋ ํด๋์ค๋ฅผ ํตํด์๋ง ์ฌ์ฉ)
- ๋ค์ค ์์ ํ์ฉ → ์ฌ๋ฌ ์ธํฐํ์ด์ค ๊ตฌํ ๊ฐ๋ฅ
- ๊ตฌํ์ ๊ฐ์ ํจ → ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด ๋ฐ๋์ ๋ชจ๋ ๋ฉ์๋ ๊ตฌํ
์์ (Java):
3๏ธโฃ ํต์ฌ ์ฐจ์ด
| ๋ชฉ์ | ๊ฐ์ฒด ์์ฑ, ์ํ์ ๋์ ๊ตฌํ | ๋์ ๊ท์ฝ ์ ์, ๊ฐ์ ๊ตฌํ |
| ์ํ | ๊ฐ์ง ์ ์์ (ํ๋) | ์ผ๋ฐ์ ์ผ๋ก ์์ (์์๋ง ๊ฐ๋ฅ) |
| ๋์ | ๊ตฌํ ๊ฐ๋ฅ | ๊ตฌํ ๋ถ๊ฐ (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
| ๊ตฌ์กฐ | ํ๋์ ๋ชจ๋ธ/ํ ์ด๋ธ์์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋ชจ๋ ์ฒ๋ฆฌ | ์ฝ๊ธฐ(Read) ๋ชจ๋ธ๊ณผ ์ฐ๊ธฐ(Command) ๋ชจ๋ธ ๋ถ๋ฆฌ |
| ์ฅ์ | ๋จ์, ์ง๊ด์ | ์ฑ๋ฅ ์ต์ ํ, ํ์ฅ์ฑ, ๋ณต์กํ ๋๋ฉ์ธ ์ฒ๋ฆฌ ์ฉ์ด |
| ๋จ์ | ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ก์ง์ด ์์ฌ ๋ณต์กํ ์ ์์ | ์ค๊ณ ๋ณต์ก, ๊ตฌํ ๋์ด๋ ↑ |
3๏ธโฃ CQRS ์ฅ์
- ์ฑ๋ฅ ์ต์ ํ ๊ฐ๋ฅ
- ์กฐํ์ฉ ๋ชจ๋ธ๊ณผ ์ฐ๊ธฐ์ฉ ๋ชจ๋ธ์ ๋ณ๋๋ก ์ต์ ํ ๊ฐ๋ฅ
- ์: ์กฐํ๋ ์บ์, ์ฐ๊ธฐ๋ ํธ๋์ญ์ DB
- ํ์ฅ์ฑ
- ์ฝ๊ธฐ ํธ๋ํฝ๊ณผ ์ฐ๊ธฐ ํธ๋ํฝ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ
- ๋ณต์กํ ๋๋ฉ์ธ ์ฒ๋ฆฌ ์ฉ์ด
- DDD(Domain-Driven Design)์์ ์ ์ฉ
๐ ์ ์์ ๋ถ ํ๋ ์์ํฌ(eGovFrame) ํ๋ก์ ํธ์์ **JPA(Java Persistence API)**๊ฐ ์ฑํ๋ ์ด์ ๋ฅผ ๋ฐฐ๊ฒฝ, ์ฅ์ , ์ค์ ์ ์ฉ ๊ด์ ์์ ์ค๋ช ํ ๊ฒ์.
1๏ธโฃ ๋ฐฐ๊ฒฝ: ์ ์์ ๋ถ ํ๋ ์์ํฌ์ DB ์ฒ๋ฆฌ
- eGovFrame ํ๋ก์ ํธ๋ ๊ณต๊ณต๊ธฐ๊ด ์์คํ ์ ์ํ ํ์คํ๋ ๊ฐ๋ฐ ํ๋ซํผ
- ๋๋ถ๋ถ **๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDB)**๋ฅผ ์ฌ์ฉ
- ์์ ์๋ JDBC, MyBatis ๋ฑ SQL ์ง์ ์์ฑ ๋ฐฉ์์ด ์ฃผ๋ก ์ฌ์ฉ๋จ
๋ฌธ์ ์ :
- SQL์ด ์ง์ ์์ฑ๋์ด ์ฝ๋์ ๋ฐ์ดํฐ ์ ๊ทผ ๋ก์ง์ด ๋ถ๋ฆฌ๋์ง ์์ → ์ ์ง๋ณด์ ์ด๋ ค์
- ๊ฐ์ฒด์งํฅ ์ธ์ด(Java)์ RDB ๊ตฌ์กฐ ๊ฐ ๋ถ์ผ์น ๋ฌธ์ (Object-Relational Impedance Mismatch) ๋ฐ์
- ํธ๋์ญ์ ์ฒ๋ฆฌ, ๋ณต์กํ ์ฐ๊ด๊ด๊ณ ๊ด๋ฆฌ๊ฐ ๋ฒ๊ฑฐ๋ก์
→ ๊ทธ๋์ JPA๊ฐ ๋์ ๋จ
2๏ธโฃ JPA ์ฑํ ์ด์
โ ๊ฐ์ฒด ์งํฅ์ ๋ฐ์ดํฐ ์ ๊ทผ
- ์ํฐํฐ(Entity) ํด๋์ค๋ฅผ ํตํด DB ํ ์ด๋ธ์ ๊ฐ์ฒด์ฒ๋ผ ๋ค๋ฃธ
- SQL์ ์ง์ ์์ฑํ์ง ์๊ณ , ๊ฐ์ฒด ์กฐ์๋ง์ผ๋ก CRUD ๊ฐ๋ฅ
โก ์ฝ๋ ๊ฐ๊ฒฐ์ฑ๊ณผ ์ ์ง๋ณด์ ์ฉ์ด
- DAO, SQL ๋ฐ๋ณต ์ฝ๋๋ฅผ ์ค์ด๊ณ , Repository ์ธํฐํ์ด์ค๋ง ์ ์
- ์ ์ง๋ณด์ ์ DB ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ ์ฝ๋ ์์ ์ต์ํ
โข ํธ๋์ญ์ ๋ฐ ์ฐ๊ด๊ด๊ณ ๊ด๋ฆฌ
- JPA๋ 1:N, N:M ๊ด๊ณ ๋งคํ ๊ฐ๋ฅ → ๊ฐ์ฒด ๊ด๊ณ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ํํ
- ํธ๋์ญ์ ์ฒ๋ฆฌ ์๋ํ → @Transactional ํ ์ค๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
โฃ ํ์คํ์ ๋ฒค๋ ๋ ๋ฆฝ์ฑ
- JPA๋ Java ํ์ค API → ํน์ DB ๋ฒค๋(MySQL, Oracle, PostgreSQL) ๋ ๋ฆฝ์
- eGovFrame ํ๋ก์ ํธ์ฒ๋ผ ๊ณต๊ณต๊ธฐ๊ด ํ์ค ํ๋ซํผ์ ์ ํฉ
โค ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฅ
- ์ง์ฐ ๋ก๋ฉ(Lazy Loading), ์บ์ฑ ์ ๊ณต → ๋๊ท๋ชจ ์์คํ ์ฑ๋ฅ ์ต์ ํ ๊ฐ๋ฅ
3๏ธโฃ ํ๋์ ๋น๊ต
| SQL ์์ฑ | ์ง์ ์์ฑ | ๊ฐ์ฒด ์กฐ์, ์๋ SQL |
| ๊ฐ์ฒด ๋งคํ | ์๋ | ์๋ ๋งคํ(Entity) |
| ํธ๋์ญ์ | ์๋ | @Transactional ์ง์ |
| ์ ์ง๋ณด์ | ์ด๋ ค์ | ์ฉ์ด |
| ๋ฒค๋ ์์กด์ฑ | ๋์ | ๋ฎ์ |
๐ก ์ ๋ฆฌ ํ ์ค:
“eGovFrame์์ JPA๋ฅผ ์ฑํํ ์ด์ = ๊ฐ์ฒด ์งํฅ์ DB ์ฒ๋ฆฌ, ์ฝ๋ ๊ฐ๊ฒฐ์ฑ, ํธ๋์ญ์
๊ด๋ฆฌ, ํ์คํ, ์ ์ง๋ณด์ ์ฉ์ด์ฑ ๋๋ฌธ”
1๏ธโฃ HTTP ๋ฉ์๋์ CRUD ๋งคํ
| Create | ๋ฐ์ดํฐ ์์ฑ | POST | @PostMapping |
| Read | ๋ฐ์ดํฐ ์กฐํ | GET | @GetMapping |
| Update | ๋ฐ์ดํฐ ์์ | PUT / PATCH | @PutMapping / @PatchMapping |
| Delete | ๋ฐ์ดํฐ ์ญ์ | DELETE | @DeleteMapping |
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 13์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.27 |
|---|---|
| 12์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.24 |
| 10์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.22 |
| 9์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.21 |
| 8์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.20 |