Skip to content

SSambee/ssambee-be

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

1,114 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

SSam B Logo

SSam B ๋ฐฑ์—”๋“œ

ํ•™์›/์ˆ˜์—… ์šด์˜์„ ์œ„ํ•œ ํ†ตํ•ฉ ํ”Œ๋žซํผ์˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„

Express ๊ธฐ๋ฐ˜ REST API ์„œ๋ฒ„๋กœ, ๊ฐ•์‚ฌ/์กฐ๊ต/ํ•™์ƒ/ํ•™๋ถ€๋ชจ์˜ ๊ต์œก ์šด์˜ ํ๋ฆ„์„ ํ•˜๋‚˜์˜ API๋กœ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฑ์—”๋“œ ๋ฐฐํฌ ๋งํฌ
Frontend Repo Backend Repo Deployed

๐Ÿ“‹ ๋ชฉ์ฐจ


โœจ ํ•ต์‹ฌ ์—ญํ• 

  • ํšŒ์›/๊ถŒํ•œ/์ธ์ฆ ๊ด€๋ฆฌ: Better Auth ๊ธฐ๋ฐ˜์˜ ์„ธ์…˜ ๊ด€๋ฆฌ, ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๋ฐ ์—ญํ• ์— ๋”ฐ๋ฅธ API ์ ‘๊ทผ ์ œ์–ด
  • ์ˆ˜๊ฐ• ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ: ๊ฐ•์˜, ์ˆ˜๊ฐ•์ƒ, ์„ฑ์ , ๊ณผ์ œ, ์ถœ๊ฒฐ, ๊ฒŒ์‹œ๊ธ€, ์ผ์ • ๋“ฑ์˜ ๊ต์œก ์šด์˜ ๋ฐ์ดํ„ฐ ์ค‘์•™ ๊ด€๋ฆฌ
  • ์Šคํ† ๋ฆฌ์ง€ ์—ฐ๋™: ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์ •์  ์ž๋ฃŒ ์ œ๊ณต์„ ์œ„ํ•œ AWS S3 / CloudFront ์—ฐ๋™
  • ์šด์˜ ํ™•์žฅ์„ฑ: ๋ผ์šฐํŠธ/์„œ๋น„์Šค/๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ช…ํ™•ํ•œ ๋ถ„๋ฆฌ์™€ ์˜์กด์„ฑ ์ฃผ์ž…(DI)์„ ํ†ตํ•œ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ํ™•์žฅ์„ฑ ํ™•๋ณด
  • ๋ชจ๋‹ˆํ„ฐ๋ง ์—ฐ๋™: Sentry, Nodemailer ๋“ฑ ์•Œ๋ฆผ/๋กœ๊ทธ/๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ•

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

๋ถ„๋ฅ˜ ์Šคํƒ
Backend Node.js Express TypeScript Prisma Better Auth Jest
Database PostgreSQL Redis
Infra AWS Docker Nginx Sentry Terraform Fail2ban Certbot

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๋ฐ API ๊ตฌ์กฐ

Express์™€ Prisma ๊ธฐ๋ฐ˜์˜ 3๊ณ„์ธต ์•„ํ‚คํ…์ณ(Controller - Service - Repository)์™€ ์˜์กด์„ฑ ์ฃผ์ž…(DI) ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ, ๋กœ์ง์˜ ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ  ๊ต์ฒด ๋ฐ ํ™•์žฅ์ด ์œ ๋ฆฌํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

ํด๋” ๊ตฌ์กฐ

