7.20 ~ 7.27 ~ 고도화
5일 간의 다섯번째과제, sns 과제가 끝났다.
그동안 팀으로 하던 과제를 이번에는 개인과제로 받았다.
개발환경세팅부터 혼자서 해야했다.
사실 개인과제였지만 팀원분들의 도움을 많이 받으면서 진행했다.
마지막까지 감사합니다.
첫번째 문제 : 모델링
가장 먼저 직면한 문제는 모델링이었다. ERD로 모델링의 각을 잡은 후 진행하였으나 기능을 하나씩 구현하다보니 필드를 변경하고 함수를 추가해야하는 문제가 빈번하게 발생했었다.
해시태그와 좋아요를 ManyToManyField로 변경했다.
좋아요는 IntegerField로 설정한뒤 default로 0으로 설정한 후 증가시켜가면 된다고 생각했는데, 이렇게 되면 좋아요 취소를 구현하는 것이 어려웠다.
request.user가 좋아요 눌렀다면 -1, 누른 적이 없다면 +1 하여 if문으로 구현할 수 있을 줄 알았는데
팀원분의 조언에 힘입어 ManyToMany로 변경하였다.
해시태그는 CharField에서 입력받은 값을 ,을 기준으로 split하여 구현하려고 했는데, 확장성이 부족하다는 팀원님의 말씀에 ManyToMany로 변경하였다.
두번째 문제 : 해시태그 필터링
해시태그를 django-filter로 구현하고 싶었다.
필터링은 간단히 구현할 수 있었다.
문제는 url을 list?hashtags=해시태그이름
로 설정하고 싶은데
list?hashtags=해시태그아이디
처럼 해시태그의 아이디값으로 설정되어 골머리를 앓았다.
문제 해결은 stackoverflow에서 질문하여 해결했다.
django-filter의 FilterSet을 상속받아 새로운 HashtagFilter를 생성하였다.
세번째 문제 : 배포
nginx, mysql, django프로젝트를 docker-compose를 사용하여 배포하였다.
배포에는 성공했지만 static 파일이 적용이 안 되는 문제가 발생하였다.
nginx와 docker-compose파일, settings파일의 static경로를 잘못 설정한 줄 알았으나, 진짜 문제는 port에 있었다.
ec2 서버도 8000번 포트를 열어놓고 계속 접속하고 있는게 문제였고, 80번 포트로 접속하니 정상적으로 static 파일도 적용이 되었다.
8000번 포트는 gunicorn과 django가 소통하는 포트이고,
user - ec2 - nginx 는 80포트로 소통한다고 보면 된다.