개발 공부/백엔드

백엔드 기초

baby-t 2025. 9. 1. 18:58

시작하기에 앞서 유튜브 '기술노트with 알렉' 님의 영상을 토대로 공부했습니다.

https://www.youtube.com/watch?v=_WQR6-sqqjM

 

핵심 주제는 백엔드만 공부를 할 게 아니라, 프론트엔드, 백엔드 등 개발의 전체적인 관점을 알아두는 것이 좋다고 합니다.

 

 

전반적인 시스템 아키텍처 (2023. 10. 18 영상 기준)

 

백엔드 시스템 아키텍처, 핵심 용어 파헤치기

개발 공부를 시작하면 프론트엔드와 백엔드라는 큰 산을 마주하게 됩니다. 특히 백엔드 시스템 아키텍처(System Architecture)는 수많은 구성 요소로 이루어져 있어 처음에는 낯설고 복잡하게 느껴질 수 있습니다.

이번 포스팅에서는 아래와 같은 일반적인 백엔드 아키텍처 다이어그램을 보면서 각 구성 요소가 어떤 역할을 하는지, 핵심 용어들을 하나씩 알기 쉽게 정리해 보겠습니다.


## 1. 클라이언트 (Client): 사용자가 서비스를 만나는 곳

클라이언트는 사용자가 우리 서비스와 상호작용하는 모든 접점을 의미합니다. 다이어그램의 가장 왼쪽에 있는 부분으로, 다양한 형태로 존재합니다.

  • Android/iOS: 스마트폰에서 사용하는 모바일 앱의 화면과 기능을 구성하는 부분입니다. React Native는 React 기술을 사용해 웹뿐만 아니라 모바일 앱 화면을 만드는 데 특화된 프레임워크입니다.
  • Web: PC나 모바일 브라우저를 통해 접속하는 웹사이트 또는 웹 애플리케이션을 의미합니다. 사용자가 가장 흔하게 접하는 클라이언트 형태입니다.
  • IoT (사물인터넷): 스마트 스피커(Alexa), 스마트 워치, 각종 센서처럼 인터넷에 연결되어 서버와 데이터를 주고받는 모든 '사물' 기기를 말합니다. 이들 역시 앱이나 웹처럼 서버와 통신하는 하나의 클라이언트입니다.

## 2. 서버의 관문: 요청을 받고 처리하는 입구

클라이언트에서 보낸 요청은 서버의 특정 '입구'를 통해 들어오게 됩니다. 이 입구는 크게 API 서버와 웹 서버로 나눌 수 있습니다.

  • API 서버 (API Server): **API(Application Programming Interface)**는 애플리케이션끼리 정해진 규칙에 따라 데이터를 주고받을 수 있도록 만든 통신 창구입니다. 클라이언트 앱은 화면을 자체적으로 가지고 있고, 이 API를 통해 서버에 필요한 데이터(Data)만 요청하고 응답받습니다. 예를 들어, 카카오톡에서 친구에게 메시지를 보내면 그 '메시지'라는 데이터가 API를 통해 서버로 전송되는 것입니다.
  • 웹 서버 (Web Server): 웹 서버는 화면을 구성하는 모든 요소(HTML, CSS, 데이터 등)를 가지고 있다가 클라이언트의 요청이 오면 완성된 웹 페이지를 통째로 전달해 줍니다. 모바일 브라우저에서 특정 주소(URL)로 접속해 웹사이트를 보는 것이 바로 웹 서버와 통신하는 대표적인 예입니다.

이러한 서버들은 물리적인 **IDC(Internet Data Center)**에 직접 구축되기도 하지만, 현대의 많은 서비스는 유연하고 확장성이 좋은 클라우드(AWS, GCP 등) 환경 위에 만들어집니다.


## 3. 핵심 로직: 서버의 두뇌와 장기들

