1. **Client Error (4xx)**
- 4xx 오류는 클라이언트 측에서 잘못된 요청을 보냈을 때 발생합니다. 예를 들어, `404 Not Found`는 요청한 리소스가 서버에 존재하지 않을 때 반환됩니다.
```python
import requests
response = requests.get('https://api.example.com/nonexistent')
if response.status_code == 404:
print("Error: Resource not found.")
```
- 위의 코드에서는 존재하지 않는 리소스에 대한 요청을 보내고, 404 상태 코드를 체크하여 사용자에게 알림을 제공하는 방법을 보여 줍니다.
2. **Server Error (5xx)**
- 5xx 오류는 서버 측에서 문제가 발생했을 때 반환됩니다. 예를 들어, `500 Internal Server Error`는 서버에서 요청을 처리하는 중에 일반 오류가 발생했음을 나타냅니다.
```python
response = requests.get('https://api.example.com/data')
if response.status_code == 500:
print("Error: Server encountered an internal error. Please try again later.")
```
- 서버 오류는 대부분 개발자가 직접 해결할 수 없는 경우가 많으므로, 사용자에게는 잠시 후 다시 시도하라는 메시지를 보여 줄 수 있습니다.
3. **Authentication Error**
- 인증 오류는 잘못된 API 키나 토큰을 사용할 때 발생합니다. `401 Unauthorized`는 필요한 자격 증명이 누락되었거나 잘못되었음을 나타냅니다.
```python
headers = {'Authorization': 'Bearer INVALID_API_KEY'}
response = requests.get('https://api.example.com/secure-data', headers=headers)
if response.status_code == 401:
print("Error: Unauthorized access. Check your API key or token.")
```
- 해당 오류는 주로 API 키가 잘못 입력되었거나 만료되었을 때 발생하므로, 올바른 자격 증명이 사용되었는지 확인해야 합니다.
4. **Rate Limiting Error**
- API 제공자는 시스템의 과부하 방지를 위해 요청 수를 제한합니다. `429 Too Many Requests`는 이러한 제한에 걸렸을 때 발생하는 오류입니다.
```python
response = requests.get('https://api.example.com/rate-limited')
if response.status_code == 429:
print("Error: Too many requests. Please slow down your requests.")
```
- 이 경우에는 요청 간의 시간을 늘리거나, 가능한 경우 백오프(back-off) 전략을 구현하여 API 요청 빈도를 줄여야 합니다.
API 오류를 이해하고 적절히 처리하는 것은 안정적인 애플리케이션 개발에 필수적입니다. 각 오류의 원인과 해결 방법을 숙지하면 사용자가 경험하는 불편을 최소화할 수 있습니다.