๐ ์จ๋ผ์ธ ์๊ฐ ์ ์ฒญ ํผ - ๊ฐ์ข ์ ํ๋ถํฐ ๊ฒฐ์ ์๋ด๊น์ง
course-enrollment-form-laravel
๋ฌธ์ ์ค๋ช
๐ ํ๋ก์ ํธ ์๊ฐ
๊ต์ก ๊ธฐ๊ด์ด๋ ํ์, ์จ๋ผ์ธ ๊ฐ์ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ ์๊ฐ ์ ์ฒญ ํผ์ ๋ง๋ญ๋๋ค. ์ฌ์ฉ์๋ ๊ฐ์ค๋ ๊ฐ์ข ๋ชฉ๋ก์ ํ์ธํ๊ณ , ์ํ๋ ๊ฐ์ข๋ฅผ ์ ํํ์ฌ ์๊ฐ ์ ์ฒญ์๋ฅผ ์์ฑํฉ๋๋ค. ์ ์ฒญ์ด ์๋ฃ๋๋ฉด ์๋์ผ๋ก ์ ์ฒญ ๋ด์ญ์ ํ์ธํ ์ ์๋ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
โ ํ์ ๊ธฐ๋ฅ
- ๊ฐ์ข ๋ชฉ๋ก ํ์ด์ง: ๊ฐ์ค๋ ๊ฐ์ข ๋ฆฌ์คํธ (์ ๋ชฉ, ๊ฐ์ฌ๋ช , ์๊ฐ๋ฃ, ์ ์) ํ์
- ์๊ฐ ์ ์ฒญ ํผ: ์ด๋ฆ, ์ด๋ฉ์ผ, ์ ํ๋ฒํธ, ์ ํํ ๊ฐ์ข ์ ๋ ฅ
- ์ ์ฒญ ๋ด์ญ ์ ์ฅ: SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฒญ ์ ๋ณด ์ ์ฅ
- ์ ์ฒญ ์๋ฃ ํ์ด์ง: ์ ์ฒญํ ๊ฐ์ข ์ ๋ณด & ๊ฒฐ์ ์๋ด ๋ฉ์์ง ํ์
- ๋ฐ์ํ UI: Tailwind CSS๋ก ๋ชจ๋ฐ์ผ/๋ฐ์คํฌํฑ ๋ชจ๋ ๊น๋ํ๊ฒ
๐ ์ ํ ์ถ๊ฐ ๊ธฐ๋ฅ (๋ณด๋์ค)
- ๊ฐ์ข ๊ฒ์ ๊ธฐ๋ฅ (๊ฐ์ข๋ช , ๊ฐ์ฌ๋ช ์ผ๋ก ํํฐ๋ง)
- ์ ์ ์ด๊ณผ ์ "๋ง๊ฐ" ๋ฐฐ์ง ํ์
- ์ ์ฒญ ๋ด์ญ ๋ชฉ๋ก ํ์ด์ง (๊ด๋ฆฌ์์ฉ ๊ฐ๋จ ๋ฆฌ์คํธ)
- ์ด๋ฉ์ผ ํ์ ์ ํจ์ฑ ๊ฒ์ฌ (Laravel Validation)
- ์ ์ฒญ ์ ์๋์ผ๋ก ๊ณ ์ ์ ์ฒญ๋ฒํธ ์์ฑ
๐ฏ ํ์ต ๋ชฉํ
- Laravel 13.x ํ๋ก์ ํธ ์ด๊ธฐ ์ค์ (SQLite ์ฐ๊ฒฐ)
- Blade ํ ํ๋ฆฟ์ผ๋ก ํผ & ๋ฆฌ์คํธ UI ๊ตฌ์ฑ
- ๋ผ์ฐํธ์ ์ปจํธ๋กค๋ฌ๋ก ์์ฒญ ์ฒ๋ฆฌ
- Eloquent ๋ชจ๋ธ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค CRUD ์กฐ์
- Tailwind CSS๋ก ์ค์ฉ์ ์ธ UI ๋์์ธ
์ ์ฝ ์กฐ๊ฑด
- โข Laravel 13.x ํ๋ ์์ํฌ ์ฌ์ฉ (์ต์ ๋ฒ์ ํ์)
- โข Blade ํ ํ๋ฆญ ์์ง์ผ๋ก UI ๊ตฌ์ฑ (React/Vue ๋ฑ SPA ๊ธ์ง)
- โข SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ (์ค์ ๊ฐ๋จ, ํ์ผ ๊ธฐ๋ฐ)
- โข Tailwind CSS๋ก ์คํ์ผ๋ง (CDN ๋๋ Vite ๋น๋)
- โข ๋ผ์ฐํธ๋ web.php์ ์ ์
- โข ์ปจํธ๋กค๋ฌ๋ app/Http/Controllers์ ์์ฑ
- โข ๋ชจ๋ธ์ app/Models์ ์์ฑ
- โข ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ๋ก ํ ์ด๋ธ ์คํค๋ง ๊ด๋ฆฌ
ํ๋กฌํํธ ๋ ์ํผ
์๋ ํ๋กฌํํธ๋ฅผ ์์๋๋ก AI์๊ฒ ๋ณด๋ด๋ฉด ๋ฉ๋๋ค. ๋ณต์ฌ ๋ฒํผ์ ๋๋ฌ ๋ฐ๋ก ์ฌ์ฉํ์ธ์.
mkdir course-enrollment-form-laravel && cd course-enrollment-form-laravel ์ด ํด๋์์ Laravel 13.x ํ๋ก์ ํธ๋ฅผ ์์ํฉ๋๋ค. Laravel 13.x ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐ ์ค์ ์ ์๋ฃํด์ฃผ์ธ์. **์๊ตฌ์ฌํญ:** 1. Laravel 13.x ์ต์ ๋ฒ์ ์ผ๋ก ํ๋ก์ ํธ ์์ฑ (composer create-project laravel/laravel . ๋๋ Laravel installer ์ฌ์ฉ) 2. .env ํ์ผ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ SQLite๋ก ์ค์ : - DB_CONNECTION=sqlite - DB_DATABASE ๊ฒฝ๋ก๋ฅผ database/database.sqlite๋ก ์ง์ - database/database.sqlite ํ์ผ ์์ฑ (touch database/database.sqlite ๋๋ ๋น ํ์ผ ์์ฑ) 3. Tailwind CSS ์ค์ : - npm install -D tailwindcss postcss autoprefixer - npx tailwindcss init -p - tailwind.config.js์ content ๋ฐฐ์ด์ Blade ํ์ผ ๊ฒฝ๋ก ์ถ๊ฐ: './resources/**/*.blade.php', './resources/**/*.js' - resources/css/app.css์ Tailwind ๋๋ ํฐ๋ธ ์ถ๊ฐ (@tailwind base; @tailwind components; @tailwind utilities;) 4. Vite ๋น๋ ์ค์ ํ์ธ (vite.config.js์์ Laravel ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ) 5. npm install && npm run dev ์คํํ์ฌ Tailwind ๋น๋ ํ์ธ **ํ์ธ ๋ฐฉ๋ฒ:** - php artisan serve ์คํ ์ Laravel ๊ธฐ๋ณธ ํ๋ฉด์ด ์ ์์ ์ผ๋ก ํ์๋์ด์ผ ํจ - database/database.sqlite ํ์ผ์ด ์กด์ฌํด์ผ ํจ - npm run dev ์คํ ์ Tailwind CSS๊ฐ ์ ์์ ์ผ๋ก ๋น๋๋์ด์ผ ํจ
๊ธฐ๋ ๊ฒฐ๊ณผ: Laravel 13.x ํ๋ก์ ํธ๊ฐ ์์ฑ๋๊ณ , SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ด ์ค๋น๋๋ฉฐ, Tailwind CSS๊ฐ ์ค์ ๋์ด ๊ฐ๋ฐ ์๋ฒ๊ฐ ์ ์ ์๋ํฉ๋๋ค.
์๊ฐ ์ ์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ค๊ณํ๊ณ ์์ฑํด์ฃผ์ธ์. **์๊ตฌ์ฌํญ:** 1. ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ ์์ฑ: - php artisan make:migration create_courses_table (๊ฐ์ข ํ ์ด๋ธ) - php artisan make:migration create_enrollments_table (์๊ฐ ์ ์ฒญ ํ ์ด๋ธ) 2. **courses ํ ์ด๋ธ ์คํค๋ง** (database/migrations/xxxx_create_courses_table.php): - id: bigint, primary key, auto increment - title: string, ๊ฐ์ข๋ช (์: "์น ๊ฐ๋ฐ ๊ธฐ์ด", "ํ์ด์ฌ ๋ฐ์ดํฐ ๋ถ์") - instructor: string, ๊ฐ์ฌ๋ช - price: integer, ์๊ฐ๋ฃ (์ ๋จ์) - capacity: integer, ์ ์ - enrolled_count: integer, ํ์ฌ ์ ์ฒญ ์ธ์ (๊ธฐ๋ณธ๊ฐ 0) - timestamps (created_at, updated_at) 3. **enrollments ํ ์ด๋ธ ์คํค๋ง** (database/migrations/xxxx_create_enrollments_table.php): - id: bigint, primary key, auto increment - course_id: bigint, foreign key โ courses.id (onDelete cascade) - name: string, ์ ์ฒญ์ ์ด๋ฆ - email: string, ์ ์ฒญ์ ์ด๋ฉ์ผ - phone: string, ์ ์ฒญ์ ์ ํ๋ฒํธ - enrollment_number: string, ๊ณ ์ ์ ์ฒญ๋ฒํธ (์: "ENR-20250101-0001") - timestamps 4. ๋ง์ด๊ทธ๋ ์ด์ ์คํ: - php artisan migrate 5. ์๋(Seeder) ์์ฑํ์ฌ ํ ์คํธ ๊ฐ์ข ๋ฐ์ดํฐ ์ถ๊ฐ: - php artisan make:seeder CourseSeeder - CourseSeeder์์ 5๊ฐ ์ ๋์ ์ํ ๊ฐ์ข ๋ฐ์ดํฐ ์ฝ์ (์ ๋ชฉ, ๊ฐ์ฌ, ์๊ฐ๋ฃ, ์ ์ ๋ค์ํ๊ฒ) - DatabaseSeeder์์ CourseSeeder ํธ์ถ - php artisan db:seed **ํ์ธ ๋ฐฉ๋ฒ:** - php artisan migrate ์คํ ํ ์๋ฌ ์์ด ์๋ฃ - database/database.sqlite ํ์ผ์ SQLite ๋ทฐ์ด๋ก ์ด์ด courses, enrollments ํ ์ด๋ธ ํ์ธ - php artisan db:seed ์คํ ํ courses ํ ์ด๋ธ์ ์ํ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋์ด ์์ด์ผ ํจ
๊ธฐ๋ ๊ฒฐ๊ณผ: courses์ enrollments ํ ์ด๋ธ์ด ์์ฑ๋๊ณ , courses ํ ์ด๋ธ์ ์ํ ๊ฐ์ข ๋ฐ์ดํฐ 5๊ฐ๊ฐ ์ฝ์ ๋์ด ์์ต๋๋ค.
๊ฐ์ข ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ฉ์ธ ํ์ด์ง์ ์๊ฐ ์ ์ฒญ ํผ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์.
**์๊ตฌ์ฌํญ:**
1. **๋ชจ๋ธ ์์ฑ**:
- php artisan make:model Course (์ด๋ฏธ ์๋ค๋ฉด ์คํต)
- php artisan make:model Enrollment
- Course ๋ชจ๋ธ์์ fillable ์์ฑ์ ['title', 'instructor', 'price', 'capacity', 'enrolled_count'] ์ถ๊ฐ
- Enrollment ๋ชจ๋ธ์์ fillable ์์ฑ์ ['course_id', 'name', 'email', 'phone', 'enrollment_number'] ์ถ๊ฐ
- Course์ Enrollment ๊ฐ ๊ด๊ณ ์ค์ :
- Course ๋ชจ๋ธ: public function enrollments() { return $this->hasMany(Enrollment::class); }
- Enrollment ๋ชจ๋ธ: public function course() { return $this->belongsTo(Course::class); }
2. **์ปจํธ๋กค๋ฌ ์์ฑ**:
- php artisan make:controller CourseController
- CourseController์ index() ๋ฉ์๋ ์์ฑ: ๋ชจ๋ ๊ฐ์ข ๋ชฉ๋ก์ ๊ฐ์ ธ์ courses.index ๋ทฐ๋ก ์ ๋ฌ
- CourseController์ enroll() ๋ฉ์๋ ์์ฑ: ํน์ ๊ฐ์ข ID๋ฅผ ๋ฐ์ ํด๋น ๊ฐ์ข ์ ๋ณด๋ฅผ courses.enroll ๋ทฐ๋ก ์ ๋ฌ
3. **๋ผ์ฐํธ ์ค์ ** (routes/web.php):
- GET / โ CourseController@index (๊ฐ์ข ๋ชฉ๋ก ํ์ด์ง)
- GET /courses/{id}/enroll โ CourseController@enroll (์๊ฐ ์ ์ฒญ ํผ ํ์ด์ง)
4. **Blade ๋ทฐ ์์ฑ**:
**resources/views/layout.blade.php** (๊ณตํต ๋ ์ด์์):
- <!DOCTYPE html> ๊ธฐ๋ณธ ๊ตฌ์กฐ
- <head>์ Tailwind CSS ๋ก๋ (@vite(['resources/css/app.css', 'resources/js/app.js']))
- <body>์ ์๋จ ๋ค๋น๊ฒ์ด์
๋ฐ (์ฌ์ดํธ ๋ก๊ณ "์๊ฐ์ ์ฒญ ์์คํ
", ํ ๋งํฌ)
- @yield('content')๋ก ๋ณธ๋ฌธ ์์ญ ์ง์
- ํธํฐ (ยฉ 2025 ์๊ฐ์ ์ฒญ ์์คํ
)
**resources/views/courses/index.blade.php** (๊ฐ์ข ๋ชฉ๋ก ํ์ด์ง):
- @extends('layout')
- ํ์ด์ง ์ ๋ชฉ: "๊ฐ์ค ๊ฐ์ข ๋ชฉ๋ก"
- ๊ฐ์ข ๋ฆฌ์คํธ๋ฅผ ์นด๋ ํํ๋ก ํ์ (Tailwind grid, md:grid-cols-2, lg:grid-cols-3)
- ๊ฐ ์นด๋:
- ๊ฐ์ข๋ช
(ํ
์คํธ ํฌ๊ธฐ lg, ๊ตต๊ฒ)
- ๊ฐ์ฌ๋ช
(ํ์ ํ
์คํธ)
- ์๊ฐ๋ฃ (์ ๋จ์, ์ฒ ๋จ์ ์ฝค๋ง ํ์)
- ์ ์ ์ ๋ณด: "์ ์ {{$course->capacity}}๋ช
/ ์ ์ฒญ {{$course->enrolled_count}}๋ช
"
- ์ ์ ์ด๊ณผ ์ "๋ง๊ฐ" ๋ฐฐ์ง ํ์ (๋นจ๊ฐ ๋ฐฐ๊ฒฝ, ํฐ ๊ธ์จ)
- "์๊ฐ ์ ์ฒญ" ๋ฒํผ (ํ๋ ๋ฐฐ๊ฒฝ, ํฐ ๊ธ์จ, ์ ์ ์ด๊ณผ ์ ๋นํ์ฑํ & ํ์)
- ๋ฒํผ ํด๋ฆญ ์ /courses/{id}/enroll๋ก ์ด๋ (a ํ๊ทธ)
**resources/views/courses/enroll.blade.php** (์๊ฐ ์ ์ฒญ ํผ ํ์ด์ง):
- @extends('layout')
- ํ์ด์ง ์ ๋ชฉ: "์๊ฐ ์ ์ฒญ์ ์์ฑ"
- ์ ํํ ๊ฐ์ข ์ ๋ณด ํ์ (๊ฐ์ข๋ช
, ๊ฐ์ฌ๋ช
, ์๊ฐ๋ฃ) - ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ค
- ์ ์ฒญ ํผ (POST /enrollments):
- @csrf
- hidden input: course_id (์ ํํ ๊ฐ์ข ID)
- ์ด๋ฆ ์
๋ ฅ (required)
- ์ด๋ฉ์ผ ์
๋ ฅ (required, type="email")
- ์ ํ๋ฒํธ ์
๋ ฅ (required)
- ์ ์ถ ๋ฒํผ: "์ ์ฒญ ์๋ฃ" (ํ๋ ๋ฐฐ๊ฒฝ, ํฐ ๊ธ์จ)
- Tailwind๋ก ํผ ์คํ์ผ๋ง (input ๋ฐ์ค, ๋ผ๋ฒจ, ๊ฐ๊ฒฉ ๋ฑ)
**ํ์ธ ๋ฐฉ๋ฒ:**
- php artisan serve๋ก ์๋ฒ ์คํ
- ๋ธ๋ผ์ฐ์ ์์ http://localhost:8000 ์ ์ ์ ๊ฐ์ข ๋ชฉ๋ก ํ์ด์ง๊ฐ ํ์๋์ด์ผ ํจ
- ๊ฐ์ข ์นด๋๊ฐ ๊ทธ๋ฆฌ๋๋ก ์ ๋ ฌ๋๊ณ , ์๊ฐ๋ฃ์ ์ฒ ๋จ์ ์ฝค๋ง๊ฐ ํ์๋์ด์ผ ํจ
- "์๊ฐ ์ ์ฒญ" ๋ฒํผ ํด๋ฆญ ์ /courses/{id}/enroll ํ์ด์ง๋ก ์ด๋ํ๊ณ ํผ์ด ํ์๋์ด์ผ ํจ
๊ธฐ๋ ๊ฒฐ๊ณผ: ๊ฐ์ข ๋ชฉ๋ก ํ์ด์ง์ ์๊ฐ ์ ์ฒญ ํผ ํ์ด์ง๊ฐ Tailwind CSS๋ก ๊น๋ํ๊ฒ ๋์์ธ๋์ด ํ์๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ๊ฐ์ข๋ฅผ ์ ํํ๊ณ ์ ์ฒญ ํผ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์๊ฐ ์ ์ฒญ ํผ ์ ์ถ ์ฒ๋ฆฌ ๋ก์ง๊ณผ ์ ์ฒญ ์๋ฃ ํ์ด์ง๋ฅผ ๊ตฌํํด์ฃผ์ธ์.
**์๊ตฌ์ฌํญ:**
1. **์ปจํธ๋กค๋ฌ ๋ฉ์๋ ์ถ๊ฐ** (CourseController):
- store() ๋ฉ์๋ ์์ฑ:
- POST /enrollments ์์ฒญ ์ฒ๋ฆฌ
- ์์ฒญ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ (Laravel Validation):
- name: required, string, max:255
- email: required, email
- phone: required, string
- course_id: required, exists:courses,id
- ์ ํจ์ฑ ๊ฒ์ฌ ์คํจ ์ ์๋ฌ ๋ฉ์์ง์ ํจ๊ป ์ด์ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ (withErrors, withInput)
- ์ ํํ ๊ฐ์ข์ ์ ์ ํ์ธ:
- enrolled_count >= capacity์ธ ๊ฒฝ์ฐ "์ ์ ์ด๊ณผ" ์๋ฌ ๋ฉ์์ง์ ํจ๊ป ๋ฆฌ๋ค์ด๋ ํธ
- ๊ณ ์ ์ ์ฒญ๋ฒํธ ์์ฑ:
- ํ์: "ENR-" + ์ค๋ ๋ ์ง(Ymd) + "-" + 4์๋ฆฌ ๋๋ค ์ซ์
- ์: "ENR-20250601-1234"
- Enrollment ๋ชจ๋ธ๋ก ์ ์ฒญ ๋ฐ์ดํฐ ์ ์ฅ
- ํด๋น ๊ฐ์ข์ enrolled_count 1 ์ฆ๊ฐ (Course::find($course_id)->increment('enrolled_count'))
- ์ ์ฒญ ์๋ฃ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ (/enrollments/{id}/success)
- success() ๋ฉ์๋ ์์ฑ:
- GET /enrollments/{id}/success ์์ฒญ ์ฒ๋ฆฌ
- ์ ์ฒญ ID๋ก Enrollment ๋ฐ์ดํฐ ์กฐํ (with('course')๋ก ๊ฐ์ข ์ ๋ณด๋ ํจ๊ป)
- courses.success ๋ทฐ๋ก ์ ๋ฌ
2. **๋ผ์ฐํธ ์ถ๊ฐ** (routes/web.php):
- POST /enrollments โ CourseController@store
- GET /enrollments/{id}/success โ CourseController@success
3. **Blade ๋ทฐ ์์ฑ**:
**resources/views/courses/success.blade.php** (์ ์ฒญ ์๋ฃ ํ์ด์ง):
- @extends('layout')
- ํ์ด์ง ์ ๋ชฉ: "์๊ฐ ์ ์ฒญ ์๋ฃ"
- ์ฑ๊ณต ๋ฉ์์ง: "โ
์๊ฐ ์ ์ฒญ์ด ์๋ฃ๋์์ต๋๋ค!"
- ์ ์ฒญ ์ ๋ณด ๋ฐ์ค (์ฐ๋์ ๋ฐฐ๊ฒฝ):
- ์ ์ฒญ๋ฒํธ: {{$enrollment->enrollment_number}}
- ๊ฐ์ข๋ช
: {{$enrollment->course->title}}
- ๊ฐ์ฌ: {{$enrollment->course->instructor}}
- ์๊ฐ๋ฃ: {{number_format($enrollment->course->price)}}์
- ์ ์ฒญ์ ์ด๋ฆ: {{$enrollment->name}}
- ์ด๋ฉ์ผ: {{$enrollment->email}}
- ์ ํ๋ฒํธ: {{$enrollment->phone}}
- ๊ฒฐ์ ์๋ด ๋ฉ์์ง:
- "์๋ ๊ณ์ข๋ก ์๊ฐ๋ฃ๋ฅผ ์
๊ธํด์ฃผ์ธ์."
- ์ํ: ๊ตญ๋ฏผ์ํ
- ๊ณ์ข๋ฒํธ: 123-456-789012
- ์๊ธ์ฃผ: (์ฃผ)์๊ฐ์ ์ฒญ์์คํ
- ์
๊ธ ์ ์ ์ฒญ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.
- "๊ฐ์ข ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ" ๋ฒํผ (ํ์ผ๋ก ์ด๋)
**resources/views/courses/enroll.blade.php ์์ **:
- ์ ํจ์ฑ ๊ฒ์ฌ ์๋ฌ ๋ฉ์์ง ํ์ (@error ๋๋ ํฐ๋ธ ์ฌ์ฉ)
- ๊ฐ ์
๋ ฅ ํ๋ ์๋์ ์๋ฌ ๋ฉ์์ง ํ์ (๋นจ๊ฐ ํ
์คํธ)
**ํ์ธ ๋ฐฉ๋ฒ:**
- ์๊ฐ ์ ์ฒญ ํผ์์ ์ด๋ฆ, ์ด๋ฉ์ผ, ์ ํ๋ฒํธ ์
๋ ฅ ํ "์ ์ฒญ ์๋ฃ" ๋ฒํผ ํด๋ฆญ
- ์ ํจ์ฑ ๊ฒ์ฌ ํต๊ณผ ์ ์ ์ฒญ ์๋ฃ ํ์ด์ง(/enrollments/{id}/success)๋ก ๋ฆฌ๋ค์ด๋ ํธ
- ์ ์ฒญ ์ ๋ณด(์ ์ฒญ๋ฒํธ, ๊ฐ์ข๋ช
, ์ ์ฒญ์ ์ ๋ณด)๊ฐ ์ ํํ ํ์๋์ด์ผ ํจ
- database/database.sqlite์์ enrollments ํ
์ด๋ธ์ ์ ์ฒญ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์์ด์ผ ํจ
- courses ํ
์ด๋ธ์ enrolled_count๊ฐ 1 ์ฆ๊ฐํด์ผ ํจ
- ์ด๋ฉ์ผ ํ์ ์ค๋ฅ ์ ์๋ฌ ๋ฉ์์ง๊ฐ ํ์๋์ด์ผ ํจ
- ์ ์ ์ด๊ณผ ๊ฐ์ข ์ ์ฒญ ์ ์๋ฌ ๋ฉ์์ง๊ฐ ํ์๋์ด์ผ ํจ
๊ธฐ๋ ๊ฒฐ๊ณผ: ์๊ฐ ์ ์ฒญ ํผ ์ ์ถ ์ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์ํ๋๊ณ , ์ ์ฒญ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ฉฐ, ์ ์ฒญ ์๋ฃ ํ์ด์ง์์ ์ ์ฒญ ์ ๋ณด์ ๊ฒฐ์ ์๋ด๊ฐ ํ์๋ฉ๋๋ค. ์ ์ ์ด๊ณผ ์ ์ ์ฒญ์ด ์ฐจ๋จ๋ฉ๋๋ค.
์ ์ถ๋ ์ํ (0)
๋ก๊ทธ์ธ ํ ์ ์ถ์์ง ์ ์ถ๋ ์ํ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋์ ์๊ฐ ๋์ด๋ณด์ธ์!