Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

πŸ“Œ Trello

  • ν”„λ‘œμ νŠΈλͺ… : Trello πŸ–₯️
  • ν•œ 쀄 정리 : 업무 ν”„λ‘œμ„ΈμŠ€ 관리
  • λ‚΄μš© : 업무λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ νŒ€μ΄ μž‘μ—…κ³Ό ν”„λ‘œμ„ΈμŠ€λ₯Ό 효율적으둜 관리할 수 있게 도와쀀닀.

πŸŽ“ Tech Stack

  • μ–Έμ–΄ : Java
  • 버전 : JDK17
  • Tools : GitHub, Git
  • IDE : IntelliJ IDEA
  • DB: MySQL 8.0.37
  • Framework : SpringBoot 3.2.5
  • 인증/인가 방식 : JWT

Top Langs

πŸ‘‰ νŒ€μ› μ†Œκ°œ

νŒ€λͺ… : κ°μžλ“€ πŸ₯”

  • νŒ€μž₯ : ${\textsf{\color{green}μ •ν˜„κ²½}}$
  • νŒ€μ›
    • λ¬Έμˆ˜μ •
    • 이민호
    • μ΅œμ§€μ—°

πŸ‘Š μ—­ν•  λΆ„λ‹΄

⌨️ μ •ν˜„κ²½
  • μΉ΄λ“œ 상세 κΈ°λŠ₯(λŒ“κΈ€)
    • λŒ“κΈ€ μž‘μ„±
    • λŒ“κΈ€ 쑰회
πŸ” λ¬Έμˆ˜μ •
  • 컬럼 관리 κΈ°λŠ₯
    • 컬럼 생성
    • 컬럼 μ‚­μ œ
πŸ“” 이민호
  • λ³΄λ“œ 관리 κΈ°λŠ₯
    • λ³΄λ“œ λͺ©λ‘ 쑰회
    • λ³΄λ“œ 생성
    • λ³΄λ“œ μˆ˜μ •
    • λ³΄λ“œ μ‚­μ œ
    • λ³΄λ“œ μ΄ˆλŒ€
πŸƒ μ΅œμ§€μ—°
  • μΉ΄λ“œ 관리 κΈ°λŠ₯
    • μΉ΄λ“œ λͺ©λ‘ 쑰회
    • μΉ΄λ“œ 생성
    • μΉ΄λ“œ μˆ˜μ •
    • μΉ΄λ“œ μ‚­μ œ
πŸ™ 곡톡 κ΅¬ν˜„ - μ‚¬μš©μž κΈ°λŠ₯ : 둜그인, 둜그 아웃, νšŒμ› κ°€μž…
- Entity 섀계
- 컬럼, μΉ΄λ“œ μˆœμ„œ 이동(μˆ˜μ •)
- 쿼리 μ΅œμ ν™”
- ν”„λ‘ νŠΈ

🎬 ν”„λ‘œμ νŠΈ μ†Œκ°œ

κΈ°λŠ₯ μ†Œκ°œ

