Loading the catalog…
Loading the catalog…
기록은 중요하다. 머릿속에는 그동안 공부하며 배운 내용과 경험들이 꽤 많이 쌓여 있다. 하지만 막상 누군가에게 설명하려고 하면 생각보다 잘 정리되어 있지 않다는 걸 자주 느낀다. 분명 알고 있다고 생각했는데, 정확히 설명하려고 하면 막히는 순간도 많았다. 그래서 이제부터는 내가 배운 것들을 하나씩 기록해보려고 한다. 단순히 공부한 내용을 옮겨 적는 것이 아니라, 내가 무엇을 알고 있고 무엇을 제대로 이해하지 못하고 있는지 직접 확인하면서 정리해보고 싶다. 궁금한 부분이 생기면 조금 더 깊게 파고들고, 그 과정에서 알게 된 것들도 함께 남겨보려 한다. 그 시작으로 가장 익숙하면서도, 막상 정확히 설명하려면 조금 애매한 개념부터 다뤄보려고 한다. 서버란 무엇이고, 백엔드란 무엇일까? 서버(Server)란 무엇일까? 서버(Server)는 다른 프로그램이나 컴퓨터에게 어떤 서비스나 자원을 제공하는 쪽 이다. 여기서 가장 중요하다고 생각한 것은 바로 ‘제공하는 쪽’이라는 말이다. 어떤 브라우저에서 링크를 눌러 하나의 웹 서비스에 접속했다고 생각해보자. 브라우저는 서버에게 요청을 보낸다. "이 페이지 주세요." 그러면 서버는 요청을 받아 HTML이나 필요한 데이터를 브라우저에게 돌려준다. 이 관계에서 브라우저처럼 무언가를 ‘ 요청’하는 쪽 을 ‘클라이언트(Client)’라고 하고, 그 요청을 받아 서비스나 자원을 ‘ 제공’하는 쪽 을 ‘서버(Server)’라고 한다. server 라는 단어 자체도 영어 serve , 즉 무언가를 제공하거나 응대한다는 말과 연결되어 있다. 식당에서 손님에게 음식을 제공하는 사람을 server라고 부르는 것을 생각하면 조금 더 쉽게 이해할 수 있다. 그래서 서버라는 개념은 특정한 컴퓨터를 가리키는 말이라기보다, 먼저 역할에서 시작하는 개념 이라고 보는 것이 좋다. 예를 들어 어떤 프로그램이 GET /hello 라는 요청을 받았을 때 Hello 라고 응답한다고 해보자. 이 프로그램은 요청을 받아 무언가를 제공하고 있으므로 서버의 역할을 하고 있다고 볼 수 있다. 그런데 우리는 왜 서버를 컴퓨터라고 생각할까? 흔히 이런 말을 한다. 어떤 회사의 서버 게임 서버 서버가 터졌다. 서버가 불탔다. 이런 표현들을 많이 접하다 보니 자연스럽게 서버를 하나의 컴퓨터라고 생각하기 쉽다. 하지만 개발에서 이야기하는 서버는 흔히 ‘서버 프로그램(Server Software)’을 의미한다. 실제로 요청을 받고, 처리하고, 결과를 제공하는 것은 프로그램이기 때문이다. 다만 현실에서는 그 서버 프로그램이 실행되는 컴퓨터 자체 도 서버라고 부른다. 그래서 우리가 흔히 사용하는 ‘서버’라는 단어에는 크게 세 가지 의미가 섞여 있다. 역할 요청을 받아 서비스나 자원을 제공하는 쪽 소프트웨어 실제로 요청을 받고 처리하는 프로그램 자체 컴퓨터 그 서버 프로그램이 실행되는 물리적인 컴퓨터나 가상 머신 문맥에 따라서 이 셋을 모두 ‘서버’라고 부를 수 있는 것이다. 그렇다면 서버는 꼭 요청을 받고 응답하는 것일까? 웹을 기준으로 생각하면 보통 이런 모습을 떠올릴 수 있다. Client → Request → Server Client ← Response ← Server 클라이언트가 ‘요청’하면 서버가 ‘응답’한다. 틀린 설명은 아니다. 하지만 서버의 본질을 HTTP의 ‘요청과 응답’만으로 정의하면 범위가 조금 좁아진다. 서버에는 웹 서버만 있는 것이 아니기 때문이다. 데이터를 제공하는 데이터베이스 서버 도 있고, 파일을 제공하는 파일 서버 도 있으며, 이메일 송수신 기능을 제공하는 메일 서버 도 있다. 각 서버가 제공하는 서비스나 자원의 종류가 다를 뿐이다. 따라서 서버를 조금 더 일반화해서 정의해보면 다음과 같이 생각할 수 있다. 서버란 네트워크를 통해 다른 프로그램이나 시스템에게 특정 기능, 데이터 또는 자원을 제공하는 프로그램이나 시스템이다. 무엇을 제공하는지는 서버마다 다르다. 하지만 결국 무언가를 ‘제공’하는 쪽 이라는 서버의 기본적인 역할은 변하지 않는다. 여기서 한 가지 짚고 넘어갈 점은 클라이언트와 서버는 고정된 신분이 아니라 역할이라는 것 이다. 예를 들어 웹 브라우저가 어떤 웹 서비스에 요청을 보낼 때는 브라우저가 클라이언트이고 웹 서비스가 서버이다. 하지만 그 웹 서비스가 다시 데이터베이스에 데이터를 요청한다면, 이번에는 웹 서비스가 클라이언트가 되고 데이터베이스가 서버가 된다. 즉 하나의 프로그램도 어떤 관계에서는 서버가 될 수 있고, 다른 관계에서는 클라이언트가 될 수 있다. 결국 중요한 것은 프로그램의 이름이 아니라 누가 ‘요청’하고, 누가 ‘제공’하는가 이다. 그렇다면 백엔드는 무엇인가 핵심부터 이야기하면, 백엔드(Backend)는 이름에서도 알 수 있듯이 서비스의 뒤쪽(Back) 영역이다. 사용자의 눈에 직접 보이지 않는 부분이라고 생각할 수도 있다. 하지만 단순히 보이지 않는다는 것 보다 중요한 것은 백엔드가 서비스의 데이터와 로직을 처리한다는 점 이다. 예를 들어 쇼핑몰을 생각해보자. 사용자는 화면에서 상품 목록을 보고, 장바구니 버튼을 누르고, 결제 버튼을 누르고, 자신의 주문 내역을 확인한다. 이처럼 사용자가 직접 보고 상호작용하는 화면과 UI는 주로 프론트엔드의 영역이다. 그런데 사용자가 결제 버튼을 누르면 어떻게 될까? 먼저 프론트엔드는 사용자의 클릭이라는 입력을 처리하고, 필요한 경우 백엔드에 요청을 보낸다. 그러면 백엔드에서는 여러 가지 일이 일어날 수 있다. 로그인한 사용자가 맞는지 확인하고, 상품의 재고를 확인하고, 가격을 계산하고, 쿠폰을 적용하고, 결제를 처리하고, 주문 정보를 저장한다. 우리가 서비스를 이용하면서 당연하게 생각했던 수많은 흐름이 뒤에서 처리되고 있는 것이다. 이러한 비즈니스 로직과 데이터 처리 를 담당하는 부분이 백엔드이다. 그렇다면 백엔드는 서버인가? 완전히 같은 말은 아니다. 앞서 이야기했듯 서버는 어떤 서비스를 ‘ 제공’하는 역할 을 중심으로 바라보는 개념이다. 반면 백엔드는 웹이나 앱 서비스에서 특정한 일을 담당하는 ‘ 영역’ 에 가까운 개념이다. 조금 단순하게 생각하면, 서버는 ‘누가 서비스를 제공하는가’를 바라보는 개념이고,백엔드는 ‘서비스 뒤에서 어떤 일을 처리하는가’를 바라보는 개념이다. 처음에는 이 구분이 조금 헷갈렸다. 예를 들어 어떤 프레임워크로 만든 프로그램이 회원가입 API를 제공한다고 해보자. POST /users 이 프로그램은 클라이언트의 요청을 받아 회원가입이라는 서비스를 제공한다. 그렇기 때문에 서버 역할을 하는 프로그램 이라고 할 수 있다. 동시에 그 내부에서는 입력된 데이터를 검증하고, 회원 정보를 데이터베이스에 저장하고, 회원가입에 필요한 여러 로직을 처리한다. 따라서 이 프로그램은 백엔드 애플리케이션 이기도 하다. 즉 하나의 프로그램을 서로 다른 관점에서 바라보는 것이다. Server의 관점 → 클라이언트의 요청을 받고 서비스를 제공한다. Backend의 관점 → 서비스에 필요한 로직과 데이터를 처리한다. 그래서 실제 개발에서는 같은 대상을 두고 "서버를 개발한다." 라고 말하기도 하고, "백엔드를 개발한다." 라고 말하기도 한다. 두 개념이 자주 함께 등장하고 실제로 겹치는 부분이 많기 때문에 비슷한 의미로 사용되지만, 개념적으로 완전히 같은 말은 아니다. 지금처럼 바이브 코딩을 통해 누구나 빠르게 서비스를 만들 수 있는 환경에서는 코드를 직접 하나하나 작성하지 않고도 꽤 그럴듯한 서비스를 만들어낼 수 있다. 하지만 내가 만들고 있는 서비스가 어떤 구조로 동작하는지 , 사용자의 요청이 어떤 로직을 거쳐 처리되는지 , 데이터가 어디에 저장되고 어떻게 사용되는지 , 그리고 그 데이터를 어떻게 안전하게 다뤄야 하는지 를 이해하려면 결국 서비스의 뒤쪽을 알아야 한다고 생각한다. 단순히 ‘동작하는 프로그램’을 만드는 것을 넘어, 내가 무엇을 만들고 있는지 이해하는 사람이 되고 싶다. 좋은 개발자로, 그리고 좋은 기획자로 성장하기 위해 앞으로도 내가 당연하게 사용해왔지만 정확하게 설명하지 못했던 것들을 하나씩 공부하고 기록해보려고 한다. 최대한 꾸준히.
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
당연하게 쓰던 ‘서버’와 ‘백엔드’를 다시 이해해보기. 기록은 중요하다. 머릿속에는 그동안 공부하며 배운 내용과 경험들이 꽤 많이 쌓여 있다. 하지만 막상 누군가에게 설명하려고 하면 생각보다 잘 정리되어 있지 않다는 걸 자주 느낀다. 분명 알고 있다고 생각했는데, 정확히 설명하려고 하면 막히는 순간도 많았다. 그래서 이제부터는 내가 배운 것들을 하나씩 기록해보려고 한다. 단순히 공부한 내용을 옮겨 적는 것이 아니라, 내가 무엇을 알고 있고 무엇을 제대로 이해하지 못하고 있는지 직접 확인하면서 정리해보고 싶다. 궁금한 부분이 생기면 조금 더 깊게 파고들고, 그 과정에서 알게 된 것들도 함께 남겨보려 한다. 그 시작으로 가장 익숙하면서도, 막상 정확히 설명하려면 조금 애매한 개념부터 다뤄보려고 한다. 서버란…
Open source