분류 전체보기 90

스레드 풀 (Thread Pool)

스레드풀(Thread Pool)이란?스레드풀(Thread Pool)은 여러 작업을 동시에 처리할 수 있도록 미리 생성된 스레드의 모음을 말함. 이 개념은 멀티스레딩 환경에서 자주 사용되며, 자원을 효율적으로 사용하고 작업 성능을 향상시키는 데 도움이 됨.왜 스레드풀이 필요한가?멀티스레딩 환경에서는 여러 작업을 동시에 처리할 수 있지만, 매번 새로운 스레드를 생성하고 소멸시키는 과정은 비용이 많이 듬. 스레드를 생성할 때마다 시스템 자원이 소비되고, 작업이 끝날 때마다 해당 스레드를 삭제해야 하기 때문.스레드풀은 이를 해결하기 위해 일정한 개수의 스레드를 미리 생성해두고, 필요할 때 이 스레드를 사용함. 작업이 끝난 후에도 스레드를 삭제하지 않고, 다시 사용할 수 있도록 대기시켜 둠.. 이렇게 함으로써 ..

DB 2024.09.09

MySQL 엔진의 구성요소 설명

1. Connection Handler역할: MySQL 서버는 클라이언트가 데이터베이스에 연결할 수 있도록 Connection Handler가 관리합니다. 클라이언트가 MySQL 서버에 연결을 요청하면, 이 요청을 받아들여 세션을 생성하고 연결을 유지하는 역할을 합니다.기능:클라이언트가 서버에 연결하면 해당 연결을 처리할 스레드를 할당합니다.여러 클라이언트가 동시에 서버에 연결할 수 있도록 동시성 관리를 수행합니다.연결이 설정되면, 클라이언트의 요청을 처리하기 위한 스레드를 생성 또는 재사용하여 성능을 최적화합니다.MySQL에서는 여러 연결을 효율적으로 관리하기 위해 스레드 풀(Thread Pool)을 사용합니다.예시: 사용자가 데이터베이스에 접속해 쿼리를 실행하려면 먼저 MySQL 서버와 연결을 설정해..

DB 2024.09.06

Auto increment max 때문에 주말에 6시간 일했다 - 2

해결책은 간단했다. D 테이블의 id가 max에 도달해서 C 모듈이 Queue Table에 있는 데이터를 읽어서 D 테이블에 업데이트를 못하는 것이니깐1. C 모듈 잠깐 끄고2. pk가 unsigned int 인 것을 unsigned bigint로 바뀐 E테이블을 새로 만들고3. D테이블을 E테이블로 카피하고4. 그다음에 D테이블과 E테이블의 이름을 바꿔치기하면 해결되는 것이었다.  약간 걱정이 되는 부분은 D테이블에 데이터가 얼마나 쌓였고 D테이블에 있는 데이터를 E테이블에 카피하는 데 걸리는 시간을 가늠할 수 없다는 것이었다. (최대 42억개니깐..) 그래도 git의 maintainer 권한이 있었기 때문에 작업 자체는 어떻게든 다 할 수 있었다.production DB에 접근할 수 없어 쿼리를 직접..

개발 이슈 2024.05.25

Auto increment max 때문에 주말에 6시간 일했다 - 1

사건은 주말 저녁 8시 30분에 발생했다. 내가 입사때부터 쭉 담당하고 있는 서비스에 이상이 발생했다는 연락을 협력사로부터 받았다. 서비스 자체가 동작하지 않는 것은 아니었으나, 정보를 표기하는 부분에 있어 특정 데이터가 갱신되고 있지 않다는 것이었다. 서비스의 일부 모듈에 문제고 특정 정보의 갱신이 되지 않는 다는 것은 협력사로부터 연락받기 3일전부터 인지를 하고 있었고 서비스의 아주 사소한 부분이라 바로 해결하지 않았다.  담당하고 있는 서비스에 버그가 발생하면 슬랙으로 알람을 받도록 코드를 짜뒀었고, 에러 메세지는 Failed to read auto-increment value from storage engine 였다. 대충 구글링 하고 에러가 발생한 모듈을 보니 딱봐도 auto increment ..

개발 이슈 2024.05.19

ERC4337 - Bundler 사용하기 (삽질중)

