서문 이번에 회사에서 서비스 중인 앱의 AWS 인프라 비용을 절감했다. 결과부터 말하면 월간 비용을 3000만원 -> 1700만원으로 43% 감소에 성공했고, 이를 위해 쿼리 개선, 캐싱 도입, 쓸모없는 리소스 삭제 등 여러 방법을 사용했다. 물론 위 액션들을 하기 위해 어떤 부분에서 비용이 많이나오고 있고 줄일 수 있는지 분석이 필요했다. 이번 글에서는 어떻게 분석했고 계획을 수립했는지 적어보겠다. 본문 비용 절감을 위해 아래 과정들이 필요했다. 1. 회사의 전체 인프라 비용 중, 목표로 하는 서비스가 차지하는 비용 파악 2. 파악 된 비용 중, 절감이 가능한 부분 판단 3. 절감 액션 수립 단계별로 겪었던 문제와 해결한 방법을 정리해본다. 1. 회사의 전체 인프라 비용 중, 목표로 하는 서비스가 차지..

뉴스피드 시스템이란? SNS에서 팔로우중인 다른 유저가 만든 여러 피드들을 발행된 순서대로 볼 수 있는 시스템을 의미한다. 여기서 피드는 다른 유저가 생성한 스토리 뿐 아니라, 광고, 유저 상태 등 넓은 범위의 컨텐츠를 포함한다. 우선, 뉴스 피드 시스템은 피드 발행과 뉴스 피드 생성으로 나눌 수 있다. 이 글에서는 뉴스피드 시스템의 핵심인 피드 발행 부분을 살펴본다. 피드 발행 유저가 피드를 포스팅하면 해당 데이터를 캐시와 데이터베이스에 기록한다. 이렇게 포스팅된 정보는 친구 목록의 뉴스 피드에 전송돼야 한다. 다음은 개략적인 피드 발행 시스템 설계안이다. 포스팅 저장 서비스 새 포스팅을 DB와 캐시에 저장하는 서비스 포스팅 전송 서비스 새 포스팅을 친구의 뉴스 피드에 푸시하는 서비스 알림 서비스 새 ..
서문 회사의 쌓여있는 기술 부채를 해결하던 중, 모든 API 응답을 Intercept 해서 transform하는 함수의 성능을 개선하는 작업을 맡게 되었다. 응답 속도가 느린 특정 API가 평균 473ms, transform은 251ms 시간을 잡아먹고 있어, 고객 경험에 불편함을 주고있었다. 또한, 응답하는 데이터가 커질수록 더욱 응답속도가 느려질 것으로 보여 시급히 해결해야하는 기술 부채였다. 개선한 결과부터 공개하면 P99 API 기준, 평균 응답속도 933.5ms 에서 495.3ms로 188% 정도 개선되었다. 이제 개선 과정에 대해 알아보자. 분석 서문에 적은 모든 API 응답을 Intercept 해서 transform하는 함수의 이름을 global interceptor라고 정의하겠다. glob..
nestJS를 써보면서 느낀점을 적어보자. 기존에 express를 사용했으므로, 자연스럽게 express와 비교해 느낀점이 많다. 토이프로젝트를 위한 속성 공부를 했고, 실무에서 사용해보지 않았기에 잘 모르거나 잘못 느낀점이 있을 수 있다. 먼저 느낀점을 나열하고 각자 상세 설명을 하겠다. 느낀점 1. 아키텍쳐 고민을 안할 수 있다. 2. 의존성 주입, 데코레이터 3. 클래스 기반 4. 작은 크기 프로젝트에 적합한가? 1. 아키텍쳐 고민을 안할 수 있다. 공식문서를 보면, nestJS의 철학 자체가 아키텍쳐에 대한 고민을 효과적으로 해결하기 위함이라고 적혀있다. 직접 사용해보면 이 철학을 몸소 체험할 수 있다. express를 사용해 개발하다보면 의 경우 가볍고 기본 기능들을 빠르게 구현하는데 목적이라는..
계획한 2주가 지나서 중간 점검을 진행한다. 개발 완료 1. 뉴스사 5개의 최신 뉴스기사 타이틀을 스크래핑 - 배치 작업으로 6시간마다 스크래핑 - 이전에 스크래핑 한 기사는 무시 2. 1주일치 뉴스 타이틀의 키워드 추출 - KR-WordRank 오픈소스(python)를 이용해 추출 - 10번 이상 반복된 단어들만 타이틀로 설정 3. 추출 키워드 Rest API로 호출 진행 예정 1. test code 2. logger 3. 코드 곳곳의 TODO 해결 느낀점 구정때 열심히 개발해야지 하고 노트북 들고 고향갔으나 단 한번도 노트북을 켜지 않았다... 가방에서 꺼내지도 않았다.. 집에서 하자 개발은... 이번 토이프로젝트를 진행하며 새로운 프레임워크인 nestJS를 써봤고, express랑 다른점을 많이 느..
CS 공부를 시작했다. 공룡책을 살까 하다가 가볍게 먼저 훑어서 기억을 되살리고 더 깊게 공부하자라는 생각으로 가볍게 다루는 책을 찾아보았다. 교보문고를 가서 보니 작년에 발매된 따끈따끈한 책이 IT 코너에 바로 있었고 너무 가볍지도 깊지도 않게 내용설명이 되어있는거 같아서 바로 구매해서 돌아왔다. 책 구성은 컴퓨터구조 250페이지, 운영체제 250페이지 정도로 구성되어있어서 아예 지식이 없는 분들이나 나처럼 과거에 전공수업 들었던 내용을 다시 되살리기 위해서 가볍게 훑기 좋게 구성되어있다. 취업이나 이직 준비하는 개발자분들은 한권 구매해서 다 읽어보면 좋을 것 같다. 혼자 공부하는 컴퓨터 구조+운영체제 | 강민철 - 교보문고 혼자 공부하는 컴퓨터 구조+운영체제 | - 혼자 해도 충분합니다! 1:1 과외..
개요 nestJS와 TS 공부를 결정하고, 기왕이면 토이프로젝트로 진행해서 3년이상 멈춰있는 깃허브 활성화를 하기로 결정했다. 프로젝트 주제로는 IT 뉴스 사이트들의 기사 제목을 수집해 키워드를 추출하여, 실시간 트랜드 파악을 위한 크롤러로 하기로 결정했다. https://brunch.co.kr/@minimapworld/42 #5.현직 IT담당자가 추천하는 국내 IT미디어 11선 미디어와 블로거의 경계가 모호해진 시점에서 | IT를 다루는 국내 미디어들은 많다. 수많은 미디어에서 11개를 선정한다는 것 힘든일이다. 3가지 기준을 가지고 선별해 보았다. 1. 타매체 대비 독 brunch.co.kr 위 글에서 안내해주는 11개 미디어 중, 글이 많이 올라오는 뉴스 사이트 5개를 대상으로 결정했다. 블로터, ..
서문 이전 글에서 log forwarder를 마무리했다. 이번 글은 log forwarder가 포워딩한 데이터를 받아 실제로 DB or S3와 같은 오브젝트 스토리지에 저장하는 역할을 수행하는 log aggregator 구현한 경험을 기록한다. 본문 aggregator config aggregator의 config 파일을 살펴보겠다. @type forward port 24224 @type json # Mysql @type mysql_bulk host ${host} port ${port} database ${db} username ${mysqlUserName} password ${mysqlUserPassword} column_names id, datetime table ${tableName} flush_i..
- Total
- Today
- Yesterday
- reverse proxy
- libpaper-utils
- nestjs
- forwarder
- tojson
- split_array
- fluent-plugin-mysql
- log forwarder
- nginx api cache
- log aggregator
- uuid 중복
- rewrite_tag_filter
- 뉴스피드 시스템
- 대규모 시스템 설계 기초
- default-libmysqlclient-dev
- mms
- rewrite-tag-filter
- fluentd-plugin-split-array
- uuid v1
- 팝빌
- reverse proxy cache
- bigint to number
- 혼자 공부하는 컴퓨터구조 + 운영체제
- dockerfile
- log
- fluentd
- popbill
- nginx cache
- fluent-plugin-s3
- mms 연동
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |