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

์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ธฐ์ˆ  ๋ฌธ์ œ

  • JAVA(์œ ์ •ํ˜„)

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

      • static ํ‚ค์›Œ๋“œ๋ž€?
        • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์‹œ ์ตœ์ดˆ์— ํ•œ๋ฒˆ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
        • ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์ค‘ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์— ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์— static์„ ๋ถ™์ธ๋‹ค.
      • ์ •์  ๋ฉ”์†Œ๋“œ๋Š” ๋ฌด์Šจ ๊ธฐ์ค€์œผ๋กœ ์ •ํ•ด์•ผํ•˜๋Š”๊ฐ€?
        1. ๋งŒ์•ฝ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ๋˜๊ณ , ๋ณ€ํ™”๋ฅผ ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
        2. ๋งŒ์•ฝ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
        3. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.
        4. ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ณต์œ ๋˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ •์  ๋ฉ”์†Œ๋“œ๋กœ ์ถ”์ถœํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
        5. ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ณ€ํ™”๋˜์ง€ ์•Š๊ณ , ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์ง€ ์•Š๋Š”๋‹ค.
      • static ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” method area๋ž€?
        • Method Area๋Š” Class์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ํ•œ๋‹ค. Class ์˜ Method๊ฐ™์€ ๊ฒฝ์šฐ Method Area์— ์ €์žฅ ๋œ๋‹ค. Method์€ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋˜ํ•œ Class ์˜ Meta ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.(Field ์ด๋ฆ„, Fieldํƒ€์ž…, Class ์ด๋ฆ„ ๋“ฑ๋“ฑ) ์•„๋ž˜์˜ Method Area์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋ฅผ ์ž์„ธํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ธ ๊ทธ๋ฆผ์ด๋‹ค.

          Java 8 ์ด์ „์— Method Area๋ฅผ **PermGen(Permanat Generation Space)**์— ํ• ๋‹น ํ–ˆ๋‹ค

          Java 8 ์ดํ›„์—๋Š” PermGen์ด ์™„์ „ํžˆ ์ œ๊ฑฐ ๋˜์–ด Method Area๋Š” Native Heap์— ํ• ๋‹น ๋œ๋‹ค. ๊ณผ๊ฑฐ์˜ PermGen์€ ํ˜„์žฌ Metaspace ๋กœ ๋ถˆ๋ฆฌ์šฐ๋Š”๋ฐ Method Area๋Š” Meta ์ •๋ณด๋ฅผ ์ €์žฅ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. PermGen์—์„œ๋Š” Default๋กœ Maximum size๋ฅผ ํ• ๋‹น ํ•˜์˜€๋Š”๋ฐ ๋งŒ์•ฝ ํ•ด๋‹น ์‚ฌ์ด์ฆˆ์— ๋„๋‹ฌ ํ•˜๋ฉด OutOfMemoryErr ๊ฐ€ ์ƒ์„ฑ ๋˜์—ˆ๋‹ค.

          Metaspace์—์„œ๋Š” Maximum size๊ฐ€ ๋”ฐ๋กœ ์„ค์ • ๋˜ ์–ด์žˆ์ง€ ์•Š๊ณ  ์‹œ์Šคํ…œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๊ฐ€ Maximum size์ด๋‹ค. ๋˜ํ•œ Garbage Collector ํผํฌ๋จผ์Šค์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผฐ๋‹ค.

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

      • ๋ž˜ํผ(Wrapper) ํด๋ž˜์Šค

        ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(int, double, boolean ๋“ฑ)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ(ํฌ์žฅ) ํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

        • ์‚ฌ์šฉ ์ด์œ 

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

      • ๋ฐ•์‹ฑ(boxing)์€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ž˜ํผ(wrapper) ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์˜๋ฏธ

      • ์–ธ๋ฐ•์‹ฑ(un boxing)์€ ๋ž˜ํผ(wrapper) ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์œผ๋กœ ์–ป์–ด๋‚ด๋Š” ๊ณผ์ •์„ ์˜๋ฏธ

  • SPRING(๊น€์ง€ํ›ˆ)

    • JPA vs Mybatis

      • JDBC

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

      • JPA

        ์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ API ํ‘œ์ค€ ๋ช…์„ธ๋กœ, Java์—์„œ ์ œ๊ณตํ•˜๋Š” API์ด๋‹ค. ์ž๋ฐ” ํ”Œ๋žซํผ SE์™€ ์ž๋ฐ” ํ”Œ๋žซํผ EE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ด€๋ฆฌ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฐ” API์ด๋‹ค. ์ฆ‰, JPA๋Š” ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ์•„๋‘” ๊ฒƒ์ด๋‹ค. ๊ธฐ์กด์— EJB์—์„œ ์ œ๊ณต๋˜๋˜ ์—”ํ„ฐํ‹ฐ ๋นˆ(Entity Bean)์„ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค

        ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” JPA ๊ตฌํ˜„์ฒด๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. JPA์˜ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋กœ๋Š” Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials ๋“ฑ์ด ์žˆ๋‹ค. ์ด ๊ตฌํ˜„์ฒด๋“ค์„ ORM Framework๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

      • Hibernate

        Hibernate๊ฐ€ SQL์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Hibernate๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ๋Š” JDBC API๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹จ์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์„ ๋ฟ์ด๋‹ค.

      • Mybatis

        ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ SQL, ์ €์žฅ ํ”„๋กœ์‹œ์ € ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ๊ณ ๊ธ‰ ๋งคํ•‘์„ ์ง€์›ํ•˜๋Š” SQL Mapper์ด๋‹ค. JDBC๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒ๋‹น ๋ถ€๋ถ„์˜ ์ฝ”๋“œ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • ๋ฐ ๊ฒฐ๊ณผ ๋งคํ•‘์„ ๋Œ€์‹ ํ•ด์ค€๋‹ค. ๊ธฐ์กด์— JDBC๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” DB์™€ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๋ณต์žกํ•œ ์„ค์ •(Connection)๋“ค์„ ๋‹ค๋ฃจ์–ด์•ผ ํ–ˆ์ง€๋งŒ SQL Mapper๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์‹ค์ œ SQL๋ฌธ์— ์—ฐ๊ฒฐํ•จ์œผ๋กœ์จ, ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ํŽธ๋ฆฌํ•œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.

    • SPRING MVC vs Webflux ๋น„๊ต

      • Spring MVC

        ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Queue๋ฅผ ํ†ตํ•˜๊ฒŒ ๋œ๋‹ค. ์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์š”์ฒญ๋‹น Thread ํ•œ๊ฐœ๊ฐ€ ํ• ๋‹น๋œ๋‹ค. ( One Request Per Thread Model ) ์ฆ‰, Thread Pool์ด ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ๊นŒ์ง€๋งŒ ๋™์‹œ์ ์œผ๋กœ ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋˜๊ณ  ๋งŒ์•ฝ ๋„˜๊ฒŒ ๋œ๋‹ค๋ฉด ํ์—์„œ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

        Thread ์ƒ์„ฑ ๋น„์šฉ์€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์„œ๋ฒ„ ์„ฑ๋Šฅ์— ๋งž๊ฒŒ Thread ์ตœ๋Œ€ ์ˆ˜์น˜๋ฅผ ์ œํ•œ ์‹œํ‚ค๋Š”๋ฐ, tomcat ๊ธฐ๋ณธ ์‚ฌ์ด์ฆˆ๋Š” 200์ด๋‹ค.

        ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋Šฆ๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ถ€๋ถ„์€ DB, Network ๋“ฑ์˜ I/O๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋ถ€๋ถ„์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ๋น„๋œ๋‹ค. I/O์ž‘์—…์€ CPU๊ฐ€ ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. I/O๋ฅผ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด Spring์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” WebFlux์ด๋‹ค.

      • Webflux

        ์š”์ฒญ๋ณ„๋กœ Thread๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‹ค์ˆ˜์˜ ์š”์ฒญ์„ ์ ์€ Thread๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. Worker Thread ๊ธฐ๋ณธ ์‚ฌ์ด์ฆˆ๋Š” ์„œ๋ฒ„์˜ Core ๊ฐœ์ˆ˜๋กœ ์„ค์ •์ด ๋˜์–ด์žˆ๋‹ค. ์ฆ‰ core ์ˆ˜๊ฐ€ 4๊ฐœ๋ผ๋ฉด 4๊ฐœ์˜ Thread๋กœ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๊ฐ€? ( Node.js์—์„œ ๋ณธ ์•„ํ‚คํ…์ฒ˜์ด๋‹ค... )

        ์ด๋ ‡๊ฒŒ Non Blocking ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜๋ฉด ํšจ์œจ์ ์ธ I/O ์ œ์–ด๊ฐ€ ๋˜์–ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ MSA์—์„œ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ ์šฉํ•˜๊ธฐ ์ข‹๋‹ค. ํ•˜์ง€๋งŒ!! I/O ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋ผ๋„ Blocking ๋ฐฉ์‹์ด ์žˆ๋‹ค๋ฉด, ๊ฒฐ๊ตญ Blocking์ด ๋ฐœ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์— 4๊ฐœ์˜ Thread ์ดํ›„ ์š”์ฒญ์€ ๊ฒฐ๊ตญ ๋Œ€๊ธฐ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

        ์œ„์™€ ๊ด€๋ จ๋œ ์˜ˆ๊ฐ€ DB connection ์ผ ๊ฒƒ์ด๋‹ค. ์•„๋ฌด ์ƒ๊ฐ์—†์ด blocking ๋˜๋Š” DB connection์„ ๋„ฃ์–ด๋†“๊ณ  ๋‚˜๋จธ์ง€๋Š” non-blocking ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. MongoDB, Redis ๋“ฑ์˜ NoSQL์€ non-blocking db connection์„ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค!

  • Infra/์šด์˜(๋ฐ•ํšจ์›)

    • Join์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ๋‹ค ์„ค๋ช…
      • inner join
      • outer join
      • left outer join
      • right router join
      • fetch join
      • union
    • ์ •๊ทœํ™”, ์—ญ์ •๊ทœํ™”๋Š” ๋ฌด์—‡์ธ์ง€?
      • ์ •๊ทœํ™”

        ์ค‘๋ณต๋œ ์ •๋ณด(๋ฐ์ดํ„ฐ)์˜ ํฌํ•จ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ

        ์ •๊ทœํ™”๋Š” ๊ฒ€์ƒ‰๊ณผ ๊ฐฑ์‹  ๊ด€๋ฆฌ๋ฅผ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.

      • ์—ญ์ •๊ทœํ™”

        ์ง€๋‚˜์นœ ์ •๊ทœํ™”๋กœ ํ…Œ์ด๋ธ” ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ๋˜๋ฉด (ํ•œ ํ…Œ์ด๋ธ”๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ)

        ์ž‘์—…ํ•  ๋•Œ๋งˆ๋‹ค JOIN ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜ ์˜คํžˆ๋ ค ์ž‘์—…์˜ ํšจ์œจ์„ฑ์ด ๋‚ฎ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.

        ๋”ฐ๋ผ์„œ ํ•„์š”์— ๋”ฐ๋ผ ์ด๋ฏธ ๋ถ„ํ•ด๋œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฆด๋ ˆ์ด์…˜๋“ค์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ๋ฆด๋ ˆ์ด์…˜์œผ๋กœ ๋งŒ๋“œ๋Š” ์—ญ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด

        ๊ฒ€์ƒ‰ ์งˆ์˜์˜ ์ˆ˜ํ–‰์†๋„๋ฅผ ๋†’์ธ๋‹ค.

      • ์ •๊ทœํ™”์˜ ๋ชฉ์ 

        • ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•ด์„œ
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ํ™•์žฅ ์‹œ ์žฌ๋””์ž์ธ์„ ์ตœ์†Œํ™”
        • ๋‹ค์–‘ํ•œ ๊ด€์ ์—์„œ์˜ query๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ
        • ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์˜ ์‹œํ–‰์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ
        • ๊ฐ์ข… ์ด์ƒ ํ˜„์ƒ(Anomaly) ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ํ…Œ์ด๋ธ”์˜ ๊ตฌ์„ฑ์„ ๋…ผ๋ฆฌ์ ์ด๊ณ  ์ง๊ด€์ ์œผ๋กœ ํ•œ๋‹ค.
      • ์ •๊ทœํ™” ๊ณผ์ •

        • 1์ฐจ ์ •๊ทœํ™” : ๊ฐ ๋กœ์šฐ๋งˆ๋‹ค ๊ฐ’์ด 1๊ฐœ์”ฉ๋งŒ ์žˆ์–ด์•ผ ํ•œ๋‹ค
        • 2์ฐจ ์ •๊ทœํ™” : ๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์†์„ฑ ์ œ๊ฑฐ
        • 3์ฐจ ์ •๊ทœํ™” : ์ดํ–‰ ํ•จ์ˆ˜ ์กฑ์†์„ฑ ์ œ๊ฑฐ
      • ์ด์ƒํ˜„์ƒ

        • ์‚ญ์ œ ์ด์ƒ: ํŠœํ”Œ ์‚ญ์ œ ์‹œ ๊ฐ™์ด ์ €์žฅ๋œ ๋‹ค๋ฅธ ์ •๋ณด๊นŒ์ง€ ์—ฐ์‡„์ ์œผ๋กœ ์‚ญ์ œ๋˜๋Š” ํ˜„์ƒ
        • ์‚ฝ์ž… ์ด์ƒ: ํŠœํ”Œ ์‚ฝ์ž… ์‹œ ํŠน์ • ์†์„ฑ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—†์–ด NULL์„ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ํ˜„์ƒ
        • ์ˆ˜์ • ์ด์ƒ: ํŠœํ”Œ ์ˆ˜์ • ์‹œ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋งŒ ์ˆ˜์ •๋˜์–ด ์ผ์–ด๋‚˜๋Š” ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ํ˜„์ƒ