week 7 jisoo - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

java์˜ non-static ๋ฉค๋ฒ„์™€ static ๋ฉค๋ฒ„์˜ ์ฐจ์ด

Static Keyword, Method Area

  • static์€ ์‚ฌ์ „์ ์œผ๋กœ '์ •์ ์ธ, ๊ณ ์ •๋œ, ์›€์ง์ด์ง€ ์•Š๋Š”'์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค. jvm ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ ์ •๋จ์„ ๋œปํ•จ๊ณผ ๋™์‹œ์— static์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ '๊ณต์œ 'ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋œปํ•œ๋‹ค.

  • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์ธ์Šคํ„ด์Šค ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ข‹์€ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ทธ๋Ÿฌ๋‚˜, ๋•Œ์— ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ณต์œ ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋กœ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ class ๋‚ด๋ถ€์— ์œ„์น˜ ํ•˜์ง€๋งŒ, static ํ‚ค์›Œ๋“œ๋ฅผ ๋ฉค๋ฒ„ ์•ž์— ๋ถ™์ด๋ฉด ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ํ•ด๋‹น ํด๋ž˜์Šค ์†Œ์†์˜ ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค. ๋ฌผ๋ก , ๋ฉ”์†Œ๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

  • static์ด ์‹คํ–‰๋˜๋Š” ์‹œ์ ์€ ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ์ด๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ํ•„์š”ํ•œ ํด๋ž˜์Šค๊ฐ€ jvm ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๋กœ๋”ฉ๋˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. (JVM class-loader์˜ ์—ญํ• ) ๊ทธ๋ฆฌ๊ณ  ํ•œ๋ฒˆ ๋กœ๋”ฉ๋œ ํด๋ž˜์Šค๋Š” ํŠน๋ณ„ํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•œ๋‹ค. static์€ ์ด ์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ํ•„์š”ํ•œ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ๊ฒฐ๋ก ์ ์œผ๋กœ static์€ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ๋Š” ๊ด€๊ณ„์—†์ด ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ์‹œ์ ์— ๋‹จ ํ•œ๋ฒˆ๋งŒ ํ•„์š”ํ•œ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋•Œ, jvm์˜ Method ์˜์—ญ(ํด๋ž˜์Šค ์˜์—ญ)์— ํด๋ž˜์Šค์˜ ์ •๋ณด๋“ค์ด ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.

  • ์ดํ•ด๋ฅผ ๋•๊ธฐ์œ„ํ•œ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์˜ ๋ฉ”์†Œ๋“œ ์˜์—ญ(ํด๋ž˜์Šค ์˜์—ญ)์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ด๋‹ค.

non-static ๋ฉค๋ฒ„ VS static ๋ฉค๋ฒ„ ๋น„๊ต

non-static ๋ฉค๋ฒ„

  • ๊ณต๊ฐ„์  ํŠน์„ฑ: ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด๋งˆ๋‹ค ๋ณ„๋„๋กœ ์กด์žฌํ•œ๋‹ค.
    • ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์‹œ๊ฐ„์  ํŠน์„ฑ: ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ์— ๋ฉค๋ฒ„๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
    • ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธธ ๋•Œ ๋ฉค๋ฒ„๋„ ์ƒ์„ฑ๋œ๋‹ค.
    • ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ๋ฉค๋ฒ„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด ๋ฉค๋ฒ„๋„ ์‚ฌ๋ผ์ง„๋‹ค.
  • ๊ณต์œ ์˜ ํŠน์„ฑ: ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด ๋‚ด์— ๊ฐ๊ฐ์˜ ๊ณต๊ฐ„์„ ์œ ์ง€ํ•œ๋‹ค.

static ๋ฉค๋ฒ„

  • ๊ณต๊ฐ„์  ํŠน์„ฑ: ๋ฉค๋ฒ„๋Š” ํด๋ž˜์Šค๋‹น ํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
    • ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ์ƒ์„ฑ๋œ๋‹ค.
    • ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์‹œ๊ฐ„์  ํŠน์„ฑ: ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ์— ๋ฉค๋ฒ„๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
    • ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์ „์— ์ด๋ฏธ ์ƒ์„ฑ๋œ๋‹ค.
    • ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์ „์—๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์ฆ‰, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.)
    • ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ ธ๋„ ๋ฉค๋ฒ„๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.
    • ๋ฉค๋ฒ„๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ์‚ฌ๋ผ์ง„๋‹ค.


์ถœ์ฒ˜ : https://gmlwjd9405.github.io/2018/08/04/java-static.html

๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ์— ๋Œ€ํ•ด ์„ค๋ช…

๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ์˜ ๊ฐœ๋…

