Skip to content

Dohyun-Kimm/SELLOG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Sellog


👪 개발 멤버 소개



👑 김도현
(Front-End)



김찬휘
(Back-End)



김호정
(Front-End)



박중원
(Front-End)



이지수
(Back-End)

UI/UX
React
3D Modeling
MyRoom
ItemShop
FEED
Profile
Validation
REST API
Spring Boot
DataBase
GitHub API
WebSocket
RSS Feed
Chrome Extension
UI/UX
React
3D Modeling
Three.js
MyGoals
ItemShop
Chart
Calendar
UI/UX
React
3D Modeling
Three.js
Main
MyRoom
WebSocket
CS Quiz
REST API
Spring Boot
DataBase
Chrome Extension
WebSocket
Member
Record

📆 프로젝트 기간

23.04.10 ~ 23.05.19

  • 기획 및 설계 : 23.04.10 ~ 23.04.14
  • 프로젝트 구현 : 23.04.17 ~ 23.05.12
  • 버그 수정 및 산출물 정리 : 23.05.15 ~ 23.05.19

❓기획 배경

실력있는 개발자가 되기위해 필요한 덕목이 '꾸준함'인데, 막상해보면 일이 되버리고 재미를 잃어버리면서 지속하기 어렵습니다.
저희는 어떻게 해야 꾸준히 습관을 유지할 수 있고, 어떤 습관을 만들어가는 것이 개발자로서의 성장에 도움이 될지 고민했습니다.
그래서 커밋 기록, 블로그 작성, 알고리즘 문제 풀기, 꾸준한 CS공부, 기술블로그 읽기를 통해 좋은 개발자로서의 역량을 함양하고,
3D 마이 프로필을 꾸밀수 있게해서 목표를 달성하면 성취감도 느끼고 재미도 느낄 수 있으면 좋겠다는 생각을 했습니다.
또한 유저의 편의성을 위해 유저가 설정한 목표를 저희가 자동으로 감지해서 달성 여부를 판단하면 좋을 것 같다는
생각에서 Sellog를 기획하게 되었습니다.


💡 서비스 소개

Sellog

Sellog는 개발자들을 위한 습관 기록 자동화 서비스입니다.
유저는 5가지(Github Commit, Algorithm Solving, Blog Posting, CS Quiz, Feed)의 습관을 설정할 수 있습니다.
Chrome Extension을 통해 유저의 습관을 자동으로 체크하여 설정한 목표를 달성할 시 보상을 지급합니다.
보상으로 얻은 코인으로 나만의 3D 방을 꾸밀 수 있습니다.

꾸준한 습관 형성을 위한 시작, Sellog와 함께 하세요 !


🛠️ 기술 스택






상세 기술스택 및 버전
구분 기술스택 버전
General Gitlab -
Jira -
Mattermost, Notion -
BackEnd OpenJDK 11.0.16.1
Spring Boot 2.4.5
Gradle 7.5.1
JPA -
JWT 0.11.5
QueryDSL -
IntelliJ 2022.3.1
FrontEnd HTML5 -
CSS3 -
Javascript -
Typescript 4.9.3
React 18.2.0
Recoil 0.7.7
styled-components 5.3.9
axios 1.3.5
Three.js 0.151.3
Vite 4.2.0
Visual Studio Code 1.75.1
Database MySQL 8.0.21
RabbitMQ 3.8.28
Server AWS EC2 -
AWS EC2 S3 -
Nginx 1.18.0
Docker 20.10.23
Jenkins 2.378.1
Test Postman 10.9.4
JUnit5 -
Mockito -
Jacoco 0.8.7

🗂️ 시스템 아키텍처

시스템 아키텍처
system

🎨 Design


🗂 DIAGRAM

ERD

📁 디렉토리 구조 (Front-end)

