Skip to content

Latest commit

ย 

History

History
370 lines (309 loc) ยท 25 KB

File metadata and controls

370 lines (309 loc) ยท 25 KB

image

๐ŸŒŠ๐Ÿ‹ ๋‹ฟ๋‹ค DA-TA ๐Ÿ‹๐ŸŒŠ

๐Ÿ’ ์›น ์„œ๋น„์Šค ์†Œ๊ฐœ

๋‹ฟ๋‹ค (DA-TA) ๋Š” ์œ ๋ฆฌ๋ณ‘ ํŽธ์ง€๋ฅผ ๋ชจํ‹ฐ๋ธŒ๋กœ ํ•œ 1:1 ๋žœ๋ค ์ต๋ช… ํŽธ์ง€ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ํ˜น์€ ๊ทธ๋ฆผ ํ˜•ํƒœ์˜ ํŽธ์ง€๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ฌด์ž‘์œ„ 1๋ช…์—๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ํŽธ์ง€์— ๋Œ€ํ•ด 1ํšŒ์„ฑ์œผ๋กœ ๋‹ต์žฅ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ณด๊ด€ํ•˜์—ฌ ๊ฐ„์งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”— ์„œ๋น„์Šค ์†Œ๊ฐœ ์˜์ƒ ๋ฐ”๋กœ๊ฐ€๊ธฐ Click ! ๐Ÿ‘ˆ

๐Ÿ”— ์‹œ์—ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฐ”๋กœ๊ฐ€๊ธฐ Click ! ๐Ÿ‘ˆ

์ƒˆ ์ฐฝ ์—ด๊ธฐ ๋ฐฉ๋ฒ• : CTRL+click (on Windows and Linux) | CMD+click (on MacOS)


๐Ÿ“… ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

2022.10.11. ~ 2022.11.18.


