Google Adsense with Hugo

동기부여

  • 블로그 광고수익 비교 글을 보게 되었다.

  • 그런데, 현재 운영중인 이 블로그의 일일 방문자수가 300-400명이어서 방치하면 안될 것 같았다.

  • 간단하게 Google Adsense를 Hugo Website에 추가하도록 한다.

사전준비

Google Adsense

  • 우선 Google Adsense에 접속한다.

  • Google Ads에서 아래 그림과 같이 사이트를 클릭한다.

  • 사이트 추가 버튼을 누른다.

IAM User Practice

라이브러리 불러오기

  • 기 설치된 라이브러리를 불러오도록 한다.
import boto3
print(boto3.__version__)
1.23.5

IAM User 관련 주요 코드

  • 다음 코드는 유저를 생성하는 코드이다.
def create_user(username):
    iam = boto3.client('iam')
    response = iam.create_user(UserName=username)
    print(response)

create_user('testuser2fromwsl2')
{'User': {'Path': '/', 'UserName': 'testuser2fromwsl2', 'UserId': 'AIDAVRRRQ3HFXFQPOOY7Q', 'Arn': 'arn:aws:iam::381282212299:user/testuser2fromwsl2', 'CreateDate': datetime.datetime(2022, 5, 24, 5, 30, 6, tzinfo=tzutc())}, 'ResponseMetadata': {'RequestId': 'd5fa242b-9aa9-4ad9-a75a-ed23e041d4ba', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd5fa242b-9aa9-4ad9-a75a-ed23e041d4ba', 'content-type': 'text/xml', 'content-length': '495', 'date': 'Tue, 24 May 2022 05:30:05 GMT'}, 'RetryAttempts': 0}}
  • 이번에는 모든 사용자를 가져오는 코드를 작성한다.
def all_users():
    iam = boto3.client('iam')
    paginator = iam.get_paginator('list_users')
    for response in paginator.paginate():
        for user in response['Users']:
            username = user['UserName']
            Arn = user['Arn']
            print('Username : {} Arn : {}'.format(username, Arn))

all_users()
Username : aws-wsl2 Arn : arn:aws:iam::381282212299:user/aws-wsl2
Username : human Arn : arn:aws:iam::381282212299:user/human
Username : human-m1 Arn : arn:aws:iam::381282212299:user/human-m1
Username : testuser Arn : arn:aws:iam::381282212299:user/testuser
Username : testuser2 Arn : arn:aws:iam::381282212299:user/testuser2
Username : testuser2fromwsl2 Arn : arn:aws:iam::381282212299:user/testuser2fromwsl2
Username : testuser3 Arn : arn:aws:iam::381282212299:user/testuser3
  • 이번에는 사용자 이름을 변경한다.
    • testuser2fromwsl2 이름을 updatetest로 변경하는 코드다.
def update_user(old_username, new_username):
    iam = boto3.client('iam')
    
    response = iam.update_user(
        UserName=old_username, 
        NewUserName=new_username
    )
    
    print(response)

update_user('testuser2fromwsl2', 'updatetest')
all_users()
{'ResponseMetadata': {'RequestId': '4a567c96-d5ce-4e76-9344-6ab762fc9e01', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '4a567c96-d5ce-4e76-9344-6ab762fc9e01', 'content-type': 'text/xml', 'content-length': '200', 'date': 'Tue, 24 May 2022 05:30:16 GMT'}, 'RetryAttempts': 0}}
Username : aws-wsl2 Arn : arn:aws:iam::381282212299:user/aws-wsl2
Username : human Arn : arn:aws:iam::381282212299:user/human
Username : human-m1 Arn : arn:aws:iam::381282212299:user/human-m1
Username : testuser Arn : arn:aws:iam::381282212299:user/testuser
Username : testuser2 Arn : arn:aws:iam::381282212299:user/testuser2
Username : testuser3 Arn : arn:aws:iam::381282212299:user/testuser3
Username : updatetest Arn : arn:aws:iam::381282212299:user/updatetest

Python AWS 연동 예제

import boto3
import json

def create_policy():
    iam = boto3.client('iam')

    user_policy = {
        "Version":"2012-10-17",
        "Statement":[
            {
                "Effect": "Allow",
                "Action": "*",
                "Resource": "*"
            }
        ]
    }

    response = iam.create_policy(
        PolicyName = 'pyFullAccess',
        PolicyDocument=json.dumps(user_policy)
    )
    print(response)


create_policy()
{'Policy': {'PolicyName': 'pyFullAccess', 'PolicyId': 'ANPAVRRRQ3HFQIRVWB2MX', 'Arn': 'arn:aws:iam::381282212299:policy/pyFullAccess', 'Path': '/', 'DefaultVersionId': 'v1', 'AttachmentCount': 0, 'PermissionsBoundaryUsageCount': 0, 'IsAttachable': True, 'CreateDate': datetime.datetime(2022, 5, 23, 5, 40, 21, tzinfo=tzutc()), 'UpdateDate': datetime.datetime(2022, 5, 23, 5, 40, 21, tzinfo=tzutc())}, 'ResponseMetadata': {'RequestId': '8da83bae-6c24-4104-9da4-22795e46652a', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8da83bae-6c24-4104-9da4-22795e46652a', 'content-type': 'text/xml', 'content-length': '759', 'date': 'Mon, 23 May 2022 05:40:21 GMT'}, 'RetryAttempts': 0}}
  • AWS 콘솔창에서 IAM 대시보드에서 정책을 클릭하면 PolicyName인 pyFullAccess가 등록되어 있는 것을 확인할 수 있다.

AWS 개발환경 설정 - WSL2 & S3 & RDS

개요

  • 윈도우 WSL2에서 AWS 개발을 위한 기본 개발환경 설정을 진행한다.

WSL2 설치

Restart WSL2

  • WSL2 처음 작업할 때, 실행한다.
exec $SHELL

WSL2 주요 필수 패키지 설치

  • Python 3.8 버전을 설치한다.
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.7
  • Python 버전은 다음과 같다.
$ python3 --version
Python 3.8.10
  • 만약 Python 버전 변경이 안되면 전체 삭제하고 진행한다.

(옵션) Python 삭제

  • 현재 설치된 모든 파이썬 버전을 보여줌
ls /usr/bin/python* 
  • python3 버전과 관련된 모든 파일을 삭제함
sudo apt-get purge --auto-remove python3.8

awsebcli 설치 및 AWS CLI Configuration

  • awscli를 설치한다.
sudo apt install awscli
  • 버전은 다음과 같다.
$ aws --version
aws-cli/1.18.69 Python/3.8.10 Linux/5.10.16.3-microsoft-standard-WSL2 botocore/1.16.19

IAM 사용자 추가

  • AWS 회원가입은 완료된 상태에서 시작한다.

Django with Elastic Beanstalk - Settings

한줄 요약

  • 생각보다 쉽지 않기 때문에 Windows로 하기 보다는 WSL2로 하는 것을 권한다.
    • 이 부분은 추후 업데이트 할 예정이다.

Windows에 EB CLI 설치

C:\WINDOWS\system32>python --version
Python 3.7.4

C:\WINDOWS\system32>pip --version
pip 19.0.3 from c:\users\human\appdata\local\programs\python\python37-32\lib\site-packages\pip (python 3.7)
  • pip을 이용하여 EB CLI를 설치한다.
C:\Windows\System32> pip install awsebcli --upgrade --user
  • 환경변수를 설정한다.
    • Python 3.7 버전으로 설치 했다면, 아래 코드를 환경변수에 추가한다.
%USERPROFILE%\AppData\roaming\Python\Python37\scripts

[Python] 카카오톡 챗봇 오픈빌더를 활용한 사칙연산 계산기 구현

읽기 전 공지

  • 본 글은 2022년 11월 28일까지만 유효합니다. 무료 버전이 사라지기 때문에, 앞으로 어떻게 될지는 현재 글 쓰는 시점에서는 모릅니다. 이 부분에 주의해서 참고 하시기를 바랍니다.

개요

  • 카카오톡 챗봇 만들기를 Python + FLASK를 통해 간단한 튜토리얼을 만들어본다.

사전준비

  • OBT 참여승인을 받아야 한다.

기본설정

  • 카카오톡 챗봇 버튼 클릭 후, 봇 이름 생성
    • [봇 만들기] - [카카오톡 챗봇]

  • 카카오톡 채널 연결을 진행한다.

  • virtualenv를 활용하여 가상환경을 설정한다.

$ virtualenv venv
created virtual environment CPython3.9.7.final.0-64 in 6029ms
  creator CPython3Windows(dest=C:\Users\human\Desktop\heroku-kakao-chatbot\venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\human\AppData\Local\pypa\virtualenv)
    added seed packages: pip==22.0.4, setuptools==62.1.0, wheel==0.37.1
  activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

Heroku App 구축

  • 간단하게 app 파일을 만들어 Heroku App URL을 확보해보자.
  • app/main.py
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello, World!'
  • wsgi.py 생성
    • app은 폴더를 말하고, main은 main.py를 말한다.
from app.main import app

if __name__ == "__main__":
    app.run(threaded=True, port=5000)
  • Procfile 파일 작성
    • 카카오톡 챗봇에서는 포트번호를 입력을 해줘야 한다.
      • localhost:5000 처럼 명시적으로 입력해주는 것으로 생각하면 된다.
web: gunicorn --bind 0.0.0.0:$PORT wsgi:app
  • runtime.txt
    • Python 버전을 업로드 한다.
python-3.9.7
  • Heroku login
    • Heroku 배포 전에 반드시 로그인을 해야 한다.
$ heroku login
  • Heroku Project 생성
    • 프로젝트 생성 시, 같은 이름이 있을 경우 다시 작성할 수도 있다.
$ heroku create heroku-kakao-chatbot
  • Heroku 배포
    • Heroku에 배포하기 위해서는 크게 아래 코드만 기억한다.
$ git add .
$ git commit -am "your_message"
$ git push origin main ## Github Repository에 업데이트
$ git push heroku main ## Heroku 코드 배포
  • 기존 Existing App과 연동하려면 배포 전 아래 코드를 선 실행 후, 배포를 진행한다.
$ heroku git:remote -a example-app
  • 실행하면 아래와 같은 결과물이 나타난다.

스킬 서버 구축 기본편

  • 스킬 서버에서 제공하는 2가지 API URI는 다음과 닽다.

Python Selenium Crawling Tutorial

강의소개

개요

  • 크롬 드라이버를 활용하여 Selenium을 설치한다.
  • 네이버 평점에서 특정 영화(노트북)를 관람한 관람객이 영화에 댓글을 단 영화 수집

크롬 드라이버 설치

  • 자신의 크롬 버전과 같은 버전을 설치한다.
    • 오른쪽 상단에서 더보기를 클릭한다.
    • 도움말 > Chrome 정보를 클릭한다.

Untitled

django Web 개발 1 - 기본 설정

프로젝트 개요

  • Python Django로 To-do List를 만들어본다.

파이썬 설치

가상환경 설치

  • 파이썬 설치가 끝났다면, 해당 깃허브를 다운로드 받는다.
$ git clone https://github.com/dschloe/django_to_do.git
  • django_to_do 폴더에 진입 후 아래와 같이 실행한다.
$ cd django_to_do
$ virtualenv venv
created virtual environment CPython3.9.7.final.0-64 in 7884ms     
  creator CPython3Windows(dest=C:\Users\human\Desktop\django_to_do\venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\human\AppData\Local\pypa\virtualenv)
    added seed packages: pip==22.0.4, setuptools==62.1.0, wheel==0.37.1
  activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
  • 실제 실행 후 venv 폴더가 나타나는지 확인한다.
$ ls
README.md  venv/
  • 가상환경에 접속한다.
$ source venv/Scripts/activate
(venv)

환경 설정 Django

Installing Django

$ pip install django pytz

my_app 폴더 생성

  • 새로운 폴더 my_app 하나 생성 후 해당 경로에 접속한다.
$ mkdir my_app && cd my_app

djanog 개발 시작

  • 이제 django 프로젝트를 시작한다.
  • django 설치 후, todo_app 폴더와 manage.py가 실행되는지 확인한다.
$ django-admin startproject todo_app .
$ ls
manage.py*  todo_app/

초기 화면 실행

  • my_app 폴더에서 서버를 구동시킨다.
    • 접속 URL : http://127.0.0.1:8000/
$ python manage.py runserver

카카오톡 오픈 빌더 챗봇 만들기 1편

개요

  • 카카오톡 오픈 빌더 챗봇을 만드는 과정을 보여준다.
  • 회원가입이 필요할 수 있다.
  • 카카오톡 채널을 만든다.

등록하기

  • 구글 검색창에서 카카오톡 오픈 빌더를 검색한다..

Untitled

  • 로그인을 하도록 한다..

Untitled

  • 챗봇 관리자센터 OBT 참여 신청 메뉴가 나오는지 확인한다.

Untitled

카카오톡 채널 관리자 가입

  • 카카오톡 관리자 채널에서 새로운 채널을 만든다..

Untitled

  • 채널을 개설한다.
    • 프로필 사진, 소개글은 추후에 작성이 가능하다.
    • 작성이 끝나면 확인 버튼을 클릭한다.

Untitled

  • 이상이 없다면, ‘네, 입력한 정보로 개설하겠습니다.’ 버튼을 클릭한다.

Untitled

Visual Studio Code Oracle 연동

개요

  • VSCode에서 오라클을 연동하는 코드를 작성해본다.

Extension

  • Extension에서 Oracle을 검색 후, 설치를 진행한다.

Untitled

  • 설치 중간에 아래와 같은 문구가 나오면 해당 파일을 설치해야 한다.

Untitled

필수 설치 파일

Untitled

  • 위 그림에서 Install .NET Runtime for Windows x64를 클릭하면 아래 화면과 함께 설치 파일이 다운로드 된다.

Untitled

  • 설치 파일을 클릭하면 아래와 같은 설치 관리자가 등장한다.

Untitled

  • 특별하게 고려할 것은 없다. 정상적으로 설치가 되면 아래와 같은 화면이 나오면 설치는 종료가 된 것이다.

Untitled

PyCharm Oracle 연동

개요

  • PyCharm에서 Oracle과 연동하는 방법에 대해 작성한다.

Database Navigator 설치

  • Project 폴더에서 File - Settings - Plugins를 실행한다.
  • 검색창에 Database를 입력한다.
    • Database Navigator를 선택한다.
    • 설치가 완료되면, Restart IDE 창이 활성화가 될 것이다.
    • PyCharm을 재 시작한다.

Untitled

DB Navigator 실행

  • 상단 메뉴창에서 DB Navigator를 선택한다.

Untitled

  • 새로운 데이터베이스 버튼을 클릭한 후, Oracle을 선택한다.

Untitled

  • 필수 입력값을 입력 한 후, Test Connection을 실행하여 정상적으로 연동이 되었는지 확인한다.

Untitled

SQL 테스트

  • 이제 새로운 파일을 열고 쿼리 테스트를 진행해본다.

Untitled