random함수, exist(), git branch, aws 정리
random 모듈
파이썬은 random모듈이 존재한다.
random을 import하여 사용할 수 있다.
random.random()
위와 같이 사용할 경우. 0이상 1미만의 숫자 중에서 아무 숫자를 하나 뽑아서 돌려준다.
random.randrange(1,10)
1부터 9까지 정수중 임의로 하나를 얻는 방법이다.
나는 이번 프로젝트에서 날씨에 알맞는 옷을 불러올때 옷 리스트를 랜덤으로 섞어주기 위해 사용했다.
random.shuffle(object)
object라는 자료를 임의로 섞어주는 역할을 한다.
import random
temp_clothes_F = list(temper_filter.filter(user_gender="F").values('id','img_ref'))
random.choice(temp_clothes_F)
이 경우는 tempclothesF에서 하나의 요소를 랜덤하게 추출하여 보여주는 것이다.
import random
random_clothes = random.sample(my_temp_clothes, min(10,len(my_temp_clothes)))
이렇게 하면 mytempclothes라는 자료에서 그 자료의 길이 또는 10개 중 작은 값만큼 랜덤하게 추출할 수 있다.
exist()
장고의 QuerySet에서 해당 값이 있는지 없는지 확인하는 메서드이다.
나같은 경우에는 유저의 아이디 중복 체크를 할 때 사용했다.
if User.objects.filter(user_name=new_user['user_name']).exists():
return JsonResponse({'message' : '이미 존재하는 아이디입니다.'}, status=400)
만약 존재하면 True값을 반환하여 if문 다음단게로 넘어갈 것이다.
나는 맨 처음 try, except 를 이용하여 get을 썼을때 ObjectDoesNotExist의 에러메세지가 날 경우로 나누어 생각하려 했지만 상단과 같은 방법이 훨씬 효율적일 것 같아서 상단의 방법을 사용했다.
git checkout TIP
git checkout을 할때 checkout을 하면서 바로 branch를 생성하는 방법 git checkout -b feature/clothes를 사용하면 새로운 branch를 생성하면서 checkout이 된다.
AWS 정리
load balancer
-
트래픽 분산시켜줌
-
서버를 알아서 분산시켜줌 (사실은 서버가 엄청많은데 마치 하나인것처럼 인식하게 됨)
-
반대되는 개념
- 서버하나에 바로 사람이 붙는것
- 사람이 많아져서 서버를 늘릴때 서버주소가 너무많아져서 못외움
Route53
- DNS : url주소 연결해주는것(DNS라는 서버가 연결시켜줌) 도메인과 연결 사람이 기억할 수 있는 주소로 실시간으로 매핑.
AWS S3
- 파일을 저장할 수 있는 공간을 서비스함
- 파일 저장해서 불러와줌 (서버에 저장하는것보다 속도면이나 여러부분에서 이득)
AWS
지역설정이 중요함 가까이 있는 곳에 있어야 속도가 빠르기 때문임
아이디 root 비밀번호 ****
한국어 입력을 위해 파라미터 그룹을 생성해야함 utf8mb4인 이유는? 옛날에 잘못만들어서 새로만든거 원래는 utf8이 맞다.
원래 mysql은 파라미터그룹이 있지않음 로컬로 설치했을때 설정파일이 존재함 my.enf라는 설정파일을 수정해야함
rds 는 알아서 쉽게 설정하게 서비스함 웹사이트에서 접속해서 설정해야함
대시보드 다시 가서 모디파이눌러서 데이터베이스 옵션가서 디비 파라미터 그룹을 korean 그룹으로 바꿔주자
컨티뉴하고
Apply immediately
ec2 보안쪽으로 안좋은 쪽임,, 프로젝트 성격상
어떤식으로접속하는지 제한하도록하는거
열어줘야하는 프로토콜이 http
서버에 접속할때는 아이디가아니라 key가 필요함
➜ ~ ssh -i ~/BackProject/django_project/pem키 운영체제@공용ip
에러뜨는 이유 : 파일이 너무 일반적으로 저장되서
➜ ~ sudo chmod 400 ~/BackProject/django_project/pem 키
하면 읽을 수있어짐
➜ ~ ssh -i ~/BackProject/django_project/pem키 aws운영체제(ubuntu)@퍼블릭 아이피
깃허브 이용하기위해 디플로이 키라는 것을 사용함 이것도 ssh 키임.
하나의 레포지토리만 읽을 수 있음.
git아이디비번쓰기엔 서버에 본인의 정보가 들어갈수있기때문
- ssh key
- git설정
- clone
ubuntu@ip-172-31-27-44:~$ ls ~/.ssh/
authorized_keys id_rsa id_rsa.pub
ubuntu@ip-172-31-27-44:~$ cat ~/.ssh/id_rsa.pub
해서 나온 값 확인 복사해서 깃헙 드플로이에 업로드 허가 되면 그후 깃클론함.
(base) ubuntu@ip-172-31-27-44:~$ conda create --name django python=3.7
nohup python manage.py runserver
마이셋팅에 ~.rds.amazonaws.com라는 호스트를 입력해야함. 아마존 호스트!
ssl 에러 나는 이유
오픈소스 드라이버, 공식소스 드라이버가있는데 문제가많음
mysqlclient 삭제하고
pip install mysql-connector-python로 바꿔야함
엔진 mysql.connector.django
➜ ~ http -v POST 퍼블릭아이피:8000/user
mysql 호스트로 들어가는 법
mysql -h ~rds.amazonaws.com -u root -p
-h 호스트 뜻
서버 돌리는 것(글로벌)
nohup python manage.py runserver 0.0.0.0:8000 &
runserver 뒤의 뜻은 모두 접속하게 허용한다는 뜻
서버 끄는 것
ps aux | grep django
kill -TERM 2305
kill 2305 차이는?
-TERM은 옵션이다. TERM을 주고 끄라는 뜻
CORS 문제 해결
ALLOWED_HOSTS = ['본인백엔드 퍼블릭아이피']
셋팅에 위의 값을 넣어주어야 cors 옵션을 해결할 수 있다.
프론트 역시 엔드포인트 주소를 백엔드 주소로 바꾸어 주어야한다.
프론트 서버 돌리기
node를 설치해야됨
package.json 의 scripts는 커맨드임.
npm run build
-> 프론트 파일을 압축시켜서 서버 실행.
npm run start
-> 하나하나 다 보여주는 것, 보통 개발단계에서 많이 쓴다.
npm install
-> 패키지.json을 자동으로 읽어서 거기안에있는걸 설치함
설치 후에는
- node_modules가 생김 보통 이건 .gitignore에 넣어둠