티스토리 뷰

개발기

Django Instagram 개발기

Loweeeell 2018. 4. 26. 02:34

정말 오랜만에 작성하는 개발기!

Django 제네릭 뷰를 사용하여 블로그를 만들고 나서 든 생각은 함수형 뷰를 공부해야겠다는 생각이였다.

제네릭 뷰는 여러 기능을 구현하는 데 정말 편리하지만 자유롭게 기능을 구현하기에는 힘들었다. 

뭔가 틀에 맞춰서 구현하려고 하니 답답한 느낌..?

때문에 나는 함수형 뷰를 사용하여 인스타그램을 클론코딩하기로 결정했다.

인스타그램을 정한 이유는 나는 장고를 어느정도 공부했고, 인스타그램은 너무 쉽지도 너무 어렵지도 않게 구현할 수 있을 것 같았기 때문이다. (이 생각은 정말 5산이였다.)

프로젝트 기간을 한달 정도 예상했지만 학교 공부와 과제 덕분에 예상 시간을 훌쩍 넘어 거의 한달 반~두달만에 완성했다.


목표와 계획

먼저 목표를 정하고 개발 계획부터 짰다.


목표는 어느정도 달성한 것 같다. ㅎㅎ 뿌듯

계획은 크게 기능 구현과 디자인 구현으로 나누었다.

디자인 구현은 인스타그램과 다른 분들이 인스타그램 클론코딩한 것을 보고 참조했고,

기능은 인스타그램에 있는 기능을 최대한 구현하는 방향으로 계획했다.


계획한 기능과 기능 구현

- 무한스크롤 X

무한 스크롤은 AJAX와 JQuery로 간단하게 구현가능할 것이라고 생각했으나 실패.... 

무한 스크롤 AJAX를 처리하는 뷰를 실행할 때 다른 뷰에서 오류가 나는 것을 보고 멘탈이 터졌당. 

야매로 오류를 해결하긴 했지만 리스트를 뽑아야하기 때문에 코드가 너무 복잡해지고(댓글,좋아요,프로필 이미지 등) 시간이 너무 오래걸릴 것 같아 일단 구현을 미뤘다.  

- 팔로워 기능 O

- 팔로워,팔로잉 기능 구현

- 팔로잉 요청 기능 구현 

팔로잉 요청 기능은 내가 팔로잉하지 않은 유저가 나를 팔로잉 했을 경우 팔로잉 요청이 뜨게 만드는 기능이다.

나를 팔로워한 사람들 중 내가 팔로잉한 사람들은 맞팔이고 , 내가 팔로잉하지 않은 사람들은 팔로잉 요청으로 구분했다. 

- 검색(user,tag) O

- 태그 O

파이썬 정규식 re와 커스텀 태그를 사용해 해시태그를 구현했다.

나는 커스텀 태그는 정말 편리하고 유용한 장고의 특징이라고 구현하면서 많이 느꼈다. 고마워 ㅠㅠ 

- 좋아요 O

AJAX와 get_or_create를 사용하여 기능을 구현했다.

-  글 등록,수정,삭제 O

간편한 제네릭 뷰를 사용하다가 함수형 뷰로 직접 post 기능을 구현하니 django의 흐름을 더 익힐 수 있었던 것 같다.

장고를 처음 시작할 때는 제네릭 뷰보단 함수형 뷰를 먼저 사용하고 후에 제네릭 뷰를 익히는게 좋겠다고 생각했다.

- 댓글 O

- Oauth O

Oauth를 처음 사용할 때는 정말 하드코딩으로 키를 보내고 받고 하는 로직을 직접 짰었다.

그래서 "아 정말 Oauth 어렵다...." 라고 생각했었는데, 이번에 구글링을 쳐보니 oauth를 쉽게 사용할 수 있는 패키지가 있었다.(social-auth-app-django)

정말 간단하게 oauth를 구현할 수있었다.

- User custom

인스타그램에는 사용자마다 프로필 사진과 프로필 닉네임? 한줄소개? 를 가지고있다. 

나는 프로필 사진만 추가하기로 하고, User 모델을 커스텀하여 프로필 사진 필드를 추가하면 될 것이라고 생각했다.

하지만 장고는 User모델을 쉽게 커스텀하도록 하지 않았다.

여러개의 블로그를 참조하면서  프로필 사진 필드를 추가하려고 했지만 코드가 꼬이고 migrate 도 꼬이면서 총체적 난국이 되었었다..

결국 중반까지 진행됬던 프로젝트를 엎고 다시 구현하기 시작했다.

프로젝트를 엎고 나서야 User 모델을 커스텀할 때는 프로젝트 초반에 해줘야 한다는 것을 알게되었다....

구글링과 디버깅을 통해 OneToOne으로 User모델과 새로 만든 모델(프로필 필드가 있는)을 연결하여 프로필 사진을 추가할 수 있었다.

정말 뿌듯했당..... 

- 그 밖의 날짜 계산 커스텀태그, 댓글 더보기 등 구현


돌아보기 

잘한 점

이번 프로젝트를 진행하면서 계획했던 목표는 모두 이룬 것 같아 뿌듯하다.

django가 어떻게 작동하는지, django의 흐름을 파악하고 이해했다.

 Query를 사용한 Ajax도 많이 사용해보았다. 예전에는 이해도 안가고 해봐도 뭔지 몰랐었는데 직접 부딪히며 개발하니 이해도 쏙쏙 가고 AJAX의 편리함을 깨우쳤다.(ajax 짱bb) 

기능을 어떻게 구현할 지 생각하면서 문제해결 능력도 기른 것 같다.

1일 1커밋을 실천 중인데 django 프로젝트를 하며 1일 1커밋도 하고 공부 습관도 많이 늘어 난 것 같다.

뿌듯하다!

아쉬운 점

제일 아쉬운 점은 무한스크롤을 구현하지 못했다는 것.. 

계획했는데 지키지 못해 아쉽다.

다시 프로젝트를 하게되면 꼭 구현해보고 싶다.

또 하나 아쉬운 점은 예외 처리를 완벽하게 하지 못한 것 같아 마음에 걸린다.

예외 처리는 기능을 구현할 때 해야될 것을 다시 명심했다.

끝으로

이번에 프로젝트를 진행하면서 새로 배운 것(유용한 정보)들은 git til을 참고하여 블로그에 작성할 계획이다.

인스타그램 프로젝트는 나를 더욱 성장하게 해준 프로젝트 였던 것 같다. 

더욱 더 성장해서 더 멋진 웹 사이트를 개발하고 싶다.! 



배포사이트

http://lowell2735.pythonanywhere.com

깃허브

https://github.com/lowelllll/django-instagram





댓글