문제 상황 및 원인저번 포스팅에서 VM에 들어오는 해킹 시도를 방어하는 포스팅을 올렸었는데이런저런 작업을 하다가 오늘 또 CPU 100%를 찍는 이슈를 마주쳤습니다.이제 해킹 시도로 인한 무작위 요청을 막아서 API에서 발생하는 이슈는 아닌 것 같았고무엇이 문제일까 분석하다 해결 방법을 기록하고 공유할 겸 포스팅을 작성하게 되었습니다. 일단 CPU가 100%를 찍게 된 원인부터 분석해 보면EC2 인스턴스를 종료 및 재시작하여 ssh에 접근하고 NGINX 액세스 로그부터 살펴봤습니다.하지만 역시 API 로그는 깔끔했고 이건 메모리 문제일 가능성이 크다고 판단해 메모리를 파보기 시작했습니다. 저는 free tier를 사용 중이었기에 ec2 스펙이 t2.micro로 Memory 1GB 정도의 작은 서버였고to..
해킹 시도를 받다 프로젝트를 완성하고 VM 하나를 빌려 내 API 서버를 배포하였습니다. 근데 어느 날인가부터 아래 사진과 같이 누가 봐도 이상한 API 요청이 들어오기 시작했습니다. 아직 데이터도 많지 않은 서버라 안일하게 특별한 보안 장치를 두지 않아 이런 일이 발생했고 일단 개발이 급했기에 그냥 놔뒀는데 어느날 vm에 ssh 연결이 안 되는 이슈가 있었습니다. 정확히는 ssh 접근 시도를 하면 아무런 에러도 뜨지 않은채 계속 연결 시도 대기 상태에 멈춰있었습니다 뭔가 느낌이 쌔해서 aws 콘솔에 가서 네트워크 모니터링 로그를 보니 CPU 100%가 되어 있네요.. ㅎㅎ 무작위 요청을 하던 그놈 짓이구나 라는 걸 바로 알 수 있었고 일단 vm은 접속해야 하니 vm을 중단 후 재시작하여 연결하였습니다...
회사에 기존에 배포된 앱이 있지만 부득이한 이유로 새로운 앱을 개발하여 배포를 해야하는 상황이 발생하여 같은 앱으로 인식시키기 위해 AOS의 패키지명과 IOS의 Bundle ID가 같도록 만들어야 하는 이슈가 있었습니다. 복잡할 것 같았지만 생각보다 방법이 간단하여 공유하고 기록하려 합니다. Android - 패키지명 변경하기 1. 프로젝트에서 패키지명을 검색 2. 바꾸고 싶은 패키지명으로 교체 3. 폴더 구조 변경 패키지명에 따라 폴더 구조가 달라지고 그 하위에 MainActivity와 MainApplication을 위치시켜야 합니다. 만약 com.example.one.two.three 가 패키지 명이라면 com/example/one/two/three 폴더 내에 두 파일이 존재하도록 수정합니다 4. S..
모달을 구현하다 보니 모달 자체에 대한 코드가 너무 길어 일회성으로 사용하지 않고 전역적으로 사용하는 방법을 고민하게 되었습니다. 이를 위해 여러 레퍼런스들을 찾아보니 일반적으로 Redux나 Recoil과 같은 전역 상태 관리 라이브러리에 모달의 상태를 저장하여 구현하는 방법을 소개하고 있었습니다. 저는 전역 상태 관리 라이브러리를 사용하지 않고 Context API를 사용하고 있기에 Context API를 사용해 전역 모달을 구현한 과정을 기록하고 구현 도중 만났던 이슈와 해결 방법들을 기록하려 합니다. 1. 일반적인 Modal 구현 방법 일반적으로 react native에서 모달은 아래와 같이 구현할 수 있습니다. import React, { useState } from 'react'; import ..
React Native에서 커스텀 폰트를 사용하는 방법을 기록하겠습니다. 1. 커스텀 폰트 적용 방법 먼저 원하는 폰트를 다운로드합니다. 저는 Pretandard라는 폰트를 다운로드하였습니다. 그럼 아래 사진과 같이 .otf 또는 .ttf 의 폰트 파일들이 있습니다. 이 폰트들을 우리 react-native 프로젝트의 특정 폴더에 저장해야 합니다. 일반적으로 assets/fonts에 저장하는 게 국룰인 것 같은데 마음 가는 곳에 저장하시면 됩니다. 저는 assets/Fonts 라는 폴더에 저장했습니다. 그럼 이제 폰트들을 가져왔으니 이를 android와 ios 각각 적용하시면 됩니다. 적용하는 법은 간단한데 일단 루트 경로에 아래 react-native.config.js 파일을 생성하고 아래 내용을 추가..
최근 회사들의 업무를 살펴보면 모놀리식 구조에서 MSA로 전환하는 사례가 많습니다. 그만큼 MSA의 확장성과 편한 유지보수가 입증되어 많은 모놀리식 프로젝트들이 MSA로 전환하는 동향을 보이고 있는데요. 저 또한 2번의 스타트업 경험 중 2번 모두 모놀리식에서 MSA로 전환하는 업무를 경험했었습니다. 근데 MSA로 전환하면서 몇가지 까다로운 것들이 생기는데 그 중 하나가 서버 간 데이터 동기화였습니다 MSA의 일반적인 구조는 각 Feature로 분리된 서버가 자신의 DB를 독립적으로 가지는 것이기 때문에 만약 한 서버에서 다른 서버의 데이터가 필요한 경우 데이터 동기화를 시켜주어야 합니다. 실제로 제가 진행했던 프로젝트 중 캘린더나 기관 통합 검색을 구현할 때 이런 상황이 있었는데요. 대표적으로 캘린더 ..
※ 목차 이전하게 된 원인 & 스토리지 결정 과정 마이그레이션 방법 결정 Rclone이란? 마이그레이션 과정 이전하게 된 원인 & 스토리지 결정 과정 지금 근무하고 있는 회사는 클라우드 스토리지 서비스로 GCS(Google Cloud Storage)를 사용하고 있었는데 용량 1기가당 $0.023이고 Egress 비용은 1기가당 $0.12라서 비용이 상당히 부담스러웠습니다. 그래서 다른 스토리지 서비스들을 검토해보았고 검토 결과 DigitalOcean의 Spaces라는 서비스를 찾아내었습니다. DigitalOcean은 1TB까지 $5로 제공하고 초과 시 1GB당 $0.02 그리고 Egress 비용은 0.01이었습니다. 팀장님께서는 눈여겨보았던 Vultr 서비스와 가격은 동일하지만 DigitalOcean은 ..