πŸ” μ‚¬μš©μž κΈ°λŠ₯
  • 둜그인
    • νšŒμ› κ°€μž…λœ μ‚¬μš©μžλΌλ©΄ emailκ³Ό passwordλ₯Ό μ‚¬μš©ν•΄ 둜그인 κ°€λŠ₯
    • header에 토큰을 μΆ”κ°€ν•΄ λ‘œκ·ΈμΈμ— μ„±κ³΅ν•˜λ©΄ 성곡 μƒνƒœμ½”λ“œ λ©”μ„Έμ§€ λ°˜ν™˜
    • μœ νš¨ν•˜μ§€ μ•Šμ€ μ‚¬μš©μž μ €μ˜€λ‘œ λ‘œκ·ΈμΈμ„ μ‹œλ„ν•œ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
    • emailκ³Ό passwordκ°€ μΌμΉ˜ν•˜μ§€ μ•Šμ€ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • 둜그 아웃
    • λ‘œκ·Έμ•„μ›ƒ μ‹œ, λ°œμƒν•œ 토큰 μ΄ˆκΈ°ν™”
    • λ‘œκ·Έμ•„μ›ƒ ν›„ μ΄ˆκΈ°ν™”λœ Refresh Token μž¬μ‚¬μš© λΆˆκ°€
  • νšŒμ›κ°€μž…
    • μ€‘λ³΅λœ email이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 성곡 λ©”μ„Έμ§€ λ°˜ν™˜
    • κΆŒν•œ
      • Manager : λ³΄λ“œ 관계 없이 μΉ΄λ“œ 전체 쑰회
      • User
        • λ³΄λ“œ, 컬럼, μΉ΄λ“œ 쑰회 κ°€λŠ₯
        • μΉ΄λ“œ -> 본인이 μƒμ„±ν•œ ν•­λͺ©μ— λŒ€ν•΄μ„œλ§Œ κΆŒν•œ 쑴재
        • λ³΄λ“œ -> 초재 받은 λͺ¨λ“  λ³΄λ“œμ—μ„œ μƒμ„±λœ μΉ΄λ“œ 전체 쑰회
      • μ€‘λ³΅λœ email이 μ‘΄μž¬ν•˜κ±°λ‚˜ email, password 쑰건에 λ§žμ§€ μ•Šμ€ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
πŸ“‘ λ³΄λ“œ 관리 κΈ°λŠ₯
  • λ³΄λ“œ λͺ©λ‘ 쑰회
    • μƒμ„±λœ λ³΄λ“œ 쑰회 κ°€λŠ₯
  • λ³΄λ“œ 생성
    • λ³΄λ“œ 이름, ν•œ 쀄 μ„€λͺ… ν•„μˆ˜ 데이터가 μžˆλ‹€λ©΄ 생성 κ°€λŠ₯
    • κΆŒν•œμ— λ§žμ§€ μ•ŠλŠ” μ‚¬μš©μžκ°€ 생성을 μ‹œλ„ν•˜κ±°λ‚˜ ν•„μˆ˜ 데이터가 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • λ³΄λ“œ μˆ˜μ •
    • λ³΄λ“œ 이름, ν•œ 쀄 μ„€λͺ… ν•„μˆ˜ 데이터 μˆ˜μ • κ°€λŠ₯
    • κΆŒν•œμ— λ§žμ§€ μ•ŠλŠ” μ‚¬μš©μžκ°€ 생성을 μ‹œλ„ν•˜κ±°λ‚˜ ν•„μˆ˜ 데이터가 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • λ³΄λ“œ μ‚­μ œ
    • λ³΄λ“œ μ‚­μ œ κ°€λŠ₯
    • κΆŒν•œμ— λ§žμ§€ μ•ŠλŠ” μ‚¬μš©μžκ°€ μ‚­μ œλ₯Ό μ‹œλ„ν•˜κ±°λ‚˜ 이미 μ‚­μ œλœ λ³΄λ“œμΈ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • λ³΄λ“œ μ΄ˆλŒ€
    • λ³΄λ“œμ— μ‚¬μš©μž μ΄ˆλŒ€ κ°€λŠ₯
    • MANAGER κΆŒν•œμ„ κ°€μ§€κ³  μžˆλŠ” μ‚¬μš©μžλŠ” 본인이 μƒμ„±ν•œ λ³΄λ“œ ν˜Ήμ€ μ΄ˆλŒ€λ°›μ€ λ³΄λ“œμ— λŒ€ν•΄μ„œ λ‹€λ₯Έ μ‚¬μš©μžλ₯Ό μ΄ˆλŒ€ν•  κΆŒν•œμ„ κ°€μ§ˆ 수 있음 κΆŒν•œμ— λ§žμ§€ μ•ŠλŠ” μ‚¬μš©μžκ°€ μ΄ˆλŒ€λ₯Ό μ‹œλ„ν•˜κ±°λ‚˜, 이미 ν•΄λ‹Ή λ³΄λ“œμ— μ΄ˆλŒ€λœ μ‚¬μš©μžμΈ 경우, μ‘°λ‚΄ν•˜μ§€ μ•Šμ€ μ‚¬μš©μžμΈ 경우 λ©”μ„Έμ§€ λ°˜ν™˜