src/
โ”œโ”€โ”€ app.ts                  # ๐Ÿš€ ์•ฑ ๋ถ€ํŒ…, ๋ฏธ๋“ค์›จ์–ด, ๋ผ์šฐํŒ… ๋ฐ ์ข…๋ฃŒ ์ œ์–ด
โ”œโ”€โ”€ config/                 # โš™๏ธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜, DB, Redis, Auth ๊ตฌ์„ฑ
โ”œโ”€โ”€ routes/                 # ๐Ÿ›ค๏ธ ์—”๋“œํฌ์ธํŠธ ๋ผ์šฐํŒ… (mgmt, svc, public)
โ”œโ”€โ”€ controllers/            # ๐ŸŽฎ HTTP ์š”์ฒญ ๋ฐ ์‘๋‹ต ์ œ์–ด
โ”œโ”€โ”€ services/               # ๐Ÿ’ผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”œโ”€โ”€ repos/                  # ๐Ÿ—„๏ธ Prisma ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ(Repository)
โ”œโ”€โ”€ validations/            # โœ… Zod ๊ธฐ๋ฐ˜ ์š”์ฒญ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
โ”œโ”€โ”€ middlewares/            # ๐Ÿ›ก๏ธ ์ธ์ฆ, ๋กœ๊น…, ์—๋Ÿฌ ํ•ธ๋“ค๋ง, ํƒ€์ด๋จธ ๋“ฑ ๋ฏธ๋“ค์›จ์–ด
โ””โ”€โ”€ utils/                  # ๐Ÿ› ๏ธ ๊ณต์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ (๋ฉ”์ผ, ๋ชจ๋‹ˆํ„ฐ๋ง, ๋‚ ์งœ ๋“ฑ)
prisma/
โ””โ”€โ”€ schema.prisma           # ๐Ÿ“ DB ์Šคํ‚ค๋งˆ ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ ์ •์˜

์˜์กด์„ฑ ์ฃผ์ž…(DI): ํ”„๋ ˆ์ž„์›Œํฌ DI ์ปจํ…Œ์ด๋„ˆ ์—†์ด๋„ ๋ผ์šฐํ„ฐ ํŒฉํ† ๋ฆฌ, ์„œ๋น„์Šค ์ƒ์„ฑ์ž ๊ธฐ๋ฐ˜์œผ๋กœ ๋ช…์‹œ์  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ง์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฌ์›Œ์ง€๋ฉฐ, ๊ธฐ๋Šฅ ์ถ”๊ฐ€/์ˆ˜์ • ์‹œ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

API ๋ถ„๋ฅ˜

๋ฐฑ์—”๋“œ์˜ ๋ผ์šฐํŒ…(Base: /api/{domain}/v1)์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋„๋ฉ”์ธ์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์„œ๋น„์Šค๋Š” GET /health ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ƒํƒœ ์ฒดํฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  1. mgmt (๊ฐ•์‚ฌ/์กฐ๊ต ์šด์˜ API):
    • ์šด์˜๊ถŒํ•œ ์‚ฌ์šฉ์ž ๋Œ€์ƒ ๊ธฐ๋Šฅ์„ ๋ฌถ์Œ
    • ๋ผ์šฐํŠธ: /lectures, /enrollments, /exams, /assignment-results, /grades, /materials, /instructor-posts, /student-posts, /dashboard ๋“ฑ
  2. svc (ํ•™์ƒ/ํ•™๋ถ€๋ชจ ์„œ๋น„์Šค API):
    • ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๊ด€์ ์˜ ์„œ๋น„์Šค(์กฐํšŒ, ์ œ์ถœ ๋“ฑ)์— ์ง‘์ค‘
    • ๋ผ์šฐํŠธ: /enrollments, /children, /grades, /clinics, /student-posts, /me, /uploads ๋“ฑ
  3. public (๊ณต๊ฐœ ์ธ์ฆ API):
    • ๋น„๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ ์ง„์ž…๋กœ
    • ๋ผ์šฐํŠธ: /auth (ํšŒ์› ๊ฐ€์ž…, ์ด๋ฉ”์ผ ์ธ์ฆ, ๋กœ๊ทธ์ธ)

๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ๋„๋ฉ”์ธ

