분류 전체보기(42)
-
Node.js 스트림을 사용해서 효율적으로 S3 에 파일 업로드 하기
목표Node.js 는 스트림을 굉장히 쉽게 사용할 수 있게 되어있다.나는 다음상황에 어떻게 하면 메모리 사용을 최소로 하여 문제를 해결할 수 있을까 고민했고, 예제 코드를 만들어 보았다. 상황.크롤링을 통해 다운받은 이미지를 압축하여 S3 에 업로드 해야하는 상황이미지파일을 메모리에 불러와 압축하고, 압축된 파일을 메모리에 올린채로 S3 에 업로드 할 시 메모리 사용률이 클 것한개의 인스턴스에서 병렬적으로 처리해야하고, 이는 메모리 부족을 야기할 수 있음. 코드github: https://github.com/SecretJuJu/typescript-s3-upload-with-streamHTML 삽입미리보기할 수 없는 소스 코드 설명크롤링을 통해 수집한 파일들은 images/targets 안에 모여있음.ar..
2024.06.04 -
포인트 사용 기능에 대한 데이터베이스 설계와 플로우를 구상
환경: PostgreSQL목표: 포인트 사용 기능에 대한 데이터베이스 설계와 플로우 구상저번 포스트: 트랜잭션 격리수준과 락 종류에 대해 알아보기이번 포스트: 포인트 사용 기능에 대한 데이터베이스 설계와 플로우를 구상 해 보기 들어가며저번 포스트에서 트랜잭션 격리수준과 락 종류를 알아보고, 다음 포스트 에서 포인트 기능에 대한 구상을 해본다고 한지 벌써 2주가 지났다.해당 포스트를 작성하고 바로 다음날 1주일동안 호주여행을 갔었고 갔다오고 그동안 회사 업무 팔로업하랴 이거저거 하면서 시간이 많이 지나고 이제서야 글을 올린다. 요구사항우선 가상의 요구사항을 정해보자면 다음과 같다.유저가 상품을 구매하면 구매한 가격의 특정 비율이 포인트로 전환되어 쌓인다.포인트는 양의 정수이다.유저가 상품을 구매할때 포인트..
2024.05.16 -
트랜잭션 격리수준과 락 종류
환경: PostgreSQL목표: 트랜잭션 격리수준과 락 종류에 대해서 알아보고, 예제로 포인트 사용 기능에 대한 데이터베이스 설계와 플로우를 구상 해 보기.이번 포스트: 트랜잭션 격리수준과 락 종류에 대해서 알아보고다음 포스트: 예제로 포인트 사용 기능에 대한 데이터베이스 설계와 플로우를 구상 해 보기 들어가며PostgreSQL 환경에서 포인트 거래에 대한 동시성 문제를 해결하기위해 트랜잭션 격리수준에 대해 공부하고 예시 설계를 만들어 보고자 합니다.이를통해 실제상황에서 더 안정된 데이터베이스 설계 노하우와 버그를 더 잘 발견할 수 있길 기대합니다. 트랜잭션 격리수준PostgreSQL 는 다음 4가지 격리수준을 지원합니다.Read Uncommitted: 다른 트랜잭션에서 커밋되지 않은 변경사항을 볼 수..
2024.04.29 -
AWS EventBridge Scheduler 로 작업 예약하기
https://winbuntu.tistory.com/39 N 시간 후에 특정 로직을 수행하는 스케줄러주의 이 포스트를 쓰고난 후 AWS EventBridge 를 사용하면 더 간단하게 구현 가능하다는것을 확인했습니다. 🥲 들어가며 회사에서 다음과 같은 상황이 생겼다. A 라는 세션을 생성하고 N 시간을 기다winbuntu.tistory.com 이전글에서 N 시간 이후 특정 작업을 하기위해 CronJob, Redis expire event, AWS Batch, Step function + SQS 와 같은 구현 방법에 대한 아이디어를 생각하여 Step Function 과 SQS 를 이용해서 구현 해 보았다. 이번엔 AWS EventBridge Scheduler 를 이용해서 더 쉽게 작업을 예약 해 보려고 한..
2024.04.25 -
N 시간 후에 특정 로직을 수행하는 스케줄러
주의 이 포스트를 쓰고난 후 AWS EventBridge 를 사용하면 더 간단하게 구현 가능하다는것을 확인했습니다. 🥲 들어가며 회사에서 다음과 같은 상황이 생겼다. A 라는 세션을 생성하고 N 시간을 기다린 후 세션을 유지 할 것인지 확인하는 로직이 필요하다. CronJob 을 1분마다 실행하여 각각의 세션별로 시작시간, 기다릴 시간을 비교하여 세션을 유지 할 것인지 묻는 로직을 각각 실행한다. Redis 의 expire event 를 사용하여 특정 시간이 지난 후 event 를 listen 할 수 있도록 한다. AWS Batch 를 이용하여 작업을 스케줄링한다. Step function 으로 payload.N 만큼의 시간을 기다린 후 SQS 로 payload 를 전송한다. 위와같이 4가지의 방법을 생..
2024.04.23 -
Node.js 기반 백엔드 개발자의 Spring Boot 탐색
나는 Node.js로 백엔드 개발을 시작했다. 처음에는 Express를 사용하여 웹 서버를 만들었지만, 더 체계적인 서비스 로직 관리가 필요해졌고, 그 과정에서 Nest.js를 만나게 되었다. Nest.js의 컨셉이 매우 마음에 들어 이제는 내 주요 기술 스택으로 자리 잡았다. 백엔드 개발자에게 중요한 것은 사용하는 프로그래밍 언어 자체가 아니라, 사용자의 데이터를 어떻게 처리하고 부하를 어떻게 분산시키는지 등의 문제를 해결하는 "문제 해결 능력"이라고 생각해왔다. 하지만 프로덕션 레벨에서 자신 있게 로직을 구현할 때, 내가 활용할 수 있는 언어가 JavaScript와 TypeScript로 한정되어 있다는 점을 느끼게 되었다. 이런 제한을 극복하고자 나는 내 기술 스택을 확장하자는 생각이 들었고, 그 첫..
2024.04.22