์ž๋ฐ”์—๋Š” int, double, float์™€ ๊ฐ™์€ **๊ธฐ๋ณธํ˜•(primitive type)**์˜ ์ž๋ฃŒํ˜•๊ณผ **ํฌ์žฅ ํด๋ž˜์Šค(wrapper)**๊ฐ€ ์žˆ๋‹ค.

๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ์— ๋Œ€ํ•ด์„œ ์•„๋ ค๋ฉด ์ผ๋‹จ Wrapper์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผ ํ•œ๋‹ค.

๊ธฐ๋ณธํ˜• ๊ฐ์ฒด๋ฅผ Wrapper ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์„ ๋ฐ•์‹ฑ์ด๋ผ๊ณ  ํ•˜๊ณ  ๋ฐ˜๋Œ€๋กœ Wrapper ํด๋ž˜์Šค ํƒ€์ž…์˜ ๊ฐ’์„ Primitive๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์–ธ๋ฐ•์‹ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์‚ฌ์šฉ ์ด์œ 

๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์˜ ๊ฐ’์„ ๊ตณ์ด ๋ž˜ํผ(wrapper) ํด๋ž˜์Šค๋กœ ํฌ์žฅํ•˜๋Š” ์ด์œ ๋Š” ์ œ๋„ค๋ฆญ, ์ž๋ฃŒ๊ตฌ์กฐ, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ด ์•„๋‹Œ ๋ ˆํผ๋Ÿฐ์Šค ํƒ€์ž…์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ(heap ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ) ํ•˜์—ฌ ์ƒ์† ๋ฐ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ๋ฌธ์ž์—ด(String)๊ณผ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๊ฐ„ ํ˜• ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ์˜ ๊ฐ’ ๋น„๊ต

๋ž˜ํผ(wrapper) ํด๋ž˜์Šค์— ๋Œ€์ž…๋œ ๊ฐ’์€ ==, != ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’์˜ ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ heap ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์ด ์ €์žฅ๋˜๊ณ  ๊ฐ์ฒด ๋ณ€์ˆ˜๋Š” ์ฐธ์กฐ ๊ฐ’์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.๋”ฐ๋ผ์„œ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ธ๋ฐ•์‹ฑํ•˜์—ฌ ๊ฐ’์„ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.

JPA vs Mybatis

JDBC, JPA/Hibernate, Mybatis์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๋‹ค.

Goal

  • ์˜์†์„ฑ(Persistence)์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค.
  • SQL Mapper์™€ ORM์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ดํ•ดํ•œ๋‹ค.
  • JDBC(Data Transfer Object)๋ž€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•œ๋‹ค.
  • JPA/Hibernate๋ž€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•œ๋‹ค.
  • Mybatis๋ž€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•œ๋‹ค.

์˜์†์„ฑ(Persistence)

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ๋งํ•œ๋‹ค.
  • ์˜์†์„ฑ์„ ๊ฐ–์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹จ์ง€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๋ฉด ๋ชจ๋‘ ์žƒ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— ํŒŒ์ผ ์‹œ์Šคํ…œ, ๊ด€๊ณ„ํ˜• ํ…Œ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜น์€ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌํ•˜๊ฒŒ ์ €์žฅํ•˜์—ฌ ์˜์†์„ฑ ๋ถ€์—ฌํ•œ๋‹ค.
  • Persistence Layer
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์•„ํ‚คํ…์ฒ˜์—์„œ, ๋ฐ์ดํ„ฐ์— ์˜์†์„ฑ์„ ๋ถ€์—ฌํ•ด์ฃผ๋Š” ๊ณ„์ธต์„ ๋งํ•œ๋‹ค.
    • JDBC๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Persistence framework๋ฅผ ์ด์šฉํ•œ ๊ฐœ๋ฐœ์ด ๋งŽ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2dc8ee68-d246-43a5-ba99-6643ba8c71c0/Untitled.png

  • ๊ณ„์ธต ์ฐธ๊ณ 
    • ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต (Presentation layer) - UI ๊ณ„์ธต (UI layer) ์ด๋ผ๊ณ ๋„ ํ•จ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต (Application layer) - ์„œ๋น„์Šค ๊ณ„์ธต (Service layer) ์ด๋ผ๊ณ ๋„ ํ•จ
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ ๊ณ„์ธต (Business logic layer) - ๋„๋ฉ”์ธ ๊ณ„์ธต (Domain layer) ์ด๋ผ๊ณ ๋„ ํ•จ
    • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต (Data access layer) - ์˜์† ๊ณ„์ธต (Persistence layer) ์ด๋ผ๊ณ ๋„ ํ•จ
  • Persistence Framework
    • JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ณต์žกํ•จ์ด๋‚˜ ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด ๊ฐ„๋‹จํ•œ ์ž‘์—…๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™๋˜๋Š” ์‹œ์Šคํ…œ์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•ˆ์ •์ ์ธ ๊ตฌ๋™์„ ๋ณด์žฅํ•œ๋‹ค.
    • Persistence Framework๋Š” SQL Mapper์™€ ORM์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
    • Ex) JPA, Hibernate, Mybatis ๋“ฑ

