코딩하는 해달이

[Android Studio] OKHTTP3와 flask를 이용해 DB에 데이터 전송하기 3 본문

개인 공부/Android Studio

[Android Studio] OKHTTP3와 flask를 이용해 DB에 데이터 전송하기 3

코딩하는 해달 2022. 9. 7. 14:53

Version & 참고 링크

더보기

Version

 -운영체제 : Window 10

 -PYTHON : python 3.10.6 64-bit

 -Visual Studio Code : Visual Studio Code 1.70.1(user setup)

 -Android Studio : android-studio-2021.2.1.15-windows

 -MySQL : 8.0.29

 

이 글은 아래의 링크를 바탕으로 작성한 글입니다.

(제가 이해한 대로 글을 쓴 것이므로 틀린 내용이 있을 수도 있습니다.)

https://joyfulbean.tistory.com/114

 

https://square.github.io/okhttp/

 

https://velog.io/@jinny_0422/Android-Okhttp3-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%86%B5%EC%8B%A0-%ED%95%98%EA%B8%B0

 

https://stickode.tistory.com/41

 

https://hgusight.github.io/study/app/android/

 

https://gun0912.tistory.com/80 // 안드로이드 스튜디오 에러 해결 "CLEARTEXT communication to XXXX not permitted by network security policy"

 

https://ninano1109.tistory.com/135

 

https://stackoverflow.com/questions/47957433/sql-typeerror-cant-concat-tuple-to-bytes // flask sql문 에러

"can't concat tuple to bytes"

 

https://stackoverflow.com/questions/19238781/python-mysql-typeerror-execute-takes-from-2-to-4-positional-arguments-but-5-w  // flask sql문 에러

"Cursor.execute() takes from 2 to 3 positional arguments but 5 were given"

 

https://www.stechstar.com/user/zbxe/AlgorithmPython/75092

저번 포스팅에서 DB 생성부터 안드로이드 스튜디오의 데이터를 웹 서버로 보내는 작업까지 마무리를 했는데요. 

[Android Studio] OKHTTP3와 flask를 이용해 DB에 데이터 전송하기 1

 

이번 포스팅에서는 요청받은 데이터를 DB에 저장하는 코드를 짜봅시다.

코드는 [서버 실행, DB연결, 데이터 처리, 데이터 요청] 이렇게  4가지 파일로 나누어서 프로젝트 단위로 만들어보겠습니다.

이렇게 파일을 나누는 이유는 나중에 서버에서 할 일이 점점 많아 질 경우에 코드의 가독성을 위해서 나누어 주었습니다.

언어는 python 을 사용하고 python의 flask 모듈을 이용하겠습니다.

개발 도구는 VSCode를 이용하겠습니다.

 

먼저 flask 개발 환경을 설정해주어야하는데, 혹시 개발 환경 설정을 안하셨다면, 아래에 링크를 통해 설정해주시면 될 것 같습니다.

파이썬 - flask 웹 서버 환경 구축 (env, 가상 환경)

 

설정을 완료했다면, flask와 db를 연결해주는 python파일을 만들어줍시다.

파일이름은 임의로 설정해주면 됩니다. (저는 dbConnect.py라고 지어주었습니다.)

아래는 dbConnect.py의 코드입니다.

# vim dbConnect.py

import pymysql

def dbcon():
    conn = pymysql.connect(host='127.0.0.1', user='root', password='비밀번호', db='DB이름', charset='utf8') 
    # mysql 연결
    if conn.open: # DB 연결 여부 확인
        print('connected')
    return conn

def dbclose(conn):
    conn.close() # DB 연결 해제

다음은 서버를 실행하는 파일을 만들어보겠습니다.

저는 파일 이름을 runserver.py라고 지었습니다.

#vim runserver.py

from flask import Flask
from app import app

if __name__ == "__main__":
    app.run(host='0.0.0.0', port='5000', debug=True)
			# port : 웹서버를 5000포트에서 실행하겠다는 설정

이제 데이터를 받아오는 작업과 DB에 추가하는 작업이 남았는데, 데이터를 받아오는 작업부터 해봅시다.

파일을 하나 더 만들어주고, 이름은 임의로 지어줍시다. (저는 app.py라고 지었습니다.)

#vim app.py

from flask  import Flask, json, request
from models import sendData

app = Flask(__name__)

@app.route('/sendserver', methods=['POST','GET'])
# http://ip:5000/sendserver 주소가 호출되면 아래의 함수를 실행 (ip : 자신의 서버 ip)

def toDB(): # DB에 저장

    id = request.json['userID'] # json형태의 키값중 'userID'의 값을 리턴
    password = request.json['userPassword'] # json형태의 키값중 'userPassword'의 값을 리턴
    name = request.json['userName'] # json형태의 키값중 'userName'의 값을 리턴
    # request.json['key'] : 요청받은 json데이터에서 원하는 key의 값을 가져오는 메소드
    
    sendData.sendtodb(id,password,name) # models.py의 sendData클래스 내의 sendtodb함수 실행
    
    return "Success"

이제 거의 다 왔습니다. DB에 추가하는 파일을 만들어줍시다. models.py입니다.

(이 파일 역시 임의대로 이름을 지어주시면 됩니다.

# vim models.py

import pymysql
from dbConnect import dbcon, dbclose

class sendData():
    def sendtodb(id,password,name):
        conn = dbcon() # db연결 함수
        data = (id,password,name) 
        # 데이터 튜플형식으로 변경
        curdic = conn.cursor() # sql문을 입력할 cursor 생성
        sql = "INSERT INTO posttbl VALUES(%s,%s,%s)" # sql문
        curdic.execute(sql, data) # sql문 실행
        conn.commit() # 수정사항 반영
        dbclose(conn) # DB 연결 해제
        return print("sendtodb OK")

이렇게 파일을 다 만들어 준 후 VSCode 터미널에서 아래 코드로 가상환경을 실행시켜 줍니다.

(이미 실행중이라면 안해도 됩니다.)

env\Scripts\activate.bat

그 후에 앱 실행 파일을 실행시켜주는 명령어를 입력해서 서버를 실행시켜줍시다.

python runserver.py

이렇게 나온다면 정상적으로 실행이 된겁니다.

이제 안드로이드 스튜디오로 가서 데이터를 전송해봅시다.

폼에서 전송을 누르고 VSCode에서 아래처럼 로그가 떴다면 MySQL의 테이블의 데이터를 봅시다.

MySQL Commend 창을 켜주세요. 아래 코드를 입력해서 DB의 내용을 확인해 봅시다.

(bbs는 DB이름이고, users는 테이블 이름 입니다.)

이렇게 안드로이드 스튜디오 → flask 서버 → MySQL까지 데이터를 전송하는 방법에 대해서 공부해보았습니다.

아무것도 모르고 시작했을 땐 어떤것부터 해야할 지 갈피를 못잡았었는데, 데이터 흐름을 어느정도 이해하니 길이 보였습니다. 내가 앱에서 입력한 데이터가 DB에서 튀어나오니 나름 재미있기도 했습니다.

반응형
Comments