Front-end
C:.
│  README.md
│
└─front-end
    │  .gitignoreDockerfileindex.htmlpackage-lock.jsonpackage.jsonREADME.mdtsconfig.jsontsconfig.node.jsonvite.config.ts
    │
    ├─nginxnginx.conf
    │
    ├─public
    │  │  vite.svg
    │  │
    │  └─models
    │      │  bloomer.glb
    │      │  car.glb
    │      │  clouds.glb
    │      │  cs_direct.glb
    │      │  deco.glb
    │      │  DoLearn.glb
    │      │  feed.glb
    │      │  feed_direct.glb
    │      │  floor.glb
    │      │  flower.glb
    │      │  grass.glb
    │      │  ground.glb
    │      │  house.glb
    │      │  itemshop.glb
    │      │  learnway.glb
    │      │  login.glb
    │      │  maker.glb
    │      │  newCsQuiz.glb
    │      │  obaek.glb
    │      │  osakak.glb
    │      │  room_direct.glb
    │      │  Sellog.glb
    │      │  shop_direct.glb
    │      │  stone.glb
    │      │  tantan.glb
    │      │  tree.glb
    │      │  weather.glb
    │      │  ydg.glb
    │      │
    │      ├─characters
    │      │      f1.glb
    │      │      f2.glb
    │      │      f3.glb
    │      │      m1.glb
    │      │      m2.glb
    │      │      m3.glb
    │      │
    │      ├─csQuiz
    │      │      f1.glb
    │      │      f2.glb
    │      │      f3.glb
    │      │      m1.glb
    │      │      m2.glb
    │      │      m3.glb
    │      │      oMark.glb
    │      │      xMark.glb
    │      │
    │      ├─font
    │      │      csquiz_font.glb
    │      │      feed_font.glb
    │      │      itemShop_font.glb
    │      │      myroom_font.glb
    │      │
    │      ├─items
    │      │      bedside_light_1.glb
    │      │      black_chair_1.glb
    │      │      black_coffeemachine_1.glb
    │      │      black_cup_1.glb
    │      │      black_leather_sofa_1.glb
    │      │      black_speaker_1.glb
    │      │      black_teatable_1.glb
    │      │      blue_bed.glb
    │      │      blue_chair_1.glb
    │      │      blue_chair_2.glb
    │      │      blue_sofa_1.glb
    │      │      brown_table_1.glb
    │      │      brown_table_2.glb
    │      │      brown_table_3.glb
    │      │      brown_table_4.glb
    │      │      coffee_cup_1.glb
    │      │      elec_guitar_1.glb
    │      │      elec_guitar_2.glb
    │      │      elec_guitar_3.glb
    │      │      giant_sofa_1.glb
    │      │      green_sofa_1.glb
    │      │      grey_bin_1.glb
    │      │      group_guitar_1.glb
    │      │      house_tree_1.glb
    │      │      imac_computer_1.glb
    │      │      katana_decoration_1.glb
    │      │      leopard_chair_1.glb
    │      │      low_table_1.glb
    │      │      marble_table_1.glb
    │      │      marble_table_2.glb
    │      │      old_computer_1.glb
    │      │      old_computer_2.glb
    │      │      old_microwave_1.glb
    │      │      old_tv_1.glb
    │      │      orange_sofa_1.glb
    │      │      photo_frame_1.glb
    │      │      photo_frame_2.glb
    │      │      red_chair_1.glb
    │      │      red_lights_1.glb
    │      │      red_sofa_1.glb
    │      │      red_telephone_1.glb
    │      │      retro_arcadegame_1.glb
    │      │      round_table_1.glb
    │      │      small_speaker_1.glb
    │      │      stall_white_chair_1.glb
    │      │      starwars_trooper_1.glb
    │      │      teddybear_1.glb
    │      │      tree_vase_1.glb
    │      │      trooper_figure_1.glb
    │      │      white_chair_1.glb
    │      │      white_controller_1.glb
    │      │      white_skeleton_1.glb
    │      │      white_sofa_1.glb
    │      │      white_table_1.glb
    │      │      wine_glass_1.glb
    │      │      wood_chair_1.glb
    │      │      wood_desk_0.glb
    │      │      wood_desk_1.glb
    │      │      wood_desk_2.glb
    │      │      wood_drawer_1.glb
    │      │      wood_shelve.glb
    │      │      wood_table_1.glb
    │      │      yellow_sofa_1.glb
    │      │
    │      ├─otherCharacters
    │      │      f1.glb
    │      │      f2.glb
    │      │      f3.glb
    │      │      m1.glb
    │      │      m2.glb
    │      │      m3.glb
    │      │
    │      └─roomroom1.glbroom2.glbroom3.glbroom4.glb
    │
    └─srcApp.cssApp.tsxAppStyles.tsxindex.cssmain.tsxvite-env.d.ts
        │
        ├─apicsQuiz.tsfeed.tshttp.ts
        │      record.tsroom.tsstore.tsuser.ts
        │
        ├─assets
        │  │  react.svg
        │  │
        │  ├─font
        │  │      Neoneon.otf
        │  │
        │  └─imgs
        │      │  algo_logo.png
        │      │  blog_logo.png
        │      │  csquiz_battle_img.png
        │      │  csquiz_img.png
        │      │  cs_logo.png
        │      │  feed_logo.png
        │      │  github_logo.png
        │      │  Loading.json
        │      │  logo.png
        │      │  tistory_logo.png
        │      │  turtle-loading.json
        │      │
        │      ├─items
        │      │      bedside_light_1.png
        │      │      big_car_1.png
        │      │      black_chair_1.png
        │      │      black_coffeemachine_1.png
        │      │      black_cup_1.png
        │      │      black_leather_sofa_1.png
        │      │      black_speaker_1.png
        │      │      black_teatable_1.png
        │      │      blue_car_1.png
        │      │      blue_chair_1.png
        │      │      blue_chair_2.png
        │      │      blue_sofa_1.png
        │      │      brown_table_1.png
        │      │      brown_table_2.png
        │      │      brown_table_3.png
        │      │      brown_table_4.png
        │      │      coffee_cup_1.png
        │      │      elec_guitar_1.png
        │      │      elec_guitar_2.png
        │      │      elec_guitar_3.png
        │      │      giant_sofa_1.png
        │      │      green_sofa_1.png
        │      │      grey_bin_1.png
        │      │      group_guitar_1.png
        │      │      house_tree_1.png
        │      │      imac_computer_1.png
        │      │      katana_decoration_1.png
        │      │      leopard_chair_1.png
        │      │      low_table_1.png
        │      │      marble_table_1.png
        │      │      marble_table_2.png
        │      │      old_computer_1.png
        │      │      old_computer_2.png
        │      │      old_microwave_1.png
        │      │      old_tv_1.png
        │      │      orange_sofa_1.png
        │      │      photo_frame_1.png
        │      │      photo_frame_2.png
        │      │      red_car_1.png
        │      │      red_chair_1.png
        │      │      red_lights_1.png
        │      │      red_sofa_1.png
        │      │      red_telephone_1.png
        │      │      retro_arcadegame_1.png
        │      │      round_table_1.png
        │      │      small_speaker_1.png
        │      │      stall_white_chair_1.png
        │      │      starwars_trooper_1.png
        │      │      teddybear_1.png
        │      │      tree_vase_1.png
        │      │      trooper_figure_1.png
        │      │      white_controller_1.png
        │      │      white_skeleton_1.png
        │      │      white_sofa_1.png
        │      │      white_table_1.png
        │      │      wine_glass_1.png
        │      │      wood_chair_1.png
        │      │      wood_desk_1.png
        │      │      wood_desk_2.png
        │      │      wood_drawer_1.png
        │      │      wood_table_1.png
        │      │      yellow_sofa_1.png
        │      │
        │      ├─itemShop
        │      │      cool.png
        │      │      rainbow.png
        │      │
        │      ├─main
        │      │      bloomerImg.png
        │      │      grid.png
        │      │
        │      └─retro404NotFound.pngblue_eye.pngchrome_logo.pngcoin.pnggithub.pnggithubIcon.pnggreen_flower.pngitem_sample.pngmemo.pngpencil_retro.pngprofile tape.pngprofilePic.jpegred_ghost.pngretro_img.pngsmile.pngsmile_and_light.pngsmile_bottom.pngsmile_computer.pngsmile_large.pngspring.pngstar.pngtistoryIcon.pngwork_hard.pngyellow_flower.pngyellow_ghost.png
        │
        ├─components
        │  ├─common
        │  │  └─Button
        │  │          Button.tsx
        │  │          styles.tsx
        │  │
        │  ├─CSQuiz
        │  │  ├─CSQuizContents
        │  │  │      CSQuizContents.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  └─CSQuizTimer
        │  │          CSQuizTimer.tsx
        │  │          styles.tsx
        │  │
        │  ├─CSQuizMap
        │  │  └─CharacterModels
        │  │          F1_CS.tsx
        │  │          F2_CS.tsx
        │  │          F3_CS.tsx
        │  │          M1_CS.tsx
        │  │          M2_CS.tsx
        │  │          M3_CS.tsx
        │  │
        │  ├─Feed
        │  │      FeedComponent.tsx
        │  │      styles.tsx
        │  │
        │  ├─ItemShop
        │  │  ├─ItemItem
        │  │  │      ItemItem.tsx
        │  │  │      ItemModalStyle.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─ItemList
        │  │  │      ItemList.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─ItemModal.tsx
        │  │  │      ItemModal.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  └─ItemWrapper
        │  │      │  ItemWrapper.tsx
        │  │      │
        │  │      └─Models
        │  │              Bedside_light_1.tsx
        │  │              Black_chair_1.tsx
        │  │              Black_coffeemachine_1.tsx
        │  │              Black_cup_1.tsx
        │  │              Black_leather_sofa_1.tsx
        │  │              Black_speaker_1.tsx
        │  │              Black_teatable_1.tsx
        │  │              Blue_bed.tsx
        │  │              Blue_chair_1.tsx
        │  │              Blue_chair_2.tsx
        │  │              Blue_sofa_1.tsx
        │  │              Brown_table_1.tsx
        │  │              Brown_table_2.tsx
        │  │              Brown_table_3.tsx
        │  │              Brown_table_4.tsx
        │  │              Coffee_cup_1.tsx
        │  │              Elec_guitar_1.tsx
        │  │              Elec_guitar_2.tsx
        │  │              Elec_guitar_3.tsx
        │  │              Giant_sofa_1.tsx
        │  │              Green_sofa_1.tsx
        │  │              Grey_bin_1.tsx
        │  │              Group_guitar_1.tsx
        │  │              House_tree_1.tsx
        │  │              Imac_computer_1.tsx
        │  │              Katana_decoration_1.tsx
        │  │              Leopard_chair_1.tsx
        │  │              Low_table_1.tsx
        │  │              Marble_table_1.tsx
        │  │              Marble_table_2.tsx
        │  │              Old_computer_1.tsx
        │  │              Old_computer_2.tsx
        │  │              Old_microwave_1.tsx
        │  │              Old_tv_1.tsx
        │  │              Orange_sofa_1.tsx
        │  │              Photo_frame_1.tsx
        │  │              Photo_frame_2.tsx
        │  │              Red_chair_1.tsx
        │  │              Red_lights_1.tsx
        │  │              Red_sofa_1.tsx
        │  │              Red_telephone_1.tsx
        │  │              Retro_arcadegame_1.tsx
        │  │              Round_table_1.tsx
        │  │              Small_speaker_1.tsx
        │  │              Stall_white_chair_1.tsx
        │  │              Starwars_trooper_1.tsx
        │  │              Teddybear_1.tsx
        │  │              Tree_vase_1.tsx
        │  │              Trooper_figure_1.tsx
        │  │              White_chair_1.tsx
        │  │              White_controller_1.tsx
        │  │              White_skeleton_1.tsx
        │  │              White_sofa_1.tsx
        │  │              White_table_1.tsx
        │  │              Wine_glass_1.tsx
        │  │              Wood_chair_1.tsx
        │  │              Wood_desk_0.tsx
        │  │              Wood_desk_1.tsx
        │  │              Wood_desk_2.tsx
        │  │              Wood_drawer_1.tsx
        │  │              Wood_shelve.tsx
        │  │              Wood_table_1.tsx
        │  │              Yellow_sofa_1.tsx
        │  │
        │  ├─Loading
        │  │      Loading.tsx
        │  │
        │  ├─Login
        │  │  ├─LoginForm
        │  │  │      LoginForm.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─Models
        │  │  │  │  CameraAndLight.tsx
        │  │  │  │  F1.tsx
        │  │  │  │  F2.tsx
        │  │  │  │  F3.tsx
        │  │  │  │  LoginModel.tsx
        │  │  │  │  M1.tsx
        │  │  │  │  M2.tsx
        │  │  │  │  M3.tsx
        │  │  │  │
        │  │  │  └─OtherModles
        │  │  │          F1_Other.tsx
        │  │  │          F2_Other.tsx
        │  │  │          F3_Other.tsx
        │  │  │          M1_Other.tsx
        │  │  │          M2_Other.tsx
        │  │  │          M3_Other.tsx
        │  │  │
        │  │  ├─UserCharacter
        │  │  │      styles.tsx
        │  │  │      UserCharacter.tsx
        │  │  │
        │  │  ├─UserCharacterWrapper
        │  │  │      styles.tsx
        │  │  │      UserCharacterWrapper.tsx
        │  │  │
        │  │  └─UserInfoForm
        │  │          styles.tsx
        │  │          UserInfoForm.tsx
        │  │
        │  ├─Main
        │  │  ├─Models
        │  │  │      AirBalloon.tsx
        │  │  │      Bloomer.tsx
        │  │  │      Car.tsx
        │  │  │      Csquiz_font.tsx
        │  │  │      CS_direct.tsx
        │  │  │      Deco.tsx
        │  │  │      DoLearn.tsx
        │  │  │      F1_Main.tsx
        │  │  │      F2_Main.tsx
        │  │  │      F3_Main.tsx
        │  │  │      Feed.tsx
        │  │  │      Feed_direct.tsx
        │  │  │      Feed_font.tsx
        │  │  │      Floor.tsx
        │  │  │      Flower.tsx
        │  │  │      Grass.tsx
        │  │  │      Ground.tsx
        │  │  │      House.tsx
        │  │  │      ItemShopMap.tsx
        │  │  │      ItemShop_font.tsx
        │  │  │      Learnway.tsx
        │  │  │      M1_Main.tsx
        │  │  │      M2_Main.tsx
        │  │  │      M3_Main.tsx
        │  │  │      Maker.tsx
        │  │  │      Myroom_font.tsx
        │  │  │      NewCsQuiz.tsx
        │  │  │      Obaek.tsx
        │  │  │      Osakak.tsx
        │  │  │      Room_direct.tsx
        │  │  │      Sellog.tsx
        │  │  │      Shop_direct.tsx
        │  │  │      Stone.tsx
        │  │  │      Tantan.tsx
        │  │  │      Tree.tsx
        │  │  │      Weather.tsx
        │  │  │      Ydg.tsx
        │  │  │
        │  │  └─ToggleButton
        │  │          styles.tsx
        │  │          ToggleButton.tsx
        │  │
        │  ├─MyGoals
        │  │  ├─Accumulate
        │  │  │      Accumulate.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─Chart
        │  │  │      Chart.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─DailyDoneItem
        │  │  │      DailyDoneItem.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─DailyDoneList
        │  │  │      DailyDoneList.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─DailyDoneModal
        │  │  │      DailyDoneModal.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─GoalsSetting
        │  │  │      GoalsSetting.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─GoalsSettingModal
        │  │  │      GoalsSettingModal.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─RCalendar
        │  │  │      RCalendar.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  ├─Record
        │  │  │      Record.tsx
        │  │  │      styles.tsx
        │  │  │
        │  │  └─SettingButtons
        │  │          SettingButtons.tsx
        │  │          styles.tsx
        │  │
        │  └─MyRoom
        │      ├─EditProfile
        │      │      EditProfile.tsx
        │      │      styles.tsx
        │      │
        │      ├─EditProfileModal
        │      │      EditProfileModal.tsx
        │      │      styles.tsx
        │      │
        │      ├─InstallModal
        │      │      InstallModal.tsx
        │      │      styles.tsx
        │      │
        │      ├─Models
        │      │      Room1.tsx
        │      │      Room2.tsx
        │      │      Room3.tsx
        │      │      Room4.tsx
        │      │
        │      ├─MyItemItem
        │      │      MyItemItem.tsx
        │      │      styles.tsx
        │      │
        │      ├─MyItemList
        │      │      MyItemList.tsx
        │      │      styles.tsx
        │      │
        │      ├─MyProfile
        │      │      MyProfile.tsx
        │      │      styles.tsx
        │      │
        │      ├─MyRoomContainer
        │      │      MyRoomContainer.tsx
        │      │      styles.tsx
        │      │
        │      ├─NoTarget
        │      │      NoTarget.tsx
        │      │      styles.tsx
        │      │
        │      ├─RoomEditContainer
        │      │  │  RoomEditContainer.tsx
        │      │  │
        │      │  └─Models
        │      │          Bedside_light_1.tsx
        │      │          Black_chair_1.tsx
        │      │          Black_coffeemachine_1.tsx
        │      │          Black_cup_1.tsx
        │      │          Black_leather_sofa_1.tsx
        │      │          Black_speaker_1.tsx
        │      │          Black_teatable_1.tsx
        │      │          Blue_bed.tsx
        │      │          Blue_chair_1.tsx
        │      │          Blue_chair_2.tsx
        │      │          Blue_sofa_1.tsx
        │      │          Brown_table_1.tsx
        │      │          Brown_table_2.tsx
        │      │          Brown_table_3.tsx
        │      │          Brown_table_4.tsx
        │      │          Coffee_cup_1.tsx
        │      │          Elec_guitar_1.tsx
        │      │          Elec_guitar_2.tsx
        │      │          Elec_guitar_3.tsx
        │      │          Giant_sofa_1.tsx
        │      │          Green_sofa_1.tsx
        │      │          Grey_bin_1.tsx
        │      │          Group_guitar_1.tsx
        │      │          House_tree_1.tsx
        │      │          Imac_computer_1.tsx
        │      │          Katana_decoration_1.tsx
        │      │          Leopard_chair_1.tsx
        │      │          Low_table_1.tsx
        │      │          Marble_table_1.tsx
        │      │          Marble_table_2.tsx
        │      │          Old_computer_1.tsx
        │      │          Old_computer_2.tsx
        │      │          Old_microwave_1.tsx
        │      │          Old_tv_1.tsx
        │      │          Orange_sofa_1.tsx
        │      │          Photo_frame_1.tsx
        │      │          Photo_frame_2.tsx
        │      │          Red_chair_1.tsx
        │      │          Red_lights_1.tsx
        │      │          Red_sofa_1.tsx
        │      │          Red_telephone_1.tsx
        │      │          Retro_arcadegame_1.tsx
        │      │          Round_table_1.tsx
        │      │          Small_speaker_1.tsx
        │      │          Stall_white_chair_1.tsx
        │      │          Starwars_trooper_1.tsx
        │      │          Teddybear_1.tsx
        │      │          Tree_vase_1.tsx
        │      │          Trooper_figure_1.tsx
        │      │          White_chair_1.tsx
        │      │          White_controller_1.tsx
        │      │          White_skeleton_1.tsx
        │      │          White_sofa_1.tsx
        │      │          White_table_1.tsx
        │      │          Wine_glass_1.tsx
        │      │          Wood_chair_1.tsx
        │      │          Wood_desk_0.tsx
        │      │          Wood_desk_1.tsx
        │      │          Wood_desk_2.tsx
        │      │          Wood_drawer_1.tsx
        │      │          Wood_shelve.tsx
        │      │          Wood_table_1.tsx
        │      │          Yellow_sofa_1.tsx
        │      │
        │      ├─RoomEditItems
        │      │  └─Models
        │      │          ChairEdit.tsx
        │      │          WoodDeskEdit.tsx
        │      │
        │      └─WithdrawModalstyles.tsxWithdrawModal.tsx
        │
        ├─pages
        │  ├─CSQuiz
        │  │      CSQuiz.tsx
        │  │      styles.tsx
        │  │
        │  ├─CSQuizBattleResult
        │  │      CSQuizBattleResult.tsx
        │  │      styles.tsx
        │  │
        │  ├─CSQuizMap
        │  │  │  CSQuizMap.tsx
        │  │  │  styles.tsx
        │  │  │
        │  │  └─Models
        │  │          OMark.tsx
        │  │          XMark.tsx
        │  │
        │  ├─CSQuizMatching
        │  │      CSQuizMatching.tsx
        │  │      styles.tsx
        │  │
        │  ├─CSQuizProgress
        │  │      CSQuizProgress.tsx
        │  │      styles.tsx
        │  │
        │  ├─CSQuizResult
        │  │      CSQuizResult.tsx
        │  │      styles.tsx
        │  │
        │  ├─CSQuizSelect
        │  │      CSQuizSelect.tsx
        │  │      styles.tsx
        │  │
        │  ├─Feed
        │  │      Feed.tsx
        │  │      styles.tsx
        │  │
        │  ├─Info
        │  │      Info.tsx
        │  │      styles.tsx
        │  │
        │  ├─ItemShop
        │  │      ItemShop.tsx
        │  │      styles.tsx
        │  │
        │  ├─Login
        │  │      Login.tsx
        │  │      styles.tsx
        │  │
        │  ├─Main
        │  │      Main.tsx
        │  │      styles.tsx
        │  │
        │  ├─MyGoals
        │  │      MyGoals.tsx
        │  │      styles.tsx
        │  │
        │  ├─MyRoom
        │  │  │  MyRoom.tsx
        │  │  │  styles.tsx
        │  │  │
        │  │  └─MyItems
        │  │          MyItems.tsx
        │  │          styles.tsx
        │  │
        │  ├─NotFound
        │  │      NotFound.tsx
        │  │      styles.tsx
        │  │
        │  ├─OauthRedirect
        │  │      OauthRedirect.tsx
        │  │
        │  └─TermsOfUsestyles.tsxTermsOfUse.tsx
        │
        ├─recoil
        │  ├─csquiz
        │  │      atoms.tsx
        │  │      selectors.tsx
        │  │      useCSquiz.tsx
        │  │
        │  ├─feed
        │  │      atoms.tsx
        │  │      selectors.tsx
        │  │      useFeed.tsx
        │  │
        │  ├─itemshop
        │  │      atoms.tsx
        │  │      selectors.tsx
        │  │      useItemshop.tsx
        │  │
        │  ├─mainpage
        │  │      atoms.tsx
        │  │      selectors.tsx
        │  │      useMainpage.tsx
        │  │
        │  ├─mygoals
        │  │      atoms.tsx
        │  │
        │  ├─myroom
        │  │      atoms.tsx
        │  │      myroom.tsx
        │  │      selectors.tsx
        │  │
        │  └─useratom.ts
        │
        ├─typeModels
        │  ├─Feed
        │  │      feedinterfaces.ts
        │  │
        │  ├─ItemShop
        │  │      iteminterfaces.ts
        │  │
        │  ├─mygoals
        │  │      myGoalInterfaces.ts
        │  │      myRecordInterfaces.ts
        │  │
        │  ├─MyRoom
        │  │      MyroomInterfaces.ts
        │  │
        │  └─useruserEditInfo.tsuserSignup.ts
        │
        └─utils
                itemDefaultInfo.ts
                token.ts
