사전 백엔드
영역

백엔드

gabury1

사용자가 직접 보지 못하는 쪽에서 일이 벌어지는 자리입니다. 브라우저가 보낸 요청을 받아 처리하고 답을 돌려주는 쪽입니다. 데이터를 담아 두는 자리도 여기입니다. 무엇을 하는 일이냐는 물음의 답이 한 문장이 아니라 목록으로 열립니다.

상세

백엔드는 무엇을 하는지가 아니라 어느 자리인지를 가리키는 말입니다. 자리를 정하는 것은 역할입니다. HTTP(HyperText Transfer Protocol, 하이퍼텍스트 전송 규약)는 클라이언트와 서버로 나뉜 규약입니다. RFC 9110 은 클라이언트를 하나 이상의 HTTP 요청을 보내려고 서버에 연결을 여는 프로그램으로 정의합니다. 서버는 HTTP 요청을 처리해 응답을 보내려고 연결을 받아들이는 프로그램입니다. 같은 문서는 클라이언트와 서버라는 말이 특정 연결에서 그 프로그램이 맡은 역할만 가리킨다고 못 박습니다. 한 프로그램이 어떤 연결에서는 클라이언트로, 다른 연결에서는 서버로 동작할 수 있습니다.

sequenceDiagram
    participant 브라우저
    participant 앱 as 웹 애플리케이션
    participant 디비 as 데이터베이스
    브라우저->>앱: HTTP 요청
    앱->>디비: 조회하거나 갱신
    디비-->>앱: 결과
    앱-->>브라우저: HTTP 응답
    Note over 앱,디비: 데이터베이스를 아예 안 건드리기도 한다

브라우저는 페이지의 링크를 누르거나 폼을 보내거나 검색을 돌릴 때 서버로 HTTP 요청을 보냅니다. 웹 서버는 클라이언트 요청 메시지를 기다립니다. 메시지가 도착하면 처리해서 HTTP 응답 메시지로 답합니다. 응답에는 요청이 성공했는지를 알리는 상태 코드가 들어갑니다. 200 은 성공, 404 는 자원을 찾지 못함, 403 은 그 자원을 볼 권한이 없음입니다.

한 문장 정의가 안 서는 이유가 여기서 드러납니다. 웹 애플리케이션이 하는 일은 HTTP 요청을 받아 HTTP 응답을 돌려주는 것입니다. 데이터베이스와 주고받으며 정보를 얻거나 갱신하는 것은 매우 흔한 일입니다. 다만 그 코드는 같은 시간에 다른 일을 하기도 하고, 데이터베이스를 아예 건드리지 않기도 합니다. 그래서 이 자리에서 무엇을 마주치느냐가 목록으로 열립니다.

돌려주는 것도 한 가지가 아닙니다. 서버 쪽 코드가 응답에 HTML(HyperText Markup Language, 하이퍼텍스트 마크업 언어) 조각이나 파일을 넣어야 하는 것은 아닙니다. 텍스트나 PDF(Portable Document Format), CSV(Comma-Separated Values, 쉼표로 구분된 값) 같은 다른 형식의 파일을 만들어 돌려줄 수도 있습니다. JSON(JavaScript Object Notation)이나 XML(eXtensible Markup Language, 확장 마크업 언어) 같은 데이터를 돌려주기도 합니다. 페이지를 새로 부르는 대신 자바스크립트로 서버 내용을 받아 화면을 고쳐 그리는 웹사이트에서 특히 그렇습니다.

사이트를 동적으로 만드는 부분은 셋으로 갈라 셉니다. HTTP 요청을 처리해 HTTP 응답을 돌려주는 서버 쪽 코드인 웹 애플리케이션, 정보를 담고 있는 데이터베이스, 그리고 HTML 템플릿입니다. 동적 웹사이트는 HTTP 요청에 맞춰 맞춤 정보를 내려주는 웹사이트입니다. MDN 은 주요 웹사이트 대부분이 필요한 데이터를 동적으로 보여주려고 어떤 종류든 서버 쪽 기술을 쓴다고 적습니다.