πŸ”– 컬럼 관리 κΈ°λŠ₯
  • 컬럼 생성
    • λ³΄λ“œμ— 컬럼 생성 κ°€λŠ₯
    • μƒνƒœ 이름 ν•„μˆ˜ 데이터가 μ‘΄μž¬ν•΄μ•Ό 함
    • κΆŒν•œμ— λ§žμ§€ μ•ŠλŠ” μ‚¬μš©μžκ°€ 생성을 μ‹œλ„ν•˜κ±°λ‚˜ 이미 μ‘΄μž¬ν•˜λŠ” μƒνƒœμ΄λ¦„μœΌλ‘œ μƒμ„±ν•˜λŠ” 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • 컬럼 μ‚­μ œ
    • λ³΄λ“œμ— μƒμ„±ν•œ 컬럼 μ‚­μ œ κ°€λŠ₯
    • μ‚­μ œν•  λ•Œ 확인 λ©”μ„Έμ§€ 좜λ ₯
    • κΆŒν•œμ— λ§žμ§€ μ•ŠλŠ” μ‚¬μš©μžκ°€ 생성을 μ‹œλ„ν•˜κ±°λ‚˜ 이미 μ‚­μ œλœ 컬림인 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • 컬럼 μˆœμ„œ 이동
    • 컬럼 μˆœμ„œλ₯Ό 자유둭게 λ³€κ²½ κ°€λŠ₯
    • μƒˆλ‘œκ³ μΉ¨ 후에도 λ³€κ²½ν•œ μˆœμ„œ μœ μ§€
    • κΆŒν•œμ— λ§žμ§€ μ•ŠλŠ” μ‚¬μš©μžκ°€ 생성을 μ‹œλ„ν•˜λŠ” 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
πŸ’³ μΉ΄λ“œ 관리 κΈ°λŠ₯
  • μΉ΄λ“œ λͺ©λ‘ 쑰회
    • μƒμ„±λœ μΉ΄λ“œλ“€μ„ λͺ©λ‘μ—μ„œ 쑰회 κ°€λŠ₯
    • 쑰건
      • 전체 쑰회
      • μž‘μ—…μžλ³„ 쑰회
      • μƒνƒœλ³„ 쑰회
  • μΉ΄λ“œ 생성
    • μ»¬λŸΌμ— μΉ΄λ“œ 생성 κ°€λŠ₯
    • 제λͺ©, μΉ΄λ“œ μƒνƒœ ν•„μˆ˜ 데이터가 μžˆλ‹€λ©΄ 생성 κ°€λŠ₯
    • λ‚΄μš©, 마감일자, μž‘μ—…μžλŠ” ν•„μˆ˜ 데이터 X
    • ν•„μˆ˜ 데이터가 μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜ 이미 컬럼이 μ‚­μ œλœ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • μΉ΄λ“œ μˆ˜μ •
    • λ‚΄μš©, 마감일자, μž‘μ—…μž, 제λͺ© μˆ˜μ • κ°€λŠ₯
    • μˆœμ„œ 이동을 톡해 μΉ΄λ“œ μƒνƒœ λ³€κ²½ κ°€λŠ₯
    • λ‘œκ·ΈμΈμ„ ν•˜μ§€ μ•Šμ€ μ‚¬μš©μžκ°€ μˆœμ„œ 이동을 μ‹œλ™ν•˜κ±°λ‚˜ 이미 컬럼이 μ‚­μ œλœ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • μΉ΄λ“œ μ‚­μ œ
    • μ»¬λŸΌμ— μƒμ„±ν•œ μΉ΄λ“œ μ‚­μ œ κ°€λŠ₯
    • μ‚­μ œν•  λŒ€ 확인 λ©”μ„Έμ§€ 좜λ ₯
    • λ‘œκ·ΈμΈμ„ ν•˜μ§€ μ•Šμ€ μ‚¬μš©μžκ°€ μˆœμ„œ 이동을 μ‹œλ™ν•˜κ±°λ‚˜ 이미 컬럼이 μ‚­μ œλœ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
