Skip to content

πŸ“‘ AR기반 둀링페이퍼 μ„œλΉ„μŠ€

Notifications You must be signed in to change notification settings

six-star-104/pawly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Pawly

image (4)

SSAFY 자율 PJT


πŸ—“οΈν”„λ‘œμ νŠΈ μ§„ν–‰ κΈ°κ°„

2024-10-14 ~ 2024-11-19 (μ•½ 6μ£Ό)


πŸ“‘μ£Όμ œ

AR기반 둀링페이퍼 μ„œλΉ„μŠ€


πŸ“½οΈβ€Š UCC

Watch the video


β€οΈβ€Š νŒ€μ› μ†Œκ°œ

image


πŸŽβ€Š ν”„λ‘œμ νŠΈ 기획

πŸŽ‰β€Š 기획 λ°°κ²½

자율 ν”„λ‘œμ νŠΈλŠ” 3번의 ν”„λ‘œμ νŠΈ 쀑 λ§ˆμ§€λ§‰μ΄λ©΄μ„œ, 2ν•™κΈ°λΏλ§Œ μ•„λ‹ˆλΌ μ‹Έν”Ό(SSAFY) 1λ…„ κ³Όμ •μ˜ λ§ˆμ§€λ§‰μ΄κΈ°λ„ ν•©λ‹ˆλ‹€. 슀슀둜λ₯Ό λŒμ•„λ³΄κ³ , ν•¨κ»˜ ν–ˆλ˜ λ™λ£Œλ“€μ—κ²Œλ„ 인사말과 ν•¨κ»˜ μ„œλ‘œλ₯Ό μΆ”μ–΅ν–ˆμœΌλ©΄ μ’‹κ² λ‹€λŠ” 생각을 ν–ˆμŠ΅λ‹ˆλ‹€.

image


πŸ‘Šβ€Š μ£Όμš” κΈ°λŠ₯

image image image image image image image


πŸ–₯οΈβ€Š μ„œλΉ„μŠ€ ν™”λ©΄

νšŒμ›κ°€μž…

νšŒμ›κ°€μž…

메인화면

메인화면

μΉœκ΅¬κ²€μƒ‰ & μ‹ μ²­

μΉœκ΅¬κ²€μƒ‰ & μ‹ μ²­

친ꡬ

친ꡬ

ARμš°μ²΄ν†΅

ARμš°μ²΄ν†΅

둀링페이퍼 μž‘μ„±

둀링페이퍼 μž‘μ„±

νŽΈμ§€μ“°κΈ°

νŽΈμ§€μ“°κΈ°

νŽΈμ§€ν•¨

νŽΈμ§€ν•¨

λ§ˆμ΄νŽ˜μ΄μ§€

λ§ˆμ΄νŽ˜μ΄μ§€

도감

도감

λ„μ „κ³Όμ œ

λ„μ „κ³Όμ œ

κ΄€λ¦¬μžνŽ˜μ΄μ§€

κ΄€λ¦¬μžνŽ˜μ΄μ§€


πŸ§±β€Šμ„€κ³„

πŸ§­β€ŠERD

image


πŸ§Άβ€ŠAPI

νšŒμ›κ΄€λ¦¬

API image 1


친ꡬ, κ΄€λ¦¬μž, 검색

API image 2


μš°μ²΄ν†΅, 둀링페이퍼, ν¬μŠ€νŠΈμž‡

API image 3


νŽΈμ§€

API image 4


μ΄μŠ€ν„°μ—κ·Έ, 도감, μ•Œλ¦Ό

API image 5


κΈ°μˆ μŠ€νƒ

image


πŸ§³β€Šμ»¨λ²€μ…˜

κΉƒλž© 컀밋 & 이슈 μ‚¬μš©

라벨

  • ✨ Feat : μƒˆλ‘œμš΄ κΈ°λŠ₯의 개발
  • πŸ”§ Fix : bug fix, refactoring
  • πŸ“ Chore : κ°œλ°œν™˜κ²½ μ„ΈνŒ…, λ¬Έμ„œ μž‘μ„±, 배포 이슈
  • πŸ“£ Merge : branch merge, pull request
  • πŸ™ Request : FE ν˜Ήμ€ BE νŒ€μ—κ²Œ μš”μ²­ν•  λ‚΄μš©, κΈ‰ν•œ 버그 사항 등둝

이슈 μ»¨λ²€μ…˜

  • 이슈 λ‹¨μœ„λŠ” λ„ˆλ¬΄ 크지 μ•Šκ³  μ λ‹Ήν•˜κ²Œ

이슈 제λͺ© μž‘μ„± κ·œμΉ™

[FE or BE/라벨 μ’…λ₯˜(이λͺ¨μ§€ 없이)] μ•Œμ•„λ³΄κΈ° μ‰½κ²Œ 제λͺ© μž‘μ„±

