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

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

by GreenJin_S2 2025. 11. 5.

 

๐Ÿ”น ์ƒ์„ฑ:  ์‹ฑ๊ธ€์ธ ๋นŒ๋”๊ฐ€ ํ”„๋กœ์ด๋‹ค ํŒฉํ† ๋ฆฌ ์ถ”์ƒํ›ˆ~!ํŒฉํ† ๋ฆฌ 

 ์‹ฑ๊ธ€ํ†ค, ๋นŒ๋”, ํ”„๋กœํ† ํƒ€์ž… ํŒฉํ† ๋ฆฌ, ์ถ”์ƒํŒฉํ† ๋ฆฌ(5)


๐Ÿ”น ๊ตฌ์กฐ:  ๊ตฌ์กฐ๋Š” ์ปดํฌ์ฆˆ์—์„œ ์–ด๋Œ‘ํ„ฐ ๋ธŒ๋ฆฟ์ง€ ์“ฐ๊ณ  ํ”Œ๋ผ์ด์›จ์ดํŠธ ๋งˆ์‹œ๊ณ  ๋ฐ์ฝ”ํ•˜๊ณ  ๋ธŒ๋ฆฟ์ง€, ํ”„๋ก์‹œ, ํผ์‚ฌ๋“œ(๋ธŒํ”„ํผ)

              →  ์ปดํฌ์ง“, ์–ด๋Œ‘ํ„ฐ, ํ”Œ๋ผ์ด์›จ์ดํŠธ, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ, ๋ธŒ๋ฆฟ์ง€, ํ”„๋ก์‹œ, ํผ์‚ฌ๋“œ(7)

 

๐Ÿ”น ํ–‰๋™: “์ „์ฑ…์ž„์„ ์ƒํƒœ๋กœ ์˜ต์ €๋ฒ„์ปค๋จผ๋“œ๋ฉ”๋ฉ˜ํ† ํ…œํ”Œ๋ฆฟ ์ด์ธ๋ฏธ๋น„-” →

์ „๋žต, ์ฑ…์ž„, ์ƒํƒœ, ์˜ต์ €๋ฒ„, ์ปค๋งจ๋“œ, ๋ฉ”๋ฉ˜ํ† , ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ

์ดํ„ฐ๋ ˆ์ดํ„ฐ(๋ฐ˜๋ณต์ž) ,์ธํ„ฐํ”„๋ฆฌํ„ฐ(๋ฒˆ์—ญ๊ฐ€), ๋ฏธ๋””์—์ดํ„ฐ(์ค‘์žฌ์ž), ๋น„์ง€ํ„ฐ(๋ฐฉ๋ฌธ์ž)- (11)

 


 

์ธํ„ฐํŽ˜์ด์Šค ๋นผ๊ณ  interface

์—”ํ‹ฐํ‹ฐ ๋ชจ๋‘ ์˜ค๋ธŒ์ ํŠธ(๊ฐ์ฒด)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ

 

์ด์ œ ๋ถ€ํ„ฐ entity ์•ˆ์“ฐ๊ณ  ์ƒ๋žตํ•  ๊ฒƒ์ž„

VO๋Š” ๋‹ค ์‚ญ์ œํ•  ์˜ˆ์ •

 

์ด์ œ๋ถ€ํ„ฐ ์—”ํ‹ฐํ‹ฐ๋Š” ์—”ํ‹ฐํ‹ฐ๋กœ ๋ถ€๋ฅด์ง€๋งŒ ์‚ฌ์‹ค์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•ธ๋“ค๋งํ•˜๋Š” ์—ญํ• 

dto๊ฐ€ ๊ฐ์ฒด์ด๊ณ , vo์—ญํ• ๋„ ๋‹ค ํ• ๊ฒƒ์ž„

 

์ƒ์„ฑํŒจํ„ด์€ ๋นŒ๋”๋กœ ํ• ๊ฑฐ๋‹ˆ๊นŒ DTO์— builder ๋„ฃ๊ธฐ

 

์‹คํ–‰์ˆœ์„œ๋Š” ์ปจ- ์„œ- ๋ ˆ- ์—” -DB

 

 


