들어가면서
5서클에 올라오자마자 가장 만만한 친구를 고르자면 아마도 (내게는)이 인셉션이다. 이 과제는 내가 정한 리눅스 내에 가상머신의 꿈 속의 꿈을 구현해내는 과제인데, 이 과정에서 Docker을 통한 가상화를 깊이있게 학습하게 된다. 나는 지금도 3개 이상 팀에서 웹 서비스 배포를 담당하고 있다보니, 이러한 작업에 익숙해졌고 덕분에 편안하게 과제를 잘 마무리할 수 있었다. 과제의 총 소요기간은 약 5일정도였으며, 나는 과제에서 필수적으로 요구하는 PHP, DB, NGINX 외에도 추가적인 서비스들을 구축하여 보너스 점수를 얻을 수 있었다.
내가 총 구현한 도커 컨테이너는 10개로 각각은 다음과 같다.
필수 구현 : MariaDB, Nginx, WordPress
보너스 구현 : Redis, adminer, vsftpd, react(site), grafana, prometheus, cadvisor
* 이 중 grafana와 그 것을 위해 필요한 prometheus, cadvisor는 특히 필수가 아니지만 나중에 K8s 공부할 때 유용하게 써먹을 수 있을 것 같아서 설치해봤다.
첫 인상
사실 5서클에 보면 컨테이너라는 과제가 있어서 인셉션이라는 과제를 보고 도커를 공부해야된다고 인식하기는 어려웠다. 컨테이너 과제를 하기 전에는 왜 인셉션 과제를 보고 바로 컨테이너를 떠올리지 못하게 했을까하는 의문도 있었다. 하지만, Docker가 작동하는 방식을 좀 알고나니 그리고 컨테이너 과제가 만드는게 진짜 STL의 컨테이너임을 알고나서는 납득했다.
과제의 이름의 유래와 내가 곧 도커를 공부한다는 것을 알고나서 나는 매우 흥분한 상태에서 공부를 진행했다. 가장 좋은 공부는 내가 그 필요성을 온 몸으로 체감할 때가 가장 좋다고 하지 않는가? 그 때의 나는 도커에 매우 목마른 상태였다. 나는 인셉션을 진행하기 직전, 3개의 EC2 인스턴스를 관리하고 있었는데, 이 인스턴스들은 모두 비슷한 역할을 하는 가상머신들이었다. 하지만, 내가 도커와 컨테이너 기술에 대한 지식이 부족하여 조금 더 효율화 할 수 없음이 늘 안타까웠다.(서비스들을 배포하기 위해 하나의 인스턴스를 그대로 사용해야했다. 이 과정에서 내 인스턴스에는 낭비되는 컴퓨팅 능력이 많았다) 그런 와중에 내가 해야되는 과제로 도커가 내게 찾아오다니!! 나는 과제를 하면서 정말 운이 좋다고 생각했다.
과제를 끝내고 바로 내 모든 서비스에 적용하겠다는 마음가짐과는 살짝 다르게, 과제를 끝낸 지금도 내 모든 인스턴스들에 도커가 적용되지는 않았다. 한 개의 서비스정도는 이 과정에서 배운 Docker-compose를 이용하여 배포를 완료했지만, 다른 녀석들은 나중에 조금 더 공부를 하고 하기로 남겨두었다. Docker를 공부하다보니, Docker-compose가 얼마나 편한지 알게되었는데 과연 쿠버네티스는 얼마나 편할까? 라는 생각이 들었기 때문이다. 곧 이너서클을 마치고 아우터로 가게되면 바로 쿠버네티스 과제를 진행할 예정인데, 그때 공부를 마치면 바로 적용해볼까 싶다. 그때는 AWS에 있는 컨테이너와 쿠버네티스 서비스를 이용해서 배포할 예정이다.
과제를 통해 알 수 있는 것은?
과제를 통과한지 벌써 한달이다. 그 때 바로 작성했다면 참 좋았을텐데.. 너무 늦어버려서 지금은 정말 세세하게 내가 어떤 것들을 배웠는지 말하기 쉽지않다. 지금 누군가가 내게 도커에 대해 물어본다면 성실히 답변해줄 수 있지만, 그 지식이 이 과제를 하면서 얻은 것인지 아니면 그 후에 더 공부하면서 배운 것인지 구분하기 어렵다. 하지만 인셉션을 통해서 얻은 지식은 아래와 같다.
내가 이 과제를 통해서 답하거나 할 수 있게된 것은?
1. 기존 가상머신 및 격리 기술과 이 도커가 다른 것은? 격리기술 발전사는 어떻게 되는가?
2. 도커가 의존하고 있는 리눅스의 기술들은 무엇이고 그것들은 어떻게 작동하는가?
3. 도커의 생명주기는 어떻게 되고, 각각의 과정을 직접 해낼 수 있는가?
4. 도커를 작동시키는 명령어들은 무엇이고 그것을 실제로 사용할 수 있는가?
5. 컨테이너에 볼륨을 설정해줘야하는 이유는 무엇인가?
6. 컨테이너간 네트워크는 어떻게 작동하는가?
7. 왜 도커 컴포즈라는 기술이 나왔고, 작성할 수 있는가?
8. 도커 컨테이너를 제작하기 위해 필요한 문서 혹은 명령어들을 작성할 수 있는가?
9. 컨테이너를 모니터링하는 툴들은 어떻게 작동하는가?
10. PID 1의 의미는 무엇이며, 그것이 하는 역할은 무엇인가? 또한, 커널은 프로세스 관리를 어떻게 하는가?
위의 질문정도는 확실히 인셉션을 위해서 공부한 내용인 것 같다. 나는 위 질문들에 대한 대답을 평가자에게 해주면서 평가를 받았고, 많은 평가자들은 내 평가에 매우 만족하는 평가 의견을 제출해주었다. 실제로, 하루에 3번의 평가를 모두 받았는데 마지막에 갈 때는 처음에는 2시간 걸린 설명보다 훨씬 유려하게 1시간만에 평가를 받는 기염을 토했다.
과제는 컴포즈와 필요한 명령들을 포함하는 파일들만 올리고 컴포즈 단일 파일을 이용하여 컨테이너를 제작하는 절차를 밟게되는데, 이 과정에서 실제 명령어가 창에 나올 때마다 이게 실제로 컴퓨터 내에서 작동하는 것을 그림으로 보여주면서 설명했다. 특히 네트워크 같은 부분은 설명에 있어서 그림이 매우 효과적이었는데, 나 또한 도커 네트워크는 그림을 그려서 스스로 이해했기 때문에 나의 경험에 미루어 상대에게 설명하는 것이 매우 효과적이었던 것 같다.
평가가 끝난 후
도커를 깊이있게 한번 찍어 먹어보니, 매우 재미있었고 이게 내 길인가 싶었다. 안그래도 몇몇 서비스를 기획하고 만들고 또 운영하면서 '아! 나는 이 배포 + 운영쪽이 매우 잘 맞는걸?'과 같은 생각을 해왔는데, 이번 과제를 통해서 내 갈 길에 더욱 확신을 가지게 되었다. 이전까지는 인프라 서버 개발 혹은 프론트 개발자를 생각하고 있다가, 이번 과정을 통해서 DevOps쪽이 나랑 맞는 것 같다고 확신했다.
철학과와 컴퓨터 공학을 전공함으로써 얻은 인문학적 소양 그리고 컴퓨터 관련 핵심지식, 10명이상의 고3 과외 경험과 장교로서의 경험을 통해 얻어낸 커뮤니케이션 스킬들이 한번에 섞여서 내게 커리어적으로 갈 길을 제시해주었다. 물론, 나는 내가 DevOps가 뭔지 정확히 아는지 잘 모르겠다. 실제로 관심이 생긴 후 '이걸 지향해야겠다!' 라고 생각은 했지만, 아쉽게도 아직 실제 현업에서 활동하고 계신 데브옵스 개발자분을 만나뵙지는 못했다. 내가 생각하는 그리고 인터넷에 작성된 업무내용이 실제와 같은지 확인하지 못하는 것은 아쉬운 부분이다. 원래 42에 있었던 비상근 멘토분들이 유지되었다면 만나뵐 수 있었을 텐데 조금만 더 빨리 이 길을 찾았으면 어땠을까.. 하는 아쉬운 마음이 있다.
하지만, 이제 목표를 잡았으니 앞으로는 달리기만 하면될 것 같다는 생각도 있다. 지금은 42에서 해야하는 이너서클을 모두 끝내야하지만, 그것을 모두 마치게 된다면 나는 AWS자격증 공부 및 쿠버네티스 공부를 할 예정이다. 공부는 원래도 좋아했지만, 이 두 단어는 내게 설렘으로 다가오는 것을 보면 내가 정말 이 기술들에 큰 기대를 하고 있는 것 같다. 빨리 이너가 끝나고 이것들을 더 공부하고 싶고, 이런 마음은 내게 더 큰 열정을 불러일으켜주고 있다. 이렇게 내 사고가 확장시켜준 인셉션 과제에게도 감사하다.
'프로젝트 > 42과제' 카테고리의 다른 글
[42서울] 5서클 ft_container을 보내며(Generic Programming) (0) | 2023.03.03 |
---|