본문 바로가기

컴퓨터 사이언스

프론트엔드와 백엔드가 나눠진 이유?

프로그래머가 되려고 하는 사람들이 처음 맞닥트리는 질문이 

 

'그래서 배우려고 하는게 프론트엔드(front-end)야 백엔드(back-end)야?'

 

이다. 입문자들은 대체 프론트엔드는 뭐고 백엔드는 뭔가 싶어서 찾아보게 되는데, 사실 이 두 종류의 개발자들은 원래 '웹개발자'라는 하나의 직군에서 출발했다가 웹 환경이 발전하면서 나뉘게 된 케이스다. 

 

크게 나눠보면 프론트엔드는 

builds websites, designs applications and ensures overall user accessibility

 

웹사이트를 만들고 응용 프로그램을 디자인하며 유저 접근성에 관한 모든 것들을 다루는 직무로,

 

백엔드는 

responsible for building the structure of a software application

 

소프트웨어의 구조를 만드는 직무로 정의한다.

 

즉, 유저의 눈에 보이는 부분을 프론트엔드가, 유저의 눈에 보이지 않는 구조를 백엔드가 담당하는 것이다. 

 

사실 프론트엔드 백엔드의 개념은 이미 좋은 정리된 글이 많아 따로 정리할 필요는 없다고 본다. 해당 개념이 궁금하다면 아래의 링크를 타고 가보자.

 

https://www.conceptatech.com/blog/difference-front-end-back-end-development

 

What Is the Difference Between Front-End and Back-End Development?

Front-end developers work on what the user can see while back-end developers build the infrastructure that supports it.

www.conceptatech.com

사대주의자라 영어로 된 개념을 더 좋아한다.

 

 

우리가 해야할 질문은 '왜 프론트엔드와 백엔드로 웹개발자가 나누어지는가?'이다.

 

여기서 클라이언트 서버 아키텍처Client Server Architecture라는 개념이 등장한다.

 

말 그대로 Client라는 사용자가 가진 단말 프로그램 관련 부분과 Server 라는 중앙 관리 프로그램 및 데이터베이스 관련 부분에 대한 설계(Architecture)를 말한다.

 

지금 비행기 모드로 인터넷을 차단하고 휴대폰에서 쿠팡을 켠다면 쿠팡이라는 어플리케이션이 응답은 하지만 콘텐츠가 없는 모습을 볼 수 있다. 

 

 

상품이 보이지 않는다.

 

앱은 실행이 되었지만 우리가 상품 목록을 볼 수 없는 이유는 서버로부터 데이터를 받아오지 못했기 때문이다.  이 말은 앱을 실행하는 최소한의 껍데기는 사용자가 클라이언트 프로그램Clinet program으로 다운 받아 가지고 있지만, 콘텐츠를 제공하는 부분은 인터넷 어딘가에 있는 서버 프로그램Server program에 있다는 것이다. 

 

이렇게 나누어 놓은 이유는 간단하다. 만약 클라이언트 프로그램에 모든 콘텐츠를 담는다면 업데이트가 어려워진다. 온라인 쇼핑몰의 경우 수량에 따라, 신제품 출시에 따라 바로 바로 콘텐츠를 변경해주어야 하는 경우가 자주 발생하기 때문에 서버에서 통제하는 것이다. 만약 제품이 하나 출시 될 때마다 앱을 업데이트 해야한다면 아무도 쿠팡을 사용하지 않을 것이다.

 

이처럼 리소스를 이용하는 곳과 리소스를 제공하는 곳을 나누어 놓는 것을 '클라이언트-서버 아키텍처' 또는 '2-tier architecture'라고 한다.

 

클라이언트 서버 아키텍처 예시

 

우리가 앱스토어나 플레이스토어를 통해 다운 받은 앱을 클라이언트 프로그램이라고 하며 이 프로그램은 서버에서 주는 데이터를 조회하는 기능을 담당한다. 그리고 이 부분에 대한 개발을 바로 프론트엔드가 맡는 것이다.

 

반대로 데이터를 제공해주는 서버에 대한 개발을 백엔드가 맡는다. 이런 구조 설계상 발생하는 담당 분야의 차이로 인해 백엔드와 프론트엔드가 나누어지는 것이다. 물론 이 두 직무를 모두 하는 사람도 있는데 이를 풀스택 개발자라고 한다. 

 

참고로 서버를 데이터베이스와 나눈 3-tier architecture도 존재한다. 이는 데이터를 호출하고 전송하는 역할을 하는 서버server와 데이터를 저장해 놓는 데이터베이스database를 나누어 놓은 것으로 서버와 데이터베이스 모두 백엔드 개발자의 몫이다. 

 

결론: 프론트엔드와 백엔드가 나누어진 이유는 클라이언트와 서버로 나누어진 구조 설계 때문이다.