웹 프로그래밍에 처음 관심을 가졌던 것이 약 10년 정도 전인 2011년 즈음이었던 것 같다. 웹 서비스의 개념도 몰랐고 서버-클라이언트 구조 정도만 알고있었다. 그것도 클라이언트가 요청을 하면 서버는 요청에 응답을 보낸다는 정도의 기초적인 역할 구분 정도였다.
클라이언트는 내 컴퓨터이고 다시 그 안의 웹 브라우저가 서버와 요청과 응답을 주고 받는다는 것은 알고 있었기 때문에 서버 프로그래밍이 곧 웹 프로그래밍이라고 생각했다. 그래서 이름에 '서버'가 들어간 책을 대충 하나 선택했다. 『JSP 자바 서블릿 프로그래밍』이었다. 책의 예제들을 따라하고 있었지만 사실 감이 오지를 않았다. 지금(2021년) 생각해보니 그 때(2011년)는 웹 프로그래밍의 전체적인 모습을 모르고 있었던것 같다.
JSP 공부는 흥미가 점점 사라졌고 다른 대안들을 찾기 시작했다. APM이 그 대안이었다. APM, 아파치Apache, PHP, MySQL을 공부하면서 웹 서버 프로그래밍의 구조를 알아가기 시작했다. 클라이언트의 요청을 웹 서버 프로그램(아파치)이 받아서 SGI(Server Gateway Interface)라는 인터페이스를 통해 PHP에 전달하고 PHP가 요청을 처리하는 구조였다. 이 때 필요한 데이터들은 MySQL이라는 데이터베이스(DB)에 저장하여 관리한다.
APM을 이용해서 간단한 웹 페이지를 만들었지만 어떻게 사람들이 접속할 수 있게 만드는지를 또 몰랐다. 배포(release)할 줄을 몰랐던 것이다. 도메인 주소를 구입하고 DNS(Domain Name Server)를 이용해서 웹 서버의 IP와 연결하는 과정을 시행착오를 반복하면서 알게되었다. 웹 서버는 물론 거의 리눅스Linux 였기 때문에 리눅스도 필요한 만큼 공부하지 않을 수 없었다.
웹 서비스를 만들고 어설프게나마 배포까지 할 수 있게 되었지만 만든 웹 서비스가 영 마음에 들지 않았다. 간단한 자기소개 페이지였는데 무엇보다 UI(User Interface) 구성이 어색했다. 무언가 빠진 것 같았다. 이 때가 아마 2015년 정도였는데 그 땐 학생이기도 했기 때문에 진도가 빠르게 나가지를 못했다. 무엇보다 이걸로 무얼 할 수 있는지, 또 무얼 해야하는지 목표가 명확하지 않았기 때문에 적극적이지 않았던 것 같다.
서버 프로그램이 다시 백엔드backend와 프런트엔드frontend로 나누어지고 프런트엔드에 속하는 UI는 HTML과 자바스크립트JavaScript(JS)를 이용해서 좀 더 전문적으로 만들어진다는 것을 알게되었다. 처음 만들었던 웹 페이지가 뭔가 어색했던 것이 JS 없이 HTML만으로 구성했던 때문이기도 했다. JS를 배우면서 서버 프로그램도 PHP에서 Node를 이용한 JS로 바꾸었다. 아무래도 여러개의 언어를 다루는 것 보다 더 적은 언어로 통합하는게 편하기 때문이었다.
학교를 졸업하고 이런 일 저런 일 알아보면서 2년 정도 웹 프로그래밍을 손에서 놓게 되었다. 가치를 전달하기 위한 수단으로써 웹 서비스 만한 것이 없다는 생각이 들었다. 그렇게 다시 웹 프로그래밍을 하게됐다. 약 2년의 기간 동안 잊어버린 것도 많았어서 웹 서버 프로그래밍 언어로 파이썬Python을 다시 선택했다. 웹 프로그래밍을 손에서 놓은 2년 동안 알파고Alpha Go가 나왔고 AI 붐이 일었으며 파이썬을 이용한 텐서플로tensor flow가 배포되었기 때문에 그 동안 배웠던 파이썬이 좀 더 익숙해져서였다.
파이썬과 플라스크Flask를 이용해서 다시 웹 페이지를 만들었다. JS를 쓰고 CSS도 적용하고 디렉토리 구조도 각 파일의 역할에 따라 구분했더니 처음 만들었던 페이지(2015년) 보다는 나아보였다. 하지만 기능이 추가되고 코드가 길어지자 점점 코드 보기 싫어지는게 아닌가. 그래도 울며 겨자먹기로 참으면서 코딩하고 디버깅했다. 나중이 되니 스파게티 코드 안에 기능하나 넣는 것이, 그리고 디버깅하는 것이 그렇게 어려울 수 없었다.
이렇게 시간을 계속 보내는데 가깝게 지내는 선배가 리액트React를 강력히 추천해왔다. 리액트를 매우 사랑한다는 말을 들으니 귀가 솔깃했다. 유튜브를 통해 배우는 것 만으로는 잘 안되어서 결국 책도 빌려보고 한 5개월 만에 나도 리액트를 사랑하게 됐다. 리액트를 사용하면서, 더 정확히는 리액트와 리액트 훅Hook 그리고 리덕스Redux를 함께 사용하면서 새로운 세상을 만난 것 같았다. 이래서 사람은 다른 사람 말에 귀를 기울이고 공부를 계속해야 하는구나하고 다시 한번 뉘우쳤다. 리액트를 사용하고 나서는 서버의 프런트엔드와 백엔드를 완전히 분리하게 되었고 코드도 훨씬 관리하기 쉽게 되었다. 왜 리액트가 웹 개발의 표준으로 자리잡았는지 이해할 수 있게됐다.
프로젝트가 조금 커지자 클라우드도 좀 더 좋은 것을 사용해야 했다. 즉 무료 컴퓨팅 인스턴스computing instance로는 안되고 유료 인스턴스를 사용해야 했는데 유료 인스턴스는 비용이 부담스러웠다. 싼 곳을 찾아 옮겨다니고 또 옮겨다녔다. 매 번 서버를 옮길 때 마다 웹 프로그램 실행 환경도 새로 셋업하고 데이터베이스(DB)도 이전했다. 또 무엇보다 약간은 불안하게 돌아가고 있는 메일 서버를 이전(새로 설치)하는 것이 힘들었다. 이렇게 글을 쓰면서 돌아보니 이렇게 살아온 시간들이 약간은 눈물겹다.
그러다가 도커Docker를 알게됐다. 이전부터 이야기는 들어왔었는데 한번 공부해 볼까... 배우는게 좋아서라기 보다는 일단 필요하니까. 웹 서비스(파이썬 플라스크 + 리액트)를 도커 컨테이너로 만들고 결국 웹 메일 서버도 도커 컨테이너로 만들었다. 도커를 배우고 컨테이너를 만드는데 시간을 들인 가치가 확실히 있는 것 같았다. 서버 이전이 부담되지 않는 것은 아니지만 이제는 도커 컨테이너만 가지고 가면 된다고 생각하니 확실히 편했다. 개발자들이 왜 도커를 추천하는지 알게되었고 다시금 배움의 연속일 수 밖에 없는 시간들에 대해 돌아보게 되었다.
나는 원하지 않았지만 10년 동안 풀스택Full Stack 개발자가 되어왔다. 서버(Linux, 네트워크, 도커 실행환경)를 관리하고 백엔드(데이터베이스, 서버 프로그래밍)도 만들고, 프런트엔드(UI, 페이지 뷰 프로그래밍)도 하고 2022년 지금에는 그렇게 개발하고 있다.
쓰지 않으면 금방 잊어버린다. 그렇기에 필요할 때 스스로 참고하려고 블로그에 기록해두려고 한다. 만약 여기까지 읽어준 분들이 계시다면 이야기를 들어주신 것에 감사드리고 재미없는 글 읽어주신 인내심에 다시 한번 존경을 드린다.
■
'풀스택 개발 들여다보기' 카테고리의 다른 글
[Docker] 자주 사용하는 도커 명령어들 (0) | 2022.02.20 |
---|---|
[Docker] 도커 이미지docker image 관리 (0) | 2022.02.16 |
[Docker] 도커 설치와 기본적인 사용 방법 (0) | 2022.02.15 |
[Docker] 가상머신 Vs. 컨테이너 (0) | 2022.02.11 |
[Docker] 도커란 무엇이고 왜 쓸까? (0) | 2022.02.10 |
댓글