Skip to content

Commit fde1493

Browse files
committed
README 파일 수정
1 parent 7159dc7 commit fde1493

1 file changed

Lines changed: 192 additions & 7 deletions

File tree

README.md

Lines changed: 192 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,199 @@
1-
# CRUD_API_fastAPI
1+
# CRUD API FastAPI
2+
학습용 비동기 통신을 위한 CRUD 프로젝트입니다.
3+
웹에서 fetch를 통해 비동기 통신을 연습할 수 있도록 CRUD API 서비스를 제공합니다.
24

3-
학습용 비동기 통신을 위한 CRUD 프로젝트
5+
## 0. 배포 URL
6+
배포된 API 서버를 통해 바로 테스트해볼 수 있습니다.
47

5-
## 목적
6-
7-
- 학생들이 웹으로 fetch를 통해 비동기 통신을 연습할 수 있도록 CRUD API 서비스를 제공
8-
9-
## 동작
8+
## 1. 기술 스택
9+
- FastAPI
10+
- SQLAlchemy
11+
- Uvicorn
12+
- SQLite
13+
- Pydantic
1014

15+
## 2. 설치 및 실행방법
16+
### 1. 저장소 클론
17+
```bash
18+
git clone https://github.com/weniv/CRUD_API_fastAPI.git
19+
cd CRUD_API_fastAPI
1120
```
21+
### 2. 가상환경 생성 및 활성화
22+
```bash
23+
python -m venv venv
24+
source venv/bin/activate # Windows: venv\Scripts\activate
25+
```
26+
27+
### 3. 의존성 설치
28+
```bash
1229
pip install -r requirements.txt
30+
```
31+
### 4. (로컬에서)서버 실행
32+
```bash
1333
uvicorn main:app --reload
1434
```
35+
서버가 실행되면 http://127.0.0.1:8000 에서 API에 접근할 수 있습니다.
36+
37+
### 5. Docker 실행
38+
Docker 이미지 빌드 및 실행
39+
```bash
40+
docker compose up -d --build
41+
```
42+
43+
## 3. API 문서
44+
### 자동 생성 문서
45+
- Swagger UI: /docs
46+
- ReDoc: /redoc
47+
48+
49+
### API 엔드포인트
50+
#### 기본 엔드포인트
51+
- `GET /` - API 안내 및 사용 가능한 모든 엔드포인트 목록
52+
- `GET /healthcheck` - 서버 상태 확인
53+
54+
#### 인증 관련
55+
- `POST /{api_id}/signup` - 회원가입
56+
- `POST /{api_id}/login` - 로그인 (JWT 토큰 발급)
57+
- `GET /{api_id}/login_user_info` - 로그인한 유저 정보 조회
58+
- `POST /login_confirm` - JWT 토큰 유효성 검증
59+
60+
#### 블로그 CRUD
61+
- `GET /{api_id}/blog` - 블로그 목록 조회
62+
- `GET /{api_id}/blog/{blog_id}` - 블로그 상세 조회
63+
- `POST /{api_id}/blog` - 블로그 생성
64+
- `PUT /{api_id}/blog/{blog_id}` - 블로그 수정
65+
- `DELETE /{api_id}/blog/{blog_id}` - 블로그 삭제
66+
67+
#### 상품 CRUD
68+
- `GET /{api_id}/product` - 상품 목록 조회
69+
- `GET /{api_id}/product/{product_id}` - 상품 상세 조회
70+
- `POST /{api_id}/product` - 상품 생성
71+
- `PUT /{api_id}/product/{product_id}` - 상품 수정
72+
- `DELETE /{api_id}/product/{product_id}` - 상품 삭제
73+
- `GET /{api_id}/product/search?keyword={search_key}` - 상품 검색
74+
75+
#### 유저 CRUD
76+
- `GET /{api_id}/user` - 유저 목록 조회
77+
- `GET /{api_id}/user/{user_id}` - 유저 상세 조회
78+
- `POST /{api_id}/user` - 유저 생성
79+
- `PUT /{api_id}/user/{user_id}` - 유저 수정
80+
- `DELETE /{api_id}/user/{user_id}` - 유저 삭제
81+
82+
#### 코스 CRUD
83+
- `GET /{api_id}/course` - 코스 목록 조회
84+
- `GET /{api_id}/course/{course_id}` - 코스 상세 조회
85+
- `POST /{api_id}/course` - 코스 생성
86+
- `PUT /{api_id}/course/{course_id}` - 코스 수정
87+
- `DELETE /{api_id}/course/{course_id}` - 코스 삭제
88+
89+
#### 기타
90+
- `GET /markdownblog` - 마크다운 블로그 조회
91+
- `GET /asset/*` - 정적 파일 접근 (이미지 등)
92+
93+
**참고**: `{api_id}`는 1-1000 사이의 숫자입니다. 각 API ID별로 독립적인 데이터 공간을 제공합니다.
94+
95+
96+
## 4. 사용 예시
97+
JavaScript fetch를 사용한 API 호출
98+
```javascript
99+
// 1. 회원가입
100+
fetch('https://dev.wenivops.co.kr/services/fastapi-crud/100/signup', {
101+
method: 'POST',
102+
headers: {
103+
'Content-Type': 'application/json',
104+
},
105+
body: JSON.stringify({
106+
username: 'testuser',
107+
password: 'testpass123'
108+
})
109+
})
110+
.then(response => response.json())
111+
.then(data => console.log(data));
112+
113+
// 2. 로그인
114+
fetch('https://dev.wenivops.co.kr/services/fastapi-crud/100/login', {
115+
method: 'POST',
116+
headers: {
117+
'Content-Type': 'application/json',
118+
},
119+
body: JSON.stringify({
120+
username: 'testuser',
121+
password: 'testpass123'
122+
})
123+
})
124+
.then(response => response.json())
125+
.then(data => {
126+
console.log(data);
127+
// JWT 토큰 저장
128+
const token = data.access_token;
129+
});
130+
131+
// 3. 블로그 목록 조회
132+
fetch('https://dev.wenivops.co.kr/services/fastapi-crud/100/blog')
133+
.then(response => response.json())
134+
.then(data => console.log(data));
135+
136+
// 4. 블로그 생성
137+
fetch('https://dev.wenivops.co.kr/services/fastapi-crud/100/blog', {
138+
method: 'POST',
139+
headers: {
140+
'Content-Type': 'application/json',
141+
},
142+
body: JSON.stringify({
143+
title: '새로운 블로그 글',
144+
content: '블로그 내용입니다.',
145+
author: 'test_user'
146+
})
147+
})
148+
.then(response => response.json())
149+
.then(data => console.log(data));
150+
151+
// 5. 상품 검색
152+
fetch('https://dev.wenivops.co.kr/services/fastapi-crud/100/product/search?keyword=developer')
153+
.then(response => response.json())
154+
.then(data => console.log(data));
155+
156+
// 6. JWT 토큰 인증
157+
fetch('https://dev.wenivops.co.kr/services/fastapi-crud/login_confirm', {
158+
method: 'POST',
159+
headers: {
160+
'Authorization': 'Bearer eyJhbGciOi.weniv.h8t7NJKEiWCh7G3'
161+
}
162+
})
163+
.then(response => response.json())
164+
.then(data => console.log(data));
165+
```
166+
167+
## 5. 학습 목표
168+
이 프로젝트를 통해 다음을 학습할 수 있습니다:
169+
170+
- 비동기 통신: JavaScript fetch API 사용법
171+
- RESTful API: HTTP 메서드(GET, POST, PUT, DELETE) 이해
172+
- JSON 데이터: JSON 형태의 데이터 송수신
173+
- API 테스팅: Swagger UI를 통한 API 테스트
174+
- CORS 처리: 브라우저에서 API 호출 시 발생하는 CORS 이슈 해결
175+
176+
## 6. 프로젝트 구조
177+
```
178+
CRUD_API_fastAPI/
179+
├── main.py # FastAPI 애플리케이션 메인 파일
180+
├── requirements.txt # Python 의존성 목록
181+
├── database.db # SQLite 데이터베이스 파일 (자동 생성)
182+
└── README.md # 프로젝트 설명서
183+
```
184+
## 7. 개발 가이드
185+
### 새로운 엔드포인트 추가
186+
main.py 파일에 새로운 라우터 함수를 추가하여 API 엔드포인트를 확장할 수 있습니다.
187+
### 데이터 모델 수정
188+
SQLAlchemy 모델을 수정하여 데이터베이스 스키마를 변경할 수 있습니다.
189+
### 프론트엔드 연동
190+
이 API는 순수 JavaScript, React, Vue.js 등 다양한 프론트엔드 프레임워크와 연동하여 사용할 수 있습니다.
191+
192+
## 8. 문제 해결
193+
### CORS 오류 발생 시
194+
브라우저에서 API 호출 시 CORS 오류가 발생하면, FastAPI 애플리케이션에 CORS 미들웨어가 추가되어 있는지 확인하세요.
195+
### 데이터베이스 초기화
196+
데이터베이스를 초기화하려면 database.db 파일을 삭제하고 서버를 재시작하면 됩니다.
197+
198+
## 9. 라이선스
199+
이 프로젝트는 학습 목적으로 제공됩니다.

0 commit comments

Comments
 (0)