우리 팀의 백엔드 개발자가 그만두게 되었다.
프론트 개발자, 백엔드 개발자 한명씩 있던 팀이였는데 백엔드 개발자가 나가며 프론트 개발자가 백엔드 코드 인수인계를 받게 되었다.
그리고 그 프론트 개발자가 나다 우하하하!
백엔드 인수인계를 받고 급하게 백엔드 공부를 하며 배운 것을 정리했다.
나는 인수인계를 받기 전에 백엔드에 대해서 1도 몰랐으며 프론트 개발 경력 밖에 없었다. 백엔드에 대해 아는 것이 단 하나도 없고 어디서부터 시작해야 될지 모르겠는 사람들과 프론트에서 풀스택으로 넘어가려는 사람들에게 도움 되는 글이길 바란다.
이번 글을 이론 위주의 글이며 다음 글로 실습 위주의 글을 작성할 예정이다.
나아가기 앞서 아래의 영상에서 백엔드에 대해 정말 자세하고 시각적으로 가르쳐주기 때문에 시청하는 것을 추천한다.
⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄⌄
백엔드 기초 영상 (영어)
^^^^^^^^^^^^^^^
백엔드, 데이터베이스, 서버는 위와같은 상관 관계를 가졌다.
더 자세한 설명을 위해 유저가 회원가입을 하는 시나리오를 예시로 들어 각 부분이 어떤 역할을 하는지 알아보겠다.
백엔드는 "코드"를 실행하는 부분이다. 다시 말해 if, else, for, while등 흔히 프로그래밍 언어에서 볼 수 있는 조건문, 반복문 같은걸 실행하는 부분이다. 모든 "논리"는 여기서 처리하게 된다.
1) 클라이언트가 회원가입에 필요한 정보를 받아온다 (유저가 입력한 아이디, 비밀번호, 이름, 등등)
2) 클라이언트가 백엔드한테 회원가입을 요청과 동시에 유저 정보를 넘겨 준다
3) 백엔드에서는 해당 유저가 이미 존재하는지 먼저 파악한다 (논리)
┗━ 3-1) [유저가 존재하지 않는다면] 새로운 유저를 생성하여 정보를 저장한다
┗━ 3-2) [유저가 존재한다면] 클라이언트에게 "이미 존재하는 유저" 에러를 반환한다
데이터베이스는 모든 "정보"를 저장하는 공간이다. 쉽게 말해 우리 컴퓨터에 C드라이브, 또는 USB 같은 존재이다. 여기서는 원하는 정보를 저장하고, 탐색하고, 업데이트하고, 삭제할 수 있다.
1) 클라이언트가 회원가입에 필요한 정보를 받아온다 (유저가 입력한 아이디, 비밀번호, 이름, 등등)
2) 클라이언트가 백엔드한테 회원가입을 요청하고 유저 정보를 넘겨 준다
3) 백엔드에서는 해당 유저가 이미 존재하는지 DB를 탐색하여 먼저 파악한다 (논리)
┗━ 3-1) [유저가 존재하지 않는다면] DB에 새로운 유저를 생성하여 정보를 저장한다
┗━ 3-2) [유저가 존재한다면] 클라이언트에게 "이미 존재하는 유저" 에러를 반환한다
백엔드에 무지했을때 항상 가지고 있던 질문이 있었다.
"그래서 저 백엔드랑 데이터베이스가 어디에 있는거지...?"
그 질문에 대한 답은 "서버에 있다!"
서버는 그냥 우리가 사용하는 컴퓨터랑 다를게 없다. 우리가 사용하는 컴퓨터에서 코드가 돌아가는 것과 똑같은 원리로 실행 된다. 지금 당장 책상 위에 있는 컴퓨터를 서버로 작동하게 만들 수도 있다!
하지만 컴퓨터를 서버로 작동하게 만들기 위해서는 몇가지 고려사항이 있다. 성능이 좋은 컴퓨터가 필요하며 24시간 고장 없이 잘 작동해야한다. 그렇지 않으면 백엔드의 안정성이 떨어지며 요청을 처리하는 속도가 늦어지거나 아예 처리를 못하게 될 수도 있다.
물론 성능 좋은 컴퓨터는 가격이 워낙 비싸고 유지보수 비용이 발생한다. 이 때문에 Amazon AWS, Microsoft Azure 같은 클라우드 서버에서 이런 성능 좋은 컴퓨터를 임대할 수 있다.
원격으로 내가 임대한 컴퓨터를 조종하기 위해 SSH라는 것을 활용하게 되며 SSH는 서버한테 "내가 이 서버의 주인이다"라는 인증 절차를 밟은 이후 서버를 조종하여 코드를 실행할 수 있게된다
0) 서버에 DB를 생성하고, 백엔드 코드를 실행 시킨다
1) 클라이언트가 회원가입에 필요한 정보를 받아온다 (유저가 입력한 아이디, 비밀번호, 이름, 등등)
2) 클라이언트가 백엔드한테 회원가입을 요청하고 유저 정보를 넘겨 준다
3) 백엔드에서는 해당 유저가 이미 존재하는지 DB를 탐색하여 먼저 파악한다 (논리)
┗━ 3-1) [유저가 존재하지 않는다면] DB에 새로운 유저를 생성하여 정보를 저장한다
┗━ 3-2) [유저가 존재한다면] 클라이언트에게 "이미 존재하는 유저" 에러를 반환한다
백엔드, DB, 서버의 차이를 알았으니 처음부터 백엔드를 구축하기 위한 순서는 다음과 같다.
1) 서버를 준비한다. 직접 서버 컴퓨터를 구입하여 서버 OS를 설치하거나 AWS EC2를 활용하여 클라우드 서버를 임대한다.
2) 서버에 Database를 생성한다. DB의 종류로는 MySQL, PostGresSQL, SQLite등이 있다.
3) 백엔드 코드를 작성한다. Java-Spring, Python Django, Javascript-Express 등의 (프로그래밍 언어)-(프레임워크)가 있다.
이제 백엔드가 실행되고 정보가 DB에 저장되는 서버를 구축하였다.
마지막으로 이 백엔드를 어떻게 불러내고, 원하는 코드를 어떻게 실행할 것인지가 문제다.
아파트 형태의 의류 공장이 있다고 생각해보자. 이 아파트의 1층의 모든 호실은 경비를 위해 사용된다. 1층에는 출입구가 있고, 상황실, 보안 검색대가 있다. 이는 아파트를 의류 공장으로 사용하기도 전부터 경비 공간으로 활용되고 있었다.
아파트의 202호에서는 신발을 만들고, 303호에서는 바지를 만들며, 404호에서는 상의, 마지막으로 505호에서는 모자를 만든다.
어떤 고객(클라이언트)이 의류 공장에 티셔트 제작 의뢰를 맡긴다고 생각하자. 인터넷은 없고 우편으로만 소통할 수 있다.
고객에게 의류 공장 위치를 위도와 경도와 알려준다고 생각해보라. 어떻게든 우편을 보낼 수는 있을 것이다. 하지만 다음에도 같은 공장에 의뢰를 맡긴다면 다시 한번 30.12345678-120.123545678 같은 숫자를 떠올려내긴 쉽지 않을 것이다.
의류공장의 위치를 서울특별시 한국구 한국로 100로 알려준다면 더 쉽게 외울 수 있을 것이며 우편을 보내기 수월 해질 것이다.
이제 공장의 위치를 알았으니 티셔츠 제작을 위해 정확히 404호에 우편을 보내야할 것이고 어떤 디자인을 원하는지 첨부해야할 것이다.
정리하자면
(고객은 원하는 디자인의 티셔츠를 제작하기) 위해 (서울특별시 한국구 한구로 100), (404호)에 우편을 보내야한다.
위의 문장을 회원가입 예시에 반영해보자
(클라이언트는 입력된 유저 정보로 회원가입을) 위해 (www.mybackend.com), (포트 6000) 에 요청을 보내야한다.
위의 의류공장-서버 비유를 정리하자면:
의류공장 -------------> 서버
호실 -----------------> 포트
1층에 있는 모든 호실 ---> 서버가 기본적으로 사용하고 있는 포트
위도-경도 -------------> 서버 IP 주소 (123.123.123.123 형태)
서울특별시 한국구... ----> 서버 도메인 네임 (www.---.com 형태)
모든 서버는 고유의 IP 주소가 있으며 이 주소를 알면 요청을 보낼 수 있다 (내 집 주소를 알면 당신이 나에게 우편을 보낼 수 있는 것 처럼 말이다!).
하지만 IP 주소는 123.123.123.123의 숫자 형태로 외우기 힘들게 되어있어 www.---.com 같은 형태의 도메인 네임으로 감싸줄 수 있다.
포트는 서버 내에서 어떤 코드를 작동시킬지 찾아갈 수 있게 해준다. 의류공장의 1층 전체는 경비로 사용되듯, 서버의 22, 80, 443과 특정 포트들은 유저가 원하지 않아도 이미 기본적으로 사용되고 있다. 이런 Well-Known 포트를 제외하고는 원하는대로 사용할 수 있다.
www.---.com:(포트) 형태로 특정 포트에서 실행중인 코드를 호출 할 수 있다.
예시로 우리의 서버를 www.mybackend.com 도메인으로 설정하고, 회원가입 백엔드 코드를 6000번 포트에 실행을 시킨다 해보자.
0) www.mybackend.com 도메인으로 감싼 서버에 DB를 생성하고, 백엔드 코드를 6000번 포트에 실행 시킨다
1) 클라이언트가 회원가입에 필요한 정보를 받아온다 (유저가 입력한 아이디, 비밀번호, 이름, 등등)
2) 클라이언트가 www.mybackend.com:6000 에 회원가입을 요청하고 유저 정보를 넘겨 준다
3) 백엔드에서는 해당 유저가 이미 존재하는지 DB를 탐색하여 먼저 파악한다 (논리)
┗━ 3-1) 유저가 존재하지 않는다면 DB에 새로운 유저를 생성하여 정보를 저장한다
┗━ 3-2) 유저가 존재한다면 클라이언트에게 "이미 존재하는 유저" 에러를 반환한다
백엔드를 처음에 급하게 배울 때 정말 우왕좌왕 했던 기억이 난다. 처음 백엔드를 배우는 모든 분들에게 시작점을 제시하는 글이 되었으면 좋겠다.
다음 편은 백엔드 실슬편을 가져올 예정이다. 이 글에서 설명한 모든 것을 하나하나 구현해볼 예정이다 😁