전체 글

Kotlin/입문편

Java 개발자를 위한 Kotlin 입문 1. 코틀린에서 변수와 타입, 연산자

최근 Mash-Up 동아리 Spring 파트에 합류했습니다. 한 달 후 진행될 프로젝트에 투입이 되는데, 현업자 분들께서 대부분 Kotlin과 Spring을 조합하여 일명 Kopring으로 프로젝트를 진행한다고 하셔서, 미리 Kotlin을 학습 중입니다. 인프런의 Java 개발자를 위한 Kotlin 입문 강의를 보며 정리했습니다. 아직 Kotlin이 익숙치 않아 틀린 부분이 있을 가능성이 매우 높습니다. 만약 틀린 점을 발견해주신다면 소중한 댓글 부탁드립니다!1강. 코틀린에서 변수를 다루는 방법바꿀 수 있는 변수: var바꿀 수 없는 변수: val단 최초 한 번은 값을 바인딩 할 수 있음Kotlin이 연산을 할 때는 내부적으로 primitive type으로 바꾸고, 그 외에는 Reference Type을..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 5장 프로듀서의 내부 동작 원리와 구현

프로듀서의 내부 동작 원리와 구현프로듀서의 기본 역할은 소스에 있는 메시지들을 카프카의 토픽으로 전송하는 것프로듀서가 전송하는 메시지들은 프로듀서의 send() 메서드를 통해 시리얼라이저, 파ㅣ셔너를 거쳐 카프카로 전송됨5.1 파티셔너카프카의 토픽은 성능 향상을 위한 병렬 처리가 가능하도록 하기 위해 파티션으로 나뉘고 최소 1 또는 2 이상의 파티션으로 구성됨프로듀서가 카프카로 전송한 메시지는 해당 토픽 내 각 파티션의 로그 세그먼트에 저장됨프로듀서는 토픽으로 메시지를 보낼 때 해당 토픽의 어느 파티션으로 보낼지 결정하는 것이 파티셔너메시지의 키를 해시처리하여 파티션을 구하는 알고리즘을 사용함키값이 같다? 같은 파티션으로 전송예상치 못하게 많은 양이 인입될때 처리하기 위해 토픽의 파티션을 늘릴 수 있는 ..

프로젝트/똑립

똑립 1. 알림기능, 문제의 시작

트랜잭션 전파를 깊이 있게 학습 후 상태를 재구성 후 테스트2024.09.04 수정최근에 트랜잭션 전파에 대해 깊이 있게 학습하며 이전에 알림 기능을 개발할 때를 재구성 후 테스트하였고 잘못 알고 있던 점을 되짚었습니다. 2024.09.04 - [프로젝트/똑립 (UMC)] - REQUIRES_NEW / TransactionalEventListener + Async 알림 문제 복기 기존 서비스저희 게시판 서비스는 HoneyTip(꿀팁공유해요 게시판)과 HoneyTipComment(꿀팁공유해요 댓글)이 연관관계 매핑이 되어있습니다.HoneyTipComment는 Comment를 단일테이블 전략으로 상속받고 있습니다.다른 댓글 서비스와 HoneyTipCommentService는 댓글 생성, 삭제시 최종적으로 C..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 4장 카프카의 내부 동작 원리와 구현

카프카의 내부 동작 원리와 구현4.1 카프카 리플리케이션카프카는 수많은 데이터 파이프라인의 정중앙에 위치하는 메인 허브 역할중요한 메인 허브 역할을 하는 카프카 클러스터가 만약 동작하지 않는다면 전체 데이터 파이프라인에 영향을 미칠 수 있고 매우 심각한 문제를 초래할 수 있음그래서 카프카는 한두 대에서 장애가 발생해도 안정적으로 처리할 수 있게 해주는 것이 리플리케이션4.1.1 리플리케이션 동작 개요카프카의 리플리케이션 동작을 위해 토픽 생성시 필숫값으로 아래의 옵션을 해줘야함replication factor같은 메시지를 다른 브로커들도 함께 갖고 있기 때문에 N의 리플리케이션이 있다면 N-1까지 장애가 발생해도 메시지 손실 없이 안정적으로 주고받을 수 있음4.1.2 리더와 팔로워동일안 리플리케이션이라 ..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 3장 카프카 기본 개념과 구조

3.1 카프카 기초 다지기카프카를 구성하는 주요 요소주키퍼(ZooKeeper): 아파치 프로젝트 애플리케이션 이름. 카프카의 메타데이터 관리 및 브로커의 정상상태 점검을 담당카프카(Kafka)또는 카프카 클러스터(Kafka Cluster): 아파치 프로젝트 애플리케이션 이름. 여러 대의 브로커를 구성한 클러스터를 의미브로커(Broker): 카프카 애플리케이션이 설치된 서버 또는 노드프로듀서(Producer): 카프카로 메시지를 보내는 역할을 하는 클라이언트컨슈머(consumer): 카프카에서 메시지를 꺼내가는 역할을 하는 클라이언트토픽(Topic): 카프카는 메시지 피드들을 토픽으로 구분하고, 각 토픽의 이름은 카프카 내에서 고유함파티션(Partition): 병렬 처리 및 고성능을 얻기 위해 하나의 토픽..

