분류 전체보기
Exactly once는 가능할까?
Exactly once는 가능할까?
2023.06.19요약 ) 동작 중 서버 다운에 대한 대책. exactly once가 가능하려면... 동작 수행과 수행 결과에 대한 저장이 transaction이나 atomic으로 이루어 질 수 있어야 한다 원격지 서버 API 요청 동작 시, 네트워크 장애에 대한 대책. exactly once가 가능하려면... 처리 요청 보내기 전, 원격지에서 기존 처리 목록을 확인 할 수 있어야 한다. 또는, 원격지에서 hash나 id를 보고 동일한 요청이 들어오면 처리제외하는 방어 로직이 들어가 있어야 한다. exactly once delivery는 불가능. exactly once processing은 가능. 메시지 중복이나 누락이 발생하는 상황? 크게 2가지 어려운 포인트를 고민해야 한다. 서버 다운과 네트워크 장애다. kafka..
[Spring Batch] cli 실행 - JobLauncherApplicationRunner
[Spring Batch] cli 실행 - JobLauncherApplicationRunner
2023.06.16SpringBoot 안쓰는 경우 - CommandLineJobRunner Configuring and Running a Job Because the script launching the job must kick off a Java Virtual Machine, there needs to be a class with a main method to act as the primary entry point. Spring Batch provides an implementation that serves just this purpose: CommandLineJobRunner. It’s i docs.spring.io 공식 docs 참고 - https://docs.spring.io/spring-batch/docs/4.3..
Spring Boot 3 에서 변경된 부분 (Batch)
Spring Boot 3 에서 변경된 부분 (Batch)
2023.06.14https://www.baeldung.com/spring-boot-3-migration#spring-batch 6.1. @EnableBatchProcessing Discouraged Previously, we could enable Spring Batch’s auto-configuration, annotating a configuration class with @EnableBatchProcessing. The new release of Spring Boot discourages the usage of this annotation if we want to use autoconfiguration. In fact, using this annotation (or defining a bean that implem..
Unique ID, Key 생성기 설계 (with Shard Key)
Unique ID, Key 생성기 설계 (with Shard Key)
2023.06.09대규모시스템개발 #3 참고 7장. 분산 시스템을 위한 유일 ID 생성기 설계 참고 요구사항 유일해야 함. 시간 순으로 정렬 가능해야 함. (단 아주 작은 time slot 안에서는 순서가 보장되지 않아도 상관 없음) 숫자로만 구성되어야 함. DB 1대의 auto increment로 커버 불가한 규모. 분산DB 사용 중이라, ID를 보고 샤드를 찾아갈 수 있어야 함. 1-4 sol 트위터의 snowflake 데이터센터 위치, 서버 ID가 들어가서 어느 리전의 어느 서버가 채번하든 unique하도록. instagram 방식 shard ID를 넣었다. 5 sol -shard key에 대해서. id 자체를 shard key로 사용하는 방법도 가능은 하지만, 반드시 그래야 한다는 법은 없다. id 안에 shard..
kafka 순서 보장
kafka 순서 보장
2023.05.10kafka는 한 파티션 내에서의 순서는 보장해준다. (단, max.in.flight.requests.per.connection=1 인 경우) 카프카 컨슈머 그러나 파티션이 여러 개 있을 때, 여러 파티션에 걸쳐 흩어진 item들 간의 순서는 보장 할 수 없다. 보내는 쪽에서 순차적으로 1, 2, 3 파티션에 프로듀스 한다고 해도, 받는 쪽에서 어떤 순서대로 파티션에 접근해서 데이터를 가져갈지 알 수 없기 때문이다. 순서 보장하는 법 A - 파티션 1개만 사용한다. ⇒ 완전한 의미의 순서 보장. 보낸 순서대로 받는다. ⇒ 분산처리 X ⇒ 처리량 ⬇ 순서 보장하는 법 B - 파티션키 + 파티션 내 순서보장 이용한다 이렇게 전체 파티션들을 아우르는 순서보장은 kafka의 병렬 처리 컨셉 상 불가능하지만 [파티..
인덱스 힌트 관련 - 쿼리 플랜 결과는 무시하고 꼭 써줘야 한다.
인덱스 힌트 관련 - 쿼리 플랜 결과는 무시하고 꼭 써줘야 한다.
2023.04.25이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
Babel과 Polyfill
Babel과 Polyfill
2023.04.07What is Babel? Babel is a JavaScript compiler. ES6 문법을 구식 브라우저에서도 돌아가는 하위호환 문법으로 트랜스파일 해주는 트랜스파일러. 또는 컴파일러. https://babeljs.io/docs/ 기타 jsx변환이나 type 변환에 대한 상세한 내용은 공식 docs 참고. What is Polyfill? 문법에 대한 하위호환 지원은 babel이 하고, API에 대한 하위호환 지원은 Polyfill이 담당. 즉 ES5에 존재하지 않는 Promise 같은 객체를 구형 브라우저에서도 사용 할 수 있게, 해당 객체들을 정의해주는 역할. Promise = Promise ?? /* 자체 구현 Promise */; Object.entries = Object.entries ??..
CRA(Create React App) 관련
CRA(Create React App) 관련
2023.04.06디버깅? source map source map이 함께 생성됨. (default) source map은 원본 파일은 아니고 원본 파일과의 mapping 정보를 담고 있는 json 형태의 파일. 개발자 도구에서 원본 소스파일과 자동으로 연결해서 보여준다. 따라서 프로덕션 빌드에서는 제거 옵션 주고 빌드해야 함. browserlistrc? CRA를 쓰더라도 .browserlistrc 적용 된다. 공식 docs에 나와 있지는 않지만.. https://github.com/browserslist/browserslist/issues/391 CRA(Create React App)으로 프로젝트 생성하게 되면 기본적으로 .babelrc 설정이 불가능함. react-script의 webpack.config.json에 ba..
webpack 빌드 - 독립 library로 만들기
webpack 빌드 - 독립 library로 만들기
2023.04.05독립 library로 만들기 https://webpack.kr/guides/author-libraries/ webpack에 대한 기본적인 내용 예제 package.json "scripts": { "build:alpha": "cross-env REACT_APP_PROFILES=alpha npm-run-all webpack-module react-build", "build:real": "cross-env REACT_APP_PROFILES=real GENERATE_SOURCEMAP=false npm-run-all webpack-module react-build" }, npm-run-all로 [react-build와, 별도 library를 만들기 위한 webpack-module] 두 작업 모두 실행 webpac..
spring-webmvc 4.3.x와 5.x.x의 차이 - HttpMessageNotWritableException
spring-webmvc 4.3.x와 5.x.x의 차이 - HttpMessageNotWritableException
2023.04.03상황 spring-webmvc 4에서 5로 버전업하면서 특정 컨트롤러에서 아래 에러 발생 org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class dev.umbum.MyExceptionResponse] with preset Content-Type 'application/vnd.ms-excel' @GetMapping("/excel") public MyResponse 문제의_컨트롤러(HttpServletResponse response, MyRequest request) { response.setContentType("application/vnd.ms-excel"); //
spring-webmvc 에서 SpringBoot로 단계별로 전환하기
spring-webmvc 에서 SpringBoot로 단계별로 전환하기
2023.04.01전환 사유 대부분의 가이드, docs, 자료가 SpringBoot를 전제하고 있어 mvc 프로젝트 유지보수 시 불필요하게 리소스가 낭비되는 부분이 있음. @MockBean, @SpyBean 등 SpringBoot의 TC 지원 애너테이션을 사용 할 수 없어 TC 작성 효율이 떨어지고 보일러플레이트 작성에 대한 진입장벽 높음. SpringBoot로 전환하는게 장기적으로 유지보수비용이 더 세이브 될 것 같아 전환 결정. As-is spring-webmvc 4.3.4.RELEASE 외장 tomcat maven jsp 코드 다수 폴더 기반 deploy (war 사용하지 않고 디렉터리 전체를 배포) 폴더 전체 배포는 아무래도 node_modules 같은 디렉터리는 디플로이 시 제외해야 하는 등 신경써야 하는 부분이..
처리대상 flag, 일배치, 재처리 관련 설계
처리대상 flag, 일배치, 재처리 관련 설계
2023.04.01상황 1. 거래원장_테이블 ------> 일배치_테이블 // 하루에 한번 [어제 있었던 거래+재처리 필요 거래]들을 대상으로 일배치를 돌린다. '재처리 필요 거래'를 처리하는 관점에서 크게 2가지 방법이 있다. A. 거래원장_테이블에 update해서 처리 대상임을 표시하여 일배치에 포함시키는 방법 B. 일배치_테이블에 미리 적재하는 방법 A. 거래원장_테이블에 update해서 처리 대상임을 표시하는 방법 어제 있었던 거래 -> 생성하면서 처리 대상으로 표시 재처리 필요 거래 -> 재처리 필요해진 순간 처리 대상으로 표시하는 방법. 처리 대상 표시 방법은 [처리대상 flag를 두거나, 처리상태 code를 두거나, 처리일자 date]를 두는 방법으로 나뉜다. A-1. 처리대상 flag를 두는 방법, 처리상태..