brunch

You can make anything
by writing

C.S.Lewis

by 마크 Jan 25. 2023

구름IDE에서 crontab을 이용한 파이썬 자동화

정해진 시간에 파이썬 파일 자동 실행하기

처음 코딩을 파이썬으로 배웠다. 배우기 쉽고 이해하기 쉬웠다. 다만, 단 하나 단점이 있었는데 나는 웹서비스를 구현하고 싶었는데 파이썬으로는 웹서비스를 구현하기가 쉽지 않았다.(장고 또는 플라스크 같은 프레임워크를 사용해야 한다) 그리고 또 하나는 완전 자동화를 구축하기가 어려웠다.


파이썬으로 구현하기 원했던 완전 자동화

내가 말하는 완전 자동화란 내가 어떤 동작을 하지 않아도 알아서 프로그램이 돌아가는 것을 뜻한다. 파이썬은 자동화를 구현하기 위한 최적의 프로그램 언어임에는 분명하지만 파이썬 설치 파일이 있는 곳에서만 작동된다.


예를 들어, 나는 파이썬을 배우고 얼마 후 매일매일 주가 정보를 수집해서 DB에 저장하는 코드를 짰다. 네이버 금융 데이터를 크롤링하여 코스피, 코스닥 전 종목의 데이터(시가, 종가, 거래량 등)를 가져와서 DB에 저장하였다. 프로그램은 아주 잘 작동했다. 그러나 매일매일 종목 정보를 가져오려면 내가 프로그램을 직접 실행해 주어야 했다. 이전 완전한 의미에서 자동화는 아니었다. 그래서 1주일에 한 번씩만 실행해도 되게끔 코드를 만들었다. 이 역시 잘 작동했지만 역시나 1주일에 한 번씩 프로그램을 실행해줘야 하는 번거로움(?)이 있었다.


물론 윈도우의 스케줄러를 이용하면 정해진 시간에 파이썬 파일을 실행시키도록 할 수 있다. 다만, 컴퓨터가 켜져 있다는 가정 하에! 나는 24시간 컴퓨터를 켜놓는 사람이 아니었다. 그랬다가는 아내에게 등짝 스매싱을 당할 것이다. 이것을 가능하려면 24시간 돌아가는 컴퓨터인 서버에서 파이썬을 구동시켜야 한다. 그런데 파이썬 전용 호스팅을 찾기도 어려웠을뿐더러, 가격도 작지 않았다.


해결책 1번

이런 문제를 해결하기 위해 나는 파이썬에서 php로 언어를 바꾸었다. php는 쉽게 웹서비스를 구현할 수 있을뿐더러 대부분의 호스팅이 php를 지원하고 있었다. 하지만 파이썬이 할 수 있는 일을 php로 구현하려면 너무 어려웠다. 코딩 초보였던 나에게는 큰 벽이었다. 그럼에도 php는 쉽게 완전 자동화를 이룰 수 있었다. 크론잡 사이트를 이용하면 웹으로 구현한 프로그램은 자동화를 쉽게 이룰 수 있었다. 그렇게 나는 파이썬을 멀리하고 php에 심취해 갔다.


해결책 2번

평소 자주 소통하는 블로그탐구님이 파이썬애니웨어를 알려주었다. 파이썬 전용 무료 호스팅을 이용할 수 있는 사이트였다. 호스팅에 파이썬 파일을 올리고 크론잡을 이용하면 자동화를 할 수 있겠다 싶었다. 막상 무료 호스팅을 개설하여 파이썬 파일을 업로드하고 실행해 보니 무료 호스팅에서는 작동에 한계가 있었다. 내가 원하는 기능이 작동하려면 유료 호스팅을 이용해야 하는 듯했다. 유료로 이용할 거 같으면 Amazon 서비스를 이용하지 굳이 파이썬 애니웨어를 쓰지는 않을 거라 이 역시 완전한 해결책은 아니었다.


그러다 파이썬 파일을 완전자동화로 구현할 수 있는 방법을 찾았다.

