codestates / codestates/ds-blog

[최근후] 트위터 API 웹 어플리케이션을 구성하는 라이브러리, 패키지들

Open
#262 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
2
Forks
4
PR merge metrics
No merged PRs in 30d

Description

# Intro

이번 주엔 파이썬을 이용해서 간단한 웹 어플리케이션을 만들어 보았습니다. 그 앱을 이용해 트위터 API 를 사용해서 데이터를 불러오고, 그것을 데이터베이스에 저장/조작하고, 또 그 데이터를 가지고 머신러닝을 접목까지 시켰습니다. 이렇게 정리해서 적어봐도 정말 복잡하죠? 이런 것들이 가능하게 되려면 파일 구성과 라이브러리, 패키지들을 모두 잘 이해해야 했습니다. 그 중 하나라도 정상 작동을 하지 않거나, 코드에 오류가 있거나, 파일 위치가 올바르지 않거나 등 우리가 맞닥뜨리는 수많은 에러들은 찾기도 힘들고, 찾는다고해도 해결방법을 알아내기 까진 정말 많은 인내와 시간을 필요로 했습니다. 라이브러리/패키지의 역할을 잘 이해하지 못한 저는 그런 에러들을 계속해서 맞이했고, 그것들은 정말 저를 혼란스럽게 했습니다...! 그래서 조금이나마 덜 헷갈리고자 라이브러리와 패키지들을 정리해 봤습니다!!!

### 1. Flask

Flask 는 Python의 마이크로 웹 프레임워크입니다. 여기서 웹 프레임워크란 웹 서비스 개발을 위한 하나의 뼈대 역할이라고 보시면 됩니다. Flask 같은 웹 프레임워크를 사용하는 가능 큰 이유는 웹 서비스 개발을 쉽고 빠르게 하기 위해서 입니다. 특히, Flask 와 관련된 확장 기능들이 많기 때문에 API 서버를 만들기에 매우 편리합니다.

```py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"
```

위 코드 작동이해 :

> 1. 먼저 Flask 클래스를 가져 왔습니다. 이 클래스의 인스턴스는 WSGI 어플리케이션이됩니다. * WSGI : 웹서버와 웹 애플리케이션의 인터페이스를 위한 파이썬 프레임워크
> 2. Flask 클래스의 인스턴스를 만듭니다. 이것은 Flask가 templates, static 파일 등을 찾을 위치를 알기 위해 필요합니다.
> 3. route()데코레이터를 사용하여 Flask에 함수를 트리거해야하는 URL을 알려줍니다.
> 4. 함수에는 특정 함수에 대한 URL을 생성하는데도 사용되는 이름이 주어지며 사용자의 브라우저에 표시하려는 메시지를 반환합니다.


Flask 어플을 터미널을 이용해 실행하는 방법 : FLASK_APP=파일이름 flask run

위 명령문을 실행해주면, 기본적으로 flask 어플은 5000 번 포트에 위치합니다. (http://localhost:5000)

### 2. SQLAlchemy

Flask 의 SQLAlchemy 는 ORM (Object Relational Mapper) 의 한 종류입니다. 데이터베이스와 상호작용할 때에 SQL 쿼리문을 사용하기도 하지만, SQLAlchemy 는 데이터베이스와 상호작용하는 것을 조금 더 친숙한 객체 형식으로 접근 가능하게 해주고, 코드 가독성이 좋다는 장점을 가지고 있습니다. 반면에, SQLAlchemy 로 복잡한 쿼리를 작성하는 것은 난이도가 높습니다.

플라스크 어플리케이션과 SQLAlchemy 의 사용법을 보시겠습니다.

```py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)

def __repr__(self):
return '' % self.username
```

위 코드 작동이해 :

> 1. 플라스크 어플리케이션을 만듬
> 2. 어플리케이션과 데이터베이스 연결
> 3. 어플리케이션을 전달하여 SQLAlchemy 오브젝트를 만듬
> 4. SQLAlchemy 오브젝트가 제공하는 Model 이라는 클래스를 사용하여 모델을 선언

이후 데이터베이스에 있는 테이블에 데이터를 저장하는 방법은 아래와 같습니다

```py
admin = User(username='admin', email='admin@example.com')
guest = User(username='guest', email='guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
```

그리고 데이터베이스에 저장된 데이터에 액세스할 수 있는 방법은 다음과 같습니다.

```py
User.query.all()
```

### 3. Tweepy

Tweepy 는 파이썬에서 트위터 API 를 손쉽게 사용할 수 있도록 해주는 패키지입니다. 트위터 API 를 사용해 직접 크롤링을 하는 것보다 Tweepy 를 사용하는 것이 훨씬 간단하고 빠릅니다.

```py
import tweepy

auth = tweepy.OAuthHandler("CONSUMER_KEY", "CONSUMER_SECRET")
auth.set_access_token("ACCESS_TOKEN", "ACCESS_TOKEN_SECRET")

api = tweepy.API(auth)
```

위 코드 작동이해 :

> 1. tweepy 패키지 import
> 2. 인증 자격 증명
> 3. tweepy.API 오브젝트 만들기

## 마치며...

웹 어플리케이션은 Flask 라는 파이썬의 웹 프레임워크의 도움을 받아 만들었습니다. 그리고 트위터에서 데이터를 불러오는 것은 Tweepy 를 사용했습니다. 또 그 불러온 데이터를 데이터베이스에 저장하는 것은 SQLAlchemy 를 통해 가능했습니다. 이런 기술들이 처음엔 이해하기 복잡하고 우리를 혼란스럽게 만들지만, 이런 것들이 없다면 웹 어플리케이션을 만드는 것이 더욱 더 험난한 과정이겠구나 라는 것을 깨닫게 되는 일주일이었습니다!

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.