โš–๏ธ ์Šค์นผ๋ผ(Scalar)

  • ์˜๋ฏธ:
    ๋ฐฉํ–ฅ ์—†์ด ํฌ๊ธฐ(๊ฐ’) ๋งŒ์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฌผ๋ฆฌ๋Ÿ‰
  • ์˜ˆ์‹œ:
    • ์งˆ๋Ÿ‰: 60kg
    • ์˜จ๋„: 25โ„ƒ
    • ์‹œ๊ฐ„: 10์ดˆ
    • ์†๋ ฅ: 80km/h
  • ํŠน์ง•:
    ๋ง์…ˆ, ๋บ„์…ˆ, ๊ณฑ์…ˆ ๋“ฑ ๋‹จ์ˆœํ•œ ์ˆ˜ํ•™ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ
  • ์ˆ˜ํ•™์  ํ‘œํ˜„:
    ๊ทธ๋ƒฅ ์ˆซ์ž ํ•˜๋‚˜๋กœ ํ‘œํ˜„ → ์˜ˆ: 5, 3.2, -7

๐Ÿ“˜ ๋น„์œ :
์Šค์นผ๋ผ๋Š” “์–‘”๋งŒ ์žˆ๋Š” ๊ฐ’์ด์—์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, “5m๋ฅผ ์ด๋™ํ–ˆ๋‹ค”๋ผ๊ณ ๋งŒ ํ•˜๋ฉด ์–ด๋””๋กœ ๊ฐ”๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์ฃ  → ์Šค์นผ๋ผ


๐Ÿงญ ๋ฒกํ„ฐ(Vector)

  • ์˜๋ฏธ:
    ํฌ๊ธฐ์™€ ๋ฐฉํ–ฅ์„ ํ•จ๊ป˜ ๊ฐ€์ง€๋Š” ๋ฌผ๋ฆฌ๋Ÿ‰
  • ์˜ˆ์‹œ:
    • ์†๋„: ์‹œ์† 80km, ๋ถ์ชฝ ๋ฐฉํ–ฅ
    • ํž˜: 10N, ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ
    • ๊ฐ€์†๋„, ์ „๊ธฐ์žฅ, ์ž๊ธฐ์žฅ ๋“ฑ
  • ํŠน์ง•:
    ๋ฐฉํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ง์…ˆ/๋บ„์…ˆ ์‹œ ๋ฐฉํ–ฅ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•จ
  • ์ˆ˜ํ•™์  ํ‘œํ˜„:
    (x, y, z) ๊ฐ™์€ ์ขŒํ‘œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ → ์˜ˆ: →v = (3, 4)
    (์—ฌ๊ธฐ์„œ ํฌ๊ธฐ๋Š” √(3² + 4²) = 5)

๐Ÿ“˜ ๋น„์œ :
๋ฒกํ„ฐ๋Š” “์–‘ + ๋ฐฉํ–ฅ”์ด ์žˆ๋Š” ๊ฐ’์ด์—์š”.

“5m๋ฅผ ๋™์ชฝ์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค” → ๋ฒกํ„ฐ


๐Ÿ” ํ•œ๋ˆˆ์— ๋น„๊ต

๊ตฌ๋ถ„์Šค์นผ๋ผ (Scalar)๋ฒกํ„ฐ (Vector)
๊ตฌ์„ฑ ์š”์†Œ ํฌ๊ธฐ๋งŒ ์žˆ์Œ ํฌ๊ธฐ + ๋ฐฉํ–ฅ
์˜ˆ์‹œ ์งˆ๋Ÿ‰, ์‹œ๊ฐ„, ์˜จ๋„, ์—๋„ˆ์ง€ ์†๋„, ํž˜, ๊ฐ€์†๋„, ๋ณ€์œ„
ํ‘œํ˜„ ๋ฐฉ๋ฒ• ์ˆซ์ž ํ•˜๋‚˜ ์ขŒํ‘œ๋‚˜ ํ™”์‚ดํ‘œ
์—ฐ์‚ฐ ๋ฐฉ์‹ ๋‹จ์ˆœ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ ํฌ๊ธฐ์™€ ๋ฐฉํ–ฅ ๋ชจ๋‘ ๊ณ ๋ ค
๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ์ (๋˜๋Š” ๊ธธ์ด ์—†๋Š” ๊ฐ’) ํ™”์‚ดํ‘œ(๋ฐฉํ–ฅ๊ณผ ๊ธธ์ด)