Back-end
C:.
│  README.md
│
├─back-end
│  │  .gitignore
│  │  build.gradle
│  │  Dockerfile
│  │  gradlew
│  │  gradlew.bat
│  │  settings.gradle
│  │
│  ├─gradle
│  │  └─wrapper
│  │          gradle-wrapper.jar
│  │          gradle-wrapper.properties
│  │
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─example
│      │  │          └─selog
│      │  │              │  SelogApplication.java
│      │  │              │
│      │  │              ├─config
│      │  │              │      JasyptConfig.java
│      │  │              │      JpaAuditingConfiguration.java
│      │  │              │      QueryDslConfig.java
│      │  │              │      RestTemplateConfig.java
│      │  │              │      S3Config.java
│      │  │              │      SecurityConfig.java
│      │  │              │
│      │  │              ├─controller
│      │  │              │      ExamController.java
│      │  │              │      FeedController.java
│      │  │              │      GitHubController.java
│      │  │              │      MemberController.java
│      │  │              │      RecordController.java
│      │  │              │      RoomController.java
│      │  │              │      StoreController.java
│      │  │              │      WebHookController.java
│      │  │              │
│      │  │              ├─dto
│      │  │              │  ├─exam
│      │  │              │  │      ExamDto.java
│      │  │              │  │
│      │  │              │  ├─feed
│      │  │              │  │      FeedDto.java
│      │  │              │  │
│      │  │              │  ├─github
│      │  │              │  │      GitHubDto.java
│      │  │              │  │
│      │  │              │  ├─member
│      │  │              │  │      MemberDto.java
│      │  │              │  │      MemberUpdateDto.java
│      │  │              │  │      SignUpDto.java
│      │  │              │  │      TargetDto.java
│      │  │              │  │      TokenDto.java
│      │  │              │  │      TokenRequestDto.java
│      │  │              │  │
│      │  │              │  ├─oauth
│      │  │              │  │      OAuthAttributes.java
│      │  │              │  │
│      │  │              │  ├─record
│      │  │              │  │      RecordDto.java
│      │  │              │  │      RecordMaintainDto.java
│      │  │              │  │      RecordRequestDto.java
│      │  │              │  │      RecordResponseDto.java
│      │  │              │  │
│      │  │              │  ├─room
│      │  │              │  │      StoreItemDto.java
│      │  │              │  │      UserItemDto.java
│      │  │              │  │
│      │  │              │  └─store
│      │  │              │          ItemDto.java
│      │  │              │
│      │  │              ├─entity
│      │  │              │      Authority.java
│      │  │              │      BaseTime.java
│      │  │              │      Exam.java
│      │  │              │      Feed.java
│      │  │              │      GitHub.java
│      │  │              │      Item.java
│      │  │              │      Member.java
│      │  │              │      Record.java
│      │  │              │      Room.java
│      │  │              │      UserItem.java
│      │  │              │
│      │  │              ├─exception
│      │  │              │  │  CustomException.java
│      │  │              │  │  JwtAccessDeniedHandler.java
│      │  │              │  │  JwtAuthenticationEntryPoint.java
│      │  │              │  │  OpenAIException.java
│      │  │              │  │
│      │  │              │  └─error
│      │  │              │          ErrorCode.java
│      │  │              │
│      │  │              ├─handler
│      │  │              │      CustomOAuth2UserRequestEntityConverter.java
│      │  │              │      CustomRequestEntityConverter.java
│      │  │              │      CustomTokenResponseConverter.java
│      │  │              │      Oauth2FailHandler.java
│      │  │              │      Oauth2SuccessHandler.java
│      │  │              │
│      │  │              ├─jwt
│      │  │              │      JwtFilter.java
│      │  │              │      JwtSecurityConfig.java
│      │  │              │      TokenProvider.java
│      │  │              │
│      │  │              ├─repository
│      │  │              │      ExamRepository.java
│      │  │              │      FeedRepository.java
│      │  │              │      GitHubRepository.java
│      │  │              │      ItemRepository.java
│      │  │              │      MemberRepository.java
│      │  │              │      QExamRepository.java
│      │  │              │      QExamRepositoryImpl.java
│      │  │              │      QFeedRepository.java
│      │  │              │      QFeedRepositoryImpl.java
│      │  │              │      QGitHubRepository.java
│      │  │              │      QGitHubRepositoryImpl.java
│      │  │              │      QItemUserItemRepository.java
│      │  │              │      QItemUserItemRepositoryImpl.java
│      │  │              │      QRecordRepository.java
│      │  │              │      QRecordRepositoryImpl.java
│      │  │              │      QRoomRepository.java
│      │  │              │      QUserItemRepository.java
│      │  │              │      QUserItemRepositoryImpl.java
│      │  │              │      RecordRepository.java
│      │  │              │      RoomRepository.java
│      │  │              │      UserItemRepository.java
│      │  │              │
│      │  │              ├─response
│      │  │              │      ErrorResponse.java
│      │  │              │      SuccessResponse.java
│      │  │              │
│      │  │              ├─service
│      │  │              │      CustomOauth2UserService.java
│      │  │              │      CustomUserDetailsService.java
│      │  │              │      ExamService.java
│      │  │              │      FeedService.java
│      │  │              │      GitHubService.java
│      │  │              │      MemberService.java
│      │  │              │      RecordService.java
│      │  │              │      RoomService.java
│      │  │              │      S3Uploader.java
│      │  │              │      StoreService.java
│      │  │              │      WebHookService.java
│      │  │              │
│      │  │              └─util
│      │  │                      SecurityUtil.java
│      │  │
│      │  └─resources
│      │          application.properties
│      │
│      └─test
│          ├─java
│          │  └─com
│          │      └─example
│          │          └─selog
│          │              │  SelogApplicationTests.java
│          │              │
│          │              ├─config
│          │              │      JasyptConfigTest.java
│          │              │      TestConfig.java
│          │              │
│          │              ├─controller
│          │              │      ExamControllerTest.java
│          │              │      FeedControllerTest.java
│          │              │      GitHubControllerTest.java
│          │              │      MemberControllerTest.java
│          │              │      RecordControllerTest.java
│          │              │      RoomControllerTest.java
│          │              │      StoreControllerTest.java
│          │              │      WebHookControllerTest.java
│          │              │
│          │              ├─jwt
│          │              │      JwtFilterTest.java
│          │              │      TokenProviderTest.java
│          │              │
│          │              ├─repository
│          │              │      ExamRepositoryTest.java
│          │              │      FeedRepositoryTest.java
│          │              │      GitHubRepositoryTest.java
│          │              │      ItemRepositoryTest.java
│          │              │      MemberRepositoryTest.java
│          │              │      RecordRepositoryTest.java
│          │              │      RoomRepositoryTest.java
│          │              │      UserItemRepositoryTest.java
│          │              │
│          │              └─service
│          │                      ExamServiceTest.java
│          │                      FeedServiceTest.java
│          │                      GitHubServiceTest.java
│          │
│          └─resourcesapplication-test.properties
│
├─back-matching
│  │  .gitignore
│  │  build.gradle
│  │  Dockerfile
│  │  gradlew
│  │  gradlew.bat
│  │  settings.gradle
│  │
│  ├─gradle
│  │  └─wrapper
│  │          gradle-wrapper.jar
│  │          gradle-wrapper.properties
│  │
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─example
│      │  │          └─realtime
│      │  │              │  MatchingApplication.java
│      │  │              │
│      │  │              ├─config
│      │  │              │      RabbitMQConfig.java
│      │  │              │
│      │  │              ├─dto
│      │  │              │      MatchingDto.java
│      │  │              │
│      │  │              └─schedule
│      │  │                      Matching.java
│      │  │                      MatchingAlgorithm.java
│      │  │                      MatchingListener.java
│      │  │                      MatchingQueue.java
│      │  │                      SendMatching.java
│      │  │
│      │  └─resources
│      │          application.properties
│      │
│      └─test
│          └─java
│              └─com
│                  └─example
│                      └─realtimeMatchingApplicationTests.java
│
├─back-realtime
│  │  .gitignore
│  │  build.gradle
│  │  Dockerfile
│  │  gradlew
│  │  gradlew.bat
│  │  settings.gradle
│  │
│  ├─gradle
│  │  └─wrapper
│  │          gradle-wrapper.jar
│  │          gradle-wrapper.properties
│  │
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─example
│      │  │          └─realtime
│      │  │              │  RealtimeApplication.java
│      │  │              │
│      │  │              ├─config
│      │  │              │      JasyptConfig.java
│      │  │              │      QueryDslConfig.java
│      │  │              │      RabbitMQConfig.java
│      │  │              │      SecurityConfig.java
│      │  │              │      WebSocketConfig.java
│      │  │              │
│      │  │              ├─controller
│      │  │              │      MatchingController.java
│      │  │              │      RealTimeController.java
│      │  │              │
│      │  │              ├─dto
│      │  │              │      ExamDto.java
│      │  │              │      MatchingDto.java
│      │  │              │      MemberDto.java
│      │  │              │      RealTimeInfoDto.java
│      │  │              │
│      │  │              ├─entity
│      │  │              │      Authority.java
│      │  │              │      Exam.java
│      │  │              │      Member.java
│      │  │              │
│      │  │              ├─exception
│      │  │              │  │  CustomException.java
│      │  │              │  │
│      │  │              │  └─error
│      │  │              │          ErrorCode.java
│      │  │              │
│      │  │              ├─handler
│      │  │              │      StompHandler.java
│      │  │              │      WebSocketEventListener.java
│      │  │              │
│      │  │              ├─jwt
│      │  │              │      TokenProvider.java
│      │  │              │
│      │  │              ├─repository
│      │  │              │      ExamRepository.java
│      │  │              │      MemberRepository.java
│      │  │              │      QExamRepository.java
│      │  │              │      QExamRepositoryImpl.java
│      │  │              │
│      │  │              ├─response
│      │  │              │      ErrorResponse.java
│      │  │              │      SuccessResponse.java
│      │  │              │
│      │  │              ├─service
│      │  │              │      ChatService.java
│      │  │              │      ExamService.java
│      │  │              │      MatchingService.java
│      │  │              │      MemberService.java
│      │  │              │
│      │  │              └─util
│      │  │                      SecurityUtil.java
│      │  │
│      │  └─resources
│      │          application.properties
│      │
│      └─test
│          └─java
│              └─com
│                  └─example
│                      └─realtimeRealtimeApplicationTests.java
│
├─back-schedule
│  │  .gitignore
│  │  build.gradle
│  │  Dockerfile
│  │  gradlew
│  │  gradlew.bat
│  │  settings.gradle
│  │
│  ├─gradle
│  │  └─wrapper
│  │          gradle-wrapper.jar
│  │          gradle-wrapper.properties
│  │
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─example
│      │  │          └─estable
│      │  │              │  EstableApplication.java
│      │  │              │
│      │  │              ├─config
│      │  │              │      JpaAuditingConfiguration.java
│      │  │              │
│      │  │              ├─dto
│      │  │              │      FeedDto.java
│      │  │              │      RecordDto.java
│      │  │              │
│      │  │              ├─entity
│      │  │              │      Authority.java
│      │  │              │      BaseTime.java
│      │  │              │      Feed.java
│      │  │              │      Member.java
│      │  │              │      Record.java
│      │  │              │
│      │  │              ├─repository
│      │  │              │      FeedRepository.java
│      │  │              │      MemberRepository.java
│      │  │              │      RecordRepository.java
│      │  │              │
│      │  │              ├─schedule
│      │  │              │  ├─baekjoon
│      │  │              │  │      CrawlingService.java
│      │  │              │  │
│      │  │              │  └─feed
│      │  │              │          FeedService.java
│      │  │              │
│      │  │              └─util
│      │  │                      RSSReader.java
│      │  │
│      │  └─resources
│      │          application.properties
│      │
│      └─test
│          └─java
│              └─com
│                  └─example
│                      └─estableEstableApplicationTests.java
│
├─chrome-extension
│  │  .eslintrc
│  │  .gitignore
│  │  .prettierrc
│  │  LICENSE
│  │  manifest.json
│  │  package.json
│  │  popup.html
│  │  popup.js
│  │  README.md
│  │  rules.json
│  │  welcome.html
│  │  welcome.js
│  │
│  ├─assets
│  │      profile1.png
│  │      ribbon.png
│  │      sellogo.png
│  │      smile.png
│  │      tag.png
│  │      tistory.png
│  │      tornado.png
│  │
│  ├─css
│  │  │  popup.css
│  │  │  welcome.css
│  │  │
│  │  ├─baekjoon
│  │  │      inject.css
│  │  │
│  │  ├─programmers
│  │  │      inject.css
│  │  │
│  │  └─swexpertacademy
│  │          inject.css
│  │
│  ├─library
│  │      FileSaver.min.js
│  │      jquery-3.3.1.min.js
│  │      jszip.min.js
│  │      semantic.min.js
│  │      sha1.min.js
│  │      spin.js
│  │
│  └─scripts
│      │  authorize.js
│      │  background.js
│      │  enable.js
│      │  Github.js
│      │  oauth2.js
│      │  storage.js
│      │  toast.js
│      │  util.js
│      │
│      ├─baekjoon
│      │      baekjoon.js
│      │      parsing.js
│      │      storage.js
│      │      uploadfunctions.js
│      │      util.js
│      │      variables.js
│      │
│      ├─programmers
│      │      parsing.js
│      │      programmers.js
│      │      uploadfunctions.js
│      │      util.js
│      │      variables.js
│      │
│      ├─swexpertacademy
│      │      parsing.js
│      │      storage.js
│      │      swexpertacademy.js
│      │      uploadfunctions.js
│      │      util.js
│      │      variables.js
│      │
│      ├─tistory
│      │      tistory.js
│      │      uploadfunctions.js
│      │
│      └─veloguploadfunctions.jsvelog.js

