Letβs Noteλ λꡬλ μμ μ μ½κ³ μ¬λ―Έμκ² play ν μ μλλ‘ νλ μ κΈ° μ°μ£Ό νλ«νΌ μ λλ€.
ν¨κ»νκ³ μΆμ μΉκ΅¬λ€μ λμ μμ
μ€μ μ΄λνκ³ , μμ± μ±ν
κ³Ό 컀μ 곡μ λ₯Ό ν΅ν΄ μν΅νμΈμ.
κ·Έλ¦¬κ³ μ¬λ¬ κ°μμ
κΈ°λ‘ μ΄λ£¨μ΄μ§ μ°λ¦¬λ§μ μμ
μ λ§λ€μ΄λ³΄μΈμ!
μ¬μ΄νΈ: www.letsnote.co.kr
$ git clone [https://github.com/Team-SoundHub/Let-s-Note.git](https://github.com/Team-SoundHub/Let-s-Note.git)
$ cd Let-s-Note/frontend
νκ²½λ³μ μ€μ
vim .env
- .env νμΌμ ν΄λΉ λ³μλ€μ μλ§κ² μ μΈν©λλ€
REACT_APP_GOOGLE_CX = {κ΅¬κΈ CSE CX κ°}
REACT_APP_GOOGLE_API_KEY = {κ΅¬κΈ CSE ν€}
REACT_APP_BACKEND_URL = {λ°±μλ API URL}
REACT_APP_BACKEND_URL = {λ°±μλ API URL}
REACT_APP_SOCKET_URL = {μΉ μμΌ μ£Όμ}
REACT_APP_SOCKET_HTTP = {λ°±μλ μλ² https μ£Όμ}
REACT_APP_TURN_SERVER = {TURN μλ² μ£Όμ}
μ€ν
$ npm install && npm start
$ git clone [https://github.com/Team-SoundHub/Let-s-Note.git](https://github.com/Team-SoundHub/Let-s-Note.git)
$ cd Let-s-Note/backend/letsnote/src/main/resource/static
properties νμΌ μ€μ
$ vim application.yml
μλ λ΄μ©μ μ°Έκ³ νμ¬ μ€κ΄νΈ μμ λ΄μ©μ μ±μ΄λ€.
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://{DBμλ² μ£Όμ}/{DB μ΄λ¦}?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&requireSSL=false&serverTimezone=Asia/Seoul&allowMultiQueries=true
username: { μμ΄λ }
password: { λΉλ°λ²νΈ }
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
show_sql: true
jwt:
header: Authorization
secret: { refreshTokenκ³Όλ λ€λ₯Έ HS512νμμ μν¬λ¦Ώ ν€ }
refresh-token-secret: { accessTokenκ³Όλ λ€λ₯Έ HS512νμμ μν¬λ¦Ώ ν€ }
access-token-validity-in-seconds: 3600
refresh-token-validity-in-seconds: 86400
letsnote:
baseUrl: { λ°±μλ μλ² μ£Όμ }
ai-server:
baseUrl: { λͺ¨λΈ μλ² μ£Όμ }
μ€ν
$ ./gradlew build
$ java -jar build/libs/letsnote.jar
- κ°λ‘μΆμ λ°μ , μΈλ‘μΆμ μκ³λ‘ λ°°μΉνμ¬ κ²©μμ ν΄λΉνλ μμ μ§ννλ λ°©μ
- Tone.js λ₯Ό νμ©νμ¬ νΌμλ Έ, κΈ°ν, λλΌ μ κΈ° μμ μΆλ ₯ λ° μμ§ μ‘°μ
- μμ±λ μμ μ μ μ₯ν΄ λμ μνμΌλ‘ λ¨κΈ°κ³ , νΌλμ 곡μ νλ κΈ°λ₯
- λ€λ₯Έ μ¬λμ μνλ μ΄λ κ°λ₯
- μ 보 κ²μμ μ΅μ νμν¨ Google Custom Search EngineμΌλ‘ μ 보 μ΄λ―Έμ§ μ 곡
- APIλ₯Ό ν΅ν΄ λ°μμ¨ μ΄λ―Έμ§λ₯Ό μ μ₯νλ μ΄λ―Έμ§ λ³΄κ΄ κΈ°λ₯
1. μμ μ€μ λ©€λ² μ΄λ
- μμ μ€μ λ€λ₯Έ μ μ λ₯Ό μ΄λν μ μμ
2. μΉμμΌ κΈ°λ° μμ λ΄μ© 곡μ
- μ€μκ°μΌλ‘ μμ μ€μ μν λ ΈνΈ μ 보, 컀μ μμΉ, μ±ν 곡μ
3. WebRTC κΈ°λ° μμ±μ±ν κΈ°λ₯
1. Signaling | 2. P2P Connection |
---|---|
- P2P Mesh λ°©μμ νμ©νμ¬ λ€μ€ μμ±μ±ν νμ±ν
- μΉμμΌμ ν΅ν΄ μ°κ²° ν보 Signal κ΅ν
1. λλΌ λ£¨ν μλ μμ±
- μΌλΆ λλΌ λΉνΈ μ λ ₯ ν λλΌ ν΄λ¦ μ μλ μμ±
2. AI λ ΈνΈ μΆμ² κΈ°λ₯
- GPT 3.5 Assistant κΈ°λ° GPT API 곡μ λ¬Έμμ μκ°λ ν둬ννΈ μμ§λμ΄λ§ λ°©λ²λ‘ μ νμ©νμ¬ λλ©μΈ μ§μμ μ£Όμ νκ³ , μλ΅ νμ μ νλλ₯Ό μ¬λ¦¬κΈ° μν΄ μ , μΆλ ₯ νμμ ν둬ννΈλ‘ μ‘°μ
|
|
- Stomp νλ‘ν μ½μ νμ©νμ¬ λ©μΈμ§λ€μ λΈλ‘λμΊμ€ν ν μ μλλ‘ κ΅¬ν
- μΈκ°λμ§ μμ μ¬μ©μκ° μμΌ μ°κ²° λ©μΈμ§λ₯Ό 보λ΄λ μΈμ¦ μ μ°¨μ λΆμ¬λ‘ 보μ λ¬Έμ λ°μ
- νΉμ μ μ κ° λ©μΈμ§ λΈλ‘컀μ μΉμμΌ μ°κ²° μμ² μ, JWT ν ν°μ νμ±νμ¬
- ν΄λΉ μ μ κ° μμ μμ μ€μ λ©€λ²μΈμ§ νλ¨νλ μΈμ¦ μΈν°μ ν° κ³μΈ΅ μΆκ°
- μΉμμΌ μ°κ²° μ μμΈμ€ ν ν°μΌλ‘ μ μ μ μΈκ° μ¬λΆλ₯Ό νλ¨
- μΈκ°λμ§ μμ μ¬μ©μλ μΉμμΌ μ°κ²°μ κ±°λΆνμ¬ λ³΄μμ κ°ν
νμ₯ μμ μ BE |
κΉμ£Όμ FE |
μ΄μ°¬μ° FE |
κΉλ―Όκ· BE |
frontend@0.1.0
βββ @babel/runtime@7.23.9
βββ @reduxjs/toolkit@2.1.0
βββ @stomp/stompjs@7.0.0
βββ @tailwindcss/forms@0.5.7
βββ @testing-library/jest-dom@5.17.0
βββ @testing-library/react@13.4.0
βββ @testing-library/user-event@13.5.0
βββ autoprefixer@10.4.17
βββ axios@1.6.7
βββ dom-helpers@5.2.1 extraneous
βββ flowbite-react@0.7.2
βββ flowbite@2.2.1
βββ postcss@8.4.33
βββ process@^0.11.10
βββ react-dom@18.2.0
βββ react-redux@9.1.0
βββ react-router-dom@6.21.3
βββ react-scripts@5.0.1
βββ react-transition-group@4.4.5 extraneous
βββ react-webcam@^7.2.0
βββ react@18.2.0
βββ simple-peer@^9.11.1
βββ socket.io-client@4.7.4
βββ sockjs-client@1.6.1
βββ sockjs@0.3.24
βββ soundfont2@0.4.0
βββ styled-components@6.1.8
βββ sweetalert2@11.10.5
βββ tailwind-styled-components@2.2.0
βββ tailwindcss@3.4.1
βββ tone@14.7.77
βββ web-vitals@2.1.4
βββ webmidi@3.1.8
βββ websocket@1.0.34
backend@0.1.0
+--- jjwt-api:0.11.5
+--- spring-boot-starter-data-jpa -> 3.2.2
| +--- spring-boot-starter-aop:3.2.2
| +--- spring-boot-starter-jdbc:3.2.2
| +--- hibernate-core:6.4.1.Final
| +--- spring-data-jpa:3.2.2
| \--- spring-aspects:6.1.3
| \--- aspectjweaver:1.9.21
+--- spring-boot-starter-security -> 3.2.2
| +--- spring-boot-starter:3.2.2 (*)
| +--- spring-aop:6.1.3 (*)
| +--- spring-security-config:6.2.1
| \--- spring-security-web:6.2.1
+--- spring-boot-starter-validation -> 3.2.2
| +--- spring-boot-starter:3.2.2 (*)
| +--- tomcat-embed-el:10.1.18
| \--- hibernate-validator:8.0.1.Final
+--- spring-boot-starter-web -> 3.2.2
| +--- spring-boot-starter:3.2.2 (*)
| +--- spring-boot-starter-json:3.2.2
| +--- spring-boot-starter-tomcat:3.2.2
| +--- spring-web:6.1.3 (*)
| \--- spring-webmvc:6.1.3
+--- spring-boot-starter-websocket -> 3.2.2
| +--- spring-boot-starter-web:3.2.2 (*)
| +--- spring-messaging:6.1.3
+--- springdoc-openapi-starter-webmvc-ui:2.3.0
| +--- springdoc-openapi-starter-webmvc-api:2.3.0
| \--- org.webjars:swagger-ui:5.10.3
+--- spring-boot-starter-test -> 3.2.2
| +--- spring-boot-starter:3.2.2 (*)
| +--- spring-boot-test:3.2.2
| +--- spring-boot-test-autoconfigure:3.2.2
| +--- com.jayway.jsonpath:json-path:2.8.0
| +--- jakarta.xml.bind-api:4.0.1 (*)
| +--- json-smart:2.5.0
| +--- assertj-core:3.24.2
| +--- awaitility:4.2.0
| +--- hamcrest:2.2
| +--- junit-jupiter:5.10.1
| +--- mockito-core:5.7.0
| +--- mockito-junit-jupiter:5.7.0
| +--- org.skyscreamer:jsonassert:1.5.1
| +--- spring-core:6.1.3 (*)
| +--- spring-test:6.1.3
| \--- org.xmlunit:xmlunit-core:2.9.1
\--- spring-security-test -> 6.2.1