- Melon Clone Coding by Java Swing & Spring Boot
- 프로젝트 소개
- 우리가 만들 App
- 멜론, Spotify 와 같은 음악 스트리밍 서비스
- 프로젝트 동기
- 객체지향을 살리고 각각의 참여 객체들이 다른 객체들과 상호작용할 수 있으면서 재밌는 것을 만들어보자는 생각에
- 현행 서비스 분석
- Melon
- tls 통신에 encrypted 된 data 를 주고받음
- http 를 이용하여 웹소켓을 사용
- 레퍼런스가 없어서 wireshark 로 패킷을 분석해야 했음
- 결국 Http 통신 위에서 tls 통신을 한다는 것을 파악
- Spotify
- 참고 자료
- 동작 원리
- 인코딩된 각 음악 트랙을 파일로 저장하고 HTTP 서버에 복사
- 사용자가 노래를 재생할 때 GET 요청으로 음악 스트림 파일을 요청
- 음악 건너띄기 일시정지 기능에 대해서는 BBR 알고리즘을 사용
- BBR : google 이 개발한 TCP Congestion 제어 알고리즘
- 더 빠른 data 전송을 위해 개발됨
- 우리의 프로젝트 목표는 객체지향을 더 잘 느낄 수 있는 프로젝트를 하기 위함이라 건너띄기, 일시정지 와 같은 행동에 대한 고민은 하지 않을 것
- BBR : google 이 개발한 TCP Congestion 제어 알고리즘
- 스트리밍 서비스 종류
- Progressive Download
- Youtube 에서 사용되는 비디오 전송 방식
- url 을 통해서 파일을 접근하여 파일을 순차적으로 다운로드하고 다운로드 된 부분만 재생
- 일정 양을 다운받을 때까지 멈춰있을 수 있음
- RTSP/RTMP Streaming
- 데이터를 다운받지 않음
- 비디오 프레임만 넘겨주고 이미 시청한 데이터를 버림
- Adaptive HTTP Streaming
- Pregressive + RTSP/RTMP
- 서버에서 몇 초 단위의 비디오를 가지고
- Progressive Download
- 분석 결과
- Melon 과 Spotify 의 공통점인 HTTP 통신으로 음악 file 을 stream 화 하여 stream 전송을 한다
- 보다 객체지향적인 파트인 사용자 회원가입, 로그인, 음악 file의 Stream 제어, 플레이리스트에 집중하려 함
- 또한 권한 및 인증에 대한 관리보다 객체지향 설계 및 참여 객체간 주고받는 message 에 집중하려함
- Melon
- 팀 소개 및 역할
- 장원익(16) : Backend - Java Spring Boot
- 한진규(20) : Frontend - Java Swing
- 우리가 만들 App
- 기획
- 협업 방법
- Code의 Version Control : Git
- 일정 관리 : Github Kanban
- Issue Tracking : Github Issue
- 개발 방법론
- 폭포수 모델
- 음악 file
- sound cloud
- 협업 방법
- 설계
- 기능 명세
- 회원 가입, 로그인
- 음악 재생
- 음악 저장
- 전체 음악 조회 (Top 100)
- 요구사항 분석
- RID-001 : 회원가입
- RID-002 : 로그인
- 기타
- UI Wireframe
- Kakao Oven
- UI Wireframe
- UI 설계
- Kakao Oven
- User Story - Story Card 보여드리기
- 시스템 아키텍쳐
- 3 tier 아키텍쳐 (front-back-db)
- front-back : HTTP
- back-db : Socket
- 통신 방법 : Restful 한 http 의 API 통신
- 음악 file 전송 : InputStreamSource 를 상속하는 MultipartFile 객체를 response body 에 포함
- 3 tier 아키텍쳐 (front-back-db)
- 기술 스택
- Front-End : Java Swing
- Back-End : Spring Boot
- Database : MySql
- Build Tool : Gradle
- 도메인 모델링
- 사용자
- 노래
- 플레이리스트
- DB 설계
- ERD
- API 설계
- 회원 관리
- 회원가입 : POST
/api/authenticate/register
- 로그인 : POST
/api/authenticate/login
- 회원가입 : POST
- 음악 관리
- 전체 음악 조회 : GET
/api/musics
- 특정 음악 재생 : GET
/api/musics/{musicId}
- 내 플레이리스트 조회 : GET
/api/users/{userId}/playlists
- 플레이리스트 전체 재생 : GET
/api/users/{userId}/playlists/{musicId}
- 플레이리스트 저장 : POST
/api/users/playlists
- 전체 음악 조회 : GET
- 회원 관리
- 기능 명세
- 앞으로의 계획
- 일정
- WBS 로 설명
- 프로젝트 방향성 회의
- 기획
- 현행 서비스 조사
- 기술 조사 및 선정
- 기능 명세
- 협업 방법 선정
- 요구사항 명세
- UI 설계
- 도메인 모델링
- DB 설계
- API 설계
- 프로젝트 방향성 회의
- 개발
- WBS 로 설명
- 일정
- 우리는 어떻게 Streaming 을 하는가? Spotify 기술 블로그
- MultipartFile Java Docs
- Java Swing 으로 Music Player 만들기 tistory
- How to Make a GUI Music Player In Java youtube
- 바뀐점이 있다면 반영해서 발표
- 영상으로 보여주기
- 10 분 발표
- 월요일은 시험, 화요일은 발표
- 11시 시험