2023/2/17 - 2023/4/7
SSAFY 8κΈ° νΉν νλ‘μ νΈ
λ΄κ° μΉν° μμ μ£ΌμΈκ³΅μ΄λΌλ©΄ λꡬμΌκΉ? μ ν κ²μ¬λ₯Ό ν΅ν΄ μΉν° μμ λλ₯Ό μ°Ύλ μλΉμ€!
μΉν° λ μ μ ν κ²μ¬λ₯Ό ν΅ν΄ μ£ΌμΈκ³΅μΈ λλ₯Ό λ°κ²¬νκ³ , μ·¨ν₯μ λ§λ μΉν°μ μΆμ² λ°μ.
# Backend
development tool : Intellij IDEA 2022.3.2
spring boot : 2.7.7
gradle : 7.6
jdk : zulu-11
my sql : 8.0.31
graphQL
lombok
Spring Data JPA
Spring Security
Spring Web
# Frontend
development tool : Visual Studio Code
npm
node.js : 18.15
React 18
react-router : v6.
graphql : 16.6
typescript : 4.9
styled-components : 5.3
# CI/CD
AWS EC2
Jenkins
NGINX
Docker
# κ·Έ μΈ νμ
ν΄
Git, source tree - λΈλμΉ μ λ΅μ ν΅ν΄ κΈ°λ₯ λΆλ¦¬
Notion - μ 체μ μΈ νμ κ΄ν λ° λͺ¨λ λ©λͺ¨
JIRA - μ£Όλ¨μ λͺ©νλ μ€μ λ° ν μΌ λ°°λΆ
Slack - λΉλ μμ νμΈμ©
# B.E.
toonbti
βββ global
β βββ config
βββ resouces
β βββ graphql.schema
βββ domain
β βββ controller
β βββ model
β β βββ dto
β β βββ entity
β β βββ repository
βββ βββ βββ service
# F.E.
toonbti
βββ public
β βββ index
βββ src
β βββ assets
β βββ components
β βββ pages
β βββ App
β βββ index
β βββ types
β βββ config
βββ package
- 맀주 μμμΌ μμΉ¨ κ°μ¬ μΈμ¬νκΈ°
- λ§€μΌ μ€μ /μ€ν Daily Scrum Meeting νκΈ° (μ€λ ν μΌ, μ€λ ν μΌ κ³΅μ )
- νλ΄μ§ μκΈ°β μ§μ¦λ΄μ§ μκΈ°β
- μ견 곡μ λ μ€ν λ§μΈλλ‘ λ°μλ€μ΄κΈ°
- λκ² λ΄κ² λλμ§ λ§κ³ μ°λ¦¬λ νμ΄λΌλ κ±Έ μμμ£ΌμΈμπ
- νμμ λ―Ώμ§λ§ μ½λλ ν λ² λ νμΈνκΈ° (MR ν μ½λ 리뷰)
- μ¬μ±κΈ°νλ©΄ Bless you~! ν΄μ£ΌκΈ°π€§
Requisite
- Github flowλ₯Ό μ€μν©λλ€
- μνν κ°λ°μ μν΄ Gitlab Issueνμ μ κ·Ή νμ©ν΄μ£ΌμΈμ
- μμ
μ λ§μΉκ³ λμ feature λΈλμΉλ₯Ό μΌμΌν rebaseν νμλ μμ΅λλ€.
- ν루 μ΄μ μ§λ feature branchμ κ²½μ°μλ μμΉ¨μ λ°λμ rebase ν΄μ£ΌμΈμ
- gitlabμμ μμμ rebase ν΄μ€λλ€
- main, frontend, backendμ pushν μ μμ΅λλ€ (maintainers μ μΈ)
- main, frontend, backendμ force-pushν μ μμ΅λλ€
Develop - Todo
- Gitlabμ issueλ₯Ό λ±λ‘ν©λλ€
- μλ‘μ΄ κΈ°λ₯μΌ κ²½μ°, "enhancement" labelμ λ¬μμ£ΌμΈμ
- μ΄λ―Έ λ«ν μ΄μλ₯Ό 보μ λ° μμ ν΄μΌν κ²½μ°, "duplicate" labelμ λ¬μμ£ΌμΈμ
- λ±λ‘ν issueμμ λΈλμΉλ₯Ό μμ±ν©λλ€
- issueνμμ μμ±ν λΈλμΉλ‘ μμ ν©λλ€
Develop - In progress
- ν΄λΉ μ΄μμμ μμ μ€ μ μ©ν λ νΌλ°μ€λ κΈ°μ μ μ‘°μΈμ commentλ‘ λ¬μμ£ΌμΈμ
- μ½λλ¦¬λ·°κ° νμμ MR(Merge Request)λ‘ λ§λ€μ΄μ£ΌμΈμ
- "help wanted" labelμ λ¬μμ£ΌμΈμ
- commit
- .gitignoreμ staged ν νμμλ νμΌλ€μ λ±λ‘ν΄μ£ΌμΈμ
- gitmessage.txtμ commit message templateμ μ°Έκ³ ν©λλ€
- git add . && git commit
Develop - Done
- μμ μ μλ£νλ€λ©΄ μμ λΈλμΉλ₯Ό νΈμν΄μ£ΌμΈμ
- Gitlabμμ MRμ μμ±ν©λλ€
- Source branch (feature-branch) into Target branch (frontend or backend)
- 리뷰 νμ Rebase λ° Merge ν©λλ€
Reference
-
B.E
νμ μν μ΄λ©μΌ Github κΆμ±μ π νμ₯, CI/CD, SpringBoot μ€κ³ λ° κ°λ° sungeun.kweon@gmail.com https://github.com/hellowco κΉμ§νΈ Django μ€κ³ λ° κ°λ° isagkim@gmail.com https://github.com/No88888888 μ μ£Όμ DB μ€κ³ λ° κ΄λ¦¬ wjswndud53@gmail.com https://github.com/charoon-wjswndud -
F.E
νμ μν μ΄λ©μΌ Github κΉνμ F.E νμ₯, νλ‘ νΈ κ΄λ¦¬ λ° κ°λ° taw4654@gmail.com https://github.com/DanKim0213 μ€μ§μ λμμΈ, κ³΅ν΅ layout κ°λ° λ° QA diniless7@gmail.com https://github.com/yoonjyjy λ Ένμ React κ°λ° λ° κΈ°μ μ°κ΅¬ nohhyunjeong93@gmail.com https://github.com/isabel-noh
κΉνμ
- graphqlμ λ°±μλμ νλ‘ νΈμλμ λμ λ° graphql-codegenμ νμ©νμ¬ μ€μ
- Intersection Observerλ₯Ό νμ©νμ¬ λ¬΄ν μ€ν¬λ‘€ κΈ°λ₯μ μΉν° λͺ©λ‘ νμ΄μ§μ μ μ©
- μ·¨ν₯ ν μ€νΈ νμ΄μ§μμ μ°κ΄ μΉν° μμ΄ν μ λΆλ¬μ¬λ, μ€λ³΅λ μΉν°μ Map μλ£νμ μ¬μ©νμ¬ κ±°λ₯΄κΈ°
- TypeScriptλ₯Ό νλ‘ νΈμλμ μ μ©νμ¬ μ»΄ν¬λνΈλ³ propstype λ° graphql APIμμ λΉ λ₯Έ λλ²κΉ κ³Ό νμ μ μμ μ±μ μΆκ΅¬
- Github flowλ₯Ό λμ νμ¬ ν νλ‘μ νΈ μ½λκ΄λ¦¬λ₯Ό λ맑μ μ§ν
λ Ένμ
- Apollo Clinetλ₯Ό μ¬μ©νμ¬ GraphQL API νΈμΆ λ° ν΅μ
- ChartJsλ₯Ό νμ©ν λ°μ΄ν° μκ°ν
- μ»΄ν¬λνΈ μ¬μ¬μ©μ± μ¦μ§μ μν μ»΄ν¬λνΈ κ³΅ν΅ν
- Styled-componentsμ Themeproviderμ νμ©ν κ³΅ν΅ μ€νμΌ μμ± κ΄λ¦¬
- λμμΈ QA λ° μμ
μ€μ§μ
- μ 체μ λμμΈ : νΌκ·Έλ§ μμ± λ° Styled-Componentλ₯Ό μ΄μ©νμ¬ μ 체μ λμμΈ κ΅¬μ±
- λ μ μ ν ν μ€νΈ νμ΄μ§ : μ ν ν μ€νΈ μ€κ³ λ° μ νλ³ μ€λͺ κΈ°ν λ° useStateλ₯Ό μ΄μ©νμ¬ μ νν μ€νΈ νλ©΄ ꡬν
- λ μ μ ν ν μ€νΈ κ²°κ³Ό νμ΄μ§ : ν΄λΉνλ λ μ μ νκ³Ό λμ μ λ§λ μ ν, κ°μ₯ λ§μ μ ν λ± κ΅¬ν
- μ 체 μ ν 보기 : κ° μ νλ³ κ²°κ³Ό λͺ¨λ¬λ‘ νμΈ κ°λ₯νλλ‘ κ΅¬ν
- μΉ΄μΉ΄μ€ν‘ APIλ₯Ό νμ©ν 곡μ νκΈ° κΈ°λ₯ ꡬν
- μ·¨ν₯ λΆμ κ²°κ³Ό νμ΄μ§ : μ νλ³ λ μ λ§μΆ€ μΆμ² μΉν° 리μ€νΈ ꡬν λ° Api μ°κ²°
κΆμ±μ
- Java λ° Springbootλ₯Ό νμ©ν GraphQL API ꡬν
- Docker λ° Jenkinsλ₯Ό νμ©ν CI/CD ꡬμΆ
- AWS EC2 λ° Nginx μλ² κ΄λ¦¬
- python λ°μ΄ν° μμ§ λ° μ μ²λ¦¬
- MySQL DB μ€κ³
- ν¬ν λ©λ΄μΌ λ¬Έμν
κΉμ§νΈ
- BeautifulSoup, Selenium λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©ν μΉν° λ°μ΄ν° μλ ν¬λ‘€λ§
- Djangoμ Pandas, Cosine λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©ν μΉν° μΆμ² μκ³ λ¦¬μ¦ κ΅¬μΆ
- Djangoμμ Graphqlμ νμ©ν API μ€κ³
μ μ£Όμ
- κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ₯Ό μ€κ³νκ³ κ΄λ¦¬
- ν¬λ‘€λ§ν λ°μ΄ν°λ₯Ό νμ΄μ¬μ μ΄μ©ν΄ μ μ²λ¦¬
- μ μ²λ¦¬ν λ°μ΄ν°λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯
- notion, google Driveλ₯Ό νμ©ν΄μ μ°μΆλ¬Ό μ 리
μΉν°μ μ’μνλ μ¬λλ€μκ² ν΅ν©μ μΌλ‘ μΉν°μ μΆμ²ν΄μ€λ§ν μ¬μ΄νΈκ° νμνλ€. λν μΉν° μ¬μ΄νΈ, μλ₯Όλ€μ΄ λ€μ΄λ² μΉν°μ΄λ μΉ΄μΉ΄μ€ νμ΄μ§, κ°μ κ³³μμλ κ°μ νλ«νΌμ μΉν°λ§μ μΆμ²ν΄μ€ λΏμ΄μλ€. μ΄λ₯Ό ν΄κ²°νκΈ°μν΄ ToonBTIλ₯Ό κΈ°ννμλ€.
μΉν° μΆμ² μλΉμ€λ
- μΉν°μ μΆμ² μλΉμ€λ‘ μ¬λλ€μ λ¬Άμ΄λμ μ μλ€. (μ체 μ½ν μΈ κ° μμΌλ)
- λ€μ΄λ² μΉν° λ° μΉ΄μΉ΄μ€ νμ΄μ§ λ΄μ μ체μ μΈ μΉν° μΆμ² μλΉμ€κ° μλ€.
TooNBTI μλΉμ€λ₯Ό μκ°νλ€.
- μ¬μ©μλ€μ λ¬Άμ΄λμ ν¬μΈνΈ -> κ²μμ± + 곡μ
- μ체 μΉν° μΆμ² -> μ체 μ€λ¬Έμ‘°μ¬λ₯Ό ν΅ν΄ λΉ λ°μ΄ν°λ‘ λμκ² λ§λ μΉν° μΆμ²
-
μΉν° λ μ μ ν ν μ€νΈ
- μ€λ¬Έμ‘°μ¬ -> λ μ μ ν
- Light / Heavy
- Strong / Weak
- Romance / Event
- Alone / Together
-
μΉν° μ·¨ν₯ λΆμ μλΉμ€
- μ¬λ°κ² μ½μ μΉν° μ ν -> μ νλ μΉν° κΈ°λ° μ·¨ν₯ λΆμ -> μ·¨ν₯μ λ§λ μΉν° μΆμ²
1οΈ. μΉν° λ μ μ ν κ²μ¬
- μΈλΆνλ 16κ°μ§ μ ν μ€ μμ μ μ νμ μ μ μμ΅λλ€.
- μ νλ³ μ νΈ μΉν°μ μΆμ²ν©λλ€
- μ¬μ©μ κΈ°λ° μΆμ² μκ³ λ¦¬μ¦μΌλ‘ λ°μ΄ν° μκ³Ό λΉλ‘ν΄μ μ§ μ’μ μΆμ²μ΄ κ°λ₯ν©λλ€
2οΈ. μΉν° μ·¨ν₯ λΆμ κ²μ¬
- μ¬μ©μκ° μ½μ μΉν°μ λΆμν΄ μΉν°μ μΆμ²ν©λλ€
- μΉν°μ μ ννλ©΄ λΉμ·ν μνλ€λ‘ 리μ€νΈ μ λ°μ΄νΈλμ΄ κΈ°μ΅νμ§ λͺ»ν μΉν°κΉμ§ μ λ ₯ν μ μμ΅λλ€
- μκ°, μνλͺ μΌλ‘ ν€μλ κ²μμ΄ κ°λ₯ν©λλ€
3οΈ. 곡μ νκΈ°
- κ²μ¬ κ²°κ³Όλ₯Ό μΉ΄μΉ΄μ€ν‘μ΄λ λ§ν¬λ‘ 곡μ ν μ μμ΅λλ€
- λͺ©μ°¨
- μμ νμ΄μ§ λ° λ μ μ ν ν μ€νΈ νμ΄μ§
- λ μ μ ν κ²°κ³Ό νμ΄μ§
- μ 체 μ ν μμ νμ΄μ§
- 곡μ νκΈ° κΈ°λ₯
- μΉν° μ·¨ν₯ λΆμ ν μ€νΈ - μν μ ν λ° μΆκ°
- μΉν° μ·¨ν₯ λΆμ ν μ€νΈ - κ²μμ ν΅ν μ ν
- μΉν° μ·¨ν₯ λΆμ ν μ€νΈ - 무ν μ€ν¬λ‘€ κΈ°λ₯
- μ·¨ν₯ λΆμ κ²°κ³Ό νμ΄μ§
- μμ νμ΄μ§ λ° λ μ μ ν ν μ€νΈ νμ΄μ§
- λ μ μ ν κ²°κ³Ό νμ΄μ§
- μ 체 μ ν μμ νμ΄μ§
-
κ° μ νμ λλ₯΄λ©΄ λͺ¨λ¬μ°½μ ν΅ν΄ μ νλ³ μ€λͺ μΆκ° νμΈ
-
κ°λ₯ κ°μ₯ λ§μ΄ λμ¨ μ νμμΌλ‘ λ°°μ΄
-
λ μ μ ν κΈ°μ€ μ€λͺ
- 곡μ νκΈ° κΈ°λ₯
-
μ’μΈ‘ URL λ²νΌ ν΄λ¦ μ ν΄λ¦½λ³΄λμ ν΄λΉ κ²°κ³Ό νμ΄μ§ URL 볡μ¬λ‘ μ§μ 곡μ κ°λ₯
-
μ°μΈ‘ μΉ΄μΉ΄μ€ν‘ 곡μ νκΈ° λ²νΌ ν΄λ¦ μ μΉ΄μΉ΄μ€ν‘ API μ°κ²°μ ν΅ν΄ 곡μ νκΈ° μ€ν
- μΉν° μ·¨ν₯ λΆμ ν μ€νΈ - μν μ ν λ° μΆκ°
-
미리 λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ μΉν°λ€μ μ 체 μ μ μκ² μ νΈλκ° λμλ μμΌλ‘ λ ΈμΆ
-
μμ μ΄ μ¬λ―Έμκ² λ΄€λ μΉν°μ ν΄λ¦ μ κ·Έμ κ΄λ ¨λ μ₯λ₯΄μ μνμ΄ μ΅λ 3κ°κΉμ§ λͺ©λ‘μ μΆκ°λ¨
- μΉν° μ·¨ν₯ λΆμ ν μ€νΈ - κ²μμ ν΅ν μ ν
-
μνλ μνμ΄ λ¦¬μ€νΈμμ μ°ΎκΈ° μ΄λ €μΈ κ²½μ° μμ κ²μμ°½μ ν΅ν΄ μνλͺ κ³Ό μκ°λͺ μΌλ‘ κ²μμ΄ κ°λ₯ν¨
- μΉν° μ·¨ν₯ λΆμ ν μ€νΈ - 무ν μ€ν¬λ‘€ κΈ°λ₯
-
μ΄κΈ° μ£Όμ΄μ§ μΉν° 리μ€νΈκ° λκΉμ§ λλ¬λμμ λ, μΆκ°μ μΌλ‘ 리μ€νΈλ₯Ό νΈμΆνμ¬ μΆκ°
- μ·¨ν₯ λΆμ κ²°κ³Ό νμ΄μ§
-
μμμ μ νλ μΉν°λ€μ κΈ°λ°μΌλ‘ μ·¨ν₯μ λΆμν΄μ£Όλ νμ΄μ§
-
μ½μλ€κ³ 체ν¬ν μΉν°μ μλ₯Ό κΈ°μ€μΌλ‘ μμ λͺ %μΈμ§ νμΈ
-
μ νΈ νλ«νΌ, μ₯λ₯΄, μκ²°μ μ νΈ μ¬λΆ λ±μ μμ½νμ¬ μΆλ ₯
-
λμΌ μ νμ λ μλ€μ΄ μ’μνλ μνμ μκ²°μ, λ―Έμκ²°μμΌλ‘ λλμ΄ μΆμ²
-
μ¬μ©μκ° μ¦κ²¨λ³΄λ ν€μλ λΆμ λ° ν΄λΉ ν€μλλ₯Ό ν΅ν μΆμ²μ νμΈ κ°λ₯
-
μ¬μ©μκ° μ νΈν μ₯λ₯΄μ λν μκ° μΆμ²
- λ°±μλ κΈ°ν API 24 κ° μ€ 18κ° μλ£ (75%)
- νλ‘ νΈμλ κΈ°ν κΈ°λ₯ 46κ° μ€ 32κ° μλ£ (70%)
- κΆμ±μ: λλ©μΈ λ΄μμ μ£Όμ λ₯Ό μ νλ κ²μ΄ μ΄λ €μ κΈ°νμ μκ°μ λ§μ΄ μμκ³ , μ΄λ‘ μΈν΄ κ°λ° μκ°μ΄ λΆμ‘±νλ€. λν νμμ μλ μ°¨μ΄λ‘ μμ λΆλ°°μ μ΄λ €μμ΄ μμλ€. νμ§λ§ νμλ€μ κΊΎμ΄μ§ μλ λ§μκ³Ό μ½μΉλλ€μ μ΄μ μ μΈ λμμΌλ‘ νλ‘μ νΈλ₯Ό μ±κ³΅μ μΌλ‘ μλ£ν μ μμλ€.
- κΉμ§νΈ: ν μμ¬κ²°μ λ°©μμ μ¬κ³ ν΄ λ³Ό μ μλ μ’μ κ²½νμ΄μλ€. μ΄μ μ μΈ ν μκ° μ΄λ£¨μ΄μ§λ€νλλΌλ μμμ κ²°μ κΆμκ° μμ΄μΌ λΉ λ₯Έ νλ‘μ νΈ μ§νμ΄ κ°λ₯νλ€λ κ²μ λ°°μ λ€.
- μ μ£Όμ: νλ‘μ νΈ κΈ°κ°μ μ λ° κ°κΉμ΄ κΈ°νμ ν¬μνκ³ λ¨μ μκ° μμ κ°λ°νλ€ λ³΄λ κΈ°ν κ·Έλλ‘ κ΅¬ννκΈ° μ΄λ €μ μ΅λλ€. νμ§λ§ νμλ€κ³Ό μΌμ¬λ체 μλΆμμ‘°νμ¬ νλ‘μ νΈλ₯Ό λλ§μΉ μ μμμ΅λλ€.
- λ Ένμ : κΈ°νμ μ€μμ±μ λ€μ νλ² λμκΈΈ μ μμλ€. μλΉμ€μ λ°©ν₯μ΄λ μμ΄λμ΄λ₯Ό λ μμ μ μ€λν μ μλλ° μ¬μ©μλ₯Ό μ€λνλ κ²μ λΆκ°λ₯ν κ²μ΄λ€. μ¬μ©μκ° μ μ΄ μλΉμ€λ₯Ό μ΄μ©ν κΉλ₯Ό λ¨Όμ μκ°ν΄λ³΄μμΌκ² λ€.
- μ€μ§μ: λΉ λ₯΄κ³ ννν κΈ°ν λ¨κ³μ κΌΌκΌΌν μΌμ κ΄λ¦¬μ μ€μμ±μ λλ μ μμκ³ , μ€κ°μ€κ° λ¨μ μΌμ κ³μ 체ν¬νλ©° μ§νν΄μΌ νλ€λ κ²μ μ μ€ν κΉ¨λ¬μλ€. λ무 λ§μ κ°μμκΈ°μ 무μν μ€λ₯ λ°μμΌλ‘ μ§μ΄ λΉ μ‘μ§λ§ μμ£Όνλ€λ κ²μ΄ λΏλ―νλ€.
- κΉνμ: 6μ£ΌλΌλ κΈ°κ°μ μ ν©ν νλ‘μ νΈ κ·λͺ¨μ λν΄ μ¬κ³ ν μ μμκ³ , μ°μ μμλ₯Ό μ ν΄ κ°λ° μΌμ μ μ‘°μ¨νλ κ²½νμ ν μ μμμ΅λλ€. λ§€μΌ μμΉ¨ μ€ν¬λΌ λ―Έν μΌλ‘ μν΅νλ©° νλ‘μ νΈλ₯Ό λλ§μΉ μ μμμ΅λλ€.