์คํ๋ง DB ์ ๊ทผ ๊ธฐ์
6. ์คํ๋ง ๋ฐ์ดํฐ JPA
์คํ๋ง ๋ถํธ์ JPA๋ง ์ฌ์ฉํด๋ ๊ฐ๋ฐ ์์ฐ์ฑ์ด ํฌ๊ฒ ์ฆ๊ฐํ๊ณ ๊ฐ๋ฐํด์ผ ํ ์ฝ๋๋ ํ์ฐํ ์ค์ด๋ค์๋ค.
์ฌ๊ธฐ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ผ๋ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ธฐ์กด์ ํ๊ณ๋ฅผ ๋์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ตฌํ ํด๋์ค ์์ด ์ธํฐํ์ด์ค ๋ง์ผ๋ก ๊ฐ๋ฐ์ ์๋ฃํ ์ ์๊ณ ๋ฐ๋ณต ๊ฐ๋ฐํด์จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
- ์คํ๋ง ๋ฐ์ดํฐ JPA๋ JPA๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์ด๋ค.
- JPA์ ๋์ผํ ํ๊ฒฝ ์ค์ ์ ๊ฐ์ง๋ค.
- ์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋ฐํ๋๋ฐ ์ง์คํ ์ ์๋ค.
- ์ค๋ฌด์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์คํ๋ง ๋ฐ์ดํฐ JPA๋ ์ด์ ์ ํ์ด ์๋๋ผ ํ์์ด๋ค.
๋๋ณด๊ธฐ
- ์ค๋ฌด์์๋ JPA์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ , ๋ณต์กํ ๋์ ์ฟผ๋ฆฌ๋ Querydsl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- Querydsl์ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ๋ ์๋ฐ ์ฝ๋๋ก ์์ ํ๊ฒ ์์ฑํ ์ ์๊ณ ๋์ ์ฟผ๋ฆฌ๋ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๋ค.
- ์ด ์กฐํฉ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ฟผ๋ฆฌ๋ JPA๊ฐ ์ ๊ณตํ๋ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์คํ๋ง JdbcTemplate๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
1) ์คํ๋ง ๋ฐ์ดํฐ JPA ๋ฆฌํฌ์งํ ๋ฆฌ ๊ตฌํ
package hello.hello.spring.repository;
import hello.hello.spring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
// ๋ค์ค ์์: I๊ฐ I๋ฅผ ์์ํ ๋ extends๋ฅผ ์ฌ์ฉํ๋ค.
// JpaRepository: ์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ๊ตฌํ์ฒด์ ์๋์ผ๋ก ์์ฑํด์ ์คํ๋ง๋น์ผ๋ก ๋ฑ๋กํ๋ค.
public interface SpringDataJPAMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
@Override
Optional<Member> findByName(String name);
}
package hello.hello.spring;
import hello.hello.spring.repository.*;
import hello.hello.spring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
// SpringDataJPAMemberRepository
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
}
2) ์คํ๋ง ๋ฐ์ดํฐ JPA ์ ๊ณต ํด๋์ค
- ๊ณตํตํํ ์ ์๋ ๊ฒ๋ค์ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ์ ๊ณตํ๋ค.
- findByName()์ฒ๋ผ ๊ณตํตํํ ์ ์๋ ๊ฒ๋ค์ ๋ฉ์๋ ์ด๋ฆ๋ง์ผ๋ก ์กฐํ๊ฐ ๊ธฐ๋ฅํ๋๋ก ์ ๊ณตํ๋ค. (findBy~(~))
- ํ์ด์ง ๊ธฐ๋ฅ์ ์๋์ผ๋ก ์ ๊ณตํ๋ค.