ex) [FE/Feat] 포슀트 μ—…λ‘œλ“œ λ²„νŠΌ λ””μžμΈ
  • label μ„€μ •
  • assigneess μ„€μ •

이슈 ν…œν”Œλ¦Ώ

## πŸ“” Description

<!-- μ™œ 이슈λ₯Ό μ—΄μ—ˆλŠ”κ°€ -->

## 🐈 Todo

<!-- 무엇을 ν•  것인가λ₯Ό μ²΄ν¬λ°•μŠ€λ‘œ λ§Œλ“€κ³  μž‘μ—…μ΄ 끝날 λ•Œλ§ˆλ‹€ μ²΄ν¬ν•˜λ©΄μ„œ μ§„ν–‰ -->

- [ ] todo1

etc…

  • 이슈λ₯Ό μžλ™μœΌλ‘œ λ‹«κΈ° μœ„ν•΄μ„œλŠ” close ν‚€μ›Œλ“œ μΆ”κ°€
  • 브랜치 생성은 λ°˜λ“œμ‹œ 이슈λ₯Ό 기반으둜 생성

컀밋 μ»¨λ²€μ…˜

컀밋 λ©”μ‹œμ§€ μž‘μ„± κ·œμΉ™

fe & be/컀밋 μ’…λ₯˜: μž‘μ—… μš”μ•½ (ing) -> μž‘μ—…μ΄ 덜 끝났을 λ•Œμ—λ§Œ μ“°μ—μš”

μ£Όμš” λ³€κ²½ λ‚΄μš©1
 - μ£Όμš” λ³€κ²½ λ‚΄μš©1 에 λŒ€ν•œ μ„ΈλΆ€ 사항 // ν•„μˆ˜ μ•„λ‹˜

μ£Όμš” λ³€κ²½ λ‚΄μš©n
 - μ£Όμš” λ³€κ²½ λ‚΄μš©n 에 λŒ€ν•œ μ„ΈλΆ€ 사항
 
#이슈번호

# ----- μ˜ˆμ‹œ ------ #
############################
fe/feat: post upload btn design
 
포슀트 μ—…λ‘œλ“œ λ²„νŠΌ λ””μžμΈ
 - 둜직 λ―Έμ™„μ„±, λ‹¨μˆœ λ””μžμΈ
#3

단, merge request λŠ” μ’€ 닀름

[MR]: #source이슈 번호 -> target 브랜치

ex) [MR]: #10 -> fe 

λ¨Έμ§€ λ¦¬ν€˜μŠ€νŠΈ μ»¨λ²€μ…˜

λ¨Έμ§€ λ¦¬ν€˜μŠ€νŠΈ 제λͺ© μž‘μ„± κ·œμΉ™

[FE or BE/κ΄€λ ¨ 이슈 μ’…λ₯˜(이λͺ¨μ§€ 없이)/#κ΄€λ ¨μ΄μŠˆλ²ˆν˜Έ1, #κ΄€λ ¨μ΄μŠˆλ²ˆν˜Έ2] 제λͺ©

ex) [FE/Feat/#10] 포슀트 μ—…λ‘œλ“œ λ²„νŠΌ λ””μžμΈ
  • reviewer μ„€μ •
    • reviewer λŠ” mr 을 μž‘μ„±ν•˜λŠ” 본인 μ œμ™Έ 파트 νŒ€μ› μ „λΆ€
    • λͺ¨λ‘μ—κ²Œ review λ₯Ό λ°›κ³  μˆ˜μ •μ‚¬ν•­μ΄ ν•„μš”ν•˜λ‹€λ©΄ μˆ˜μ •μ΄ 이루어진 후에야 merge κ°€λŠ₯
  • assigneess μ„€μ •
    • mr 을 μž‘μ„±ν•˜λŠ” 본인 ν˜Ήμ€ ν•΄λ‹Ή μž‘μ—…μ— νˆ¬μž…λœ νŒŒνŠΈμ›λ“€ μ „λΆ€

mr λ‚΄μ—μ„œ merge μˆ˜ν–‰ μ‹œ 컀밋 넀이밍

[MR]: #source이슈 번호 -> target 브랜치 

ex) [MR]: #51 -> be

λ¨Έμ§€ λ¦¬ν€˜μŠ€νŠΈ ν…œν”Œλ¦Ώ

  • λ°˜λ“œμ‹œ μƒμ„Έν•˜κ²Œ μ μ–΄μ£Όμ„Έμš”
  • λ¨Έμ§€ λ¦¬ν€˜μŠ€νŠΈλŠ” 본인이 ν•΄λ‹Ή μ΄μŠˆλ“€μ—μ„œ μž‘μ—…ν–ˆλ˜ λ‚΄μš©λ“€μ„ κΈ°λ‘ν•˜λŠ” κ³΅κ°„μœΌλ‘œ 정리가 μ•ˆλ˜λ©΄ νŒŒνŠΈμ›λ“€μ΄
