많은 부트캠프의 학습 과정을 보면 대체로 FE, BE, DB 쿼리 정도의 공통된 과정을 가진다. 그렇기에 비전공자들은 인프라에 대해 상당히 취약할 수 밖에 없다. 물론, 이는 비전공 개발자들만이 가지는 공통사항은 아니다. 개인적으로 전공자들 중에서도 인프라 지식이 전무한 전공자들도 더러 있고 대체로 인프라 지식은 개발 지식에 비해 많이 취약하다.
인프라는 왜 어려울까?
그렇다면 인프라는 왜 유독 어렵게 느껴질까? 개인적인 생각으로는 다음과 같은 이유가 있을 것 같다.
1. FE, BE에 비해 우선순위가 밀린다
아무래도 인프라 지식을 선수로 학습하는 경우는 드물다. 애초에 결과물을 만들어내는 작업이 아니라 결과물을 다른 사람들에게 공개하고 문제없이 관리해주는 시스템에 가깝기 때문이다. 결과적으로 절대적인 학습 시간 자체가 부족할 수 밖에 없다.
2. CLI 명령어가 낯설다
대부분 터미널을 이용한 컴퓨터 조작보다는 윈도우는 맥에서 동작하는 GUI 환경에서의 컴퓨터 조작이 더 익숙하다. 클라우드를 이용한 배포의 경우 GUI 환경을 제공하기도 하지만 인프라의 경우 근본적으로 CLI 명령어를 어느정도 숙지해야 관리가 용이하다.
3. 학습 과정이 단계별이 아닌 병렬적인 구조를 갖고있다
이건 필자가 인프라 지식을 학습하면서 많이 느꼈는데, FE 또는 BE 학습의 경우 다음과 같이 단계별로 공부하면 된다.
언어 공부 => 프레임워크 공부 => 프로젝트를 하며 실전 학습 => 점차 의존 라이브러리를 늘려가며 프로젝트 고도화
물론, 인프라도 큰 틀로 접근하면 단계별 학습이 가능하다.
FE, BE, DB 배포 과정 학습 => 도메인 지식 학습 및 구매해서 연결 => CI/CD 파이프라인 개념 학습 => Docker를 이용한 컨테이너 분리 개념 학습 => Kubernetes를 이용한 MSA 구조 관리 학습
하지만 당장 배포 과정부터 조금만 깊게 들어가면 FE 배포는 어떻게? BE 배포는 어떻게? DB도 배포해야 하나? NGINX도 공부해야 하는건가? 도메인을 연결해도 http 그대로인데, https는 어떻게 적용? 등등의 의문들이 한꺼번에 따라붙는다. 즉, FE나 BE는 간단하게 화면 하나 또는 도메인과 로직 하나 작성하고 localhost로 확인할 수 있지만 인프라는 배포 한번 하려고해도 일정 수준 이상의 기반 지식을 필요로 한다.
4. 학습에 필요한 강의, 도서 등이 FE, BE에 비해 상대적으로 덜 알려져있다
결국 1번의 원인과 귀결된다. 절대적인 학습 시간이 부족한만큼 학습할 강의도 도서도 FE나 BE에 비해 유명하지 않다.
앞으로의 계획
필자와 다르게 인프라도 쉽게 공부하고 쉽게 적용하는 똑똑하신 분들은 많을 것이다. 이번 시리즈는 필자처럼 인프라를 공부할 때 어떤 공부를 시작해는지 방향성도 잡기 힘든 분들을 위해 글을 작성하려 한다. 다음 글 부터는 배포에 대한 전반적인 정리부터 시작해서 각 상황에 맞는 배포 환경 선택 그리고 더 디테일하게 배포를 진행하는 과정을 차례대로 작성할 예정이다.
또한, 개인적으로 CLI 환경에 익숙해져야 한다고 생각한다. 우리가 유일하게 CLI 환경과 익숙해질 수 있는 시간은 코드를 관리하기 위해 git을 이용할 때 뿐이다. CLI 명령어에 익숙해지고 싶다면 앞으로는 소스트리나 깃허브 데스크탑같은 GUI 도구가 아니라 터미널에 아래와 같이 CLI 명령어로 git을 다뤄보길 바란다.
# 원격 브랜치의 코드 로컬 브랜치로 받기
git pull origin main
# 변경이 있는 파일 스테이지로 올리기
git add .
# 커밋하기
git commit -m "commit message"
# 원격 브랜치로 푸시하기
git push origin main
그럼 다음 글 부터 배포의 전반적인 개념을 정리하겠다.