일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자료구조
- OS
- c언어
- 네트워크
- JPA
- spring webflux
- Heap
- 자바
- redis
- Proxy
- design pattern
- Algorithm
- Spring
- Data Structure
- mongoDB
- IT
- 백준
- 파이썬
- 디자인 패턴
- Java
- 알고리즘
- 컴퓨터구조
- JavaScript
- Galera Cluster
- 운영체제
- C
- Kafka
- MySQL
- MSA
- react
- Today
- Total
목록Java (49)
시냅스
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..
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..
예외도 객체이므로 최상위 부모는 Object이다. Error 메모리 부족이나 심각한 시스템 오류이다. catch 해서는 안된다. 언체크 예외이다. Exception 체크 예외이다. RuntimeException 을 제외한 모두 하위는 컴파일러가 체크하는 체크 예외이다. RuntimeException 언체크 예외이다. RuntimeException 하위 모두 언체크 예외이다. 예외 기본 규칙 예외 처리 (catch) 예외 던짐 (throw) 예외는 잡아서 처리하거나 던져야 한다. 예외는 잡거나 던질 때 지정한 예외뿐만 아니라 그 예외의 자식들도 함께 처리된다. 예외를 처리하지 못하고 계속 던지면 main으로 넘어와 시스템이 종료된다. 체크 예외 체크 예외는 예외를 잡아서 처리할 수 없을 때 예외를 밖으로 ..
트랜잭션 Transaction 이란 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장하는 것을 뜻한다. 은행 송금을 예시로 하자면, 송금하는 주체는 돈이 감소해야 하고, 동시에 송금을 받는 주체는 돈이 증가해야 한다. 두 트랜잭션이 성공적으로 수행됐다면 commit 해야 하고, 하나라도 실패했다면 rollback해야 한다. 트랜잭션 ACID 트랜잭션은 원자성 (Atomicity), 일관성 (Consistency), 격리성 (Isolation), 지속성 (Durability) 를 보장해야 한다. 원자성 트랜잭션 내에서 실행한 작업은 마치 하나의 작업인 것처럼 모두 성공하거나 실패해야 한다. 일관성 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들면 데이터베이스에서 정한 무결성 제약 ..
커넥션 풀, Connection Pool 데이터베이스 커넥션을 획득할 때마다 tcp/ip 커넥션 (3 way handshake)을 연결하는 네트워크 동작이 발생되어 커넥션을 생성하기 위한 리소스를 매번 사용해야 한다. 커넥션을 매번 새로 만드는 시간이 추가되기 때문에 결과적으로 응답 속도에 영향을 준다. 이런 것을 해결하기 위해 커넥션을 미리 생성해두고 사용하는 커넥션 풀을 사용한다. 애플리케이션을 시작하는 시점에 커넥션을 미리 확보한다. 보통 10개이다. 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 DB에 SQL을 전달할 수 있다. 이렇게 이미 생성되어 있는 커넥션을 가져다 쓴 후 커넥션을 다시 풀에 반환한다. 커넥션 풀 숫자는 서비스의 특징과 서..
클라이언트, 애플리케이션 서버, DB 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 다음과 같은 과정을 거친다. 1. 커넥션 연결 주로 TCP/IP 를 사용해서 커넥션을 연결한다. 3 way handshake 2. SQL 전달 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답 다만 각각의 데이터베이스 마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 응답을 받는 방법이 모두 다르다. JDBC Java Database Connectivity JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC 표준 인터페이스에 의존하게 하여 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버의 ..