💡 Chrome 웹 스토어 출시

sellog


🖥️ 주요기능

I. 회원가입 및 로그인

login
  • GitHub ID를 통한 소셜 로그인으로 서비스를 이용할 수 있습니다.
  • 신규 회원이라면 소셜로그인 후 캐릭터, 이름, 좌우명을 필수 사항으로 입력받으며, 이메일, GitHub, 블로그 주소를 선택 사항으로 입력받습니다. 입력받은 정보는 메인 페이지 및 MyRoom 페이지에서 활용됩니다.

II. 이용안내

info
  • 회원가입을 완료하면 전체적인 서비스에 대한 이용 안내 페이지로 이동합니다.
  • 스크롤을 통해 서비스의 주요기능들에 대한 안내사항을 볼 수 있으며, 좌측 상단의 버튼을 누르면 메인 페이지로 이동할 수 있습니다.
  • 스크롤을 최하단으로 이동하면 서비스의 핵심 요소인 Chrome Extension에 대한 설명을 확인할 수 있고, INSTALL 버튼을 클릭하여 Extension의 설치 페이지로 이동할 수 있습니다.

III. Main 페이지

main
  • 유저의 캐릭터와 맵이 3D로 표시되며, 마우스 클릭을 통해 맵을 자유롭게 이동할 수 있습니다.
  • CS, FEED, SHOP, ROOM 4가지의 길로 이동 가능합니다.
  • 각 페이지의 Spot으로 이동하면 해당 페이지로 이동할 수 있는 버튼이 나타납니다.
  • 우측 상단의 토글 버튼을 통해서도 원하는 페이지로 이동할 수 있습니다.

