시작하기에 앞서
Intro: 뉴스피드 프로젝트
여러분! 드디어 프로젝트 시작입니다!
이번에는 본격적으로 Spring을 활용하여 협업 프로젝트를 진행 해볼텐데요.
뉴스피드가 포함 되어있는 프로젝트를 진행해보겠습니다!
뉴스피드란? 내 게시물을 포함한 모든 게시물을 볼 수 있는 공간
→ 블로그, 커뮤니티, SNS 모두 될 수 있어요. 뉴스를 보여주는 사이트가 아니에요!
이를테면 이런 서비스들이 있습니다.
*디스콰이엇은 스파르타 수료생들이 만든 서비스로, 최근에 시리즈A 투자도 받았답니다.
What to do: 프로그래밍 기초 지식을 바탕으로 프로젝트를 기획하고 만들어봅시다!
난이도는 중요하지 않아요. 스코프가 너무 넓거나 깊을 필요 없습니다!
1.
역할을 적절하게 나눠 주세요. 난이도에 따라 역할을 나누고 마감 기한에 맞춰 서로 도우며 완성해주세요.
2.
꼭 구현해야 하는 기능을 우선순위로 두고, 마감 기한을 정해서 우선 완성 해봅시다!
3.
혹시 마감보다 일찍 마무리 했다면 추가 기능 구현에 도전 해봅시다!
개발 프로세스 가이드
1단계. 프로젝트 아이디어 구상하기!
2단계. API 명세 작성하기!
3단계. ERD 작성하기!
4단계. 와이어프레임 작성하기!
5단계. 본격적인 백엔드 개발하기!
6단계.테스트 및 버그 수정하기!
미구현) 클라우드에 배포하기!
미구현) 프론트엔드 개발도 해보기!
필수 구현 기능
사용자 인증 기능
•
회원가입 기능
◦
새로운 사용자가 ID와 비밀번호의 형태로 서비스에 가입할 수 있어야 합니다.
▪
이 때, 비밀번호는 안전하게 암호화되어 저장되어야 합니다!
•
로그인 및 로그아웃 기능
◦
사용자는 자신의 계정으로 서비스에 로그인하고 로그아웃할 수 있어야 합니다.
프로필 관리
•
프로필 수정 기능
◦
이름, 한 줄 소개와 같은 기본적인 정보를 볼 수 있어야 하며 수정할 수 있어야 합니다.
◦
비밀번호 수정 시에는 비밀번호를 한 번 더 입력받는 과정이 필요합니다.
게시물 CRUD 기능
•
게시물 작성, 조회, 수정, 삭제 기능
◦
게시물 조회를 제외한 나머지 기능들은 전부 인가(Authorization) 개념이 적용되어야 하며 이는 JWT와 같은 토큰으로 검증이 되어야 할 것입니다.
◦
예컨대, 내가 작성한 글을 남이 삭제할 수는 없어야 하고 오로지 본인만 삭제할 수 있어야겠죠?
뉴스 피드 기능
•
뉴스 피드 페이지
◦
사용자가 다른 사용자의 게시물을 한 눈에 볼 수 있는 뉴스 피드 페이지가 있어야 합니다.
댓글 CRUD 기능
•
댓글 작성, 조회, 수정, 삭제 기능
◦
사용자는 게시물에 댓글을 작성할 수 있고 본인의 댓글은 수정 및 삭제를 할 수 있어야 합니다.
◦
또한, 게시물과 마찬가지로 댓글 조회를 제외한 나머지 기능들은 인가(Authorization)개념이 적용되어야 합니다.
•
댓글 작성, 수정, 삭제 시 새로고침 기능
◦
프론트엔드에서 댓글 작성, 수정 및 삭제를 할 때마다 조회 API를 다시 호출하여 자연스럽게 최신의 댓글 목록을 화면에 보여줄 수 있도록 해야 합니다!
이메일 가입 및 인증 기능
•
이메일 가입 시 이메일 인증 기능을 포함하는 것이 좋습니다.
좋아요 기능
•
게시물 및 댓글 좋아요/좋아요 취소 기능
◦
사용자가 게시물이나 댓글에 좋아요를 남기거나 취소할 수 있어야 합니다.
◦
이 때, 본인이 작성한 게시물과 댓글에 좋아요는 남길 수 없도록 해봅니다!
프론트엔드 만들어보기
•
백엔드에서 제공하는 API를 통해 서버와 통신하는 프론트엔드를 구현합니다.
•
와이어프레임에 나온 명세를 최대한 구현해보면 금상첨화겠죠?
•
웹개발 종합반에서 배웠던 부트스트랩을 활용해봐도 좋아요~
소셜 로그인 기능 구현
•
네이버 로그인 개발가이드를 참고하여 네이버 로그인을 구현해보세요.
•
카카오 로그인 개발가이드를 참고하여 카카오 로그인을 구현해보세요.
프로필에 사진 업로드 기능 구현
•
프로필 사진을 저장할 때는 반드시 AWS S3를 이용해주세요!
게시물에 멀티미디어 지원 기능 구현
•
게시물 본문에 사진이나 영상 등의 미디어를 포함할 수 있다면 금상첨화겠죠?
•
또한, 게시물 수정시에도 첨부된 미디어가 수정될 수 있으면 좋습니다.
팔로우 기능 구현
•
특정 사용자를 팔로우/언팔로우를 할 수 있으면 너무 좋습니다.
•
팔로우 기능이 구현되었다면 뉴스 피드에 팔로우하는 사용자의 게시물을 볼 수 있어야 하겠죠?
HTTP를 HTTPS로 업그레이드 하기
•
HTTPS를 적용하여 보안이 강화된 웹 페이지를 제공해보도록 합니다!
체크리스트
사용자 인증 기능
•
회원가입 기능
•
로그인 및 로그아웃 기능
◦
JWT 활용
◦
사용자는 자신의 계정으로 서비스에 로그인하고 로그아웃 가능
계정 관리
•
프로필 수정 기능
◦
이름, 한 줄 소개와 같은 기본적인 정보 수정
게시물 CRUD 기능
•
게시물 작성, 조회, 수정, 삭제 기능
◦
게시물 조회를 제외한 나머지 기능들은 전부 인가(Authorization) 개념이 적용되어야 하며 이는 JWT와 같은 토큰으로 검증 가능.
◦
오로지 본인만 게시글 삭제 가능.
뉴스 피드 기능
•
뉴스 피드 페이지(전체 조회 페이지)
◦
사용자가 다른 사용자의 게시물을 한 눈에 볼 수 있는 뉴스 피드 페이지가 있어야 합니다.
협업을 위한 방법 
1.
우리 팀이 만들 서비스 기획 대한 충분한 논의.
우리 팀은 이번에 어떤 서비스를 만들어보면 좋을까요?
우리 팀은 어떤 기능들을 구현해볼까요?
각 기능은 누가 맡아서 진행할까요?
마감 기한은 어떻게 정할까요? 배포 시기는 언제로 할까요?
2.
결과물에 대한 목업(MOCKUP) 그려보기
•
주요 색상 혹은 프레임 디자인 등
(스파르타 코딩클럽 스타일, Google 스타일, NAVER 스타일 등)
•
PPT, 피그마 등 자유롭게 도구를 활용해주세요.
3.
목업을 기반한 웹 페이지 기능에 관한 논의
a.
회원 가입/로그인 페이지
b.
메인 페이지
c.
마이 페이지
4.
기술 개발 및 결합 과정의 방법 논의
•
브랜치를 어떻게 나누고 어떻게 병합할 것인지
•
어느 시점에 브랜치 병합을 할 것인지
•
일반적으로 브랜치를 이렇게 나눠요
◦
마스터 브랜치(master) - 배포용
◦
디벨롭 브랜치(dev)
◦
기능 단위 별 브랜치(i-12)
•
병합 순서는 대체로 이렇게 진행해요.
◦
기능 단위 별 브랜치 — 병합 → 디벨롭 브랜치 —최종병합→ 마스터 브랜치
5.
개발 진행에 따른 기록 작성(★★★★★)
•
개발 혹은 개발을 위한 공부를 진행 할 때마다 간략한 글 작성하기 ( ※ 티스토리, velog, 카카오 브런치, 네이버 블로그 등 불특정 다수가 확인 가능한 소셜 플랫폼 활용)
1.
어떠한 이유로 해당 기능을 사용하였는지
※ [강의]에서 배웠습니다. 라는 이유는 피해주세요.
2.
해당 기능의 코드는 어떠한 로직을 가지고 있는지
※ 입력값이 들어가면 어떠한 코드를 통해 어떠한 값으로 변화하는지
3.
코드를 작성하며 발견된 버그나 오류는 어떠한게 있었는지 그리고 어떻게 해결하였는지.
S.A (Starting Assignments) : 시작 전 꼭 작성합시다.
•
제출 기한: 11/21(화) 18:00까지
•
제출할 것
◦
아래 내용을 팀장님 블로그에 정리 후 제출해주세요
1. 프로젝트 제목/간단 설명
2. 와이어 프레임
3. ERD 설계
4. 개발해야 하는 기능, API 명세
•
주의할 것
◦
필수 포함기능을 반드시 염두에 두기
Goal: 최종 제출 및 발표
•
일시
◦
최종 제출 : 11/27 (월) 10:00
◦
발표 : 11/27 (월) 14:00
•
제출해야 할 것
1.
시연 영상 녹화본
a.
프로젝트 결과물 정리본
•
개발 진행에 따라 기록 작성한 것의 최종본이 되겠죠?
•
형식은 자유입니다. PPT, 노션, 한글 등 편하신 방식으로 자유롭게 프로젝트 결과를 설명할 수 있는 파일을 생성하여 제출해주세요.
•
완성된 프로젝트의 기능을 시연하며 설명하는 영상을 제출해주세요.
•
발표 장소 : ZOOM 링크는 당일 공개 예정
•
발표 진행 상세
◦
발표는 1조부터 순서대로 발표합니다.
◦
발표는 팀 내의 어떤 분이 하셔도 좋습니다.
◦
발표 시간에는 팀 전원이 카메라는 모두 켜주세요!
▪
발표는 1명이 진행하지만 긴장감은 팀원들이 함께 덜어주세요.
◦
발표자료(PPT, 노션 등)가 있으면 제일 좋겠지만, 필수는 아닙니다. 각자 팀의 프로젝트 결과물을 나의 언어로 스스로 설명할 수 있는 힘을 기르는 데 초점을 맞춰주세요.
◦
발표 방법
5~7분 시연을 준비한다.
이렇게 준비해보세요! (예시)
기초 프로젝트 타임라인: 11/21(화) ~ 11/27(월)
•
11/27 (월) 14:00 : 프로젝트 발표회
•
11/27 (월) 18:00까지 : 팀 별 회고 (방법 및 제출 별도 공지)
주의할 것
•
어떤 기술을 사용할지 보다 플래닝이 더 중요
•
프로젝트는 마감을 지키는 연습
•
내가 어떤 기술을 기깔나게 해내는 건 중요하지 않습니다.
•
진짜 중요한 것은
◦
“팀이 목표한 바를 이루어냈는가”
◦
“그 목표를 이루기 위해 내가 어떻게 기여 했는가”
•
중요 모든 주제 다 좋은데, 인스타그램 클론코딩은 안됩니다 !! 레퍼런스를 참고하는건 좋지만 절대 코드 베끼기로 프로젝트 구성하시면 안됩니다 !!
Support: 프로젝트를 진행하는 데 도움이 될 만한 도움닫기들
•
튜터님들의 팀 별 코칭, 서면 피드백, 발표회, 대면 피드백
•
그 외에도 튜터님들이 수시로 돌아다니면서 도움을 드려요.
•
학습 외적인 고민이 있다면 담임 매니저를 찾아오세요. 
•
본격적인 팀프로젝트는 처음인데 뭐부터 해야하나요?.
◦
팀 별로 프로젝트 계획을 세웁니다.
예시
•