## πŸ₯₯ Contents

뭐뭐 ν•˜λ„λ‘ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.

code block


<!--
μ½”λ“œ, 개발 κ΄€μ μ—μ„œ μ–΄λ–€κ±Έ κ³ μ³€λŠ”μ§€ μƒμ„Έν•˜κ²Œ
사진같은걸 넣어도 λœλ‹€.
pr λ³΄λŠ” μ‚¬λžŒμ΄ λ”°λ‘œ 정보λ₯Ό μ•ˆ 찾아봐도 되게 μ λŠ”κ²Œ 이상적
-->

## πŸ“Έ Screenshot

<!-- 움지을 λ„£μ–΄μ£ΌλŠ”κ²Œ κ°€μž₯ μ’‹κ³ , μ›¬λ§Œν•˜λ©΄ μš©λŸ‰μ„ μž‘κ²Œ λ§Œλ“ λ‹€. -->

## βš“ Related Issue

<!-- 이슈 번호λ₯Ό 적어주면 되고, close 같은 μžλ™ λ‹«νž˜μ„ λ“±λ‘ν•˜μ—¬λ„ λœλ‹€. -->

## πŸ“š Reference

<!-- μžμ‹ μ΄ μ°Έμ‘°ν•œ μ •λ³΄μ˜ 좜처λ₯Ό μ λŠ”λ‹€. -->

β˜‘οΈΒ λΈŒλžœμΉ˜ 양식


브랜치 μ»¨λ²€μ…˜(GIT FLOW)

- master : μ™„μ„±λ˜μ–΄ 배포, μ„œλΉ„μŠ€ 제곡이 κ°€λŠ₯ν•œ 브랜치
- develop : 개발 사항 톡합 브랜치, 배포λ₯Ό μœ„ν•œ ν…ŒμŠ€νŠΈ μ§„ν–‰ 직전
- feature : 각 κ°œλ°œμžλ“€μ΄ κ°œλ°œμ„ μœ„ν•΄ develop μœΌλ‘œλΆ€ν„° νŒŒμƒμ‹œν‚¨ 브랜치
- release : 도메인 λ‹¨μœ„λ‘œ 개발이 되면 develop μœΌλ‘œλΆ€ν„° νŒŒμƒλ˜μ–΄ ν…ŒμŠ€νŠΈ μ§„ν–‰, λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ ν•΄κ²° ν›„ develop κ³Ό master 둜 흑수
- hotfix : ν…ŒμŠ€νŠΈκ°€ μ™„λ£Œλ˜μ–΄ 배포된 master μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  μ‹œ hotfix 브랜치λ₯Ό μ—΄μ–΄ λΉ λ₯΄κ²Œ μˆ˜μ •
  • 기본적으둜 feature/fe or be:μ λ˜λŒ€λ‘œ-적으면됨 으둜 μ‹œμž‘ν•˜λŠ” λΈŒλžœμΉ˜μ—μ„œ 개발
  • 개발이 마무리되면 develop 브랜치둜 merge request
    • develop 으둜 올리 λ•Œ squash ν•©μ‹œλ‹€
  • νŠΉμ • 개발 λ²”μœ„ λ‹¨μœ„(도메인)둜 개발이 μ™„λ£Œλ˜λ©΄ develop μœΌλ‘œλΆ€ν„° release 브랜치 λ”°μ™€μ„œ ν…ŒμŠ€νŠΈ μ§„ν–‰
  • μˆ˜μ •κ³Ό ν…ŒμŠ€νŠΈκ°€ μ™„λ£Œλ˜λ©΄ develop κ³Ό master 둜
  • master μ—μ„œ μ΅œμ‹ λ³Έ 배포
  • λ§Œμ•½ 배포 μƒν™©μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ hotfix 브랜치λ₯Ό μ—΄μ–΄μ„œ μˆ˜μ •

브랜치 이름 μž‘μ„± κ·œμΉ™

κΈ°μ‘΄ 사항 -> νƒœκ·Έ μ’…λ₯˜(이λͺ¨μ§€ 없이)/이슈 번호-μ†Œλ¬Έμž-μ†Œλ¬Έμž-μ†Œλ¬Έμž...
λ³€κ²½ 사항은 μ•„λž˜ μ˜ˆμ‹œλ‘œ

ex) 
feature - feature/frontend or backend/10-post-upload-button-design
release - release
hotfix - hotfix/13-api-url-fix

πŸ§Άβ€Šκ°œμΈ 회고

김쒅덕

