Content-Length: 338500 | pFad | http://github.com/toris-dev/Toris_Blog

AB GitHub - toris-dev/Toris_Blog: ๐Ÿ  Toris blog with Next.js ๐Ÿ 
Skip to content

toris-dev/Toris_Blog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

99 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Toris ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐ

Mermaid ๋ธ”๋กœ๊ทธ ํ”Œ๋กœ์šฐ ์ฐจํŠธ

flowchart LR
  Home[๋ฉ”์ธํ™”๋ฉด]
  SideBar(์‚ฌ์ด๋“œ๋ฐ”)
  Header(ํ—ค๋”)
  Footer(ํ‘ธํ„ฐ)
  List(๊ธ€ ๋ชฉ๋ก)

  Home --- Header
  Home --- Footer
  Home --- SideBar
  Home --- List

  Detail[๊ธ€ ์ƒ์„ธ ํ™”๋ฉด]

  TagList[ํƒœ๊ทธ ๋ชฉ๋ก ํ™”๋ฉด]
  Tag[ํƒœ๊ทธ๋ณ„ ๊ธ€ ํ™”๋ฉด]
  Category(์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ธ€ ๋ชฉ๋ก)

  Header -.-> Chatbot --- ChatbotResult -.-> Detail
  SideBar -.-> TagList -.-> Tag -.-> Detail
  SideBar -.-> Category -.-> Detail
  List -.-> Detail
Loading

Open AI ์ฑ—๋ด‡

Mermaid AI ์ฑ—๋ด‡ ์ฐจํŠธ

graph LR
  Input["์ž…๋ ฅ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก - START"]
  Output["์ถœ๋ ฅ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก - END"]
  LLM((OpenAI API))
  PostDB((Post DB))
  IsFirst{๋ฉ”์‹œ์ง€๊ฐ€ ํ•˜๋‚˜์ธ๊ฐ€?}
  System(์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€)
  Response(LLM ์‘๋‹ต ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€)
  IsFunction{LLM ์‘๋‹ต์ด ํ•จ์ˆ˜์ธ๊ฐ€?}
  PostResult(์ฐธ๊ณ ํ•  ๊ธ€ ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€)
  PostListMetadata((๊ธ€ ๋ชฉ๋ก ๋ฉ”ํƒ€ ์ •๋ณด))

  Input --> IsFirst
  IsFirst --> |YES|System --> LLM
  IsFirst --> |NO|LLM

  PostListMetadata -.-> System
  LLM --> Response
  Response --> IsFunction

  IsFunction --> |YES| PostDB --> PostResult --> LLM
  IsFunction --> |NO| Output

Loading

๊ธฐ์ˆ ์Šคํƒ

  • Next.JS 14
  • TypeScript v5
  • Open AI API
  • tailwind-css, tailwind-merge, class-variance-authority
  • tanstack/react-query
  • @uiw/react-md-editor & @uiw/react-markdown-preview
  • Supabase

OpenAI API Context

  • ๋ฉ”์‹œ์ง€ ํ•„๋“œ๋Š” ์ƒˆ๋กœ๊ณ ์นจ์‹œ ์ €์žฅ
  • ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก ๋ Œ๋”๋ง ์ฑ„ํŒ…์„ ํ•จ์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋ Œ๋”๋ง ํ•˜๋Š”๋ฐ ํ™œ์šฉ
    • ์ €์žฅ์ด ๋œ๋‹ค๋ฉด, ์œ ์ € ๋‹จ์œ„๋กœ ๋˜์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ? O
    • ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ ๋˜์—ˆ์„ ๋•Œ ์ €์žฅ๋˜์–ด์•ผ ํ• ๊นŒ? O
    • ์„œ๋ฒ„์—์„œ DB๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ? X
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ? -> O

์„ฑ๋Šฅ ์ตœ์ ํ™”

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž˜ ๋งŒ๋“ค๋ ค๋ฉด ๋ฌด์—‡์„ ์‹ ๊ฒฝ์จ์•ผ ํ• ๊นŒ?
    • LCP
    • CLS
    • FID
    • NextJS ์—์„œ SSR SSG ISR ์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ!!
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋ฌด์—‡์„ ์‹ ๊ฒฝ์จ์•ผ ํ• ๊นŒ?
    • ๋ฐ˜๋ณต๋˜๋Š” ์ผ์„ ์ž๋™ํ™” ํ•˜๊ธฐ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
    • ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ
    • ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•ด์•ผํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™ํ™”
    • ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์‹ ๊ฒฝ์จ์•ผ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์ฆ๊ฐ€
  • NextJS์— ์ตœ์ ํ™” ๋œ ์ธํ”„๋ผ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ• ๊นŒ?
    • SSR ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌํ•  ๋•Œ ์ •์ ๋ฆฌ์†Œ์Šค์™€ ๋™์ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๋ฐฐํฌ.
      • CDN ์„œ๋ฒ„ ์„ค์ • AWS CloudFront(Edge Function) CDN ์บ์‹œ๊ฐ€ ๋งŒ๋ฃŒ๋  ๋•Œ๋งˆ๋‹ค ๋™์  ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์š”์ฒญ
      • ๋™์  ๋ฆฌ์†Œ์Šค Scaling, Rolling Update
  • NextJS์— ๋งž๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์„๊นŒ?
    • client component, server components ์ ์ ˆํ•œ ๋ถ„๋ฆฌ

