이직을 위해 면접을 다니면서 들었던 공통적인 질문은 서버 아키텍처에 관한 것이었다. 나는 서버 아키텍처 질문을 했을 때 그냥 저희는 단일 서버를 사용하고 있었어요. 라고 대답했는데, 이게 옳은 대답이었을까? 그래서 서버 아키텍처에 대해 파헤쳐보기로 했다. 내가 의도를 잘 파악을 못했을 수도 있지만, 도대체 정확히 무엇을 말하는 것이었을까? 한번 정리를 해봐야겠다.
서버 아키텍처란?
서버 기반 시스템의 구조, 구성 요소, 그리고 구성 요소 간의 관계를 정의하는 설계.
즉, 서버가 어떻게 구성되고, 어떤 역할을 하며, 다른 요소들과 어떻게 상호작용하는지를 보여주는 청사진
제미나이가 말해주는 아키텍처의 정의이다.
일단 내가 단일 서버를 사용하고 있어요. 라고 말한 것은 하드웨어 설계에 속할 것이다. 그럼 나는 모놀리식으로 개발된 서버를 단일 서버로 배포하여 서비스를 운영했어요. 라고 말했어야 했을까? 각각 어떤 관점에 따라 어떤 대답을 할 수 있는지 정리해보자.
1. 하드웨어/인프라 관점
- 실제 서버가 어떻게 배치되어 있는지: 온프레미스, 클라우드, 물리서버와 가상서버 혼합
- 서버 유형: 단일 서버, 다중 서버, 오토스케일링 지원, 로드밸런싱 등
면접에서 인프라 레벨을 묻는 경우에는, "저희는 AWS에서 EC2 여러 대와 RDS, S3, 그리고 ELB(로드 밸런서)를 조합해 사용하고 있습니다. 서비스 장애 대응을 위해 오토스케일링 그룹도 도입했습니다."와 같은 식으로 구체적으로 언급하는 것이 좋다.
2. 백엔드 소프트웨어(코드 아키텍처) 관점
- 아키텍처 패턴: 모놀리식, MSA, 서버리스 등
- 계층 구조: 도메인 중심, 클린 아키텍처 등
- 기술 스택: 언어/프레임워크, 디자인 패턴(MVC, MVVM 등)
코드 구조를 묻는 질문에는 "기존에는 단일 서버 내 단일 코드 베이스(모놀리식)로 개발했지만, 최근에는 서비스의 일부를 별도의 마이크로서비스로 분할해 확장성과 유지보수성을 높였습니다."와 같이 답할 수 있다.
3. 데이터 흐름 및 서비스 간 관계 관점
- 클라이언트와 서버, 데이터베이스, 백엔드 간 데이터 교환 방식: REST API, GraphQL, gRPC 등
- 서비스 간 통신 방식: 동기/비동기 호출, 메시지 큐(RabbitMQ, Kafka 등) 사용 여부
- 외부 연동: 외부 API 호출, 웹훅, 서드파티 서비스 연계
* 웹훅: 데이터가 변경되었을 때 실시간으로 알림을 받을 수 있는 기능
데이터 흐름을 중심으로 설명하려면 "클라이언트가 REST API를 호출하면, 서버는 요청을 받아 인증 및 비즈니스 로직 처리를 한 후, 데이터베이스와 연동합니다. 일부 연산은 메시지 큐를 통해 비동기적으로 처리합니다."라고 설명할 수 있다.
4. 정리
- 아키텍처의 전체상: 전체적인 인프라의 그림, 어떤 방식으로 서버가 배치되고, 각 컴포넌트가 어떤 역할을 하는지 큰 틀을 먼저 설명
- 핵심 기술과 패턴: 사용한 아키텍처 방식(모놀리식, 마이크로서비스 등)과 주요한 기술 스택, 디자인 패턴을 언급
- 서비스와 데이터 흐름: 내부 또는 외부 서비스 간 상호작용, 클라이언트~서버~DB 간 데이터 흐름, 메시징 시스템 등을 설명
- 확장성 및 장애 대응 전략: 서버가 많아질 때, 장애가 발생할 때 어떻게 대응하는지(로드밸런싱, 오토스케일링 등)
정리를 하고 나니 나는 그냥 1번에만 국한되어 대답을 했었다는 것을 깨달았다.
Q. 개발하신 서비스의 서버 아키텍처에 대해서 설명해주세요.
A. 네 단일 서버로 운영했습니다.
Q. ...
질문은 저렇게 간단하게 했어도 답변으로는 전체에 대한 내용을 듣고 싶었던 거 같다.
'개발 > CS' 카테고리의 다른 글
| [아키텍처] 그럼 서버 아키텍처를 어떻게 구성하시겠어요? (0) | 2025.07.21 |
|---|---|
| Binary Search VS Linear Search (0) | 2022.04.17 |
| Arrays (0) | 2022.04.17 |
| [cs50] 비트와 바이트 (0) | 2021.09.08 |
| [cs50] 1.2 - 기억장치 (0) | 2021.08.02 |