지금까지 근무하며, 백엔드와 프론트엔드를 모두 개발을 했었다. 프론트엔드는 사용자와 직접 닿게 되기때문에, UI/UX 고려하여 화면을 개발하는 직무이고, 백엔드는 프론트엔드에서 전달받은 데이터를 가공하고, 저장하기 위해 보이지 않는 말그대로 뒤에서 동작하는 코드를 개발하는 직무이다.
오늘은 백엔드와 서버는 무엇이고, 정확히 어떤 역할을하고 어떠한 방향성을 갖고 개발을 해야하는지에 대해 스터디한 내용을 기록한다.
먼저 서버의 근본적 의미는 어떠한 물질적 개념이라기 보다는, 역할의 개념이다. 예를 들어 지금 내가 글을 쓰고 있는 맥북에서 네트워크를 통해 사진을 보관해주거나, A지점과 B지점 간의 거리를 계산해서 전달해주거나, 혹은 데이터를 저장해주는 이런 요청을 통해 응답을 하면 내 맥북도 서버가 된다.
즉 받은 요청을 serve
해주는 역할을 하는 것을 서버라고 한다. 그럼 서버에서 전달한 응답을 받는 것은? 클라이언트다.
또 우리가 서버를 개발한다라고 할 때 개발되는 대상인 서버는 어떤 컴퓨터를 서버의 역할을 하도록 해주는 소프트웨어를 의미한다.
Web Server
- HTML
, css
, javascript
, 이미지나 영상 등 정적인 파일을 제공해주는 서버이다.
- 인터넷에 연결되어 웹에 연결된 다른 기기들에 데이터를 주고받을 수 있다.
- 예를들어 상품이나 회사를 소개하는 페이지는 그 안에 있는 내용이 바뀌지 않기 때문에 정적인 컨텐츠를 보내줘도 되는데 이럴 때 웹서버를 사용한다. 또는 이미지나 영상을 저장하거나 보여주는 역할을 하는 서버도 웹서버를 사용한다.
WAS (Web Application Server)
- WAS는 말그대로 응용프로그램을 이용해 단순히 전달하는게 아닌 좀 더 프로그래밍된걸 제공하는 서버를 의미한다.
- 데이터베이스 접속해서 데이터를 조회하거나, 저장하거나 하는 행위를 하는 서버라고 볼 수 있다.
- DB에 접속해 변동되는 데이터를 보내준다거나, 어떠한 변수를 통해 달라지는 컨텐츠를 보내줄 수 있는 서버를 의미한다.
사용자가에게 보여질 화면과 관련된 영역은 웹서버에 배포를 하고, 비즈니스 로직 같은 영역은 WAS에 배포한다.
서버는 위와 같은 역할을 하는 개념인 걸 알았다. 보통 백엔드 개발자는 서버와 관련된 개발을 하는 엔지니어를 의미하는데 좀 더 자세히 알아보자.
먼저 백엔드 개발자는 비즈니스 로직을 개발하는 api개발도 필요하지만 외에도, DB를 핸들링하기 위한 sql 작성도 할 줄 알아야 하며, 나아가서는 전반적인 퍼포먼스 향상을 위해 인프라에도 관심을 갖고 있어야한다.
그러기 위해서는 단순 언어에 대한 지식은 당연히 필요하고, 컴퓨터 공학적인 지식도 필요하다. 나는 비전공자이기 때문에 공학적 부분이 부족하다 판단하여 관련해서 스터디할 예정이다.
지금까지 백엔드에서의 개발은 api 위주로 개발을 했지만 개발자로서의 목표는 다양한 사용자들이 유용하게 이용할 서비스를 개발하는 것이기 때문에 트래픽과 네트워크 그리고 퍼포먼스 관련해서도 공부를 할 예정이다.