되풀이되는 일이 많다는 점이 이 자리의 성격을 만듭니다. MDN 은 서버 쪽 프로그래밍을 시작하는 것이 대체로 클라이언트 쪽 개발보다 쉽다고 적습니다. 동적 웹사이트가 아주 비슷한 일을 많이 하는 편이기 때문이라고 이유를 답니다. 데이터베이스에서 데이터를 꺼내 페이지에 보여주기, 사용자가 입력한 데이터를 검증해 데이터베이스에 저장하기, 사용자 권한을 확인하고 로그인시키기 같은 것들입니다. 이런 흔한 일을 쉽게 만드는 웹 프레임워크 위에서 만들어진다는 점도 함께 듭니다.

백엔드는 사람이 그 안에서 일하는 구역이면서 일을 나누는 이름이기도 합니다. MDN 은 서버 쪽을 배우는 사람에게 클라이언트 쪽 코딩에 능숙할 필요는 없다고 적습니다. 다만 기본 지식이 있으면 클라이언트 쪽 웹 프론트엔드를 만드는 개발자들과 일하는 데 도움이 된다고 덧붙입니다. 여러 애플리케이션이 나란히 돌며 서로 이야기하는 구성에서도 같은 낱말이 나옵니다. 어떤 것은 사용자와 주고받는 일을 맡고, 어떤 것은 데이터베이스나 다른 서비스에 접근하는 백엔드 일을 맡습니다.

경계

서버 사이드 렌더링

브라우저에서 도는 코드가 없는 서버 렌더링도 이 자리인가. 맞습니다. 서버 사이드 렌더링은 서버에서 HTML 내용을 만들어 클라이언트로 보내는 것입니다. 클라이언트가 자바스크립트로 HTML 내용을 만드는 클라이언트 사이드 렌더링의 반대쪽입니다. 내용을 만드는 코드가 서버에서 돌기 때문에 이 구역에 듭니다. 서버 쪽 코드가 응답으로 HTML 을 만들어 돌려준다는 정의와 같은 자리입니다.

브라우저 쪽 코드가 없다는 점이 이 판정을 뒤집지 않습니다. MDN 은 그렇게 만든 페이지가 자바스크립트 없이도 어느 정도 쓸 수 있다고 적습니다. 인터넷이 느리거나 사용자가 자바스크립트를 껐거나 브라우저가 낡아 자바스크립트가 실행되지 않는 자리를 예로 듭니다. 다만 상호작용이나 클라이언트 쪽 로직은 동작하지 않는다고 곧바로 덧붙입니다.

서버를 굴리는 일

웹 서버를 설정하는 일도 서버 코드를 짜는 일과 같은 칸인가. 아닙니다. MDN 은 효과적인 웹사이트 보안이 웹사이트 전체에 걸친 설계 노력을 요구한다고 적으면서 그 자리를 넷으로 나눠 셉니다. 웹 애플리케이션, 웹 서버의 설정, 암호를 만들고 갱신하는 정책, 그리고 클라이언트 쪽 코드입니다. 웹 애플리케이션과 웹 서버 설정이 같은 칸이었다면 나눠 적을 이유가 없습니다. 같은 문서가 드는 설정의 예가 웹 서버에 HTTPS(HyperText Transfer Protocol Secure)와 HSTS(HTTP Strict Transport Security, 엄격한 전송 보안)를 쓰도록 맞추는 일입니다. HTTPS 는 클라이언트와 서버 사이에 오가는 데이터를 암호화합니다. 로그인 정보와 쿠키와 POST 요청 데이터와 헤더 정보가 공격자에게 쉽게 넘어가지 않게 합니다.