๐Ÿ”ฅ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ฉ”์ธ ํ™”๋ฉด
    • ๋ฐ”๋‹ค์— ๋„์›Œ์ง„ ํŽธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์†Œ์…œ(์นด์นด์˜ค) ๋กœ๊ทธ์ธ์„ ํ†ตํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ด์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ตœ์ดˆ ๋กœ๊ทธ์ธ ์‹œ ์ž๋™์œผ๋กœ ๋‹‰๋„ค์ž„์„ ์ƒ์„ฑํ•˜์—ฌ ์ค๋‹ˆ๋‹ค.
  • ์˜ค๋Š˜์˜ ์งˆ๋ฌธ & ๋‹ต๋ณ€
    • ๋ฉ”์ธํ™”๋ฉด์˜ ๋ฌผ๋ณ‘์„ ํด๋ฆญํ•˜์—ฌ ์˜ค๋Š˜์˜ ์งˆ๋ฌธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ต๋ณ€ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์˜ค๋Š˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ƒ๊ฐ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ค๋ฅธ ๋‹ต๋ณ€ ๋ณด๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์˜ ๋‹ต๋ณ€์„ ํ™•์ธํ•˜๋ฉฐ, ๋‚ด์šฉ์ด ๋ถ€์ ์ ˆํ•  ์‹œ ์‹ ๊ณ  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŽธ์ง€ ์“ฐ๊ธฐ
    • ํŽธ์ง€ ๊ณตํ†ต ์˜ต์…˜์œผ๋กœ ์›ํ•˜๋Š” ํŽธ์ง€์ง€ ๋ฐ ๊ธ€์”จ์ฒด๋ฅผ ์„ ํƒ, ์ˆ˜์‹ ์ž์˜ ์—ฐ๋ น๋Œ€๋ฅผ ์„ค์ •, ๋‹ต์žฅ์„ ๋ฐ›์„์ง€์˜ ์—ฌ๋ถ€๋ฅผ ์„ค์ • ํ•  ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ…์ŠคํŠธ ํŽธ์ง€๋Š” ์ตœ์†Œ 30์ž ์ตœ๋Œ€ 1000์ž๊นŒ์ง€ ์ž…๋ ฅ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŽธ์ง€๋ฅผ ๋ฐœ์†กํ•˜๊ธฐ ์ „ KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ ์œ ํ•ด์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๋ฆผ ํŽธ์ง€๋Š” ๋‹ค์–‘ํ•œ ๊ทธ๋ฆผํŒ ์˜ต์…˜(ํŽœ์˜ ์ƒ‰์ƒ, ํŽœ์˜ ๊ตต๊ธฐ, ์ง€์šฐ๊ฐœ)์„ ์ง€์›ํ•˜๋ฉฐ, ํŽธ์ง€๋ฅผ ๋ฐœ์†กํ•˜๊ธฐ ์ „ Google cloud vision api๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํ•ด์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํŽธ์ง€ ๋ฐ›๊ธฐ
    • ๋ฐ”๋‹ค์— ๋– ๋‹ค๋‹ˆ๋Š” ํŽธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ›์€ ํŽธ์ง€๊ฐ€ ๋งˆ์Œ์— ๋“ค ์‹œ ๋ณด๊ด€ํ•จ์— ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹ต์žฅ์ด ํ•„์š” ์—†๋Š” ํŽธ์ง€ ํ•œ์ •)
    • ๋ฐ›์€ ํŽธ์ง€์˜ ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ๋„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ๊ฑฐ๋‚˜, ๋‹ต์žฅ์ด ์–ด๋ ค์šธ ๊ฒฝ์šฐ ๋ฐ”๋‹ค์— ๋‹ค์‹œ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹ค์‹œ ๋„์›Œ์ง„ ํŽธ์ง€๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ๋„์šฐ์ง€๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.)
    • ํŽธ์ง€์˜ ๋‚ด์šฉ์ด ๋ถ€์ ์ ˆํ•  ์‹œ ์‹ ๊ณ  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ดํŽ˜์ด์ง€
    • ์ˆ˜์ง‘ํ•œ ํŽธ์ง€ํ•จ์—์„œ ๋‚ด๊ฐ€ ์ˆ˜์ง‘ํ•œ ํŽธ์ง€ ๋ชฉ๋ก์„ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ง‘ํ•œ ํŽธ์ง€์˜ ์ƒ์„ธ์กฐํšŒ ๋ฐ ์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ต์žฅ ๋ฐ›์€ ํŽธ์ง€ํ•จ์—์„œ ๋‚ด๊ฐ€ ์“ด ํŽธ์ง€์— ๋Œ€ํ•œ ๋‹ต์žฅ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‹ต์žฅ์˜ ์ƒ์„ธ์กฐํšŒ, ์‚ญ์ œ ๋ฐ ์‹ ๊ณ  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐœ์ธ์„ค์ •
      • ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋Œ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ํšŒ์› ํƒˆํ‡ด๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž
    • ํŽธ์ง€ ์‹ ๊ณ  ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ ๊ณ ๋œ ํŽธ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ ๊ณ  ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ˜๋ ค๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ค๋Š˜์˜ ์งˆ๋ฌธ ๋‹ต๋ณ€ ์‹ ๊ณ  ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ ๊ณ ๋œ ๋‹ต๋ณ€์„ ํ™•์ธํ•˜๊ณ  ์‹ ๊ณ  ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ˜๋ ค๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (3ํšŒ ์ด์ƒ ์‹ ๊ณ  ์ฒ˜๋ฆฌ ๋ˆ„์  ์‹œ ์‚ฌ์šฉ์ž๋Š” ์ž๋™์œผ๋กœ ๊ณ„์ • ์ •์ง€์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.)
    • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์ „์ฒด ์‚ฌ์šฉ์ž์˜ ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ค๋Š˜์˜ ์งˆ๋ฌธ ๊ด€๋ฆฌ์˜ ์บ˜๋ฆฐ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋‚ ์งœ์˜ ์˜ค๋Š˜์˜ ์งˆ๋ฌธ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

Front-end

HTML5 CSS3
Javascript
HTML5 CSS3 Javascript
React.js Recoil
React Recoil
Styled-Component
MUI
Styled-Component Axios

Back-end

Java
Spring-Boot
SpringSecurity
Hibernate
Java Spring-Boot SpringSecurity Hibernate
Redis Firebase MySQL
Redis Firebase MySQL

DevOps

NGiNX aws Jenkins docker
sonarqube
NGiNX aws Jenkins docker SonarQube