IV. My Room 페이지

myRoom
  • MyRoom의 좌측 탭에서는 유저의 프로필 정보와 유저가 설정한 습관을 확인할 수 있습니다.
  • 우측 탭에서는 유저의 3D 방을 볼 수 있습니다.
  • 우측 하단에 있는 MyItems를 클릭하면 좌측 탭이 전환되며 유저가 보유한 아이템을 카테고리별로 확인할 수 있습니다.
  • 아이템을 클릭하면 방에 해당 아이템이 나타나며, 원하는 위치와 각도를 설정하여 방을 꾸밀 수 있습니다.
  • 아이템은 올리기, 내리기, 회전, 삭제가 가능합니다.

V. My Goals 페이지

target
  • My Goals 페이지에서는 5가지(Github, Blog, Algorithm, Feed, CS Quiz)의 습관을 설정할 수 있고, 달성한 습관들에 대한 통계 및 상세 정보를 확인할 수 있습니다.

  • 습관 설정

    • 좌측 탭에서 각 습관 설정 버튼을 누르면 모달을 통해 유저가 원하는 습관 주기를 설정할 수 있습니다.
    • 습관 주기는 추천 주기가 제시되며, 추천 주기로 설정할 시 누적보상을 획득할 수 있습니다.
    • 추천 주기는 커밋의 경우 1일 1커밋, 블로그는 7일 1포스팅, 알고리즘 문제는 1일 1문제풀기로 이외의 경우는 누적보상을 지급하지 않습니다.
  • 통계 및 상세정보

    • 우측 탭의 상단에서는 각 습관별 유지 중인 일수와 누적 보상 정보를 확인할 수 있습니다.
    • 차트를 통해 각 습관을 달성한 횟수를 시각적으로 확인할 수 있습니다.
    • 우측 탭의 하단에서는 캘린더를 통해 일자별 달성한 습관의 상세정보를 확인할 수 있습니다.
    • 확인하고 싶은 일자를 선택하면 해당 일자에 달성한 습관들이 표시됩니다. 표시된 습관을 누르면 달성한 습관의 상세 정보가 표시됩니다.

