일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- minreplica
- traceId
- SW 마에스트로
- 소프트웨어 마에스트로
- eks
- Grafana
- yml
- Leaderboard
- hammerDB
- Kubernetes
- 0 replica
- keda
- spring boot
- slow query
- Software maestro
- Database
- Helm
- zset
- Kafka
- 스프링부트
- blue-green
- 동등성
- Debezium
- Strimzi
- logback
- propogation
- Salting
- SW Maestro
- Benchmarks
- docket
- Today
- Total
목록전체 글 (62)
김태오
쿠버네티스에는 기본적인 스케일러로 HPA(Horizontal Pod Autoscaler)가 있다. Scale out, scale in 을 위해 존재하며 pod relica 개수를 조절해준다. 이를 조절하는 기준으로 yaml 혹은 api 등으로 명시한 resource metric(CPU, memory 등) 이 target utilization 과의 상하여부를 따져 한다. 간단한 yaml 을 살펴보자.apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: example-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-deploym..
Debezium은 대표적인 CDC(Change Data Capture) 툴이다. CDC를 쓰는 이유로는 데이터베이스의 변화를 빠르게 감지하여 이벤트를 발생시켜 작업을 함에 있다. 도입하게 된 유즈케이스를 간단히 설명하자면, 어플리케이션에서 POST api 인입 -> A 데이터베이스에 정보 저장 -> 외부 api 호출 -> 호출 성공시 B 데이터베이스에 정보 저장 -> 다른 service method들 실행의 과정에서, 외부 api 가 실패하더라도 A 데이터베이스가 업데이트되어 한 트랜잭션에 묶이지 않았기 때문이다. @Transcational 을 걸고 실패시 롤백 핸들링을 하면 되지 않나 싶겠지만, 외부 api 호출을 async로 던지고 있었기에 불가능했다.아무튼 외부 api 호출을 먼저하고, 호출이 성공..
느린 데이터베이스 쿼리를 콘솔에 로깅하려는 시도를 했다. HTTP intercepter과 비슷한 방식으로 데이터베이스에 쿼리가 처리되는 순간 hibernate 혹은 hikariCP 관련하여 설정파일 구현이 필요하지 않을까 싶었는데 생각보다 간단히 해결할 수 있다. 그냥 application.properties 에 spring.jpa.properties.hibernate.generate_statistics=truelogging.level.org.hibernate=INFOhibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=원하는 단위 시간 MS (0초과) 를 추가하면 된다. yaml 로 설정하는 경우도 마찬가지로 늘 그랬듯 . -> : 로 해주면 된다. 당연히..
데이터베이스에서 트리거는 흔히 데이터 완결성 유지, 검증 등의 비즈니스 필요에 의해 사용된다. 어떤 특정 테이블, 특정 행, 특정 컬럼에 대해 INSERT, DELETE 등 operation 이 일어날 때 같은 트랜잭션에 묶여 기존의 작업에 더해 다른 작업을 수행하는 것이다.그런데 여기에 통상 server application 단에서 하는 API 를 호출하는 작업을 묶을 수도 있다. 우선 서두에 강조할 부분은, 이는 절대 권장하지 않는 행위이다. 앞서 말했듯이 어플리케이션쪽에서 실행되는 데이터베이스 동작과 함께, 컨트롤러와 서비스 레이어에서 API를 호출하는 것이 당연한 절차인데, 굳이 민감하고 ACID성을 유지해야 할 데이터베이스 작업에서 API를 호출함으로 인해 예측하기 힘든 데이터베이스 부하를 일으..
유저 정보 시스템을 구성할 때, 가장 중요한 요소는 유저 비밀번호의 보호이다. 이 때 사용하는 것이 salting 이라는 기법인데, 어원은 https://stackoverflow.com/questions/244903/why-is-a-password-salt-called-a-salt 라고한다.딱히 그럴듯한 답은 없는데, foo - bar 등 흔히 쓰이는 용어들의 어원이 골때릴 때가 있다. 일단 해싱이라는 용어부터 짚고 가야 하는데, 요약하자면 문자열을 다른 문자열로 바꾸는 “단방향” 프로세스이다. 단방향이라 하면 해싱된 문자열을 원 문자열로 되돌릴 수 없음을 말한다.반대로 양방향 암호화에는 key 등 암호화와 복호화 양쪽에서 공통으로 들고 있는 원 문자열과 바뀐 문자열을 유추할 수 있는 방법이 있다. 해..
스프링 부트 로그에 너무 많은 로그가 쌓여 로그를 뒤져 오류를 찾는 등 작업을 하고 싶을 때 불편한 경우가 있다. 혹은 최대 throughput 이 정해져 있는 AWS CloudWatch 에 로그가 쌓이는 경우 로그 누락 등의 치명적인 문제가 생길 수 있다. 특히 스프링 부트에서 쌓는 로그 뿐만 아니라 쿠버네티스나 ELB 에 배포 후 쌓이는 추가적인 부수 로그들이 있을 때 굳이 로그를 남기지 않는 판단을 할 수 있다. 다음은 간단하게 원하는 로그를 제외시키는 방법이다. import ch.qos.logback.classic.spi.ILoggingEvent import ch.qos.logback.core.filter.Filter import ch.qos.logback.core.spi.FilterReply c..