전체 글
Client class에서 도메인 모델을 반환하는게 좋을까? DTO를 반환하는게 좋을까?
Client class에서 도메인 모델을 반환하는게 좋을까? DTO를 반환하는게 좋을까?
2023.06.10이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
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를 두는 방법, 처리상태..
머클 트리, 머클 경로 (= 해시 트리)
머클 트리, 머클 경로 (= 해시 트리)
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우리가 하는 개발-코딩은, 진리를 추구하는 학문이나 과학이 아니다. 지식이나 법칙, 진리를 발굴한다거나 완전 무결한 최고의 시스템을 만들어내는게 우리의 목표가 아니다. 우리가 하는 것은 공학이다. 공학의 정의는 다양하나, ('실천적인 문제 해결', '기술적 해결책 제시', '현실적인 문제 해결'...) 공통으로 등장하는 키워드는 '문제 해결' 이다. 우리에게 당면한 문제를 효과적으로 해결하는 것. 그 것이 우리의 목표다. 문제를 해결하려면, '문제가 무엇인가?'에서 부터 출발해야 한다. 보통 공학에서 주어지는 문제란, 사업 방향성과 밀접하게 맞닿아 있다. '어떤 방향으로 사업을 하기 위해서, 이런 프로덕트, 서비스가 필요합니다. 비용은 가능한 적게 들면 좋겠습니다.' 주목해야 하는 포인트는 비용이다. 물..