Spring/Spring DB
DB λ½ - κ°λ
μ΄ν΄ μΈμ
1μ΄ νΈλμμ
μ μμνκ³ λ°μ΄ν°λ₯Ό μμ νλ λμ μμ§ μ»€λ°μ μννμ§ μμλλ°, μΈμ
2μμ λμμ κ°μ λ°μ΄ν°λ₯Ό μμ νκ² λλ©΄ μ¬λ¬κ°μ§ λ¬Έμ κ° λ°μνλ€. λ°λ‘ νΈλμμ
μ μμμ±μ΄ κΉ¨μ§λ κ²μ΄λ€. μ¬κΈ°μ λν΄μ μΈμ
1μ΄ μ€κ°μ λ‘€λ°±μ νκ² λλ©΄ μΈμ
2λ μλͺ»λ λ°μ΄ν°λ₯Ό μμ νλ λ¬Έμ κ° λ°μνλ€. μ΄λ° λ¬Έμ λ₯Ό λ°©μ§νλ €λ©΄, μΈμ
μ΄ νΈλμμ
μ μμνκ³ λ°μ΄ν°λ₯Ό μμ νλ λμμλ 컀λ°μ΄λ λ‘€λ°± μ κΉμ§ λ€λ₯Έ μΈμ
μμ ν΄λΉ λ°μ΄ν°λ₯Ό μμ ν μ μκ² λ§μμΌ νλ€. DB λ½ - λ³κ²½ λ€μ μμλ₯Ό ν΅ν΄ λμμ λ°μ΄ν°λ₯Ό μμ νλ λ¬Έμ λ₯Ό λ½μΌλ‘ μ΄λ»κ² ν΄κ²°νλμ§ μμΈν μμ보μ. 1. μΈμ
1μ νΈλμμ
μ μμνλ€. 2. μΈμ
1μ memberA μ money λ₯Ό 500μΌλ‘ λ³κ²½μ μλνλ€. μ΄λ ν΄λΉ..
Spring/Spring DB
λ°μ΄ν°λ² μ΄μ€ μ°κ²° ꡬ쑰 μ¬μ©μλ μΉ μ ν리μΌμ΄μ
μλ²(WAS)λ DB μ κ·Ό ν΄ κ°μ ν΄λΌμ΄μΈνΈλ₯Ό μ¬μ©ν΄μ λ°μ΄ν°λ² μ΄μ€ μλ²μ μ κ·Όν μ μλ€. ν΄λΌμ΄μΈνΈλ λ°μ΄ν°λ² μ΄μ€ μλ²μ μ°κ²°μ μμ²νκ³ μ»€λ₯μ
μ λ§Ίκ² λλ€. μ΄λ λ°μ΄ν°λ² μ΄μ€ μλ²λ λ΄λΆμ μΈμ
μ΄λΌλ κ²μ λ§λ λ€. κ·Έλ¦¬κ³ μμΌλ‘ ν΄λΉ 컀λ₯μ
μ ν΅ν λͺ¨λ μμ²μ μ΄ μΈμ
μ ν΅ν΄μ μ€ννκ² λλ€. Database Session λ°μ΄ν°λ² μ΄μ€ μ μμ μμμΌλ‘, μ¬λ¬ μμ
μ μνν ν μ μ μ’
λ£κΉμ§μ μ 체 κΈ°κ°μ μλ―Ένλ€. μΈμ
μμλ μ¬λ¬κ°μ νΈλμμ
μ΄ μ‘΄μ¬ν μ μμΌλ©°(νλ μ΄μμ), μΌλ°μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€λ μ¬λ¬ κ³³μμ λμμ μ κ·Όμ΄ κ°λ₯νκΈ° λλ¬Έμ λ§μ μΈμ
μ΄ λμμ μ°κ²°λ μ μλ€. μΈμ
μ λ°μ΄ν°κ° λ³κ²½, μμ κ° νμ λ λκΉμ§ ν΄λΉ λ°μ΄ν° μ‘°μμ λΆλ¦¬μ²λ¦¬..
Spring/Spring DB
λ°μ΄ν°λ₯Ό μ μ₯ν λ λ¨μν νμΌμ μ μ₯ν΄λ λλλ°, λ°μ΄ν°λ² μ΄μ€μ μ μ₯νλ μ΄μ λ 무μμΌκΉ? μ¬λ¬κ°μ§ μ΄μ κ° μμ§λ§, κ°μ₯ λνμ μΈ μ΄μ λ λ°λ‘ λ°μ΄ν°λ² μ΄μ€λ νΈλμμ
μ΄λΌλ κ°λ
μ μ§μνκΈ° λλ¬Έμ΄λ€. νΈλμμ
νΈλμμ
μ νλμ κ±°λλ₯Ό μμ νκ² μ²λ¦¬νλλ‘ λ³΄μ₯ν΄μ£Όλ κ²μ λ»νλ€. μμ ) 5000μ κ³μ’μ΄μ²΄ 1. Aμ μκ³ λ₯Ό 5000μ κ°μ 2. Bμ μκ³ λ₯Ό 5000μ μ¦κ° κ³μ’μ΄μ²΄λΌλ κ±°λλ μ΄λ κ² 2κ°μ§ μμ
μ΄ ν©μ³μ Έμ νλμ μμ
μ²λΌ λμν΄μΌ νλ€. λ§μ½ 1λ²μ μ±κ³΅νλλ° 2λ²μμ μμ€ν
μ λ¬Έμ κ° λ°μνλ©΄ κ³μ’μ΄μ²΄λ μ€ν¨νκ³ , Aμ μκ³ λ§ 5000μ κ°μνλ μ¬κ°ν λ¬Έμ κ° λ°μνλ€. λ°μ΄ν°λ² μ΄μ€κ° μ 곡νλ νΈλμμ
κΈ°λ₯μ μ¬μ©νλ©΄ 1,2 λλ€ ν¨κ» μ±κ³΅ν΄μΌ μ μ₯νκ³ , μ€κ°μ νλλΌλ μ€ν¨νλ©΄ κ±°λ μ ..
Spring/Spring DB
DataSource μ΄ν΄ 컀λ₯μ
μ μ»λ λ°©λ²μ μμ νμ΅ν JDBC DriverManager λ₯Ό μ§μ μ¬μ©νκ±°λ, 컀λ₯μ
νμ μ¬μ©νλ λ± λ€μν λ°©λ²μ΄ μ‘΄μ¬νλ€. DriverManagerλ₯Ό ν΅ν΄ 컀λ₯μ
νλνλ€κ° 컀λ₯μ
νλ‘ λ³κ²½μ λ¬Έμ μ°λ¦¬κ° μμ JDBCλ‘ κ°λ°ν μ ν리μΌμ΄μ
μ²λΌ DriverManager λ₯Ό ν΅ν΄μ 컀λ₯μ
μ νλνλ€κ°, 컀λ₯μ
νμ μ¬μ©νλ λ°©λ²μΌλ‘ λ³κ²½νλ €λ©΄ μ΄λ»κ² ν΄μΌν κΉ? μλ₯Ό λ€μ΄μ μ ν리μΌμ΄μ
λ‘μ§μμ DriverManager λ₯Ό μ¬μ©ν΄μ 컀λ₯μ
μ νλνλ€κ° HikariCP κ°μ 컀λ₯μ
νμ μ¬μ©νλλ‘ λ³κ²½νλ©΄ 컀λ₯μ
μ νλνλ μ ν리μΌμ΄μ
μ½λλ ν¨κ» λ³κ²½ν΄μΌ νλ€. μμ‘΄κ΄κ³κ° DriverManager μμ HikariCP λ‘ λ³κ²½λκΈ° λλ¬Έμ΄λ€. λ¬Όλ‘ λμ μ¬μ©λ²λ μ‘°κΈ..
Spring/Spring DB
λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ
μ λ§€λ² νλ(볡μ‘ν κ³Όμ ) λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ
μ νλν λλ λ€μκ³Ό κ°μ 볡μ‘ν κ³Όμ μ κ±°μΉλ€. 0. μ¬μ©μ μμ² 1. μ ν리μΌμ΄μ
λ‘μ§μ DB λλΌμ΄λ²λ₯Ό ν΅ν΄ 컀λ₯μ
μ μ‘°ννλ€. 2. DB λλΌμ΄λ²λ DB μ TCP/IP 컀λ₯μ
μ μ°κ²°νλ€. λ¬Όλ‘ μ΄κ³Όμ μμ 3 way handshake κ°μ TCP/IP μ°κ²°μ μν λ€νΈμν¬ λμμ΄ λ°μνλ€. 3. DB λλΌμ΄λ²λ TCP/IP 컀λ₯μ
μ΄ μ°κ²°λλ©΄, ID/PWμ κΈ°ν λΆκ°μ 보λ₯Ό DBμ μ λ¬νλ€. 4. DBλ ID,PWλ₯Ό ν΅ν΄ λ΄λΆ μΈμ¦μ μλ£νκ³ , λ΄λΆμ DB μΈμ
μ μμ±νλ€. 5. DBλ 컀λ₯μ
μμ±μ΄ μλ£λμλ€λ μλ΅μ 보λΈλ€. 6. DB λλΌμ΄λ²λ 컀λ₯μ
κ°μ²΄λ₯Ό μμ±ν΄μ ν΄λΌμ΄μΈνΈμ λ°ννλ€. μ΄λ κ² μ»€λ₯μ
μ μλ‘ λ§λλ κ²μ κ³Όμ λ..
Spring/Spring DB
λ¬Έμ μ λ°μ΄ν°λ² μ΄μ€λ₯Ό λ€λ₯Έ μ’
λ₯μ λ°μ΄ν°λ² μ΄μ€λ‘ λ³κ²½νλ©΄ μ ν리μΌμ΄μ
μλ²μ κ°λ°λ λ°μ΄ν°λ² μ΄μ€ μ¬μ© μ½λλ ν¨κ» λ³κ²½ν΄μΌ νλ€. κ°λ°μκ° κ°κ°μ λ°μ΄ν°λ² μ΄μ€λ§λ€ 컀λ₯μ
μ°κ²°, SQL μ λ¬, κ·Έλ¦¬κ³ κ·Έ κ²°κ³Όλ₯Ό μλ΅ λ°λ λ°©λ²μ μλ‘ νμ΅ν΄μΌ νλ€. μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ JDBCλΌλ μλ° νμ€μ΄ λ±μ₯νλ€. JDBC μ΄ν΄ JDBC(Java Database Connectivity)λ μλ°μμ λ°μ΄ν°λ² μ΄μ€μ μ μν μ μλλ‘ νλ μλ° APIλ€. JDBCλ λ°μ΄ν°λ² μ΄μ€μμ μλ£λ₯Ό 쿼리νκ±°λ μ
λ°μ΄νΈνλ λ°©λ²μ μ 곡νλ€. JDBCλ₯Ό μ§μ μ¬μ©νμ§λ μλλΌλ, JDBCκ° μ΄λ»κ² λμνλμ§ κΈ°λ³Έ μ리λ₯Ό μμλμ΄μΌ νλ€. κ·ΈλμΌ ν΄λΉ κΈ°μ λ€μ λ κΉμ΄μκ² μ΄ν΄ν μ μκ³ , 무μλ³΄λ€ λ¬Έμ κ° λ°μνμ λ κ·Όλ³Έμ μΈ λ¬Έ..
Spring/Spring JPA κΈ°λ³Έ
JPQL - νμΉ μ‘°μΈ(fetch join) SQL μ‘°μΈ μ’
λ₯κ° μλ JPQL μμ μ±λ₯ μ΅μ νλ₯Ό μν΄ μ 곡νλ κΈ°λ₯μ΄λ€. μ°κ΄λ μν°ν°λ 컬λ μ
μ SQL νλ²μ ν¨κ» μ‘°ννλ κΈ°λ₯μ΄λ€. μμ) SQL νλ²μ νμμ μ‘°ννλ©΄μ μ°κ΄λ νλ ν¨κ» μ‘°ν JPQL select m from Member m join fetch m.team SQL SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID SQL μ 보면 νμ λΏλ§ μλλΌ ν(T.*)λ ν¨κ» select νλ€. νμΉ μ‘°μΈμ΄ μλ κ·Έλ₯ μ‘°νν λ String query = "select m from Member m "; List result = em.createQuery(query, Mem..
Spring/Spring JPA κΈ°λ³Έ
νμ΄μ§ API λ보기 νμ΄μ§μ΄λ? νμ΄μ§μ΄λ ν νλ©΄μμ 보μ¬μ£Όλ λ°μ΄ν°μ λ²μλ₯Ό κ²°μ νλ μΌλ ¨μ λ°©λ²μ λ§νλ€. νμ΄μ§μ μ¬μ©μκ° μ΄λ€ λ°μ΄ν°λ₯Ό νμλ‘ ν λ, μ 체 λ°μ΄ν°μ μΌλΆλΆμ 보μ¬μ£Όλ κ²μ λ§ν©λλ€. μ°λ¦¬κ° νν μ νλ μΌλ°μ μΈ μΉ κ²μνμ΄λ μ‘°ν νλ©΄μ μκ°νλ©΄ λλ€. μ‘°ν λμ λ°μ΄ν°κ° 10λ§ κ±΄μ΄λΌλ©΄ ν νλ©΄μμ λͺ¨λ λ³΄μ¬ μ€ μλ μλ€. ν νλ©΄μμ 보μ¬μ€ μ μλ λ²μλ₯Ό κ²°μ νλ κ²μ΄ νμ΄μ§μ΄λ€. JPA λ νμ΄μ§μ λ APIλ‘ μΆμννμλ€. List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(0) .setMaxResults(10) .getResult..