Skip to content

MaxKim-J/supreme-court-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

73 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํŒ๋ก€์š”์ง€๋ด‡(precedent_bot)

๐Ÿค–๐Ÿง๐Ÿ‘ฉ๐Ÿปโ€โš–๏ธ

last tweet

appImage

ํŠธ์œ„ํ„ฐ ํŒ๋ก€์š”์ง€๋ด‡ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ๋Š” ์ด 3๊ฐœ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ํŽธ์˜์ƒ ๋ณธ ๋ ˆํฌ์— ํ”„๋กœ์ ํŠธ์— ๊ด€ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—‚ Repo/Stack

ํŒ๋ก€๋ฅผ ์ €์žฅํ•˜๋Š” DB์™€ REST API(ํ˜„์žฌ ๋ ˆํฌ)

ํŒ๋ก€ ํฌ๋กค๋Ÿฌ์™€ ํŠธ์œ—๋ด‡์€ firebase functions๋ฅผ ์ด์šฉํ•œ ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ณ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒ๋ก€์š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ React ์•ฑ์›น์ž…๋‹ˆ๋‹ค.

๐Ÿ“– Key Note

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

  • ํŠธ์œ—๋ด‡์€ ํŠธ์œ„ํ„ฐ ๊ณ„์ •์„ ํ†ตํ•ด ํ•˜๋ฃจ์— 3๋ฒˆ ๋Œ€ํ•œ๋ฏผ๊ตญ ๋ฒ•์› ๋ฒ•๋ น์ •๋ณด ์‚ฌ์ดํŠธ์—์„œ ํฌ๋กค๋งํ•ด์˜จ ํŒ๋ก€์š”์ง€ ํ•œ ๋‹จ๋ฝ์„ ํŠธ์œ—ํ•ฉ๋‹ˆ๋‹ค.
  • ํฌ๋กค๋Ÿฌ๋Š” ๋ฒ•๋ น์ •๋ณด ์‚ฌ์ดํŠธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ด€์ฐฐํ•˜์—ฌ ํŒ๋ก€์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚œ ๊ฒฝ์šฐ์— ์ƒˆ๋กœ์šด ํŒ๋ก€๋ฅผ ํฌ๋กค๋งํ•ด์„œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ POST ์š”์ฒญ, DB๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ํŒ๋ก€์š”์ง€ ๋‚ด์šฉ์€ ํŠธ์œ„ํ„ฐ๋กœ ํŠธ์œ—ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธ€์ž์ˆ˜๋ฅผ ๋„˜๊ธฐ๋ฏ€๋กœ, ๋ด‡์˜ ํŠธ์œ—์—๋Š” ํŒ๋ก€์˜ ์ œ๋ชฉ๊ณผ ํ•จ๊ฒŒ ํŒ๋ก€์š”์ง€ ๋‚ด์šฉ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์›น์•ฑ์˜ ๋งํฌ๋ฅผ ๊ฐ™์ด ํŠธ์œ—ํ•ฉ๋‹ˆ๋‹ค.

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

๊ตฌ์กฐ

์Šคํƒ, ๊ตฌํ˜„ ํฌ์ธํŠธ

์„œ๋ฒ„

  • TDD๋ฅผ ๋„์ž…ํ•˜์—ฌ, jest๋ฅผ ์ด์šฉํ•ด ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. 4๊ฐœ์˜ suite, 39๊ฐœ์˜ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.
  • EC2์— ์ง์ ‘ postgreSQL์„ ์„ค์น˜ํ•˜์—ฌ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด pm2๋„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • generic, @types, global, class ๋“ฑ TypeScript์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์—ฌ monolithicํ•œ ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋„๋ฉ”์ธ์„ ๊ตฌ์ž…ํ•˜๊ณ  AWS์—์„œ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ https๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„๋ฆฌ์Šค

  • firebase functions๋กœ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋ฅผ ๋ฐฐํฌํ•˜๊ณ , GCP scheduler๋กœ ์Šค์ผ€์ฅด๋งํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Headless ๋ธŒ๋ผ์šฐ์ € puppeteer์„ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„๋ฆฌ์Šค ํฌ๋กค๋ง ๋ด‡์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • twitter developer API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ์—์„œ ๋‚ด์šฉ์„ ๋ฐ›์•„ ํŠธ์œ— ๋ด‡์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • class ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜์— ํ•„์š”ํ•œ ๋™์ž‘๋“ค๊ณผ ์ž์›๋“ค์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ

  • Create React App์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ฆฌ์•กํŠธ ์•ฑ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • React.lazy, suspense๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Redux๋ฅผ ์ด์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ, Redux Saga๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ ๋กœ์ง์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • redux store๋ฅผ ์ด์šฉํ•œ fetchEntity ํŒจํ„ด์„ ๋„์ž…ํ•ด ๋น„๋™๊ธฐ ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  • vercel์„ ์ด์šฉํ•ด ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํŠธ์œ„ํ„ฐ ํฌ์ŠคํŒ…์—์„œ ์ธ๋„ค์ผ ๋“ฑ์ด ์ œ๋Œ€๋กœ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”ํƒ€ํƒœ๊ทธ๋ฅผ ์ปค์Šคํ…€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ์—…๋ฐ์ดํŠธ

  • DB์— ์žˆ๋Š” ํŒ๋ก€ ์ •๋ณด๋“ค์„ ๊ตฌ์กฐํ™”๋œ pdf๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜ ์ถ”๊ฐ€(ํŒ๋ก€ ๋‚ด์šฉ์„ ์ฑ…์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด)
  • ๋ฒˆ๋“ค๋งํ•˜๊ธฐ
  • ์‰ฌ์šด ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ CI/CD ๊ตฌ์„ฑํ•˜๊ธฐ
  • docker ์…‹์—…ํ•˜๊ธฐ
  • RDS๋กœ DB์ด๊ด€ํ•˜๊ธฐ
  • firebase์— ์žˆ๋Š” ํฌ๋กค๋Ÿฌ๋“ค lambda๋กœ ์ด๊ด€ํ•˜๊ธฐ

๐Ÿ“ˆ ๋ฐ์ดํ„ฐ ์ถœ์ฒ˜

๋Œ€ํ•œ๋ฏผ๊ตญ ๋ฒ•์› ์ข…ํ•ฉ๋ฒ•๋ฅ ์ •๋ณด

About

๐Ÿ‘ฉ๐Ÿปโ€โš–๏ธ ๋Œ€๋ฒ•์› ํŒ๋ก€ ํŠธ์œ—๋ด‡ REST API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published