SQS 큐의 성질 파악하기

Today I Learned 날짜 2025년 1월 31일 금요일 내용 SQS 큐의 중복 판단 기준 Amazon SQS에서 FIFO Queue에선 메시지의 중복 여부를 확인하는 방식이 2가지가 있다. 설정 방법 동작 방식 사용 예시 자동 (Content-Based Deduplication) 메시지 본문의 SHA-256 해시 값이 Deduplication ID로 설정됨 메시지 본문이 같으면 5분 이내에 중복 제거됨 사용자 지정 (MessageDeduplicationId) 사용자가 직접 중복 제거 ID를 설정할 수 있음 메시지가 같아도 다른 ID를 부여하면 별도 메시지로 처리됨 카페24 API 웹훅은 변경된 데이터에 대한 간략한 정보만 들어온다. 웹훅에 관한 필요한 데이터만 처리해서 메시지를 작성하고 큐에 집어 넣는다. 따라서 별개의 웹훅이라도 본문이 같을 수 있다. 예를 들어 5분 간격으로 같은 스토어의 같은 상품 정보가 변경되었다고 하더라도 웹훅 정보, 샵 아이디, 몰 아이디, 상품 아이디 정도만 메시지에 담기므로 메시지가 동일해 보일 수 있다는 의미다. 이럴 경우 중복으로 처리되면 안되기 때문에 사용자 지정으로 설정해주었다. ...

2025년 1월 31일 · 3 분 · 배준수

Step Functions에서 분기 처리하기

Today I Learned 날짜 2025년 1월 21일 화요일 내용 Step Functions에서 Choice로 분기처리하기 웹훅 개선 작업을 진행중이다. 지난주에 말했듯 Step Functions로 계획중인데 오늘 헤매던 곳을 뚫어냈다. 기존과 마찬가지로 웹훅이 서버로 전송되면 SQS 큐에 메시지를 담는다. 매핑된 람다는 메시지가 하나 도착하면 꺼내서 Step Functions에서 정의한 상태 머신을 호출해서 로직을 진행한다. 이 상태머신은 이 메시지의 종류(주문, 혜택, 고객 등)에 따라 알맞은 람다를 호출해야 한다. 그림으로 보자면 이런 형태다. 저 노드 하나하나가 state라는 개념이다. 저기서 저 DetermineTopic이 Choice State인데, 정의한 조건에 따라 알맞은 람다를 호출해줘야 한다. 그 상단에서 최초로 호출되는 웹훅 데이터 디코딩 람다부터 살펴보자 ...

2025년 1월 21일 · 3 분 · 배준수

람다에 layer 추가하기

Today I Learned 날짜 2025년 1월 20일 월요일 내용 람다에 계층 추가하기 람다는 서버 없이 간단한 함수를 작성하여 실행할 수 있는 기능을 제공한다. 따라서 여기에는 기본 내장 함수들만 제공된다. 만약 람다에서 어디론가 http 요청을 보내기 위해 requests 가 필요하다면 람다에 등록하는 ZIP 파일에 해당 패키지를 추가해주어야 한다. 웹훅 개선에 람다를 이용할 계획이고, 각 람다는 다루는 웹훅 별로 나눠질 예정이다. 주문, 고객, 상품 등 다루는 데이터에 따라 여러 람다를 만들거다. 각 람다를 정의할 때마다 requests 라이브러리를 설치해주는 것은 번거롭다. 이런 일이 반복되면 람다 자체도 용량이 커진다. 모두가 쓰는 공통적인 라이브러리를 추가해주는 기능이 계층(layer)다. ...

2025년 1월 20일 · 2 분 · 배준수

pre-signed url 이 0 Unknown error를 반환할 때

Today I Learned 날짜 2024년 12월 13일 금요일 내용 pre-signed url이 작동하지 않는 이유 현재 티켓페이지에서 사용자가 추가한 이미지와 파일을 저장하는 방식은 그다지 좋지 않다. 서버에게 티켓의 이미지와 파일을 S3에 저장해달라고 요청을 보냄 서버는 저장 후 그 링크를 반환함 반환받은 링크를 티켓 데이터에 추가하여 티켓 데이터 생성 요청을 보냄 이 방식이다. 만약 클라이언트가 S3에 저장할 수 있다면 굳이 서버에게 파일을 보내지 않아도 된다. 이를 위해 pre-signed-url을 보내도록만 요청을 변경해야 한다. 이 URL은 설정한 시간만큼만 유효한 URL이다. 서버에게 어떤 버킷 내 어떤 키에 생성해야 할지 알려주고 url을 받아왔으나 생성이 되지 않는다. 클라이언트의 요청에 0 Unknown Error만 나와 정확한 원인도 모른다… 구글링을 한참 해보니 pre-signed url을 생성하기 위해 boto3 클라이언트를 초기화할 때 리전을 입력해보라고 한다. ...

2024년 12월 13일 · 1 분 · 배준수

ECS Task를 고정된 IP로 실행하기

Today I Learned 날짜 2024년 12월 6일 금요일 내용 ECS Task의 IP 고정하기 네이버 커머스 솔루션에서 앱을 등록할 때, IP를 등록해야 한다. 네이버 쪽 API를 사용할때는 등록된 API만 사용해야 한다. 네이버쪽에서 허용되지 않은 IP로 요청이 왔었고, 이게 지속되면 막아버린다고 한다. 곰곰히 생각해봤을 때, 네이버 API에 접근하는 곳은 3가지이다. 서버, 크론 작업이 돌아가는 ECS Task, 서버의 데이터베이스 마이그레이션이나 커맨드를 돌릴 떄 사용하는 EC2다. 서버는 진작에 등록해줬기 떄문에 문제가 없고, EC2는 이참에 등록해줬다. 그런데 네이버쪽에서 보내준 IP는 EC2 것과는 달랐다. 인스턴스를 바꾸거나 한 일이 없으니 IP도 바뀌지 않았기 떄문에.. 아마 ECS Task의 IP였나보다. 그렇다면 크론작업이 돌아갈 때만 생성되는 Task의 IP가 무엇일 줄 알고 미리 네이버에 등록할 수 있을까.. ...

