Engineering 4

[개발 일지] DB부하 줄이기(알람 서비스)

기존 블로그에서 옮겨온 글입니다. (21/7/15 작성) 이번 글에서는 간단하게 TMM DB부하의 가장 큰 원인이었던 알람 서비스를 어떻게 개선했는지 적어보려고 합니다. 이번 업무에는 42서울의 이호준 멘토님께서 많은 도움 주셨습니다. 일반적인 실시간 알람 서비스 구현 방법 TMM의 알람 서비스가 어떻게 구현되어 있는지 멘토님께 말씀드리자 먼저 일반적으로 어떻게 실시간 알람 서비스가 구현되는지 알려주셨습니다. 일반적으로 실시간 알람 서비스는 노티 서버를 따로 두고 큐에 알람을 넣어놓고 전송하는 방식으로 동작한다고 말씀해주셨습니다. 하지만 이 방법의 경우 추가로 서버를 구축하는 등 작업이 많이 필요하기에 TMM에 적합하지 않다고 말씀해주셨고 DB를 이용하는 방법을 개선할 수 있는 팁을 주셨습니다. 부하를 ..

[개발 일지] 검색서버 구축기

기존 블로그에서 옮겨온 글입니다. (21/7/15 작성) 크래프타에서 맡은 두 번째 굵직한 업무는 바로 검색 서버를 구축하는 것이었습니다. TMM에서는 기존에도 검색 서비스를 제공하고 있었습니다. 하지만 mysql의 like쿼리를 사용하여 정확하게 일치하는 단어가 아니면 원하는 내용을 찾기 어렵다는 단점이 있었습니다. 대표님께서는 이를 보완하여 영어->한국어 변환이나 초성 검색과 같은 기능을 추가로 제공하면 좋겠다고 말씀해주셔서 관련한 내용을 알아보기 시작했습니다. 처음에 대표님께서 제안하신 sphinx와 일반적으로 많이 사용하는 Elastic Search 둘을 놓고 고민하다가 아무래도 레퍼런스가 더 많은 후자를 선택하게 되었습니다. 어쩌다보니 ELK 검색 서버의 핵심은 DB에 있는 내용을 자소, ngr..

[개발 일지] 간헐적 502에러 해결기

기존 블로그에서 옮겨온 글입니다. (21/7/15 작성) 처음부터 주어진 과제 크래프타에서 일하게 되면서 TMM의 개선점을 분석해 오라는 요청을 받게 되었습니다. 이것저것 둘러보면서 사이트를 분석하던 중 불특정한 주기로 502에러가 나타나는 것을 확인할 수 있었습니다. 개선점 분석 내용을 발표하면서 이에 대해 말씀드렸더니 대표님께서 사실 꽤 오래 전부터 해결하려고 했으나 원인을 밝히지 못했다고 말씀해주셨습니다. 그렇게 첫 날부터 저의 to-do list에 502해결하기가 자리잡게 되었습니다. 알 수 없는 자신감 왠지 모르게 해결할 수 있을 것 같다는 자신감을 가지고 apache 로그부터 분석하기 시작했습니다. 그런데 특이하게도 apache access log에서 response code를 살펴본 결과 5..

enum 대체하기 (부제 : enum은 나쁘다 적어도 TS에서는)

enum을 대체해야하는 이유 1. enum은 어렵게 트랜스파일된다 typescript enum Player { Rudy, David, Jay }javascript (transpiled) "use strict"; var Player; (function (Player) { Player[Player["Rudy"] = 0] = "Rudy"; Player[Player["David"] = 1] = "David"; Player[Player["Jay"] = 2] = "Jay"; })(Player || (Player = {}));문제점 디버깅이 어렵다 tree-shaking이 불가능하다 enum은 JS에서 즉시함수로 트랜스파일된다 번들러는 이 코드가 사용되는지 알 수가 없다 냅다 번들에 포함 -> 뚱뚱한 번들 완성 2...

Engineering/TIL 2024.01.14