일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- c언어
- 파이썬
- JavaScript
- 자바
- Java
- 알고리즘
- OS
- C
- Proxy
- Galera Cluster
- 자료구조
- 네트워크
- 백준
- Spring
- Data Structure
- IT
- Kafka
- redis
- JPA
- MySQL
- Algorithm
- 운영체제
- react
- design pattern
- 디자인 패턴
- spring webflux
- mongoDB
- Heap
- MSA
- 컴퓨터구조
- Today
- Total
목록분류 전체보기 (214)
시냅스
영속성 컨텍스트 persistence context 엔티티를 영구 저장하는 환경 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다. J2SE(일반 자바 어플리케이션 개발 툴) EntityManger 와 영속성 컨텍스트는 1:1 의 관계이다. J2EE (서버용 자바 어플리케이션 개발 툴), Spring 과 같은 컨테이너 환경 EntityManager와 영속성 컨텍스트는 N:1 의 관계이다. 엔티티의 생명주기 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 (manag..
예외와 트랜잭션 커밋, 롤백 정책 예외 발생시 스프링 트랜잭션 AOP 는 예외의 종류에 따라 트랜잭션을 커밋하거나 롤백한다. 언체크 예외인 RuntimeException, Error와 그 하위 예외가 발생하면 트랜잭션을 롤백한다. 개발자가 다루기 어려운 복구 불가능한 문제라는 판단이 이유이다. 체크 예외인 Exception과 그 하위 예외가 발생하면 트랜잭션을 커밋한다. 비즈니스 의미가 있을 때 사용한다. 클라이언트가 행동을 수정/변경한다면 예외를 회피할 수 있을 때를 의미한다. 스프링 트랜잭션 전파 트랜잭션이 각각 수행된다면 사용되는 DB 커넥션 또한 각각 다르다 로직 1에서 트랜잭션을 수행하면서 트랜잭션이 적용된 로직 2를 부른다면, 로직 1은 외부 트랜잭션, 로직 2는 내부 트랜잭션이라고 말할 수 ..
선언적 트랜잭션과 AOP 개발자는 트랜잭션 처리가 필요한 곳에 @Transactional 애노테이션만 붙여주면 된다. @Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있다면 실제 객체 대신에 트랜잭션을 처리해주는 프록시 객체가 스프링 빈에 등록된다. 스프링의 트랜잭션 AOP는 이 애노테이션을 인식해서 트랜잭션을 처리하는 프록시를 적용해준다. 위 케이스에서 tx()의 경우 프록시 객체가 호출되고 트랜잭션이 적용된다. nonTx() 는 트랜잭션이 없는 것을 확인할 수 있다. 트랜잭션은 구체적이고 자세한 것이 높은 우선순위를 가진다. e.g. 클래스 < 메서드 만약 트랜잭션이 적용되지 않은 함수 내부에서 트랜잭션이 적용된 함수를 호출한다면 트랜잭션이 적용되지 않는다. 객체.externa..
Spring Data JPA CRUD + 쿼리 여러 데이터베이스에 동일한 인터페이스를 제공한다. 메서드 이름으로 쿼리를 생성한다. 스프링에서 id 값만 넘겨도 도메인 클래스로 바인딩된다. 용례 - 스프링 데이터 JPA 적용 public interface SpringDataJpaItemRepository extends JpaRepository { // 각각 객체와 PK이다. List findByItemNameLike(String itemName); List findByPriceLessThanEqual(Integer price); // 쿼리 메서드 (아래 메서드와 같은 기능 수행) List findByItemNameLikeAndPriceLessThanEqual(String itemName, Integer p..
JPA, Java Persisitence API 자바의 주력 ORM 데이터 접근 기술이다. ORM(Object-Relational Mapping) 은 객체와 데이터베이스의 관계를 매핑해주는 도구이다. 객체는 객체대로 설계, 데이터베이스는 데이터베이스대로 설계 => 중간에서 ORM이 맵핑한다. 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있다. SQL 문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있다. 객체를 통해 간접적으로 데이터베이스를 다룬다. 대개 Querydsl과 함께 사용한다. 주로 hibernate 구현체를 사용한다. 1차 캐시와 동일성(identity) 를 보장한다 트랜잭션을 지원하는 쓰기 지연(transactional write-behind) 지연 로딩(lazy Loadin..
MyBatis JdbcTemplate 보다 더 많은 기능을 제공하는 SQL Mapper이다. SQL을 XML에 편리하게 작성할 수 있다. 동적 쿼리에 대한 보완이 크게 이뤄졌다. 추가적인 설정이 필요하다. 용례 - Mapper @Mapper public interface Mapper { void save(Item item); void update(@Param("id") Long id, @Param("updateParam") ItemUpdateDto updateParam); Optional findById(Long id); List findAll(ItemSearchCond itemSearch); } MyBatis 매핑 XML을 호출해주는 인터페이스이다. @Mapper 를 통해 mapper라는 것을 선언한다..
JdbcTemplate JdbcTemplate은 JDBC를 편리하게 사용할 수 있는 SQL Mapper이다. JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있어 복잡한 설정 없이 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 콜백 패턴(RowMapper)을 사용하여 반복잡업을 대신해준다. 개발자는 SQL을 작성하고, 전달할 파라미터를 정의하고, 응답 값을 매핑하기만 하면 된다. 아래는 JdbcTemplate이 대신 처리해주는 작업들이다. 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프 실행 커넥션 종료, statement, resultset 종료 트랜잭션 다루기 위한 커넥션 동기화 예외 발생시 스프링 예외 변환기 실행 단점으로는 동적 SQL을..
Composite Pattern 부분과 전체에 대한 복합 객체의 트리구조를 나타낼 수 있음 클라이언트가 개별 객체와 복합 객체를 동일하게 다룰 수 있는 인터페이스를 제공 재귀적인 구조 기본 객체는 복합 객체에 포함이 되고, 복합 객체 역시 또 다른 복합 객체에 포함될 수 있다. 클라이언트 코드는 기본객체와 복합객체에 대한 일관된 프로그래밍을 할 수 있다. 기본 객체가 증가하여도 전체 객체의 코드에 영향을 주지 않는다. 새로운 요소의 추가가 편리하고 범용성 있는 설계가 가능하다. Component 전체와 부분 객체에서 공통적으로 사용할 인터페이스 선언 전체와 부분 객체에서 공통으로 사용할 기능 구현 전체 클래스가 부분요소들을 관리하기 위해 필요한 인터페이스 선언 Leaf 집합 관계에서 다른 객체를 포함할 ..
Command Pattern 요청을 객체로 만들어 전달한다. 요청을 기록으로 남겨 취소도 가능하도록 한다. 클라이언트 서버간의 프로토콜로 사용할 수 있다. 명령 자체를 객체화 하여 여러 다른 객체에 명령이 전달되거나 명령이 조합될 수도 있다. 새로운 프로토콜이 추가되기 쉽다. 부가적인 정보가 많은 경우 비효율적일 수 있다. Command 각 명령이 수행할 메서드 선언 ConcreteCommand 실제 명령이 호출되도록 execute 구현 Client ConcreteCommand 객체를 생성하고 처리 객체로 정의 Invoker Command 처리를 수행할 것을 요청 Receiver Command를 처리함 구현 package command; import java.util.ArrayList; import ja..
Adapter Pattern 클라이언트에서 사용하던 방식대로 호출하여 사용할 수 있도록 조정해주는 기능 서로 일치하지 않는 인터페이스를 변경하지 않고 중간에서 호출하여 사용할 수 있도록 제공 상속을 활용하는 Adapter 객체 합성의 방법으로 구현하는 Adapter Adapter를 사용함으로써 클라이언트가 사용하는 방식은 동일하면서 여러 기능이 제공될 수 있다. Target 클라이언트가 사용할 인터페이스를 정의하고 있는 클래스 Client Target 인터페이스를 사용하는 객체 Adaptee 실제의 새롭거나 적용될 기능이 제공되는 클래스 Adapter Target 인터페이스에 Adaptee의 인터페이스를 맞춰주는 클래스 구현 package adapter; interface Print { // adapte..