[Deployment] 배포 (Deployment)를 시작하기 전에
이번 글에서는 각종 클라우드 서비스들에 대한 이야기를 하기 전에, 기본적으로 알고 있어야할 개념들에 대한 이야기를 살짝하고 넘어갈건데, 개발자가 그걸 왜 알아야하느냐 라던가, 그건 인프라 영역이지 않나? 라는 얘기를 할거라면 부디 그저 클린코드만을 찬양하는 입을 다물었으면 좋겠다. (공격적으로 들렸다면 미안하다. 하지만 맘에 안들긴 함.)
요즘 개인적으로 고민하고 있는 부분이 있는데, 개발자가 매니징할 수 있어야하는 범위가 어디까지인지를 고민하고 있다.
개발자는 코드레벨에 있는 논리적인 로직 구성에 대해서만 집중해야하는가? 라는 질문을 던져보니 그건 아니라는 생각이 들어서 말이다. 당연히 분업화가 잘되어있는 서비스기업들의 경우에는 굳이 Front-end 개발자가 Devops, DBA 까지 건드릴 일이 거의 없긴 할거다. 하지만, 애초에 인력자체가 적은 스타트업이나, SI의 경우에는 건드려야하는 경우가 태반이다. 할 사람이 없으면 내가 해야지 뭐.. 당연한 결론임.
어찌 됐든, 이제 이 서비스 배포에 관련한 이야기를 할건데, 그럼 자연스럽게 서비스 배포에 대한 지금까지의 변화를 알아봐야 이해가 쉬우니 한번 그것부터 들여다보고자 한다.
1. 배포?
많은 초급 개발자, 신입 개발자들이 배포라는 말에서부터 상당히 어려움을 느낀다. 왜냐면 개발하는 것까지는 주변에서 많이들 알려주지만, 일반적으로 배포까지 모든 과정을 알려주지는 않기 때문이다. 특히, 학원은 더 그렇다. 어차피 이런 인프라 부분은 알려줄 생각도 없고, 너넨 지금은 몰라도 되고 Devops가 알아서 할거라는 식의 무책임한 뉘앙스를 풍기는데 이런 것들 때문에 괜히 진입장벽만 높아진게 아닌가 하는 생각이 든다. 뭐 한편으론 말해줘도 이해 못할거라는 생각도 있어서 그 마음이 이해는 가지만, 알려주는거랑 안 알려주는거 그 차이에서 오는게 엄청 나비효과가 크다..
배포란 말 그대로 내가 만든 서비스를 인터넷 세계의 불특정 다수에게 제공하는거다. 내가 만든 서비스의 주소를 알려주기만 하면, 사용자들이 자유롭게 들어와서 사용할 수 있는거임. 현실에 대입하면 간판 걸어놓고 장사시작한거라고 보면 된다.
2. On-Premise
이 얘기를 하기 전에 볼 그림이 하나 있는데, 한번 보자.
이거 진짜 도커 공부하면 검색했다하면 나오는 그림인데, 도커 설명에서도 쓰겠지만 지금 이거 설명하는데도 쓸 수 있어서 가져왔다.
이 그림이 바로 지금 우리가 로컬에서 Spring Boot 구동시키거나, npm / yarn start 한거랑 똑같은 모양새라고 보면 된다.
즉, 우리가 개발하면서 테스트하려고 실행시켜서 쓰는거도, 따지고보면 배포와도 비슷한거임. 따로 도메인만 안산거지, IP주소로 접근 가능하고, 포트 열려 있응게 동일 네트워크 상에선 배포되는 중이라고 말해도 아무런 문제가 없다.
물론 최근엔 저렇게 배포하는 것보단 클라우드 서비스를 이용하는 경우가 많은데, 놀랍게도 저걸 아직도 유지하고 있는 경우가 있다. 그게 어떤 경우냐면, 되게 Private하게 보관해야하는 Data들을 가지고 있는 DataBase가 저런걸로 구축된다.
서버컴퓨터를 하나 갖다 놓고, 뭐 Java로 만든 프로젝트를 배포할거라면, JDK가 깔려있어야하고, Path도 잡아둬야할거고 등등.. 관련 환경 세팅을 모두 해줘야한다. 그런 후에, 우리가 로컬에서 개발하는거마냥 Database든 Spring 프로젝트든 실행 딱 시켜놓고 있는거임. (MySql로 치면 3306포트 열어놓고 있는거.) 이런 방식이기 때문에 변경사항이 생기면, 가동을 중지시켰다가 변경사항을 반영하고 새로 배포를 시작하는 패턴을 가진다.
이런걸 On-Premise 라고 부름.
3. Cloud의 세계가 열리다.
이제 Cloud 얘기를 할건데, 앞선 On-premise 방식으로 배포를 하다보니 하루종일 컴퓨터 켜놓고 있어야하고, 앞서 말한 불편한 점들도 존재하고, 서비스 유지하는데도 돈 많이 드는데, 확장하려면 돈 더 많이 들고, 아주 그냥 돈 잡아 먹는 기계임. 그래서 좀 더 경제적인 솔루션으로 Cloud서비스가 나왔다고 보는건데, 확장도 간편하고, 돈도 덜 드니까 이제 기업들 입장에선 유출되면 되게 크리티컬한 데이터들이 아닌 이상 클라우드로 내보내서 서비스 제공하는 것을 당연히 고려 안할 수가 없다.
또, 코로나19 터지면서 '원격' , '비대면' 이런게 진짜 유행해버리기 시작했는데, 그거에 대한 솔루션으로도 Cloud 서비스가 상당히 주목을 받기도 했다.
근데 여기서 바뀐 점은 이제 딱 하나 뿐이다. 뭐 클라우드 하면 자꾸 자동반사적으로 Docker, 쿠버네티스 얘기하는데 그건 걍 컴퓨터 자원 되게 효율적으로 쓰려고 나왔다고 보면 되고, 클라우드에도 적용해보니께 더 비용 절감되고, 관리하기 편하니 좋더라. 이거지 절대 클라우드 하면 Docker, 쿠버네티스 이거 아님.
그래서 바뀐 점은 뭐냐면, 우리 회사 서버실에 있던 초대형 컴퓨터가 더이상 서버실에 없고, 저기 멀리 Amazon(AWS), MicroSoft(Azure)가 가지고 있는 컴퓨터들 중에 하나로 옮겨갔다. 정도임. 그리고 그걸 원격으로 접속해서 컨트롤할 수 있는거다.
이런 서비스들을 유식한 말로 Iaas 라고 부르기도 한다.
다음 게시물에서는 이제 본격적으로 모던한 Deploy방식에 대해서 이야기를 할건데, 오늘 작성한 게시물의 내용 자체가 Deploy 라기보단, Deploy를 하기 위한 환경 구성이 이런게 있다. 정도라고 이해해주길 바란다.