Serve + -er
서버라는 단어는 IT 계열에서도 사용하지만, 홀서빙을 하는 직원 역시 서버라고 한다.
우리가 음식점에서 음식을 시킬 때, 다음과 같은 일련의 과정을 거친다.
1. 손님은 서버에게 먹고 싶은 음식을 주문한다.
2. 서버는 직원에게 손님에게서 받은 주문서를 건넨다.
3. 직원은 요리사에게 주문서를 전달한다.
4. 요리사는 음식을 해서 직원에게 준다.
5. 직원은 서버에게 음식과 여러 식기를 추가해서 준다.
6. 서버는 손님에게 주문한 음식을 준다.
1. 클라이언트는 서버에 request를 위한 파일을 넘긴다. (예시 - LogIn.java)
2. 서버는 파일을 이해할 수 없으므로 Backend Language로 파일을 넘긴다.
3. Backend Language는 해당 파일을 해석한 후 원하는 데이터를 얻기 위해 DBMS로 쿼리문을 넘긴다.
4. DBMS가 쿼리문을 처리하고 도출된 데이터를 Backend Language로 넘긴다.
5. Backend Language는 건네받은 데이터를 가공하여 서버에게 넘긴다.
6. 서버는 클라이언트에게 원하는 데이터를 제공한다.
컴퓨터는 요청이 들어오면 위와 같은 과정을 거친다.
그렇다면, 지금 우리가 공부하고 있는 “백엔드”는 위 과정 중 어느 부분에 해당할까?
요새는 DB 엔지니어가 분리되어 있긴 하지만,
대체로 백엔드는 서버, Backend Language, DB/DBMS를 아우른다.
우리가 사용하는 서비스들은 위와 같이 서버-클라이언트 2가지 방향으로만 동작하지 않는다.
우리는 여러 서비스에서 “카카오톡으로 로그인하기”나 “네이버로 로그인하기”라는 버튼을 본 적 있을 것이다. 이러한 oAuth의 과정은 어떻게 될까?
사실 위 그림이 진짜 oAuth 과정은 아니지만 직관적으로 이해를 돕기 위해 위와 같이 작동한다고 생각해보자.
클라이언트는 카카오 로그인을 위해 서버에 카카오 ID/PW를 전달하고
서버는 이를 받아 다시 카카오로 보낸다.
위 과정에서 서버는 어떤 역할일까?
정답은 서버와 클라이언트 역할을 동시에 하는 것이다.
즉, 사용자의 입장에서는 서버로 작동하며,
카카오 입장에서는 클라이언트가 되는 상대적인 역할인 것이다.
또한, 클라이언트와 서버는 N:1의 관계로, 여러 클라이언트가 하나의 서버에 요청할 수 있다.
우리는 종종 길을 찾을 때 검색을 해본다.
그러면 검색 엔진은 지도 뿐만 아니라, 다음과 같은 주소를 제공한다.
위도, 경도와 같이 정형화된 지표가 아닌,
도로명주소나 지번주소, 우편주소와 같이 사람들이 이해하기 편한 형태로 제공된다.
그렇다면, 컴퓨터에서 네이버에 접속하려면 어떻게 해야할까?
www.naver.com이라는 도메인 네임을 입력한다.
위와 같은 도메인 네임은 사람들이 이해하기 편한 형태의 주소이다.
스타벅스의 도로명주소나 지번주소, 우편주소와 도메인이 대응된다고 할 수 있다.
그렇다면, 위도/경도에 해당하는 실제 위치값은 인터넷에서 무엇이라고 할까?
IP 주소라고 한다.