Skip to content

KimLeeParkLee/Heybro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

277 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿง”๐Ÿปโ€โ™‚๏ธ ๋‚จ์„ฑ ๊ทธ๋ฃจ๋ฐ ๋ฃจํ‹ด ์„œ๋น„์Šค HEYBRO

image

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ ๋ฐ ํŒ€์›

๊น€์œ ๋‚˜ ์ด๊ถŒ๋ฏผ
๊น€์œ ๋‚˜
์ด๊ถŒ๋ฏผ
Backend Frontend
  • Spring Boot ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ฐœ๋ฐœ
  • Github Actions์™€ Docker๋ฅผ ํ™œ์šฉํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•
  • ํ”„๋ก ํŠธ์—”๋“œ ๋‹จ๋… ๊ฐœ๋ฐœ: ์˜จ๋ณด๋”ฉ, ๋ฃจํ‹ด ์ถ”์ฒœ, AI ํ”ผ๋ถ€ ์ธก์ •, ์•Œ๋ฆผ, ์ฟ ํฐยทํฌ์ธํŠธ ์‹œ์Šคํ…œ ๋“ฑ
  • ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„: TypeScript ๊ณ„์ธต ๋ถ„๋ฆฌ, Zustand/Jotai ์ƒํƒœ๊ด€๋ฆฌ, ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐํ™”
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: iOS URLSession ๋„ค์ดํ‹ฐ๋ธŒ ๋ธŒ๋ฆฟ์ง€, FastImage ์บ์‹œ, ๋กœ๋”ฉ ์ธ๋””์ผ€์ดํ„ฐ ์ ์šฉ
  • OAuth ์—ฐ๋™: Google/Kakao/Apple ์†Œ์…œ ๋กœ๊ทธ์ธ + JWT ์ธ์ฆ
  • ์ปค์Šคํ…€ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„: ๋„ค๋น„๊ฒŒ์ด์…˜๋ฐ”, DayRing ๋“ฑ reanimated์™€ GPU ์ปดํฌ๋„ŒํŠธ๋กœ ์ปค์Šคํ…€.
  • ๋””์ž์ธ ํ˜‘์—…: Figma โ†’ Tailwind ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ๊ธฐ๋ฐ˜ UI ๊ตฌํ˜„
๋ฐ•์ง€ํ˜ธ
์ด์œค์žฌ
Designer Designer

๊ฐœ์š”

์ตœ๊ทผ ๋‚จ์„ฑ ๋ทฐํ‹ฐ ์‹œ์žฅ์ด ๊พธ์ค€ํžˆ ์„ฑ์žฅํ•˜๋ฉฐ, ์Šคํ‚จ์ผ€์–ด๋ฅผ ๋น„๋กฏํ•œ ์ž๊ธฐ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋‚จ์„ฑ๋“ค์˜ ๊ด€์‹ฌ์ด ๊ทธ ์–ด๋А ๋•Œ๋ณด๋‹ค ๋†’์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋‹ค์ˆ˜๊ฐ€ ์ •๋ณด ๊ณผ์ž‰ ์†์—์„œ ๋‚˜์—๊ฒŒ ๋งž๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜, ๋™๊ธฐ ๋ถ€์—ฌ ๋ถ€์กฑ์œผ๋กœ ๊พธ์ค€ํ•œ ์‹ค์ฒœ์— ์–ด๋ ค์›€์„ ๊ฒช๋Š” ํŽ˜์ธ ํฌ์ธํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

HEYBRO๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๋Š” ์‚ฌ์šฉ์ž ๊ฐœ๊ฐœ์ธ์˜ ํ”ผ๋ถ€ ํƒ€์ž…, ๋ผ์ดํ”„์Šคํƒ€์ผ, ๋ชฉํ‘œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋งž์ถคํ˜• ๋ฃจํ‹ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ฃผ๊ธฐ์ ์ธ ์•Œ๋ฆผ๊ณผ ์„ฑ์ทจ๊ฐ์„ ๋†’์ด๋Š” ๋ฆฌ์›Œ๋“œ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ž๊ธฐ๊ด€๋ฆฌ๊ฐ€ ์ž‘์‹ฌ์‚ผ์ผ๋กœ ๋๋‚˜์ง€ ์•Š๊ณ  ์ฆ๊ฑฐ์šด ์Šต๊ด€์œผ๋กœ ์ž๋ฆฌ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. HEYBRO์™€ ํ•จ๊ป˜ ๋‚จ์„ฑ๋“ค์ด ๊พธ์ค€ํ•œ ์ž๊ธฐ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์ž์‹ ๊ฐ์„ ์–ป๊ณ , ๋” ๋‚˜์€ ์ผ์ƒ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๐Ÿ’ป IDE

  • Visual Studio Code
  • IntelliJ IDEA
  • Xcode

๐ŸŽจ FrontEnd

  • 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

๐Ÿ”ง BackEnd

  • 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

๐Ÿš€ Infra

  • Google Cloud Platform
  • Nginx
  • Docker
  • Github Actions

๐ŸŽจ Design

  • Figma
  • Adobe Illustrator