VI. Item Shop 페이지

itemShop
  • Item Shop 페이지에서는 습관 달성을 통해 획득한 포인트로 아이템을 구매할 수 있습니다.
  • 아이템들은 카테고리로 구분되어 있으며, 좌측 버튼을 통해 카테고리별 아이템을 확인할 수 있습니다.
  • 각 아이템을 클릭하면 미리보기 화면이 3D로 제공되며, 마우스를 통해 회전시켜 다양한 각도에서 아이템을 확인할 수 있습니다.

VII. CS Quiz 페이지 (1) - Solo Play

csquiz-solo
  • Solo Play에서는 5가지(Data Structure, Operating System, Database, Network, Programming Common)의 영역 중 한 가지를 선택하면 5문제가 출제됩니다.
  • 각 문제는 4지선다로 이루어져 있으며, 2분의 제한시간이 있습니다.

VII. CS Quiz 페이지 (2) - 1vs1 Battle

csquiz-battle
  • 1vs1 Battle에서는 다른 유저와 실시간 CS Quiz 대결을 할 수 있습니다.
  • 매칭이 이루어지면 3개의 OX 퀴즈가 출제되며, 각 문제당 10초의 제한시간이 있습니다.
  • 더 많은 문제를 맞힌 유저가 승리하게 됩니다.

VIII. Feed 페이지

feed
  • 개발자 피드 페이지에서는 유명 IT 기업들의 기술 블로그를 모아 볼 수 있습니다.
  • 좌측 nav바에서는 조회수가 높은 게시글 10개를 확인 할 수 있습니다.
  • 한 유저가 같은 게시물을 보더라도 조회수는 1번만 증가하게 됩니다.


IX. 자동화 시스템 (1) - Blog Posting

blog auto
  • 유저가 블로그 글을 작성하면 Sellog의 Chrome Extension을 통해 자동으로 감지하여 습관 달성 여부를 판단합니다.
  • ChatGPT를 통해 유저가 작성한 글을 검증하여 자체 필터링을 합니다.

IX. 자동화 시스템 (2) - Algorithm

algo auto
  • 유저가 온라인 저지 사이트에서 알고리즘 문제를 풀면 Sellog의 Chrome Extension을 통해 자동으로 감지하여 습관 달성 여부를 판단합니다.

IX. 자동화 시스템 (3) - Github

github auto
  • 유저가 Github에 commit을 하면 repository에 등록된 webhook요청을 서버가 받아 습관 commit을 기록하게 됩니다.

IX. 자동화 시스템 (4) - CS Quiz

quiz auto
  • 유저가 Sellog의 CS Quiz를 다 푼 경우 문제를 풀었다는 정보가 서버에 기록됩니다.