πŸ–‹οΈ μΉ΄λ“œ 상세 κΈ°λŠ₯
  • λŒ“κΈ€ μž‘μ„±
    • μΉ΄λ“œ 상세에 λŒ“κΈ€ μž‘μ„± κ°€λŠ₯
    • λ‚΄μš© ν•„μˆ˜ 데이터가 μžˆλ‹€λ©΄ 생성 κ°€λŠ₯
    • λ‘œκ·ΈμΈμ„ ν•˜μ§€ μ•Šμ€ μ‚¬μš©μžκ°€ μˆœμ„œ 이동을 μ‹œλ™ν•˜κ±°λ‚˜ 이미 컬럼이 μ‚­μ œλœ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜
  • λŒ“κΈ€ 쑰회
    • μΉ΄λ“œ 상세에 μž‘μ„±ν•œ λŒ“κΈ€λ“€μ„ λ³Ό 수 있음
    • μž‘μ„±μΌμž μ΅œμ‹ μˆœμœΌλ‘œ μ •λ ¬
    • λ‘œκ·ΈμΈμ„ ν•˜μ§€ μ•Šμ€ μ‚¬μš©μžκ°€ μˆœμ„œ 이동을 μ‹œλ™ν•˜κ±°λ‚˜ 이미 컬럼이 μ‚­μ œλœ 경우 μ—λŸ¬ λ©”μ„Έμ§€ λ°˜ν™˜

πŸ“’ Github Rules & Code Convention

βš–οΈ Github Rules
  • 브랜치 이름 κ·œμΉ™
    • dev 브랜치, 각자 개발 κΈ°λŠ₯ κ΅¬ν˜„ feat/(κΈ°λŠ₯이름) 브랜치
    • 두가지 단어라면 β€˜ - ’ (ν•˜μ΄ν”ˆ) μ‚¬μš©ν•΄μ„œ ꡬ뢄
    • feat/signup, feat/order-create
  • 컀밋 λ©”μ‹œμ§€ κ·œμΉ™
[#이슈번호] feat κ΅¬ν˜„ λ‚΄μš©
(ν•œμ€„ λΉ„μš°κΈ°)
- μΆ”κ°€ λ‚΄μš©
- μΆ”κ°€ λ‚΄μš©
  • 이슈 μž‘μ„± κ·œμΉ™
  • 이슈 μ‚¬μš©
    • title : [Feat] 이슈λͺ…
    • content:
- [] κΈ°λŠ₯ κ΅¬ν˜„ λ‚΄μš©
- [x] κΈ°λŠ₯ κ΅¬ν˜„ λ‚΄μš©2
  • PR μž‘μ„± κ·œμΉ™
    • 제λͺ©
      • [ν˜„μž¬λ‚ μ§œ] κΈ°λŠ₯λͺ…
      • ex) [2024εΉ΄07月10ζ—₯] 둜그인
    • λ‚΄μš©
      • κ°„λ‹¨ν•œ μ„€λͺ…, νŠΉμ΄μ‚¬ν•­ μž‘μ„± ν•„μˆ˜
      • ex) 둜그인 κΈ°λŠ₯ κ΅¬ν˜„, jwt secretκ΄€λ ¨ ν™˜κ²½λ³€μˆ˜ μΆ”κ°€
  • μ½”λ“œλ¦¬λ·° 적용 (κ²ΉμΉ˜λŠ” 뢀뢄은 ν•΄λ‹Ή λ‹΄λ‹Ήμžμ—κ²Œ 리뷰 λ°›κΈ° ν•„μˆ˜)
