SML은 유튜브 영상 링크를 공유할 수 있는 웹사이트입니다.
유저는 플레이리스트를 생성하여 관련 영상을 분류,
유튜브 영상의 링크를 공유 할수 있습니다.
- 2023 10/20 ~ 2024 05/31
- 백엔드: Java-17, Spring Boot-3.1.4, Spring Data JPA
- 프론트엔드: Thymeleaf, Bootstrap-5.3.2
- 데이터베이스: MariaDB-10.11.7
- 빌드: Gradle
- 호스팅: 오라클 클라우드 (OCI)
- 회원가입 및 로그인
- 유튜브 링크 공유
- 플레이리스트 생성 및 관리
- 영상 카드 생성 및 삭제
- 회원 탈퇴 시 해당 계정의 생성물 비활성화
![](https://private-user-images.githubusercontent.com/106109077/357269167-c8834cbf-abd3-479b-b317-91fe915f191e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDI4MDEsIm5iZiI6MTczOTMwMjUwMSwicGF0aCI6Ii8xMDYxMDkwNzcvMzU3MjY5MTY3LWM4ODM0Y2JmLWFiZDMtNDc5Yi1iMzE3LTkxZmU5MTVmMTkxZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxOTM1MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMWJhZGEwYTE3NmYxNDM2OTExNzZiYjVlMTgwODE4M2E2OTQ2ZTBjYzI2ZjVlZjE0ZjEyODAzMzNiOTJhMjJjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.A-LSyfpY2Dg2Yd0jfQQF2GfPK_1F-oI3_M_Iud8p0zs)
원하는 플레이 리스트를 생성할 수 있습니다.
![](https://private-user-images.githubusercontent.com/106109077/357266731-93fed84c-58d1-4d40-b101-815124cc4308.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzMDI4MDEsIm5iZiI6MTczOTMwMjUwMSwicGF0aCI6Ii8xMDYxMDkwNzcvMzU3MjY2NzMxLTkzZmVkODRjLTU4ZDEtNGQ0MC1iMTAxLTgxNTEyNGNjNDMwOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjExJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMVQxOTM1MDFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iNWJmZjI2MTVlZWQzNDQ1NDUyNDI1NTU5NjA4YjRjYzY5MTk3YmM2NGE5OWFkMWQ0M2M0NWE2NmE1NWM4MWMyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.gfPFVZI9lo4ZsQF3ALQ1ROb-Apb-HfEcYXDntnkh5hI)
원하는 playlist에 URL을 입력해 card를 생성할 수 있습니다.
각 레이어는 도메인을 기준으로 분리,
컨트롤러,jpa 리포지터리, 서비스로직 으로 이루어져있으며
컨트롤러레이어와 서비스레이어간의 데이터이동을 위한 dto,
jpa메서드와 서비스간의 엔티티 클래스로 구성되어있습니다.
ShareMyList/src/main/
├── java/
│ └── com/
│ └── geonho1943/
│ └── sharemylist/
│ ├── controller/
│ │ ├── CardController
│ │ ├── PlaylistController
│ │ └── UserController
│ ├── dto/
│ │ ├── CardDto
│ │ ├── PlaylistDto
│ │ └── UserDto
│ ├── model/
│ │ ├── Card
│ │ ├── EventLog
│ │ ├── Playlist
│ │ └── User
│ ├── repository/
│ │ ├── CardRepository
│ │ ├── EventLogRepository
│ │ ├── PlaylistRepository
│ │ └── UserRepository
│ ├── service/
│ │ ├── CardService
│ │ ├── PlaylistService
│ │ ├── RecordService
│ │ └── UserService
│ └── SharemylistApplication
└── resources/
├── templates/
│ ├── card/
│ │ └── cardinfo
│ ├── fragments/
│ │ └── navigationbar
│ ├── playlist/
│ │ ├── createplaylist
│ │ ├── linkupload
│ │ ├── playlist
│ │ └── playlistinfo
│ ├── user/
│ │ ├── userjoin
│ │ ├── userlogin
│ │ └── userresign
│ └── home
└── application-mariaDB.properties
HTTP Method | Endpoint | Description | Request Parameters | Response |
---|---|---|---|---|
GET | /login | 로그인 페이지 반환 | 없음 | user/userlogin |
POST | /login | 로그인 요청 처리 | UserDto loginInfo |
성공 시: redirect:/ 실패 시: user/userlogin + error |
GET | /logout | 로그아웃 처리 | 없음 | redirect:/ |
GET | /resign | 회원 탈퇴 페이지 반환 | 없음 | user/userresign |
POST | /resign | 회원 탈퇴 요청 처리 | UserDto resignInfo |
성공 시: user/userlogin + success 실패 시: user/userlogin + error |
GET | /join | 회원 가입 페이지 반환 | 없음 | user/userJoin |
POST | /join | 회원 가입 요청 처리 | UserDto joinInfo |
성공 시: user/userlogin + success 실패 시: user/userJoin + error |
HTTP Method | Endpoint | Description | Request Parameters | Response |
---|---|---|---|---|
GET | / | 홈페이지 반환 | 없음 | home + cardList |
GET | /search | 검색결과 페이지 반환 | String keyword |
home + cardList or emptyData |
GET | /linkupload | 링크 업로드 페이지 반환 | 없음 | playlist/linkupload + userPlayList or user/userlogin |
POST | /submitYoutubeLink | 링크의 메타데이터 저장 | String youtubeLink , int playlistIdx |
성공시: redirect:/ 실패 시: playlist/linkupload + error |
GET | /cardInfo/{cardIdx} | 카드 정보 반환 | int cardIdx |
card/cardinfo + cardInfo or user/userlogin |
DELETE | /deleteCard/{cardPlaylistIdx}/{cardIdx} | 카드 삭제 | int cardPlaylistIdx , int cardIdx |
성공시: redirect:/ 실패시: playlist/playlistinfo + error |
HTTP Method | Endpoint | Description | Request Parameters | Response |
---|---|---|---|---|
GET | /playlist | 사용자 플레이리스트 페이지 반환 | 없음 | playlist/playlist + userPlayList or user/userlogin |
GET | /createplaylist | 플레이리스트 생성 페이지 반환 | 없음 | playlist/createplaylist or user/userlogin |
POST | /createplaylist | 플레이리스트 생성 | String playlistName |
playlist or user/userlogin |
GET | /playlistInfo/{playlistIdx} | 특정 플레이리스트 정보 반환 | int playlistIdx |
playlist/playlistinfo + cardInfoList or emptyData |
DELETE | /deletePlaylist/{playlistIdx} | 특정 플레이리스트 삭제 | int playlistIdx |
성공시: redirect:/ 실패 시: playlist + error |
application-mariaDB.properties에 데이터베이스 커넥션정보를 기입해야 합니다
spring.datasource.url=jdbc:mariadb://'db.server.host.ip':'port'/share_my_list
spring.datasource.username=root
spring.datasource.password='passwd'
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
$ git@github.com:geonho1943/shareMyList.git
$ cd shamrmylist
$ ./gradlew build
$ java -jar sharemylist*.jar