Pawly ν”„λ‘œμ νŠΈλ₯Ό 톡해 Spring Boot와 JPAλ₯Ό μ΄μš©ν•œ λ°±μ—”λ“œ μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•˜λŠ” 데 λ§Žμ€ κ²½ν—˜μ„ μŒ“μ„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 특히, 유기적으둜 μ—°κ²°λ˜μ–΄ μžˆλŠ” ν¬μŠ€νŠΈμž‡, 둀링페이퍼, ν¬μŠ€νŠΈλ°•μŠ€ λ„λ©”μΈμ˜ API 섀계, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 처리, λ°μ΄ν„°λ² μ΄μŠ€ 연동 등을 κ΅¬ν˜„ν•˜λ©΄μ„œ 효율적인 데이터 처리 방식과 μ„±λŠ₯ μ΅œμ ν™”μ— λŒ€ν•΄ 배울 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν¬μŠ€νŠΈλ°•μŠ€ 쑰회 μ‹œ 쿼리가 λ‚˜κ°€λŠ” 수λ₯Ό 쀄이기 μœ„ν•œ 쑰인 방식을 κ³ λ €ν•˜λŠ” λ“± μ΅œμ ν™” μž‘μ—…μ„ κ³ λ―Όν•˜λ©΄μ„œ μ„±λŠ₯ ν–₯상에 κΈ°μ—¬ν•˜λ € λ…Έλ ₯ν–ˆμŠ΅λ‹ˆλ‹€.

이번 κ²½ν—˜μ„ 톡해 효율적이고 μœ μ—°ν•œ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 방법에 λŒ€ν•΄ κ³ λ―Όν•˜κ³  λ°°μš°λŠ” κΈ°νšŒκ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œ κ°„μ˜ μ†Œν†΅μ˜ μ€‘μš”μ„±μ„ κΉ¨λ‹«κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. API λͺ…μ„Έμ„œ μ΅œμ‹ ν™”μ˜ μ€‘μš”μ„±μ„ μΈμ‹ν•˜λ©°, μ†Œν†΅μ„ 톡해 μ–΄λ–€ λ¬Έμ œκ°€ μ–΄λ””μ—μ„œ λ°œμƒν–ˆλŠ”μ§€ λΉ λ₯΄κ²Œ λ°œκ²¬ν•  수 μžˆλ‹€λŠ” 점을 λ°°μ› μŠ΅λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘œμ νŠΈ μ§„ν–‰ 쀑 λ°œμƒν•  수 μžˆλŠ” 문제λ₯Ό 미리 μ˜ˆλ°©ν•˜κ³  ν•΄κ²°ν•˜λŠ” 데 큰 도움이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


μ‹ ν˜œλ―Ό

이 ν”„λ‘œμ νŠΈλŠ” μ‹Έν”Όμ˜ λ§ˆμ§€λ§‰ ν”„λ‘œμ νŠΈλ‘œ, μ§€κΈˆκΉŒμ§€ 배운 지식듀을 λ‹€μ‹œ ν•œλ²ˆ λŒμ•„λ³Ό 수 μžˆλŠ” μ†Œμ€‘ν•œ κΈ°νšŒμ˜€μŠ΅λ‹ˆλ‹€. μ•½ 5μ£ΌλΌλŠ” 짧은 κΈ°κ°„ λ™μ•ˆ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° κΈ°νšλΆ€ν„° κ°œλ°œκΉŒμ§€ λΉ λ₯΄κ²Œ μ§„ν–‰ν•΄μ•Ό ν–ˆκ³ , λ§ˆμ§€λ§‰μ΄λΌλŠ” 생각에 더 쒋은 ν€„λ¦¬ν‹°μ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³ μž μ΅œμ„ μ„ λ‹€ν–ˆμŠ΅λ‹ˆλ‹€. 결과적으둜 ν”„λ‘œμ νŠΈλ₯Ό μ„±κ³΅μ μœΌλ‘œ λ§ˆλ¬΄λ¦¬ν–ˆμœΌλ©°, 짧은 κΈ°κ°„ μ•ˆμ—μ„œλ„ 의미 μžˆλŠ” κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄λ‚Ό 수 μžˆλ‹€λŠ” μžμ‹ κ°μ„ 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

