그동안 NestJS로 개발을 하면서, class-validator와 같은 라이브러리를 사용하는 것은 매우 일상적인 일이었다. 별다른 고민 없이 데이터 유효성 검사를 자동으로 처리하는 데 class-validator를 사용해 왔지만, 실제로 내부에서 어떻게 작동하는지에 대한 깊은 이해 없이 그저 편리함에 의존해왔다. 하지만 이제는 그 원리를 제대로 이해하고, 더 창의적으로 Custom Decorator를 생성해서 활용해 보고자 한다. 이번 포스팅에서는 Reflect Metadata를 활용하여 런타임에도 타입 정보를 유지하고 검증하는 방법과 Custom Decorator를 만드는 법을 알아보겠다. Reflect Metadata란?TypeScript는 컴파일 시점에 타입 정보를 가지고 있지만, 컴파일 후 ..
얼마 전, 약 2년간 다녔던 회사를 퇴사했다. 퇴사 후 한두 달 정도는 아예 코드를 쳐다보지 않고 푹 쉬었다. 이직을 바로 할까 고민하다가, 실업급여를 받을 수 있는 기회도 생겨서 이번 기회에 부족한 부분을 채우기로 했다. 무작정 코드를 작성하기보다는, 내 코드의 구조를 고민하다가 객체지향에 대해 좀 더 깊이 있게 알고, 코드에 적용해보고 싶어졌다. 그러던 중 조영호 저자의 "객체지향의 사실과 오해" 와 "오브젝트" 라는 책을 알게 되었다. 찾아보니 둘다 객체지향 관련 책이지만 "오브젝트"는 실질적인 구현에 관한 코드 위주의 책이고, "객체지향의 사실과 오해"는 제목 그대로 객체지향의 개념과, 사람들이 오해하는 포인트를 잡아서 설명하는 설명해주는 책이다. 나는 CS지식이 탄탄하지 않아서 평소 코딩을..
운영중인 앱에서 출석체크 이벤트를 도입하게 되었다. 출석체크 이벤트는 사용자들에게 매일 자정에 접속하여 출석체크를 하면 보상을 제공하는 간단한 메커니즘이다. 하지만... 예상했던 것 이상으로 수만 명의 사용자들로부터 동시에 들어오는 출석체크 요청의 폭풍에 직면했다. 동시성 문제 수만 명의 사용자들로부터 동시에 들어오는 요청을 처리하는 것은 결코 간단한 일이 아니었다. 서버의 자원은 한정되어 있고, 동시에 너무 많은 요청이 처리될 경우 데이터베이스 충돌, 성능 저하, 심지어는 서비스 다운에 이르기도 한다. 이는 단순히 기술적인 도전을 넘어, 우리 서비스의 안정성과 사용자의 신뢰성에 대한 문제였다. CloudWatch를 확인해보면 출석체크가 시작되는 밤 12시 (UTC 15:00)에 API 요청이 수만 건으..
간만에 해커톤 멘토링을 다녀오게 되어서 포스팅을 해보려 한다. 24.03.09 - 24.03.10 연대 X 숙대 ABC LIVING LAB HACKATHON 이번 해커톤은 리빙랩 해커톤이라서 메인 주제는 AI/Cloud/Bigdata를 이용해 지역사회의 문제를 해결하는 서비스를 개발해보는 것이다. 참여한 학생들은 AWS Cloud과정을 사전 교육으로 받았으며, 특히 이전 해커톤과 다르게 AWS Bedrock 이라는 서비스 활용을 권장했다. 나도 이번 기회에 처음 접해보게 되었다.. 간략하게 AWS Bedrock 이란 ? 다양한 고성능 파운데이션 모델을 단일 API를 통해 제공하는 완전관리형 서비스이다. 이 서비스를 활용하면, 사용자들은 AI 기반의 생성형 AI 애플리케이션을 쉽게 개발하고 확장할 수 있으..
AWS에서 서비스를 운영하다 보면, 서버의 상태를 실시간으로 파악하는 것이 얼마나 중요한지 잘 알게 될 것이다. 특히 웹 서버인 NGINX에서 발생하는 액세스 로그를 분석하고 모니터링하는 것은, 서비스의 성능을 유지하고 사용자 경험을 개선하는 데 필수적이다. 그런데 많은 사람들이 이런 중요한 데이터를 어떻게 효과적으로 수집하고 분석할 수 있는지에 대해 궁금해 하는데 여기서 AWS의 CloudWatch Logs가 빛을 발한다. CloudWatch Logs는 로그 데이터를 실시간으로 수집하고, 저장하며, 접근할 수 있게 해주는 서비스이다. 내가 서비스중인 앱에 최근에 유저가 5배 가량 확 증가하면서 사용자 경험을 개선하고, 서비스를 더욱 최적화하기 위해서 구축하기로 했다. 이제 AWS의 NGINX 액세스 로..
오늘은 이전에 만들었던 소셜로그인에 이슈가 생겼는데 2주정도 머리 쥐어뜯다가 해결을 해서 관련 내용을 포스팅 해보려고 한다. https://ilikezzi.tistory.com/65 [Nest.JS] 구글, 네이버, 카카오 소셜로그인 구현 - 2 소셜로그인 1편에 이어서 바로 2편을 포스팅하려 했는데 refresh_token과 JWT 전략에 대해서 이것저것 머리싸매면서 고민하느라 늦어졌다.. 정말 다양한 JWT 전략과 고민할 사항이 많았다. 한 계정으 ilikezzi.tistory.com 소셜로그인 전략을 어떻게 구성했는지는 위의 포스팅을 참고하길 바란다. 일단 소셜로그인 전략에 대해 간략하게 얘기해보자면, 소셜로그인 전략 1. 첫 로그인 시 access_token / refresh_token 발급 2...
올 한해 운 좋게 AWS 멘토진에 들어가게 되면서 다양한 해커톤 멘토로 참석을 했었다. 열정 넘치는 학생들과의 만남은 정말 영광스러운 경험이였다. 어찌보면 지금 개발중인 프로젝트를 하게 된 계기도 멘토링을 하면서 부족한 부분을 느껴 시작한 것이다. 2023년을 회고하며, 멘토링 활동은 나 자신의 성장에도 크게 기여했다고 생각한다. 너무나 감사하게도 AWS 이사님께서 초대를 해주셔서 지난주 금요일(29일) AWS Rookie Championship 심사위원으로 참석하게 되었다. 2023년 해커톤에서 뛰어난 결과를 낸 학생들을 초대해 발표하고 시상까지하는 자리였다 ! 장소는 AWS 본사라서 센터필드로 갔다. AWS 본사는 역시나 멋있더라.. 귀여운 스티커도 받았다..ㅎㅎ 총 12개 팀이 참여해 기능소개 및..
메리 크리스마스 🎄 크리스마스인데도 포스팅을 하는 이유는 백엔드파트 리더님과 대화중에 JS 이벤트루프를 설명해보라고 하셨는데 어버버대다가 제대로 설명을 못해서 당황했었다.. 리더님은 면접을 보러 들어가면 주니어, 시니어 상관없이 JS 이벤트 루프에 대해서 설명해보라고 질문을 던진다고 하셨다. 그만큼 JS에서 가장 기본적이고 비동기 동작원리를 알려면 무조건 알아야하고 설명을 할 수 있어야 한다. 그래서..! 내일 출근하기전에 제대로 알고 가서 설명을 드리려 포스팅을 해본다. Event Loop 시작하기에 앞서 간단히 JS에 대해 알아보자. JavaScript는 싱글 스레드 프로그래밍 언어로서, 한 번에 하나의 작업만 처리할 수 있다. 싱글 스레드인 자바스크립트의 작업을 멀티 스레드로 돌려 작업을 동시에 처..
정말 오랜만에 하는 포스팅이다 ! 최근에 프로젝트, 회사업무, 코딩테스트 준비때매 너무 정신없이 바빴다. 프로젝트는 기획이 어느정도 나오고 한달 넘게..? 걸려서 모든 API 개발을 완료했다. 처음에는 간단하게 하려고 했는데 점점 욕심이 생겨서 API도 50개 넘게 생겨버렸다...^^ 예비군 동미참 가느라 3일 빼고 전부 달렸네.. 따흑 그래도 내꺼를 만드니깐 확실히 재밌긴하다 ! 프로젝트에서 "테마" 를 고르는 부분이있는데 각각의 테마에 이모지가 붙어있어서 해당 이모지를 "코스이름"을 만들어줄때 붙혀주기로 했다. 이런식으로 코스이름에 이모지를 붙여 줘야 한다. 그래서 API 로직을 짜고 실행을 시켰더니 에러가 나왔다. 엥 이게 뭐지 싶었다. 그래서 ChatGPT 와 구글링을 해봤다. 이모지를 저장하려면..
회사에 백엔드파트 리더로 전 야놀자 리더분께서 오셨다. 오셔서 코드품질과 성능개선에 대해서 설명해주시는데, 그동안 내가 쓰레기같은 코드들만 빨리 짜고 있었구나 싶었다..🥲 그래서 요새는 기존 코드들을 하나씩 리팩토링에 들어가고있다. TypeOrm을 좀 효율적으로 잘 쓰자고 강조하셨다. 그래서 오늘은 TypeOrm의 loadRelationCountAndMap() 메서드에 대해서 포스팅을 해보려한다. 우선 기존 코드를 먼저 확인해보자. 기존 Code 사진속 코드에 대해서 설명을 하자면 투표 댓글 작성 API 인데, 존재하지 않는 투표거나, 종료된 투표가 내가 참여한 투표가 아니면 댓글을 못달게 에러를 return하는 로직이였다. vote Repository / voting Repository로 두번 DB C..