본문 바로가기

전체 글39

[10_modules] 10개의 MSA 모듈로 완성하는 엔터프라이즈 백엔드 구축기 1. 프로젝트 개요 및 목표작은 모듈을 하나씩 1주일 정도 천천히 만들어서 하나의 큰 MSA 아키텍처를 구현하려고 합니다.시작은 Docker Compose를 이용해서 작은 컨테이너로 구현한 뒤 AWS 환경으로 마이그레이션을 목표로 합니다.모듈들을 구현하면서 얻고자 하는 바는 아래와 같습니다.서비스에 적합한 기술 스택 선정에 대한 고민고가용성, 확장성, 데이터 무결성을 유지하기 위한 방법론AWS 마이그레이션 경험K8s를 통한 컨테이너 관리 자동화2. 개발 로드맵 (Roadmap: 10 Modules)프로젝트는 기반, 핵심, 고도화, 지능화 단계로 나누어 순차적으로 진행하려고 합니다.단계모듈명주요 기술 (Local -> AWS)핵심 과제기반01. 통합 인증 (Auth)Redis -> ElastiCacheJW.. 2025. 12. 4.
단위 테스트 진행 [이슈] 프로젝트의 완성도를 높히기 위해 단위테스트를 진행하기로 했습니다. [원인 및 개선사항 분석] 모놀리식 아키텍처에서 레이어드 아키텍처로 전환을 완료함에 따라 의존성 주입이 쉽게 바뀌었습니다. 단위테스트 작성이 쉬워졌고, 프로젝트 마감 기한이 남아 있어 진행하도록 했습니다. [솔루션] 외부 객체(MYSQL, REDIS, 미디어 서버)의 의존성을 격리한 후 단위 테스트를 진행했습니다. 이후, 통합 테스트를 통해 전체 컴포넌트의 실패 여부를 확인했습니다. [과정] go mock을 사용해 외부 의존성 객체에 대한 mocking을 진행했습니다. mockgen -source=app/interfaces/janus_interface.go -destination=app/mock/janus_mock.go -pack.. 2024. 3. 27.
레이어드 아키텍처 도입 [이슈]type ControllerInstance struct { Ctx *fiber.Ctx janusAPI interfaces.JanusBroker whipAPI interfaces.WhipBroker Log *log.User DQuery interfaces.DemoQuery RQuery interfaces.RedisQuery }기존 아키텍처는 모놀리식으로 설계되어 있어 사용자 요청이 발생할 때마다 ControllerInstance 구조체 인스턴스가 생성됩니다.이 구조체는 모든 API 호출에 필요한 인스턴스를 포함하고 있어, 비즈니스 로직 처리에 사용됩니다.이로 인해 다음과 같은 문제점이 발생했습니다:필요하지 않은 객체도 초기화해야 해서 자원 낭비가 발생합니다.단위 테스트 .. 2024. 3. 18.
[개발 기초] 개발 단계에서 장애 파악하기 본 포스팅의 내용을 요약하자면 - APP은 Log를 남긴다. - 소거법으로 찾아 나간다. 1. Firewall 1.1 장애 확인 방법 - 가장 쉬운 방법으로는 ping을 이용하는 방법입니다. ping은 3계층 프로토콜인 icmp를 이용해 대상 서버의 상태를 확인해 볼 수 있습니다. ping [domain] - 대상 서버가 icmp 요청을 차단하고 있을 경우가 있기 때문에 telnet을 사용하는 방법도 있습니다. telnet [domain] [port] 1.2 해결 방법 일반적으로 클라우드 환경이라면 클라우드 콘솔에서 방화벽을 설정할 수 있습니다. 만약 로컬 환경 우분투라면 ufw을 찾아보시길 권해드립니다. 2. LoadBalancer nginx를 사용하기에 nginx을 기준으로 설명하겠습니다. 2.1. .. 2024. 3. 7.
[Ubuntu] Systemctl 과 service의 차이 공통점 두 명령어 모두 데몬 프로세스를 관리하는 데 사용합니다. 두 명령어의 관계 systemctl이 service 보다 큰 개념이라고 보면 됩니다. /etc/systemd/system 안에 프로세스.service 형식으로 만들어 추가하면 프로세스를 데몬으로 사용할 수 있습니다. service 파일 만드는 예시: https://kim-dragon.tistory.com/202 /usr/lib/systemd/system도 존재하는데 해당 경로는 OS 벤더사가 관리사가 관리하는 영역이므로 /etc/systemd/system 에 추가하도록 합시다. Systemctl 명령어 기본 명령어 systemctl [start|restart|stop|status] process 서비스 리스트 출력하기 systemctl li.. 2024. 3. 7.
SSH Pool을 이용한 성능개선 [이슈]다른 서버에 폴더, 파일 생성 또는 config 파일을 API 서버에서 생성해 원격 서버에 전송하는 로직이 필요했습니다. 해당 로직들은 비교적 간단한 로직들이고 재사용이 가능해야 했습니다. API를 활용할 경우 오버헤드와 리소스 낭비가 발생할 것으로 판단 돼 SSH을 사용했습니다. [원인 및 개선사항 분석]SSH을 사용하는 모든 로직에서 필요 이상의 지연이 발생했습니다. 새로운 SSH 클라이언트를 만들고 연결하는 과정에서 오버헤드가 발생함을 확인했습니다. [솔루션]솔루션 목록1. ControlMaster2. SSH pool각 솔루션에 대한 장단점두개의 솔루션 전부 첫 번째 SSH 연결이 활성화된 이후 추가적인 연결을 해당 클라이언트를 통해 빠르게 새로운 세션을 초기화 할 수 있습니다. 하지만 .. 2024. 2. 29.