TIL
-
2024.04.06 spring kafka transaction isolation level, L4L7TIL 2024. 4. 6. 17:09
spring kafka를 사용 중이다. 다른 서비스가 transaction producer를 사용해서 우리의 서비스도 isolation level을 read commited로 변경했다. 커밋된 메시지만 읽기 위해서이다. 우리 팀이 관리하는 서비스가 2개인데 2개의 서비스가 각자 spring kafka version이 다르다. default isolation level이 read uncommited로 알고 있는데 특정 서비스가 원하는데로 동작하지 않는다. default isolcation levlel이 version마다 다른가? -> 다르지 않은데 프로젝트 내부에 properties가 2개로 관리되고 있었고 그 중 하나가 read_commited였다. transaction이 commit되지 않아서 read..
-
2024.03.31 MMM galera clusterTIL 2024. 3. 31. 16:20
회사에서 DB이중화 구조로 MMM을 사용 중임. galera cluster를 통해 구현되어 있음. 문제 많은 양의 row 업데이트가 일어난 트랜잭션이 다른 노드에게 전파되는데 좀 오래걸리는 거 같음. 해당 기능은 순차적으로 일어남 (1트랜잭션이 끝나고 2트랜잭션 시작 [트랜잭션은 각자 5000개 row를 CUD함]) 다른 노드에 업데이트가 오래걸리니 읽기 시에 노든간의 데이터가 일치하지 않음. (어쩔때는 일치함) 테스트 DB는 단일 DB여서 이런 문제가 발생하지 않았지만 실DB는 이중화가 되어 있기 때문에 이런 문제가 발견되었음. galera cluster는 논리적으로 동기화 구조이지만 실제로는 동기적으로 동작하지 않는다고함. https://dba.stackexchange.com/questions/203..
-
2024.02.25 AuthorizationManagerTIL 2024. 2. 25. 16:38
spring security 5.6을 사용하다가 6.1로 버전업을 하고 있는 중. 5.6에서의 인증인가는 filterSecurityInterceptor와 methodSecurityInterceptor에서 이뤄졌음. voter를 통해 권한 검사를 했음. 6.1 버전 혹은 5.8 버전 부터 AuthorizationFilter와AuthorizationManagerBeforeMethodInterceptor로 대체되었고 voter는 AuthorizationManager가 그 역할을 대신하고 있다. authorizeHttpRequests을 쓰면 AuthorizationFilter를 쓰고 authorizeRequests를 쓰면 filterSecurityInterceptor를 쓴다고 한다. Authorize HttpS..
-
2024.02.23 DLT logging customTIL 2024. 2. 23. 23:43
DLT에 메시지가 도착하면 스택 트레이스를 로깅함. 에러 레벨로 로그를 남기고 있음. DLT 핸들러 메소드에서 자체적으로 남기도록 코드를 만들었기 때문에 스택 트레이스를 볼 필요가 없다고 생각했음. 해당 기능은 스프링 카프카에서 제공해주기 때문에 커스텀해서 사용하면 됨 @Configuration class CustomRetryTopicConfiguration : RetryTopicConfigurationSupport() { // Configuring the Dead Letter Publishing Recoverer Factory to never log listener exceptions. // Because logging is performed in the DLT method. override fun c..
-
2024.02.03 spring security Authorization Manager Method SecurityTIL 2024. 2. 3. 14:37
5.6 버전 이전에는 Secured와 PreAuthorize를 동시에 사용할 수 없었지만 5.6 이후에는 동시에 사용할 수 있게 되었음. 이유는 다음과 같다. 5.6이전에는 MethodSecurityInterceptor가 해당 메소드의 권한을 검증했음. 검증 방식을 가져오는 것을 DelegatingMethodSecurityMetadataSource에게 위임한다. DelegatingMethodSecurityMetadataSource는 호출한 메소드가 어떤 권한 검증을 해야하는지를 캐시하고 있는데 가장 첫번째 검증 방식을 캐시한다. 해당 attribute(검증방식)은 계속 반환되어 interceptor까지 가게되어서 PreInvocationAuthorizationAdviceVoter가 투표하는데 사용된다. ..
-
2024.01.14 TransactionSynchronizationManagerTIL 2024. 1. 14. 22:36
TransactionSynchronizationManager 트랜잭션 내부에서 데이터(커넥션등)를 동기화할 때 사용하는 오브젝트인데 이것을 활용하면 내가 원하는 트랜잭션 생명주기와 동일한 캐시를 만들 수 있을 듯 하다. registerSynchronization 메소드도 제공하는데 before commit등을 정의할 수 있다. 커밋 전에 뭔가를 해야할 때 여기다 넣으면 될 듯 하다. https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html TransactionSynchronizationManager (Spr..
-
2024.01.02 kafka 적어도 한 번...TIL 2024. 1. 3. 02:04
https://ssnotebook.tistory.com/m/48 [Kafka] 멱등성/At least once/At most once/Exactly once MSA(Micro Service Architecture)에서 EDD(Event Driven Development)를 기반으로 개발을 할 때 Kafka를 이벤트 브로커로 많이 사용하게 되고, 그와 더불어서 이슈가 되는 것이 멱등성에 관한 내용이다. 아래 글은 Ka ssnotebook.tistory.com https://easywritten.com/post/kafka-message-delivery-semantics/ Kafka의 Message Delivery Semantics 그리고 Exactly Once 전송 | EasyWritten 간단한 Kafka..
-
2023.12.16 JMeter,feignTIL 2023. 12. 16. 23:28
https://velog.io/@ehdrms2034/%EC%84%B1%EB%8A%A5-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EA%B5%AC-Apache-Jmeter-%EC%84%A4%EC%B9%98%EB%B6%80%ED%84%B0-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%82%AC%EC%9A%A9%EA%B9%8C%EC%A7%80 [성능 테스트 도구] Apache Jmeter 설치부터 간단한 사용까지 오늘은 성능테스트 도구로 많이 쓰이고 있는 Apache Jmeter의 간단한 사용법을 알려드리도록 하겠습니다.서버가 제공하는 서비스에 대한 성능을 측정하고 사용자에게 보여주는 테스트 도구라고 할 velog.io https://www.google.com/search..