본문 바로가기

분류 전체보기262

redis-semaphore 사용해서 mutex 해결하기 CJ 택배사 API연동하는 과정에서 semaphore를 사용하여 mutex를 해결한 경험을 공유하고자 글을 작성합니다. 전체적인 흐름은 A 서버에서 B서버로 주문 등록 요청을 하면 B서버는 redis에서 토큰을 조회 후, 토큰과 함께 CJ API를 호출하게 됩니다. A서버에서 B서버로 요청을 하면 B서버는 validation 이후, 토큰을 조회하는 함수를 실행합니다. getToken 함수에서는 토큰키를 사용하여 redis에서 토큰을 조회하고 존재하면 사용하고, 존재하지 않으면 CJ측에 토큰 재발급 요청 후, redis에 저장합니다. token의 ttl은 하루 입니다. const getToken = () => { try { const token = await redis.get('토큰 키'); if (tok.. 2024. 1. 12.
기본키를 in 조건에 넣었을 때 full scan 되는 현상(range_optimizer_max_mem_size) mysql version : 8.0.31 사내에서 prisma interactive transaction의 타임아웃을 60초로 설정하여 사용하고 있다. 하지만 트랜잭션에서 수행되는 로직이 60초를 넘어 time out이 발생하는 일이 간헐적으로 발생했다. 단순히 트랜잭션의 time out 시간을 늘려도 되지만, 어떤 쿼리가 왜 오래 걸리는지 확인해 보았다. prisma query log 옵션을 줘서 쿼리 실행시간을 측정했을 때 아래의 쿼리가 오래 걸리는 것을 확인할 수 있었다. 해당 테이블에 있는 row수는 5571220개 이다. explain SELECT * FROM CourierInvoice WHERE id IN (....) in에 들어가는 변수 10302개 기준으로 16s가 소요되었다. innodb.. 2023. 12. 6.
역치 뚫어버리기 2년만에 생각정리에 글을 쓰는 것 같다. 그동안 이런 저런 경험을 하면서 느낀 것은 많은데 미루다가 최근에 나에게 긍정적인 영향을 주는 경험과 그로인해 느낀점을 글로 남기고 싶어서 역치 뚫어버리기 라는 주제로 글을 써본다. 역치라는 단어를 검색해보기 전에, 내가 알고 있는 역치라는 단어의 정의는 어떤 행동을 막 시작할 수 있는 최소한의 에너지 이다. 실제로 역치의 정의를 찾아보면 아래와 같이 나온다. 물리학에서 어떤 현상을 일으키게 하기 위하여 계(系)에 가해야 하는 물리량의 최소치 감각을 일으킬 수 있는 최소의 자극의 세기 생물이 자극에 대해 어떤 반응을 일으키는 데 필요한 최소한의 자극의 세기 어느정도 비슷한 것 같다. 그럼 역치를 내가 정의한 개념, 어떤 행동을 막 시작할 수 있는 최소한의 에너지.. 2023. 11. 21.
[Nexus] NexusGenObjects와 NexusGenFieldTypes의 차이 nexus는 graphql 서버를 code first하게 작성할 수 있게 도와주는 라이브러리 이다. nexus의 여러 장점중 하나는 생성된 graphql schema를 기반으로 typescript type을 제공해준다는 것이다. 덕분에 우리는 type safe하게 개발을 할 수 있다. nexus schema를 만들 때 다음과 같이 작성해주면 된다. const schema = makeSchema({ types: [ /* All schema types provided here */ ], outputs: { schema: path.join(__dirname, '../../my-schema.graphql'), typegen: path.join(__dirname, '../../my-generated-types... 2023. 3. 24.