- ํ๋ช : ๊น์ด๋ฐ์ด
- ํ๋ก์ ํธ ๊ธฐ๊ฐ : 2025.07.28 ~ 2025.09.05 (6์ฃผ)
- ์ฑ์คํ ์ด ๋งํฌ : https://apps.apple.com/kr/app/heybro/id6752788217
|
|
|
|
๊น์ ๋
|
์ด๊ถ๋ฏผ
|
| Backend | Frontend |
|
|
|
๋ฐ์งํธ
|
์ด์ค์ฌ
|
| Designer | Designer |
์ต๊ทผ ๋จ์ฑ ๋ทฐํฐ ์์ฅ์ด ๊พธ์คํ ์ฑ์ฅํ๋ฉฐ, ์คํจ์ผ์ด๋ฅผ ๋น๋กฏํ ์๊ธฐ๊ด๋ฆฌ์ ๋ํ ๋จ์ฑ๋ค์ ๊ด์ฌ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ๋์ต๋๋ค. ํ์ง๋ง ๋๋ค์๊ฐ ์ ๋ณด ๊ณผ์ ์์์ ๋์๊ฒ ๋ง๋ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ๊ฑฐ๋, ๋๊ธฐ ๋ถ์ฌ ๋ถ์กฑ์ผ๋ก ๊พธ์คํ ์ค์ฒ์ ์ด๋ ค์์ ๊ฒช๋ ํ์ธ ํฌ์ธํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
HEYBRO๋ ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ํ์ต๋๋ค. ์ ํฌ๋ ์ฌ์ฉ์ ๊ฐ๊ฐ์ธ์ ํผ๋ถ ํ์ , ๋ผ์ดํ์คํ์ผ, ๋ชฉํ๋ฅผ ๋ถ์ํ์ฌ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ง์ถคํ ๋ฃจํด์ ์ ๊ณตํฉ๋๋ค. ๋ํ, ์ฃผ๊ธฐ์ ์ธ ์๋ฆผ๊ณผ ์ฑ์ทจ๊ฐ์ ๋์ด๋ ๋ฆฌ์๋ ์์คํ ์ ํตํด ์๊ธฐ๊ด๋ฆฌ๊ฐ ์์ฌ์ผ์ผ๋ก ๋๋์ง ์๊ณ ์ฆ๊ฑฐ์ด ์ต๊ด์ผ๋ก ์๋ฆฌ ์ก์ ์ ์๋๋ก ๋์ต๋๋ค. HEYBRO์ ํจ๊ป ๋จ์ฑ๋ค์ด ๊พธ์คํ ์๊ธฐ๊ด๋ฆฌ๋ฅผ ํตํด ์์ ๊ฐ์ ์ป๊ณ , ๋ ๋์ ์ผ์์ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- Visual Studio Code
- IntelliJ IDEA
- Xcode
- React Native 0.73
- TypeScript
- Jotai
- React Navigation
- react-native-reanimated
- react-native-fast-image
- react-native-svg
- FastImage
- Tailwind CSS
- react-native-community/datetimepicker 8.4.4
- react-native-firebase/app 23.3.1
- react-native-firebase/messaging 23.3.1
- react-native-kakao/user 2.4.0
- iOS URLSession
- Amazon Corretto 17
- Spring Boot 3.5.4
- Spring Data JPA 3.5.4
- Spring Webflux 3.5.4
- Spring Security 3.5.4
- OAuth2 3.5.4
- JWT 0.12.5
- Springdoc 2.8.9
- Google Cloud Platform
- Nginx
- Docker
- Github Actions
- Figma
- Adobe Illustrator
- GitHub
- Notion
- Slack
- Swagger
- ์จ๋ณด๋ฉ ์ค๋ฌธ ๊ธฐ๋ฐ ๋ฃจํด ์ถ์ฒ
- ๋ฃจํด ์คํ ์ ๊ฒฝํ์น ๋ฐ ํฌ์ธํธ ์ ๋ฆฝ
-
๊ฐ์ธ์ ๋ณด ์์ ๋ฐ ์ฑ ์ค์
-
ํฌ์ธํธ ์ฌ์ฉ ๋ด์ญ ๋ฐ ๊ฒ์๊ธ ์์ฑ ๋ด์ญ
-
๊ณ ๊ฐ์ผํฐ, ๊ฐ์ธ์ ๋ณด์ฒ๋ฆฌ๊ด๋ จ ๋งํฌ ์ฒญ๋ถ
- Face++ Api ๊ธฐ๋ฐ ํผ๋ถ ์ ์ ์ธก์
- ์ฌ์ฉ์๊ฐ ์ค์ ํ ๊ธฐ์/์ทจ์นจ ์๊ฐ์ ๋ง์ถ FCM ๋ฃจํด ์๋ฆผ
App Store ๋ฆฌ์ ๋์
- ์ฑ์คํ ์ด ์ฌ์ฌ ๊ณผ์ ์์ ๊ฐ์ธ์ ๋ณด ์์ง ๊ฐ์ด๋ ๋ฐ UGC ์ฝํ ์ธ ๊ด๋ฆฌ ๋ถ์กฑ์ผ๋ก ๋ฆฌ์ ๋ฐ์
- OAuth ์ดํ ์ถ๊ฐ ๊ฐ์ธ์ ๋ณด(์ฑ๋ณ/์๋ ์์ผ/์ ํ๋ฒํธ) ์ฌ์๊ตฌ, UGC ์ฐจ๋จยท๊ฐ์ด๋๋ผ์ธ ๋ฏธํก
- ๊ฐ์ ๋จ๊ณ PII ์ต์ ์์ง ์์น ์ ์ฉ, OAuth ๊ฒฝ๋ก ์ฌ์ค๊ณ๋ก ์ถ๊ฐ ์ ๋ณด ์ฌ์๊ตฌ ์ ๊ฑฐ, UGC ์ ๋ก๋ ์ ๊ฐ์ด๋ยท์ฐจ๋จ ํ๋ก์ฐ ์ถ๊ฐํ์ฌ ์ฌ์ฌ ๊ฐ์ด๋ ์ค์
JS Thread ๊ณผ๋ถํ๋ก API ์ฒ๋ฆฌ ์ง์ฐ
- ์ ๋๋ฉ์ด์ ยท์คํฌ๋กค ์ค API ์์ฒญ์ด ๋ฐ๋ฆฌ๊ฑฐ๋ ํ์์์ ๋ฐ์
- JS Thread์์ ์ ๋๋ฉ์ด์ ยท์ํ ๊ด๋ฆฌยท๋คํธ์ํน์ด ๋์์ ์ฒ๋ฆฌ๋๋ฉฐ ์์ฒญ ์ฒ๋ฆฌ ์ฐ์ ์์ ๋ฐ๋ฆผ
- iOS์ URLSession ๋ค์ดํฐ๋ธ ๋ธ๋ฆฟ์ง ๊ฒฝ๋ก ๋์ , ๋คํธ์ํน ๋ก์ง์ ๋ค์ดํฐ๋ธ ๋จ์์ ์ฒ๋ฆฌํด JS Thread ๋ถํ๋ฅผ ๋ถ๋ฆฌํ๊ณ Dev ๋น๋์ ํ์ฅ ๋ก๊ทธยทMock API ๋ผ์ฐํฐ๋ฅผ ์ถ๊ฐํด ์ฌํ ๋ฐ ํ ์คํธ ํ๊ฒฝ ๊ฐ์
GIF ๋ก๋ฉ ์ง์ฐ
- ๊ฐ ํ์ด์ง์์ GIF ๋ก๋ฉ ์ง์ฐ๊ณผ ์คํฌ๋กค ๋๊น ํ์ ๋ฐ์
- React Native ๊ธฐ๋ณธ Image ์ปดํฌ๋ํธ์ ์บ์ยท์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ ํ๊ณ
- react-native-fast-image ๋์ , ๋ก๋ฉ ์คํผ๋ยท์บ์ ์ฐ์ ์์ ์ ์ฉ, ๋์ฉ๋ GIF๋ ์ธ๋ค์ผ โ ๋์์ ์ ํ ์ ๋ต์ผ๋ก UX ๊ฐ์
N+1 ์ฟผ๋ฆฌ ๋ฌธ์ ํด๊ฒฐ
- ํน์ ์ง๋ฌธ ๊ฒ์๊ธ ์์ธ ์กฐํ API์์ ๊ฒ์๊ธ ์์ฑ์ ์ ๋ณด์ ์ด๋ฏธ์ง ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ๋ ๊ฐ ์ง๋ฌธ๋ง๋ค ๋ณ๋์ ์ฟผ๋ฆฌ๊ฐ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋ N+1 ์ฟผ๋ฆฌ ๋ฌธ์ ๋ฐ์
- ๊ฒ์๊ธ๊ณผ ์ฐ๊ด๋ ์์ฑ์, ์ด๋ฏธ์ง ์ ๋ณด๊ฐ ์ง์ฐ ๋ก๋ฉ์ผ๋ก ์ค์ ๋์ด ์์ด ๊ฒ์๊ธ์ ์กฐํํ ๋ค ๊ฐ ์ ๋ณด์ ์ ๊ทผํ ๋๋ง๋ค ์ถ๊ฐ์ ์ธ ์ฟผ๋ฆฌ ๋ฐ์
- LEFT JOIN FETCH๋ฅผ ์ฌ์ฉํ์ฌ ๋จ ํ ๋ฒ์ ์ฟผ๋ฆฌ๋ก ์ฐ๊ด๋ ์ ๋ณด(๊ฒ์๊ธ ์์ฑ์, ์ด๋ฏธ์ง ๋ชฉ๋ก)๋ฅผ ๋ชจ๋ ํจ๊ป ๊ฐ์ ธ์ค๋๋ก ์กฐํ -> API์ 99% ์๋ต ์๊ฐ์ 211ms์์ 53ms๋ก ๋จ์ถ์ํด
ํธ๋์ญ์ ๋ด ๋ฐ์ดํฐ ์กฐํ ๋ฌธ์
- ์จ๋ณด๋ฉ ๊ฒฐ๊ณผ ์ ์ก API์์ ๋ฃจํด ๋ก๊ทธ ์์ฑ ๋ฉ์๋๋ฅผ ํธ์ถํ์ผ๋, ์ค๋์ ๋ฃจํด ๋ก๊ทธ๊ฐ ์์ฑ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์
- @Transactional์ ๊ธฐ๋ณธ ์ ํ ๋ ๋ฒจ์ธ REQUIRED๋ก ์ ์ฉ๋์ด ์์ด, ๋ฃจํด ๋ก๊ทธ ์์ฑ ๋ฉ์๋ ํธ์ถ ์์ ์๋ ์์์ฑ ์ปจํ ์คํธ์ 1์ฐจ ์บ์์๋ง ์ ์ฅ -> findAll()๋ก DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ง ๋ชปํจ
- 1์ฐจ ์๋๋ก ๋ฃจํด ๋ก๊ทธ ์์ฑ ์์ ์ด ๋ถ๋ชจ ํธ๋์ญ์ ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์ปค๋ฐ๋๋๋ก @Transactional(propagation = Propagation.REQUIRES_NEW)๋ฅผ ์ ์ฉํ์ง๋ง ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ํ ๋ฌธ์ ๊ฐ ์์ ์ ์์์
- ๊ทผ๋ณธ์ ์ธ ์์ธ์ธ ๋ถํ์ํ DB ์กฐํ ๋์ ๋ฃจํด ๋ก๊ทธ ์์ฑ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ง์ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ์์
- ์ฌ์ฌ ์งํ ์ค. ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ์ ๊ฐ์ ๋ณด์๋ฌธ์ ์ฒ๋ฆฌ์ค
- ํ๋ก์ ํธ ์ ์ฒด ๋ฆฌํฉํ ๋ง
- ์์ฃผ ๊ฒ์ํ๋ ๋ฐ์ดํฐ ์ธ๋ฑ์ฑ [์๋ฃ]
- ํ์ค / ์ปค์คํ ์์ธ ์ฒ๋ฆฌ





.png)








.png)