본문 바로가기

분류 전체보기12

블록체인 네트워크를 구성하고 장애/복구 테스트 해보기 (Geth) 해당 포스트는 회사에서 NFT 프로젝트용, 블록체인 네트워크 구성 업무를 수행 했던 경험을 기록하기 위해, 내 개인 Notion 에 작성했던 글이다. 해당 포스트로 혹시나 도움을 받는 분이 있을까 싶어 공유해 본다. 내가 블록체인을 처음 접했을 때, 개발자로서 굉장히 의문이 들었던 말 중 하나는, ‘블록체인은 서버가 없다’는 것이었다. 이 말을 듣자마자 나는 개발자로서, IT 종사자로서, 이해를 할 수가 없었다. 서버가 없으면 연산 처리는 어디서 한다는 건가? 또, 애초에 연산 처리를 담당 하는 물리적인 장치가 없다면 전자적인 컴퓨팅 처리는 어떻게 된다는거지? 하는 생각이 들었다. 위 고민에 대해 웹상에서 정보를 찾다 보면, 블록체인은 네트워크에 참여하고 있는 여러 노드에 의해 데이터가 처리된다는 것을 .. 2024. 3. 6.
더 나은 코드를 고민 해보기 - Mapper & Builder 패턴 사이드 프로젝트 작업을 하면서 Service 레이어에서 결과값을 return 하는 과정에서 불필요한/불편한 코드 작업이 반복되는 경우가 있었다. 예를 들어, 아래의 코드는 어떤 모듈 Service 의 수많은 함수 중 하나의 예이다. commitment 라는 키워드는 내가 작업 중인 사이드 프로젝트에서 사용되는 용어이므로, 읽기 복잡하다면, 단순히 item 이라는 용어로 치환해서 읽어도 무방하다. async completeCommitment(commitmentId: string, user: User): Promise { try { const commitmentActivity = await this.commitmentActivityRepo.findOne({ where: { commitment: { id: c.. 2024. 3. 6.
Node 프로젝트 패키지 최적화 (bundle analyzer) 나는 재직 중인 팀에서 NestJs 기반의 신규 백엔드 서버를 구축하였다. 기존 레거시 node, express 기반의 프로젝트는 5~6년 전에 작업된 내용이 많아 이전 기능을 참조하면서 신규 백엔드 서버에 기능을 옮겨 올 때에는 여러 고려해야 할 점이 있었다. 특히 구버전 패키지와 관련된 것들이 그러하다. 예를 들어, 레거시 로직에 사용된 오픈소스 패키지가 잘 관리 되고 있는지, 성능, 보안 상에 이슈는 없는지, 이슈가 있다면 대체할 패키지가 있는지 등 이다. 문제 Google 앱스토어에 유저의 구독 결제 여부를 파악하기 위해 사용되던 기존 코드가 있다. 이 기능은 googleApis 패키지 기반으로 돌아간다. 신규 서버에서 googleApis 패키지를 설치하니 단번에 IDE 상에서도 부하가 생기고, .. 2024. 3. 4.
EKS환경의 NestJS에서 원본 IP를 제대로 가져오지 못하던 문제 (X-Forwarded-For 헤더) 해당 문서는 AWS EKS 인프라 환경에서 구축된 NestJS 백엔드 서버에서, Client의 IP 주소를 제대로 못 가져오는 이슈를 핸들링 했던 경험을 적은 글입니다. @Ip 데코레이터 서비스의 비즈니스 기능을 작업하다 보면 Client 의 IP 주소를 알아야 하는 경우가 있다. 이를 위해 NestJS 에서는 @Ip 데코레이터를 지원하고 있다. 예를 들어, 다음과 같이 사용할 수 있다. import { Controller, Get, Ip } from '@nestjs/common'; @Controller() export class AppController { @Get() getIp(@Ip() ip: string): string { return `Hello, your IP is ${ip}`; } } 위 @.. 2024. 3. 2.
백엔드 환경에서 GA4(google analytics4) 데이터 수집하기 개요 현재 팀에서는 GA(Google Analytics4) 를 사용하여 플랫폼 데이터를 분석을 하고 있었다. 조금 더 세부적인 내용에 관한 분석 필요성이 있었고, 현재는 앱단에서만 GA 이벤트 메세지를 수집하고 있었으므로, ‘사용자의 포인트 총액’ 과 같이 백엔드의 DB 조회가 필요한 내용에 대해서는 수집하지 못하고 있었다. 따라서, 백엔드 서버에서도 GA4 연동 작업의 필요가 있었기에, 해당 작업을 하게 되었다. GA 데이터 GA에는 두 가지 주요 유형 데이터가 있다. 이벤트(Event) 는 사용자의 어떤 액션들이다. 예를 들어, ‘상품 구매’ , ‘포인트 사용/충전’ 등 플랫폼에서의 특정 활동이 이벤트에 해당한다. 사용자 속성(User Properties) 은 사용자의 종속된 특성이나 상태이다. 예를.. 2024. 2. 21.
백그라운드 프로세스 시스템 구축하기 (NestJS, CronJob 스케줄러) NestJS 서버 프로젝트 기반으로 백그라운드 프로세스 시스템을 구축하고, 해당 백그라운드 프로세스를 CronJob 으로 활용 했던 경험을 기록으로 남겨 본다. 나는 회사 업무로 유저가 구매/판매에 참여하는, 오픈 마켓과 유사한 디자이너 마켓플레이스를 개발 하게 되었다. 오픈 마켓인 만큼, 당연히 유저의 판매 내역 산출과 그에 따른 정산 산출이 필요하게 되었다. 이외에도 앞으로 통계나 하루/한달 단위로 데이터를 산출해야 할 필요가 많아질 것 같아, 스케줄러와, 이 스케줄러가 동작 시킬 백그라운드 프로세스를 시스템화 하여 구현하기로 하였다. 개발 컨셉 & 요구(필요)사항 기존 백엔드 코드를 활용할 수 있으면 구현 시간이 절약 되겠다. 기존 코드의 ORM 기반 DB Model/Schema 가 정의 되어 있는.. 2024. 2. 19.
인프라 환경을 개선하여 서비스에 기여하기. (AWS 인프라 이전 & Docker) 안녕하세요~ 서버 개발자 최승환입니다~ 👋 이 글은 팀의 레거시 인프라 환경을 개선 했던 경험을 공유하기 위해 작성하게 되었습니다. 스타트업이란 신규 개발과 기술부채 해결 사이에서 항상 고민하게 되는 것 같습니다. 저희 팀도 마찬가지로 그간 해결하지 못했던 레거시가 많이 쌓여 있었습니다. 인프라 개선 업무는 제가 입사한 후 2개월 정도 된 시점부터 기술 조사와 작업을 진행하게 되었습니다. 이전엔 비교적 인프라가 잘 구축되어 있는 팀에 속해 있기도 하고, 포지션도 달라 인프라 관련 업무를 할 일이 없었지만, 입사 후 저희 팀의 인프라 환경을 살펴 본 후, 안정성과 개발 생산성 향상을 위해, 서버 프로젝트와 인프라 환경 개선 업무를 진행하기로 CTO 팀과 논의 후 결정하게 되었습니다. 이번 작업으로 팀에 기.. 2024. 2. 18.
Google Play 인앱 구독 상품, 실시간 상태 추적 시스템 구축. RTDN (Real-Time Develop Notification) 현재 사내 서비스에서는 구독 상품을 판매하고 있다. 현재 개발 된 상황은, 유저의 구독 상품 구매 여부를 DB에 기록하고 있긴 했지만, 상품 구매 당시 최초 한번만 기록하고 있었기에 구독의 갱신이나 취소가 발생 했을 경우엔 Backend 서버에서 이를 추적할 방법이 없었다. 기능 상에서 유저의 구독 여부가 필요한 경우엔 Google Play Developer API 으로 체크 하기에 여태 버그 접수는 없었지만, 비즈니스 분석이나, 다른 복합적인 작업을 위해 내부 데이터를 조회할 경우엔 데이터를 신뢰할 수 없어 문제가 되었다. 일반적으로 SDK 를 제공하는 곳에서는 백엔드 통합 기능으로 Callback 이나 Push / Notification 같은 기능을 제공한다. Google Play 에서도 이와 비슷한.. 2024. 2. 17.
Sentry 에러 모니터링 도구 (기술 조사 & 활용 사례) 해당 문서는 에러 모니터링 시스템 도입을 위해, 기술 조사를 했던 내용을 개발팀 내부에 공유 했던 문서입니다. 에러 모니터링 툴로 Sentry 가장 많이 사용 되고 있기도 하고, Android, Ios, 백엔드 등 저희 기술 스택을 지원하고 있어 Sentry 위주로 내용 정리 하였습니다. Sentry Stackshare 기준 가장 많이 사용되고 있음. 구글링 & 정보 탐색 용이 RIDI, LINE, Dable 다른 개발팀 적용 사례 Android, IOS, Node. 현재 우리 팀에서 사용하는 기술 스택은 전부 지원하고 있음. 각각 Document 존재. 팀 내에서 동일한 도구를 사용하여 이해를 높일 수 있음 Github 의 Sentry Repo 를 보면, 가장 최근 commit (문서 작성 기준) 시간.. 2024. 2. 17.
더 나은 코드를 고민해보기. (Method Overloading 활용) 서비스 로직을 작업하다보면, 다음과 같은 코드 패턴을 만날 때가 있다. 채팅 서비스가 있다고 하였을 때, 아래는 간략하게 Controller Layer 와 Service Layer 를 정의해 본 코드이다. (아래 코드들은 내용을 전달하기 위해, 간략하게 생략한 코드 입니다.) class RoomController { ... @Post() createRoom(...) { this.roomService.createRoom(...); } @Post() joinRoom(...) { this.roomService.joinRoom(...); } } class RoomService { constructor( private roomRepository: Repository, private roomActivityRepos.. 2024. 2. 16.
객체지향 방법론 고찰 회사 블로그에 게시 했던 글을 옮겨 왔습니다. https://blog-bigpico.tistory.com/28 안녕하세요, 빅픽처인터렉티브에서 프론트엔드 개발자로 일하고 있는 최승환입니다. 😀 이번에 책 '객체지향의 사실과 오해 - 조영호'를 읽고 느낀 소감을 공유하고자 글을 작성하게 되었습니다. 내용이 지식 전달의 목적으로 작성되어 있지는 않지만, 다른 사람이 어떤 것을 배우고 느꼈던 과정을 읽는 것만으로도 많은 도움이 되었던 경험이 있어 이러한 소감문을 공유하게 되었습니다. 🙇‍♂️ 시너지를 생각하라, 전체는 부분의 합보다 크다. - 스티븐 코비 (stephen R. Covey) 책의 첫 장은 위와 같은 문장으로 시작된다. 벌써 호기심을 자극하고 재밌는 내용이 펼쳐질 것만 같다. 객체지향 방법론을 처.. 2024. 2. 16.
노션 페이지에서 티스토리로 이전중 🚧 셀프 브랜딩, 퍼스널 브랜딩의 시대라고 했던가, 노션 페이지는 개인 기록 용도로 주로 사용했다면, 티스토리 개발 블로그에서 나를 어필해야 할 필요를 느낀다. 앞으로 사이드 프로젝트를 만들었던 기록이나, 개발 기록 등을 올려야겠다. 2024. 2. 16.