특히, Spring Boot와 JPAλ₯Ό ν™œμš©ν•˜λ©° λ°±μ—”λ“œ 개발 λŠ₯λ ₯을 ν•œμΈ΅ 더 ν–₯μƒμ‹œν‚¬ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 도전 κ³Όμ œμ™€ μ•Œλ¦Ό κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” κ³Όμ •μ—μ„œ μ—¬λŸ¬ 도메인을 ν•˜λ‚˜μ˜ μ½”λ“œ λ‚΄μ—μ„œ 관리해야 ν–ˆκ³ , 이λ₯Ό 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ λ§Žμ€ 고민을 ν–ˆμŠ΅λ‹ˆλ‹€. 이 κ²½ν—˜μ€ 도메인 κ°„μ˜ 관계λ₯Ό λ”μš± λͺ…ν™•νžˆ μ΄ν•΄ν•˜κ³ , 더 λ‚˜μ€ μ½”λ“œ μž‘μ„± 방법을 μ΅νžˆλŠ” 데 큰 도움이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, μ½”λ“œ 뢄리에 λŒ€ν•΄ 깊이 κ³ λ―Όν•˜λ©°, λ©”μ„œλ“œκ°€ ν•˜λ‚˜μ˜ κΈ°λŠ₯만 μˆ˜ν–‰ν•˜λ„λ‘ μ„€κ³„ν•˜λŠ” 데 쀑점을 λ‘μ—ˆμŠ΅λ‹ˆλ‹€. 이전뢀터 μ€‘μš”ν•˜κ²Œ μ—¬κ²Όλ˜ Exception μ²˜λ¦¬λŠ” 이번 ν”„λ‘œμ νŠΈμ—μ„œ 곡톡 응닡 방식을 μ μš©ν•˜μ—¬ μ²΄κ³„μ μœΌλ‘œ 관리할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ™Έμ™€ 리턴을 ꡬ뢄할 λ•ŒλŠ” μ‚¬μš©μž κ²½ν—˜μ„ κ³ λ €ν–ˆμœΌλ©°, μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈμ„ ν•˜μ§€ μ•Šμ€ κ²½μš°μ™€ 같은 μ£Όμš” 상황은 μ˜ˆμ™Έλ‘œ μ²˜λ¦¬ν•˜κ³ , 찾을 수 μ—†λŠ” ID와 같은 세뢀적인 λ¬Έμ œλŠ” λ¦¬ν„΄μœΌλ‘œ μ²˜λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 과정을 톡해 Exception μ²˜λ¦¬μ™€ μ—λŸ¬ 관리에 λŒ€ν•œ 이해도λ₯Ό ν•œμΈ΅ 더 높일 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


λ°•λ―Όμ€€

이번 ν”„λ‘œμ νŠΈλŠ” 처음으둜 CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕뢀터 μ‚¬μš©μž 둜그인 κΈ°λŠ₯κΉŒμ§€ λ‹€μ–‘ν•œ 기술 μŠ€νƒκ³Ό κ°œλ…μ„ 읡히고 이λ₯Ό μ‹€μ œ μ„œλΉ„μŠ€μ— μ μš©ν•œ μ†Œμ€‘ν•œ κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 특히, Spring Security와 JWT 기반 인증 μ‹œμŠ€ν…œ 섀계, 그리고 μ†Œμ…œ 둜그인 κΈ°λŠ₯ 톡합을 톡해 νŽΈλ¦¬ν•˜κ³  μ•ˆμ „ν•œ μ‚¬μš©μž 인증 ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” 데 μ§‘μ€‘ν–ˆμŠ΅λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ 인증 및 λ³΄μ•ˆμ˜ 원리λ₯Ό 깊이 μ΄ν•΄ν•˜κ³ , μ„œλΉ„μŠ€ μš΄μ˜μ— ν•„μš”ν•œ 기술적 감각을 ν‚€μšΈ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

