Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

651 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

developer-talks v1.0

ํ”„๋ก ํŠธ 3๋ช…, ๋ฐฑ์—”๋“œ 3๋ช…
๊ฐœ๋ฐœ๊ธฐ๊ฐ„: 2023.04.19 ~ 2023.09.19
๋‚ด๋ถ€ ์ฝ”๋“œ ์ˆ˜์ • ์ง„ํ–‰ ์ค‘์ด๋ฉฐ, ์–ด๋“œ๋ฏผ์ด ๋ณ„๋„๋กœ ๊ฐœ๋ฐœ ์ค‘์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ์ฃผ์†Œ

๊ฐœ๋ฐœ ๋ฒ„์ „ : https://developer-talks.com/


aws ์˜ s3, github action์„ ์ด์šฉํ•œ ci/cd ๋ฅผ ์‚ฌ์šฉ์ค‘์ž…๋‹ˆ๋‹ค.
fcm๋“ฑ์˜ ๊ธฐ๋Šฅ์œผ๋กœ https ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์—ฌ cloudfront๋„ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ ๊ตฌ์„ฑ์›

์ด๊ฒฝ์ฃผ ์œ ํฌ์„  ๊น€์‹œ์—ฐ
@jiimy @hsgh085 @rlatldus

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

developer-talks๋Š” okky.kr ์™€ ๋น„์Šทํ•œ ์„ฑ๊ฒฉ์˜ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒŒ์‹œํŒ crud, ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ๊ณผ jwt์„ ์ด์šฉํ•œ ํ† ํฐ ๊ด€๋ฆฌ, react-hook-form์„ ์ด์šฉํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด ์ปจํŠธ๋กค์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ ,
์†Œ์ผ“, see, fcm๋“ฑ์˜ lib๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ ๊ฐ€์ด๋“œ

์ž‘์—…ํ™˜๊ฒฝ

์„ค์น˜

$ git clone https://github.com/team-web-development-projects/developer-talks-frontend.git
$ cd developer-talks-frontend
$ npm install 
$ npm run start

Stacks ๐Ÿˆ

Environment

Visual Studio Code Git Github

Development

JavaScript React

state management

redux reactquery

Communication

Discord Notion


ํ™”๋ฉด ๊ตฌ์„ฑ ๐Ÿ“บ

๋ฉ”์ธ ํŽ˜์ด์ง€ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก
์Šคํ„ฐ๋””๋ฃธ ๋งˆ์ดํŽ˜์ด์ง€

๊ทธ ์™ธ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ, ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ, ์Šคํ„ฐ๋””๋ฃธ ์ƒ์„ธ, ์œ ์ € ๊ด€๋ จ ํŽ˜์ด์ง€๋“ฑ ์ด 9 ํŽ˜์ด์ง€

์œ ์ € ๊ด€์ ์—์„œ์˜ ๊ธฐ๋Šฅ

๊ฒŒ์‹œ๊ธ€

  • ์‚ฌ์šฉ์ž๋Š” ๊ฒŒ์‹œ๊ธ€์„ ์ƒ์„ฑ, ์‚ญ์ œ, ์ˆ˜์ •, ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” Q&A์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ 2๊ฐ€์ง€ ํƒ€์ž…์˜ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ์‹œ ์ด๋ฏธ์ง€๋ฅผ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆ˜์ •์‹œ์—๋„ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ญ์ œ์‹œ ๋‹ต๋ณ€์ด ์žˆ๋Š” ๊ฒŒ์‹œ๊ธ€์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • Q&A ์ž‘์„ฑ์‹œ ๋‹ต๋ณ€ ์ค‘ ํ•˜๋‚˜์˜ ๋Œ“๊ธ€์„ ๋‹ต๋ณ€์œผ๋กœ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์ฑ„ํƒ๋œ ๋‹ต๋ณ€์€ ๋‹ค๋ฅธ ๋‹ต๋ณ€์œผ๋กœ ์ฑ„ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ž‘์„ฑ๋œ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ถ”์ฒœ์ˆ˜, ๋ถ๋งˆํฌ ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์—์„œ ์ œ๋ชฉ, ๋‚ด์šฉ์œผ๋กœ ๊ฒŒ์‹œ๊ธ€์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…

  • jwt์„ ์‚ฌ์šฉํ•˜์—ฌ refreshToken์€ localStorage์—์„œ ๊ด€๋ฆฌ. accessToken์€ redux-toolkit์„ ์ด์šฉํ•œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ด€๋ฆฌ.
  • oauth๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ.

๊ฒŒ์‹œ๊ธ€

  • ckeditor๋ฅผ ํ™œ์šฉํ•œ crud ๊ธฐ๋Šฅ
  • ์ž‘์„ฑ์‹œ ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ๊ฐ€๋Šฅ
  • ๋Œ€๋Œ“๊ธ€ ๊ธฐ๋Šฅ

์Šคํ„ฐ๋””๋ฃธ

  • ์Šคํ„ฐ๋””๋ฃธ ์ž…์žฅ์‹œ ์†Œ์ผ“ํ†ต์‹ ์„ ์ด์šฉํ•œ ์ฑ„ํŒ… ๊ธฐ๋Šฅ
์•„์‰ฌ์šด ์ 
  • ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ์‹œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ์žˆ์ง€ ์•Š์„๊นŒ

