분류 전체보기
머클 트리, 머클 경로 (= 해시 트리)
머클 트리, 머클 경로 (= 해시 트리)
2023.03.28머클트리란 (= 해시 트리) https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%8A%B8%EB%A6%AC 해시 트리 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 컴퓨터 과학과 암호학에서 해시 트리(hash tree)는 모든 비-리프(non-leaf) 노드의 이름이 자식 노드들 이름의 해시로 구성된 트리 구조를 가리킨다. 발명자 랄프 머 ko.wikipedia.org 블록에 포함된 거래 내역의 hash값이 leaf이고, 이를 두 쌍씩 짝지어 다시 hash한게 부모 node가 되는 과정을 반복하여 완성된 이진트리. 블록체인에서 활용 http://wiki.hash.kr/index.php/%EB%A8%B8%ED%81%B4%ED%8A%B8%EB..
좋은 설계란 무엇일까? : 유지보수가 쉬운 시스템을 만드는 것
좋은 설계란 무엇일까? : 유지보수가 쉬운 시스템을 만드는 것
2023.03.03우리가 하는 개발-코딩은, 진리를 추구하는 학문이나 과학이 아니다. 지식이나 법칙, 진리를 발굴한다거나 완전 무결한 최고의 시스템을 만들어내는게 우리의 목표가 아니다. 우리가 하는 것은 공학이다. 공학의 정의는 다양하나, ('실천적인 문제 해결', '기술적 해결책 제시', '현실적인 문제 해결'...) 공통으로 등장하는 키워드는 '문제 해결' 이다. 우리에게 당면한 문제를 효과적으로 해결하는 것. 그 것이 우리의 목표다. 문제를 해결하려면, '문제가 무엇인가?'에서 부터 출발해야 한다. 보통 공학에서 주어지는 문제란, 사업 방향성과 밀접하게 맞닿아 있다. '어떤 방향으로 사업을 하기 위해서, 이런 프로덕트, 서비스가 필요합니다. 비용은 가능한 적게 들면 좋겠습니다.' 주목해야 하는 포인트는 비용이다. 물..
Good design is all about trade-offs
Good design is all about trade-offs
2023.02.15이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
지연 평가 Sequence의 원리
지연 평가 Sequence의 원리
2023.02.10fun main() { val primes: Sequence = sequence { var numbers = generateSequence(2) { it + 1 } //
Spring Batch Multi-threaded Step 사용 시 chunk 구성에 대한 오해
Spring Batch Multi-threaded Step 사용 시 chunk 구성에 대한 오해
2022.12.16개요 Spring Batch에서는 다양한 병렬 처리 방식을 지원하고 있습니다. AsyncItemProcessor / AsyncItemWriter Multi-threaded Step Parallel Steps Externalizing Batch Process Execution [Spring Batch] 병렬 처리 이 중 Multi-threaded Step 방식에 대해 간단히 설명하고, chunk 구성 관점에서 제가 잘못 이해하고 있었던 부분에 대해 얘기하려 합니다. Multi-threaded Step 방식의 병렬 처리 Multi-threaded Step 방식은 step build 시 `` .taskExecutor()``를 붙여주면, 한 Step 내에서 chunk 단위로 병렬 처리되는 방식입니다. 기존 코드..
[Spring Batch] 병렬 처리 방법 모음
[Spring Batch] 병렬 처리 방법 모음
2022.09.15Spring Batch에서 지원하는 배치 병렬 처리 방식 AsyncItemProcessor / AsyncItemWriter → 한 step 내에서 processor만 병렬 수행해야 할 때 Multi-threaded Step → 한 step 내에서 reader, processor, writer를 chunk 단위로 병렬 수행해야 할 때 Parallel Steps → 여러 step들을 병렬로 수행해야 할 때 Externalizing Batch Process Execution → 외부 remote 서버에서 병렬 수행 필요할 때. (master-worker 모델) Remote Chunking of Step → 스텝 내의 Processor, Writer가 무거운 작업이라 외부 remote 서버들에서 병렬로 돌리고 ..
HealthCheck, L4, GSLB
HealthCheck, L4, GSLB
2022.07.30L4 switch HealthCheck 보통 L7 H/C(HTTP)를 사용하고, WAS에 `` /monitor/l7check`` 같은 Controller를 둔다. 방법 1) WAS 내리는 방법 WAS가 graceful shutdown 지원해야 함. (일단 받은 요청은 모두 처리하고 나서 종료해야 하니까) WAS가 내려가는 시간 동안 delay 있음. 비추천하는 방법. 방법 2) WAS controller에서 file exists 체크해서 응답하는 방법 문제 시 파일만 삭제하면 exists가 false이므로 빠른 L4 절체가 가능하다. (서버를 내리는 것 보다 파일만 삭제하는게 더 빠르다.) WAS 자체는 정상이므로 일단 받은 요청은 모두 처리 가능하다. WAS가 graceful shutdown 지원하지 ..
[Spring Batch] Scoped Bean 초기화 시 생성자 로깅 누락 문제
[Spring Batch] Scoped Bean 초기화 시 생성자 로깅 누락 문제
2022.07.27이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[Test] 대역(Test Doubles) : Stubs, Mocks
[Test] 대역(Test Doubles) : Stubs, Mocks
2022.06.10대역의 필요성 테스트를 작성하다 보면 다양한 사유로 대역이 필요해지게 됩니다. 테스트 수행이 외부 의존성에 영향을 주면 안되는 경우 e.g., withdraw 요청이 포함된 기능을 테스트 할 때, 실제로 withdraw 요청이 API 서버에 전달되어서는 안됨. 테스트 내에서 같은 요청을 보냈을 때, 외부 의존성의 응답이 항상 동일할 것이라고 신뢰 할 수 없는 경우 (대부분) e.g., 테스트용 카드를 받았으나, 만료되는 경우 e.g., 외부 의존성에 장애가 발생하는 경우 외부 의존성으로 부터 원하는 응답을 일으키기 어려운 경우 대역의 간단한 예제 테스트 하고자 하는 것이 아래와 같을 때 `` AutoDebitRegister.register(user, cardNum)`` - cardNum 유효성에 따라 V..
[Spring Batch] FileItemWriter
[Spring Batch] FileItemWriter
2022.05.16JsonFileItemWriter java docs code `` [ {json object}, {json object}, {json object} ]`` 형식으로 만들 때. 근데 spring-batch-core 4.1 부터 지원이라... 구버전에는 없다. 구버전에서는? 구버전에서는 FlatFileItemWriter를 쓰거나 직접 ItemWriter 작성해야 하는데 그나마 FlatFileItemWriter가 좀 더 고수준이라 이걸 쓰는게 낫다. (덮어쓰기, 기존 파일 존재하면 삭제 등 설정 가능) 근데 문제는 `` [ {json object}, {json object}, {json object} ]`` 형식으로 만들기가 까다롭다는 점이다. (맨 앞과 뒤에 구분자 , 가 들어간다. JsonFileItemW..
Client IP 구하기 : X-Forwarded-For와 X-Real-IP
Client IP 구하기 : X-Forwarded-For와 X-Real-IP
2022.04.22Proxy / VPN X-Real-IP는 바로 직전 client의 IP를 나타낸다. ``` proxy_set_header X-Real-IP $remote_addr; 설정에서 $remote_addr이, nginx가 수신한 client IP를 의미한다. User - Nginx - Tomcat 일 때, X-Real-IP는 User IP 가 된다. User - Proxy - Nginx - Tomcat 일 때, X-Real-IP는 Proxy IP가 된다. ``` X-Forwarded-For는 3.3.3.3, 1.1.1.1 포맷이다 LB, Proxy, Cache Server 등을 거치면 srcIp가 변경되기 때문에 원래의 Client IP를 가져오기 위한 방법이 필요하다. 이를 위해 X-Forwarded-For 필..
[Spring] EventListener
[Spring] EventListener
2022.04.17https://www.baeldung.com/spring-events ``kt ApplicationEventPublisher::publishEvent``로 pub 하고 ``kt @EventListener``로 event 받아 처리하면 된다. 단 여기서 주의해야 할점! listener가 이벤트를 수신하는 것이 왠지 비동기로 이루어질 것 같지만, 기본적으로 동기식이다! 한 스레드가 pub한 다음, 해당 이벤트를 처리해야 하는 EventListener들을 돌면서 동기식으로 직접 리스너를 수행한다. By default, the listener is invoked synchronously. However, we can easily make it asynchronous by adding an @Async annot..