AR 둀링페이퍼 μ„œλΉ„μŠ€μ˜ 핡심 μ•„μ΄λ””μ–΄λŠ” AR κΈ°μˆ μ„ ν™œμš©ν•΄ μ‚¬μš©μž κ°„ μ •μ„œμ  연결을 κ°•ν™”ν•˜κ³ , λ‹¨μˆœ λ©”μ‹œμ§€ κ΅ν™˜ μ΄μƒμ˜ νŠΉλ³„ν•œ κ²½ν—˜μ„ μ œκ³΅ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” AR 기술둜 λ©”μ‹œμ§€κ°€ λ– μ˜€λ₯΄λŠ” 독창적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 둀링페이퍼λ₯Ό μž‘μ„±ν•˜κ³ , 이λ₯Ό 읡λͺ…μœΌλ‘œ μ „λ‹¬ν•˜κ±°λ‚˜ μΉœκ΅¬μ™€ κ΅ν™˜ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›μœΌλ©° κ³ μœ ν•œ 캐릭터λ₯Ό μˆ˜μ§‘ν•  수 μžˆλŠ” 보상 μ‹œμŠ€ν…œμ„ 섀계해 μ‚¬μš©μžμ˜ 지속적인 μ°Έμ—¬λ₯Ό μœ λ„ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κΈ°λŠ₯은 μ„œλΉ„μŠ€μ— λŒ€ν•œ λͺ°μž…감을 높이고, μ‚¬μš©μž κ²½ν—˜μ„ μ°¨λ³„ν™”ν•˜λŠ” 데 κΈ°μ—¬ν–ˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” μ„±κ³Ό 및 배운 점

  1. JWT 및 μ†Œμ…œ 둜그인 톡합

    • Spring Security와 JWT 기반 인증 μ‹œμŠ€ν…œμ„ ꡬ좕해 μ•ˆμ „ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ ꡬ쑰λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
    • Google, Kakao λ“± λ‹€μ–‘ν•œ μ†Œμ…œ 둜그인 κΈ°λŠ₯을 μΆ”κ°€ν•΄ μ‚¬μš©μž νŽΈμ˜μ„±μ„ κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€.
    • OAuth2.0 인증 흐름을 ν•™μŠ΅ν•˜κ³  이λ₯Ό 단일 API둜 ν†΅ν•©ν–ˆμœΌλ©°, JWT 토큰 μž¬λ°œκΈ‰ 및 만료 처리둜 λ³΄μ•ˆμ„ κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€.
  2. CI/CD ꡬ좕 및 무쀑단 배포

    • Jenkins와 Dockerλ₯Ό ν™œμš©ν•΄ λΉŒλ“œ 및 배포 μžλ™ν™” νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μΆ•ν–ˆμŠ΅λ‹ˆλ‹€.
    • Nginxλ₯Ό μ‚¬μš©ν•œ λ‘œλ“œ λ°ΈλŸ°μ‹± 및 HTTPS 섀정을 톡해 μ•ˆμ •μ„±μ„ ν™•λ³΄ν–ˆμŠ΅λ‹ˆλ‹€.
    • 무쀑단 배포λ₯Ό κ΅¬ν˜„ν•΄ μ„œλΉ„μŠ€ 이용 쀑단 없이 κ°œμ„  μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  3. 효율적인 데이터 섀계 및 μ΅œμ ν™”

    • 읡λͺ… λ©”μ‹œμ§€μ™€ μ‚¬μš©μž 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ 비식별화 및 μ•”ν˜Έν™” 방식을 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.
    • JPAλ₯Ό ν™œμš©ν•΄ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ κ³ λ €ν•œ λ°μ΄ν„°λ² μ΄μŠ€ 섀계와 API μ΅œμ ν™”λ₯Ό μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ— ν•„μš”ν•œ λ°μ΄ν„°λ§Œ λ°˜ν™˜ν•˜λŠ” RESTful APIλ₯Ό 섀계해 톡신 νš¨μœ¨μ„±μ„ λ†’μ˜€μŠ΅λ‹ˆλ‹€.
  4. κΈ°νšλΆ€ν„° λ°°ν¬κΉŒμ§€μ˜ 전체 κ²½ν—˜

    • ν”„λ‘œμ νŠΈ 기획, μ„œλ²„ 섀계, API 개발, λ°°ν¬κΉŒμ§€ λͺ¨λ“  과정을 직접 κ²½ν—˜ν•˜λ©° μ„œλΉ„μŠ€ 개발의 μ „λ°˜μ μΈ 흐름을 μ²΄κ°ν–ˆμŠ΅λ‹ˆλ‹€.
    • 기술적 λ‚œκ΄€μ— 직면할 λ•Œλ§ˆλ‹€ νŒ€μ›λ“€κ³Ό ν˜‘μ—…ν•˜λ©° 문제λ₯Ό ν•΄κ²°ν•˜κ³ , μƒˆλ‘œμš΄ κΈ°μˆ μ„ λΉ λ₯΄κ²Œ ν•™μŠ΅ν•΄ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

회고 및 μ•žμœΌλ‘œμ˜ λ°©ν–₯

이번 ν”„λ‘œμ νŠΈλŠ” 기술 μ„ νƒμ˜ μ€‘μš”μ„±κ³Ό λ°±μ—”λ“œ μ•„ν‚€ν…μ²˜ μ„€κ³„μ˜ λ³΅μž‘μ„±μ„ μ΄ν•΄ν•˜λŠ” 데 큰 도움을 μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. 특히, λ³΄μ•ˆ, ν™•μž₯μ„±, μ•ˆμ •μ„±μ„ κ³ λ €ν•œ λ°±μ—”λ“œ μ‹œμŠ€ν…œ 섀계와 μ΅œμ ν™”μ˜ μ€‘μš”μ„±μ„ 깊이 κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ μ΄λŸ¬ν•œ κ²½ν—˜μ„ λ°”νƒ•μœΌλ‘œ λ”μš± 효율적이고 μ•ˆμ •μ μΈ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜κ³ , μ‚¬μš©μž μ€‘μ‹¬μ˜ μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•˜λŠ” 데 κΈ°μ—¬ν•˜κ³ μž ν•©λ‹ˆλ‹€.

