이번 글에서는 웹 개발의 뒷면, 즉 백엔드 웹 개발에 대해 개념을 살펴보고, 백엔드 프로그래밍 언어, 프레임워크, 패키지 매니저, 데이터베이스, 클라우드 컴퓨팅등에 대해서 알아보도록 하겠습니다.
백엔드 개념 및 사용기술 알아보기
1. 백엔드와 프론트엔드
모든 웹 사이트는 프론트엔드와 백엔드 두 부분으로 나눌 수 있습니다. 프론트엔드는 웹 페이지에서 보이는 시각적인 요소들이며, 백엔드는 데이터를 저장하고 관리하는 역할을 합니다. 예를 들어, amazon.com에 접속했을 때, 백엔드는 주문 기록, 프로필 등을 저장하고 검색 결과 등을 불러옵니다.
2. 백엔드와 프론트엔드의 역할
예를 들어, amazon.com에서 쇼핑을 하고 주문을 한다고 가정해 보도록 하겠습니다.
"주문하기" 버튼을 클릭했을 때, 어떤 일이 벌어질까요? 우리가 사용하는 컴퓨터와 아마존의 컴퓨터를 포함한 모든 컴퓨터는 인터넷을 통해 다른 컴퓨터에게 메시지를 보낼 수 있습니다. 간단히 말해, 아마존은 어딘가에 컴퓨터를 갖고 있고, 우리의 컴퓨터는 주문에 대한 메시지를 아마존의 컴퓨터로 보냅니다.
이 상황에서 메시지를 보내는 컴퓨터를 클라이언트라고 부르고, 메시지를 받는 컴퓨터를 서버라고 합니다. 그러나 이러한 일이 발생하기 전에, 컴퓨터는 기본적으로 인터넷에서 메시지를 받을 수 없습니다. 우리는 메시지를 받을 수 있도록 컴퓨터를 프로그래밍해야 합니다. 이를 위해 백엔드 프로그래밍 언어가 필요합니다.
3. 백엔드 프로그래밍 언어와 프레임워크
거의 모든 프로그래밍 언어에는 컴퓨터를 서버로 변환하여 메시지를 받을 수 있게 해주는 기능이 있습니다. 인기 있는 백엔드 프로그래밍 언어로는 JavaScript(일명 node.js라고도 함), Python, Ruby, Java 등이 있습니다. 그러나 백엔드 프로그래밍 언어만 사용하는 것은 실제로 매우 어렵고 많은 양의 코드가 필요합니다.
따라서 이를 개선하기 위해 두 가지 도구를 사용합니다. 백엔드 프레임워크와 패키지 매니저입니다. 백엔드 프레임워크는 더 적은 양의 코드로 서버를 쉽게 생성할 수 있도록 도와줍니다. 각 백엔드 프로그래밍 언어에는 몇 가지 다른 프레임워크가 있지만, 가장 인기 있는 것은 JavaScript의 Express JS, Python의 Django, Ruby의 Ruby on Rails, Java의 Spring입니다.
백엔드에서는 또한 계산이나 데이터베이스와의 통신, 사용자 로그인 및 인증 설정과 같은 일반적인 작업을 수행하기 위해 다른 사람들이 작성한 많은 코드를 사용합니다. 우리는 일반적으로 백엔드에서 많은 패키지를 사용하며, 이러한 패키지를 설치하고 관리하기 위해 패키지 매니저라는 것을 사용합니다.
각 언어에는 자체적인 패키지 매니저가 있습니다. 가장 인기 있는 것은 JavaScript의 NPM, Python의 PIP, Ruby의 Bundler, Java의 Maven입니다. 이러한 것들이 모두 우리가 백엔드 서버를 생성하는 데 필요한 기술입니다. 다음으로 우리가 해야 할 일은 웹 사이트의 데이터를 저장할 곳이 필요합니다. 아마존의 예를 들어보면, 데이터는 로그인 정보, 주문 기록과 같은 사용자 데이터뿐만 아니라 아마존에서 판매되는 모든 제품에 대한 데이터(설명, 평점, 리뷰 등)를 의미할 수 있습니다.
4. 데이터베이스
사용자 데이터와제품 데이터를 저장하기 위해 데이터베이스를 사용합니다. 데이터베이스는 데이터를 저장하고 관리하는 용도로 사용되는 소프트웨어입니다. 일반적으로 다른 컴퓨터에서 실행되는 소프트웨어로, 백엔드가 데이터베이스와 통신할 수 있도록 일부 설정을 해주어야 합니다. 가장 인기 있는 데이터베이스는 MySQL, Postgres, MongoDB입니다.
5. 요청과 응답
프론트엔드에서 주문을 생성할 때, 프론트엔드는 주문 내용을 포함한 메시지를 백엔드로 보냅니다. 백엔드는 주문을 데이터베이스에 저장한 후, 주문이 생성되었다는 응답 메시지를 프론트엔드로 보냅니다. 프론트엔드에서 백엔드로 보내는 메시지를 요청(request)이라고 하며, 백엔드가 보내는 메시지를 응답(response)이라고 합니다. 이를 요청-응답 주기(request-response cycle)라고 하며, 이는 웹 애플리케이션의 작동 방식입니다.
6. 인프라와 클라우드 컴퓨팅
요즘에는 회사들이 자신들의 웹 사이트를 실행하기 위해 컴퓨터를 구매하는 대신 클라우드 컴퓨팅 회사에서 컴퓨터를 임대합니다. 가장 큰 클라우드 컴퓨팅 회사는 AWS(Amazon Web Services), GCP(Google Cloud Platform), Microsoft Azure입니다. 클라우드 컴퓨팅의 기본 개념은 여러분이 컴퓨터들을 임대하는 것입니다.
7.추가적인 기술
마지막으로, 백엔드에서 볼 수 있는 몇 가지 추가 기술을 소개하겠습니다. 앞서 언급한 MySQL, Postgres, MongoDB와 같은 데이터베이스를 주로 사용하는 것을 '주(primary) 데이터베이스'라고 합니다. 일반적으로 우리는 서버와 주(primary) 데이터베이스로 백엔드를 시작하고, 이러한 추가 기술들은 필요에 따라 추가합니다. 이미지 업로드를 허용한다면, 주(primary) 데이터베이스는 이미지 저장에 적합하지 않으므로 AWS Sass와 CloudFront와 같은 블롭(Blob, Binary Large OBject) 저장소를 사용하여 사용자가 업로드한 이미지를 저장하고 불러올 수 있습니다.
텍스트 검색을 허용하려면, 주(primary) 데이터베이스는 텍스트 검색에 대해 매우 느립니다. 따라서 Elasticsearch와 같은 검색 데이터베이스를 추가합니다.
8. 마무리
기술의 발전으로 인해 클라우드 컴퓨팅이 중요한 역할을 맡고 있으며, 프로그래밍 언어, 프레임워크, 데이터베이스, 패키지 매니저 등 다양한 도구와 기술을 조합하여 효율적이고 안정적인 백엔드를 구축할 수 있습니다. 필요에 따라 마이크로서비스와 SaaS를 활용하여 코드 베이스를 관리하고 기능을 확장할 수도 있습니다. 앞으로 더 많은 기술적 발전이 있겠지만 오늘 설명드린 기본 개념을 잘 이해하고 활용한다면 충분히 이해할 수 있으실 것입니다.
오늘은 백엔드의 개념 및 사용기술에 대해서 알아보았습니다. 각 단락의 내용이 어려울 수도 있겠지만 웹 개발에서 프론트엔드와 백앤드 모두 매우 중요한 개념이기 때문에 이해가 될 때까지 여러번 읽어보시는 것을 추천드립니다.