SQL Mapper์™€ ORM

Persistence Framework๋Š” SQL Mapper์™€ ORM์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • ORM์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•จ์œผ๋กœ์จ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์ง€๋งŒ SQL Mapper๋Š” SQL์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ORM์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ โ€˜๊ด€๊ณ„โ€™๋ฅผ Object์— ๋ฐ˜์˜ํ•˜์ž๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋ผ๋ฉด, SQL Mapper๋Š” ๋‹จ์ˆœํžˆ ํ•„๋“œ๋ฅผ ๋งคํ•‘์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋ผ๋Š” ์ ์—์„œ ์ง€ํ–ฅ์ ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

SQL Mapper

  • SQL <โ€”๋งคํ•‘โ€”> Object ํ•„๋“œ
  • SQL Mapper๋Š” SQL ๋ฌธ์žฅ์œผ๋กœ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
    • ์ฆ‰, SQL Mapper๋Š” SQL์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค.
    • Ex) Mybatis, JdbcTempletes ๋“ฑ

ORM(Object-Relational Mapping), ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ <โ€”๋งคํ•‘โ€”> Object ํ•„๋“œ
  • ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
  • ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ORM์„ ์ด์šฉํ•˜๋ฉด SQL Query๊ฐ€ ์•„๋‹Œ ์ง๊ด€์ ์ธ ์ฝ”๋“œ(๋ฉ”์„œ๋“œ)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
  • Persistant API๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. Ex) JPA, Hibernate ๋“ฑ

1. JDBC(Java Database Connectivity)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/94682d12-195a-45e7-9b2d-4b9099303958/Untitled.png

  • JDBC๋Š” DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก Java์—์„œ ์ œ๊ณตํ•˜๋Š” API์ด๋‹ค.
  • ๋ชจ๋“  Java์˜ Data Access ๊ธฐ์ˆ ์˜ ๊ทผ๊ฐ„
  • ์ฆ‰, ๋ชจ๋“  Persistence Framework๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ JDBC API๋ฅผ ์ด์šฉํ•œ๋‹ค.
  • JDBC๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž๋ฃŒ๋ฅผ ์ฟผ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

2. JPA(Java Persistent API)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/de718c62-7142-4993-8f3b-08e0138a99bb/Untitled.png

  • ์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ API ํ‘œ์ค€ ๋ช…์„ธ๋กœ, Java์—์„œ ์ œ๊ณตํ•˜๋Š” API์ด๋‹ค.
  • ์ž๋ฐ” ํ”Œ๋žซํผ SE์™€ ์ž๋ฐ” ํ”Œ๋žซํผ EE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ด€๋ฆฌ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฐ” API์ด๋‹ค.
  • ์ฆ‰, JPA๋Š” ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ์•„๋‘” ๊ฒƒ์ด๋‹ค.
  • ๊ธฐ์กด์— EJB์—์„œ ์ œ๊ณต๋˜๋˜ ์—”ํ„ฐํ‹ฐ ๋นˆ(Entity Bean)์„ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • JPA ๊ตฌ์„ฑ ์š”์†Œ (์„ธ ๊ฐ€์ง€)
    1. javax.persistance ํŒจํ‚ค์ง€๋กœ ์ •์˜๋œ API ๊ทธ ์ž์ฒด
    2. JPQL(Java Persistence Query Language)
    3. ๊ฐ์ฒด/๊ด€๊ณ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” JPA ๊ตฌํ˜„์ฒด๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. JPA์˜ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋กœ๋Š” Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials ๋“ฑ์ด ์žˆ๋‹ค. ์ด ๊ตฌํ˜„์ฒด๋“ค์„ ORM Framework๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