JPA์—์„œ ํฌ๋กœ์Šค ์—”ํ‹ฐํ‹ฐ๋Š” ๋ฌด์Šจ GOF ๋””์ž์ธ ํŒจํ„ด์— ๊ฐ€๊นŒ์šด๊ฐ€?

๋ฌด๋ฃŒ ํ•œ๊ตญ์–ด GPT์˜ ๋ง:

์ข‹์€ ์งˆ๋ฌธ์ด์—์š” ๐Ÿ‘
JPA(Java Persistence API) ์—์„œ “ํฌ๋กœ์Šค ์—”ํ‹ฐํ‹ฐ(Cross-Entity)” ๋ผ๋Š” ๊ฐœ๋…์€ ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ(Entity)๊ฐ€ ์„œ๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ๊ฑฐ๋‚˜, ํ•˜๋‚˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์•„์šฐ๋ฅด๋ฉฐ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•˜์ฃ .
์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ๋‹จ์ˆœํžˆ ORM(Entity ๋งคํ•‘) ์ด์ƒ์˜ ์„ค๊ณ„ ๊ด€์ ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
๋ช‡ ๊ฐ€์ง€ GoF ๋””์ž์ธ ํŒจํ„ด๊ณผ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿงฉ 1. ํ•ต์‹ฌ์ ์œผ๋กœ ๋‹ฎ์€ ํŒจํ„ด: Mediator(์ค‘์žฌ์ž) ํŒจํ„ด

๐ŸŽฏ ๊ฐœ๋… ์š”์•ฝ

“๊ฐ์ฒด๋“ค์ด ์ง์ ‘ ์„œ๋กœ ํ†ต์‹ ํ•˜์ง€ ์•Š๊ณ , ์ค‘์žฌ์ž๋ฅผ ํ†ตํ•ด ํ˜‘๋ ฅํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ํŒจํ„ด.”

  • JPA์˜ ํฌ๋กœ์Šค ์—”ํ‹ฐํ‹ฐ ๋กœ์ง์€ ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ,
    ์—”ํ‹ฐํ‹ฐ๋ผ๋ฆฌ ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋‚˜ ๋„๋ฉ”์ธ ์„œ๋น„์Šค๊ฐ€ ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ

 