배포되는 자리를 세어 보면 선이 더 뚜렷해집니다. 프로덕션 환경은 웹사이트를 외부에 내주려고 돌리는 서버 컴퓨터가 제공하는 환경입니다. 여기에는 웹사이트가 도는 컴퓨터 하드웨어, 운영체제, 웹사이트를 짠 언어의 런타임과 프레임워크 라이브러리, 페이지와 그 밖의 내용을 내주는 웹 서버, 동적 요청을 웹사이트와 웹 서버 사이에서 넘겨 주는 애플리케이션 서버, 웹사이트가 의존하는 데이터베이스가 들어갑니다. 구성에 따라 리버스 프록시와 로드 밸런서 같은 것이 더 붙기도 합니다. 코드를 짜는 자리는 그중 하나이고 나머지는 그 코드를 얹는 환경입니다.

이견

이 구역을 어디까지 한 낱말로 묶느냐가 문서마다 갈립니다.

MDN 의 서버 사이드 학습 문서는 브라우저 밖에서 벌어지는 일을 서버 사이드 프로그래밍이라는 한 낱말로 묶습니다. 스스로를 동적 웹사이트를 만드는 법을 보여 주는 묶음이라고 소개합니다. 그 안에 서버 쪽 프로그래밍 일반 소개와 특정 프레임워크의 초급 튜토리얼을 함께 넣습니다. 데이터베이스도 그 묶음 안에 있습니다.

Microsoft 의 Azure Architecture Center 는 같은 자리를 한 낱말로 부르지 않습니다. n-tier 아키텍처 문서는 애플리케이션을 논리적 레이어와 물리적 티어로 나눕니다. 레이어는 책임을 나누고 의존을 관리하는 것이라고 적습니다. 위쪽 레이어는 아래쪽 레이어의 서비스를 쓸 수 있지만 아래쪽 레이어는 위쪽 레이어의 서비스를 쓸 수 없다고 적습니다. 전통적인 3티어 애플리케이션에는 프레젠테이션 티어와 선택적인 미들 티어와 데이터베이스 티어가 있다고 적습니다.

같은 자리를 한쪽은 한 낱말로 묶고 다른 쪽은 이름 붙은 티어로 갈라 셉니다. 데이터를 담는 쪽을 이 구역 안에 넣고 말하느냐 따로 떼어 부르느냐가 문서를 따라 달라집니다.

관련 항목

이 통신을 규정하는 프로토콜과 표준

HTTP · HTTP 요청 · HTTP 응답 · 상태 코드 · RFC 9110 · POST

돌려주는 데이터의 형식

JSON · XML · 콘텐츠 협상 · HTML 템플릿

요청을 실제로 처리하는 방식

라우팅 · API 설계 · REST · 서버 사이드 렌더링 · 웹 프레임워크 · 웹소켓 · 롱 폴링 · 정적 파일 서버 · 폼 검증

데이터를 저장하고 다루는 구성 요소

데이터베이스 · 트랜잭션 · 원자성 · 동시 트랜잭션 · 커넥션 풀 · 캐싱 · 세션 · 쿠키

작업을 뒤로 미뤄 처리하는 방식

작업 큐 · 워커 · 메시지

부하가 늘 때 쓰는 확장 방법과 장치

로드 밸런서 · 수평 확장 · 수직 확장 · 지리적 확장 · 리버스 프록시 · 타임아웃 · keep-alive

백엔드를 서로 다르게 규정하는 문서와 조직

MDN · Microsoft · Azure · n-tier

배포되어 돌아가는 환경

배포 · 프로덕션 환경 · 웹 서버 · 애플리케이션 서버

잘 도는지 살피는 도구와 신호

관측성 · 계측 · 트레이스 · 메트릭 · 로그

접근을 확인하고 지키는 수단

인증 · 인가 · 2단계 인증 · HTTPS · HSTS · TLS

백엔드에서 자주 터지는 공격

교차 사이트 스크립팅 · SQL 인젝션 · 쿠키 탈취 · 권한 상승 · 신원 위조 · 요청 폭주

다른 이름: backend · back end · 서버 사이드 · server-side · 서버 쪽