Frontend Libraries & Tools

  • aos 2.3.4
  • axios 0.27.2
  • firebase 9.13.0
  • moment 2.29.4
  • react 17.0.2
  • react-calendar 4.0.0
  • react-color 2.19.3
  • react-dom 17.0.2
  • react-router-dom 6.4.2
  • react-scroll-to-top 3.0.0
  • react-slick 0.29.0
  • recoil 0.7.6
  • recoil-persist 4.2.0
  • styled-components 5.3.6
  • sweetalert2 11.6.2

Backend Libraries & Tools

  • Java 1.8
  • SpringBoot 2.7.1
  • SpringSecurity 2.7.1
  • jjwt 0.11.2
  • Hibernate 5.6.9.Final
  • redis
  • MySQL

API

  • google-cloud-vision 26.1.3
  • kakao login

EC2 ํฌํŠธ ์ •๋ฆฌ

PORT
์ด๋ฆ„
80 HTTP, nginx
443 HTTPS
3306 MySQL
6379 Redis
8080 SpringBoot API Server
9000 SonarQube
9090 Jenkins

๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ณ

image



๐Ÿ“‘ERD

erd



๐Ÿ‘ช ๊ฐœ๋ฐœ ํŒ€ ์†Œ๊ฐœ

๊น€๋ณด์—ฐ ํ”„๋กœํ•„ ์กฐ๋ฏผ๊ทœ ํ”„๋กœํ•„ ๊น€๊ฐ•ํ˜ธ ํ”„๋กœํ•„ ๋ฐ•๊ธฐ์œค ํ”„๋กœํ•„ ์ด์ƒ์šฐ ํ”„๋กœํ•„
๊น€๋ณด์—ฐ
(Frontend)
์กฐ๋ฏผ๊ทœ
(Frontend)
๊น€๊ฐ•ํ˜ธ
(Backend)
๋ฐ•๊ธฐ์œค
(Backend)
์ด์ƒ์šฐ
(Backend)