구름IDE에서 파이썬 코드를 작성하고 crontab을 이용해 완전 자동화가 가능했다.


구름IDE에서 crontab으로 정해진 시간에 파일 실행하기

이 글에서는 내가 지금도 사용하고 있는 구름IDE에서 파이썬 코드를 자동으로 정해진 시간에 실행하는 방법에 대해 자세히 기술하고자 한다.


구름IDE란

구름IDE에 대해 먼저 알아보자. 구름IDE에 대한 사이트 설명을 살펴보자.

구름IDE는 언제 어디서나 사용 가능한 클라우드 통합개발환경(Integrated Development Environment IDE)을 제공합니다. 웹브라우저만 있으면 코딩, 디버그, 컴파일, 배포 등 개발에 관련된 모든 작업을 클라우드에서 할 수 있습니다.


그렇다. 웹에서 이용할 수 있는 통합개발환경을 제공한다. 파이썬 파일을 작성하고 실행하고 컴파일하기 위해서는 컴퓨터에 파이썬을 설치하고 통합개발환경을 설치해야 한다. 많이 이용하는 것이 Visual Studio Code(VSC) 또는 파이참(Pycharm)이다. 이 프로그램을 컴퓨터에 설치하고 사용한다.


그런데 구름IDE는 내 컴퓨터가 아닌 웹사이트에서 이 통합개발환경을 이용할 수 있도록 해준 것이다. 그래서 내 컴퓨터가 아니더라도 언제 어디서든 인터넷만 연결되어 있다면 파이썬 파일을 작성하고 실행할 수 있게 된 것이다. 비단 파이썬만 지원하는 것은 아니다. 거의 모든 언어를 구름IDE에서 지원하고 있다.


구름IDE 컨테이너 실행해 보기

직접 한번 구름IDE에서 컨테이너를 개설하고 파이썬을 코드를 작성해 보자. 아래 사이트에 접속하면 구름IDE에 방문이 가능하다.

https://ide.goorm.io/


사이트 방문하면 아래와 같은 멋들어진 메인 페이지가 보인다.


회원가입은 무료이다. 회원가입 후 로그인까지 해보자. 로그인하면 대시보드로 이동하게 된다. 내가 이용하고 있는 서비스들을 볼 수 있는 관리자 페이지 같은 곳이다. 맨 처음에는 아래와 같이 보인다.

현재 플랜은 Free 무료버전이다. 유료버전을 이용하면 좀 더 많은 서비스들을 이용할 수 있으니 유료도 추후에 고려해 보자.


현재 무료 플랜에서는 컨테이너를 5개 만들 수 있고 컨테이너 동시 실행은 1개이며 항상 켜두기는 1개가 가능하다.


컨테이너란 운영체제가 설치된 템플릿이다. 파이썬, php, node 같은 프로그램이 설치된 공간이라고 볼 수 있다. 이 컨테이너를 개설하면 정한 언어로 된 통합개발환경을 만들어볼 수 있다.


항상 켜두기는 컨테이너에서 빠져나와도 항상 서버가 켜져 있도록 한 서비스이다. 계정당 1개 컨테이너에서만 항상 켜두기를 지원한다.(아래 글을 참고해 보자)

https://help.goorm.io/ko/goormide/18.faq/language-and-environment/always-on


항상 켜두기를 해야 내가 구름IDE를 실행해두지 않은 상태에서도 프로그램이 돌아가게 할 수 있다.

이제 컨테이너를 만들어보자.


컨테이너 만들기

우측상단에 '새 컨테이너'를 클릭한다.


컨테이너 이름을 쓴다. 설명은 써도 되고 안 써도 무방하다. 소프트웨어는 우리는 파이썬을 쓸 것이므로 파이썬을 선택한다. 나머지는 아래 그림과 같이 기본 선택사항으로 두고 '생성하기'를 클릭한다.


컨테이너가 설치되는 것을 볼 수 있다.