์‚ฌ์šฉ์ž ๊ณ„์ธต(User, Instructor, Assistant, AppStudent, AppParent)์„ ์ค‘์‹ฌ์œผ๋กœ ์šด์˜ ์ฃผ์ฒด์™€ ์„œ๋น„์Šค ์ด์šฉ ์ฃผ์ฒด๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ํฌ๊ฒŒ 5๊ฐœ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„๋ฉ”์ธ ๋‹ค์ด์–ด๊ทธ๋žจ ํŽผ์ณ๋ณด๊ธฐ
flowchart LR
  subgraph A["์œ ์ € & ์ธ์ฆ/์ธ๊ฐ€"]
    User["User (Better Auth)"] --> Session
    User --> Account
    User --> AppStudent
    User --> AppParent
    User --> Instructor
    User --> Assistant
    AppParent --> ParentChildLink
    Instructor --> AssistantCode
    VerificationCode
  end

  subgraph B["์ˆ˜์—…"]
    Instructor --> Lecture
    Instructor --> Enrollment
    Enrollment -. optional .-> AppStudent
    Enrollment -. optional .-> ParentChildLink
    Enrollment --> LectureEnrollment
    Lecture --> LectureEnrollment
    Lecture --> LectureTime
    LectureEnrollment --> Attendance
  end

  subgraph C["์‹œํ—˜ & ๊ณผ์ œ"]
    Lecture --> Exam
    Exam --> Question
    Question --> StudentAnswer
    Exam --> Grade
    Grade --> GradeReport
    Lecture --> Assignment
    Assignment --> AssignmentResult
    Exam --> Clinic
    LectureEnrollment --> Clinic
  end

  subgraph D["์†Œํ†ต"]
    Instructor --> InstructorPost
    Lecture --> InstructorPost
    InstructorPost --> InstructorPostTarget
    Enrollment --> InstructorPostTarget
    Enrollment --> StudentPost
    InstructorPost --> Comment
    StudentPost --> Comment
    InstructorPost --> InstructorPostAttachment
    Comment --> CommentAttachment
  end

  subgraph E["์œ ํ‹ธ๋ฆฌํ‹ฐ"]
    Instructor --> ScheduleCategory
    ScheduleCategory --> Schedule
    Instructor --> Material
    Lecture --> Material
    Instructor --> AssistantOrder
    Assistant --> AssistantOrder
    AssistantOrder --> OrderAttachment
    Material -. optional .-> OrderAttachment
  end

  %% cross-cutting (attachments reuse)
  Material -. optional .-> InstructorPostAttachment
  Material -. optional .-> CommentAttachment
Loading

๋„๋ฉ”์ธ ๊ตฌ์„ฑ ๋ฐ ํŠน์ง•
์œ ์ € & ์ธ์ฆ/์ธ๊ฐ€ Better Auth ๊ธฐ๋ณธ ๋ชจ๋ธ ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์‹๋ณ„. ํ”Œ๋žซํผ ์ „์šฉ ํ™•์žฅ ๋ฉ”ํƒ€ ์ œ๊ณต.
์ˆ˜์—… ์šด์˜ ๊ณ„์—ด Enrollment โ†” Lecture โ†” LectureEnrollment/Attendance
์‹œํ—˜ & ๊ณผ์ œ ๊ณ„์—ด ์‹œํ—˜, ๊ณผ์ œ ํ‰๊ฐ€ ์‚ฐ์ถœ ๋ฐ ๋ฆฌํฌํŠธ, ๋ณด์™„ํ•™์Šต(Clinic)
์†Œํ†ต ๊ณ„์—ด ๊ณต์ง€, ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ(InstructorPost, StudentPost, Comment)
์ž์› ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ž๋ฃŒํ•จ(Material), ์ผ์ •(Schedule), ์กฐ๊ต ์—…๋ฌด ์ง€์‹œ

๐Ÿ” ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ์ฒ˜๋ฆฌ ํ”Œ๋กœ์šฐ

