dduk-ddak / coding-night-live

Web-based Communication Application for Codelabs
Other
62 stars 11 forks source link

DB 교체 #83

Closed punkyoon closed 7 years ago

punkyoon commented 7 years ago

실제 서비스할 때, 많은 수의 유저 접속과 데이터 변경등을 DB가 견뎌 낼지 의문입니다.

이제부터 sqlite를 쓰기에는 어려울 것 같고, MySQL이나 PostgreSQL를 사용해야할 것 같은데 어떤게 좋을까요?

juice500ml commented 7 years ago

저번에 언급된 산발적인 db 충돌상황도 이 문제때문인 것 같음!

<문제상황> (written by @punkyoon)

  1. 방 관리자가 슬라이드 1, 2생성 후 1슬라이드에 위치 (1슬라이드 내용: A / 2슬라이드 내용: B)
  2. 참여자가 1 슬라이드 클릭
  3. 방 관리자가 1 슬라이드와 2 슬라이드의 순서 변경 (1->2 에서 2->1로)
  4. 방 관리자가 새 슬라이드 생성 (빈 슬라이드) (* 4단계에서 방 관리자는 새로 생성한 빈 슬라이드에 위치)
  5. 참여자는 새로 생성한 빈 슬라이드에 위치
  6. 방 관리자는 1 슬라이드에 위치한 후 빈 슬라이드와 2 슬라이드 위치 변경

총 5단계 거치면서 중간중간에 참여자가 볼 수 있는 슬라이드 리스트에서 슬라이드들이 사라지는 경우 목격됨

punkyoon commented 7 years ago

SQlite vs. MySQL vs. PostgreSQL

punkyoon commented 7 years ago

django는 postgreSQL과 잘 어울린다고 하네요!

juice500ml commented 7 years ago

저 글 읽어보니까 확실히 postgresql이 나아보이긴 합니다~

minhoryang commented 7 years ago

+1 psql!

shlee322 commented 7 years ago

지나가다 psql에 1따봉 드리고 갑니다.

juice500ml commented 7 years ago

PostgreSQL로 가죠! 추가적으로 #14 에서 생겼던 이슈도 확인합시다.

punkyoon commented 7 years ago

http://egloos.zum.com/ita9naiwa/v/4211543

설치

sudo apt-get update
sudo apt-get install python3-dev libpq-dev postgresql postgresql-contrib
sudo apt-get update
sudo apt-get install python-dev libpq-dev postgresql postgresql-contrib

로그인

sudo su - postgres

접속

psql

DB 생성 및 각종 설정

CREATE DATABASE codingnightlive;
CREATE USER cnluser WITH PASSWORD ‘temporary’;

ALTER ROLE cnluser SET client_encoding TO 'utf8';
ALTER ROLE cnluser SET default_transaction_isolation TO 'read committed';
ALTER ROLE cnluser SET timezone TO 'UTC-9';

GRANT ALL PRIVILEGES ON DATABASE codingnightlive TO cnluser;

psql 나가기

\q

postgres logout

exit
punkyoon commented 7 years ago

postgreSQL로 전환시 일부 TextField -> JSONField로 변경 필요

punkyoon commented 7 years ago

위의 링크된 자료는 ubuntu 14.04 기준으로 작성된 문서를 번역한 것입니다. 아래의 링크는 ubuntu 16.04를 기준으로 새로이 작성된 문서입니다.

https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-django-application-on-ubuntu-16-04

punkyoon commented 7 years ago

postgreSQL command

http://dbrang.tistory.com/749

  1. codingnightlive DB 접속
psql codingnightlive
  1. codingnightlive DB 테이블, 인덱스, 시퀀스, 뷰 목록 조회
\d
punkyoon commented 7 years ago

5d1ad47e1f9367326d0e881dda0ece2118b77957

사용자 입장에서 deploy를 할 때,

  1. postgreSQL 설치
  2. postgreSQL 접속 후, codingnightlive DB 생성
  3. codingnightlive DB 관리 계정 생성 (username : cnluser / password ; temporary) ++ coding_night_live/coding_night_live/settings.pyDATABASES에 적혀있는 username, password와 같아야 함
juice500ml commented 7 years ago

그러면 automation 문제는 어떻게 해결해야하나요? postgreSQL로 쿼리를 날리는 방식이 있나요?

punkyoon commented 7 years ago

@juice500ml 그 부분에 대해서 조금 더 찾아봐야 할거같아요~~~ 일단 연동 자체는 완료하고, 잘 동작하는 거 까진 확인했습니다. 추가로 일부 필드를 JSONField로 변경 해주는 것이 남아있어요.

punkyoon commented 7 years ago

psycopg2 사용

http://stackoverflow.com/questions/31192560/postgresql-and-python-automated-password-change

http://stackoverflow.com/questions/19426448/creating-a-postgresql-db-using-psycopg2

punkyoon commented 7 years ago

psycopg2를 사용하기에는 약간의 제약사항이 있는 것 같아, Makefile로 만들어보고 있는 중입니다.

3164e1b174573f8f4ddc9e1514107c345008323c