이번 ν”„λ‘œμ νŠΈλŠ” 기술적으둜 μ„±μž₯ν•  수 μžˆλŠ” 발판이자, ν˜‘μ—…κ³Ό μ‚¬μš©μž κ²½ν—˜ μ„€κ³„μ˜ μ€‘μš”μ„±μ„ λ˜μƒˆκΈ°λŠ” 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


ν—ˆμ„Έλ Ή

μ‹Έν”Όμ—μ„œμ˜ λ§ˆμ§€λ§‰ ν”„λ‘œμ νŠΈλ₯Ό μž¬λ―ΈμžˆλŠ” 주제둜 즐겁게 κ°œλ°œν•  수 μžˆμ–΄μ„œ κΈ°μ©λ‹ˆλ‹€. 이전 곡톡 및 νŠΉν™” ν”„λ‘œμ νŠΈμ—μ„œλ„ ν”„λ‘ νŠΈμ—”λ“œλ₯Ό λ§‘μ•„ Reactλ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ, 이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ‘€λ§νŽ˜μ΄νΌλΌλŠ” 주제 νŠΉμ„± 상 λͺ¨λ°”μΌμ—μ„œ νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ PWA κΈ°μˆ μ„ ν™œμš©ν–ˆμŠ΅λ‹ˆλ‹€. PWAλ₯Ό 톡해 λ„€μ΄ν‹°λΈŒ μ•± κ°œλ°œλ³΄λ‹€ κ°„νŽΈν•˜κ²Œ λͺ¨λ°”일 앱을 κ΅¬ν˜„ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ JWT와 μ†Œμ…œ 둜그인 연동 μž‘μ—…μ„ λ§‘μ•„, 둜그인 μš”μ²­ μ‹œ λ°±μ—”λ“œμ—μ„œ λ°œκΈ‰λœ JWTλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— μ €μž₯ν•˜κ³ , 이후 인증이 ν•„μš”ν•œ μš”μ²­λ§ˆλ‹€ ν•΄λ‹Ή 토큰을 HTTP 헀더에 ν¬ν•¨μ‹œμΌœ μ„œλ²„μ™€ ν†΅μ‹ ν•˜λŠ” ꡬ쑰λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 토큰 만료 μ‹œ κ°±μ‹  과정을 μ„€κ³„ν•˜λ©° accessTokenκ³Ό refreshToken을 ν™œμš©ν•œ Authorization 흐름을 이해할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ, λ„€μ΄ν‹°λΈŒ μ•±κ³Ό 비ꡐ해 ν˜Έν™˜μ„±μ΄ λΆ€μ‘±ν•œ 점은 μ•„μ‰¬μ›€μœΌλ‘œ λ‚¨μ•˜μŠ΅λ‹ˆλ‹€. 또, 쀄어든 ν”„λ‘œμ νŠΈ 기간에 개인적으둜 완성도 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ λͺ»ν•œ 것이 μ•„μ‰¬μ›Œ, ν”„λ‘œμ νŠΈ 후에도 μ΅œμ ν™”λœ μ½”λ“œλ₯Ό μœ„ν•΄ μƒνƒœκ΄€λ¦¬, μ½”λ“œ 가독성을 μœ„ν•œ μ»΄ν¬λ„ŒνŠΈ 뢄리 λ“±μ˜ λ¦¬νŒ©ν† λ§μ„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œλ„ 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ 기술과 μ½”λ“œμ— λŒ€ν•΄μ„œ κΎΈμ€€ν•˜κ²Œ νƒκ΅¬ν•˜λ©° 더 완성도 높은 ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.


남은식