๐Ÿค ํ˜‘์—… ๋„๊ตฌ

  • GitHub
  • Notion
  • Slack
  • Swagger

์„œ๋น„์Šค ๊ธฐ๋Šฅ ์†Œ๊ฐœ

1๏ธโƒฃ ์†Œ์…œ ๋กœ๊ทธ์ธ

  • Google / Kakao / Apple ์†Œ์…œ ๋กœ๊ทธ์ธ

  • JWT ๊ธฐ๋ฐ˜ ์ž๋™ ๋กœ๊ทธ์ธ

    แ„…แ…ฉแ„€แ…ณแ„‹แ…ตแ†ซ

2๏ธโƒฃ ์˜จ๋ณด๋”ฉ ๋ฐ ๋งž์ถคํ˜• ๋ฃจํ‹ด ์ถ”์ฒœ

  • ์˜จ๋ณด๋”ฉ ์„ค๋ฌธ ๊ธฐ๋ฐ˜ ๋ฃจํ‹ด ์ถ”์ฒœ

type survey type survey start iPhone 13 mini - 129

3๏ธโƒฃ ๋ฉ”์ธ ํŽ˜์ด์ง€

  • ๋ฃจํ‹ด ์™„๋ฃŒ ํ˜„ํ™ฉ, ๋ ˆ๋ฒจ ์‹œ์Šคํ…œ

  • ์‚ฌ์šฉ์ž ํ†ต๊ณ„ ์‹œ๊ฐํ™”

    home 2025-09-25 12:21:21

4๏ธโƒฃ ๋ฃจํ‹ด ํŽ˜์ด์ง€

  • ๋ฃจํ‹ด ์‹คํ–‰ ์‹œ ๊ฒฝํ—˜์น˜ ๋ฐ ํฌ์ธํŠธ ์ ๋ฆฝ

Routine WireFrame (1) Routine WireFrame 11

5๏ธโƒฃ ์ปค๋ฎค๋‹ˆํ‹ฐ

  • ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ์งˆ๋ฌธ ์ƒ์„ฑ ๋ฐ ์กฐํšŒ

  • ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ์ง€์›

    community 2025-09-25 12:11:47

6๏ธโƒฃ ๋งˆ์ดํŽ˜์ด์ง€

  • ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ • ๋ฐ ์•ฑ ์„ค์ •

  • ํฌ์ธํŠธ ์‚ฌ์šฉ ๋‚ด์—ญ ๋ฐ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๋‚ด์—ญ

  • ๊ณ ๊ฐ์„ผํ„ฐ, ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๊ด€๋ จ ๋งํฌ ์ฒญ๋ถ€

    iPhone 13 mini - 156

4๏ธโƒฃ ํฌ์ธํŠธ ยท ์ฟ ํฐ

  • ๋ฃจํ‹ด ๋‹ฌ์„ฑ ์‹œ ์ ๋ฆฝ ๋ฐ›์€ ํฌ์ธํŠธ๋กœ ์ฟ ํฐ ๊ตฌ๋งค

    coupon 2025-09-25 12:12:30

4๏ธโƒฃ AI ํ†ก๋ด‡

  • Gemini API ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋Œ€ํ™”ํ˜• ํ†ก๋ด‡

    TalkBot WireFrame

4๏ธโƒฃ AI ํ”ผ๋ถ€ ์ธก์ •

  • Face++ Api ๊ธฐ๋ฐ˜ ํ”ผ๋ถ€ ์ ์ˆ˜ ์ธก์ •

fixed iPhone 13 mini - 131 iPhone 13 mini - 152

5๏ธโƒฃ ์•Œ๋ฆผ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ๊ธฐ์ƒ/์ทจ์นจ ์‹œ๊ฐ„์— ๋งž์ถ˜ 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 ์กฐํšŒ ๋Œ€์‹  ๋ฃจํ‹ด ๋กœ๊ทธ ์ƒ์„ฑ ๋ฉ”์„œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง์ ‘ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •

ERD

erd.png

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

image (1).png

๊ณ ๋„ํ™” ์ง„ํ–‰ ์ƒํ™ฉ

ํ”„๋ก ํŠธ

  • ์‹ฌ์‚ฌ ์ง„ํ–‰ ์ค‘. ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๋ณด์•ˆ๋ฌธ์ œ ์ฒ˜๋ฆฌ์ค‘
  • ํ”„๋กœ์ ํŠธ ์ „์ฒด ๋ฆฌํŒฉํ† ๋ง

๋ฐฑ์—”๋“œ

  • ์ž์ฃผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ธ๋ฑ์‹ฑ [์™„๋ฃŒ]
  • ํ‘œ์ค€ / ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

About

๐Ÿ† ๋‚จ์„ฑ ๊ทธ๋ฃจ๋ฐ ๋ฃจํ‹ด ์„œ๋น„์Šค - ์‹ ํ•œ ์Šคํ€˜์–ด๋ธŒ๋ฆฟ์ง€ ์ฒญ๋…„ ํ•ด์ปคํ†ค ๋””์ž์ธ ํ˜์‹ ์ƒ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors