[서버] 서버개발의 의미

2020. 4. 27. 17:33TIL/웹

나는 '어떤 프로그래밍 공부해?' 라는 질문에 '백엔드 프로그래밍 공부중이야' 라고 답해왔다.

실제로 내가 공부해왔고 지금도 공부하고 있는 내용은 분명 '백엔드 공부'라고 말할 수 있을 것이다. 

그러던 어느날 여러 채용공고를 둘러보던중에 '서버 개발자'를 모집하는 곳이 있고,

'백엔드 개발자'를 모집하는 곳이 있다는 사실을 알게되었다.

두 개발자가 명확히 다른 직무를 뜻하는는 것인지,

아니면 같은맥락 속에서 그 디테일이 다른것인지 너무나 궁금해져서 이러한 정리가 시작되었다.

 

 

결론부터 말하자면, 내가 포인트를 둬야 할 부분은 '서버'냐 '백엔드'냐 그러한 용어의 차이가 아니라는 것이었다.

'서버 개발'과 '백엔드 개발'은 서로 같은맥락으로 사용되고 있으며, 중요한 것은 서버가 사용되는 큰 흐름을 이해하고 그 서버를 개발한다는 것이 무엇을 의미하는 것인지 아는 것이었다. 

컴퓨터 네트워크 과목에 흥미를 느껴서 정말 열심히 공부했던 기억이 있다. 그 학기에는 거의 대부분의 공부시간을 '컴퓨터 네트워크' 공부에 할애하였었다. 당시에 내 나름대로 정의내린 '서버'란

클라이언트로부터 받은 요청을 처리하고 응답해주는 역할을 하는 일명 Client-Server 형태를 구성하는 구성원 이었다. 그렇다면 이러한 서버를 개발한다는 것은 무엇을 의미할까?

여러 검색을 통해 내 나름대로 정리를 해보게 되었다.

 

먼저, 애플리케이션 개발을 크게 두 종류로 나눌 수 있다고 한다. (물론 구체적으로 나누면 끝도없겠다.)

1. PC/Phone Application - 사용자의 기기에서(PC 또는 Phone) 동작하는 프로그램을 개발하는 것이다.

2. Web Application - '인터넷'을 통해 흔히 웹 브라우저를 통해 이용할 수 있는 '온라인 서비스'를 만드는 것이다.

내가 '백엔드 개발자가 되어야겠다'라고 생각을 하게 된 것은 분명 2번 Web Application개발의 측면이었다.

이러한 웹의 중심은 인터넷이다. '클라이언트'와 '서버'는 인터넷을 통해 서로 연결이 되어있다. 

Client와 Server를 연결하는 인터넷

서버는 클라이언트에게 매우 다양한 데이터를 인터넷을 통해 제공하는데, 인터넷에는 이러한 서버가 매우 많이 연결되어있는 것이다.

우리는 이러한 공간을 World Wide Web이라고 이름 짓고 줄여서 웹이라고 부르고 있다. 

따라서, 웹 개발을 한다는 것은 웹이라는 공간에서 서비스하는 어떠한 프로그램을 개발한다고 이해하면 되겠다.

위의 내용을 통해 웹 개발이 의미하는 것이 무엇인지는 감이 올 것이다. 

이러한 웹 개발이 클라이언트 측에서 실행되는 Front-End개발과 서버 측에서 실행되는 Back-End개발로 나누어 지는 것이다.

각각의 구체적인 역할에 대해서는 시간이 되면 따로 [웹]파트로 정리를 해야겠다.

이 글에서는 Back-End개발 즉, 서버개발이 구체적으로 무엇을 의미하는지 정리할것이다.

 

'클라이언트로부터의 요청을 처리하고 응답한다.'라는 서버에 대한 나의 정의는 여러 글을 보아도 반박의 여지가 없다.

그렇다면, 서버개발을 한다는 것은 어떠한 요청을 처리하고 응답하는 로직을 가진 무엇인가를 개발하는 것이라고 추측해 볼 수 있다.

