전체 글

프로젝트/Maship

Maship 2. Select, Insert 쿼리 분리 및 JPA 배치 처리로 벌크성 쿼리 최적화하기 (Mash-Up Maship Project)

JPARepository에서 기본적으로 제공하는 메서드들이 있다.  findById, findAll, delete(), deleteAll() 등. 이들 메서드는 CRUD 작업을 손쉽게 처리할 수 있도록 돕는다.  그런데 최근에 궁금해진 것이 있다. 이 작업들을 한 번에 최적화하여 처리할 수는 없을까? 데이터베이스 쿼리에서 select 연산을 조인으로 최적화하여 N번의 쿼리를 단일 쿼리로 해결하는 경우가 많다. 이를 통해 성능을 크게 향상시킬 수 있다.  그렇다면 insert, update, delete와 같은 벌크성 쿼리도 비슷한 방식으로 최적화할 수 있을까?  벌크성 쿼리의 최적화 일반적으로 insert, update, delete와 같은 벌크성 쿼리는 select처럼 조인을 통해 N번의 쿼리를 단일 ..

Spring/Spring Transaction

Spring Transaction 1. 스프링 트랜잭션 이해

스프링 프레임워크는 강력한 트랜잭션 관리 기능을 제공한다.트랜잭션 추상화: JDBC와 JPA의 차이스프링의 트랜잭션 추상화는 서로 다른 데이터 접근 기술(JDBC, JPA 등)에서 동일한 방식으로 트랜잭션을 관리할 수 있게 해준다.예를 들어, JDBC에서는 트랜잭션을 직접 제어해야 하지만, JPA에서는 EntityManager를 통해 트랜잭션을 제어한다.이러한 차이는 스프링이 제공하는 PlatformTransactionManager 인터페이스를 통해 해결된다.JDBC 트랜잭션 예시public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSource.getConn..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 11장 카프카 커넥트

카프카 커넥트카프카 커넥트는 아파치 카프카의 오픈소스 프로젝트데이터베이스 같은 외부 시스템과 카프카를 쉽게 연결하기 위한 프레임워크REST API로 구성되어있음커넥트 프레임워크를 이용해 대용량의 데이터를 카프카의 안팎으로 쉽게 이동시킬 수 있음프로듀서와 컨슈머를 직접 개발해 원하는 동작을 실행할 수 있지만, 카프카 커넥트를 이용하면 더 효율적으로 빠르게 구성하고 적용시킬 수 있음카프카 커넥트 장점데이터 중심 파이프라인 커넥트를 이용해 카프카로 데이터를 송수신유연성과 확장성 테스트 및 일회성 작업을 위한 단독 모드로 실행할 수 있고, 대규모 운영환경을 위한 분산 모드(클러스터)로 실행할 수 있음재사용성과 기능 확장 커넥터는 이미 만들어진 기존 커넥터들을 활용할 수 있고 운영 환경에서의 요구사항에 맞춰..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 10장 스키마 레지스트리

스키마 레지스트리DB와 비슷하게 카프카에서도 스키마를 사용하는데, 토픽으로 전송되는 메시지에 대해 미리 스키마를 정의한 후 전송함으로써 DB에서 얻을 수 있는 동일한 효과를 얻음10.1 스키마의 개념과 유용성어떤 누가와도 쉽게 사용하고, 장애가 발생해도 쉽게 복구할 수 있어야함명세서, 정의 등을 해야하는 데, 이것이 스키마카프카의 데이터 흐름은 대부분 브로드캐스트 방식카프카는 데이터를 전송하는 프로듀서를 일방적으로 신뢰할 수밖에 없는 방식그러므로 프로듀서 관리자는 카프카 토픽의 데이터를 컨슘하는 관리자에게 반드시 데이터 구조를 설명해야함데이터에 대한 정확한 정의와 의미를 알려주는 역할 -> 스키마10.2 카프카와 스키마 레지스트리카프카에서 스키마를 활용하는 방법과 스키마 레지스트리에 가장 최적화된 에이브..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 9장 카프카 보안

카프카 보안카프카는 보안이 자동으로 설정되지 않기 때문에, 직접 보안을 적용해야함9.1 카프카 보안의 세 가지 요소카프카 보안의 3요소세 가지 보안 요소가 존재암호화: 인증과 권한설정을 한 후 누군가 악의적으로 패킷을 가로채더라도 암호화하여 데이터를 읽을 수 없게 함. https 접근과 같은 원리인증: 확인된 클라이언트만 접근 가능하도록 설정. 웹에서 아이디/비밀번호를 입력해 로그인 성공한 사람만 받는 것과 비슷한 원리권한: 특정 토픽 등 영역을 지정해 사용자별로 접근을 제어하는 것.세 가지 보안 요소를 적용하기 위해 필요한 기능은 뭐가 있을까?9.1.1 암호화. SSL(Secure Socket Layer)가로침을 당해도 읽지 못하도록 적용하는 암호화서버와 서버 사이, 서버와 클라이언트 사이에서 통신 보..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 8장 카프카 버전 업그레이드와 확장