서버는 요청을 받으면 다양한 내부 구성 요소들과 협력하여 비즈니스 로직을 처리합니다.

  • 인증과 인가 (Authentication & Authorization): 사용자가 우리 서비스에 접근할 자격이 있는지 확인하는 보안 절차입니다.
    • 인증(Authentication, 승인): '당신이 누구인지' 확인하는 과정입니다. (예: 아이디와 비밀번호로 로그인)
    • 인가(Authorization, 권한): '당신이 무엇을 할 수 있는지' 권한을 확인하는 과정입니다. (예: 일반 사용자는 글 읽기만, 관리자는 글쓰기와 삭제까지 가능)
  • 로깅 (Logging): 서버에서 일어나는 모든 일(요청, 에러, 상태 변경 등)을 기록으로 남기는 것입니다. 이렇게 중앙에 모인 로그는 나중에 서비스의 문제를 추적하거나 사용자 행동을 분석하는 데 중요한 자료가 됩니다.
  • 큐 (Queue): 요청이 한꺼번에 몰릴 때 작업을 잠시 대기시키는 줄과 같은 역할을 하는 미들웨어입니다. 큐를 사용하면 비동기(Asynchronous) 처리가 가능해져 서비스의 효율을 높일 수 있습니다.
    • 동기(Synchronous): 요청을 보낸 후, 응답이 올 때까지 다른 일을 못 하고 기다리는 방식입니다.
    • 비동기(Asynchronous): 요청을 보낸 후, 바로 다른 일을 계속 수행하는 방식입니다. 요청한 작업은 큐에 넣어두고 서버의 다른 서비스들이 여유가 될 때마다 큐에서 작업을 가져가 처리합니다. (작업을 큐에 넣는 것을 Publish, 가져가는 것을 Subscribe라고 부릅니다.)

## 4. 저장소: 데이터를 보관하는 곳

서비스에서 사용되는 모든 데이터는 목적에 따라 각기 다른 저장소에 보관됩니다.

  • 데이터베이스 (Database): 정해진 규칙에 따라 데이터를 체계적으로 저장하고 관리하는 공간입니다.
    • SQL (관계형 DB): 엑셀 시트처럼 행과 열이 있는 테이블 형태의 정형화된 구조로 데이터를 저장합니다. (예: MySQL, PostgreSQL)
    • NoSQL (비관계형 DB): 테이블 형태가 아닌, 훨씬 자유로운 비정형 구조로 데이터를 저장하여 유연하고 확장이 쉽습니다. (예: MongoDB, DynamoDB)
  • 파일 저장소 (File Storage): 이미지, 영상, 문서 등 파일 형태의 데이터를 저장하는 공간입니다. (예: AWS S3)
  • 빅데이터/분석 (Big Data/Analytics): 사용자의 행동 데이터나 서비스 로그처럼 방대하게 쌓인 데이터를 분석하여 비즈니스 인사이트를 얻거나 서비스를 개선하는 데 활용합니다.

## 5. 자동화: 개발부터 배포까지의 과정

개발자가 작성한 코드가 실제 사용자가 이용하는 서비스로 배포되기까지의 과정을 자동화하는 기술입니다.

  • CI/CD: **CI(Continuous Integration, 지속적 통합)**는 개발자들이 작업한 코드를 주기적으로 통합하고 테스트하는 과정을 자동화하는 것이고, **CD(Continuous Delivery/Deployment, 지속적 제공/배포)**는 이 코드를 실제 서버에 자동으로 배포하는 것을 의미합니다. 이를 통해 더 빠르고 안정적으로 서비스를 업데이트할 수 있습니다.
  • 컴파일, 빌드, 배포의 차이:
    • 컴파일(Compile): 개발자가 작성한 소스 코드(Java, C++ 등)를 컴퓨터가 이해할 수 있는 기계어 코드로 변환하는 과정입니다.
    • 빌드(Build): 컴파일된 코드와 각종 리소스 파일들을 하나로 묶어 실제 실행 가능한 파일(JAR, WAR 등)로 만드는 작업입니다.
    • 배포(Deploy): 빌드된 결과물을 실제 운영 서버에 올리고 실행시켜 사용자들이 접근할 수 있도록 하는 최종 단계입니다.