ERC 4337 에 대한 개념과 설명은 글의 마지막에 첨부된 사이트이 아주 친절하게 잘 설명해주고 있기에 따로 정리를 하지 않았다. (나는 2023 11월에 클레이튼 devmeet에서 발표된 영상을 가장 먼저 접해서 개념을 파악하고 그 이후에 다른 블로그나 공식문서를 보면서 감을 잡았다.)Bundler를 어떻게 사용하는지 궁금했고, 이 Bundler 를 사용하는 과정에서 발생한 삽질을 기록하기 위해 글을 작성하기로 했다.github 는 https://github.com/eth-infinitism/bundler 다.README.md 에서 설명하는 그대로 프로젝트를 clone 받고 preprocess 로 필요한거 설치(?) 해주었다.yarn && yarn preprocess그 다음은yarn hardhat-d..

Blockchain 2024.05.12

Hardhat verify 작동 원리에 대하여

Hardhat는 이더리움 스마트 컨트랙트 개발을 위한 도구로, 테스트, 배포, 디버깅 등의 기능을 제공한다. 그중 `hardhat verify`는 Hardhat에서 제공하는 명령어 중 하나로, 이더리움 블록체인 상에 배포된 스마트 컨트랙트의 소스 코드를 확인하고 검증하는 작업을 수행한다. 다만 Hardhat의 `verify` 명령어는 스마트 컨트랙트의 소스 코드가 실제로 배포된 바이트코드와 일치하는지를 검증하는 것이 아니라, 외부 서비스인 이더스캔과 같은 검증 서비스에 컨트랙트 정보를 제출하여 검증을 요청한다. 이더스캔을 예시로 들면 다음의 과정으로 verify 가 진행된다. 1. 사용자가 `hardhat verify` 명령어를 사용하여 컨트랙트 정보를 Hardhat에 전달한다. 2. Hardhat은 사..

Blockchain 2024.02.24

Polygon zkEVM 관련 메모

마땅히 적어둘 곳이 없어서 티스토리에 대충 적어두기로 했다. zkevm docs https://docs.polygon.technology/zkEVM/ json-rpc-endpoints https://github.com/0xPolygonHermez/zkevm-node/blob/develop/docs/json-rpc-endpoints.md zkEVM-custom-endpoints https://github.com/0xPolygonHermez/zkevm-node/blob/develop/docs/zkEVM-custom-endpoints.md public rpc Network RPC URL ChainID Block Explorer URL Currency Polygon zkEVM https://zkevm-rpc.c..

Blockchain 2024.02.16

[백준] 1202번 보석 도둑 (javascript, python)

그리디 문제를 풀고있는데 또다시 어려움을 직면했고 오답노트겸 따로 정리를 했다. https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 문제 세계적인 도둑 상덕이는 보석점을 털기로 결심했다. 상덕이가 털 보석점에는 보석이 총 N개 있다. 각 보석은 무게 Mi와 가격 Vi를 가지고 있다. 상덕이는 가방을 K개 가지고 있고, 각 가방에 담을 수 있는 최대 무게는 Ci이다. 가방에는 최대 한 개의..

Algorithm 2024.01.30

[백준] 11000번 강의실 배정 (javascript)

그리디 문제를 풀고있는데 처음으로 어려움을 직면했고 다른 사람들의 풀이를 읽어도 명확하게 이해가 되지 않아서 따로 정리를 했다. 앞으로 문제를 풀고나서 리마인드도 할겸 어려워하는 사람에게 도움도 될겸 겸사겸사 블로그에 정리해볼까 싶다. https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 문제 수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다. 김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다. 참고로, ..

Algorithm 2024.01.14

3년차 개발자 2023년 4분기 회고

1. 목표와 결과 비교 지난 4분기의 목표는 단 하나, 주어진 회사 업무를 기한내에 마무리 지어보자 였다. 마무리 잘 지었다. 내가 맡은 부분에서 최적화할 수 있는 부분에 대해서는 최적화를 했고, 기한내에 마무리 짓기 위해 멀티워커로 구간별로 데이터를 처리하게 코드를 수정하여 일정도 딱 맞췄다. API도 처음으로 제대로 jest를 사용하여 repository 모킹도 해보고 테스트 커버리지를 일정수준에 맞게 올리는 작업도 했다. 다만 시간이 지나고 회고를 작성하는 도중 아쉬우면서 후회되는 것이 있는데 바로 퇴근후에 공부한게 별로 없다는 것이다. 너무 회사 업무에만 신경쓰고 개인의 발전에는 신경쓰지 않은 안일한 태도로 발생한 문제라고 생각한다. 이번 분기에는 회사 업무 외에 개인의 발전을 위해 추가로 공부해..

생각정리 2024.01.07