본문 바로가기

데이터 접근 기술39

주말 정리 PostgreSQL 타입 정리 DDD Start 주문 및 기본 개념 서칭 후 정리 UUID - JPA 매핑 ( UUID 버전 별 다른 점 정리 ) Spring Data Jpa 관련 강의 엔티티 설계 및 매핑 시 주의할점 2022. 10. 24.
영속성 컨텍스트 JPA가 컬렉션에 대해 변경 감지 이후 어떻게 SQL을 처리하는지 알기 전 책으로 읽었던 영속성 컨텍스트를 복습해보자. JPA에서 가장 중요한건 객체와 관계형 데이터베이스 매핑하는 것과 영속성 컨텍스트이다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻을 가지고 있다. 영속성 컨텍스트는 논리적인 개념으로 실제 JPA를 처음 사용하게 될 때는 엔티티 매니저 팩토리에서 엔티티 매니저를 사용하여 다음과 같이 사용하게 된다. EntityManger.persist(entity) 이는 실제 DB에 쿼리를 전송하는 것은 아니고 실제 DB에 쿼리를 전송하는 행위는 JPA에게 위임하게 되는데 JPA가 내부적으로 관리하게 되는 저장소라고 생각하면 될 듯하다. 하지만 persist()를 호출했다고 즉시 데이터베이스.. 2022. 10. 23.
Entity의 변경을 JPA에서 처리하는 방법 JPA를 공부하는 과정에서 여러 의문점이 들기 시작한다. 예를 들어 컬렉션을 포함하는 엔티티가 있는데 해당 엔티티의 컬렉션의 내용이 변경되어 엔티티에 변경된 컬렉션을 넣었다. 이 과정에서 JPA는 변경 감지, 병합(merge) 둘 중 하나로 처리하여 데이터베이스에 쿼리를 전송하여야 하는데, 변경되어 없어진 정보들은 JPA가 어떻게 처리하는 가에 대해서다. 상상해보자면 기존의 스냅숏에 저장된 컬렉션과 현재 저장된 컬렉션을 비교하여 제거된 엔티티들을 파악하고 해당 엔티티의 PK값을 통해 FK값을 자동적으로 지워 연관관계를 끊어버리는가? JPA를 공부할 수 록 이해가 잘 안 되는 부분들이 상당히 많다. 중요 논점 변경된 엔티티를 데이터베이스 테이블에 적용하기 위해 JPA는 어떤 방법을 사용하고 그 방법의 개념.. 2022. 10. 23.
JPA 공부하기 전 누구나 그렇겠지만 새로운 것을 받아들이는 것은 두려움을 마주치게 된다. 나는 개발바닥의 단톡방에서 항상 눈팅을 하는 것을 좋아한다. 다양한 사람들이 개발에 관한 이야기를 엿볼 수 있다는 것은 매우 행복한 일이 아닐 수 없다. 참여하신 분들은 항상 새로운 것을 미리 준비하시는 것 같다. 실무에서 사용하지 않더라도 궁금하다면? 아니면 의무처럼 공부하실지도 모르겠지만 이는 새로운 것을 언제든지 받아 빠르게 적응하는 기반을 닦는 것이 아닐까 생각된다. 나의 첫 실무는 내가 원하는 기술과 스택을 사용하지 않았다. SI에서 JPA와, Spring Boot, S3, EC2 를 경험할 일이 있을까? 당연하게도 레거시한 환경에 노출되었기에 레거시한 기술을 습득하고 일을 진행했다. 그렇지만 나도 대기업에서 사용하는 기술들.. 2022. 10. 22.
MyBatis 소개 MyBatis MyBatis는 SQL Mapper의 하나로 스프링에서 제공해주는 JdbcTemplate보다 더 많은 기능을 제공해준다. 학원 및 회사에서 접했던 MyBatis의 장점을 꼽으면 SQL을 로직과 분리하는 정책을 삼으면 SQL을 따로 관리할 수 있어 관리성에 있어서 매우 편리했고, 동적 쿼리에 대한 문제를 손쉽게 처리하여 작성할 수 있었다. MyBatis에 대한 깊은 지식 습득이 목표가 아닌 MyBatis의 간단한 사용법, 사용목적, 장단점을 파악하는 용도로만 공부할 예정이다. 간단히 XML에 작성된 쿼리를 살펴보자 update item set item_name = #{itemName}, price = #{price}, quantity = #{quantity} where id = #{id} X.. 2022. 10. 14.
NamedParameterJdbcTemplate 활용 JdbcTemplate을 사용해 파라미터를 바인딩하는 모습을 유심히 볼 필요가 있다. String sql = "update student set name=?, age =? where student_id = ?"; template.update(sql, name, age, studentId); "?"에 들어갈 파라미터를 개발자를 순서에 맞게 세팅해야 한다. 이는 실수를 발생할 여지가 있다. 실제로 쿼리에 들어갈 파라미터는 10개가 넘어 갈 수 도 있기 때문에 이는 큰 버그를 발생시킬 수 있다. 이러한 버그로 인해 데이터가 데이터베이스에 잘못 들어갔다면, 코드 복구와 더불어 데이터베이스 복구해야 하기 때문에 매우 긴 시간이 투자된다. 해결 방안으로 스프링은 NamedParameterJdbcTemplate을 지.. 2022. 10. 13.
JdbcTemplate 소개 JdbcTemplate? JdbcTemplate대신 많은 신입 개발자들은 순수 JDBC의 고충을 공부한 이후, 실제 사용되는 JPA 구현 기술, MyBatis 등으로 넘어가기에 JdbcTemplate에 대한 개념 자체를 모른다. 따라서 이번 기회에 JdbcTemplate의 간단한 소개와 설정, 장점과 단점을 통해 데이터 접근 기술 선택에 대한 좀 더 넓은 지식을 가지게 되었으면 좋겠다. 또한 스프링에서 데이터 접근 방식에 대한 doc를 읽어보는 것도 좋겠다. https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#jdbc-choose-style Data Access The Data Access Object (.. 2022. 10. 13.
[JPA] 공부하면서 나중에 찾아볼 것들 보호되어 있는 글 입니다. 2021. 4. 17.
[JPA] 2차 캐시 JPA를 공부하는 중에 다음과 같은 의문이 들었다. 영속성 콘텍스트가 제공하는 1차 캐시의 범위는 아무리 길어도 요청과 응답 주기이다. 그럼 자주 사용되는 데이터를 애플리케이션 내부 메모리에 저장하여 DB 연결을 최소화하여 재사용하면 성능이 오르지 않을까? 그래서 해당 데이터를 메모리에 캐시했다고 했을 경우 DB가 외부 시스템에서 데이터를 변경 혹은 추가했다면 해당 캐시는 데이터의 동일성을 유지하지 못하지 않을까? 이러한 해결책은 무엇일까? 그래서 한번 찾아보았다. 첫 번째의 해답은 2차 캐시를 사용하는 것이며, 2차 캐시를 사용하기 위해선 JPA의 표준 캐시와 구현체인 Hibernate의 캐시 기능을 활용할 수 있었다. JPA의 표준 캐시는 루트 엔티티 수준에서 캐시를 적용할 수 있지만 Hibernat.. 2021. 4. 17.
[JPA] JPA 기본 정리 JPA 소개 - 자바 진영에서 하이버네이트를 기반으로 자바 ORM 기술 표준을 만들었다. 이 표준은 Interface로 구성되어 있으며, 구현체인 Hibernate, EclipseLink, DataNucleus 등이 존재한다. ORM 말 그대로 오브젝트와 관계형 데이터베이스를 매핑해준다는 말이다. 왜 JPA인가? 1. 유지보수 : SQL에 의존적이거나 비지니스로 로직이 대부분 SQL에 몰려 있는 경우 엔티티의 사소한 변경만으로도 DAO계층 까지 내려가서 코드를 모두 수정해야 했다. 이것은 SQL에 따라서 반환되는 엔티티가 정해져 있다는 것이고, 그렇기에 모든 계층에 영향을 미치게 된다. 깊이 들어가서 생각해 보자. 보통 JAVA를 사용해 개발을 할 때는 객체지향적인 코드를 작성한다. 따라서 도메인에 따라.. 2021. 4. 11.