Message Queue/Kafka

실전 Kafka 개발부터 운영까지. 1장 카프카 개요, 2장 카프카 환경 구성

1장 카프카 개요1.1 잘란도와 트위터의 카프카 도입 사례잘란도는 🛍️온라인 쇼핑몰이며 무신사와 유사. 국내에서 무신사가 있다면 유럽에는 잘란도신뢰성이 있는 데이터가 되기 위해선 인바운드 데이터와 아웃바운드 데이터가 ✔️일치해야한다.과거에는..초기에는 API와 DB로 연결하는 CRUD로 구성하여 DB 업데이트가 된 후 아웃바운드 이벤트가 생성 🔄동기화문제여러 네트워크를 이용하는 환경에서 모든 데이터 변경에 대한 올바른 전달 보장 문제동일한 DB를 동시에 수정하면서 순서를 보장해야하는 문제, 수정된 이벤트들을 순서대로 아웃바운드 전송하는 문제Client의 다양한 요구사항을 효율적으로 지원하기 어려운 문제빠른 전송을 위한 Client 또는 대량의 배치 전송을 위한 클라이언트를 지원하기 어려운 문제동기 방..

Spring/Spring AOP

Spring AOP 6. 포인트컷, 어드바이스, 어드바이저

항상 용어가 헷갈려서, 용어를 확실하게 정리하는 것이 중요하다. 포인트컷: 어디에 부가기능을 적용할지, 범위를 정하는 곳이다. 주로 클래스와 메서드 이름으로 필터링한다.어드바이스: 바로 전 글에서 작성했던 것 처럼 프록시가 호출하는 부가 기능이다.어드바이저: 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것이다. 포인트 컷을 직접 정의할 수도 있지만 스프링이 이미 만들어둔 구현체를 사용하면 편하다. 포인트컷은 정말 많은 포인트컷을 제공한다.1. NameMatchMethodPointcut: 메서드 이름을 기반으로 매칭, 내부에서는 PatterMatchUtils를 사용2. JdkRegexMethodPointcut: JDK 정규 표현식을 기반으로 포인트컷을 매칭3. TruePointcu: 항상 참..

Spring/Spring AOP

Spring AOP 5. ProxyFactory

저번 시간에 Proxy를 만들 때 JDK 동적 프록시를 사용할 때는 InvocationHandler를, CGLIB를 사용할때는 MethodInterceptor를 각각 구현했어야했다.매번 이렇게 다른 것을 해결해 주는 것이 ProxyFactory이다.팩토리 하나로 편리하게 동적 프록시를 생성할 수 있으며 프록시 패곹리는 인터펭이스가 있다면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB를 사용한다. ProxyFactory 흐름 스프링은 위와같은 인터페이스, 구체클래스일 때 부가 기능을 적용할 때 Advice라는 새로운 개념을 도입했다.개발자는 InvocationHandler나 MethodInterceptor는 Advice만 만들면 된다.프록시 팩토리를 사용하면 Advice를 호출하는 Inv..

Spring/Spring AOP

Spring AOP 4. 동적 프록시: JDK 동적프록시와 CGLIB

인터페이스 기반 프록시와 클래스 기반 프록시인터페이스 기반으로 필수로 생성할 때는, 기존 로직을 구현하고, 구현하는 곳에서 추가 기능을 사용하며 이를 스프링 빈에 등록해서 사용한다.클래스 기반 프록시는 부모를 상속받아 기존 로직을 오버라이드해서 사용했다. 결론적으로, 인터페이스가 없어도 클래스 기반의 프록시가 잘 적용된다.하지만 지금은 부가기능을 추가하려면, 추가할 기능 만큼 모든 프록시를 직접 생성해야하는 문제가 있다.이를 해결하기 위해 나온 것이 동적 프록시이다.  1. 리플랙션리플렉션은 클래스나 메서드의 메타정보를 사용해서 동적으로 호출하는 메서드를 변경할 수 있다.다만, 이 기술을 써서 동적프록시가 동작한다는 것을 이해하는 것이 중요하지 실제로 사용할 땐 정말 주의를 해야한다.만약 메서드 명을 잘..

Spring/Spring AOP

Spring AOP 3. 디자인 패턴: 데코레이터 패턴

Spring AOP 로드맵 AOP를 학습하기 위해 김영한 강사님의 Spring 고급 편 강의를 듣고 있는데, AOP를 보다 더 완벽하게 이해하기 위해서는 아래의 단계를 따라야 한다. 학습해야 할 내용이 방대하지만 차근차근 나아가보자.  이번 글에서는 저번 글에 이어 Spring이 사용하는 디자인 패턴 중 전략 패턴 그중에서도 데코레티어 패턴을 다룬다. 1. 동시성 문제 - 쓰레드 로컬2. 전략 패턴 - 템플릿 메서드 패턴과 콜백 패턴3. 프록시 - 프록시 패턴과 데코레티어 패턴4. 동적 프록시5. Spring 지원 동적 프록시6. 빈 후처리기7. @Aspect AOP8. Spring AOP 프록시 패턴과 디코레이터 패턴은 저번 글에서 언급했지만, 의도에 따라 구분된다.프록시 패터은 캐싱, 로그, 접근 제..

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