Backend
Behind every great screen is an even greater server.
— 어딘가의 백엔드 전도사.
사용자 눈에는 보이지 않지만, 서버 터지면 새벽 3시에 전화벨을 울리게 만드는 만악의 근원(?)이자 시스템의 심장. 겉으로는 평화로워 보이지만 속은 온갖 레거시 코드와 스파게티 쿼리로 굴러가는 겉바속촉의 정석
1. 개요
백엔드(Backend)란 웹 애플리케이션이나 서비스에서 사용자가 직접 보거나 상호작용하지 않는 뒷단(Behind the scenes)의 모든 로직과 인프라를 의미한다. 프론트엔드가 화려한 디자인과 부드러운 애니메이션으로 사용자를 홀리는 꽃밭이라면, 백엔드는 그 꽃밭 아래에서 석탄을 집어넣으며 증기기관을 돌리는 지옥의 엔진룸이라 할 수 있다.
사용자가 로그인 버튼을 누르거나 장바구니에 상품을 담을 때, 뒤에서 데이터베이스를 조회하고, 인증 토큰을 검증하며, 결제 게이트웨이와 통신하는 모든 복잡하고 엄밀한 작업이 바로 이 백엔드 영역에서 일어난다.
2. 주요 역할 및 구성 요소
2.1. 웹 서버 및 WAS
백엔드의 최전방 수문장이다. Nginx 나 Apache 같은 웹 서버는 사용자의 요청을 가장 먼저 받아 정적 파일(HTML, CSS, 이미지)을 던져주거나, 동적 처리가 필요한 요청을 WAS(Web Application Server)로 넘겨주는 역할을 한다. WAS는 Spring Boot, Node.js, Django 같은 프레임워크로 작성된 비즈니스 로직의 본진이며, 여기서 진짜 프로그래밍 언어들이 열심히 일을 하며 데이터를 가공한다.
2.2. 데이터베이스 및 캐시
아무리 코딩을 기가 막히게 짜도 사용자의 정보와 구매 내역이 저장되지 않는다면 서비스는 유지될 수 없다. 백엔드 개발자는 MySQL이나 PostgreSQL 같은 RDBMS는 물론이고, MongoDB 같은 NoSQL 데이터베이스까지 다루어야 한다. 여기에 더해 서비스 규모가 커지면 데이터베이스의 부하를 줄이기 위해 Redis 같은 메모리 기반 캐시 서버를 추가로 고용하게 된다. 이때부터 아키텍처가 꼬이기 시작한다.
3. 관련 밈 및 드립
3.1. 서버 터짐과 내 컴퓨터에선 되는데?
개발 단계에서 분명히 완벽하게 돌아갔던 코드가 실제 서비스(Production) 환경에 배포되자마자 뻗어버리는 현상은 백엔드의 유구한 전통이다. 이때 백엔드 개발자가 무의식적으로 내뱉는 방어 기제 1순위가 바로 "어? 내 컴퓨터에선 잘 되는데?"이다.1
서버가 터지면 프론트엔드 개발자는 "서버 터짐 ㅠㅠ"이라는 에러 화면을 예쁘게 그려서 띄우는 반면, 백엔드 개발자는 터진 로그를 뒤지며 땀을 뻘뻘 흘리는 노예가 된다.
3.2. 프론트엔드와의 보이지 않는 전쟁
- 프론트엔드: "서버에서 데이터 포맷을 이렇게 보내주시면 안 돼요?"
- 백엔드: "그건 프론트엔드 단에서 가공해서 쓰시는 게 맞을 것 같은데요."
- 프론트엔드: "하지만 API 사양서에는 그렇게 적혀 있었는데요?"
- 백엔드: "아, 그 사양서는 어제부로 레거시가 되었습니다."
실제로 API 스펙 조율과 데이터 정제 책임을 두고 두 진영 간에 끝없는 핑퐁 게임이 벌어지곤 한다. 결국 힘의 논리나 야근하기 싫은 쪽이 양보하게 된다.
4. 여담
- 잘해야 본전인 보이지 않는 영웅: 서비스가 아무런 탈 없이 365일 24시간 잘 돌아가면 사용자들은 백엔드 개발자가 있는지조차 모른다. 반대로 서비스가 5분만 장애가 나도 세상 모든 욕이란 욕은 백엔드 개발자가 다 처먹는다. 즉, 잘해야 본전인 극한 직업군이다.
- 자바 공화국의 한국 IT: Java 진영(Spring), JavaScript 진영(Node.js), Python 진영(Django/FastAPI), Go 진영 등 백엔드를 개발할 수 있는 언어와 프레임워크가 너무 많다 보니, 신입 개발자들은 무엇을 배워야 할지 늘 깊은 고민에 빠진다.
하지만 한국에선 결국 전자정부 프레임워크와 자바의 늪으로 끌려오게 되어 있다.2 - DevOps까지 다 하는 인프라 노예: 최근에는 클라우드(AWS, GCP 등)와 Docker, Kubernetes 등의 대중화로 백엔드 개발자가 인프라 및 배포(DevOps) 영역까지 떠맡는 경우가 허다해졌다. 덕분에 코딩보다 인프라 설정 YAML 파일 복사 붙여넣기에 더 많은 시간을 쓰는 자신을 발견하게 된다.
5. 관련 문서
각주
-
이 문제를 완벽히 해결하겠다고 나온 구세주가 바로 Docker이다. "그럼 네 컴퓨터를 그대로 패키징해서 서버에 올려라"라는 철학. ↩
-
SI 업계나 대기업을 불문하고 한국 IT 생태계의 뼈대는 사실상 Java와 Spring Boot로 고정되어 있다. ↩
이 문서를 가리키는 문서
- API 게이트웨이
- API Key
- CI/CD
- CORS
- CSS
- 데이터베이스
- Django
- Docker
- 전자정부 프레임워크
- Frontend
- Git
- Git 브랜치 전략
- GitHub
- HTTP
- Java
- JavaScript
- JWT
- 메시지 브로커
- 마이크로서비스 (Microservices)
- MVC 패턴 (Architectural Pattern)
- Nginx
- Node.js
- NoSQL
- OAuth
- ORM
- Python
- Redis
- REST API
- 서버리스 (Serverless)
- 세션 인증 (Session Authentication)
- Spring Boot
- SQL
- WAS (웹 애플리케이션 서버)
- 웹 개발자
- Web Server