3. Hibernate

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f32bccde-9b38-435a-8d12-5c8243bff67d/Untitled.png

  • Hibernate๋Š” JPA์˜ ๊ตฌํ˜„์ฒด ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • Hibernate๊ฐ€ SQL์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Hibernate๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ๋Š” JDBC API๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹จ์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์„ ๋ฟ์ด๋‹ค.
  • HQL(Hibernate Query Language)์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
    • HQL์€ SQL๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋ฉฐ ์ถ”๊ฐ€์ ์ธ ์ปจ๋ฒค์…˜์„ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • HQL์€ ์™„์ „ํžˆ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ด๋ฉฐ ์ด๋กœ์จ ์ƒ์†, ๋‹คํ˜•์„ฑ, ๊ด€๊ณ„๋“ฑ์˜ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฐ•์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    • HQL์ฟผ๋ฆฌ๋Š” ์ž๋ฐ” ํด๋ž˜์Šค์™€ ํ”„๋กœํผํ‹ฐ์˜ ์ด๋ฆ„์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
    • HQL์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
    • HQL์€ SQL์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€๋„ค์ด์…˜์ด๋‚˜ ๋™์  ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ๊ฐ™์€ ํ–ฅ์ƒ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • HQL์€ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์ž‘์—…ํ•  ๋•Œ ๋ช…์‹œ์ ์ธ join์„ ์š”๊ตฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์žฅ์ 
    • ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค. (JPA๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ)
    • ๋กœ์ง์„ ์ฟผ๋ฆฌ์— ์ง‘์ค‘ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ๊ฐ์ฒด ์ž์ฒด์— ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹จ์ 
    • ์–ด๋ ต๋‹ค. (๋งŽ์€ ๋‚ด์šฉ์ด ๊ฐ์‹ธ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•Œ์•„์•ผ ํ•  ๊ฒƒ์ด ๋งŽ๋‹ค.)
    • ์ž˜ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ์†์‹ค์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. (persistence context)
    • ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. (์ด ๋ฌธ์ œ ๋˜ํ•œ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)

4. MyBatis

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/061f57b1-0f27-47ef-8278-a739cc8469c6/Untitled.png

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ SQL, ์ €์žฅ ํ”„๋กœ์‹œ์ € ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ๊ณ ๊ธ‰ ๋งคํ•‘์„ ์ง€์›ํ•˜๋Š” SQL Mapper์ด๋‹ค. JDBC๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒ๋‹น ๋ถ€๋ถ„์˜ ์ฝ”๋“œ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • ๋ฐ ๊ฒฐ๊ณผ ๋งคํ•‘์„ ๋Œ€์‹ ํ•ด์ค€๋‹ค.
  • ๊ธฐ์กด์— JDBC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” DB์™€ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๋ณต์žกํ•œ ์„ค์ •(Connection)๋“ค์„ ๋‹ค๋ฃจ์–ด์•ผ ํ–ˆ์ง€๋งŒ SQL Mapper๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์‹ค์ œ SQL๋ฌธ์— ์—ฐ๊ฒฐํ•จ์œผ๋กœ์จ, ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ํŽธ๋ฆฌํ•œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค record์— ์›์‹œ ํƒ€์ž…๊ณผ Map ์ธํ„ฐํŽ˜์ด์Šค ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ” POJO๋ฅผ ์„ค์ •ํ•ด์„œ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด xml๊ณผ Annotation์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • MyBatis๋Š” ์›๋ž˜ Apache Foundation์˜ iBatis์˜€์œผ๋‚˜, ์ƒ์‚ฐ์„ฑ, ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค, ์ปค๋ฎค๋‹ˆํ‹ฐ ๋“ฑ์˜ ์ด์œ ๋กœ Google Code๋กœ ์ด์ „๋˜๋ฉด์„œ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.
    • iBatis์™€ ๋ฐ”๋€ ์ฐจ์ด์ ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. JDK 1.5, Annotation Dynatic SQL, XML Element
  • ์žฅ์  SQL์— ๋Œ€ํ•œ ๋ชจ๋“  ์ปจํŠธ๋กค์„ ํ•˜๊ณ ์ž ํ• ๋•Œ ๋งค์šฐ ์ ํ•ฉํ•˜๋‹ค. SQL ์ฟผ๋ฆฌ๋“ค์ด ๋งค์šฐ ์ž˜ ์ตœ์ ํ™”๋˜์–ด ์žˆ์„ ๋•Œ์— ์œ ์šฉํ•˜๋‹ค.
  • ๋‹จ์ 
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ์„ค๊ณ„์— ๋Œ€ํ•œ ๋ชจ๋“  ์กฐ์ž‘์„ ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์— ์„œ๋กœ ์ž˜ ๊ตฌ์กฐํ™”๋˜๋„๋ก ๋งŽ์€ ์„ค์ •์ด ๋ฐ”๋€Œ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ถœ์ฒ˜ : https://gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html

SPRING MVC vs Webflux ๋น„๊ต

Join์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ๋‹ค ์„ค๋ช…

์ •๊ทœํ™”, ์—ญ์ •๊ทœํ™”๋Š” ๋ฌด์—‡์ธ์ง€?

โš ๏ธ **GitHub.com Fallback** โš ๏ธ