일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Galera Cluster
- 네트워크
- Heap
- 파이썬
- IT
- spring webflux
- redis
- 운영체제
- 컴퓨터구조
- MSA
- 알고리즘
- 자료구조
- 자바
- c언어
- mongoDB
- 백준
- JPA
- Spring
- JavaScript
- design pattern
- Data Structure
- Java
- 디자인 패턴
- OS
- MySQL
- Algorithm
- Kafka
- Proxy
- C
- react
- Today
- Total
목록Java, Spring (75)
시냅스
엔티티 매핑 객체와 테이블 매핑 @Entity JPA가 관리하는 클래스 테이블과 매핑할 클래스 기본 생성자(public, protected)를 필수로 생성해야 한다. @Table 속성 name JPA에서 사용할 엔티티 이름을 지정한다. 기본값 : 클래스의 이름을 그대로 사용한다. 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. catalog 데이터베이스 catalog 매핑 schema 데이터베이스 schema 매핑 uniqueConstraints DDL 생성 시에 유니크 제약 조건 생성 필드와 컬럼 매핑 @Column 컬럼 매핑 속성 name 필드와 매핑할 테이블의 컬럼 이름 insertable, updatable 등록, 변경 가능 여부 nullable(DDL) null 값의 허용 여부 unique..

영속성 컨텍스트 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을..

예외도 객체이므로 최상위 부모는 Object이다. Error 메모리 부족이나 심각한 시스템 오류이다. catch 해서는 안된다. 언체크 예외이다. Exception 체크 예외이다. RuntimeException 을 제외한 모두 하위는 컴파일러가 체크하는 체크 예외이다. RuntimeException 언체크 예외이다. RuntimeException 하위 모두 언체크 예외이다. 예외 기본 규칙 예외 처리 (catch) 예외 던짐 (throw) 예외는 잡아서 처리하거나 던져야 한다. 예외는 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리된다. 예외를 처리하지 못하고 계속 던지면 main으로 넘어와 시스템이 종료된다. 체크 예외 체크 예외는 예외를 잡아서 처리할 수 없을 때 예외를 밖으로 ..

트랜잭션 Transaction 이란 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장하는 것을 뜻한다. 은행 송금을 예시로 하자면, 송금하는 주체는 돈이 감소해야 하고, 동시에 송금을 받는 주체는 돈이 증가해야 한다. 두 트랜잭션이 성공적으로 수행됐다면 commit 해야 하고, 하나라도 실패했다면 rollback해야 한다. 트랜잭션 ACID 트랜잭션은 원자성 (Atomicity), 일관성 (Consistency), 격리성 (Isolation), 지속성 (Durability) 를 보장해야 한다. 원자성 트랜잭션 내에서 실행한 작업은 마치 하나의 작업인 것처럼 모두 성공하거나 실패해야 한다. 일관성 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들면 데이터베이스에서 정한 무결성 제약 ..