테스트 코드 작성 시 데이터베이스 초기화 하는 방법
2022. 3. 26. 19:40
JPA
테스트 코드 작성 시 데이터베이스 초기화 하는 방법 이전까지 테스트 코드 작성 시 데이터베이스 초기화 방법 데이터베이스를 초기화 해야하는 이유는 각각의 테스트는 독립된 환경에서 검증이 되어야 하기 때문이다. 테스트 코드를 작성하면 각 테스트마다 초기화된 데이터 베이스로 테스트 하기 위해 데이터 베이스를 초기화 해주어야 한다. 그 때 나는 보통 repository.deleteAll()을 사용했었다. 이전에는 몰랐는데 이번 프로젝트를 하면서 고민을 하게되며, 단점과 다른 방법을 알게 되었다. 이전 방법의 단점 repository.deleteAll()의 단점은 테스트 코드가 프로덕션 코드에 의존하게 되는 것이다. 프로덕션 코드에 의존하게 되면, repository가 변경될 경우 테스트 코드에 의존 역시 변경되..
ORM(JPA)를 왜 사용할까?
2022. 3. 24. 00:02
JPA
ORM을 왜 사용하는가? SQL 의존적 개발 객체지향은 객체를 기반으로 개발을 해야하는데 관계형 데이터베이스를 사용하기 때문에 반복적인 SQL 작업을 해야한다. 패러다임의 불일치를 해결하자. 상속 객체는 상속관계가 있지만 데이터베이스는 없다. 출처 : 스프링 핵심 원리 - 기본편 하지만 위의 그림처럼 데이터베이스도 슈퍼타입 서브타입의 관계로 상속과 비슷한 구조로 설계할 수는 있다. 그렇다면 이제 어떤 부분이 불일치가 될까? 각각의 테이블에 따른 조인 SQL을 작성하고 각각의 객체에 매핑을 해줘야 한다. Album을 조회한다고 가정 해보자. 각각의 테이블에 따른 조인 SQL 작성 매핑할 각각의 객체 생성 이런 과정을 반복하게 된다. 이게 왜 문제가 될까? 만약 데이터베이스를 사용하지 않고 자바 컬렉션에 저..
JPA 영속성 컨텍스트가 뭘까?
2021. 10. 18. 00:01
JPA
JPA 영속성 컨텍스트에 관하여 클라이언트 요청부터 DB까지 동작하는 로직 웹 애플리케이션에 클라이언트 요청이 들어오면 EntityMangagerFactory 는 EntityManager 객체를 생성하게 됩니다. 각각 생성된 EntityManger 객체는 DB 커넥션 풀과 연결되게 됩니다. 영속성 컨텍스트 엔티티를 영구 저장하는 환경입니다. DB에 저장하는 것이 아니라 영속성 컨텍스트 에 저장하는 것입니다. EntityManager.persist(entity); 와 같이 엔티티를 EntityManager에 저장하여 사용할 수 있다는 것입니다. 즉, 'EntityManager' 를 통해 영속성 컨텍스트 에 접근하는 것입니다. 더 쉽게 이해하려면 EntityManager -> Persisten..