어느 날 여러 블로그를 탐방하던 중 이미지가 어떻게 처리되고 Markdown 형식의 게시물이 어떻게 저장되는지에 대한 궁금증이 생겼습니다. 이 궁금증은 개발에 대한 열망으로 이어져 더 고급 서비스를 만들기로 다짐했습니다. 기존 블로그 플랫폼이 이미지 데이터를 다루고 Markdown 형식의 콘텐츠를 저장하는 방식에 흥미를 느끼며, 이를 직접 학습하고 경험하고자 했습니다.
기술적인 어려움이 많이 예상되었지만. 잘 정리된 문서로 효율적인 학습이 가능했습니다. 목표는 새로운 서비스를 구축하는 것보다는 지향하고자하는 서비스를 스며들게하고 아니라 기술적인 스킬을 실제 적용을 통해 점진적으로 향상시키는 것이었습니다.
-
BackEnd
- express
- mysql
- sequelize 사용
- jwt-auth
- redis 활용
- bcrypt 를 통한 암호화
- multer middleware 를 통한 이미지 처리
- swagger를 통한 api-doc 명세 처리
-
FrontEnd
- react
- markdown Editor을 통해서 개발자들을 쓰기 편하게 구성
- axios
1인 개발 진행
URL | Method | Description | Token Required in Headers |
---|---|---|---|
/user |
GET | Return information for all users | Yes |
/user |
POST | Create a new user | No |
/user/profile |
GET | Get the profile of the authenticated user | Yes |
/user/{userId} |
GET | Get information about a specific user | No |
/user/{userId}/board |
GET | Get boards created by a specific user | No |
/user/{userId} |
PUT | Update information of a specific user | Yes |
/user/{userId} |
DELETE | Delete a specific user | Yes |
/user/{userId}/following |
POST | Follow a user | Yes |
/user/{userId}/follower |
GET | Get followers of a specific user | No |
/user/{userId}/following |
GET | Get users followed by a specific user | No |
/user/{userId}/following |
DELETE | Unfollow a user | Yes |
/user/{userId}/profile |
GET | Get profile information of a specific user | No |
/user/{userId}/profile |
POST | Update profile information of a specific user | Yes |
/auth/login |
POST | Log in and get access token | No |
/auth/refresh |
GET | Refresh access token | Yes |
/auth/logout |
POST | Log out and revoke access token | Yes |
/board |
POST | Create a new board | Yes |
/board |
GET | Get information for all boards | No |
/board/{boardId} |
GET | Get information about a specific board | No |
/board/{boardId} |
PUT | Update information of a specific board | Yes |
/board/{boardId} |
DELETE | Delete a specific board | Yes |
/board/{boardId}/comment |
POST | Create a new comment on a board | Yes |
/board/{boardId}/comment |
GET | Get comments on a board | No |
/board/{boardId}/comment/{commentId} |
GET | Get information about a specific comment | No |
/board/{boardId}/comment/{commentId} |
PUT | Update information of a specific comment | Yes |
/board/{boardId}/comment/{commentId} |
DELETE | Delete a specific comment | Yes |
/board/{boardId}/comment/{commentId}/reply |
POST | Create a new reply to a comment | Yes |
/board/{boardId}/comment/{commentId}/reply |
GET | Get all replies to a comment | No |
/board/{boardId}/comment/{commentId}/reply/{replyId} |
PUT | Update a specific reply | Yes |
/board/{boardId}/comment/{commentId}/reply/{replyId} |
DELETE | Delete a specific reply | Yes |
-
preview
-
comment
- markdown 형식의 글을 인식하여 블로그 게시판으로 등록 할 수 있음
- comment 댓글을 게시물 아래에 남길 수 있음
- 댓글에 reply 기능을 제공하여, 고도화된 블로그 서비스를 제공하고 있음/
-
preview
-
comment
- 가입 시 유저 1명 당 프로필 1개가 1:1 관계로 사상이 되며, 프로필은 기본 사진 제공이 되고 있음.
- 프로필 사진 변경 및 자기 소개 변경으로, 사용자에 대한 고도화된 서비스 제공하고있음.
- follow 알고리즘 도입으로 시간 복잡도 최적화(union find)
- multer 서버 분리
- elastic search를 통한 검색엔진
- kafka로 대용량 트래픽 대응