본문 바로가기
320x100
728x90

API4

외부 API호출하는 서버 개발시 주의할 점! [File Descriptor, Too Many Open Files] 오늘은 솔루션을 운영하다가 발생한 문제와 그 해결법을 공유하려고 한다. 일단 전제를 설명하자면 현재 내가 재직 중인 회사는 B2B를 하는 회사고 도메인 특성상 많은 트래픽을 받을 일이 없었다. 그래서 여느떄와 다름없이 비즈니스 로직 개발에 집중을 했고, 늘 같은 개발 -> 테스트 -> 배포 -> 모니터링을 했다. 그런데 내가 개발한 이 솔루션을 한 회사가 사용하기로 했는데, 이 솔루션은 서버에서 외부 API를 호출하는 로직이 포함되어 있다. 그리고, 그 회사는 수많은 회사들과 게약으로 엄청난 트래픽(내 경험 기준에선...)을 가진 업체였다. 업체가 라이브하는 날을 알려줘서 모니터링을 하고 있었는데, 갑자기 서버가 엄청난 수로 오토스케일링 되는 것을 확인했다. 처음에 2대였던 서버는 29대까지 늘었고, 분.. 2023. 12. 14.
MySQL의 Full-text index를 이용하여 검색 API 성능 개선하기 사내에서 테스트 커뮤니티 매체를 만들고 있는데, 테스트성으로 만든 매체다보니, 커뮤니티의 게시글을 검색하는 API에서 Like '%검색어%' 절로 간단하게 작성해 놨다. 그러다 보니 트래픽이 분당 500~700 사이었는데도 불구하고 RDS의 cpu가 항상 95~98%로 상당히 많은 부하가 있었다. 어찌 보면 당연한 결과다. like절은 인덱스를 타지 않고 기본적으로 풀스캔으로 동작을 하게 된다. 데이터는 약 16만 건의 row가 있었다. EXPLAIN SELECT * FROM contents c WHERE title LIKE '%검색어%'; explain으로 쿼리 전략을 살펴보면 모든 row를 스캔하고 그 대상은 약 13만 건의 데이터임을 알 수 있다. 사용자가 실제로 분당 30~40건의 검색 API를 .. 2023. 1. 16.
AWS Lambda와 API Gateway 연결하기 우리 회사에서 사용하는 서비스에 백엔드 서버에 몰리는 트래픽을 일부 분리하기 위해 람다로 일부를 분리했다. 이를 적용하면서 사용했던 방법을 정리한다. 일단 개발 환경은 이렇다. AWS Lambda (node.js 14.x) Elastic Cache(Memcache) API Gateway 이렇게 사용했고, 이 3가지는 다 같은 VPC에 속해야 하며, 람다를 제외하곤 생성 과정을 생략한다. 1. 람다 생성 람다 페이지에 들어가서 함수 생성을 클릭하면 함수 생성을 클릭한다. 간단하게 작성할 것이기에, 위와 같이 함수를 생성했다. 현재 계정에 람다 함수 삭제 권한이 없어 이미 생성된 람다로 예제를 대체함. 람다 함수가 잘 생성됐다면, 상단에 간단하게 테스트를 누르고 이후 등장하는 팝업창에 확인을 누른다. 이후 .. 2022. 2. 24.
RESTful API 요새 국비지원 교육과정을 마치고 구직활동을 하면서 RESTful API 경험자 혹은 설계 경험 등을 우대사항으로 내놓는 기업이 상당히 많았다. 나 또한 REST라는 말은 많이 들어봤지만 막상, 설명을 할 수 없을 정도의 수준이어서 오늘 본격적으로 찾아보기로 했다. REST의 탄생 배경 1991년 팀 버너스 리에 의해 WEB이 탄생되고 인터넷에서 정보 공유 방법을 고민하던 팀 버너스 리는 HTML의 표현방식, URI를 이용한 식별자 , HTTP 프로토콜을 이용한 전송으로 답을 내렸다. 그리고 로이 필딩이라는 대학원생이 HTTP1.0 버전에 참여하면서 WEB의 규약은 지키면서 HTTP를 발전시킬 수 있을까 고민하다가 나온 것이 REST의 시작이다. 2000년 로이 필딩이 MS에서 발표한 박사 논문 제목이 ".. 2020. 8. 17.
300x250
320x100