JetBrains Night 서울

JetBrains에서 필자가 관심갖고 있는 영역을 모두 행사에서 다룬다고 한다.

첫째는 IDE Tips & Tricks 파트다. Webstorm에 이어 PhpStorm과 PyCharm까지 사용하다가 Android Studio를 사용해야 하는 상황까지 되어서, IDE를 여러개 쓸 수 없다는 생각에 IntelliJ IDEA까지 구매를 했음에도, 사실 아직도 많은 단축키를 제대로 활용하고 있지 못한 점이 영 마음에 걸린다. 과거에 한글97 워드프로세서의 단축키 80-90%를 암기해서 쓸 때만도 못한 수준이다. 뭐 개인적으로 단축키는 조금씩 암기하고 사용해 가고 있지만, 좀 더 능숙하게 연장을 다루고 싶은 마음은 늘 마음 한 구석에 있었다. 어떤 팁과 트릭이 공개될 지 궁금하다. 이참에 눈감고도 한글97을 썼던 느낌으로 IDE를 써야겠다는 강렬한 열망 같은 게 마음 속에서 꿈틀댄다.

둘째는 작업흐름이다. Trello, Gitlab, Jira, Slack 등을 사용했을 때의 잇점은 기록을 통해서 소통을 개선한다는 점이다. 문제를 빨리 발견할 수 있다는 점, 지식 전파가 빨리 이뤄진다는 점이 협업 도구 사용의 강점이라 할 수 있는데, JetBrains에서 제시하는 팀웨어 도구들이 어떤 지점에서 작업 흐름을 개선하고 생산성을 향상시키도록 고안됐을지 궁금하다.

셋째와 넷째는 최근 인기 상승 중인 Kotlin에 대한 내용이다. 안그래도 안드로이드 개발 및 iOS 개발을 모두 해야 할 때 리액트 네이티브나 자마린 같은 하이브리드 플랫폼을 선택해야 할 지, 안드로이드 앱은 Kotlin으로 iOS 앱은 Swift로 개발하는 게 좋을지 고민하는 중이었다. 이전에 Ionic과 React Native로 하이브리드 앱을 개발해 보았지만, 결국 네이티브 단에서 발생하는 이슈를 해결하려면 네티이브를 잘 알아야만 했다. 그렇지 않다보니 여차하면 삽질하기 일쑤였다. 그러던 와중에 현재는 java로 개발한 안드로이드 앱을 유지보수하고 있는데, 과연 코틀린이 가져올 생산성의 향상은 어느 정도일지, 그리고 코틀린의 특장점을 소개하는 자리가 될 것 같은데, 궁금하다.

행사 링크는 여기를 클릭!

docker –link 옵션 대신 docker network 사용(도커 컨테이너 연결)

docker 컨테이너끼리 연결하는 방법이 궁금하신가요? 예전에는 컨테이너 간의 연결을 위해 docker –link 옵션을 이용했습니다. 하지만 이제는 docker network를 이용하셔야 합니다. 왜 그런지 그 이유를 살펴보고 docker network 사용방법을 알아보도록 하겠습니다.

개요

Docker는 컨테이너를 구동할 때 내부 IP 주소를 사용하는데, 내부 아이피를 지정해서 사용하지 않으면 계속 변동되기 때문에, 컨테이너 간에 접근할 때 IP 주소를 사용하면, 해당 IP를 사용할 때에는 접속이 됩니다. 하지만 추후에 컨테이너를 다시 띄웠을 때 다른 IP 주소가 할당되면 접근할 수 없습니다. 따라서 컨테이너 이름을 호스트 이름으로 사용하는 편이 편리합니다.

과거에는 docker –link 옵션을 사용해서 컨테이너를 서로 연결해 주었습니다. 이제는 docker network가 그 기능을 대신하고 있으므로 이제 –link 옵션은 deprecated 상태로 레거시(lagacy)입니다. docker 공식문서 (Lagacy) Container links에서 관련 내용에 대한 경고문을 띄워 놓았습니다.

