| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- JPA
- OS
- Galera Cluster
- JavaScript
- c언어
- 운영체제
- Proxy
- C
- Spring
- redis
- spring webflux
- 알고리즘
- 파이썬
- 자바
- 백준
- MySQL
- Java
- Heap
- MSA
- mongoDB
- 디자인 패턴
- Data Structure
- Algorithm
- 자료구조
- 네트워크
- Kafka
- 컴퓨터구조
- IT
- design pattern
- react
- Today
- Total
목록분류 전체보기 (211)
시냅스
JPA 연관관계 다중성 다대일 @ManyToOne 속성 optional : false 로 설정하면 연관된 엔티티가 항상 있어야 한다. fetch : 글로벌 페치 전략 (FetchType.Lazy) cascade : 영속성 전이 targetEntity : 연관된 엔티티의 타입 정보를 저장한다. 거으 ㅣ사용하지 않는다. @JoinColumn 속성 name : 매핑할 외래 키 이름 referencedColumnName : 외래키가 참조하는 대상 테이블으 ㅣ컬럼명 foreignKey(DDL) : 외래 키 제약조건 직접 지정 unique nallable, insertable updatable columnDefinition table 일대다 @OneToMany 속성 mappedBy : 연관관계의 주인 필드를 선택한..
엔티티 매핑 객체와 테이블 매핑 @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을..
Composite Pattern 부분과 전체에 대한 복합 객체의 트리구조를 나타낼 수 있음 클라이언트가 개별 객체와 복합 객체를 동일하게 다룰 수 있는 인터페이스를 제공 재귀적인 구조 기본 객체는 복합 객체에 포함이 되고, 복합 객체 역시 또 다른 복합 객체에 포함될 수 있다. 클라이언트 코드는 기본객체와 복합객체에 대한 일관된 프로그래밍을 할 수 있다. 기본 객체가 증가하여도 전체 객체의 코드에 영향을 주지 않는다. 새로운 요소의 추가가 편리하고 범용성 있는 설계가 가능하다. Component 전체와 부분 객체에서 공통적으로 사용할 인터페이스 선언 전체와 부분 객체에서 공통으로 사용할 기능 구현 전체 클래스가 부분요소들을 관리하기 위해 필요한 인터페이스 선언 Leaf 집합 관계에서 다른 객체를 포함할 ..