์ด๋ฆ„
์—ญํ• 
๊ฐœ๋ฐœ ๋‚ด์šฉ
๊น€๋ณด์—ฐ Frontend
ํŒ€์žฅ
- ํŽธ์ง€๋ฐ›๊ธฐ, ๋งˆ์ดํŽ˜์ด์ง€์˜ ์™€์ด์–ด ํ”„๋ ˆ์ž„ ์ž‘์„ฑ ๋ฐ ๋””์ž์ธ ๊ตฌํ˜„
- ๋ชจ๋ฐ”์ผ, ํƒœ๋ธ”๋ฆฟ, ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•œ ๋ฐ˜์‘ํ˜• ์›น ์ž‘์„ฑ
- Atomic Design์„ ์ด์šฉํ•œ Component ๊ตฌ์„ฑ ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ ํ™•์žฅ
- Recoil์„ ์ด์šฉํ•œ ์ƒํƒœ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž์˜ ๋™์ž‘์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ
- Recoil-persist๋ฅผ ์ด์šฉํ•œ ์‚ฌ์šฉ์ž์˜ ๋น„ ์ •์ƒ์  ์ ‘๊ทผ , ์˜ค๋ฅ˜, ๋“ฑ์—๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
- Styled-Component๋ฅผ ์ด์šฉํ•œ ๋™์  ์Šคํƒ€์ผ๋ง ๋ฐ Componentํ™”
- ํŽธ์ง€ ๋ฐ›๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- Nested Routes ๊ธฐ๋Šฅ์„ ์ด์šฉํ•œ ๋ณด๊ด€ํ•จ, ๊ฐœ์ธ์„ค์ • ๊ธฐ๋Šฅ ๊ตฌ๋ถ„
- ์—ฐ๋ น๋Œ€ ์„ค์ • ๊ธฐ๋Šฅ ๋ฐ ํšŒ์› ํƒˆํ‡ด ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ํŽธ์ง€ ๋ณด๊ด€ํ•จ ํŽ˜์ด์ง€ ๊ตฌํ˜„
์กฐ๋ฏผ๊ทœ Frontend - Styled-Component๋ฅผ ์ด์šฉํ•œ CSS-in-JS ๋ฐฉ์‹์œผ๋กœ ์Šคํƒ€์ผ๋ง ์ž‘์—…
- ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ๋ฐ˜์‘ํ˜• ์›น ๋””์ž์ธ
- Atom ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„(๋ฒ„ํŠผ, ์ฒดํฌ๋ฐ•์Šค, ๋“œ๋กญ๋‹ค์šด, ์ž…๋ ฅ์ฐฝ, ๋ชจ๋‹ฌ, ํ…์ŠคํŠธ)
- ํ—ค๋”, SlideMenu ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
- ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ ๊ตฌํ˜„
- ๋กœ๊ทธ์ธ - ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„
- ๋กœ๊ทธ์ธ - Recoil์„ ํ™œ์šฉํ•œ ํšŒ์› ์ •๋ณด ์ƒํƒœ ๊ด€๋ฆฌ
- ๋กœ๊ทธ์ธ - Axios Interceptor๋ฅผ ํ™œ์šฉํ•œ access token ๊ด€๋ฆฌ, ๋งŒ๋ฃŒ ์‹œ ์žฌ๋ฐœ๊ธ‰ ๋กœ์ง ๊ตฌํ˜„
- ์˜ค๋Š˜์˜์งˆ๋ฌธ ๋‹ต๋ณ€ ์กฐํšŒ, ์‹ ๊ณ  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ (ํŽธ์ง€ ์“ฐ๊ธฐ, ํŽธ์ง€ ๋‹ต์žฅ, ๊ด€๋ฆฌ์ž)
- ํŽธ์ง€ ์“ฐ๊ธฐ - ํ…์ŠคํŠธ ํŽธ์ง€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- ํŽธ์ง€ ์“ฐ๊ธฐ - html canvas element๋ฅผ ํ™œ์šฉํ•œ ๋„ํ™”์ง€ ํŽธ์ง€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- ํŽธ์ง€ ์“ฐ๊ธฐ - ์˜ต์…˜ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- ํŽธ์ง€ ์“ฐ๊ธฐ - canvas ์ด๋ฏธ์ง€ firebase storage ์ €์žฅ ๋ฐ ๋กœ๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๊ด€๋ฆฌ์ž - ํŽธ์ง€ ๋ฐ ์˜ค๋Š˜์˜์งˆ๋ฌธ ๋‹ต๋ณ€ ์‹ ๊ณ  ๊ด€๋ฆฌ ๊ตฌํ˜„
- ๊ด€๋ฆฌ์ž - ๊ฐ€์ž…๋œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ตฌํ˜„
- ๊ด€๋ฆฌ์ž - react-slick ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ ์บ˜๋ฆฐ๋” ํ˜•ํƒœ์˜ ์˜ค๋Š˜์˜์งˆ๋ฌธ ๊ด€๋ฆฌ ๊ตฌํ˜„
๊น€๊ฐ•ํ˜ธ Backend
Infra
- Infra : Jenkins ํ™œ์šฉ, CI/ CD ํ™˜๊ฒฝ ๊ตฌ์ถ•
- Infra : Dockerfile ๋ฐ Jenkinsfile ์Šคํฌ๋ฆฝํŠธ ํ™œ์šฉ, ์ž๋™ ๋ฐฐํฌ ๊ตฌ์ถ•
- Infra : AWS์„œ๋ฒ„ Nginx ๊ตฌ์ถ• ๋ฐ ssl ์ธ์ฆ
- Infra : Docker image & container ์ƒ์„ฑ ๋ฐ ํ™˜๊ฒฝ ๊ตฌ์ถ•
- Infra : MySQL, Redis ๊ตฌ์ถ•
- API : ์˜ค๋Š˜์˜ ์งˆ๋ฌธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- API : ์˜ค๋Š˜์˜ ์งˆ๋ฌธ ๋‹ต๋ณ€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- API : ์˜ค๋Š˜์˜ ์งˆ๋ฌธ ์‹ ๊ณ  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- Test : SonarQube ํ™˜๊ฒฝ ๊ตฌ์ถ•, BE, FE ์ •์  ์ฝ”๋“œ ๋ถ„์„ ์‹คํ–‰
- Test : Jmeter ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
๋ฐ•๊ธฐ์œค Backend - OAuth2.0 ์ด์šฉํ•˜์—ฌ ์นด์นด์˜ค ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„
- Spring Security, JWT๋ฅผ ์ด์šฉํ•œ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๊ตฌํ˜„, refresh token์„ ํ™œ์šฉํ•œ ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€, ํšŒ์› ๊ถŒํ•œ์— ๋”ฐ๋ฅธ ์ ‘๊ทผ ์ œ์–ด
- ํšŒ์› ๊ธฐ๋Šฅ : User ๊ด€๋ จ Entity ์ž‘์„ฑ, ๋‹‰๋„ค์ž„ ๋žœ๋ค ์ƒ์„ฑ api ํ˜ธ์ถœ
- ๋งˆ์ดํŽ˜์ด์ง€ ๊ธฐ๋Šฅ : ํšŒ์› ์—ฐ๋ น๋Œ€ ์ˆ˜์ •, ํšŒ์› ํƒˆํ‡ด ๊ธฐ๋Šฅ
๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ : ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ, ์˜ค๋Š˜์˜ ์งˆ๋ฌธ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ, ํŽธ์ง€ ๋ฐ ์˜ค๋Š˜์˜ ๋‹ต๋ณ€ ์‹ ๊ณ  ๋ชฉ๋ก ์กฐํšŒ, ์‹ ๊ณ  ๋ฐ ์‹ ๊ณ  ๋ฐ˜๋ ค ์ฒ˜๋ฆฌ
์ด์ƒ์šฐ Backend - ๋„๋ฉ”์ธ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„
- ํŽธ์ง€ ์“ฐ๊ธฐ API : ํ…์ŠคํŠธ ๋ฐ ๊ทธ๋ฆผ ํŽธ์ง€ ์“ฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๋„์›Œ์ง„ ํŽธ์ง€ API : ๋„์šฐ์ง„ ํŽธ์ง€ ๊ฐœ์ˆ˜ ์กฐํšŒ, ๋– ๋‹ค๋Š” ํŽธ์ง€ ๋ฐ›๊ธฐ, ํŽธ์ง€ ๋‹ค์‹œ ๋„์šฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๋‹ต์žฅ ํŽธ์ง€ API : ๋ฐ›์€ ํŽธ์ง€ ๋‹ต์žฅ, ์ƒˆ๋กœ์šด ๋‹ต์žฅ ํ‘ธ์‹œ ์•Œ๋ฆผ, ๋‹ต์žฅ ๋ฐ›์€ ํŽธ์ง€ ๋ชฉ๋ก ์กฐํšŒ, ๋‹ต์žฅ ๋ฐ›์€ ํŽธ์ง€ ์ƒ์„ธ ์กฐํšŒ, ๋‹ต์žฅ ๋ฐ›์€ ํŽธ์ง€ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ์ˆ˜์ง‘ํ•œ ํŽธ์ง€ : ๋ฐ›์€ ํŽธ์ง€ ์ˆ˜์ง‘ํ•˜๊ธฐ, ์ˆ˜์ง‘ํ•œ ํŽธ์ง€ ๋ชฉ๋ก ์กฐํšŒ, ์ˆ˜์ง‘ํ•œ ํŽธ์ง€ ์ƒ์„ธ ์กฐํšŒ, ์ˆ˜์ง‘ํ•œ ํŽธ์ง€ ์‚ญ์ œํ•˜๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ์œ ํ•ด์„ฑ ๊ฒ€์‚ฌ Redis set ์ƒ์„ฑ API ๊ตฌํ˜„
- Redis์™€ KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ํ…์ŠคํŠธ ํŽธ์ง€ ์œ ํ•ด์„ฑ ๊ฒ€์‚ฌ API ๊ตฌํ˜„
- Google Cloud Vision API์˜ Safe Search๋ฅผ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ ํŽธ์ง€ ์œ ํ•ด์„ฑ ๊ฒ€์‚ฌ API ๊ตฌํ˜„

