전체 글50 스프링부트 테스트(1) - 동작원리와 어노테이션 친해지기 동작 원리TestContext 를 bootstrap 하는 원리테스트 컨텍스트란, 테스트시 application context 를 말하며 애플리케이션의 구성 정보를 구성하는 것을 말한다. 예를들어,애플리케이션의 Bean 을 로드하는 것도 이에 포함된다고 할 수 있다.그렇다면, 이 테스트 컨텍스트는 어떻게 로드 될까? 이를 알기 위해서 @SpringBootTest 어노테이션을 확인해보자.@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited// TestContextBootstrapper 구현체 : SpringBootTestContextBootstrapper@BootstrapWith(SpringBootTestContex.. 2024. 7. 23. AOP 활용 (feat. jpa 호출 로깅) AOP 에 대한 기본적인 개념을 이전 포스팅에서 알아보았다.https://pius712.tistory.com/33 스프링 AOP - 톺아보기aop 는 횡단 관심사를 분리하여 모듈화 한 것을 말한다.횡단 관심사란 비즈니스 로직이 아닌 그 외의 로깅, 트랜잭션과 같은 것들을 말한다.스프링을 사용하면 자주 만나게되는 @Transactional 이나 @pius712.tistory.com 이 AOP 를 활용하여, JPA repository 메서드 호출에 대한 로깅을 간단하게 구현하고자 한다.요구사항jpa repository 모든 메서드에 대해 로그를 남겨야함어떤 메서드가 호출했는지, 어떤 메서드가 호출되었는지 로그를 남겨야함jpa repository 의 time elapsed 로그를 남겨야함예외 발생시 messa.. 2024. 6. 6. 스프링 AOP - 톺아보기 aop 는 횡단 관심사를 분리하여 모듈화 한 것을 말한다.횡단 관심사란 비즈니스 로직이 아닌 그 외의 로깅, 트랜잭션과 같은 것들을 말한다.스프링을 사용하면 자주 만나게되는 @Transactional 이나 @Cacheable 과 같은 어노테이션들이 이런 스프링 AOP 를 통해 구현된 것이라고 볼 수 있다.이 스프링 AOP의 기반이 되는 proxy 와 bean post processor 에 대해 알아보고, 스프링 AOP 에 대해 알아보고자 한다.Spring-Aop 의 기반Proxy프록시는 디자인 패턴의 일종이다.아래와 같이 client 가 target 객체를 호출할 때, target 을 객체로 감싸서 중간에서 다른 작업을 하게 된다.간단하게 코드를 살펴보면 아래와 같다.// 인터페이스 기반class Foo.. 2024. 6. 6. MySQL(InnoDB)이 잠금할 레코드를 고르는 방법 MySQL 을 처음 공부할 때, 레코드 잠금에 관해서 여러가지 궁금한 점들이 많았다. 그동안 궁금했던 세부적인 부분들에 대해서 정리해보고자 한다.MySQL 은 기본적으로 잠금 읽기(locking read), update, delete 문에 대해서 잠금을 걸 때, 스캔되는 모든 인덱스에 잠금을 건. WHERE 조건에 특정 행(row)를 제외할 수 있다고 하더라도, 이와 관계 없이 스캔되는 모든 인덱스에 잠금을 걸게 된다.Q. WHERE 절을 기반으로 스캔되는데, 왜 WHERE 절과 관계 없이 레코드 잠금이 걸린다고 할까?참고로, 이 내용은 REPEATABLE READ 에 해당하는 내용으로, READ COMMITTED 에서는 다르게 동작한다. WHERE 절을 기반으로 레코드를 조회하는 것은 맞다.하지만, M.. 2024. 6. 5. 카프카 톺아보기4-1 프로듀서 개념 카프카 프로듀서란 카프카 클러스터로 이벤트를 발행하는 클라이언트 어플리케이션을 의미한다.DDD 관점에서 보면, 서로 다른 바운디드 컨텍스트(일반적으로 서버가 분리되어 있음)에 속한 애그리거트의 상태 변경에 대한 도메인 이벤트를 시스템간의 이벤트로 변환하여 발행할 때 카프카 프로듀서를 통해 이벤트를 발행하곤 한다.예를들어, 주문이 취소되는 경우 주문이라는 애그리거트 (도메인의 제약사항을 공유하는 객체 묶음) 상태가 변경된 것을 이벤트로 발행하게 되는데, MSA 에서 다른 컨텍스트 예를 들어, 재고 시스템과 같은 컨텍스트가 이에 대한 처리가 필요한 경우 해당 이벤트를 받아서 로직을 처리하게 된다.기본적으로 카프카 프로듀서는 컨슈머에 비해 그렇게 복잡하지 않다.파티셔너파티셔너는 프로듀서가 메시지를 발행할 때 .. 2024. 5. 30. 카프카 톺아보기 3-1. 컨슈머 개념 커밋커밋이란 컨슈머가 자신이 어디까지 메시지를 소비했는지 메시지의 오프셋(offset)을 기록하는 행위이다.참고로 offset 을 커밋하는 방식은 여러가지가 있을 수 있다.offset 을 자동으로 커밋할 수도 있고 수동으로 커밋할 수도 있다. 또한 커밋에 대한 결과를 동기적으로 받을 수도 있고 비동기로 받을 수도 있다.아래 그림을 보면 poll 을 통해 1~500 개의 메시지를 가져온다. 그리고 offset 500을 커밋하게 된다.이렇게 되면, 해당 파티션과 연결된 컨슈머 그룹의 컨슈머는 다음에는 501 오프셋을 가진 메시지를 소비하게 된다.auto commit자동으로 커밋을 수행하는 경우, auto.commit.interval.ms 설정에 의해서, 메시지들을 poll 한 후에 해당 시간이 흐른뒤에 로직.. 2024. 5. 30. 카프카 톺아보기2 - CLI 카프카는 운영을 위한 커맨드 라인툴을 많이 제공한다.카프카를 운영하는 입장은 아니지만, 로컬에서 카프카를 세팅할때 필요한 명령어들을 조금 알아보려고한다.브로커 설정도커 컴포즈를 사용하여 카프카 세팅을 하는 경우, 아래와 같은 방식을 통해 설정할 수 있다.이번 포스팅에서는 커맨드라인 툴을 설명할 예정이라 추후에 다뤄보려고 한다.docker-compose 파일의 environment 프로퍼티로 설정server.properties 로 설정토픽 관련 - kafka-topics.sh위 쉘 스크립트를 통해서는 토픽의 생성, 정보 세팅, 정보 변경 등을 수행할 수 있다.옵션—create : 토픽의 생성. 별다른 설정을 주지 않으면, 브로커의 값을 따르게 된다.docker 명령어를 통해서 실행docker exec -i.. 2024. 5. 30. 카프카 - 메시지 유실 가능성 언젠가 면접에서 카프카 사용시 메시지가 유실될 수 있을까? 만약 유실될 수 있다면 언제 유실될 수 있을까? 라는 질문을 받은적이 있다. 당시 질문에 대답을 잘 못했는데, 카프카를 통신수단 이상으로 생각하지 않기도 했고 카프카 그 자체에 대해서는 잘 몰랐기 때문이었다. (지금도 잘모르지만)그렇다면, 카프카 사용시 메시지는 유실될 수 있을까? 한번 알아보려고 한다.복제https://pius712.tistory.com/16 카프카 톺아보기애플리케이션 개발자의 입장에서 카프카에 대해서 간단하게 살펴보고자 한다. (깊게는 필자도 잘 모른다.) 아파치 카프카는 분산 이벤트 스트리밍 플랫폼이다. 일반적인 pub/sub 구조의 rabbitMQ, redpius712.tistory.com 위 포스트에서 설명했듯, 카프카에.. 2024. 5. 23. 분산환경 동시성 처리 2 - redisson 활용 https://pius712.tistory.com/25 분산환경 동시성 처리 1 - db 사용동시성 이슈란 무엇인가?멀티 스레딩 환경에서는 동시성 이슈로 인해서 공유자원이 경쟁상태(race condition)에 놓이는 상황이 발생할 수 있다. JVM 진영에서는 객체의 상태 변수도 race condition 이 발pius712.tistory.com https://pius712.tistory.com/26 분산환경 동시성 처리 2 - redis SETNX 사용https://pius712.tistory.com/25 분산환경 동시성 처리 1 - db 사용동시성 이슈란 무엇인가?멀티 스레딩 환경에서는 동시성 이슈로 인해서 공유자원이 경쟁상태(race condition)에 놓이는 상황이 발생할 수 있pius712.t.. 2024. 5. 17. 이전 1 2 3 4 5 6 다음