- TrueEcho는 사용자가 자신의 진솔한 모습을 공유
- 네트워킹을 통해 자존감을 높이며 지속적인 성장을 도모할 수 있는 SNS 플랫폼
- 친구들과 자연스러운 일상을 나누고, 재미있는 콘텐츠를 통해 소통
- React Native를 활용한 사용자 친화적인 UI/UX 개발
- 엔티티 연관관계 & JPA 쿼리 수정으로 성능 66.7/97% 최적화
- Firebase Cloud Messaging(FCS)를 활용한 실시간 알림 기능 구현
- 친구 추천 FOF 알고리즘 설계 및 개발
- Azure Blob Storage 를 통해 이미지 URL 형태로 DB에 저장
- GitHub Actions을 통해서 AWS EC2 서버에 배포 자동화 구현
- Spring Boot를 활용한 RESTful API 설계 및 구현







Download the file

- 타 게시물에 대한 호기심
- 하루에 한 번 무작위 시간에 사진 촬영 알림
- 현실적인 상황을 컨텐츠로 생성
- 복잡한 기능이 없는 직관적인 촬영 단계
- 게시물을 통해서 진행하는 재미 컨텐츠
- 쉬운 친구 추가 & 삭제
개발 세부 내용
| 항목 |
하위 항목 |
| 회원 관리 |
회원, 회원가입 [시간대 설정], 로그인: one-way 암호화, 로그아웃 (토큰 삭제), 회원 정보 수정, 탈퇴, 차단, 핀 설정 및 삭제 (나중으로 변경) |
| 회원 식별 (토큰) |
토큰 생성, 토큰 검증, 토큰 재생성, 예외처리 |
| 친구 관리 |
친구 추가, 친구 삭제, 친구 추천 알고리즘 (전화번호로 찾기, 친구 동기화) |
| 사진 & 촬영 |
Azure 구축, 이미지 업로드, URL 저장, Post 테이블에 저장 |
| 게시물 |
게시물 출력 (친구, 랜덤 게시물), 정렬, 필터링, 댓글, 좋아요, 게시물에서 친구 추가 |
| 투표 |
투표지 구축, 투표지 유저 출력, 뽑기 알고리즘, 투표 결과 저장 |
| 랭킹 |
주차별 랭킹 정보 최신화 로직 (일요일 8시), 쿼리 1: WHERE week -> vote_id로 group(), 쿼리 2: target_user로 group() -> 카운트 -> 탑 3 |
| 알림 |
무작위 알림 로직, Web socket 구현, 랭크 알림 (일요일 8시), 투표 결과 알림 (투표 받을 시 익명 x), 댓글 알림, 좋아요 알림 |
| 설정 기능 |
알림 권한 설정, 노출 설정, 시간대 수정 |
| 에러 처리 & 최적화 |
에러 처리, 최적화 |
| 배포 |
배포 |
| ORM - 엔티티 |
각 테이블 연관 관계 점검, 앤티티 정의, 편의 메서드 작성 |
| 각 단계별 테스트 |
유닛 테스트, 통합 테스트 진행 |
테이블 1: Users
| 컬럼 |
타입 |
설명 |
| user_id |
BIGINT |
Primary Key |
| connect_by_friend |
BIT |
|
| user_birthday |
DATE |
|
| created_at |
DATETIME |
|
| rank_id |
BIGINT |
Foreign Key, references Ranks(rank_id) |
| user_name |
VARCHAR(20) |
|
| user_nick_name |
VARCHAR(20) |
|
| refresh_token |
VARCHAR(255) |
|
| user_email |
VARCHAR(255) |
|
| user_location |
VARCHAR(255) |
|
| user_password |
VARCHAR(255) |
|
| user_gender |
ENUM |
|
| user_profile_url |
TEXT |
|
| user_role |
ENUM |
|
| fcm_token |
VARCHAR(255) |
|
| notification_setting_id |
BIGINT |
Foreign Key, references Notification_setting(notification_setting_id) |
| x |
DOUBLE |
|
| y |
DOUBLE |
|
테이블 2: Votes
| 컬럼 |
타입 |
설명 |
| vote_id |
BIGINT |
Primary Key |
| vote_title |
VARCHAR(255) |
|
| vote_category |
ENUM |
|
테이블 3: Vote_results
| 컬럼 |
타입 |
설명 |
| vote_result_id |
BIGINT |
Primary Key |
| created_at |
DATETIME |
|
| user_id_target |
BIGINT |
Foreign Key, references Users(user_id) |
| user_id_voter |
BIGINT |
Foreign Key, references Users(user_id) |
| vote_id |
BIGINT |
Foreign Key, references Votes(vote_id) |
테이블 4: Notifications
| 컬럼 |
타입 |
설명 |
| notifications_id |
BIGINT |
Primary Key |
| created_at |
DATETIME |
|
| body |
VARCHAR(255) |
|
| content_id |
BIGINT |
|
| noti_type |
INT |
|
| sender_id |
BIGINT |
Foreign Key, references Users(user_id) |
| title |
VARCHAR(255) |
|
| like_id |
BIGINT |
Foreign Key, references Likes(like_id) |
| comment_id |
BIGINT |
Foreign Key, references Comments(comm_id) |
| rank_id |
BIGINT |
Foreign Key, references Ranks(rank_id) |
| vote_result_id |
BIGINT |
Foreign Key, references Vote_results(vote_result_id) |
테이블 5: Ranks
| 컬럼 |
타입 |
설명 |
| rank_id |
BIGINT |
Primary Key |
| rank_level |
INT |
|
| rank_week |
DATE |
|
테이블 6: Likes
| 컬럼 |
타입 |
설명 |
| like_id |
BIGINT |
Primary Key |
| post_id |
BIGINT |
Foreign Key, references Posts(post_id) |
| user_id |
BIGINT |
Foreign Key, references Users(user_id) |
테이블 7: Posts
| 컬럼 |
타입 |
설명 |
| post_id |
BIGINT |
Primary Key |
| created_at |
DATETIME |
|
| user_id |
BIGINT |
Foreign Key, references Users(user_id) |
| post_title |
VARCHAR(255) |
|
| post_status |
ENUM |
|
| post_url_back |
TEXT |
|
| post_url_front |
TEXT |
|
테이블 8: Pins
| 컬럼 |
타입 |
설명 |
| pin_id |
BIGINT |
Primary Key |
| created_at |
DATETIME |
|
| post_id |
BIGINT |
Foreign Key, references Posts(post_id) |
| user_id |
BIGINT |
Foreign Key, references Users(user_id) |
테이블 9: Comments
| 컬럼 |
타입 |
설명 |
| comm_id |
BIGINT |
Primary Key |
| created_at |
DATETIME |
|
| main_comment_id |
BIGINT |
|
| post_id |
BIGINT |
Foreign Key, references Posts(post_id) |
| user_id |
BIGINT |
Foreign Key, references Users(user_id) |
| comment_content |
TINYTEXT |
|
| notifications_id |
BIGINT |
Foreign Key, references Notifications(notifications_id) |
테이블 10: Notification_setting
| 컬럼 |
타입 |
설명 |
| notification_setting_id |
BIGINT |
Primary Key |
| setting_noti_comment |
BIT |
|
| setting_noti_friend |
BIT |
|
| setting_noti_like |
BIT |
|
| setting_noti_time |
DATETIME |
|
| setting_noti_rank |
BIT |
|
| setting_noti_vote |
BIT |
|
| setting_noti_service |
BIT |
|
| setting_noti_in_rank |
BIT |
|
| setting_noti_new_rank |
BIT |
|
| setting_noti_rival |
BIT |
|
| setting_noti_time_status |
ENUM |
|
테이블 11: Suspended_users
| 컬럼 |
타입 |
설명 |
| suspended_date |
DATE |
|
| suspended_user_id |
BIGINT |
Primary Key, references Users(user_id) |
| user_id |
BIGINT |
Primary Key, references Users(user_id) |
테이블 12: Blocks
| 컬럼 |
타입 |
설명 |
| block_id |
BIGINT |
Primary Key |
| block_user_id |
BIGINT |
Foreign Key, references Users(user_id) |
| user_id |
BIGINT |
Foreign Key, references Users(user_id) |
테이블 13: Friends
| 컬럼 |
타입 |
설명 |
| friend_id |
BIGINT |
Primary Key |
| send_user_id |
BIGINT |
Foreign Key, references Users(user_id) |
| target_user_id |
BIGINT |
Foreign Key, references Users(user_id) |
| friend_status |
ENUM |
|
무작위 알림이 발생하면 3분 안에 사진을 찍어야합니다.
다른 알림도 유저들 간에 발생합니다.
| 기능 |
설명 |
| 무작위 |
알림 <-> 촬영 시간 비교 (2분) |
| 일반 |
공지사항 / 댓글 / 좋아요 |
커스텀 카메라로 본인과 주변 모습을 담습니다.
| 기능 |
설명 |
| 전/후면 촬영 |
현재 자신의 모습과 주변 환경을 담기 위한 촬영 |
| 줌 인/아웃 |
기본적인 줌인/줌아웃 기능 구현 |
| 플래쉬 |
플래쉬 ON/OFF/AUTO 기능 구현 |
게시물에 좋아요와 댓글을 달아 친구들과 소통할 수 있습니다.
| 기능 |
설명 |
| 전/후면 스왑 |
유저의 얼굴 사진과 배경 사진의 자유로운 전환 |
| 좋아요 |
유저끼리의 소통을 위한 좋아요 기능 구현 |
| 댓글 |
유저끼리의 소통을 위한 댓글 기능 구현 |
카테고리에 맞게 투표할 수 있는 기능을 제공합니다. 투표 결과에 따라 사용자 랭킹이 결정됩니다.
| 기능 |
설명 |
| 투표 |
랜덤한 질문 + 유저 컨텐츠 |
| 투표 결과 |
축적된 투표결과 랭킹화 |
친구 관리 및 추천 기능을 통해 네트워킹을 강화할 수 있습니다.
| 기능 |
설명 |
| 친구추천 |
유저간 친구 관계를 식별하여 친구 추천 |
| 친구관리 |
보낸 친구요청 / 받은 친구요청 확인하여 원활한 친구관리 |