그림 1. Docker 공식문서 (Lagacy) Container links 문서에서 docker --link 옵션 사용이 deprecated 되었음을 알려주고 있음
그림 1. Docker 공식문서 (Lagacy) Container links 문서에서 docker –link 옵션 사용이 deprecated 되었음을 알려주고 있음

언젠가 완전히 사라질 것이겠지만, 혹시나 과거 docker –link 옵션이 필요한 분을 위해 사용법을 적어두겠습니다.

 docker run -d -P --name web --link db:db apps/webapp python app.py
ShellScript

아래와 같이 –link <name or id>:alias의 형식으로 사용하면 됩니다. 이렇게 하면 새로 생성되는 web 컨테이너에서 db 컨테이너에 접근할 수 있습니다. web 컨테이너에서 db라는 호스트이름으로 접근할 수 있게 되는 거죠.

docker network 명령어

이제는 docker –link 옵션을 이용하기 보다는 docker network 명령어를 사용해서 user-defined network을 생성하고 이를 활용합니다. 마치 윈도우에서 WORKGROUP 이름을 지정하는 것과 비슷한 개념이라고 생각을 하시면 되겠습니다. 같은 WORKGROUP 내의 호스트끼리 서로 접근할 수 있는 것과 같은 개념입니다.

당연히 이렇게 만들게 되는 network는 docker compose에서 설정한 network 이름으로 지정해 주면 간단히 해결됩니다. 이와 관련한 예시는 docker-compose WordPress 세팅 – 1부. mariadb 설정 문서에 적어두었으니, docker compose 이용과 관련해서 궁금한 분들은 확인해 보시면 되겠습니다. 단, docker-compose.yml에서 네트워크를 설정하더라도 사용할 network는 반드시 만들어야 합니다. docker network 생성하는 방법 살펴보겠습니다.

docker network create: 도커 네트워크 생성

네트워크 설정을 위해서 우선 docker network를 생성해야 합니다. 그 후에 컨테이너를 띄울 때 해당 네트워크를 사용하도록 설정해 주면 됩니다. 특정 네트워크를 사용하는 컨테이너에서 접근하고자 하는 대상 컨테이너 이름을 호스트 이름을 통해서 접근할 수 있게 됩니다.

우선 도커 네트워크를 생성할 이름과 함께 아래와 같이 입력해서 네트워크를 생성합니다. 명령어는 docker network create 뒤에 생성할 네트워크 이름을 적어주면 됩니다. 저는 sample이라는 네트워크 이름을 만들어 보겠습니다.

docker network create sample
ShellScript

네트워크 생성 명령을 내리면 아래와 같이 생성된 네트워크 id를 알려줍니다.

그림 2. docker network create 명령어로 docker 사용자정의 네트워크 생성
그림 2. docker network create 명령어로 docker 사용자정의 네트워크 생성

docker network ls: 도커 네트워크 리스트(목록)

현재 생성돼 있는 모든 네트워크 목록을 확인하는 방법으로 docker network ls 명령어가 있습니다. 새로 추가된 sample 네트워크가 있는지 확인해 보겠습니다.

docker network ls
ShellScript

네트워크 목록 최하단에 새로 생성된 네트워크 sample을 확인할 수 있으며, 위에서 생성된 network id의 앞 12자리와 동일한 것을 볼 수 있습니다.

그림 3. docker network ls 명령어로 생성한 네트워크 확인
그림 3. docker network ls 명령어로 생성한 네트워크 확인

생성한 docker network 지정하기

이제는 특정 컨테이너를 실행할 때 사용할 네트워크를 지정해 주면 됩니다. mysql과 php-fpm을 컨테이너로 사용한다고 가정하고 아래와 같이 –network 옵션을 설정해 줍니다.

먼저 sample 네트워크를 이용해서 mysql 컨테이너를 띄워줍니다.

docker run ..... --name mysql --network sample mysql:5.x.x
ShellScript