이번 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 처음 κ³„νšν–ˆλ˜ 것보닀 훨씬 더 κ·€μ—¬μš΄ μ„œλΉ„μŠ€λ₯Ό μ™„μ„±ν•  수 μžˆμ–΄ 기쁘게 μƒκ°ν•©λ‹ˆλ‹€. 특히 ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•  λ•Œ λ‹€λ₯Έ 쑰원듀이 보여쀀 긍정적인 λ°˜μ‘μ€ 큰 동기뢀여가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ λ§Œλ“  μ„œλΉ„μŠ€λ₯Ό μ‚¬λžŒλ“€μ΄ 즐겁게 μ΄μš©ν•˜κ³  λ§Œμ‘±ν•˜λŠ” λͺ¨μŠ΅μ„ μƒμƒν•˜λ‹ˆ 보람과 성취감을 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λΆ€μ‘±ν•œ 점도 λ§Žμ•˜μ§€λ§Œ 이번 κ²½ν—˜μ€ μ•žμœΌλ‘œμ˜ μ„±μž₯에 큰 μžμ‚°μ΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” React, TypeScript, 그리고 PWAκΈ°μˆ μ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. μ œκ°€ 이듀 κΈ°μˆ μ— 초보자 μˆ˜μ€€μ΄λΌ μ²˜μŒμ—λŠ” 쑰금 λ§‰λ§‰ν–ˆμ§€λ§Œ, ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° λ§Žμ€ 것을 배울 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. Reactλ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„€κ³„ν•˜κ³  μƒνƒœ 관리λ₯Ό 배우며 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό 효율적으둜 κ΅¬μ„±ν•˜λŠ” 방법을 μ΅ν˜”κ³ , TypeScriptλ₯Ό ν™œμš©ν•΄ μ½”λ“œμ˜ μ•ˆμ •μ„±μ„ 높이고 μ‹€μˆ˜λ₯Ό μ€„μ΄λŠ” 방법을 체감할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, PWAλ₯Ό κ΅¬ν˜„ν•˜λ©΄μ„œ 웹앱을 더 λΉ λ₯΄κ³  μœ μ—°ν•˜κ²Œ λ§Œλ“€ 수 μžˆλŠ” 기술적 κ°€λŠ₯성에 λŒ€ν•΄ μ•Œκ²Œ λ˜μ—ˆκ³ , 이λ₯Ό 톡해 μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ ν•  수 μžˆμŒμ„ λ°°μ› μŠ΅λ‹ˆλ‹€.

κΈ°μˆ μ„ μ΅νžˆλŠ” κ³Όμ •μ—μ„œ μ‹œν–‰μ°©μ˜€λ„ μžˆμ—ˆμ§€λ§Œ, 이λ₯Ό 톡해 μƒˆλ‘œμš΄ 지식과 문제 ν•΄κ²° λŠ₯λ ₯을 κΈ°λ₯Ό 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이번 ν”„λ‘œμ νŠΈλ₯Ό 톡해 배운 것듀을 λ°”νƒ•μœΌλ‘œ μ•žμœΌλ‘œ 더 λ‚˜μ€ μ„œλΉ„μŠ€λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ λ…Έλ ₯ν•  κ²ƒμž…λ‹ˆλ‹€. ν•¨κ»˜ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•œ μ‘°μ›λ“€κ³Όμ˜ ν˜‘μ—…λ„ 큰 도움이 λ˜μ—ˆμœΌλ©°, 이λ₯Ό 톡해 νŒ€μ›Œν¬μ˜ μ€‘μš”μ„±μ„ λ‹€μ‹œ ν•œλ²ˆ λŠκΌˆμŠ΅λ‹ˆλ‹€.


μ΅œν˜•μš°

이번 ν”„λ‘œμ νŠΈλŠ” 이전보닀 μ „λ°˜μ μΈ ꡬ쑰에 λŒ€ν•΄ 깊이 κ³ λ―Όν•˜λ©° μ§„ν–‰ν•œ μž‘μ—…μ΄μ—ˆμŠ΅λ‹ˆλ‹€. API ν˜ΈμΆœμ„ μ΅œμ†Œν™”ν•˜κ³ , μ‚¬μš©μž κ²½ν—˜μ„ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ„ λ°˜μ˜ 후전솑 방식을 λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λ‹€μ–‘ν•œ κΈ°κΈ°μ—μ„œ μΌκ΄€λ˜κ³  만쑱슀러운 μ‚¬μš©κ°μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄ λ ˆμ΄μ•„μ›ƒκ³Ό 해상도 μ΅œμ ν™”μ— λ§Žμ€ λ…Έλ ₯을 κΈ°μšΈμ˜€μŠ΅λ‹ˆλ‹€.

특히, 야심 차게 AR κΈ°λŠ₯을 λ„μž…ν•˜λ €λŠ” μ‹œλ„λ₯Ό ν•΄λ΄€μ§€λ§Œ 이 κ³Όμ •μ—μ„œ PWA의 ν•œκ³„λ₯Ό μ‹€κ°ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ„€μ΄ν‹°λΈŒ ν™˜κ²½κ³Ό 달리 PWAλŠ” AR κ΅¬ν˜„μ—μ„œ 기술적 μ œμ•½μ΄ μžˆμ—ˆκ³ , μ΄λŸ¬ν•œ 어렀움은 μ•žμœΌλ‘œμ˜ λ°©ν–₯성을 μž¬κ³ ν•˜λŠ” 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이번 ν”„λ‘œμ νŠΈλŠ” 기술적 도전뿐 μ•„λ‹ˆλΌ μ‚¬μš©μž κ²½ν—˜μ„ 쀑심에 λ‘” μ„€κ³„μ˜ μ€‘μš”μ„±μ„ λ‹€μ‹œκΈˆ κΉ¨λ‹«κ²Œ ν•΄ μ€€ μ†Œμ€‘ν•œ κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€.


About

πŸ“‘ AR기반 둀링페이퍼 μ„œλΉ„μŠ€

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6