punkyoon commented 7 years ago

42033349546d96de130fefb9a9f7f4528df64324

우선은 test/ 폴더안에 Makefile을 만들어 두었습니다.

제대로 잘 동작하는 것 까지는 확인했는데, 기존에 만들어둔 Makefile과 병합해야할 필요가 있는 것 같습니다.

@juice500ml @minhoryang @fuzzythecat @taeseunglee

** 참고한 자료들

https://github.com/makinacorpus/ODE/blob/master/Makefile

https://www.postgresql.org/docs/9.3/static/app-dropdb.html

http://stackoverflow.com/questions/28585171/how-to-alter-role-from-command-line-in-postgresql

punkyoon commented 7 years ago

domain name이 너무 길어서 django.db.utils.DataError: value too long for type character varying(40)오류가 발생하는 경우, psql에서 ALTER TABLE socialaccount_socialapp ALTER COLUMN name TYPE character varying(65); 명령 입력!

punkyoon commented 7 years ago

현재 남은 사항들

  1. postgreSQL Makefile 병합

  2. Docker - postgreSQL 작성

위 두가지 사항만 완료되면 이 이슈를 닫을 수 있습니다.

minhoryang commented 7 years ago

찔림

minhoryang commented 7 years ago

makefile지금 살펴봤어요! 잘 동작하도록 짜여진 것 같아서 makefile merge하는걸 @taeseunglee 님이 진행하셔도 좋을 것 같습니다! 저는 2번 Docker-postgreSQL작성하는거 진행할게요.

minhoryang commented 7 years ago

spot instance하나 띄워서 테스트해보고있는데.... ㅠㅡㅠ 설정 잘못해서. 비싸게샀어용 ㅠㅠㅠ

minhoryang commented 7 years ago

secret_key_gen.py가 빠졌네요...는 저의 불찰입니다. 우와우... a135e31fb5bc0c87d2e94023e04a7435b96bd6fd 이런실수를하다니.

minhoryang commented 7 years ago

https://github.com/dduk-ddak/coding-night-live/compare/issue_83_docker

현재 남은 문제가 2개가 있는데요

  1. db초기화문제
  2. postgresql가 켜질때까지 worker가 기다리는 문제

1번은 사용자가 수동으로 make docker-prepare하면 될 것 같구요. (짜는중) 2번은 db가 켜질때까지 worker가 그냥 잘 기다릴 수 있을 것 같아서..(엉?) 1번 다 짜고 테스트해볼게요. 요청만 없으면 되지 않을까욥..?

punkyoon commented 7 years ago

이제 남은 문제는 Makefile 합치기, 문서화, postgre pw정도가 있는 거 맞나요? @juice500ml @minhoryang @fuzzythecat @taeseunglee

juice500ml commented 7 years ago

(ACK) 넵 그렇습니다~

minhoryang commented 7 years ago

으아;;; 끝냅시다! ㅠㅠㅠ

minhoryang commented 7 years ago

리뷰를 해주시면 감사히 받겠습니다! @punkyoon @juice500ml @taeseunglee

minhoryang commented 7 years ago

makefile에서 이런식으로 .prepared의 여부를 가지고, 처음에만 실행하고, 그 다음번부터 실행하지 않도록 플래그처럼 파일을 썻었는데요.

.prepared:
    echo Ready
    touch .prepared
    echo Set
goal: .prepared
    echo Go

얘가 .prepared로 하면 안되고 .prepared.out으로 하면 되는걸 발견했습니다. 그러니까 확장자가 있어야하는데요... f**k 그걸 넣었습니다.

이상하고 아름다운 makefile나라

그리고 이미 파일이 존재해서, 다시 빌드할 필요가 없는걸 timestamp로 비교하더라구요. 그러니까 makefile을 수정하면, 다시 저 .prepared로 들여가려고 합니다. (이건 못고침)

minhoryang commented 7 years ago

하... makefile어렵당;;; 빨리 버리고 python으로 가고싶어요

punkyoon commented 7 years ago

어쩌다보니 python으로 시작해서 makefile로 했다가 다시 python으로 돌아가야하는 상황이 되었군요..

punkyoon commented 7 years ago

이 이슈가 닫히고 나면,

http://guswnsxodlf.github.io/automate-deploy-using-fabric

https://beomi.github.io/2017/03/20/Deploy-Django-with-Fabric/

Fabric으로 바꾸는 작업을 계속 진행해야할 것 같습니다.

minhoryang commented 7 years ago

그것도 제가 총대매볼게요ㄲㄲㅋㅋㅋㅋ

minhoryang commented 7 years ago

한번 돌려보시고, 테스트해보시겠어요?

punkyoon commented 7 years ago

@minhoryang 잘동작하는거 확인했습니다!

minhoryang commented 7 years ago

그럼 이 이슈 닫고 master에 머지할까요?

punkyoon commented 7 years ago

@minhoryang 네 바로 병합해도 될 것 같네요!

punkyoon commented 7 years ago

fabric3 with circus

$ sudo apt install fabric
$ fab deploy
$ sudo circusd circus.ini