์•Œ๋ฆผ, ์ชฝ์ง€

  • sse์ฒ˜๋ฆฌ๋กœ ์‹œ์ž‘ํ•˜์˜€์œผ๋‚˜ console์— ์ฃผ๊ธฐ์ ์œผ๋กœ ๋‚˜์˜ค๋Š” ์•Œ๋ฆผ์ด ์žˆ์–ด fcm์œผ๋กœ ๋ณ€๊ฒฝ.
์•„์‰ฌ์šด ์ 
  • sse์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์€ ์ž˜๋ฌ์œผ๋‚˜ console์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์˜ค๋Š” ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐ ๋ชปํ•จ

์‚ฌ์šฉ์ž ์ •๋ณด ์ปจํŠธ๋กค

  • ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ์œ ์ €์ •๋ณด์ฐพ๊ธฐ, ์œ ์ €์ •๋ณด์ˆ˜์ •๋“ฑ ์—ฌ๋Ÿฌ๊ฐœ์˜ input์ด๋ฒคํŠธ๊ฐ€ ํฌํ•จ๋œ๊ณณ์— react-hook-form์„ ์ด์šฉํ•œ validate๋ฅผ ์‚ฌ์šฉ.
์•„์‰ฌ์šด ์ 
  • react-hook-form์˜ validation ๊ด€๋ฆฌ๋ฅผ yup์œผ๋กœ ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ ๋ถ„ํ• ์ด ๋˜์ง€ ์•Š์•˜์„๊นŒ.

์•„ํ‚คํ…์ณ

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ package-lock.json
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ jsconfig.json
โ”œโ”€โ”€ .env
โ”œโ”€โ”€ .env.development
โ”œโ”€โ”€ .env.production
โ”œโ”€โ”€ public
โ”‚   โ”œโ”€โ”€ 404.html
โ”‚   โ”œโ”€โ”€ firebase-messaging-sw.js
โ”‚   โ”œโ”€โ”€ index.html
โ”‚   โ””โ”€โ”€ favicon.ico
โ””โ”€โ”€ src
    โ”œโ”€โ”€ assets
    โ”‚   โ”œโ”€โ”€ font.scss
    โ”‚   โ”œโ”€โ”€ function.scss
    โ”‚   โ”œโ”€โ”€ index.scss
    โ”‚   โ”œโ”€โ”€ reset.scss
    โ”‚   โ”œโ”€โ”€ variable.scss
    โ”‚   โ””โ”€โ”€ common.scss
    โ”œโ”€โ”€ components
    โ”‚   โ””โ”€โ”€ ...// button์ด๋‚˜ editor์ฒ˜๋Ÿผ ์ž‘์€๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ modal๊นŒ์ง€ ์•ฝ 30๊ฐœ ์ •๋„์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    โ”œโ”€โ”€ constants
    โ”‚   โ””โ”€โ”€ api.js // ๋ฃจํŠธ ๋„๋ฉ”์ธ ๊ธฐ๋ณธ ์ •์˜
    โ”œโ”€โ”€ hooks
    โ”‚   โ”œโ”€โ”€ useOutOfClick.js
    โ”‚   โ”œโ”€โ”€ useParseJwt.js // accessToken์„ ๋””์ฝ”๋”ฉํ•˜์—ฌ ์œ ์ € ๋ฐ์ดํ„ฐ ์ถ”์ถœ
    โ”‚   โ””โ”€โ”€ useAuth.js
    โ”œโ”€โ”€ pages
    โ”‚   โ””โ”€โ”€  ...   // ์ž˜๋ชป๋œ url๋กœ ์ ‘์†ํ–ˆ์„๋•Œ NotPage๋ฅผ ํฌํ•จํ•˜์—ฌ ์•ฝ 8๊ฐœ์˜ ํŽ˜์ด์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    โ”œโ”€โ”€ store
    โ”‚   โ”œโ”€โ”€ Auth.js // jwt ํ† ํฐ ์ €์žฅ
    โ”‚   โ”œโ”€โ”€ ChatStore.js // ์ฑ„ํŒ… ์ž…๋ ฅ์‹œ ๋ฐ์ดํ„ฐ ์ž„์‹œ ์ €์žฅ
    โ”‚   โ”œโ”€โ”€ index.js 
    โ”‚   โ”œโ”€โ”€ Notification.js // ์•Œ๋ฆผ, ์ชฝ์ง€ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์ €์žฅ
    โ”‚   โ””โ”€โ”€ PageRouter.js // url ํŒ๋ณ„ ๋ฐ์ดํ„ฐ ์ž„์‹œ ์ €์žฅ
    โ”œโ”€โ”€ util
    โ”‚   โ”œโ”€โ”€ day.js // dayjs๋ฅผ ์ด์šฉํ•œ ๋‚ ์งœ ํฌ๋งท
    โ”‚   โ”œโ”€โ”€ epochConverter.js // ๋‚ ์งœ ๋น„๊ต
    โ”‚   โ”œโ”€โ”€ IsLogin.js 
    โ”‚   โ””โ”€โ”€ Util.js // isDev์™€ isPrd๋กœ dev ์™€ prdํ™˜๊ฒฝ ์ •์˜
    โ”œโ”€โ”€ App.js
    โ”œโ”€โ”€ firebase-get-token.js
    โ”œโ”€โ”€ sse.js
    โ”œโ”€โ”€ useGoogleLoginAuth.js
    โ”œโ”€โ”€ useRefreshToken.js
    โ””โ”€โ”€ index.js

Releases

Packages

Used by

Contributors

Languages