이제 sample 네트워크를 이용해서 php-fpm 컨테이너를 띄워줍니다.

docker run ..... --name php --network sample php:7.2-fpm
ShellScript

이제 두 컨테이너는 서로의 호스트 이름을 이용할 수 있습니다. mysql의 경우에는 사용자를 추가할 때 php 컨테이너로부터의 접근만 허용하게 할 수 있으며, php 컨테이너는 mysql이라는 호스트명으로 DB에 연결할 수 있습니다.

그리고 이렇게 하면 해당 컨테이너의 해당 포트로 바로 접근 가능하므로 굳이 port를 호스트로 노출시켜가면서 힘들게 이용하지 않아도 됩니다.

ping 명령어로 연결 확인

이제 ping 명령어를 사용해서 mysql 컨테이너에 호스트 이름 mysql로 접근이 가능한지 확인해 보겠습니다. 응답이 잘 오고 있습니다.

그림 4. ping 명령어 사용해서 mysql 컨테이너 연결 확인하기
그림 4. ping 명령어 사용해서 mysql 컨테이너 연결 확인하기

Nginx 설정 예시

예를 들면, NGINX 컨테이너를 하나 더 띄워서 nginx.conf 에서 fastcgi를 설정하는 경우라면 php-fpm은 보통 9000번 포트를 사용하니 아래와 같이 설정해 주면 됩니다. 해당 서버 설정 구간에 다음과 같이 호스트명으로 잡아주면 됩니다. 바뀌는 IP 주소에 불안해 할 필요가 없습니다.

fastcgi_pass php:9000;
Nginx

불필요한 네트워크 삭제

생성한 네트워크를 삭제할 때에는 docker network remove 명령어를 사용하면 됩니다. sample 네트워크를 제거해 보도록 하겠습니다.

docker network remove sample
ShellScript

참고자료

도커 공식 문서 (Lagacy) Container links를 참고하시면 정말 Lagacy 버전의 도커를 사용해야만 하는 분들께는 도움이 될 것 같습니다.
그리고 Docker Networking 페이지에 가시면 docker에서의 network 이용과 관련된 상세한 내용을 확인할 수 있습니다.

같이 읽으면 좋은 글

Vultr 서비스 사용기

국내 호스팅으로 CAFE24를 아주 작게 사용해왔었다. 월 500원의 비용으로 매우 저렴하게 이용했었다. 워드프레스로 블로그를 시작하면서부터 SSL 인증서가 적용되지 않는 점이 마음에 걸렸다. Letsencrypt를 사용하여 발급받은 인증서는 CAFE24에 자동으로 업로드가 되지 않아서 고객센터를 통해서 요청해야 했고, CAFE24의 응대는 깔끔한 느낌이 아니었다. 그리고 결정적으로 SSL을 443 포트로 서비스 받을 수 없었다.

“클라우드 서비스 중에 좀 저렴하고 쓸만한 게 없을까? 혹시 지금쯤이면 좀 쓸만할 게 있을까?” 하는 마음으로 반신반의하며 구글링한 결과 해외 서비스로 VULTR가 있다는 것을 알게 되었다. 여러 서비스들이 있었지만, 가격대비 스펙이 매우 훌륭하여 선택하였다.

현재 VC2 서비스로 5불 짜리를 이용하고 있다. 가장 저렴한 요금제는 2.5불 짜리가 있는데, 1 CPU, SSD 20G, 메모리 512MB, 트래픽 500GB인데, 운영체제까지 입맛에 맞게 골라서 쓸 수 있다는 점에 확 넘어가 버렸다. 카페24의 최저 요금 서비스가 월 500원으로 SSD 200MB에 트래픽 400MB을 제공하는 것에 비하면 가성비는 Vultr의 압승이라는 생각이 들었다.

참고로 Windows OS는 월 16불의 추가비용을 내고 사용할 수 있다. 하지만, ISO 파일을 업로드 하면 추가 비용 없이 사용할 수 있다. 해당 ISO 파일은 VirtIO 세팅이 된 파일이 아니면 설치가 제대로 되지 않는다고 한다.

