Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

체대출신 코더의 개발자 성장기

node.js와 장고와 DB 연결 본문

CodeStates/TIL

node.js와 장고와 DB 연결

미토콘크리트 2019. 7. 28. 18:51

클라이언트와 node서버의 연결은 끝났고

이제 남은 과제는 node.js 와 장고서버, 장고서버와 db를 연결하여

클라이언트에 임의의 초성을 가져다 주는 것 이다!

 

1. csrf error 문제

새로운 명령어를 장고에 전달하여 '추가'한다고 생각했기 때문에 post 요청에 uid를 담아 보내주었다.

그러니 서버에서는 csrf token에 대한 에러를 보내면서 403이라는 메시지를 보내주었다.

CSRF는 Cross-site request forgery의 약자로서 

https://www.imperva.com/learn/application-security/csrf-cross-site-request-forgery/

해커가 다른 사람의 권한을 도용해서, 웹사이트에 악성코드를 심는 공격을 일컫는데,

이를 방지하기 위해 csrf token을 보내는 방법을 이용한다고 한다.

따라서 나는 token이 없기 때문에 403을 보내주는 구나 라고 생각하고 node.js에서 csrf-token을 npm install 하여

장고에 보내주었다.

하지만 서버는 대답이 없었다..

알고보니, csrf 인증은 get요청을 제외한 모든 요청에서 필요로 한다고 한다... 

장고서버의 코드를 찬찬히 살펴보니 

request.GET.get(uid) 라는 부분이 있었는데,  이 부분을 보고 post가 아닌 get요청에서 uid를 얻고 있구나라고 생각했다.

아마 post요청을 받아주는 곳이 장고서버 내부에 없었기 때문에 403을 계속 보내 준게 아닌가 싶다.

 

get요청을 보내니 장고 서버에서 설정해준 400코드가 오기 시작했다.

그럼 장고로 요청은 잘가고 있는데.. 왜 요청을 못받을까 ㅜㅜ 라고 생각했다.

 

결국 찾아낸 솔루션은 내가 axios를 잘못사용하고 있었던 것 이었다.

장고에서는 request로 계속 빈 QuertSet을 받고 있었고,

이를 보고 uid를 params로 보내주면 되겠구나라고 생각했다.

params는 주소에 아래와 같이 쿼리를 이용해 데이터를 전송하는 방식이다.

의문점은.. 위와 같이 쿼리문을 통해 정보를 받는 방식은 많이 위험하다고 들었는데.. 왜 위와같은 방법으로 내 계정을 인식해야 하는 걸까? 라는 점이었다.

주소에 내 정보가 추가되어있기 때문에 보안 상 문제가 많아서 2주프로젝트 할때는 로그인이나 회원가입할때는 주소에 정보를 담아 서버로 보내는 행위는 최대한 하지 말라고 했기 때문이다.

 

아무튼 위의 방식으로 진행하여 서버내부의 오류를 뜻하는 500 error를 받을 수 있었다.

에러를 보니 데이터베이스에서 아무것도 찾을 수 없기 때문에 return 해주는 것이 없어 일어나는 오류라고 생각했고 db연결에 돌입했다.

 django.db.utils.OperationalError : no such table: initial_sound_quiz_words

위의 에러가 떳는데, initial_sound_quiz_words 라는 table을 db에서 찾을 수가 없기 때문에 일어나는 오류라고 생각했다.

 

google에 검색해보니

변경사항을 반영해주고, db와 싱크를 맞춰주는 명령어를 적으면 된다고 했다.

python3 manage.py makemigration 

을 이용해 장고에 입력된 모델을 db에 인식 시켜줘야한다.

이후

python3 manage.py migrate --run-syncdb 

명령어를 이용해 db와 싱크를 맞춰주면 

initial_sound_quiz_words 라는 테이블의 생성을 알리는 메시지가 뜬다.

 

그리고 이 테이블안에 word_db에 있는 자료들을 모조리 복사하니, 임의의 초성을 구글 어시스턴트에게 던져줄수 있게 되었다!

'CodeStates > TIL' 카테고리의 다른 글

HTTP의 특성  (0) 2019.09.05
도커  (0) 2019.07.29
구글어시스턴트와 노드서버를 잇기2  (0) 2019.07.26
구글 어시스턴트와 노드 서버를 잇기1  (0) 2019.07.26
장고- 가상환경 구축?  (0) 2019.07.25
Comments