์ปค๋ฐ‹ ๊ทœ์น™

Git Flow ๊ด€๋ จ ์ž‘์„ฑ๋ฒ•

  • feat/[๋‹‰๋„ค์ž„]/[issue ๋ฒˆํ˜ธ]
    • ex) ๊น€๊ฐ•ํ˜ธ ์ž‘์„ฑ์‹œ, feat/kh/3

Gitlab์—์„œ Issue ์ž‘์„ฑ ๊ทœ์น™

  • Title - [FE] ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • Type - ISSUE
  • ์„ค๋ช… - ๋กœ๊ทธ์ธ INPUT ์ž‘์„ฑ / ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์ด๋ฒคํŠธ ๋“ฑ ์ž์œ  ์–‘์‹์œผ๋กœ ์„ค๋ช… ์ ๊ธฐ
  • Label - ์ค‘๋ณต์œผ๋กœ ์„ ํƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ, ์•Œ์•„์„œ ์„ ํƒํ•ด์„œ ์ž‘์„ฑํ•˜๊ธฐ
    • ex. feat ์„ ํƒ
  • ์™„๋ฃŒ ํด๋ฆญ
  • ์ด์Šˆ ๋ชฉ๋ก์—์„œ ํ• ๋‹น๋œ ์ด์Šˆ๋ฒˆํ˜ธ ํ™•์ธ ํ›„ ๋จธ์ง€๋ฆฌํ€˜์ŠคํŠธ ๋งŒ๋“ค๊ธฐ ํด๋ฆญํ•˜์—ฌ ์ฃผ์–ด์ง„ ์ด์Šˆ ๋ฒˆํ˜ธ ํ™•์ธ

