이번 시간부터 제가 직접 수강했던 데이터 과학, 기계학습, 인공지능에 관한 온라인 강의들 소개하고자 합니다.

 

기계학습 혹은 인공지능에 대해서 배우고 싶은데 어떻게 시작할지 모르는 분들을 위해서 좋은 강의라 생각하여 소개드립니다. Udemy라는 온라인 학습 사이트에 올려져 있는 유료 강의들 입니다. 가격도 수만원 정도로 그렇게 부담스럽지 않습니다. 저는 기계학습, 인공지능에 대해서 온라인 학습과정을 통해서 배웠고, 학교의 정규과목을 통해서 배우지 않았습니다. 하지만 강의의 내용이 충실하고, 강의를 따라서 실습도 해볼 수 있어서, 강의를 배운 후에는 직접 사용할 수 있을 정도입니다.

 

그럼 이번글부터 하나씩 소개해 보겠습니다.

 

데이터 과학 강의:

Udemy에 가셔서 강의 검색창에서 'Data Science A-Z: Hands-on Excersizes & ChatGPT Prize [2025]'로 검색하시면 됩니다.

요렇게 생긴 아저씨가 보이는 강의를 찾으시면 이 강의가 맞습니다.

강의는 영어로 진행되지만 한글자막도 지원됩니다. 다만 자막의 한극번역이 좀 어색한 부분도 있어서 동영상과 자막을 같이 보면서 맥락을 파악하면 될듯합니다.

 

해당 페이지의 강의 설명에 가서 설명을 chatgpt로 요약하면 아래와 같습니다.

 

데이터 사이언스 과정 소개

이 강의는 단순히 이론에만 의존하지 않고 실습 중심으로 진행됩니다. 완벽하게 모든 것이 잘 맞춰지는 수업이 아니라, 실제 데이터 사이언티스트가 매일 겪는 어려움과 고통을 생생히 체험하게 될 것입니다. 잘못된 데이터, 이상치, 불규칙성 등 수많은 문제들을 다루며, 이 과정을 통해 데이터 분석의 진짜 모습을 경험하게 됩니다.

이 과정이 특별한 이유는, 여러분이 데이터 사이언스의 모든 단계를 직접 경험하게 된다는 점입니다. 이 과정이 끝난 후, 여러분은 다음과 같은 기술들을 마스터하게 될 것입니다:

  • 데이터를 분석을 위한 형태로 정리하고 준비하는 방법
  • 기본적인 데이터 시각화 방법
  • 데이터 모델링 기술
  • 곡선 맞추기 (Curve Fitting) 방법
  • 분석 결과를 효과적으로 발표하는 기술

이 과정에서는 실제 업무 환경에서 겪을 수 있는 도전적이고 현실적인 문제들을 해결할 수 있는 능력을 키울 수 있습니다. 과제는 고난도로 생각을 자극하며, 그만큼 성취감도 클 것입니다. 여러분은 SQL, SSIS, Tableau, Gretl 등의 도구를 다루는 데 능숙해지며, 이 과정에서 배운 모든 것을 실제 업무에 바로 적용할 수 있습니다.

 

주요 학습 내용

  • 복잡한 데이터 사이언스 프로젝트의 전체 단계를 성공적으로 수행하는 방법
  • Tableau를 이용한 기본 시각화 및 데이터 마이닝 기술
  • 회귀 분석 (Linear Regression)로지스틱 회귀 분석 (Logistic Regression) 수행
  • 모델 평가 (R-squared, Adjusted R-squared 등)
  • 다중공선성을 확인하고 다루는 방법
  • SQL ServerSQL 스크립트 작성
  • 데이터 준비 및 이상치 처리 방법
  • 모델의 유지보수 및 개선 방법

 

강의 대상

  • 데이터 사이언스에 관심 있는 누구나
  • 데이터 마이닝 및 통계 모델링 기술을 향상시키고 싶은 사람
  • 데이터 준비 및 발표 기술을 향상시키고 싶은 사람

이 과정은 단순히 데이터를 다루는 기술만을 배우는 것이 아닙니다. 여러분은 실제 데이터를 가지고 문제를 해결하는 과정을 통해, 실제 업무에서 겪을 수 있는 상황들을 대비하게 될 것입니다. 이 강의를 통해 데이터 사이언스의 세계로 한 걸음 더 나아가세요!