바로 컨테이너를 실행할 수도 있지만 우리는 크론탭을 이용한 자동화를 할 것이므로 '항상 켜두기'를 해야 한다. 생성된 컨테이너에서 '항상 켜두기'를 클릭해서 on 시켜둔다.


그리고 실행을 눌러보자.


컨테이너를 불러오면 아래와 같은 통합개발환경이 나온다.



코드 작성하기

아래와 같이 화면이 나오면 성공이다. 일단 현재 나온 탭(new run python)을 끈다. index.py라는 탭만 보인다.



기본적으로 print("Hello Python") 코드가 나오는데 한번 실행해 보자. 아래 화면과 같이 우측 상단에 실행메뉴에서 '현재 파일 실행'을 선택한다.


성공이다.


이제 내가 원하는 코드를 짠다. 나는 트위터 API를 이용해 파이썬으로 트윗을 발행하는 코드를 짰다. 코드는 달새(MoonBird)님이 제공해 주셨다.(감사합니다)

▶ 달새님 트위터 자동화 단톡방 바로가기 : [트윗] N잡러 시대의 슬기로운 모음(디지털 노마드)


모듈 설치하기


코드를 짜고 저장한 뒤 실행하니 오류가 나온다. 모듈이 설치되지 않았다는 것이다. 필요한 모듈을 설치해 준다. pip 명령어를 이용한 모듈 설치는 다음과 같다.


pip install 모듈명



그런데 또 오류가 나온다 pip를 업그레이드하라는 것이다. 내가 파이썬에서 가장 마음에 안 드는 점이다. 모듈 설치하는 게 너무 힘들다. 하지만 따라 써본다.


pip install --upgrade pip



pip를 업그레이드했다. 다시 pip를 이용해 모듈을 설치해 본다.


pip install tweepy



경고가 하나 뜨지만 무시한다. 실행해본다.



코드는 잘 작동되는 것을 확인했다.


이제 자동화로 넘어가 보자.


크론탭으로 자동실행하기

크론탭(crontab)이란 리눅스(Linux) 계열에서 특정 시간에 특정 파일을 실행하는 명령이다. 나는 리눅스를 잘 모른다. 따라서 크론탭에 대해 자세히 알고 싶다면 별도로 검색해서 알아보기 바란다. 나는 내가 아는 것만을 여기에 기술할 것이다.


크론탭을 설정하기 위해서는 아래의 과정을 따라 해보기 바란다. 핵심 개념은 반복할 시간을 정하고 반복 실행할 파일을 설정해주어야 한다는 것이다. 여기서 반복 실행할 파일을 어떤 프로그램을 이용해 실행할 것인가를 정해야 하는데 우리는 파이썬을 이용하고 있으므로 파이썬 파일이 어디에 있는지를 알려줘야 한다. 파이썬 파일 위치를 알아보려면 터미널에 다음과 같은 명령어를 입력한다.


which python



/usr/local/bin/python


이 경로를 메모장 같은 곳에 복사 붙여 넣기로 기억해 둔다.


이제 본격적으로 크론 명령어를 입력해 보자. 처음 크론탭 명령어를 입력하려면 크론탭 편집 모드로 들어가야 한다. 다음과 같은 명령어를 입력한다.


crontab -e


위 명령어를 입력하고 엔터를 누르면 아래와 같은 화면으로 바뀔 것이다. 일단 당황하지 말고 아무것도 누르지 말자.(나는 매우 당황했었다.)


이 상태에서는 명령어 입력이 안된다. 명령어 입력상태로 만들려면 키보드의 i(ㅑ) 버튼을 누른다.(한글 모드에서는 작동 안 한다)


아래와 같이 '끼워넣기'라는 글이 나오면 성공이다.



커서와 엔터를 이용해 빈칸을 하나 만들어 명령어를 입력한다. 명령어 구조는 다음과 같다.


* * * * * 파이썬 경로 실행 파일 경로


여기서 *이 5개 있는데 이게 반복할 시간을 결정한다. 순서대로 다음과 같은 의미를 가진다.


첫번째 * : 분을 의미한다. *은 매 분을 뜻하고 5라고 입력하면 매 5분이란 뜻이다. 5분 마다가 아니라 시간상 5분을 뜻한다. 1시 5분, 2시 5분 이렇게 쓰고 싶을 때 숫자를 입력한다.

두번째 * : 시간을 의미한다. 두번째 *은 매 시간을 뜻한다. 특정 시간을 쓰려면 숫자를 적으면 된다.

세번째 * : 날짜를 의미한다. 세번째 *은 매일을 뜻한다. 특정 날짜를 쓰려면 숫자를 적는다.

네번째 * : 월을 의미한다. 네번째 *은 매월을 뜻한다. 특정 월을 쓰려면 숫자를 쓴다.

다섯째 * : 요일을 의미한다. 숫자로 요일을 표기한다. 매일을 뜻하면 *을 쓰면 된다.


예시를 보자.


12 3 * * * : 이건 매월 매일 3시 12분 이라는 뜻이다.
34 * * * * : 매월 매일 매시간 34분 마다 라는 뜻이다.
* * * * * : 매분마다라는 뜻이다.


매시 정각에 실행하고자 한다면?


0 * * * * 라고 쓰면 된다.


만약 2분 간격으로 실행하고 싶다면 어떻게 써야 할까?


*/2 * * * * 라고 쓴다.


처음엔 헷갈릴 수 있다. 정확히 의미를 파악해야 한다. 그래야 원하는 반복을 만들 수 있다. 시간을 들여 개념을 익혀봐야 한다. 자세한 내용은 다음 블로그 글을 참고해 보자.


나는 내가 만든 코드를 매 3분마다 실행하고 싶다. 그래서 다음과 같이 코드를 적었다.

*/3 * * * * /usr/local/bin/python /workspace/tweet/index.py


실행파일 위치는 터미널에서 확인할 수 있다. 


크론탭은 ctrl+c, ctrl+v가 먹지 않는다. 보통은 마우스 오른쪽 버튼을 누르면 붙여 넣기가 되는데 이상하게 구름IDE에서는 되지 않았다. 그래서 일일이 저 명령어를 입력해 주었다.


입력이 완료되면 저장하고 닫으면 된다. 먼저 ESC 버튼을 눌러 명령어 입력 상태를 종료한다. 그다음 저장하고 닫는 명령어는 다음과 같다.(반드시 이 순서를 지켜야 한다. ESC 버튼을 먼저 누른다)


:wq!


그리고 위 명령어를 입력한다. w : write, q : quit 란 뜻이다.



입력 후 엔터를 누르면 아래와 같이 크론탭이 설치되었다는 말과 함께 터미널로 돌아온다.


크론 명령어가 바뀌면 크론탭을 반드시 재시작해줘야 한다. 재시작 명령어는 다음과 같다.


service cron restart



그럼 이제 크론탭이 시작되었다.


내가 작성한 크론탭을 보고 싶다면 다음과 같은 명령어로 보면 된다.


crontab -l



위 이미지처럼 내가 입력한 명령어를 볼 수 있다.


만일 크론탭 명령어를 수정하고 싶다면 다시 crontab -e를 입력하고 크론탭으로 들어간다음 i를 눌러서 편집모드로 들어가서 수정하면 된다. 수정 후에는 반드시 재시작!


제대로 크론탭이 작동되고 있는지를 확인하려면


service cron status



실제로 트윗이 발행되고 있는지 확인해 보았다.



성공이다.


나 역시 처음에 많이 헤맸다. 내가 리눅스에 익숙지 않고 크론탭을 능수능란하게 다룰 줄 모르기 때문이다. 그러나 결국 여러 블로그 글들을 보고 성공했다. 이 글을 보는 여러분들도 분명 해낼 수 있을 것이라 생각한다.


파이썬을 집 컴퓨터로만 자동화하고 있다면 구름IDE를 이용해서 완전한 자동화도 한번 구축해 보았으면 하는 바람에서 긴 글을 작성하게 되었다.


궁금한 점은 댓글로 문의주세요.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari