본문 바로가기

Spring Study/DataBase10

[DataBase] 스프링 트랜잭션 이해 트랜잭션(Transaction) 이란? · 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. · 스프링은 PlatformTransactionManager라는 인터페이스를 통해 트랜잭션을 추상화한다. PlatformTransactionManager 인터페이스 package org.springframework.transaction; public interface PlatformTransactionManager extends TransactionManager { TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException; void commit(Transaction.. 2023. 10. 6.
[DataBase] JPA / Spring Data JPA JPA란? - Java Persistence API - 자바 진영의 ORM 표준 기술 - JPA는 인터페이스 모음 - Hibernate, EclipseLink, DataNucleus 3가지 구현체 사용 JPA를 사용해야 하는 이유 - SQL 중심적인 개발에서 객체 중심으로 개발 - 생산성, 유지보수 편리함 / 성능 최적화 기능 1. 1차 캐시와 동일성(identity) 보장 2. 트랜잭션을 지원하는 쓰기 지연 3. 지연 로징(Lazy Loading) - 패러다임 불일치 해결 JPA - CRUD - Create(저장): jpa.persist(. . .) - Read(조회): jpa.find(. . .) - Update(수정): member.setName(". . .") - Delete(삭제): jpa.re.. 2023. 10. 3.
[DataBase] 데이터 접근 기술 - 테스트 테스트 - 데이터베이스 분리 로컬에서 사용하는 애플리케이션 서버와 테스트에서 같은 데이터베이스를 사용하면 테스트에서 문제가 발생한다. 이를 해결하기 웨해 테스트를 다른 환경과 철저하게 분리해야 한다. 가장 간단한 방법으로는 테스트 전용 데이터베이스를 별도로 운영하는 것이다. 테스트에서 매우 중요한 원칙 1. 테스트는 다른 테스트와 격리해야 한다. 2. 테스트는 반복해서 실행할 수 있어야 한다. 테스트가 끝날 때마다 추가한 데이터에 DELETE SQL을 사용해도 되지만, 가장 좋은 방법은 트랜잭션, 롤백이다. 테스트 - 데이터 롤백 테스트가 끝나고 트랜잭션을 강제로 롤백해버리면 데이터가 제거된다. 테스트를 하면서 데이터를 이미 저장했는데, 중간에 테스트가 실패해 롤백을 호출하지 못해도 트랜잭션을 커밋하지 .. 2023. 9. 25.
[DataBase] 데이터 접근 기술 데이터 접근 기술 적용 데이터 접근 기술 - JdbcTemplate - MyBatis - JPA, Hibernate - 스프링 데이터 JPA - Querydsl 이 기술들은 크게 2가지로 나눌 수 있다. SQLMapper - 개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다. - JDBC를 직접 사용할 때 발생하는 여러가지 중복을 제거해주고, 기타 개발자에게 여러가지 편리 기능을 제공한다. ex) JdbcTemplate, MyBatis ORM 관련 기술 - SQLMapper는 SQL을 개발자가 직접 작성해야 하지만, JPA는 기본적인 SQL을 대신 작성하고 처리해준다. 개발자는 저장하고 싶은 객체를 마치 자바 컬렉션에 저장하고 조회하듯이 사용하면 ORM 기술이 데이터베이스에 해당.. 2023. 9. 22.
[DataBase] 예외 처리 체크 예외와 인터페이스 [DataBase] 자바 예외 (Exception) 예외 계층 예외 계층 그림 Error는 언체크 예외이며, 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 이 예외는 잡으려고 해서는 안된다. 따라서 E wodlszz.tistory.com 이전 글에서 말한 것처럼 서비스 계층은 가급적 특정 구현 기술에 의존하지 않고, 순수하게 유지하는 것이 좋다. 이렇게 하려면 예외에 대한 의존도 함께 해결해야 하는데, 예를 들어 서비스가 처리할 수 없는 SQLException에 대한 의존을 제거하려면 SQLException 체크 예외를 RuntimeException(언체크 예외)로 전환해서 서비스 계층에 던지면 된다. 이렇게 하면 예외를 무시할 수 있게.. 2023. 9. 21.
[DataBase] 자바 예외 (Exception) 예외 계층 예외 계층 그림 Error는 언체크 예외이며, 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 이 예외는 잡으려고 해서는 안된다. 따라서 Error의 상위인 Throwable 예외도 잡으면 안된다. 애플리케이션은 이러한 이유로 Exception부터 필요한 예외로 생각하고 잡아야 한다. Exception은 체크 예외이며, 애플리케이션 로직에서 사용할 수 있는 실직적인 최상위 예외이다. Exception과 그 하위 예외는 모두 체크 예외이지만 RuntimException은 언체크 예외이다. 예외 기본 규칙 1. 예외는 잡아서 처리하거나 던져야 한다. 2. 예외를 잡거나 던질 때는 지정한 예외 뿐 아니라 자식들도 함께 처리된다. 예외 처리 예외 던짐 예외를.. 2023. 9. 20.
[DataBase] 트랜잭션 (Transaction)2 애플리케이션 구조 애플리케이션은 3가지 계층으로 나눌 수 있다. Controller, Service, Repository 프레젠테이션 계층 (Controller) - UI와 관련된 처리 담당 - 웹 요청과 응답 - 사용자 요청을 검증 - 사용 기술: Servlet, HTTP 같은 웹 기술, 스프링 MVC 서비스 계층 (Service) - 비즈니스 로직 담당 - 사용 기술: 특정 기술에 의존하지 않고, 순수 자바 코드로 작성 데이터 접근 계층(Repository) - 실제 데이터베이스에 접근하는 코드 - 사용 기술: JDBC, JPA, File, Redis, Mongo ... 이 중 가장 중요한 곳은 서비스 계층이다. 서비스 계층은 시간이 흘러 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술이 다른 .. 2023. 9. 19.
[DataBase] 트랜잭션 (Transaction) 트랜잭션 (Transaction)이란? 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 커밋(Commit): 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것 롤백(Rollback): 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것 트랜잭션 ACID 원자성(Atomicity) 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것 처럼 모두 성공하거나 모두 실패 일관성(Consistency) 모든 트랜잭션은 일관성 있는 데이터베이스 상태 유지, 무결성 제약 조건을 항상 만족 격리성(Isolation) 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리, 동시에 같은 데이터 수정 X 지속성(Durability) 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 함.. 2023. 9. 18.
[DataBase] Connection Pool / DataSource 커넥션 풀(Connection Pool)이란? 데이터베이스 커넥션을 획득할 때 과정 1. 애플리케이션 로직이 DB 드라이버를 통해 커넥션 조회 2. DB 드라이버가 DB와 TCP/IP 커넥션 연결 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW등 기타 부가정보 DB에 전달 4. DB는 ID, PW를 통해 내부 인증 후, 내부에 DB 세션 생성 5. DB는 커넥션 생성이 완료되었다는 응답 전송 6. DB 드라이버는 커넥션 객체를 생성 후 클라이언트에 반환 이러한 방법은 과정도 복잡하고, 시간도 많이 소모된다. 이를 해결하기 위한 아이디어가 바로 커넥션을 미리 생성해두고 사용하는 커넥션 풀 이라는 방법이다. 커넥션 풀 동작 방식 어플리케이션을 시작하는 시점에 커넥션 풀은 필요한만큼 커넥션을 .. 2023. 9. 14.
[DataBase] JDBC란? JDBC 이해 JDBC 등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해 데이터베이스를 사용한다. 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리.. 2023. 9. 13.