아빠의 퇴임식 / 백엔드 용어 / Git LFS
1. 아빠의 퇴임식: 세상 제일 자랑스러운 울 아빠
2. 백엔드 용어: 컨테이너 도커 쿠버네티스
3. Git LFS: Unity 문젠 줄 알았지
이번 주는 날씨가 참 좋았다. 그래서 오는 이름 모를 씁쓸함도 있었지만 그래도 좋은 기분을 유지할 수 있게 도와줬으니 고맙다고 해두자.
월요일에 반차를 썼다. 아빠가 43년의 긴 직장생활을 마친 기념으로 자체 퇴임식을 진행하기 위해서였다. 강남역 꽃집을 한 바퀴 돌아 가장 맘에 들었던 첫 번째 꽃집으로 가 3만 원짜리 꽃다발 하나를 샀다.
활짝 핀 꽃들이 담긴 꽃다발이었는데 엄마가 보시더니 꽃은 활짝 피어있는 것보다 아직 덜 핀 꽃이 더 비싸고 가치가 있는 거라고 하셨다. 활짝 핀 꽃은 금방 시든다며. 또 나는 거기에 대고 질문을 덧붙였다.
활짝 피었을 때가 제일 예쁘잖아.
제일 예쁠 때를 선물해야 하는 거 아니야?
질문했지만 꽃꽂이를 배웠던 엄마께선 선물 후를 더 중요시 여기시는 것 같아 수긍하기로 했다.
아빠의 퇴임은 실로 명예롭고 멋졌다. 집에 돌아왔더니 회사분들로부터 받은 각종 선물들이 테이블에 쌓여있었다. 두 손 가득 돌아오며 현 회사에서의 10년을 회고했을 아빠를 생각하니 외롭고 쓸쓸한 은퇴는 아니었겠다 싶어 다행이라는 생각을 했다.
개인들이 손수 쓴 카드, 경영진들로부터 받은 선물, 조직 사람들이 함께 준비한 감사패, 카톡방에 올라온 송별회 영상 등 모두 그간 아빠의 성실함을 대변해 주는 것 같아 나 또한 박수가 절로 나왔다.
모두가 퇴근한 후 우리 가족도 최고의 아버지상 패를 준비하여 각자 준비한 봉투와 짧은 편지를 함께 전달드렸다. 아빠도 우리 가족 한 명 한 명에게 봉투를 준비해 나눠주셨다. 참 훈훈한 시간이었다. 아빠 표정이 밝아서 좋았다.
세상에서 제일 존경스러운 사람이 누구냐고 묻는다면 나는 아마 주저 없이 아빠라고 대답할 것이다. 아빠 참 멋진 사람이야. 자랑스러운 울 아빠 고생 정말 많았습니다!
오랜만에 네일을 받았다. 봄기운을 내고 싶었다. 결과는 대만족. 볼 때마다 흐뭇하다. 손톱 상한다고 주위에서 잔소리를 좀 들었지만 해서 행복하면 됐지 뭐!
며칠 전엔 동호회 사람들이랑 보드게임을 하러 갔다. 텔레스트레이션을 시작으로 딕싯, 스파이폴을 했다. 재밌는 사람들이랑 재밌게 게임해서 좋았다.
지난번에 프론트 쪽 사람들이 재택을 해서 백엔드 팀과 티타임을 한 적이 있었다. 요즘 나의 업무를 물어보시다가 질문을 주셨다.
유니티를 서버에 어떻게 올릴까요?
음.. 글쎄요.
말을 내뱉고 살짝 당황했다. 알았어야 했나?
세상 남일처럼 답변한 나는 파트장님의 너털한 웃음을 듣곤 무지함을 당당히 내비친 내 모습을 자중하며 답변을 다시 생각해 봤다. 그러다 팀장님께서 Photon 서버를 사용해서 플레이어 간 네트워킹하는 방법을 말씀해 주신 게 기억이 나서 이를 말씀을 드렸더니 조금은 만족스러운 답변을 들으신 것 같았다. 그러고 나서 생각하시는 대략적인 서비스 서버 구조를 말씀해 주셨다. 사실 하나도 이해를 못 했다.
그래서 공부해 봤다. 맨날 도커 쿠버 얘기는 듣는데 이해를 못 하니까 답답해서 알아봤다.
용어를 정리하면 다음과 같이 나오더라.
도커는 컨테이너를 사용하는 데 필요한 도구 중 가장 유명한 도구. 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해준다.
쿠버네티스는 컨테이너들을 오케스트레이션 하는 도구. 풀어보면 여러 서버에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나 컨테이너가 사용할 비밀번호나 환경설정을 관리하고 주입해 주는 일 등이다.
그럼 컨테이너가 뭔데? 용어 정리를 보면 그렇게 안 와닿을 수가 없다.
이건 가상머신과 비교할 때 잘 와닿았다. 애플리케이션 배포 환경의 변화를 정리한 그림이다. 유명하다고 하는데 그간 관심이 없어서 몰랐다.
구조의 변화는 전통적 배포 -> 가상화 배포 -> 컨테이너 중심 배포로 변화했다.
전통적 배포부터 살펴보면 하드웨어 위에 OS 그 OS 위에 애플리케이션 여러 개가 올라가 있다. 이렇게 됐을 때 각 애플리케이션이 다른 애플리케이션에 영향을 주게 된다. 은행 업무를 위해 여러 보안 프로그램을 깔았을 때 다른 업무의 성능이 떨어지는 경험을 예로 들 수 있다. 한 프로그램이 성능을 독점할 경우 심하면 다른 프로그램의 중단을 유발할 수도 있을 것이다.
그렇다면 이를 해결하는 다음 방법은 무엇이었을까. 바로 가상화 배포이다. 가상화 배포는 가상머신을 기반으로 배포하는 방법인데 이 가상머신은 가상 컴퓨터로 이해하면 된다. 말 그대로 컴퓨터처럼 CPU, 메모리, SSD를 개별적으로 할당할 수 있어 타 애플리케이션의 간섭 없이 독립적으로 실행할 수 있다. 가상머신은 학부 때 서버 과목에서 경험한 적이 있다. VM Ware 설치하는 게 과목 듣는 첫날 과제였는데 그때 저장공간이 없어 고생했던 기억이 난다. 그때는 아니 뭐 저장공간이 뭐 그렇게 중요한데 이렇게 설치를 못하게 하냐 했는데 이제야 몸소 깨닫다니 아직 한참 멀었다는 생각이 오늘도 든다. 암튼, 가상화 배포는 그림 두 번째 위치한 구조처럼 하드웨어와 OS 위에 하이퍼바이저가 올라가 있고 그 위에 가상머신이 여러 개가 올라가 있는 구조이다. 하이퍼바이저는 그냥 가상머신을 하나의 시스템에서 여러 개 구동할 수 있도록 해주는 중간 계층 정도로 이해하면 된다. 이때 가상머신은 완전한 컴퓨터이기 때문에 가상머신에 일일이 운영체제를 설치해야 하고 이는 컨테이너 중심 배포에 비해 무겁다는 단점이 있다.
자 마지막, 대망의 컨테이너 중심 배포. 이 배포 방식과 전 배포 방식을 비교해 보면 하이퍼바이저가 컨테이너 런타임으로, 가상머신이 컨테이너로 바뀐 것을 볼 수 있다. 이때 컨테이너는 가상머신같이 운영체제를 매번 설치할 필요가 없다. 그림처럼 하나의 OS 위에서 돌아가게 되는 것인데 그럼 전통적 배포 방식과 다를 게 없지 않으냐! 이 방식도 서로 간섭하는 비효율을 가지고 있는 게 아니냐! 하면 아니다. 컨테이너 중심 배포의 중요한 기술적 차이점은 ‘이 컴퓨터에서 나만 구동되고 있다’라고 판단할 수 있도록 서로 간섭할 수 없게 장벽을 친다는 것. 더불어 컴퓨터 자원 또한 독립적으로 사용할 수 있도록 할당한다. 이와 같은 컨테이너 동작 방식을 OS 커널을 공유하는 가상화라고 표현하기도 한다. 정확히 어떻게 장벽을 치는지는 나중에 더 봐야겠지만 개념 익히는 데 이 정도 이해하면 원하는 만큼은 도달했다고 생각했다.
유니티 프로젝트를 클론 받아다 실행시켜 봤는데 에셋들이 안 불러와지는 것이다. 유니티 개발환경 세팅이 조금 난해해서 엉뚱한 걸 원인으로 보다가 결론은 Git LFS 문제였다는 것을 알아냈다.
LFS는 Large File Storage의 약자이다. Git에서 큰 파일을 다루기 위해 만든 오픈소스인데, Remote 서버에 파일 콘텐츠를 저장할 때 오디오 샘플, 비디오, 데이터 세트 및 그래픽 등의 대용량 파일을 Git 내부의 텍스트 포인터로 대체하여 용량을 관리할 수 있게 한 것이다.
그래서 git lfs install 하고 git lfs pull 해주니 말짱히 잘 떴다.