@Service public class OrderService { private final OrderRepository orderRepository; private final PaymentRepository paymentRepository; @Transactional public void processOrder(Long orderId) { Order order = orderRepository.findById(orderId).orElseThrow(); Payment payment = paymentRepository.findByOrderId(orderId); // ๋‘ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์„œ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ฒŒ "์ค‘์žฌ" ์—ญํ•  ์ˆ˜ํ–‰ if (payment.isPaid()) { order.setStatus(OrderStatus.CONFIRMED); } } }

โžก ์—ฌ๊ธฐ์„œ Order์™€ Payment ์—”ํ‹ฐํ‹ฐ๋Š” ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ณ ,
OrderService๊ฐ€ **์ค‘์žฌ์ž(Mediator)**๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํฌ๋กœ์Šค ์—”ํ‹ฐํ‹ฐ ๋กœ์ง์€ Mediator ํŒจํ„ด์˜ ์ฒ ํ•™๊ณผ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“š ์ •๋ฆฌ

ํŒจํ„ดํฌ๋กœ์Šค ์—”ํ‹ฐํ‹ฐ์™€์˜ ๊ด€๊ณ„์„ค๋ช…
Mediator (์ค‘์žฌ์ž) โญ ๊ฐ€์žฅ ๋ฐ€์ ‘ ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ํ˜‘๋ ฅ์„ ์ค‘์žฌ์ž(์„œ๋น„์Šค)๊ฐ€ ๊ด€๋ฆฌ
Facade (ํผ์‚ฌ๋“œ) ์ž์ฃผ ํ•จ๊ป˜ ์‚ฌ์šฉ ๋ณต์žกํ•œ ์—”ํ‹ฐํ‹ฐ ๋กœ์ง์„ ๋‹จ์ผ ์ง„์ž…์ ์œผ๋กœ ๋‹จ์ˆœํ™”
Observer (์˜ต์ €๋ฒ„) ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์„ค๊ณ„ ์‹œ ํ•œ ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์— ์ž๋™ ๋ฐ˜์‘
Command (์ปค๋งจ๋“œ) ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ๋ฌถ์„ ๋•Œ ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ๋ช…๋ น ๊ฐ์ฒด๋กœ ์ฒ˜๋ฆฌ

โœ… ๊ฒฐ๋ก 

JPA์˜ ํฌ๋กœ์Šค ์—”ํ‹ฐํ‹ฐ ์„ค๊ณ„๋Š” ๋ณธ์งˆ์ ์œผ๋กœ “Mediator ํŒจํ„ด”์— ๊ฐ€์žฅ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ๋ ˆ์ด์–ด๊ฐ€ ์—ฌ๋Ÿฌ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ค‘์žฌ
  • ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ์ง์ ‘ ์˜์กด์„ ์ตœ์†Œํ™”
  • ์ฝ”๋“œ ์‘์ง‘๋„๋Š” ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถ”๋Š” ๊ตฌ์กฐ

 

 

 


 

๐Ÿ“Š ์ •๋ฆฌ ๋น„๊ตํ‘œ

๊ตฌ๋ถ„PK (๊ธฐ๋ณธํ‚ค)UNIQUE (๊ณ ์œ  ์ œ์•ฝ)
์ค‘๋ณต ๊ฐ€๋Šฅ? โŒ ๋ถˆ๊ฐ€๋Šฅ โŒ ๋ถˆ๊ฐ€๋Šฅ
NULL ๊ฐ€๋Šฅ? โŒ ๋ถˆ๊ฐ€๋Šฅ โญ• ๊ฐ€๋Šฅ
ํ…Œ์ด๋ธ”๋‹น ๊ฐœ์ˆ˜ 1๊ฐœ๋งŒ ๊ฐ€๋Šฅ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ
์ฃผ๋กœ ์“ฐ๋Š” ๋ชฉ์  ํ–‰ ๊ตฌ๋ถ„ (์‹๋ณ„์ž) ํŠน์ • ๊ฐ’์˜ ๊ณ ์œ ์„ฑ ์œ ์ง€

 

 

๐Ÿงญ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ œ์•ฝ ์กฐ๊ฑด & ์ธ๋ฑ์Šค ๋น„๊ตํ‘œ

๊ตฌ๋ถ„PK (Primary Key)FK (Foreign Key)UNIQUEINDEX
์˜๋ฏธ ๊ฐ ํ–‰(Row)์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ๊ธฐ๋ณธ ํ‚ค ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ ํ‚ค ํŠน์ • ์ปฌ๋Ÿผ ๊ฐ’์˜ ์ค‘๋ณต์„ ๋ง‰๋Š” ์ œ์•ฝ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ
์ค‘๋ณต ํ—ˆ์šฉ โŒ ๋ถˆ๊ฐ€๋Šฅ โญ• ๊ฐ€๋Šฅ (์ฐธ์กฐ ๊ฐ’๋งŒ ์œ ํšจํ•ด์•ผ ํ•จ) โŒ ๋ถˆ๊ฐ€๋Šฅ โญ• ๊ฐ€๋Šฅ
NULL ํ—ˆ์šฉ โŒ ๋ถˆ๊ฐ€๋Šฅ โญ• ๊ฐ€๋Šฅ โญ• ๊ฐ€๋Šฅ โญ• ๊ฐ€๋Šฅ
๊ฐœ์ˆ˜ ์ œํ•œ 1๊ฐœ๋งŒ ๊ฐ€๋Šฅ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฐ€๋Šฅ
์ฃผ์š” ๋ชฉ์  ๋ฐ์ดํ„ฐ ์‹๋ณ„ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ(์ฐธ์กฐ) ๋ฐ์ดํ„ฐ ๊ณ ์œ ์„ฑ ์œ ์ง€ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์†๋„ ํ–ฅ์ƒ
์ž๋™ ์ธ๋ฑ์Šค ์ƒ์„ฑ โญ• ์ž๋™ ์ƒ์„ฑ๋จ โŒ (ํ•„์š”์‹œ ์ˆ˜๋™) โญ• ์ž๋™ ์ƒ์„ฑ๋จ โญ• ์ง์ ‘ ์ƒ์„ฑ
์‚ญ์ œ/๋ณ€๊ฒฝ ์‹œ ์˜ํ–ฅ ์ž์‹ ํ…Œ์ด๋ธ”์˜ FK ์ œ์•ฝ ์˜ํ–ฅ ๊ฐ€๋Šฅ ๋ถ€๋ชจ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ œํ•œ ์—†์Œ ์—†์Œ