๊ฐœ์„ ํ•  ์ 

  • ์ ์ ˆํ•œ ์บ์‹ฑ์ž‘์—…

  • ํ”Œ๋ฆฝํšจ๊ณผ(์•ž:์ œ๋ชฉ, ์นดํ…Œ๊ณ ๋ฆฌ, ํƒœ๊ทธ ๋’ค:๋ณธ๋ฌธ)

  • ๋น„ํšŒ์›(์ž‘์„ฑ ์‹œ ID,PWD ์ž…๋ ฅ) ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (CRUD)

    • ์ˆ˜์ •, ์‚ญ์ œ์‹œ ์ž…๋ ฅํ–ˆ๋˜ ID,PWD ์ž…๋ ฅ
  • ๋ฐฉ๋ฌธ๋ก ๊ธฐ๋Šฅ ๊ตฌํ˜„ (CR)

    • ์ž‘์„ฑ ์‹œ ๋‹‰๋„ค์ž„๋งŒ ์ž‘์„ฑ
    • ์‚ญ์ œ, ์ˆ˜์ • ๋ถˆ๊ฐ€
  • ์œ„์— ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ›„ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌํ˜„


์ตœ๊ทผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ (2025๋…„ 7์›” 12์ผ)

  • ๊ธฐ๋Šฅ ์ œ๊ฑฐ ๋ฐ ๊ตฌ์กฐ ๊ฐœ์„ :
    • ๊ธฐ์กด ํฌํŠธํด๋ฆฌ์˜ค, ๊ด€๋ฆฌ์ž, ๋ฐฉ๋ช…๋ก, ์ธ์ฆ ๊ด€๋ จ ๊ธฐ๋Šฅ ๋ฐ ํŒŒ์ผ๋“ค์„ ์ œ๊ฑฐํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ„์†Œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋งˆํฌ๋‹ค์šด ์ฝ˜ํ…์ธ  ๊ตฌ์กฐ๋ฅผ ์žฌ์ •๋น„ํ•˜์—ฌ public/markdown ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— Archive, Career, Design, Learning, Personal, Projects์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • E2E ํ…Œ์ŠคํŠธ ๊ฐ•ํ™”:
    • Cypress๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์š” ํŽ˜์ด์ง€ ๋ฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ E2E ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ๋ฐ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • cypress/e2e/portfolio.cy.ts ํŒŒ์ผ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    • cypress/e2e/about.cy.ts ๋ฐ cypress/e2e/contact.cy.ts ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ About ํŽ˜์ด์ง€์™€ Contact ํผ์˜ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
    • cypress/e2e/home.cy.ts, cypress/e2e/navigation.cy.ts, cypress/e2e/blog.cy.ts, cypress/e2e/search.cy.ts ํŒŒ์ผ๋“ค์„ ํ˜„์žฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ์™€ ๊ธฐ๋Šฅ์— ๋งž์ถฐ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ๋ฐฉ๋ฒ•

  • .env ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์•„๋ž˜ ๋ณ€์ˆ˜๋“ค์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค: NEXT_PUBLIC_SUPABASE_URL= NEXT_PUBLIC_SUPABASE_ANON_KEY= NEXT_PUBLIC_OPENAI_API= NEXT_PUBLIC_ORGANIZATION_API=

  • ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ ์„ค์น˜:

    pnpm install
  • ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰:

    pnpm dev
  • Cypress E2E ํ…Œ์ŠคํŠธ ์‹คํ–‰: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด http://localhost:3000์—์„œ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • Cypress ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ UI ์—ด๊ธฐ (ํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœ ๋ฐ ๋””๋ฒ„๊น…์šฉ):
      pnpm cypress:open
    • ๋ชจ๋“  E2E ํ…Œ์ŠคํŠธ ํ—ค๋“œ๋ฆฌ์Šค ๋ชจ๋“œ๋กœ ์‹คํ–‰ (CI/CD ํ™˜๊ฒฝ์— ์ ํ•ฉ):
      pnpm cypress:run
    • ํŠน์ • E2E ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์‹คํ–‰ (์˜ˆ: home.cy.ts):
      pnpm cypress:run --spec 'cypress/e2e/home.cy.ts'
      (๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋“ค๋„ --spec ์˜ต์…˜ ๋’ค์— ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

Visitor Count

About

๐Ÿ  Toris blog with Next.js ๐Ÿ 

Resources

Stars

Watchers

Forks

Packages

No packages published








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/toris-dev/Toris_Blog

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy