[Kafka] Kafka Producer Basic
·
기타
Kafka Producer란?프로듀서는 새로운 메시지를 생성해서 카프카 브로커로 보내는 클라이언트 API이다.프로듀서 기본 설정bootstrap.servers: 프로듀서가 사용할 브로커의 host:port 목록key.serializer: 레코드의 키 값을 직렬화하기 위해 사용하는 시리얼라이저 클래스의 이름value.serialize: 레코드의 밸류값을 직렬화하기 위해 사용하는 시리얼라이저 클래스의 이름public class Main { public static void main(String[] args) { Properties prop = new Properties(); prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localho..
GraphQL DataLoader로 N + 1문제 해결하기
·
기타
목표 GraphQL을 사용하다보면 쉽게 겪을 수 있는 문제인 N + 1 문제와, DataLoader라는 기술로 어떻게 해결할 수 있는지 알아보자.N + 1 문제N + 1 문제란 무엇일까? 예시로 알아보자. 상품(Product)에는 리뷰(Review)들이 존재한다. 그래서 개발자는 product쿼리 안에 reviews를 추가하고 리졸버에 reviews를 가져오는 로직을 추가할 수 있다.query GetProductDetail($productId: ID!) { product(id: $productId) { id title price reviews { id content } }}위의 쿼리를 실행하면 DB에서는 2번의 SELECT가 수행된다.Product(id: ..
뮤텍스와 세마포어
·
기타
운영체제에서는 올바른 작업 수행을 위해 프로세스 실행 순서, 상호 배제를 하여 프로세스를 동기화 해줘야한다.프로세스 동기화 방법 중에 대표적인 것으로 뮤텍스 락과 세마포어가 있다.뮤텍스뮤텍스 락(mutex lock)은 하나의 공유자원에 하나의 스레드 or 프로세스만 접근가능한 동기화 기법이다.뮤텍스 락은 주로 탈의실 or 화장실에 비유하곤 한다.A가 탈의실을 사용하기 위해 key를 들고 탈의실을 이용한다.B가 탈의실을 사용하기 위해 탈의실 앞에 왔지만 key가 없기때문에 대기한다. A가 탈의실을 사용하고 나와서 key를 반납한다.B는 key를 들고 탈의실을 이용한다.여기서 탈의실은 공유자원이고 사람 A, B는 스레드 or 프로세스라고 볼 수 있다. 여기서 핵심은 key를 사용해서 자원에 접근한다는 것이며..
Redis maxmemory와 eviction정책
·
기타
어느날, 회사 서비스에 장애가 발생했다. 고객에게 나가야할 알림톡이 나가지 않았고 그 외 몇몇 기능이 제대로 작동하지 않았다. 이유를 찾아보니 celery에서 task가 동시에 엄청나게 많이쌓여 Redis에서 OOM에러가 발생한걸 확인할 수 있었다. 일단 그 때는 팀에서 임시방편으로 메모리를 늘려서 해결했지만 평소에 redis메모리를 전혀 모니터링하지 못하고 있었던 점, 메모리 관리 정책에 대해 아는게 없어 부족함을 느꼈고, 이렇게 글로 정리하게 되었다.Redis의 메모리Redis는 In-memory DB이므로 당연히 물리적으로 사용가능한 메모리 이상 사용할 수 없다. 그러므로 운영할때 OOM 에러를 만날 수 있으므로 주의해야한다.maxmemory redis는 내부적으로 사용가능한 메모리를 설정할 수 있..
Lambda@Edge + Typscript로 이미지 리사이징 적용하기
·
기타
서비스를 운영하다보면 이미지를 어떻게 처리할지 고민하게 된다. 보통은 S3 + CloudFront 조합으로 많이 구성하게 된다.모든 이미지를 원본 이미지를 사용해야만 하는 서비스이면 괜찮겠지만 보통은 원본 사이즈가 필요없는 경우가 거의 대부분이다.이미지 프로세싱을 구글에 검색하면 다양한 방법이 나오는데 요즘은 Lambda@Edge를 사용하여 프로세싱된 이미지를 보여주는 방식을 많이 사용한다.Lambda로 이미지 프로세싱S3 버킷에 이미지 업로드를 트리거로 람다 함수를 실행시켜 프로세싱된 이미지를 S3에 저장하는 방식이다.이 방법의 장점은 아래와 같다.기존 어플리케이션 코드의 수정 최소화S3 버킷에 오브젝트를 업로드할때만 실행되므로 비용 부담이 적음하지만 직접 개발해보니 아래와 같은 문제점이 있었다.같은 ..
계층형 모델 테이블 설계(인접 모델, MPTT)
·
기타
카테고리, 부서 같이 계층형 구조로 표현되어야 하는 모델을 계층형 모델이라고 한다.계층형 모델을 표현하는 2가지 방법을 공부해보았다.인접 모델(Adjacency List Model)가장 간단하게는 이렇게 표현할 수 있다. 자식 노드에서 부모를 알고 있는것이다.CREATE TABLE category ( id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, level integer not null, parent_id integer, foreign key (parent_id) references category(id));  자식 노드인 니트는 상의의 id를 알고 있고, 상의는 부모 노드 옷의 id를 알고 있다.니트의 계층 구조는 옷 > 상의 > 니..
GraphQL Federation할때 null을 주의하자
·
기타
22년의 평화로운 어느날.. 😂 회사에서 상품 조회가 안된다는 이슈 알람이 지속적으로 발생했다. CloudWatch로 로그를 확인해보니 특정 페이지에서 graphql 응답이 data: null로 오고 있었다. 이런 경우는 처음이어서 여러가지 가설을 세워보았다. 1. graphql federation 할때 문제가 생겼을 것이다. 2. 데이터가 너무 많아서 타임아웃이 발생했을 것이다. 3. 쿼리가 잘못된 것이다. 일단 2, 3번은 가능성이 낮다. 타임아웃이 발생했다면 다른 오류 메시지가 발생했을것이고, 쿼리가 잘못된것이었다면 다른 page의 상품을 불러오는것도 똑같이 문제가 됐어야 한다. federation 문제를 제일 유력한 용의자로 생각하고 가설증명을 시작하였다. GraphQL Federation이란? ..
SQLD 합격 후기
·
기타
11월 18일 SQLD 시험을 보게되었다. 이전부터 관심있었던 시험이지만 이런저런 이유를 핑계로(사실 귀찮아서) 미루고 있다가 올해 마지막으로 하나 남았길래 용기를내서 응시하게 되었다. 우선 나는 어디서 SQL을 배운적은 없고 개발자로 일하면서 SQL 기초책 한권, 친절한 SQL 튜닝 앞부분 조금 읽고 실무에서 업무하는데는 문제없게 생존형(?)으로 할 수 있는 수준이다. SQLD 접수 https://www.dataq.or.kr/www/accept/schedule.do 데이터자격시험 데이터아키텍처 준전문가 제54회 - 3.20~24 4.7 4.23(일) 5.12~16 5.19 - www.dataq.or.kr 여기서 시험 일정을 확인하고 접수기간에 맞춰 접수하면된다. 참고로 응시료는 5만원이다.(토익보다 비..
Serverless 배포할때 serverless update_rollback_failed state and can not be updated 에러가 나는 경우
·
기타
오랜만에 사이드 프로젝트 서버를 serverless를 배포하다 serverless update_rollback_failed state and can not be updated 라는 에러로 배포가 되지 않았다. CloudFormation 콘솔을 확인해보니 마지막 상태가 UPDATE_ROLLBACK_FAILED 상태였는데 이 상태이면 배포를 못하는 것이다. 처음엔 단순히 상태만 갱신해주면 되겠지 싶어서 콘솔에서 [스택 작업 > 업데이트 롤백 계속]을 실행해서 해결하려 해주었으나, 똑같은 결과가 나왔다. 아래 메시지를 못 보고..🥲 나의 경우에는 아래 UPDATE_FAILED에 있는 에러메시지 처럼 람다 실행환경이 이제 지원을 안하는 버전이라서(node12.x) 아예 상태 갱신조차 안되는 상태였다. 보통 se..
블로그 시작
·
기타
20191202 블로그 시작
togeepizza
'기타' 카테고리의 글 목록