18건의 항목

  • 2025년 3월 16일

    트랜잭션 전파(Transaction Propagation) 정의 트랜잭션이 하나 시작한 상태에서 또 다른 트랜잭션을 시작하면 새 트랜잭션을 생성할지, 기존 트랜잭션에 참여할지 등등을 결정하는 방식 Spring에서는 기본적으로 기존 트랜잭션에 참여하는 방식이 기본값이고, 원할 시 다른 방식으로 변경이 가능합니다 ...

  • 2025년 3월 15일

    AOP(Aspect-Oriented Programming)의 정의 관점 지향 프로그래밍(AOP) 을 이용하여 트랜잭션 관리를 자동화하는 기법Spring에서는 @Transactional을 사용하면 프록시가 생성되며 AOP가 자동으로 적용됩니다. 프록시란? 자동으로 만들어져서 원래 객체 대신해서 요청을 받고, 로직을 수행하는 중간 역할의 객체입니다.

  • 2025년 3월 12일

    Querydsl의 정의 Java 코드 기반으로 SQL, JPA, MongoDB 등의 쿼리를 생성할 수 있도록 해주는 라이브러리JPA와 함께 사용할 경우, 컴파일 타임에 검증 가능한 코드로 복잡한 동적 쿼리를 간결하게 작성할 수 있습니다. Q클래스 Querydsl이 엔티티를 대상으로 자동 생성하는 클래스해당 클래스를 통해 Java 코드 기반으로 쿼리를 작성할 수 있게 됩니다.

  • 2025년 3월 10일

    JPA의 정의 JPA(Java Persistence API)는 자바 객체를 관계형 데이터베이스와 매핑(ORM, Object-Relational Mapping)하기 위한 표준 API즉, DB의 데이터들을 객체 다루듯이 다룰 수 있도록 해줍니다. ORM 매핑 프로젝트의 객체와 이 객체에 해당하는 DB의 테이블을 매핑할 수 있습니다.

  • 2025년 3월 09일

    MyBatis의 정의 JdbcTemplate이 제공하는 기능을 제공하면서 추가로 동적 쿼리를 편리하게 작성할 수 있게 하는 SQL Mapper XML을 통해 SQL 쿼리를 작성하고 기능에 매핑할 수 있습니다. 적용 방법 findAll()에서 검색 기능이 있고, 검색 조건을 넣기 위한 MemberSearchCond가 있는 상황이라고 생각해보겠습니다.

  • 2025년 3월 08일

    데이터 격리 처리가 필요한 이유 각 테스트별로 데이터가 추가가 되면, 이는 다른 테스트에 영향을 줄 수 있고, 또 테스트를 중복 실행할 때 이전에 성공했던 테스트가 다음엔 실패하게 될 수 있습니다. 테스트의 일관성을 유지하고, 다른 테스트에 간섭을 하지 않기 위해서 테스트를 위해 생성했던 데이터는 테스트가 끝나면 모두 지워줘야 합니다.

  • 2025년 3월 08일

    직접 연결 test 폴더 하위의 resources/application.properties에도 spring.datasource.~ 설정을 추가해 줍니다. # properties spring.profiles.active = test spring.datasource.url = jdbc:h2:tcp://localhost/~/test spring.datasource.username = sa spring.datasource.password = 임베디드 DB 연결 1.

  • 2025년 3월 07일

    JdbcTemplate의 정의 템플릿 콜백 패턴을 사용하여 JDBC를 직접 사용할 때 발생하는 반복 작업을 대신 처리해주는 유틸리티 JDBC 단순 사용과의 비교 [Before] @RequiredArgsConstructor public class BeforeRepository { private final DataSource ...

  • 2025년 3월 06일

    SQLExceptionTranslator의 정의 Spring에서 체크 예외인 SQLException을 적절한 DataAccessException 계열의 예외로 변환하는 인터페이스 사용법 translate() 사용 DataAccessException translate(String task, @Nullable ...

  • 2025년 3월 06일

    DataAccessException의 정의 데이터 접근 중 발생하는 예외를 처리하기 위해 Spring에서 제공하는 런타임 예외 체크 예외로 선언될 경우 매번 throws로 전파해야 하는 문제를 방지하고, 일관된 예외 처리를 가능하게 합니다. 계층 DataAccessException 하위로 SQL 문법 오류, 타임아웃 오류 등 여러 데이터 접근 상황에서 발생하는 에러들이 구현되어 있습니다.

  • 2025년 3월 03일

    @Transactional의 정의 트랜잭션을 시작하고 커밋, 롤백 후 트랜잭션을 종료하는 과정을 서비스 로직에서 분리하기 위해 트랜잭션 프록시를 만드는 과정을 처리해주는 어노테이션 사용 예시 1. 클래스에서 사용 @Transactional public class Service() { public void save() { } public void delete() { } } 정리 클래스에서 @Transactional 사용 시 하위의 모든 메서드인 save(), delete()에 트랜잭션이 적용됩니다.

  • 2025년 3월 03일

    TransactionTemplate의 정의 템플릿 콜백 패턴을 적용하여 Transaction 과정에서 반복적으로 작업하는 트랜잭션 만들기 -> 오류 없으면 commit하기 -> 오류 있으면 rollback하기과정을 간단하게 진행하게 해 주는 클래스입니다. 기능 public class TransactionTemplate { private PlatformTransactionManager transactionManager; public <T> T execute(TransactionCallback<T> action){..} void executeWithoutResult(Consumer<TransactionStatus> action){..} } execute() : 응답 값이 있을 때 사용합니다.

  • 2025년 3월 03일

    PlatformTransactionManager의 정의 트랜잭션을 시작하고 커밋, 롤백하는 과정을 JDBC와 같은 특정 데이터 접근 기술에 종속되지 않게 하기 위해 추상화하여 만든 인터페이스 구조 기능 [인터페이스 전체 구조] package org.springframework.transaction; public interface ...

  • 2025년 3월 03일

    Transaction 단순 처리 시 문제점 Transaction을 단순 처리한 Service를 확인하면 서비스 로직 뿐만이 아닌 과정이 많이 포함이 되어버리는 것을 확인할 수 있습니다. 이처럼 단순하게 커넥션에서 Transaction을 만들어 커밋 or 롤백 처리를 하게되면 여러 문제점이 나타나게 됩니다.

  • 2025년 3월 02일

    Transaction의 정의 데이터베이스에서 상태를 변화시키기 위해 수행하는 작업의 단위 ex) A가 B에게 5000원을 송금하는 경우 → A의 잔고에서 5000원을 감소시키고, B의 잔고에서 5000원을 증가시키는 작업이 하나의 Transaction이 됩니다. Transaction이 안지켜져 문제가 되는 경우 A가 B에게 5000원 송금을 하는데, 오타로 인해 아래와 같이 실행되면 문제가 생깁니다.

  • 2025년 2월 28일

    커넥션 풀의 필요성 데이터베이스에 한번 Connection을 만들 때 마다 아래와 같은 복잡한 과정을 거칩니다. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다.

  • 2025년 2월 28일

    DataSource의 필요성 커넥션을 획득하는 방법은 DriverManager, Connection Pool 등 다양하게 있습니다. DriverManager를 통해 커넥션을 획득하도록 로직을 구성하다가, 커넥션 풀을 사용하는 방법으로 변경하면 로직의 코드를 변경해야 합니다.

  • 2025년 2월 28일

    JDBC 정의 Java에서 데이터베이스와 연동을 위해서 먼저 커넥션 연결을 확인하고 SQL을 전달해 DB로부터 결과를 응답받습니다.그러나 데이터베이스의 종류(ex) MySQL, Oracle)에 따라 커넥션 연결, SQL, 결과 응답에 대한 방법이 다르기 때문에 데이터베이스별로 코드를 각각 작성하는 대신, 자바에서 데이터베이스에 접속할 ...