- README
2023.07.04 ~ 2023.08.18 (μ½ 7μ£Ό)
νμ μ±ν μ κΈ°λ°μΌλ‘ ν μμ΄λ―Όκ³Όμ μΈμ΄ κ΅ν μΉ μλΉμ€ νλ‘μ νΈ
νλ‘ νΈ νλ‘μ νΈ κ΅¬μ‘°
π¦src
β£ πapi
β£ πassets
β β£ πfonts
β β£ πicons
β β£ πimgs
β β β£ πprofiles
β β πstyles
β£ πcomponents
β β£ πbuttonMenu
β β£ πchatList
β β£ πcommon
β β β£ πbutton
β β β£ πcontainer
β β β£ πdropdown
β β β£ πinput
β β β£ πoverlay
β β β£ πprofile
β β β£ πslideMenu
β β β£ πtab
β β β πtooltip
β β£ πdialoglist
β β£ πdrawing
β β£ πgrade
β β£ πheader
β β£ πlangList
β β£ πloading
β β£ πmodal
β β β£ πlogin
β β β£ πmatch
β β β β£ πmatchhome
β β β£ πmeeting
β β β£ πmypage
β β β£ πwordBook
β β£ πmusicPlayer
β β£ πprofileBar
β β£ πprogressBar
β β£ πScriptEditor
β β£ πstarRate
β β£ πvalidationList
β β πvideoFrame
β£ πconfig
β£ πfeatures
β β£ πMeeting
β β πUser
β£ πhooks
β β£ πwhiteboard
β£ πLayout
β£ πpages
β β£ πError
β β£ πhome
β β£ πlogin
β β£ πmatch
β β£ πmeeting
β β β£ πscreen
β β β£ πslide
β β£ πmypage
β β£ πsignup
β£ πstore
β£ πutils
β£ πApp.jsx
β£ πmain.jsx
β πrouter.jsx
λ°±μλ νλ‘μ νΈ κ΅¬μ‘°
π¦airlingo
β£ πdomain
β β£ πchat
β β β£ πcontroller
β β β£ πentity
β β β£ πrepository
β β β πservice
β β£ πcontent
β β β£ πcontroller
β β β£ πdto
β β β β£ πrequest
β β β β πresponse
β β β£ πentity
β β β£ πrepository
β β β πservice
β β£ πlanguage
β β β£ πcontroller
β β β£ πdto
β β β β£ πrequest
β β β β πresponse
β β β£ πentity
β β β£ πrepository
β β β πservice
β β£ πmatching
β β β£ πcontroller
β β β£ πrequest
β β β£ πresponse
β β β πservice
β β£ πreport
β β β£ πcontroller
β β β£ πdto
β β β β£ πrequest
β β β β πresponse
β β β£ πentity
β β β£ πrepository
β β β πservice
β β£ πstudy
β β β£ πcontroller
β β β£ πdto
β β β β£ πrequest
β β β β πresponse
β β β£ πentity
β β β£ πrepository
β β β πservice
β β£ πuser
β β β£ πcontroller
β β β£ πdto
β β β β£ πrequest
β β β β πresponse
β β β£ πentity
β β β£ πrepository
β β β πservice
β β πword
β β β£ πcontroller
β β β£ πdto
β β β β£ πrequest
β β β β πresponse
β β β£ πentity
β β β£ πrepository
β β β πservice
β£ πglobal
β β£ πconfig
β β£ πentity
β β£ πexception
β β£ πhandler
β β£ πopenvidu
β β£ πrabbitmq
β β£ πresponse
β β πutil
β πAirlingoApplication.java
ν΄λ¦νμ¬ λ΄μ© νμ/μ¨κΈ°κΈ°
GROUND RULE
- λ§€μΌ μ€μ 9μ, μ€ν 5μ 2νμ κ±Έμ³ **λ°μΌλ¦¬ μ€ν¬λΌ(Daily Scrum)**μ μ§νν΄, κ°μΈλ³ λΉμΌ λͺ©νλ₯Ό μ€μ νκ³ μ§ν μν©μ 곡μ ν©λλ€.
- λ§€μ£Ό κΈμμΌ μ€ν 5μμ **μ€νλ¦°νΈ μΈμ (Sprint Session)**μ μ§νν΄ μΌμ£ΌμΌκ° νλ‘μ νΈμ μ§ν μν© λ° μΆν μ§ν λͺ©νλ₯Ό μ€μ ν©λλ€.
- λ°μΌλ¦¬ μ€ν¬λΌκ³Ό μ€νλ¦°νΈ μΈμ μ νμ₯μ΄ νμλ₯Ό μ£Όμ¬νκ³ , λ€λ₯Έ νμλ€μ΄ λμκ°λ©° νμλ‘μ μμ±ν©λλ€.
- νμμ μ κ·Ήμ μΌλ‘ μ°Έμ¬νκ³ , νμ₯μ μ§λͺ©μ λ°λΌ λ³ΈμΈμ μ견μ λ°λμ μ μν©λλ€.
- **μ½λ 리뷰(Code Review)**λ μ μ¬μκ°μ νμ©ν΄ νμν λΆλΆλ§ κ°λ¨ν 30λΆ λμ μ§νν©λλ€.
- μλ‘ λ€λ₯Έ μ½λ μ€νμΌμ ν©μν **μ½λ© 컨벀μ (Coding Convention)**μ λ°λΌ μΌμνν©λλ€.
- μ½λ 리뷰λ μ°μ μμμ λ°λΌ λΉ λ₯΄κ² μ§ννλ©°, μ¬μν μ견μ λ°μν μ§μ λν λΆλΆμ μ½λ μμ±μκ° μ νν μ μλλ‘ ν©λλ€.
- μλ¬(Error)κ° λ°μ μ 1μκ° μ λλ νΌμμ κ³ λ―Όν΄λ³΄κ³ , ν΄κ²°μ΄ λμ§ μμ κ²½μ° νμλ€κ³Ό λ°λ‘ 곡μ ν©λλ€.
- μλ¬λ₯Ό ν΄κ²°νκΈ° μν΄ κ³ λ―Όν λ΄μ© λ° ν΄κ²° κ³Όμ μ λ Έμ μ μ 리νμ¬ κ³΅μ ν©λλ€.
- μ½λμ μ£Όμ(Comment)μ μμ±νλ μ΅κ΄μ μνννμ¬, λ€λ₯Έ νμλ€μ΄ λ΄κ° μμ±ν μ½λλ₯Ό μ΄ν΄νκΈ° μ½λλ‘ ν©λλ€.
- κΈ°λ₯μ ꡬν μ리λ₯Ό 곡λΆνκ³ νμ νκΈ° μν΄μ μ€ν μμ€(Open Source) λΌμ΄λΈλ¬λ¦¬ μ¬μ©μ μ΅μννλ κ²μ μμΉμΌλ‘ ν©λλ€.
- ν리νμ€νΈ(Pull Request)κ° μμ κ²½μ°, μ΄λ₯Ό νμΈνλ€λ μλ―Έμμ μ΅μν 1κ° μ΄μμ μ견μ λ¨κ²¨μΌ ν©λλ€.
- ν리νμ€νΈ μ μ견 κ°λ±μ΄ μκ²Όλ€λ©΄, μΆ©λΆν ν λ‘ κ³Ό μ견 μλ ΄ κ³Όμ μ κ±°μ³ λ€μμ μ견μ λ°λΌμΌ ν©λλ€.
- 컀λ°(Commit)νκΈ° μ μ κ³ μΉ λΆλΆμ ν λ² λ μ κ²ν©λλ€.
- 1κ°μ§ κΈ°λ₯ λλ 1κ°μ§ ν¨μλ₯Ό μλ‘ λ§λ€ λλ§λ€ 컀λ°νλ μ΅κ΄μ μννν©λλ€.
- **μ»€λ° λ©μμ§(Commit Message)**λ ν©μν **μ»€λ° μ»¨λ²€μ (Commit Convention)**μ λ°λΌ μ΅λν μμΈνκ² μμ±ν©λλ€.
- κΉ λΈλμΉ(Branch) κ·μΉμ λ°λΌ λΈλμΉλ₯Ό κ΄λ¦¬νκ³ , λͺ¨λ μμ μ μ¬λ°λ₯Έ λΈλμΉμμ μμ ν΄μΌ ν©λλ€.
- κ°μΈ μΌμ μ΄ μκΈ΄ κ²½μ° λ°λμ 미리 λ€λ₯Έ νμλ€μκ² κ³΅μ ν©λλ€.
- νλ‘μ νΈ μ€κ°μ μ·¨μ λ±μΌλ‘ μλ£νκ² λ κ²½μ°, λμμ μ°¨μμμ κ³΅ν΅ νλ‘μ νΈλ₯Ό λ§λ¬΄λ¦¬νκ³ κ°μΌ ν©λλ€.
- μΉ΄μΉ΄μ€ν‘(KakaoTalk), λμ€μ½λ(Discord), λ§€ν°λͺ¨μ€νΈ(Mattermost) λ±μ ν΅ν μ°λ½μ νμΈνμ λλ, νμΈνλ€λ μλ―Έμ λ΅λ³ λλ μ΄λͺ¨μ§(Emoji)λ‘ νμν©λλ€.
- λ§€μ£Ό κΈμμΌ λ Όμν΄, μ£Όλ§ μ€ ν루λ μ€νΈλ μ€ κ΄λ¦¬ λ° κ°μΈ 곡λΆλ₯Ό μν μκ°μΌλ‘ νμ©ν μ μλλ‘ ν©λλ€.
- κ΅μ‘μ₯μμ ν΄μ€νκΈ° μ μ μκΈ° μ리λ₯Ό κΉλνκ² μ 리μ λν©λλ€.
- λͺΈμ΄ μνλ©΄, λ―Έμν΄νμ§ μκ³ λΉ λ₯΄κ² ν볡ν μ μλλ‘ νΉ μ¬λ κ²μ κΆμ₯ν©λλ€.
- λ°₯μ λ λ ν λ¨Ήκ³ , κ΅Άμ§ μμ΅λλ€. βμ λ¨Ήκ³ μ£½μ κ°λ°μκ° λκΉλ κ³±μ΅λλ€.β
- μ κ·Ήμ± : νμλ μ½λ 리뷰 λ μκ²¬μ΄ μλ€λ©΄ λ§μ€μ΄μ§ μκ³ μ견μ μ΄μΌκΈ°ν©λλ€. βλ§ν κΉ λ§κΉ ν λλ λ§ν΄μΌ ν©λλ€.β
- κΈμ μ μΈ νλ : νλ‘μ νΈμ μν λλ μμΌλ©΄μ μ¬λ―Έμκ² ν©μλ€. βν볡νκΈ° λλ¬Έμ μλ κ²μ΄ μλκ³ μκΈ° λλ¬Έμ ν볡ν©λλ€.β
- μν΅ : λ€λ₯Έ νμμ μ견μ μ‘΄μ€νκ³ , λ§μ λμ§ μμμΌ ν©λλ€. μκ²¬μ΄ λ€λ₯΄λ©΄, λνλ₯Ό ν΅ν΄ ννμ μ μ°ΎμμΌ ν©λλ€.
- νλ ₯ : νμμ΄ νλ€μ΄νλ λΆλΆμ΄ μλ€λ©΄, μμΌλ©΄μ λμμ£Όμ΄μΌ ν©λλ€. λμμ μ€μλ‘ λμ μ€λ ₯λ ν¨κ» μ¬λΌκ°λλ€.
- μ λ’° : λ€λ₯Έ νμλ€μ μ± μκ°κ³Ό μ€λ ₯μ λν΄ λ―Ώμμ μμ§ λ§μλ€.
ν΄λ¦νμ¬ λ΄μ© νμ/μ¨κΈ°κΈ°
COMMIT CONVENTION
- Commit λ©μΈμ§ ꡬ쑰
- ex) β¨ feat : Add sign in page #S09P11A308-52
<emoji> <type> : <subject> <Jira ticket number> // νμ
// λΉ νμΌλ‘ ꡬλΆ
<body> // μλ΅κ°λ₯
// λΉ νμΌλ‘ ꡬλΆ
<footer> // μλ΅κ°λ₯
ν΄λ¦νμ¬ λ΄μ© νμ/μ¨κΈ°κΈ°
BRANCH NAMING CONVENTION
-
ex) feat/{μ΄μ ν€}-{BE/FE}-{μ΄μ μμ½}
-
master / main - μ νμΌλ‘ μΆμ λ° λ°°ν¬κ° κ°λ₯ν μνμΈ λΈλμΉ β μ΅μ’ κ²°κ³Όλ¬Ό μ μΆ μ©λ
-
develop - λ€μ μΆμ λ²μ μ κ°λ°νλ λΈλμΉ β κΈ°λ₯ μμ± ν μ€κ°μ μ·¨ν©νλ μ©λ
-
feature - κ°μ’ κΈ°λ₯μ κ°λ°νλ λΈλμΉ β feat/login, feat/join λ±μΌλ‘ κΈ°λ₯ λΆλ₯ ν μμ
-
hotfix - μΆμ λ²μ μμ λ°μν λ²κ·Έλ₯Ό μμ νλ λΈλμΉ
ν΄λ¦νμ¬ λ΄μ© νμ/μ¨κΈ°κΈ°
CODING CONVENTION
- 1λ¬Έμμ μ΄λ¦μ μ¬μ©νμ§ μλλ€.
- λ€μμ€νμ΄μ€, μ€λΈμ νΈ, ν¨μ κ·Έλ¦¬κ³ μΈμ€ν΄μ€μλ camelCaseλ₯Ό μ¬μ©νλ€
ex) camelCase - ν΄λμ€λ constructorμλ PascalCaseλ₯Ό μ¬μ©νλ€.
ex) PascalCase - μ½μ΄ λ° μ΄λμ
μ νμ λͺ¨λ λλ¬Έμμ΄κ±°λ λͺ¨λ μλ¬Έμμ¬μΌ νλ€.
ex) NFT - ν΄λμ€λͺ
κ³Ό λ³μλͺ
μ
λͺ μ¬ μ¬μ© - λ©μλλͺ
μ
λμ¬ μ¬μ© - μμλͺ μ λλ¬Έμλ₯Ό μ¬μ©νκ³ , λ¨μ΄μ λ¨μ΄ μ¬μ΄λ _λ‘ μ°κ²°νλ€.
- componentλ PascalCaseλ₯Ό μ¬μ©νλ€.
ν΄λ¦νμ¬ λ΄μ© νμ/μ¨κΈ°κΈ°
JIRA CONVENTION
- λ§€μ£Ό μμμΌ μ€μ μ€ν¬λΌ νμ μ΄ν κ°μμ μ΄μ ν°μΌμ μμ±νλ€.
- μ΄μ μμ± μ νμΈν΄μΌ ν λΆλΆ
- λ΄λΉμκ° λ³ΈμΈμΌλ‘ μ€μ λμ΄ μλμ§
- μ»΄ν¬λνΈκ° μ§μ λμ΄ μλμ§ (FE, BE, κ³΅ν΅ μ€ ν1)
- Epic Linkκ° μ§μ λμ΄ μλμ§ (μ€κ³, FEκ°λ°, BEκ°λ°, νμ, νμ΅β¦)
- μ€νλ¦°νΈμ μ΄ Story Pointsκ° 40 μ΄μμΈμ§
- μ΄μ ν°μΌ μ΄λ¦μ [λ§λ¨Έλ¦¬] ꡬ체μ μΈ κΈ°λ₯ μΌλ‘ μ λλ€.
- ****************************κΈ°λ₯ κ΄λ ¨ μ΄μμΌ κ²½μ° **************[λ§λ¨Έλ¦¬]**************λ κΈ°λ₯ λͺ μΈμμ λλΆλ₯λ₯Ό λ°λ₯Έλ€.
- λ§€μΌ μ€μ μ€ν¬λΌ νμ μ΄ν κ·Έ λ μ²λ¦¬ν μ΄μ ν°μΌμ μ§ν μ€μΌλ‘ μ΄λμν¨λ€.
- μ€μκ°μΌλ‘ μ΄μλ₯Ό μ²λ¦¬ν λλ§λ€ μλ£ μ²λ¦¬νλ€.
- λ‘컬 ꡬλ κΈ°μ€μΌλ‘ μμ±λμμ΅λλ€.
- clone Project
git clone https://lab.ssafy.com/s09-webmobile1-sub2/AirLingo.git
- change path to /frontend/airlingo
npm i --legacy-peer-deps
- create .env file in /frontend/airlingo/
VITE_SERVER_URL={your_server_url}
VITE_SOCKET_URL={your_socket_url}
VITE_CHAT_SOCKET_URL={your_chat_socket_url}
- input frontend run script
npm run dev
- change path to /backend/airlingo/src/main/resources
application.yml
cloud:
aws:
s3:
bucket: ${your-bucket-name}
credentials:
accessKey: ${your-access-key}
secretKey: ${your-secret-key}
region:
static: ap-northeast-2
auto: false
stack:
auto: false
application-dev.yml
spring:
jpa:
hibernate:
ddl-auto: create #create update none
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${your-db-url}
username: ${your-db-username}
password: ${your-db-password}
rabbitmq:
host: localhost
port: 5672
username: ${your-rabbitmq-username}
password: ${your-rqbbitmq-password}
openviduUrl: ${your-openvidu-url}
openviduSecret: ${your-openvidu-secret}
- install docker,openvidu,redis,rabbitmq
- run openvidu
docker run -p 4443:4443 --rm -e OPENVIDU_SECRET=MY_SECRET openvidu/openvidu-dev:2.28.0
- change path /matching/airlingo
- run docker-compose.yaml for rabbitmq
- run backend,matching program
https://www.youtube.com/watch?v=WcZEspXgMLA
π’ μλ νμΈμ! μΌμ± μ²λ μννΈμ¨μ΄ μμΉ΄λ°λ―Έ(SSAFY) μμΈ 3λ° κ΅μ‘μμΌλ‘ μ‘°μ§λ νλ‘μ νΈ ν βκ°λ°μλ€βμ λλ€. νλ‘μ νΈ μ§ν κ³Όμ μμ λ°μνλ λ§μ λ¬Έμ λ₯Ό νμ κ° κ³΅μ νκ³ ν΄κ²°μ± μ λͺ¨μνλ©΄μ ν¨κ» μ±μ₯νλ κΈ°νλ‘ μΌκ² μ΅λλ€. κ°μ¬ν©λλ€.
κ°μ’ μνλ λ¬Έν μ½ν μΈ μμ μ¬μ©νλ β~λ€βμ ννμ μ¬μ©ν΄ λ―Έλμ κ°λ°μλ₯Ό κΏκΎΈλ μ¬μ― λͺ μ νμμ΄ λͺ¨μλ€λ μλ―Έλ₯Ό λ΄μμ΅λλ€.
![]() |
![]() |
|---|---|
| κ³ κ±΄ | κΉμν |
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
| κΉνλ¦Ό | λ¬Έμμ | λ°μκ· | μ€μ μ |

































