지금 바로 수업에 참여하여 실제 업무에서 유용한 데이터 사이언스 기술을 배워보세요!

 

저자는 Kirill Eremenko로 기계학습과 인공지능 강의를 위한 자체적인 홈페이지(https://www.superdatascience.com/)도 운영하고 있습니다.

 

다음 글에서는 기계학습 과정에 대해서 소개하겠습니다.

 

'GreenTam의 생각' 카테고리의 다른 글

직장인으로서의 단상 2  (1) 2025.03.28
클라우드 컴퓨팅: Docker(도커)  (0) 2025.03.15
[공지] AWS 컨퍼런스  (0) 2025.03.15
클라우드 컴퓨팅: API 게이트웨이  (1) 2025.03.14
클라우드 컴퓨팅: Cloud Run  (0) 2025.03.13

 

지난번 글에서 2개의 호야 카르노사 화분에 대해서 말씀드렸습니다. 그 두 화분의 현재 상태입니다.

오른쪽 화분은 건강하게 잘 자라고 있습니다. 그리고 아래 사진에서 보이는 것처럼 새잎이 나기까지 합니다.

하지만 왼쪽화분은 죽어가고 있습니다. 잘 모르겠지만, 이 현상이 바로 그 '과습'인 것같습니다. 그래서 유튜브의 전문가님이 올리신 과습의 원인과 대처에 대해서 찾아 보았습니다.

 

'홈가든넷' 님께서 올리신 과습원인에 대한 영상

https://www.youtube.com/watch?v=PuH2xEYOz1Q을 보니 과습의 원인에 대해서 잘 설명을 해주십니다. (아래의 내용은 자막을 요약한 것입니다.)

  • ​뿌리 과습의 정의 (00:37): 뿌리가 과도한 수분에 노출되어 산소 공급이 부족해지고, 이로 인해 뿌리가 썩는 현상을 말합니다.​
  • ​과습의 주요 원인 (01:15):​
    • ​과도한 물 주기: 필요 이상으로 자주 물을 주는 경우.​
    • ​배수 불량: 화분의 배수구가 막혀 있거나 배수 능력이 떨어지는 경우.​
    • ​통풍 부족: 실내 공기의 흐름이 원활하지 않아 흙이 마르는 데 시간이 오래 걸리는 경우.​
  • ​과습으로 인한 증상 (02:45):​
    • ​잎의 변색: 잎이 노랗게 변하거나 갈색 반점이 생김.​
    • ​성장 지연: 새로운 잎이나 가지의 성장이 둔화됨.​
    • ​흙의 악취: 흙에서 썩은 냄새가 나는 경우.​
  • ​대처 방법 (04:10):​
    • ​물 주기 조절: 흙의 표면이 건조해졌을 때만 물을 주는 것이 중요합니다.​
    • ​배수 개선: 배수구를 확인하고, 필요 시 화분의 배수층을 추가하여 물이 잘 빠지도록 합니다.​
    • ​통풍 강화: 실내 공기의 흐름을 개선하여 흙이 빨리 마를 수 있도록 합니다.​
  • ​예방 방법 (06:05):​
    • ​적절한 흙 선택: 배수가 잘되는 흙을 사용하여 과도한 수분이 머무르지 않도록 합니다.​
    • ​규칙적인 점검: 식물의 상태를 주기적으로 확인하여 과습의 초기 증상을 빠르게 발견합니다.​
    • ​환경 조절: 실내 습도와 온도를 적절하게 유지하여 식물에게 최적의 환경을 제공합니다.​

 

한 문장으로 요약하자면, '물을 너무 자주 주면 과도한 수분으로 인해서 산소공급이 부족해지고, 그래서 뿌리가 썩는다'입니다.

 

그래서 과습대처 방안을 찾아보았습니다. 위의 영상은 과습이 심각할 때의 대처방법이 없어서 다른 영상을 찾아보니, '엄마의가드닝'님이 올리신 영상이 있습니다.

https://www.youtube.com/watch?v=cd97o7f_T4Y

과습이 심한 경우 식물을 꺼내어 뿌리를 물에 담가서 세척하고 다시 새 화분에 새 흙과 넣는 대처법이 있습니다.

 

그래서 이 방법을 시도 중입니다. 호야를 화분에서 꺼내서 물에 담가두었습니다.

며칠 담가두었다가 뿌리를 말리고 다시 새 화분에 새 흙(적옥토)에 넣을 생각입니다.

 

 

 

지난번 녹소토 + 펄라이트 글(습도센서 교정 12)에서 두 흙을 반씩 섞었는데, 이번에는 7:3(부피기준)으로 섞었습니다. 그래서 이번 측정 결과는 지난번 5:5결과 보다는 순수한 녹소토 쪽에 좀 더 가깝게 나타날 것으로 예상했습니다. 아래는 측정 결과 입니다. 혼합 흙의 무게는 약 150g이었습니다.

대체로 직선으로 잘 분포하고 있습니다. 위의 데이터를 fit한 결과는,

여기서 x는 상대습도(%), y는 센서의 값입니다. 이식을 뒤집으면,

이렇습니다.

 

그럼 이전의 순수한 녹소토, 순수한 펄라이트, 그리고 이 둘을 5:5로 섞은 결과와 비교해 보겠습니다.

순수한 녹소토: y = 17.68*x + 1065.60

순수한 펄라이트: y = 3.91*x + 803.11

5:5 측정결과: y = 10.47*x + 791.88

7:3 측정결과: y = 14.43*x + 713.45

5:5 가중예측식: 10.79*x + 934.36

7:3 가중예측식: 13.55*x + 986.85

위의 식들로 그래프를 그려보면 아래와 같습니다.

 

가로축, x는 상대습도(%), 세로축, y는 센서값입니다.

빨간색은 순수한 녹소토, 파란색은 순수한 펄라이트입니다.

보라색 실선은 녹소토와 펄라이트 식으로부터 반씩 가중평균한 식(예측식)이고, 보라색 점선은 측정결과입니다.

마지막으로, 녹색 실선은 녹소토와 펄라이트 식으로부터 7:3로 가중 평균한 식(예측식)이고, 녹색 점선은 측정 결과입니다.

 

그래프를 보면 녹색과 보라색 모두 예측한 값(실선)과 측정값(점선)이 약간씩 그러나 일정하게 차이(같은 센서값일 경우 습도가 약 10 ~ 15%정도의 차이)가 나는것을 볼 수 있습니다. (차이가 어디에서 올까요?) 그러니까 예측식을 사용하면 실제 습도보다 약 10% ~ 15정도 적게 예측합니다.

 

그리고 예측한 대로 7:3으로 섞은 결과(녹색)가 순수한 녹소토(빨강)에 좀 더 근접하는 것을 볼 수 있습니다. 그러니까, 혼합 흙의 경우 좀더 비율이 높은 종류의 흙 쪽으로 식이 이동하는 것을 볼 수 있습니다. 다음 번에는 거꾸로 3:7로 한번 더 해보도록 하겠습니다.

 

그래서 결론은, 가중평균한 식이 측정결과와 좀 차이가 있지만, 어느 정도 예측에 사용할 수 있겠다입니다.

 

우연한 기회에 식물 관리기기를 발견하여 소개합니다.

 

이름은 'OKO'라고 하는데, 토양습도, 대기온도와 습도, 그리고 pH를 측정합니다.

주소는 https://www.get-oko.com/입니다.

아래 사진처럼 제품의 몸체는 화분 가장자리에 걸치는 형태이고 센서를 흙에 꽂아 줍니다.

또한 아래 사진처럼 앱을 통해서 상태를 모니터할 수 있습니다.

앱을 통해서 각종 수치를 볼 수 있고, 알림을 받을 수 있고, 전문가 조언도 받을 수 있습니다. 재미있는 것은 다른 사람의 화분 상태도 볼 수 있다는 점입니다.

 

가격은 파운드화로 60파운드이니 한화로 약 10만원 정도입니다.

아직 판매는 시작하지 않았고, 판매 예약을 받고 있습니다.

 

'식물관리 제품 리뷰' 카테고리의 다른 글

식물관리 제품 리뷰: 플랜트두  (2) 2025.03.01

 

이번에는 최근 약 수년간 직장, 중소기업에서 일하면서 느낀점을 얘기해 보겠습니다.

 

지난 번 글에서 제가 미국 대학원에서 약 10년간 일했다는 것을 말씀드린 적이 있습니다. 그 경험과 비교하여 제 직장을 보면, 일단 먼저 드는 생각은, 직장에서의 인간관계, 그리고 전반적으로 한국에서의 인간관계가 매우 수직적이라는 것입니다. 저는 미국유학 전 약 27년간 한국에서 살았습니다. 그래서 한국에서도 학부, 대학원을 다녔습니다. 그래서 한국의 대학교, 대학원의 선후배관계, 그리고 최근 직장에서의 직급에 따른 위계를 겪어오고 있습니다.

 

그래서 드는 생각은, 한국에서는 인간관계가 '위나 아래는 있어도 옆이 없다'는 것을 느끼고 있습니다. 제가 이런 말을 하면 '직장은 직급이 있으니 위아래가 있는 게 당연한게 아닌가'라는 말을 하실 수 있겠습니다. 하지만 제가 말씀드리는 것은 직급에 대한 얘기가 아닙니다. 당연히 어느 조직이든 직급이 있고, 필요도 하기도 합니다. 그러나, 제 말의 뜻은 '서로 존중하자'라는 의미입니다.

 

직급이 높다고 그 위치를 이용해서 아래 사람을 부려먹거나 행세부리지 말자입니다. 어느 조직의 그룹이든 그 그룹의 목표가 있기 마련입니다. 그렇다면 직급이나 나이에 따른 서열을 없애고, 목표를 이루는데 장애가 있으면, 그 장애를 없애고 문제를 해결하기 위한 의견이 있으면 누구든 자유롭게 말할 수 있어야 합니다.

 

그러나 보통 직급이 높거나, 나이가 많거나, 선배거나 하면 일단 그 사람의 의견이 우선시 되고, 반대로 낮거나, 적거나, 후배면 의사 표현의 기회가 매우 적습니다. 또한 심지어, 자신이 아래 사람이라고 느끼면 시키지 않아도 나서서 아래 사람 행세를 합니다. 간단한 예를 들자면, 문을 열려고 다가가면, 먼저 나서서 종종 걸음으로 뛰어가서 문을 열어준다는지, 음식점에서 식사를 하기전에 수저를 제것까지 미리 단정히 깔아 든다지 하는 사소한 것들이 있는데 '과연 이렇게 까지 해야되나' 싶을 정도로 은근히 신경쓰이고 거부감마저 들때가 있습니다. 왜 스스로 아래사람 행세를 하는 걸까요?

 

제가 미국 대학원에 있을 때, 포닥 혹은 연구교수로 일할 때, 학부생들과 같이 프로젝트를 할 때가 있었습니다. 그 때 그 친구들은 저와 나이차이가 많이 남에도 불구하고 자기 의견을 말함에 거리낌이 없습니다. 미국문화 때문입니다. 미국에서는 한국보다는 인간관계가 좀 더 '옆'에 있습니다. 학생이 교수를 이름으로 부를 수도 있고, 자식을 부모를 이름으로 부를 수 도 있습니다. 제 지도 교수는 자기를 'professor'로 부르지 말고 이름으로 부르라고 했습니다. 왜냐면 그렇게 불러주면 자기는 오히려 격식차리는 게 느껴져 더 불편하기 때문이랍니다. 이렇듯 미국에서는 인간관계가 좀 더 '옆'을 지향하고 있습니다.

 

제가 말씀드리는 것은 단순히 호칭을 이름으로 부른다 그런 것이 아니고, 대화 상대의 직급, 나이를 가리지 않고 '자기 의견을 말할 수 있다'입니다. 물론 미국이라고 상황이나 조건을 무시하고 무조건 서로 맞먹으려 든다는 게 아니라 한국보다 상대적으로 좀 더 인간 관계가 수평적이라는 것을 말씀드리는 것입니다.

 

그럼 좀 더 인간관계가 수평적이라는 게 왜 좋을까요? 그 이유는 바로 '구성원들이 가지고 있는 재능, 아이디어를 좀 더 잘 활용할 수 있게 해주기 때문'이라고 대답할 수 있습니다. 거리낌없이 의견을 말할 수 있으니, 조직의 문제점이 무엇인지 쉽게 꺼내어 얘기할 수 있고, 그래서 의견을 나누다 보면 해결책도 쉽게 찾을 수 있기 때문입니다. 한국은 이런 점에서 너무나 경직되어 있고, 의견을 주고 받을 '옆 상대'가 없습니다. 일단 기본적으로 대화에서 경어를 써야되고, 서로 상대방을 부를때 직책을 붙여서 부르니 (김부장, 이차장하는 식으로), 대화 시작부터 위계질서를 기본으로 깔고 시작합니다. 그러니 항상 위 또는 아래만 있을 수 밖에요. 여기서 그치지 않고, 이런 '위아래' 스트레스가 결국 조직을 이탈하고 싶은 욕구를 불러 일어킵니다.

 

그래서 어쩌자는 것이냐라고 물으시면,

일단 호칭에서 직급을 빼고 "~씨"나 "~님"으로 불렀으면 합니다. 한 그룹이 있으면 그룹의 리더는 제외하고 나머지 그룹원은 모두 호칭을 그렇게 바꿉니다. 또한 나이에 관계없이 경어만 사용합니다. 회의를 할 경우에는 발언하는 사람의 나이가 적거나 직급이 낮아도 그 사람의 의견을 경청하고, 듣는 사람의 직급이나 나이 등으로 그 사람을 무시하지 않습니다. 다만, 능력이나 경험의 차이에서오는 차이는 존중 할 필요가 있습니다.

 

쓰고 보니 다소 내용이 왔다갔다하고 푸념 비슷하게 되었네요. 네 맞습니다, 오늘 좀 회사에서 열받는일이 있었거든요.

 

 

 

지난번 동생사 + 펄라이트 2편에 이어서 씁니다.

 

지난번 글에서 동생사의 변곡점의 위치는 40~50%(지난번 글 "토양습도 센서 교정 6(동생사편)"를 참조하세요), 동생사 + 펄라이트의 변곡점은 약 70%라고 말씀드렸습니다. 그래서 순수한 동생사의 변곡점은 50%가 아니라 70%가 아닌가하여 동생사로 다시 측정을 해보았습니다. 동생사 측정 시에 혹시나 50%까지만 측정을 하고 그보다 높은 습도의 데이터를 받지 못해서 그런것이 아닌가 생각했습니다.

 

아래는 재측정 결과입니다.

 

위의 그래프에서 가로축은 흙의 상대질량 대비 수분의 양(%)이고, 세로축은 센서의 값입니다. 새로 얻은 데이터와 "토양습도 센서 교정 6(동생사편)"의 데이터를 합쳐서 그래프에 그렸습니다.

 

이번 측정에서는 상대습도 50%를 넘어서 80%이상까지 측정하는 것을 목표로 했으나, 50%에 도달하니 물이 화분밑으로 새는 것을 보았습니다. 그러니까, 동생사는 품을 수 있는 수분의 최대치가 흙의 질량의 50%까지이고, 그 이상 물을 주면 물이 흙에 더 이상 흡수되지 않고 화분의 밑 구멍으로 새나가는 것을 알 수 있습니다. 그래서 이번 그래프도 이전 동생사 글의 그래프와 동일한 궤적을 그립니다.

 

위의 이유로 동생사의 그래프가 S자형 곡선(Sigmoid 함수형 곡선)을 그리고 변곡점의 위치는 여전히 40 ~ 50%입니다. 다른 이유가 아니라 그 이상 흙이 물을 품을수 없기 때문입니다. 그래서 동생사와 다른 흙(펄라이트 등)이 섞이면 변곡점의 위치가 50%보다 높게 나올 수 있습니다. 그러니까, 펄라이트 등의 다른 흙이 물을 더 품을 수 있게되므로, 전체 흙의 질량대비 약 80%가 되어야 물이 밑으로 새는 것입니다.

 

그렇다면, 동생사와 다른 흙을 섞었을때, 이런 복합흙의 센서 예측값을 구하려할 경우, 각 순수한 흙의 식에 대해서 부피에 대한 가중치를 곱하여 합산한다고 했는데, 지난번 "동생사 + 펄라이트 2편"에서 보았듯이 실제 측정과의 오차가 상당합니다. 그래서 동생사는 이런 가중치 합산방법이 잘 맞지 않습니다. 동생사와 다른 종류의 흙이 섞인 경우는, 그 경우마다 따로 센서값을 calibration을 해야 정확할 듯 합니다.

 

 

 

 

 

 

지난번(동생사 + 펄라이트 편)에 이어서 좀 더 데이터를 수집해 보았습니다. 지난번 글의 데이터를 보면 다른 데이터에 비해 좀 낮게 나오는 것들이 있었고, 그 원인으로 흙이 균일하게 배합되지 않은 것을 원인으로 들었습니다.

 

그래서 이번 실험에서는 좀 더 흙이 균일하게 잘 배합되도록 좀 더 긴 시간을 두고 저어서 균일하게 배합하였습니다. 아래는 이전 실험의 데이터와 합친 결과입니다.

 

 

이번에 얻은 데이터들은 이전의 위쪽의 데이터들이 집중된 곳에 더해졌고, 아래쪽에 위치한 데이터들은 더 이상 추가된 데이터가 없습니다. 즉, 이것이 의미하는 것은 아래의 처진 데이터들은 흙이 불균일하게 섞여서 나타난 결과로, 동생사와 펄라이트가 균일하게 섞여 있으면 나타나지 않을 값들입니다. 그래서 아래쪽의 처진 데이터들을 제거하고 나머지만 표시하면 아래와 같습니다.

이제 이 결과로 동생사 흙과 같이 sigmoid함수로 fit을하면 아래와 같이 나옵니다.

fit 결과는 아래와 같습니다.

 

여기서 x는 상대습도(%), y는 센서 값입니다.

이제 이 그래프를 이전 동생사, 펄라이트의 식들과 비교해 보겠습니다.

이번 측정 결과의 fit 함수는 보라색 실선, 그리고 동생사식과 펄라이트식을 0.5씩 가중평균하여 계산한 식은 보라색 점선으로 표시됩니다. 그러니까 순수한 동생사, 펄라이트 결과에서 예측한 결과(점선)과 실제 측정한 결과(실선)가 비슷한 sigmoid 함수 경향을 보입니다. 하지만 좀 차이가 있습니다. 예를 들어 센서값이 1200이면 예측한 습도는 30%라고 나오지만 실제로는 45%입니다.

 

어떤 이유로 이러한 차이가 나오는지는 아직 알수 없습니다. 부피 기준으로 흙을 반씩 섞는것이 예측식을 계산할 때 가중치를 0.5씩 놓는 것과 달라서 차이를 만드는 것 같습니다. 그래서 가중치를 달리하면서 계산한 것을 그려본 것이 아래의 그래프입니다.

 

예를 들자면, 0.3 & 0.7은 동생사식에 가중치 0.3, 펄라이트식에 가중치 0.7을 두고 합한 결과라는 의미입니다. 보다시피, 가중치를 바꾸어도 각 식의 변곡점의 위치(약 50%)가 측정결과(약 70~80%)와 일치하지 않습니다.

 

아무래도 흙을 섞을때 반씩이 아니라 달리 섞어야 변곡점의 위치가 비슷할 것 같습니다. 또는 섞는 비율 외 뭔가 다른 원인이 더 있을 수도 있으나, 현재로서는 그것이 무엇인지 잘 모르겠습니다.

 

어쨋든 "섞인 흙의 경우, 순수한 흙들의 측정결과들로부터 센서의 값을 어느 정도 예측해 볼수 있으나, 좀 오차가 있다"가 이번 글의 결론입니다.

 

 

1. Docker란 무엇인가?

 

Docker는 애플리케이션을 어디서나 쉽게 실행할 수 있도록 도와주는 도구입니다. 쉽게 말해, ‘포장 상자(컨테이너)’ 같은 역할을 합니다.

 

예를 들어, 우리가 물건을 택배로 보내려고 합니다. 상자 없이 물건을 그냥 보낸다면, 운송 과정에서 손상이 생기거나, 일부만 도착할 수도 있습니다. 하지만 튼튼한 상자에 잘 포장하면, 어디로 보내든 안전하고 빠르게 배송할 수 있습니다.

 

Docker도 이와 비슷합니다. 애플리케이션과 그 실행에 필요한 모든 것을 ‘컨테이너’ 라는 상자 안에 담아 둡니다. 이렇게 하면 개발자가 만든 프로그램을 어디에서 실행하든 동일한 환경에서 문제없이 작동할 수 있습니다.

 

또 다른 예로 Docker를 음식 배달 서비스에 비유해 보겠습니다. 일반적인 앱 배포 방식(전통적인 방법)에서는 마치 셰프가 요리를 만들고, 각 배달원이 매번 다른 방법으로 포장해서 배달합니다. 포장 방법이 다르다 보니 어떤 고객은 따뜻한 음식을 받지만, 어떤 고객은 식은 음식을 받을 수도 있습니다.

 

Docker를 이용한 배포(컨테이너 방식)에서는 모든 음식은 표준화된 용기에 포장됩니다. 고객이 어디에 있든 같은 품질의 음식을 받을 수 있습니다. 즉, Docker는 앱을 컨테이너라는 표준 포장 상자에 담아, 어디서든 안정적으로 배포될 수 있도록 돕는 역할을 합니다.

 

요약하자면, 도커는 앱과 실행환경 모두 한꺼번에 일정한 규격의 파일(이미지)에 담아두었다가, 운영체제가 무엇이든 어떠한 서버에도 실행할 수 있는 컨테이너라는 것입니다.

 

2. Docker는 어떻게 개발되었나?

 

Docker는 2013년, Solomon Hykes라는 개발자가 만들었습니다. 그는 개발자들이 쉽게 애플리케이션을 배포하고 실행할 수 있도록 돕기 위해 Docker를 만들었습니다. 초기에는 리눅스에서만 동작했지만, 점점 발전하면서 Windows와 Mac에서도 사용 가능해졌습니다. 지금은 Google, Microsoft, Amazon 같은 글로벌 클라우드 제공업체들도 Docker를 적극 활용하고 있습니다.

 

Docker는 클라우드와 매우 잘 어울립니다. 왜냐하면, 고객 앱의 트래픽이 증가하면 그에 맞추어 서버를 가변적으로 늘려줘야 하는데, Docker 이미지를 이용해서 똑같은 서버를 자동으로 쉽고 빠르게 늘릴 수 있기 때문입니다. 또한, 이미지 인식 모델 등의 사전 학습된 기계학습 모델들도 미리 이미지로 만들어두고 Docker 파일로 저장해 두었다가 이미지 인식 앱의 제작 등의 필요시에 꺼내 쓸수 있기 때문입니다.

 

3. Docker의 주요 장점

 

따라서 Docker의 이점을 다음과 같이 요약할 수 있습니다: 다양한 운영체제에서 실행 가능, 빠른 배포, 확장성과 유연성

 

4. 간단한 예제

 

아주 간단한 Python Flask 웹 애플리케이션을 만들어서 Docker 컨테이너에 담고 Google Cloud Platform(GCP)에서 실행해보겠습니다.

 

(1) 앱 코드 작성

먼저 아래와 같은 애플리케이션 코드를 작성합니다. (파일 이름은 app.py) 작성된 파일은 구글 클라우드 콘솔 터미널의 업로드 기능을 사용하여 클라우드의 기본 서버에 업로드해 줍니다. 이 코드는 Flask라는 웹 프레임워크를 사용하여 웹 서버를 만듭니다. 이 아래 코드의 목적은 웹상의 어느 브라우저에서도 이 코드를 실행하는 앱의 URL 주소를 입력하면, 브라우저에 “Hello, Docker on GCP!”라는 메시지를 출력하는 것입니다.

 

    from flask import Flask

    app = Flask(__name__)

    @app.route('/')

    def home():

    return "Hello, Docker on GCP!"

        if __name__ == "__main__":

    app.run(host="0.0.0.0", port=5000)

 

(2) Dockerfile 작성

이제 이 애플리케이션을 Docker 컨테이너로 감싸기 위해 Dockerfile을 작성합니다. Dockerfile은 다음과 같습니다. Dockerfile도 터미널을 이용하여 마찬가지로 업로드 해 줍니다.

 

    FROM python:3.9

    WORKDIR /app

    COPY app.py /app

    RUN pip install flask

    CMD ["python", "app.py"]

 

이 파일의 역할을 설명하면,

Python 3.9가 설치된 환경을 기반으로 하고,

우리가 만든 app.py 파일을 컨테이너 내부(/app)로 복사하고,

Flask를 설치한 후,

app.py를 실행하도록 합니다.

 

(3) Docker 이미지 빌드

이제 Docker를 사용하여 위의 Dockerfile을 실행하고 컨테이너를 생성해 보겠습니다.

터미널(명령 프롬프트)에서 다음 명령어를 실행합니다.

 

    docker build -t my-flask-app .

 

이 명령어는 현재 폴더(.)에 있는 Dockerfile을 읽고 "my-flask-app" 이라는 Docker 이미지를 생성합니다.

 

(4) Docker 컨테이너 실행

Docker 이미지를 실행하여 컨테이너를 생성하고 실행합니다.

 

    docker run -p 5000:5000 my-flask-app

 

여기서 -p 5000:5000 옵션은 컨테이너의 5000번 포트를 내 컴퓨터의 5000번 포트와 연결하는 역할을 합니다. 이제 앱은 클라우드의 기본 서버 상에서 실행됩니다.

 

하지만 터미널이 실행되는 클라우드 서버는 명령어 창으로 동작하고, 화면을 보여 줄 방법이 없으므로, 지금 단계에서는 브라우저로 앱이 정상적으로 동작하는지 확인할 수 없습니다. 또한, 이 앱은 나만 사용할 수 있고, 다른 사용자들은 사용할 수 없습니다. 따라서 로컬 컴퓨터를 이용해서 웹상에서 앱의 구동 여부를 확인하고 다른 사용자들도 사용할 수 있으려면 웹상에 배포해야 합니다.

 

(5) 웹에 배포하기

이제 웹상에서 앱을 배포하고 실행하려면 아래와 같이 합니다.

  • Google Cloud에 로그인

GCP 콘솔(https://console.cloud.google.com/)에 로그인합니다.

 

  • Google Cloud SDK 설치

구글 클라우드 콘솔 터미널에서 Google Cloud SDK를 설치합니다. (Docker뿐만 아니라 구글 클라우드의 모든 서비스를 명렁어 기반으로 사용하기 위해서 필요)

 

  • GCP 프로젝트 설정

구글 클라우드 계정 당 여러 개의 프로젝트 생성이 가능하므로, Docker 명령어 실행 전에 어느 프로젝트인지 알려줘야 합니다.

 

     gcloud config set project [YOUR_PROJECT_ID]

 

여기서 [YOUR_PROJECT_ID]는 사용자가 프로젝트 생성시 정해준 프로젝트 이름입니다.

 

  • Docker 이미지 업로드

Docker 이미지를 GCP 컨테이너 레지스트리(컨테이너 이미지 저장소)에 업로드합니다.

 

    gcloud builds submit --tag gcr.io/[YOUR_PROJECT_ID]/my-flask-app

 

  • Google Cloud Run을 사용하여 배포

이제 Cloud Run(제 글 중의 ‘클라우드 컴퓨팅: Cloud Run’을 참조하세요.)을 사용하여 Docker 컨테이너를 실행합니다.

 

    gcloud run deploy my-flask-app --image gcr.io/[YOUR_PROJECT_ID]/my-flask-app --platform managed --region us-central1 --allow-unauthenticated

 

위 명령어는 다음을 수행합니다.

my-flask-app이라는 이름으로 Cloud Run 서비스 배포,

Google Container Registry(GCR)에서 Docker 이미지 가져오기, (<-- 앞에서 저장한 이미지를 불러옵니다.)

GCP에서 실행될 위치(region) 설정 (us-central1), (<-- 사용자가 위치를 변경하여 지정할 수 있습니다.)

모든 사용자(인증 없이)에게 접근가능하도록 설정 (<-- API 게이트웨이를 사용하면 사용자 인증을 추가할 수 있습니다. 제 글 중의 ‘클라우드 컴퓨팅: API 게이트웨이’를 참조하세요.)

 

  • 클라우드에서 실행된 애플리케이션 사용법

이제 우리가 만든 애플리케이션은 인터넷에 연결된 누구나 사용할 수 있습니다!

Cloud Run 배포 후 터미널에 표시된 URL을 웹 브라우저 주소창에 넣고 엔터키를 누르면

브라우저 화면에서 "Hello, Docker on GCP!" 메시지를 확인할 수 있습니다.

 

5. 마무리

 

Docker를 사용하면 개발한 애플리케이션을 어디서든 동일한 환경에서 실행할 수 있습니다. Google Cloud Platform(GCP)과 함께 사용하면 애플리케이션을 쉽게 웹에 배포할 수 있습니다.

 

 

 

+ Recent posts