πŸ”‘ Code Convention

넀이밍 κ·œμΉ™(Naming Conventions)

  • 클래슀(Class) : λŒ€λ¬Έμž 카멜 μΌ€μ΄μŠ€ ( 예 : MyClass )
  • λ©”μ†Œλ“œ(Method) : μ†Œλ¬Έμž 카멜 μΌ€μ΄μŠ€ ( 예 : myMethod() )
  • λ³€μˆ˜(Variable) : μ†Œλ¬Έμž 카멜 μΌ€μ΄μŠ€ ( 예 : myVariable )
  • νŒ¨ν‚€μ§€(Package) : μ†Œλ¬Έμžλ§Œ μ‚¬μš©ν•˜λ©°, ν•„μš”μ‹œ 점(.)으둜 계측 ꡬ뢄( 예 : com.example.project)

πŸ“± 와이어 ν”„λ ˆμž„

image

πŸ“‘ API λͺ…μ„Έμ„œ

API λͺ…μ„Έμ„œ
  • μ‚¬μš©μž κΈ°λŠ₯
image
  • λ³΄λ“œ 관리 κΈ°λŠ₯
image image
  • 컬럼 관리 κΈ°λŠ₯
image
  • μΉ΄λ“œ 관리 κΈ°λŠ₯
image image
  • μΉ΄λ“œ 상세 κΈ°λŠ₯
image

πŸ“ˆ ERD λ‹€μ΄μ–΄κ·Έλž¨

image

πŸ”Š νŠΈλŸ¬λΈ” μŠˆνŒ…

πŸ˜΅β€πŸ’« 쿼리 μ΅œμ ν™”λ₯Ό μœ„ν•΄ 더미 데이터 μ‚½μž… μ‹œ μ„±λŠ₯ 이슈 😱
  • 문제

    • Bulk Insertλ₯Ό μ‚¬μš©ν•˜μ—¬ 10만건 생성 μ‹œ 12 뢄이 μ†Œμš”
  • ν•΄κ²° 방법

    • μŠ€λ ˆλ“œλ₯Ό μ΄μš©ν•˜μ—¬ 병렬 처리

=> 10만건 데이터λ₯Ό μƒμ„±ν•˜λŠ”λ° 12뢄이 μ†Œμš” 됐던 λ¬Έμ œκ°€ 1λΆ„ 47초 λ§Œμ— μ™„λ£Œ πŸŽ‰

🀯 쿼리 μ΅œμ ν™”λ₯Ό μœ„ν•œ λ…Έλ ₯ 😒
  • 해결을 μœ„ν•œ λ…Έλ ₯ & 문제

    • fetch join μ‚¬μš©
      • MultipleBagFetchException 의 cannot simultaneously fetch multiple bags μ—λŸ¬λ°œμƒ
      • ν•΄λ‹Ή μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜κΈ°μœ„ν•΄ Set으둜 λ³€κ²½ν•΄μ£Όμ—ˆμœΌλ‚˜ κ²°κ΅­ 근본적인 문제인 1:N νŽ˜μ΄μ§• 문제 ν•΄κ²° λΆˆκ°€
    • queryDSL을 μ‚¬μš©ν•œ fetch join μž‘μ„±
    • QueryDSL을 μ΄μš©ν•˜μ—¬ fetch join 및 μž‘μ„± 및 νŽ˜μ΄μ§• μ‹œλ„
  • ν•΄κ²° 방법

    • 쿼리 뢄리 => fetch 쑰인으둜 해결이 λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ, 3개의 쿼리둜 λΆ„λ¦¬ν•˜μ—¬ 쑰회 πŸŽ†

πŸ““ 회고

μ’‹μ•˜λ˜ 점 🎢
μ•„μ‰¬μš΄ 점 🩹

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /