μŠ€ν”„λ§ DB 2편 - 데이터 μ ‘κ·Ό ν™œμš© 기술 μ„Ήμ…˜ 5 μˆ˜κ°•

+) 22. 09. 06. μΆ”κ°€

μ„Ήμ…˜ 5. 데이터 μ ‘κ·Ό 기술 - JPA μˆ˜κ°• μ™„λ£Œ!!

JPAλŠ” ORM 데이터 μ ‘κ·Ό κΈ°μˆ μ„ μ œκ³΅ν•œλ‹€.
μŠ€ν”„λ§ 데이터 JPA, Querydsl은 JPAλ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” 도ꡬ라 μƒκ°ν•˜λ©΄ λœλ‹€.

JPAμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 뢀뢄은 객체와 ν…Œμ΄λΈ”μ„ λ§€ν•‘ν•˜λŠ” 것이닀.

  • @Entity: JPAκ°€ μ‚¬μš©ν•˜λŠ” κ°μ²΄λΌλŠ” λœ»μ΄λ‹€. 이 μ• λ…Έν…Œμ΄μ…˜μ΄ μžˆμ–΄μ•Ό JPAκ°€ 인식할 수 μžˆλ‹€.
  • @Id: ν…Œμ΄λΈ”μ˜ PK와 ν•΄λ‹Ή ν•„λ“œλ₯Ό λ§€ν•‘ν•œλ‹€.
  • @GeneratedValue(strategy = GenerationType.IDENTITY): PK 생성 값을 DBμ—μ„œ μƒμ„±ν•˜λŠ” IDENTITY 방식을 μ‚¬μš©ν•œλ‹€. (예: MySQL auto increment)

JPAλŠ” public λ˜λŠ” protected의 κΈ°λ³Έ μƒμ„±μžκ°€ ν•„μˆ˜λ‹€.

JPAλŠ” νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜λŠ” μ‹œμ μ—, λ³€κ²½λœ μ—”ν‹°ν‹° 객체가 μžˆλŠ”μ§€ ν™•μΈν•œλ‹€. νŠΉμ • μ—”ν‹°ν‹° 객체가 λ³€κ²½λœ κ²½μš°μ—λŠ” UPDATE SQL을 μ‹€ν–‰ν•œλ‹€.

JPAμ—μ„œ μ—”ν‹°ν‹° 객체λ₯Ό PK κΈ°μ€€μœΌλ‘œ μ‘°νšŒν•  경우 find()λ₯Ό μ‚¬μš©ν•˜κ³ , 쑰회 νƒ€μž…κ³Ό PK 값을 μ£Όλ©΄ λœλ‹€. 그럼 JPAκ°€ 쑰회 SQL을 λ§Œλ“€μ–΄ μ‹€ν–‰ν•˜κ³ , κ²°κ³Όλ₯Ό λ°”λ‘œ 객체둜 λ³€ν™˜ν•΄μ€€λ‹€.

JPQL
JPAλŠ” JPQL(Java Persistence Query Language)μ΄λΌλŠ” 객체 지ν–₯ 쿼리 μ–Έμ–΄λ₯Ό μ œκ³΅ν•œλ‹€.
주둜 μ—¬λŸ¬ 데이터λ₯Ό λ³΅μž‘ν•œ 쑰건으둜 μ‘°νšŒν•  λ•Œ μ‚¬μš©ν•œλ‹€.

예: String jpql = "select i from Item i";

JPQL을 μ‹€ν–‰ν•˜λ©΄ κ·Έ μ•ˆμ— ν¬ν•¨λœ μ—”ν‹°ν‹° 객체의 맀핑 정보λ₯Ό ν™œμš©ν•˜μ—¬ SQL을 λ§Œλ“€κ²Œ λœλ‹€.

μ˜ˆμ™Έ λ³€ν™˜
JPA의 경우 μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ JPA μ˜ˆμ™Έκ°€ λ°œμƒν•˜κ²Œ λœλ‹€.
EntityManagerλŠ” μˆœμˆ˜ν•œ JPA 기술이고, μŠ€ν”„λ§κ³ΌλŠ” 관계가 μ—†λ‹€. λ”°λΌμ„œ μ—”ν‹°ν‹° λ§€λ‹ˆμ €λŠ” μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ JPA κ΄€λ ¨ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¨λ‹€.
κ·Έλ ‡λ‹€λ©΄ JPA μ˜ˆμ™Έλ₯Ό μŠ€ν”„λ§ μ˜ˆμ™Έ 좔상화 DataAccessException둜 μ–΄λ–»κ²Œ λ³€ν™˜ν• κΉŒ?
λ°”λ‘œ @Repositoryλ₯Ό 뢙이면 κ°€λŠ₯해진닀.

@Repository의 κΈ°λŠ₯
@Repositoryκ°€ 뢙은 ν΄λž˜μŠ€λŠ” μ»΄ν¬λ„ŒνŠΈ μŠ€μΊ”μ˜ λŒ€μƒμ΄ λœλ‹€.
@Repositoryκ°€ 뢙은 ν΄λž˜μŠ€λŠ” μ˜ˆμ™Έ λ³€ν™˜ AOP의 적용 λŒ€μƒμ΄ λœλ‹€. μ˜ˆμ™Έ λ³€ν™˜ AOP ν”„λ‘μ‹œλŠ” JPA κ΄€λ ¨ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ JPA μ˜ˆμ™Έ λ³€ν™˜κΈ°λ₯Ό 톡해 λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό μŠ€ν”„λ§ 데이터 μ ‘κ·Ό μ˜ˆμ™Έλ‘œ λ³€ν™˜ν•œλ‹€.

μ˜ˆμ™Έ λ³€ν™˜ ν›„

결과적으둜 리포지토리에 @Repository μ• λ…Έν…Œμ΄μ…˜λ§Œ 있으면 μŠ€ν”„λ§μ΄ μ˜ˆμ™Έ λ³€ν™˜μ„ μ²˜λ¦¬ν•˜λŠ” AOPλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.


ν† ν”½ 1개 - λ°μ΄ν„°λ² μ΄μŠ€ μ •κ·œν™”


μ½”ν…Œ 1문제

μ„œμšΈμ—μ„œ κΉ€μ„œλ°© μ°ΎκΈ°

⬆️ 문제 μ„€λͺ…

class Solution {
    public String solution(String[] seoul) {
        String answer = "";

        for (int i = 0; i < seoul.length; i++) {
            if (seoul[i].equals("Kim")) {
                answer = "κΉ€μ„œλ°©μ€ " + i + "에 μžˆλ‹€";
            }
        }

        return answer;
    }
}
⬆️ λ‚˜μ˜ 풀이

μ μˆ˜λŠ” 2점... 참고둜 μ²˜μŒμ—” 'equals'κ°€ μ•„λ‹ˆλΌ '=='을 μ¨μ„œ ν‹€λ Έλ‹€ γ…Žγ…Ž;
검색해 λ³΄λ‹ˆ '=='은 λ¬Έμžμ—΄μ˜ μ£Όμ†Œλ₯Ό λΉ„κ΅ν•˜λŠ” 것이고, equalsλŠ” 문자 ν•˜λ‚˜ν•˜λ‚˜μ˜ 값을 λΉ„κ΅ν•œλ‹€κ³  ν•œλ‹€. 즉, equalsλŠ” 값이 κ°™μœΌλ©΄ trueλ₯Ό λ°˜ν™˜ν•¨... γ…Žγ…Ž... ν•˜λ‚˜ λ°°μ› λ‹€...


μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œ 정리

profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보

Powered by GraphCDN, the GraphQL CDN