8.1 카프카 버전 업그레이드를 위한 준비카프카 버전 업그레이드 전 본인 카프카 버전 확인/usr/local/kafka/bin/kafka-topics.sh --versionex2.6.0 (Commit:62a..)업그레이드 종류메이저 업그레이드: 1.x or 0.x -> 2.x마이너 업그레이드: 2.0 -> 2.x메이저 업그레이드는 메시지의 포맷 변경, 브로커에서의 기본값 변화, 과거에는 지원됐던 명령어의 지원 종료, 일부 JMX 메트릭의 변화 등 변경 가능성이 크므로 유의업그레이드시 카프카는 다운타임을 가질 수도, 안가질 수도 있음다운타임을 갖는 것은 어렵고, 영향을 최소하하여 롤링 업그레이드를 해야함8.2 주키퍼 의존성이 있는 카프카 롤링 업그레이드버전마다 옵션이 다르므로 유의해야함2.1 -> 2.6 ..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 7장 카프카 운영과 모니터링

카프카 운영과 모니터링다른 애플리케이션에 비해 비교적 안전한 카프카. 하지만 모니터링은 당연히 필요7.1 안정적인 운영을 위한 주키퍼와 카프카 구성관리자가 단일 장애 지점 등을 제거하고 클러스터를 구성한다면? BEST7.1.1 주키퍼 구성최근들어 카프카 오픈소스 진영에서 카프카의 코디네이터 역할을 하는 주키퍼의 의존성을 제거하려고 함주피커는 파티션과 브로커의 메타데이터를 저장하고 컨트롤러 서버를 선출하는 동작을 수행주키퍼의 역할을 카프카 내부에서 처리하여 운영 효율성을 높일 수 있고, 더 많은 파티션을 처리할 수 있음주키퍼 서버 수량주키퍼는 쿼럼(과반수) 구성을 기반으로 동작하므로 반드시 홀수로 구성해야함주키퍼를 구성할 때 최소 수량으로 구성하려면 주키퍼 서버의 수는 3이렇게 구성된 주키퍼는 과반수인 2..

Kotlin/입문편

Java 개발자를 위한 Kotlin 입문 3. 코틀린에서의 OOP와 FP

섹션3 코틀린에서의 OOP9강 코틀린에서 클래스를 다루는 방법Kotlin에서 기본 클래스가 마치 Java의 record와 비슷하게 동작.var이면 자동으로 getter, setter 생성하고 val이면 자동으로 getter를 생성함생성자 키워드 constructor는 생략 가능하며, 클래스 헤더에 val 및 var 키워드 생성시 필드 또한 자동으로 생성해줌특이한 건 init 메서드가 존재하는데 생성자 호출시 실행하여 validation할 때 자주 사용됨생성자를 추가로 생성하고 싶은 경우 constructor 키워드를 새로 만들면됨class Person( val name: String, var age:Int) { // 생성자가 호출되는 시점에 호출됨 init { if (a..

Kotlin/입문편

Java 개발자를 위한 Kotlin 입문 2. 코틀린에서 코드를 제어하는 방법

섹션2 코틀린에서 코드를 제어하는 방법5강 코틀린에서 제어문을 다루는 방법Java는 If 조건문이 Expresison 이지만 Kotlin에서는 Statement이다.마치 삼항연산자처럼 조건문 자체가 값이기 때문에 바로 반환할 수 있다.fun getPassOrFail(score: Int): String { if (score >= 50) { return "P" } else { return "F" }}// 둘은 완전히 같은 코드fun getPassOrFail2(score: Int): String { return if (score >= 50) { "P" } else { "F" }}Kotlin 조건문에서 inJava에서 if(0 ..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 6장 컨슈머의 내부 동작 원리와 구현

실전 카프카 개발부터 운영까지컨슈머의 주요한 역할: 카프카에 저장된 메시지를 가져오는 것6.1 컨슈머 오프셋 관리오프셋이란? 메시지의 위치, 숫자 형태로 나타냄컨슈머 동작 중 가장 핵심: 오프셋 관리컨슈머가 메시지를 꺼내오므로 어디까지 가져왔는지 표시하는 것이 가장 중요하기 때문. 복구할 때도 사용컨슈머 그룹이 자신의 오프셋 정보를 카프카에서 가장 안전한 저장소인 토픽에 저장컨슈머 그룹에 컨슈머 1과 컨슈머2라는 2개의 컨슈머가 존재할 때컨슈머들은 지정된 토픽의 메시지를 읽은 뒤, 읽어온 위치의 오프셋 정보를 __consumer_offsets에 기록기록된 정보를 바탕으로 컨슈머 그룹은 자신의 그룹이 속해 있는 컨슈머의 변경이 발생하는 경우(컨슈머 장애 또는 이탈) 해당 컨슈머의 다음으로 읽어야할 위치를 ..

토이 개발 스토리
토이 개발 스토리