2024년 12월 6일 · 1 분 · 배준수

AWS 람다함수의 재요청 방지

Today I Learned 날짜 2024년 7월 25일 목요일 내용 람다의 재요청 방지 데이터 임포트를 요청하면 boto3로 AWS Lambda를 호출하도록 구현했다. 맨 처음에는 RequestResponse로 보냈었다. 그런데 디버깅 과정에서 요청이 실패할때마다 1분 간격으로 재시도가 발생해서, 데이터가 꼬이고 쓸데없는 로그가 많이 남아 힘들었다. 그래서 비동기 호출인 Event로 바꾸었다. 근데 비동기 함수라 로직이 원하는대로 실행되지 않았다.. 알아보니 RequestResponse 호출을 했을 때 요청이 실패하면 AWS에서 자동으로 3회 정도 재시도를 한다고 한다. Lambda 클라이언트를 설정할 때 config를 설정해서 이를 방지 할 수 있었다. ...

2024년 7월 25일 · 1 분 · 배준수

AWS VPC Subnet

Today I Learned 날짜 2024년 7월 22일 월요일 내용 Public Subnet VS Private Subnet 지난 주 금요일부터 계속 처리하던 람다 함수를 계속 만졌다. 웬걸? 람다함수는 구글 드라이브에 스프레드 시트를 생성하는 것부터 실패하고 있었다. 아예 요청 자체가 가질 못하고 있었다. 요청의 문제라기보단 통신의 문제였다. 람다함수가 외부 인터넷과 통신을 못하고 있는게 분명했다. AWS Lambda 함수가 VPC 내의 퍼블릭 서브넷에 배치될 때, 자동으로 퍼블릭 IP를 할당받지는 않습니다. Lambda 함수는 ENI(Elastic Network Interface)를 사용하여 VPC 내에서 네트워크 통신을 수행합니다. 이러한 ENI는 퍼블릭 IP를 갖지 않기 때문에 퍼블릭 서브넷에 배치되어도 인터넷에 직접 접근할 수 없습니다. ...

2024년 7월 22일 · 3 분 · 배준수

구글 스프레드시트에 기존 데이터 업데이트하기

Today I Learned 날짜 2024년 2월 1일 목요일 내용 스프린트 결과가 배포됐다. 다행히 큰 빵꾸는 없었다. 많은 유저가 몰려왔으면 좋겠다. 구글 스프레드시트에 데이터 추가하기 새로 만든 기능에 대한 KPI 데이터를 구글 스프레드시트에 추가하는 태스크를 맡았다. 이전에, 작동이 멈췄던 커맨드를 다시 돌리는 작업을 했었는데 이와 비슷할거라고 생각해서 별로 어렵지 않겠다 싶었다. 약간의 차이점이 있었는데 이 부분을 너무 쉽게 생각했다. 기존에는 매일매일 새로운 행에 데이터를 추가했지만, 이번에는 기존 데이터에 덮어써야 했다. 1개의 샵 당 1개의 데이터를 가지게 되며, 이미 데이터가 존재한다면 새로 행을 추가하지 않고 수정해야 한다. ...

2024년 2월 1일 · 3 분 · 배준수

AWS 백서 : AWS 서비스 알아보기

AWS 이 글은 누군가 AWS를 다룰 때 조금이나마 덜 고생하길 바라는 마음으로 작성하며, 부정확한 정보에 대한 지적, 정정을 환영하고 자신이 아는 바가 있다면 얼마든지 추가해주길 바랍니다. 앞으로 지속적으로 추가할 예정입니다. What is AWS? 아마존 웹 서비스(AWS, Amazon Web Service)는 아마존닷컴의 클라우드 컴퓨팅 사업부이다. 아마존 웹 서비스는 다른 웹 사이트나 클라이언트측 응용 프로그램에 대해 온라인 서비스를 제공하고 있다. Region 아마존은 클라우드 컴퓨팅을 제공하기 때문에, 데이터센터를 곳곳에 보유하고 있다. 주 고객층을 생각해 물리적으로 가까운 리전을 선택한다. ...

2024년 1월 31일 · 6 분 · 배준수

AWS ECS와 S3 버킷의 통신 해결

Today I Learned 날짜 2024년 1월 15일 월요일 내용 드으으으으디어 ECS를 해결했다! ECS 정복 직전 너무 자주 말한듯 하지만.. ECS 클러스터가 S3 버킷에서 환경변수를 가져오지 못하고 있었다. 질문 I am encountering an issue with my ECS service where tasks are consistently failing during deployment. The specific error message I receive is as follows: 1 ResourceInitializationError: failed to download env files: file download command: non empty error stream: service call has been retried 5 time(s): RequestCanceled: request context canceled caused by: context deadline exceeded ECS tasks are configured to download environment files from an S3 bucket. My ECS service is in the Seoul region (ap-northeast-2), and the S3 bucket is in the US East (Ohio) region (us-east-2). The S3 bucket and objects are not set to public access. I suspect that the issue might be related to timeout settings, as the error indicates that the request is canceled after multiple retries due to a context deadline being exceeded. I have tried setting the startTimeout and stopTimeout in the task definition JSON to 120 seconds, but this has not resolved the issue. ...

2024년 1월 15일 · 5 분 · 배준수