처음에는 가격부터 따져보았다. 어차피 큰 요금 차이가 아니니 써보고 로케이션이 맘에 안 들면 바꾸자고 생각했다.

월 2.5불의 최저 요금제를 지원하는 Location은 미국 마이애미와 뉴저지였다. ping을 쳐 보니 300~400ms 정도가 나왔다. 그래도 쓸만하지 않을까 하는 마음으로 일단 뉴저지 Location으로 신청해 보았다. 터미널을 사용하는데, 역시 반응속도 300~400ms는 답답한 감이 많았다. 싸게 쓰려 했으나, 지리적으로 우리나라에 사는 한 뉴저지는 불편하겠다고 판단했다.

그래서 고민을 다시 시작했다. 커피 한잔에 5~6천원 한다고 보면 그냥 5불짜리를 사용하는 것도 나쁘지 않겠다는 생각이 들었다.

5불짜리는 1 CPU, SSD 25G, 메모리 1GB, 트래픽 1TB 이었다. 이참에 한 달에 하루는 날을 정해서 음료고 뭐고 먹지 말자고 다짐하고, 그 돈으로 서버를 굴리자고 생각하고 다시 로케이션을 탐색했다.

가장 가까운 곳으로 도쿄와 싱가폴이 있었고, 그 다음으로 미국의 로스엔젤레스와 시애틀이 눈에 들어왔다. VULTR에서는 핑 테스트 할 수 있는 정보를 다음 경로에서 제공하고 있다.

https://www.vultr.com/faq/#downloadspeedtests

집에서는 KT 0.5G 인터넷을 사용중인데, ping을 날려보면 도쿄는 무슨 이유인지 반응속도가 30~100ms 에 이르기까지 널을 뛰는 모습을 보여주었고, 싱가폴은 90~100ms, 시애틀은 140~160 정도를 오가며 안정적인 모습을 보여주었다. 마지막으로 LA를 찍어보았는데, 134~136ms 정도를 꾸준히 안정적으로 유지하는 모습을 보여줬다.

도쿄는 가깝고 빠를 땐 빠르지만 안정적이지 못하다는 느낌을 받았다. 사실 일본은 자연 재해가 발생할 경우 그렇게 안전하지 않을 수도 있다는 생각이 들어서 선택지에서 제외했다. 싱가폴도 가깝기는 하지만, 동남아 쪽이 아닌이상 국제 서비스를 하기에는 반응속도 때문에 이용자들이 너무 느리다고 생각할 수 있겠다는 생각이 들었다.

LA를 선택하면 필자도 크게 불편을 느끼지 않을 것 같았고, 미국 전역에서 접속해도 느리다는 생각을 하지 않을 것 같았다. 뭐 아직 미국을 대상으로 무슨 서비스를 할 생각은 없지만, 마음은 늘 원대하게 품어보는 것이니ㅎㅎ

결국 LA에 VC2 인스턴스를 생성하였으며, 필자는 도커 기반으로 서버를 운영할 것이라 운영체제는 CoreOS를 선택해서 설치하였다.

스냅샷 기능을 사용하면 현재의 상태를 보존할 수 있다. 다른 인스턴스로 이관할 필요가 있을 때 사용하면 된다. 고스트 이미지 떠 놓은 느낌이랄까. 일단 오늘 워드프레스를 이전한 기념으로 VULTR 사용기를 작성해 보았다.

참, VULTR은 회원에게 보상해 주는 제도가 있다. 회원의 소개로 가입해서 결제하면, 회원에게 보상을 해 준다. 보상 비용은 Paypal 계좌로 받을 수도 있고, 서버 운영비 계좌로 받을 수도 있다. 아래와 같은 배너도 제공해 준다. 원하는 배너를 선택해서 활용하면 되겠다.

그럼 VULTR 서비스에 대해 자세히 알아보려면, 클릭↓ 꾹~*