Server 설정
위에서 port 정보나 container 혹은 cluster, nginx 설정 등을 확인했다면, 서버를 실행하기 위해 환경을 설정하고 실행을 위한 script를 찾아보자. (없다면 만들어서 PR을 해보자)
- DOCKERFILE 혹은 docker-compose.yaml 확인 (exposed, Port 등)
- nginx config 확인
- app 시작 전에 어떤 module을 불러오거나 파일을 읽어서 설정 하는지
- 가능하다면 build script와 IaC, 실 서버 환경 배포 script 등을 수집해두자. Local에서는 이상이 없는데 특정 기능이 실 서버일 때만 문제가 발생할 때 큰 도움이 된다.
Package 혹은 Library, module 확인
Front-End와 같은 취지지만, 서버 쪽은 조금 더 복잡하다.
다음 항목은 기초적이지만 중요한 질문들이다.
- Cron Job을 어떻게 관리하는지
- DB Migration을 위한 도구가 무엇인지
- DB와 Model을 연결하기 위해 어떤 ORM이나 client를 사용하는지
Middleware 분석
어떤 요청이든 공통적으로 필요한 공통 검증이 필요할 것이다. 이는 보통 middleware로 정의한다.
다음은 대표적인 middleware 종류이다.
- Credential이나 user 정보를 제공하는 middleware 확인
- 권한을 확인하는 middleware
- 요청 처리 전 redis에 어떤 정보를 공유하거나 읽어오는지 (보통은 session이나 특정 dictionary, pub/sub)
Front-End에서 Scenario 별로 호출하는 End Point 따라가기
위 ‘기능 별 호출 API 따라가기’에서 이어서 요청이 어떤 middleware를 통해서 어떤 함수를 호출하는지 따라가면서 payroad와 model을 눈에 익혀둔다.
Authenticate 분석
가장 기본적이고 공통적으로 존재하는 Data Model이라고 하면 사용자일 것이다. 어떤 방법으로 credential을 획득하는지, 어떻게 저장하는지, token이라면 refresh token을 어떻게 저장하는지, ip나 기기 정보 등을 어떻게 기록하는지 확장하면서 시작해보자
DB Model 분석
서비스에서 주로 사용하는 Table이나 Document가 가진 column/field 등을 확인해야한다.
외래 키(Foreign Key)나 참조하는 ObjectId, View를 어디에서 참조하고 사용하는지도 확실히 파악해야한다.
Log 및 Monitoring Server 파악
Live, stage, 혹은 dev 서버에서 발생하는 Log를 확인하는 방법을 알아두자.
Google Cloud Platform이라면 Cloud Logging을 사용할 수도 있고, Log Stash를 활용할 수도 있고, GrayLog를 사용할 수 있다.
또한 Memory, CPU, Instance 등을 Monitoring 하거나 알림을 설정해두는 방법도 알아두자. Grafana를 사용할 수도 있고, Scout나 DataDog이나 cloudwatch를 사용할 수 있다.
Architecture 파악
Monolithic Architecture
- 함수와 router, DB Model로 비즈니스 로직을 파악
- entity 마다 반복하는 코드가 없는지
- util에서 주로 사용하는 함수 확인
Micro Service Architecture
- Service가 분리되어있다면 해당 서비스가 어떤 interface와 type을 제공하는지 먼저 살펴보자
- end point를 따라가며 어떻게 사용하는지, 예외 상황에서 fallback 설정이 어디로 들어가는지
- 서비스 간 호환성과 버전을 어떻게 확인하는지
- 서비스 간 통신을 하거나 legacy 서비스의 entity를 call 하는 경우에 어떤 식으로 접근하는지
Cloud Architecture 파악
단일 가상 컴퓨팅 엔진에서 운영체제 하나로 돌아간다면 굳이 파악할 이유가 없지만, AWS나 GCP에서는 다양한 서비스를 제공한다. (Google Cloud Platform을 예로 들면, 암호나 Key를 저장하기 위한 Secret Manager, 대량 Message Queue를 처리하는 Pub/Sub 혹은 Cloud Tasks, 데이터 분석을 위한 BigQuery 등)
이 제품들을 어떻게 사용하는지, marketting 부서와 협업을 위한 event 혹은 statistics, index를 어떻게 공유하고 presentation 하는지 (excel export, dashboard, chart board 등) 확인해보자.
Cron Job 분석
cron job이 무엇이 있는지, 어떻게 처리하는지 확인해보자.
Message Queue 분석
분산 시스템을 위한 Stateless 구조에서는 기민하고 유연한 구조와 분산 시스템에서 멱등성을 보장하기 위해서 Message Queue를 거의 필수적으로 활용한다. Redis나 Kafka, RabbitMQ 등 여러 방법이 있기 때문에 이를 파악하고 익숙해지자. 만약 특정 비즈니스 로직을 수행 하기 위해서 message를 남기고 이를 consume 하는 함수를 파악해두자.
'Back-End' 카테고리의 다른 글
[SQL] 성능 개선을 위한 Query Tuning (0) | 2024.04.29 |
---|