Git commit type

  • feat:
    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • ex) feat: ์ด๋ฉ”์ผ ์ธ์ฆ
  • refactor:
    • ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
  • chore:
    • (์ฝ”๋“œ์˜ ์ˆ˜์ • ์—†์ด) ์„ค์ • ๋ณ€๊ฒฝ
  • fix:
    • ๋ฒ„๊ทธ ์ˆ˜์ •
  • style:
    • ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
  • docs:
    • ๋ฌธ์„œ์˜ ๋“ฑ๋ก ๋ฐ ์ˆ˜์ •
  • test:
    • ํ…Œ์ŠคํŠธ

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

Frontend

frontend
โ”œโ”€๐Ÿ“ฆpublic
โ”‚  โ””โ”€๐Ÿ“‚assets
โ”‚      โ”œโ”€๐Ÿ“‚images
โ”‚      โ”‚  โ”œโ”€๐Ÿ“‚auth
โ”‚      โ”‚  โ”œโ”€๐Ÿ“‚common
โ”‚      โ”‚  โ”œโ”€๐Ÿ“‚letter
โ”‚      โ”‚  โ”œโ”€๐Ÿ“‚mainpage
โ”‚      โ”‚  โ””โ”€๐Ÿ“‚mypage
โ”‚      โ”œโ”€๐Ÿ“‚logo
โ”‚      โ””โ”€๐Ÿ“‚video
โ”œโ”€๐Ÿ“ฆsrc
โ”‚  โ”œโ”€๐Ÿ“‚api
โ”‚  โ”œโ”€๐Ÿ“‚components
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚atoms
โ”‚  โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚landing
โ”‚  โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚letter
โ”‚  โ”‚  โ”‚  โ””โ”€๐Ÿ“‚mypage
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚molecules
โ”‚  โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚landing
โ”‚  โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚letter
โ”‚  โ”‚  โ”‚  โ””โ”€๐Ÿ“‚mypage
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚organisms
โ”‚  โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚landing
โ”‚  โ”‚  โ”‚  โ””โ”€๐Ÿ“‚mypage
โ”‚  โ”‚  โ””โ”€๐Ÿ“‚templates
โ”‚  โ”‚      โ””โ”€๐Ÿ“‚admin
โ”‚  โ”œโ”€๐Ÿ“‚constants
โ”‚  โ”œโ”€๐Ÿ“‚pages
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚admin
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚error
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚landing
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚letter_read
โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚letter_write
โ”‚  โ”‚  โ””โ”€๐Ÿ“‚mypage
โ”‚  โ”œโ”€๐Ÿ“‚recoil
โ”‚  โ”œโ”€๐Ÿ“‚styles
โ”‚  โ”‚  โ””โ”€๐Ÿ“‚fonts
โ”‚  โ””โ”€๐Ÿ“‚utils
โ”‚      โ””โ”€๐Ÿ“‚validation
โ”œโ”€๐Ÿ“œ.env
โ”œโ”€๐Ÿ“œ.firebaserc
โ”œโ”€๐Ÿ“œ.gitignore
โ”œโ”€๐Ÿ“œDockerfile
โ”œโ”€๐Ÿ“œfirebase.json
โ”œโ”€๐Ÿ“œfirestore.indexes.json
โ”œโ”€๐Ÿ“œnginx.conf
โ”œโ”€๐Ÿ“œpackage-lock.json
โ”œโ”€๐Ÿ“œpackage.json
โ””โ”€๐Ÿ“œstorage.rules