이러한 로직을 처리하기 위해서는 여러 종류의 서버들이 상호작용하게 되는데, 이 전체적인 과정을 Back-End라고 볼 수 있다. 

 Back-End는 위와같이 여러 요소들이 상호작용 하는 전반적인 과정이다.

백엔드와 서버의 용어차이가 헷갈리더라도 이것에 불만을 갖지말자.

결국엔 '클라이언트의 요청에 대한 응답'을 하는 과정에 사용되므로 Back-End와 서버를 흔히들 같은 의미로 사용한다.

 

위의 그림에서 '백엔드 개발', '서버 개발'은 어떠한 서버를 개발하는것을 의미할까?

대부분의 경우 어플리케이션 서버 즉, WAS개발을 의미한다고 한다. 

이것을 이해하기 위해 각 구성요소에 대해 간단히 이해하고 넘어가야 할 것이다.

 

먼저, 웹서버는 클라이언트의 요청을 해석하는 역할을 한다.

인터넷에서 클라이언트와 서버가 통신을 하기위해서는 HTTP라는 프로토콜을 이용해야 하는데,

클라이언트가 이 HTTP를 통해 보낸 요청의 내용이 어떠한 내용인지 해석하는 역할을 하는것이 웹서버인 것이다.

이 요청에는  GET/PUT/POST/LINK등이 있는데, 서버에게 어떠한 행동을 요구하는지를 뜻하는 것이다.

(HTTP 메세지의 구조등은 따로 정리를 한번 해야겠다.)

서버에게 어떠한 행동을 요청하는지를 해석한 웹서버는, 실질적으로 이것을 해석할 수 있는 요소에게 그 내용을 전달해 주는데, 그 요소가 바로 어플리케이션 서버(WAS)인 것이다. 

 

어플리케이션 서버를 살펴보기전에, 데이터베이스의 역할을 먼저 아는 것이 좋겠는데,

데이터베이스는 어플리케이션 서버가 요청을 처리하기위해 필요한 정보들을 담고 있는 장소이다.

이렇게 웹서버를 통해 요청을 전달받은 어플리케이션 서버는 데이터베이스에서 정보를 가져오거나, 데이터베이스에 정보를 저장하는 등의 동작을 한다음, 이것에 대한 가공된 결과물(또는 저장되었다는 메시지등)을 웹서버에게 전달해 준다.

어플리케이션 서버로부터 결과물을 받은 웹 서버는 그것을 클라이언트가 볼 수 있는 HTML형태로 바꾸어 전달해준다.

 

위의 내용을 통해 '백엔드 개발' 또는 '서버 개발'이 어플리케이션 서버를 주로 의미한다는 것을 알았고, 그것이 요청방식에 따라 데이터베이스와 통신하며 정보를 가공하거나 저장하는등의 역할을 하는 서버임을 이해하였다. 

 

그렇다고 '서버 개발이란 어플리케이션 서버 개발이다' 라고 좁게 생각하지는 말자.

내가 '서버 개발자 채용' 공고들을 보면서 '내가 생각한 서버 개발과 왜이렇게 내용이 다르지?', '내가 공부하는 것이 서버개발 공부가 맞나?' 라고 헷갈렸던 이유는, 어플리케이션 서버만을 고려했기 때문이다.

'서버 개발'에는 웹서버 개발도 있을 수 있고, 어플리케이션 서버 개발도 있을 수 있고, 심지어는 데이터베이스를 중점적으로 하는 개발도 있다. 백엔드를 이루는 각 요소들에 대한 이해와, '내가 하고자 하는 서버 개발'이 의미하는 것이 무엇인지를 명확히 아는 것이 참으로 중요하겠다. 

 

 

 

 

 

 

 

'TIL > ' 카테고리의 다른 글

[웹] 빌드와 배포  (1) 2020.06.19
[웹] REST  (0) 2020.05.18
[웹] MVC 패턴  (0) 2020.05.18
[빌드툴] Maven  (0) 2020.05.13
[서버] 웹서버와 WAS  (3) 2020.05.07