Instagram Clone Coding

HY·2022년 3월 18일
0

Instagram Clone Coding

목록 보기
1/3

Github Link

지난해 9월에 웹 개발을 공부하기 위해 인스타그램 클론 프로젝트를 진행했었다. 프론트엔드를 맡은 다른 한 분과 함께 백엔드 전반을 맡아 개발했다. 그때 공부하면서 노션에 정리했던 내용을 블로그에 옮겨 보려고 한다.

프로젝트를 처음 시작할 때는 프레임워크는커녕 프론트는 화면을 구성하는 거고 백은 db를 관리해 데이터를 보내준다는 정도밖에는 몰랐기 때문에 아래 인프런 강의와 책을 많이 참고했다.

[Inflearn] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
[책] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

Java Spring을 선택한 이유는 많이 사용되는 것 같아 어떤지 배워보고 싶어서였고 설정을 편리하게 할 수 있다고 하는 Spring Boot를 사용하게 되었다.
DB 또한 일반적으로 많이 사용하는 RDBMS인 MySQL을 사용했고, Java에서 객체와 테이블을 매핑해 DB를 편리하게 다룰 수 있게 해주는 JPA도 사용했다.


📝 기능 (API)

User

GET /api/user/:username 유저 정보 조회
PATCH /api/user/:username 유저 정보 수정
DELETE /api/user/:username 유저 정보 삭제
POST /api/user/register 유저 생성 (회원 가입)

Auth

POST /api/auth/login 로그인

Post

GET /api/posts/:username 특정 유저가 올린 모든 포스트 조회
GET /api/posts/feeds 내가 팔로우한 유저들이 올린 모든 포스트 조회
POST /api/posts 포스트 생성
DELETE /api/posts/:postId 포스트 삭제

POST /api/posts/:postId/like 포스트 like (좋아요)
DELETE /api/posts/:postId/like 포스트 unlike (좋아요 취소)

Comment

POST /api/comments 새 댓글 생성
DELETE /api/comments/:commentId 댓글 삭제
GET /api/posts/:postId/comments 특정 포스트의 모든 댓글 조회

GET /api/comments/:commentId/comments 특정 댓글의 대댓글 조회

POST /api/comments/:commentId/like 댓글 like (좋아요)
DELETE /api/comments/:commentId/like 댓글 unlike (좋아요 취소)

Follow

GET /api/follow/:username/followers 특정 유저의 팔로워 조회
GET /api/follow/:username/followings 특정 유저가 팔로잉하는 유저 조회
POST /api/follow/:username 유저 follow
DELETE /api/follow/:usernmae 유저 follow 취소

📝 개선이 필요한 부분

  • JWT refresh token 적용

    • access token의 유효 기간이 너무 길면 token을 탈취 당할 경우 보안에 취약해 짧게 하는 것이 좋은데 이를 보완하기 위해 refresh token을 도입할 필요가 있다.
    • 처음 로그인했을 때 refresh token을 같이 발급하고, access token이 만료되었을 때 새로 발급
    • refresh token의 유효 기간이 지나면 새로 로그인해야 함
  • 회원 가입 시 이메일을 보내 인증 완료 시 계정 활성화

    • 현재 아무 email 이나 써도 가입 가능
  • 페이징

    • 현재 모든 이미지를 한 번에 불러오게 구현되어 있음)
  • 이미지 서버

  • DM 기능


📝 회고

이 프로젝트를 시작할 때는 웹 개발 자체가 처음이었기 때문에 웹 개발 방식이나 스프링 부트의 사용법 등 아주 기초적인 부분부터 공부해야 했다. DB 설계부터 API 구현까지 백엔드 전반을 배웠고, Spring Boot, JPA 등을 사용하고 익힐 수 있었다. 다만, 프로젝트를 어떻게든 완성시키는 게 목표였고 시간은 한정되어 있었기 때문에 공부를 좀 더 깊이 있게 하지 못했다는 점과 프로젝트의 완성도 측면에서 아쉬움은 남는다. 조만간 Spring 수업을 듣게 될 것 같은데, 부족했던 점을 채울 수 있게 되길 바란다.


(작성 예정)

Instagram Clone Coding Backend #1 프로젝트 시작하기
Instagram Clone Coding Backend #2 DB와 JPA
Instagram Clone Coding Backend #3 회원가입 / 로그인 (Spring Security + JWT)

0개의 댓글