Backend

backend
โ””โ”€๐Ÿ“ฆda_ta
   โ”œโ”€๐Ÿ“ฆgradle/wrapper
   โ”œโ”€๐Ÿ“ฆsrc
   โ”‚  โ”œโ”€๐Ÿ“‚main
   โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚java
   โ”‚  โ”‚  โ””โ”€๐Ÿ“‚com/da_ta/backend
   โ”‚  โ”‚  โ”‚     โ”œโ”€๐Ÿ“‚account
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚admin
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚controller
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ”‚  โ””โ”€๐Ÿ“‚dto
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ””โ”€๐Ÿ“‚service
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚jwt
   โ”‚  โ”‚  โ”‚     โ”‚  โ””โ”€๐Ÿ“‚user
   โ”‚  โ”‚  โ”‚     โ”‚     โ”œโ”€๐Ÿ“‚controller
   โ”‚  โ”‚  โ”‚     โ”‚     โ”‚  โ””โ”€๐Ÿ“‚dto
   โ”‚  โ”‚  โ”‚     โ”‚     โ”œโ”€๐Ÿ“‚domain
   โ”‚  โ”‚  โ”‚     โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚entity
   โ”‚  โ”‚  โ”‚     โ”‚     โ”‚  โ””โ”€๐Ÿ“‚repository
   โ”‚  โ”‚  โ”‚     โ”‚     โ””โ”€๐Ÿ“‚service
   โ”‚  โ”‚  โ”‚     โ”œโ”€๐Ÿ“‚common
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚config
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚controller
   โ”‚  โ”‚  โ”‚     โ”‚  โ””โ”€๐Ÿ“‚domain
   โ”‚  โ”‚  โ”‚     โ”‚     โ””โ”€๐Ÿ“‚exception
   โ”‚  โ”‚  โ”‚     โ”œโ”€๐Ÿ“‚config
   โ”‚  โ”‚  โ”‚     โ”œโ”€๐Ÿ“‚letter
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚controller
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ””โ”€๐Ÿ“‚dto
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚domain
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚entity
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ””โ”€๐Ÿ“‚repository
   โ”‚  โ”‚  โ”‚     โ”‚  โ””โ”€๐Ÿ“‚service
   โ”‚  โ”‚  โ”‚     โ”œโ”€๐Ÿ“‚question
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚controller
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ””โ”€๐Ÿ“‚dto
   โ”‚  โ”‚  โ”‚     โ”‚  โ”œโ”€๐Ÿ“‚domain
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ”œโ”€๐Ÿ“‚entity
   โ”‚  โ”‚  โ”‚     โ”‚  โ”‚  โ””โ”€๐Ÿ“‚repository
   โ”‚  โ”‚  โ”‚     โ”‚  โ””โ”€๐Ÿ“‚service
   โ”‚  โ”‚  โ”‚     โ””โ”€๐Ÿ“‚util
   โ”‚  โ”‚  โ””โ”€๐Ÿ“‚resources
   โ”‚  โ”‚     โ”œโ”€๐Ÿ“œapplication.oauth.properties
   โ”‚  โ”‚     โ”œโ”€๐Ÿ“œapplication.properties
   โ”‚  โ”‚     โ”œโ”€๐Ÿ“œenv.properties
   โ”‚  |     โ””โ”€๐Ÿ“œdata.sql
   โ”‚  โ””โ”€๐Ÿ“‚test/java/com/da_ta/backend
   โ”œโ”€๐Ÿ“œbuild.gradle
   โ”œโ”€๐Ÿ“œDockefile
   โ”œโ”€๐Ÿ“œgradlew
   โ”œโ”€๐Ÿ“œgradlew.bat
   โ”œโ”€๐Ÿ“œJenkinsfile
   โ””โ”€๐Ÿ“œsetting.gradle