320x100
728x90
리스트 예시: 게시물이 존재할 경우 3건을 노출합니다.
- 외부 API호출하는 서버 개발시 주의할 점! [File Descriptor, Too Many Open Files] 오늘은 솔루션을 운영하다가 발생한 문제와 그 해결법을 공유하려고 한다. 일단 전제를 설명하자면 현재 내가 재직 중인 회사는 B2B를 하는 회사고 도메인 특성상 많은 트래픽을 받을 일이 없었다. 그래서 여느떄와 다름없이 비즈니스 로직 개발에 집중을 했고, 늘 같은 개발 -> 테스트 -> 배포 -> 모니터링을 했다. 그런데 내가 개발한 이 솔루션을 한 회사가 사용하기로 했는데, 이 솔루션은 서버에서 외부 API를 호출하는 로직이 포함되어 있다. 그리고, 그 회사는 수많은 회사들과 게약으로 엄청난 트래픽(내 경험 기준에선...)을 가진 업체였다. 업체가 라이브하는 날을 알려줘서 모니터링을 하고 있었는데, 갑자기 서버가 엄청난 수로 오토스케일링 되는 것을 확인했다. 처음에 2대였던 서버는 29대까지 늘었고, 분.. 2023.12.14
- AWS]ECS 사용시 로그 비용관련 주의점 ECS를 사용하면서 불필요한 로그를 줄이고 가능하다면 ERROR, WARN로그만 켜놓자. 우리 회사는 ECS Fargate를 굉장히 자주 사용한다. 아무래도 서버리스라는 장점이 있어서 관리의 편의성 때문인데, ECS 서비스를 생성할 때 무의식적으로 로그 설정을 켜놨다. 문제개 생겼을 때 CloudWatch에서 보기 위해서다. 일단 ECS는 TaskDefinition이라는 작업에 정의된 대로 컨테이너가 실행된다. 여기서 작업을 정의할 때, 기본설정으로 대부분을 설정하다 보니 기본적으로 로그 수집 사용에 체크가 되어있었다. 기본으로 로그 수집 사용이 체크되어 있다. 물론 로그 사용은 필요하지만 불필요한 INFO 로그는 안 봐도 된다. 그러다 인프라 관련 비용을 보던 도중, 어느 순간 매일 $10씩 추가적으로.. 2023.09.17
- LeetCode Valid Anagram https://leetcode.com/problems/valid-anagram/description/ Valid Anagram - LeetCode Can you solve this real interview question? Valid Anagram - Given two strings s and t, return true if t is an anagram of s, and false otherwise. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using leetcode.com 이 문제는 애너그램에 관한 문제다. 애너그램이란 특정 문자를 재배치했을 때, 인풋으.. 2023.07.28
- 월급이 마약이라는 사람들에 대한 견해 요즘 유튜브 혹은 자기 계발 관련 미디어를 접하다 보면 월급이라는 건 마약이고 그거에 중독돼서 현실에 안주하게 된다 등등 정기적으로 돈 받으면서 일하는 직장인들을 폄하하거나 그러지 말라는 말들을 굉장히 많이 볼 수 있다. 처음에는 나도 "그런가?"라는 생각을 해봤지만 금세 그런 게 아니라는 반례를 생각할 수 있었다. 월급은 마약인가 과연 월급은 마약일까. 사람의 가치관에 따라 그럴 수 있고 아닐 수도 있다. 위 영상을 보면 마약에 대해 어느 정도 위험한지 알 수 있다. (링크) 물론 "월급은 마약"이라는 문장의 뉘앙스는 "위험하다"의 뉘앙스보다 "안주하게 된다"의 뉘앙스가 더 큰 것을 알지만 내가 하려는 말은 저 영상과 관계가 있다. 마약을 하면 도파민을 대체하는 극도의 행복감에 생기게 된다고 한다. 그.. 2023.07.21
- 내 코드 퀄리티를 올리는 개인적인 관점 연차가 찰 수록 회사에서 내가 작성했던 코드들의 수가 많아졌다. 그렇다 보니 그 코드를 인수인계받은 다른 팀원이 "이게 어떻게 동작하는 건가요?" 혹은 "이렇게 짠 이유가 뭔가요?"라는 질문을 가끔 듣는다. 그런데 실상 코드를 작성한 지 한 달만 지나도 내가 작성했던 코드의 의도를 까먹는 경우가 굉장히 많다. 이런 경우가 반복되다 보니 코드를 작성하면서 나만의 검증방법이 생겼다. 이 방법은 다수가 좋다고 해서 검증된 것이 아닌 그저 내가 코드를 작성할 때 나의 코드 퀄리티를 측정하는 방법입니다. (뇌피셜 주의...) 그냥 평범한 한 3년 차 개발자는 이런 생각하면서 코드 짜는구나... 하고 봐주시면 감사하겠습니다. 리팩토링은 코드를 작성하면서 한다 신입 때는 사실 코드를 다 작성하고 테스트 - 빌드 - .. 2023.07.21
- AWS]ECS Fargate X86에서 ARM으로 회사에서 EC2보다는 ECS를 더 사용하기로 했기 때문에 RI 준비를 하면서 기존에 EC2를 ECS로 전환하는 작업을 진행했다. 그중에서도 X86 아키텍처와 ARM 아키텍처 중, 선택지가 있었는데 아무래도 비용이나 성능면에서나 더 좋은 ARM 아키텍처 기반의 환경을 선택하기로 했다. Savings Plan을 적용했을 때의 요금표는 다음과 같다. * 기준 : 서울리전/리눅스/선결제 없음 두 요금 표는 소숫점으로 봐서 별 차이가 안 날 수 있지만 Fargate를 사용하는 vCPU와 RAM의 합산 요금을 기준으로 계산되기 때문에 실질적으로 큰 차이가 난다. ARM이 X86대비 시간당 RAM(GB)은 약 20%, CPU는 19.7% 둘 다 대략 약 20%가 저렴하다. 그렇다면 왜 더 싼걸까? 일단 몇 가지 이유.. 2023.05.09
- Spring boot에서 ControllerAdvice를 이용하여 Exception handling하기 코드를 작성하다 보면 코드에서 Exception(이하 오류)이 발생하는 일은 빈번하다. 제일 무서운 NullPointerException부터 NumberFormatException , ClassCastException 등등 많은 종류의 오류가 있다. 이런 오류들 중, Checked Exception으로 컴파일 이전에 코드 작성시에 try catch나 throw 등 에러를 핸들링하도록 강제하는 코드들이 있는 반면 SQL Exception, NullPointer, OutOfMemory 등의 오류들은 런타임에서 발생하기 때문에 개발 단계에서 확인하지 못하고 운영 단계나 사용자의 실 사용시에 발생하기 때문에 이는 곧 소프트웨어의 품질 문제로 이어진다. MVC 패턴을 채택하여 개발한다면 가장 첫 진입점이 되는 컨.. 2023.03.21
- 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.01.16
- AWS Lambda 사용시 주의점 (동시성) AWS Lambda로 간단한 서버리스 API를 구성하다가 오늘 문제점을 만났다. What is AWS Lambda? - AWS Lambda What is AWS Lambda? AWS Lambda is a compute service that lets you run code without provisioning or managing servers. Lambda runs your code on a high-availability compute infrastructure and performs all of the administration of the compute resources, includ docs.aws.amazon.com 문제의 API는 간단한 캐싱 데이터를 가져가는 API인데, 갑자기 Respon.. 2022.12.22
- AWS LightSail 소개 및 적용기 회사에서 비용절감 작업의 일환으로 EC2의 비용을 줄일 방법을 찾던 중 AWS LightSail을 찾게 되었다. LightSail은 AWS에서 지원이 종료되거나 오래된 인스턴스들을 지원 종료하기 전에 가볍게 시작할 수 있는 용도로 만들어진 듯하다. 자세한 내용은 여기서 참고할 수 있다. EC2의 대체재로 찾긴 했지만 LightSail이라는 서비스의 범주안에 RDS, CDN, DNS 등등 AWS에서 사용할 수 있는 서비스는 모두 있었고, VPC를 피어링 해서 기존 AWS 서비스와 함께 사용할 수 있다. 이 글의 요점은 EC2와 같은 가상 서버이기 때문에 LightSail = EC2라고 봐주시면 글을 읽는데 도움이 될 것입니다. LightSail의 간단한 설명은 뒤로 하고, 우리 팀이 이를 선택한 이유는 다.. 2022.11.30
- RDS,MySQL] slow query 알림 봇 만들기 신규 프로젝트를 진행하면서 백엔드와 DB설계를 맡아서 진행했다. 프로젝트 특성상 많은 DB Select가 일어나고 조인 관계가 복잡해지면서 쿼리 병목현상이 일어나는 지점이 생기면 알림을 쏴서 해결하려 했다. 물론 백엔드 코드를 작성하기 이전에 explain으로 지켜보면서 인덱싱을 적절하게 거는 것도 좋지만, 갈수록 콘텐츠가 많아질 것을 감안하여 슬로 쿼리에 대한 알림 봇을 만들 생각이 났다. 인프런 채용공고에서 봤다.. 사실... 우선 aws콘솔에서 rds 탭에 들어간 후, 알림 봇을 지정할 인스턴스로 들어간다. 인스턴스 -> 구성 -> 제일 아래에 파라미터 그룹을 선택한다. 검색창에 slow라고 검색 후, slow_query_log를 1로 바꿔준다. 우측 상단에 파라미터 편집이 있다. 그다음 long를.. 2022.11.10
300x250
320x100