IX. 자동화 시스템 (5) - Feed

feed auto
  • 유저가 Sellog의 Feed를 선택하여 읽게 되면 조회수 증가와 Feed를 읽었다는 정보가 서버에 기록됩니다.

누적 보상 기준

구분 기본보상 누적 일수 1-6일 누적 일수 ~11일 누적 일수 ~16일 누적 일수 ~21일 누적 일수 ~26일 누적 일수 ~66일
github 10 point 10 point 10 point 10 point 20 point 10 point 20 point
blog 포스팅 40 point 10 point 10 point 10 point 40 point 10 point 40 point
algorithm 15 point 10 point 10 point 10 point 10 point 10 point 10 point
cs 문제 풀기 2 point 없음 없음 없음 없음 없음 없음
개발 피드 5 point 없음 없음 없음 없음 없음 없음

※ 뇌가 습관을 인식하는데 21일, 몸이 습관을 받아들이는데는 66일이 걸린다는 점을 참고해, 21일과 66일 달성시에는 추가 누적 포인트 지급함.


👥 협업 관리

I. Jira Burn Down Chart

1주차
2주차
3주차
4주차
5주차
6주차

II. Notion

Link


📋 프로젝트 관련 문서

구분 링크
포팅 매뉴얼 포팅 매뉴얼 바로가기
시연 시나리오 시연 시나리오 바로가기
DB 덤프 데이터 DB 덤프 데이터

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published