일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Salting
- minreplica
- 스프링부트
- eks
- Grafana
- SW Maestro
- blue-green
- 0 replica
- traceId
- slow query
- Kubernetes
- MSSQL
- spring boot
- SW 마에스트로
- keda
- Benchmarks
- 동등성
- hammerDB
- yml
- propogation
- Strimzi
- Kafka
- Leaderboard
- Software maestro
- Database
- zset
- logback
- Debezium
- Helm
- docket
- Today
- Total
목록전체 글 (64)
김태오

유저 정보 시스템을 구성할 때, 가장 중요한 요소는 유저 비밀번호의 보호이다. 이 때 사용하는 것이 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..
FeignClient 는 Spring Cloud 의 HTTP client 이다. microservice 등의 멀티모듈 환경 구성시 HTTP request 와 response 를 쉽게 주고받을 수 있도록 한다. RestTemplate 과 WebClient 등의 선택지도 있지만 이들보다 코드가 훨씬 보기 편하고 간결하다는 장점이 있다. implementation("org.springframework.cloud:spring-cloud-starter-feign:1.4.7.RELEASE") 일단 이런걸 버젼 맞춰서 넣어준다. @FeignClient(name = "feignclient") sealed interface FeignController { @PatchMapping("/test") fun test( @Re..
Spring Boot 배포 환경 시, 서버 로직에서 오류가 발생했을 때, 쉽게 오류를 찾을 수 있는 방법으로 traceId 를 사용하여 로그가 저장되어 있는 곳을 탐색하는 것이다. 예로 AWS CloudWatch 의 로그 그룹에서 "${traceId}" 등으로 검색하는 방법이 있겠다. 그렇기에 traceId 가 원활히 로깅되는 것이 중요한데, single thread 동기 작업에서는 크게 어렵지 않다. 그러나 비동기적 작업을 원할 시, 로직이 돌며 다른 thread 에서 작업이 이어지는 경우가 있는데, 이런 경우에서 원 쓰레드(부모 쓰레드) 의 traceId 가 작업 쓰레드(자식 쓰레드)로 전파되는 데에 문제가 발생한다. 이를 전파할 수 있어야 작업 쓰레드에서 문제가 발생했을 경우 traceId 를 타고..

우선 WebSocket 을 정의하면 persistent TCP connection 으로 이루어지는 Bi-Directional, full-duplex communication protocol 이다. 잘 와닿지 않으니 정의를 분해하여 이해해보자. 우선 persistent 라 하면, 계속 연결을 유지한다는 뜻이다. REST 와 gRPC 등에서 single-request 이후 connection 이 종료되는 것과 달리 connection 이후 일정 기간 동안 client 와 server 간의 연결이 종료되지 않고 오픈되어있다. Bi-Directional 은 양쪽의, 즉 client 와 server side 에서 각각의 traffic 을 모두 핸들링할 수 있다는 뜻이다. 일반 HTTP 에서 보통 client 가 ..
소프트웨어 개발에서 배포 방식은 중요하다. 배포 방식을 결정하는 요인에는 uptime, risk management, resource management, UX 등이 있다. 대표적인 3가지의 배포 방식을 간단한 코드와 함께 알아보도록 한다. 먼저 Blue-Green deployment 이다. 두 개의 동일한 배포 환경을 생성한다. 한 시점에는 하나의 환경만 구동시키도록 한다. 예를 들어 현재 live environment (현재 버젼 의 배포 환경) 가 Blue 이면, 새로운 버젼에서는 Green 환경에서 배포를 시작한다. Green 환경에서 테스트가 완료되고 (CI/CD 과정을 거쳐 빌드가 완료되고, 유닛 테스트 등이 완료) run 이 완료된 시점에 traffic 이 Blue 에서 Green 으로 넘어..