๐Ÿ‘‰ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ์ฒ˜๋ฆฌ ํ”Œ๋กœ์šฐ ๋‹ค์ด์–ด๊ทธ๋žจ ๋ณด๊ธฐ
sequenceDiagram
    participant Client as ํด๋ผ์ด์–ธํŠธ (Frontend)
    participant Server as ์„œ๋ฒ„ (Better Auth)
    participant DB as ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

    rect rgb(240, 240, 240)
    Note over Client, DB: 1. ์ธ์ฆ ๋‹จ๊ณ„ (Authentication - ๋กœ๊ทธ์ธ)
    Client->>Server: 1. ๋กœ๊ทธ์ธ ์š”์ฒญ (signIn.email ๋“ฑ)
    Server->>DB: 2. ์ž๊ฒฉ ์ฆ๋ช…(์•„์ด๋””/๋น„๋ฐ€๋ฒˆํ˜ธ) ํ™•์ธ
    DB-->>Server: 3. ๊ฒ€์ฆ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
    Server->>DB: 4. ์„ธ์…˜(Session) ์ƒ์„ฑ ๋ฐ ์ €์žฅ
    Server-->>Client: 5. HttpOnly ์ฟ ํ‚ค ๋ฐœ๊ธ‰ (Set-Cookie) ๋ฐ ์‘๋‹ต ๋ฐ˜ํ™˜
    end

    rect rgb(240, 248, 255)
    Note over Client, DB: 2. ์ธ๊ฐ€ ๋‹จ๊ณ„ (Authorization - ๋ณดํ˜ธ๋œ ์ž์› ์ ‘๊ทผ)
    Client->>Server: 6. ๋ณดํ˜ธ๋œ API/ํŽ˜์ด์ง€ ์š”์ฒญ (๋ฐœ๊ธ‰๋œ ์ฟ ํ‚ค ์ž๋™ ํฌํ•จ)
    Server->>DB: 7. ์ฟ ํ‚ค ๋‚ด ์„ธ์…˜ ID ์œ ํšจ์„ฑ ๋ฐ ๊ถŒํ•œ ํ™•์ธ
    DB-->>Server: 8. ์ธ๊ฐ€(Authorization) ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
    alt ๊ถŒํ•œ ์žˆ์Œ (์œ ํšจํ•œ ์„ธ์…˜)
        Server-->>Client: 9. ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ์‘๋‹ต
    else ๊ถŒํ•œ ์—†์Œ (๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์„ธ์…˜)
        Server-->>Client: 9. 401/403 ์—๋Ÿฌ ๋ฐ˜ํ™˜ (์ ‘๊ทผ ๊ฑฐ๋ถ€)
    end
    end
Loading

๋ณด์•ˆ ์ฒ˜๋ฆฌ ํ๋ฆ„:

  1. ๋ณดํ˜ธ ๋ผ์šฐํŠธ๋กœ ์ ‘๊ทผํ•  ๋•Œ ๋ฏธ๋“ค์›จ์–ด ์ฒด์ธ์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
  2. requireAuth: ์š”์ฒญ ํ—ค๋”์—์„œ ์„ธ์…˜์„ ์กฐํšŒํ•ด ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด 401 ๋ฐ˜ํ™˜.
  3. ์œ ํšจํ•œ ์„ธ์…˜์€ req.user, req.profile, req.authSession์— ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.
  4. ๊ถŒํ•œ ์ธ๊ฐ€: ์ดํ›„ requireInstructor, requireStudent ๋“ฑ์˜ ๊ถŒํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ํƒ€์ž…์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  5. ํŠน์ˆ˜ ์กฐ๊ฑด: ์กฐ๊ต(ASSISTANT)์˜ ๊ฒฝ์šฐ ์„œ๋ช… ์Šน์ธ(signStatus === SIGNED) ์ƒํƒœ๊นŒ์ง€ ํ™•์ธํ•˜์—ฌ ์ ‘๊ทผ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  6. ์ธํ”„๋ผ ์ตœ์ ํ™”: Better Auth๋ฅผ ํ™œ์šฉํ•ด ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ์ฟ ํ‚ค(์šด์˜ ํ™˜๊ฒฝ), trust origin ์„ค์ •(FRONT_URL ๊ธฐ๋ฐ˜)์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ ํ™˜๊ฒฝ์—์„œ์˜ ์„ธ์…˜ ์ฟ ํ‚ค ์œ ์‹ค ๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฌธ์ œ(์ฆ์ƒ): ํ”„๋ก ํŠธ์—”๋“œ(www)์™€ ๋ฐฑ์—”๋“œ(api) ๋ถ„๋ฆฌ ํ™˜๊ฒฝ์—์„œ, ๋กœ๊ทธ์ธ ์‹œ Set-Cookie๋Š” ์ •์ƒ ๋ฐœ๊ธ‰๋˜๋‚˜ ์ดํ›„ ๋ณดํ˜ธ๋œ ๋ผ์šฐํŠธ(์„ธ์…˜ ์กฐํšŒ ๋“ฑ) ์š”์ฒญ์— ์ฟ ํ‚ค๊ฐ€ ์‹ค๋ฆฌ์ง€ ์•Š์•„ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์—์„œ ํƒˆ๋ฝ(401)ํ•˜๋Š” ์ฆ์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์›์ธ: Better Auth ์ฟ ํ‚ค๊ฐ€ ๋‹จ์ผ ๋„๋ฉ”์ธ ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ์„œ๋ธŒ๋„๋ฉ”์ธ ๊ฐ„ ๊ณต์œ ๊ฐ€ ๋˜์ง€ ์•Š์•˜๊ณ , ์„ธ์…˜ ์กฐํšŒ ์‹คํŒจ ์‹œ ์ฆ‰๊ฐ์ ์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฐ•ํ•œ ๋กœ์ง์ด ๋งž๋ฌผ๋ ธ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•: AUTH_COOKIE_DOMAIN ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ crossSubDomainCookies ์˜ต์…˜์„ ํ™œ์šฉํ•˜์—ฌ ์šด์˜ ํ™˜๊ฒฝ ๊ณตํ†ต ๋„๋ฉ”์ธ(.ssambee.com)์„ ๊ธฐ์ค€์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋„๋ก ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋กœ๊ทธ์•„์›ƒ ๋“ฑ ์„ธ์…˜ ์ฟ ํ‚ค ์‚ญ์ œ ์‹œ์—๋„ ๋„๋ฉ”์ธ ์ •ํ•ฉ์„ฑ์„ ๋งž์ถ”์–ด ๋‹ค์ค‘ ์„œ๋ธŒ๋„๋ฉ”์ธ ํ™˜๊ฒฝ ์ „์ฒด์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์„ธ์…˜์„ ์œ ์ง€ํ•˜๋„๋ก ์กฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿš€ ์‹คํ–‰ ๋ฐ ๋ฐฐํฌ

๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ฐ ์‹คํ–‰

# ์˜์กด์„ฑ ์„ค์น˜
$ pnpm install

# ๋กœ์ปฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
$ pnpm dev

# ๋นŒ๋“œ
$ pnpm build

# ์šด์˜ ๋นŒ๋“œ ์‹คํ–‰
$ pnpm start

# ํ…Œ์ŠคํŠธ ์‹คํ–‰
$ pnpm test

์„œ๋ฒ„ ๋ถ€ํŒ… ๋ฐ ๋ฐฐํฌ

  • ์•ฑ ๋ถ€ํŒ… ํ๋ฆ„: (1) ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ฒ€์ฆ โ†’ (2) Sentry ์ดˆ๊ธฐํ™” โ†’ (3) ๋ณด์•ˆ/CORS ์„ค์ • โ†’ (4) ๋ผ์šฐํ„ฐ ๋ฐ ํŒŒ์‹ฑ ๋ฏธ๋“ค์›จ์–ด ๋“ฑ๋ก โ†’ (5) ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ ์„ธํŒ… โ†’ (6) Graceful Shutdown
  • ๋ฐฐํฌ ์•„ํ‚คํ…์ณ: docker-compose.yml ๊ธฐ์ค€์œผ๋กœ Nginx์™€ Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ(SIGTERM/SIGINT) ์ˆ˜์‹  ์‹œ ๋ผ์šฐํŒ…์„ ์ค‘๋‹จํ•˜๊ณ  ์ˆ˜์‹ ๋œ ๊ธฐ์กด ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์นœ ๋’ค DB ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • ์ธํ”„๋ผ ์„ ํƒ์  ์—ฐ๋™: .env ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ Sentry(์—๋Ÿฌ ์ถ”์ ), Redis, AWS ์—ฐ๋™์€ ์ œ๊ณต๋œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ์‹œ์—๋งŒ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›ธ ํŒ€ ์†Œ๊ฐœ

๐Ÿ‘‘ ๋ฐ•์ฐฝ๊ธฐ ์ด์œ ๋ฆฌ ์ž„๊ฒฝ๋ฏผ ๊น€์œค๊ธฐ
์ฐฝ๊ธฐ ์œ ๋ฆฌ ๊ฒฝ๋ฏผ ์œค๊ธฐ
PM & ํ”„๋ก ํŠธ ํ”„๋ก ํŠธ ๋ฐฑ์—”๋“œ ๋ฐฑ์—”๋“œ & ๋ฐฐํฌ

Made with โค๏ธ by SSam B Team

About

Education Operations BE

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages