본문 바로가기

SW 개발104

라이딩 앱 STRAVA API 연동 방법 (Sample code) STRAVA는 전 세계적으로 유명한 자전거 기록 어플입니다. 자전거 이외에 달리기, 사이클, 등산, 테니스 등 많은 운동에 대한 활동량 기록(Activity Record)을 지원합니다. 활동량 기록은 SNS를 통해서 공유 가능하고, 상대 기록과 순위를 볼 수 있습니다. 최근 한국에서도 많은 자전거 매니아 분들이 사용 있으며, 특히 유럽과 미국에서 상당한 수의 사용자를 가지고 있습니다. STRAVA에서는 운동 기기나 스마트 와치를 직접 연동을 하지는 않지만, 각종 운동 데이터를 연동을 통해서 데이터를 수집하고 있으며, 무료/유료 서비스로 활동량 분석에 대한 분석 데이터를 제공합니다. STRAVA가 제공하는 서비스는 REST API 형태로 공개하고 있어 STRAVA 서버에서 데이터를 얻어와 자신만의 웹 페이.. 2020. 12. 26.
외부 망에서 Localhost를 접속하기: ngrok (일부 무료) 집에 있는 로컬 PC를 외부 인터넷 망에서 http 또는 https로 접속하는 방법은 공유기에 포트 포워딩을 설정하는 방법을 많이 사용했습니다. 공유기 포트 포워딩 설정보다 간단하게 외부 인터넷망에서 로컬 PC로 접속하는 방법을 제공하는 ngrok을 설명하도록 하겠습니다. 개발 목적으로 임시로 domain을 할당을 받거나, WebHook을 테스트할 때 유용합니다. 현재는 ngrok은 오픈 소스로 개발되는 툴이 아니고, 유료 서비스로 무료 서비스인 경우 일부 기능에 제한이 있습니다. 1. ngrok 이란 ngrok는 NAT 및 방화벽 뒤에 있는 로컬 서버를 보안 터널을 통해 공용 인터넷에 접속하는 방법을 제공합니다. snap의 ngrok 설치 페이지에서는 아래와 같이 설명되어 있습니다. ngrok: Sec.. 2020. 12. 16.
외부 망에서 Localhost를 접속하기: localtunnel (무료, domain제공) 이전 ngrok 포스팅에서 언급한 것처럼 내부망 PC의 Localhost를 외부 인터넷 망에 노출하는 방법으로 ngrok는 사용할 수 있습니다. ngrok의 단점은 무료 계정 사용자에 대해서 재 시작할 때마다 sub-domain 이름이 랜덤하게 설정되어 매번 URL을 변경해야 하는 불편함이 있습니다. 이러한 ngrok의 단점을 보안할 수 있는 대안은 www.softwaretestinghelp.com/ngrok-alternatives/에 자세하게 설명되어 있고, 이 중에서 Localtunnel을 사용해보기로 했습니다. Localtunnel: 무료, sub-domain name 지원 Serveo : 현재 접속 안됨 Teleconsole : ssh sharing에 적합. ssh tunnel를 통해서 http .. 2020. 12. 15.
무료 REST API 테스트 프로그램: Postman (설치, 활용법) RESP API를 사용하는 클라이언트를 개발하는 경우 서버와의 API 인증과 동작을 먼저 확인 후 파이썬, 자바, NodeJS, PHP 등의 언어로 소스 코드를 작성하는 경우가 많습니다. 이러한 목적으로 전통적인 curl을 사용하여 다양한 옵션으로 API를 테스트할 수 있지만, command line 기반의 툴이기 때문에 많은 '타이핑'이 필요합니다. Postman은 REST API 설계, 개발, 테스팅하는 GUI 툴로 개발 생산성을 높여주는 프로그램입니다. 윈도우 뿐 아니라, 리눅스와 macOS의 설치 프로그램을 지원하며, Web 환경 하에서도 Web Postman 사이트를 통해서 로컬 PC의 설치 프로그램과 동일한 기능을 사용할 수 있습니다. 여러 개의 PC를 사용하는 경우 Web Postman은 유.. 2020. 12. 5.
Python: 날짜와 시간 처리 함수(현재 날짜, 어제 날짜, UTC 시간) Python에서 날짜와 시간을 처리하는 datetime 모듈을 제공합니다. 현재 날짜와 시간 구하기 import datetime today =datetime.datetime.now() → 2020-11-29 21:21:22.933386 d1 = today.strftime("%Y%m%d") → 20201129 어제 날짜와 시간 import datetime today =datetime.datetime.now() → 2020-11-29 21:21:22.933386 yesterday = today - datetime.timedelta(1) → 2020-11-28 21:21:22.933386 d2 = yesterday.strftime("%Y%m%d") → 20201129 timedelta 함수 (출처: Ptyho.. 2020. 11. 30.
Python: xmltodict를 활용하여 XML를 JSON으로 변환하는 방법 일반적으로 REST API를 사용할 때 JSON을 많이 사용하고 있지만 일부 사이트는 XML 포맷을 사용해서 결과를 내려주고 있습니다. 본 포스팅은 XML을 읽어 JSON형태로 변환하는 방법을 설명합니다. Python에서는 XML 처리를 위해서 Elementary Tree를 지원하고 있습니다. 이는 tree구조로 데이터를 읽어 Dictionary 데이터 타입 대비해서 코드의 양이 다소 증가하게 됩니다. 기존 포스팅에서 설명을 했기 때문에 xmltodict 모듈 사용하도록 하겠습니다. xmltodict모듈은 아래 github 사이트와 참조 링크를 확인해주세요. Python xmltodict 모듈 사용이 필요한 경우: XML 을 JSON으로 변환할 때 사용 REST API 중 일부는 XML로 결과를 내려주는.. 2020. 11. 26.
공공 데이터 Open API 사용법: 코로나 확진자 현황 API (sample code) 공공 데이터 포털(Data Portal)은 행정안전부에서 운영하는 대기환경, 도로명 주소 서비스, 코로나 현황 등의 공공데이터를 REST API로 제공하는 시스템입니다. 대한민국 정부에서 운영하기 때문에 공공데이터 포털 사이트에서 아이디만 만들면 손쉽게 API를 사용할 수 있으며, '무료'로 사용 가능합니다. 정부부처 및 산하기관에서 발행하는 백서, 주제별 전문가가 선정한 최신 이슈와 관련된 지식, 지역/분류체계/제공기관/활용방법 별 공공데이터 개방 현황 등이 제공됩니다. 2020년 11월 현재 6,300개의 API와 36,384개의 파일 데이터를 제공합니다. 공공 데이터를 이용하는 절차는 아래와 같습니다. 사이트 회원 가입 API 분류 검색 API 사용 신청 및 API key 확보 API 호출 및 사용.. 2020. 11. 25.
Python 명령어 처리: Argparse 모듈 (ArgumentParser 사용 예제) Terminal에서 Python script을 터미널에서 실행할 때 명령어 옵션에 대한 parameter를 python으로 전달할 때 사용하는 방법입니다. 제가 작성했던 기존 code는 sys.argv 값을 확인해서 터미널 명령어 인자별로 값을 얻어서 python 변수에 할당하는 방법을 사용하고 있었습니다. 이 경우 명령어 parameter가 추가 또는 삭제하는 경우 if 문 하나씩 증가하는 불편함이 있습니다. Python에서는 Command line에서 argument처리를 위한 argparse 모듈을 지원합니다. ArgumentParser와 add_argument 함수를 조합하면 보다 편리한 명령어 Parser를 만들 수 있습니다. 아래 Usage: ./argv_test.py [parm] [param.. 2020. 9. 1.
Python에서 사용자 입력 받는 방법: input() Python에서 사용자 입력 값을 받는 input() 함수를 설명합니다. input() 함수는 string으로 입력을 받습니다. Python built-in함수로 별도 모듈의 import는 필요 없으며, 사용법 또한 매우 간단합니다. input()을 string으로 return 하기 때문에 separator를 사용해서 입력을 받는 경우 split() 함수를 활용하면 여러 개의 input을 받을 수 있습니다. > res = input() → 사용자 입력을 받아서 string으로 저장합니다. Sample code는 아래와 같습니다. def main_menu(): print ("------------------------------------------") print ("Select menu") print (.. 2020. 8. 31.
MobaXterm (Cygwin)에서 Python 및 PIP 설치 MobaXterm에서 Python을 설치하고 실행하는 방법을 설명합니다. MobaXterm은 내부적으로 Cygwin으로 동작하기 때문에 Cygiwin에서 Python을 설치하는 방법과 동일하며, MobaXterm 나름의 Package update 기능을 지원하고 있기 때문에 MobaXterm 구동 상태에서 패키지 업데이트가 가능합니다. MobaXterm 실행 상태에서 상단 메뉴의 ① Packages 메뉴를 선택합니다. 해당 메뉴를 선택하면 cygwin의 설치 정보를 업데이트하고 패키지를 선택하는 옵션을 보여줍니다. MobaXterm의 package update 메뉴에서 ② show lib/devel 옵션을 활성화하고, ③ 패키지 검색창에서 'python3-dev'를 입력합니다. 설치하고자 하는 packa.. 2020. 8. 31.
Android에서 Python 실행 (SL4A와 Termux 활용) Python은 Google Android OS에서 공식적으로 지원하고 언어가 아닙니다. 하지만 Open source의 SL4A라는 Project, Kivy Project와 함께 Termux와 같은 Linux Emulator를 통해서 Python을 설치하고 실행할 수 있습니다. SL4A를 Android Playstore에서 검색하면 QPython 3L, Pydroid3와 같은 App을 다운로드할 수 있습니다. 본 포스팅은 SL4A는 유튜브 동영상으로 설명을 대신하고 Termux에서 Python 사용하는 사례를 설명하고자 합니다. SL4A 기반의 app과 Termux에서 Python을 실행하는 경우에 대한 비교는 아래와 같이 정리할 수 있습니다. SL4A 기반의 Python (e.g. QPython 3L) .. 2020. 8. 29.
Android 에서 리눅스 App 실행: Linux Terminal Emulator (Termux) 활용 안드로이드 스마트 폰에서 Linux Application을 실행하는 방법을 설명하고자 합니다. Android 기반의 스마트 폰은 Linux Kernel위에 HAL, Android Framework을 사용하지만 사용자 레벨에서는 Java나 Kotlin으로 작성된 Application을 사용해야 하고, Linux Application을 그대로 사용할 수 없습니다. 안드로이드의 Libc는 Bionic libc이고, 리눅스의 Libc는 gLibc를 사용하기 때문에 리눅스에 빌드된 실행 파일을 그대로 실행하는 것은 불가능합니다. 이러한 차이점을 해결하기 위해서 안드로이드 스마트 폰에서는 Linux Terminal Emulator를 사용해야 합니다. Android에서 구동 가능한 리눅스 Terminal 중에서 Te.. 2020. 8. 29.
Android apkanalyzer 에러: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema 우분투 20.04 환경에서 Android APK 분석 tool인 apk analyzer를 설치 후 실행 시 발생하는 에러입니다. JAVA HOME 설정이 되지 않아서 발생하는 에러입니다. 에러 메시지 $ apkanalyzer ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation. # open jdk 설치 후 JAVA_HOME 설정 → sudo apt install openjdk-14-jre-headless # version 14.0.1+7-.. 2020. 8. 20.
Command line 기반 Android Apk 분석 툴: apkanalyzer Command line 기반의 Android APK 분석 tool 인 'apkanalyzer' 사용 방법에 대해서 정리하고자 합니다. Command line 분석 Tool은 Android Studio가 설치되지 않은 서버에서 APK를 분석하거나, APK 분석을 자동화할 때 유용하게 사용할 수 있습니다. Apk 분석 툴은 Google에서 배포하는 aapt2 (※ 정확하게는 aapt2는 리소스 컴파일 및 dump tool임)와 apkanalyzer가 있고, Python 기반의 apk-parser가 있습니다. 구글이 배포하는 tool은 최신 Android OS의 수정 사항까지 반영된다는 장점이 있고, APK를 디컴파일하여 분석하는 목적으로는 apk-parser가 좀 더 유용한 것 같습니다. 설치 apkanal.. 2020. 8. 20.
Python Error: #!/usr/bin/env python3: 그런 파일이나 디렉터리가 없습니다 (No such file or directory) Python code를 작성하다 보면 #!/usr/bin/env python3 구문에서 에러가 발생하는 경우가 있습니다. 예를 들어 윈도에서 작성한 파이썬 파일을 리눅스에서 수정 및 실행을 하다 보면 에러가 발생할 수 있습니다. 이전 포스팅 (https://kibua20.tistory.com/73)에서는 윈도우와 리눅스에서 줄 바꿈 문자가 문제가 되는 경우도 있고, 아래와 같이 윈도우와 리눅스의 UFT8 인코딩 방식에 의해서 에러가 발생하는 경우도 있습니다. Python code: Code에는 문제가 없다. #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os print ('test') 에러 메시지 #!/usr/bin/env python3: 그런 파일이나 디.. 2020. 8. 19.
Python: OSError: [Errno 98] Address already in use (Flask) Python으로 Web framework인 Flask를 공부하다가 발생하나 에러입니다. Flask에서 5000 포트를 사용하고 있는데 Flask 모듈이 비정상적으로 종료해서 5000 포트를 잡고 있어 발생하는 에러입니다. 에러 메시지 Traceback (most recent call last): File "/usr/lib/python3.8/runpy.py", line 193, in _run_module_as_mainreturn _run_code(code, main_globals, None, File "/usr/lib/python3.8/runpy.py", line 86, in _run_codeexec(code, run_globals) (중략) File "/usr/local/lib/python3.8/dist.. 2020. 7. 26.
Python code 숨기는 방법: PyInstaller로 실행 파일 만들기 파이썬을 작성한 코드는 byte code인 pyc파이로 변환하더라도 디컴파일이 쉽게 되기 때문에 코드를 숨길 수가 없습니다. (참고) 이에 비해 PyInstaller는 Py파일을 실행파일로 만들 수 있어 쉽게 코드를 숨길 수 있고, 필요한 lib 도 포함하고 있어 상용 서버에 파이썬으로 개발한 SW를 배포하기에 편리합니다. PyInstaller에 대한 설명은 아래 동영상을 참고해주세요. ※ 실행파일(.exe or ELF)도 Reverse Engineering으로 디컴파일이 가능하기 때문에 절대 신뢰하면 안되고, py나 pyc 보다는 그나마 코드를 숨기는 방법입니다. PyInstaller 설명 (출처: https://www.youtube.com/watch?v=RMkPGjGhzxg) 주의해야 점 PyInst.. 2020. 7. 21.
Python 폴더 및 파일 처리 함수 모음 Python 폴더 및 파일 처리 명령어 모음입니다. Python에서 폴더 및 파일을 처리하기 위해서는 import os 해야 합니다. 한 가지 주의할 점은 리눅스와 윈도우의 파일 경로 처리 방식이 다르기 때문에 파일 경로를 python 코드에서 하드 코딩하면 윈도우와 리눅스에서 호환성을 보장이 안되고, 반드시 os.path.join() 로 처리해야 합니다. import os 현재 작업 폴더 얻어오기: os.getcwd() os.getcwd() → /home/kibua/git/devDocs/file 현재 작업 폴더 변경하기: os.chdir() os.chdir('/home/kibua/git/devDocs') → /home/kibua/git/devDocs 특정 폴더의 폴더와 파일 리스트 확인하기: os.li.. 2020. 7. 17.
Service Account(JWT)을 활용한 Google Calendar API 사용 이전 Gmail API 포스팅에서는 Sever-side Web Application 기반으로 OAutho2 인증을 통해서 Access token을 받고 Gmail API를 사용하는 방법에 대해서 포스팅하였다. 본 포스팅에서는 Service Account를 기반한 OAuth 2.0 인증을 받고, Access token을 획득하여 Google Calendar API를 호출하는 과정을 설명하고 한다. 본 게시글은 Google OAutho2.0 의 Service account의 내용을 기반으로 설명하였으며, 실제 동작하는 python sample code도 포함되어 있습니다. Server side web application : Gmail API 게시글 [모바일/REST API] - Google Gmail AP.. 2020. 7. 12.
Python: 폴더 백업 기능 구현 (7zip 압축, Sample code) 특정 폴더(working_folder)를 일정 시간 간격으로 백업을 해야 기능이 필요해서 python으로 구현한 내용을 공유합니다. 특정 폴더의 백업 기능의 상세 구현 사항은 아래와 같습니다. Working folder의 하위에 모든 파일을 backup 한다. (주기적으로 실행은 crontab 사용) 하드 디스크를 용량을 절약하기 위해서 7zip 파일로 압축한다. (압축 포맷은 효율이 좋은 7 zip 사용) 백업 폴더에서 백업 파일 7zip 파일의 개수는 미리 설정한 최대 개수를 초과하지 않는다. 백업 파일의 최대 개수가 초과하는 경우 오래된 파일부터 삭제한다. 7zip 파일은 비밀 번호 설정한다. 아래 코드는 우분투를 환경에서 동작하는 검증한 code이고, os.system()를 수정하면 windows.. 2020. 7. 9.
JWT(JSON Web Token) Encoding 방법 (Python sample code) 글을 시작하기 전에 JWT에 대한 이해는 아래 동영상을 확인해주세요. 개념적으로 쉽게 설명이 되어있습니다. JWT에 대한 개념을 듣고 아래 내용을 확인하시면 실무적으로 도움이 될 것 같습니다. 출처: https://www.youtube.com/watch?v=MUUqogMpGiA Gmail REST API는 Service side Web application으로 Access token을 받아 Gmail API를 사용하는 과정을 설명하였고 이 경우에는 API의 권한(scope) 승인을 위해서 계정 사용자의 로그인과 명시적 권한 승인 과정이 필요하였다. JWT (Json Web Token) 방식은 서버-서버 인증 방식으로 웹 로그인 없이 서비스의 인증을 받을 수 있는 방법으로 서버에 공개를 키를 미리 등록하여.. 2020. 7. 8.
Google Gmail API 사용 방법 (2) - Sample code 앞선 게시글에서 Google API 콘솔에서 프로젝트를 생성한 후 credential.json을 얻는 방법을 설명하였고, 본 게시글은 아래 그림에서는 붉은색으로 표시한 '구글 인증 서버에 Authoized code를 요청 후 Access toekn을 받는 방법'을 설명하고자 한다. [모바일/REST API] - Google Gmail API 사용 방법 (1) [모바일/REST API] - Google gmail API 사용 방법 (3) Step 2. 구글 인증 서버에서 Authorization code 받기 구글에 OAutho 2.0 의 Web server application에서 설명된 https request 방법을 먼저 확인해야 한다. 구글의 샘플 코드를 보면 아래와 같다. https://accou.. 2020. 7. 5.
Repo 에러: repo sync unable to read sha1 file of xxx, cannot initialize work tree Android 소스를 repo 로 다운로드하다가 "repo sync unable to read sha1 file of xxx, cannot initialize work tree" 에러가 발생하였다. 네트워크가 느린 환경에서 긴 시간 동안 대용량의 소스 다운로드 하는 과정에서 오류가 발생하는 것으로 추정된다. 에러 메시지: repo sync unable to read sha1 file of xxx, cannot initialize work tree Syncing work tree: 73% (796/1090)error: unable to read sha1 file of xxx 수정 방법: repo sync 에서 에러가 발생하는 git 이 "Launcher3.git" 라고 가정 한다면 아래와 같이 ./repo.. 2020. 7. 3.
[실패 사례] WSL(Windows Subsystem for Linux) 에서 Android 빌드하기 Windows 10에서 Windows Subsystem Linux(WSL) 를 20년 5월 버전에 배포하였다. 윈도우 10에서 리눅스 커널이 그대로 올라가고, 리눅스의 실행 파일(elf)가 실행할 수 있다. USB와 같은 직력화 디바이스 컨트롤은 아직은 불가능하지만, GPU 접근이 가능하고 X-sever를 사용하면 GUI Application 도 실행 가능하다. 이에 WSL 환경에서 Android 소스를 빌드가 가능한지 확인하였다. 결과적으로 WSL에서 Android 소스 다운로드는 가능하나, 빌드는 "case sensitive file system"을 지원하지 않아 불가능하다. 1. WSL 가상 메모리 늘리기 WSL에서는 linux command 로 가상 메모리 설정은 불가능하고, wslconfig를 .. 2020. 7. 3.
Python 에러: /usr/bin/env: `python3\r': 그런 파일이나 디렉터리가 없습니다 Python code를 *.py 파일에 작성하고 terminal에서 실행하는 방법은 python 명령어 뒤에 py 파일을 인자로 전달하거나, 일반 실행 파일처럼./test.py로 직접 실행할 수 있다. test.py 파일을 바로 실행하기 위해서는 interpreter 지정 ( #!/usr/bin/env python3)있어야 하고, 실행 권한이(chmod 766) 있어야 한다. #python으로 test.py을 실행하는 방법 $ python3 test.py $ ./test.py test.py 파일 #!/usr/bin/env python3 # -*- coding:utf-8 -*- 에러 메시지 터미널에서 test.py 을 실행했을 때 "/usr/bin/env: `python3\r': 그런 파일이나 디렉터리가 .. 2020. 7. 3.
Python 소스 숨기는 방법: pyc 활용 (Bytecode로 컴파일) Python은 기본적으로 인터프리터 언어이기 때문에 별도의 컴파일과 링크 없이 실행(=해석) 가능합니다. 상용 프로그램으로 배포하는 경우나 보안 상 파이썬 소스 코드의 일부분을 숨겨야 하는 경우 Byte code로 변환하여 pyc (pyo) 파일을 사용할 수 있습니다. pyc 파일은 C 언어처럼 기계어로 컴파일한 것이 아니라 Byte code로 '변환'한 것이기 때문에 조금만 노력하면 원래의 소스 코드로 de-compile이 가능하기 때문에 절대적으로 소스 코드의 보안이 유지된다고 믿어서는 안 됩니다. 다만 소스코드를 보기 힘들게 하는 정도로 이해해야 합니다. Python 공식 문서에는 pyc로 컴파일하는 py_compile()는 아래와 같이 설명되어 있습니다. https://docs.python.org.. 2020. 6. 30.
Python 표준 입출력(stdin/stdout) 활용 - 리눅스 프로그램과 연동 작업 동기 Command line으로 email 전송 프로그램이 필요해서 Gmail API와 Python를 사용해서 sendmail() 함수를 구현하였다. Python으로 구현한 sendmail() 함수의 1차 구현은 아래와 같이 sender, to, subject, attachment, message를 파라미터를 받는 함수로 구현하였다. 앞에 4개 인자(sender, to, subject, attachment)는 까지는 함수 호출을 한 줄로 끝낼 수 있지만, mesaage (=email 내용)은 경우에 따라서 매우 길어져서 다른 방법을 찾아야 했다. 기존에 Postfix와 sendmail과 mail의 호출 예를 보니, bash의 | 와 2020. 6. 29.
Google Gmail API 사용 방법 (1) - Sample code Google에서 제공하는 Gmail REST API를 사용하는 방법에 대해서 설명하고자 한다. Google에서는 GMAIL 뿐 아니라 YouTube, Cloud, Analytics 등 거의 모든 서비스에 대해서 REST API(이하 API)를 지원한다. 참고고, 커멘드 라인으로 Gmail을 전송하는 방법은 아래 게시글에 설명되어 있다. 아래 2가지 모두 stmp 서버의 계정 정보가 노출되어야 한다. 우분투에서 gmail 활용하여 command line으로 email 전송 Python smtplib 사용한 email 발송 예제 (gmail) 본 게시글은 구글 API를 사용하기 위해서는 Web Server application 기준으로 3개의 게시글로 나눠서 설명할 예정이다. 1단계는 Google API C.. 2020. 6. 29.
Python JSON 사용 시 TypeError: Object of type bytes is not JSON serializable Python 3.8 버전에서 Dictionary 데이터를 JSON변환 시 발생했던 TypeError: Object of type bytes is not JSON serializable 에러에 대한 수정 사항입니다. json.dumps()함수는 일반 obj를 JSON 포맷의 string으로 serialize 한다고 설명되어 있다(아래 그림) . 즉, Dictionary를 JSON으로 변환하기 위해서는 일반적으로 string으로 직렬화하여 전달해야 하지만, 직렬화가 정의되지 않은 byte array 로 전달하여 Type error 에러가 발생하는 것입니다. decode('utf8') 함수를 사용해서 byte array를 string으로 변환하여 수정할 수 있습니다. 수정 전 코드 def CreateMessa.. 2020. 6. 29.
Python smtplib 사용한 email 발송 예제 (gmail) 이전 Post에서는 우분투에 postfix를 설치하고 gmail을 전송을 하는 방법을 확인하였습니다. 본 글은 python 에 기본 내장되어 있는smtplib를 사용하는 방법에 대해서 정리하였습니다. smtplib를 사용하면 간단하게 email 전송이 가능하나, python script 상에서 계정과 Password 가 노출된다는 문제점이 있습니다. 참고로, 아이디와 패스워드가 노출 없이 진행하기 위해서는 Google Gmail API를 사용할 수 있으며, 이는 access token으로 인증을 받아서 1 시간만 유효하기 때문에 보안 관점에서 유리합니다. [개발환경] - [Memo] 우분투에서 gmail활용하여 command line으로 email 전송 [모바일/REST API] - Google Gmai.. 2020. 6. 28.