DataGSM OpenAPI SDK Overview
개요
DataGSM OpenAPI SDK는 DataGSM의 REST API를 더 쉽고 안전하게 사용할 수 있도록 설계된 공식 클라이언트 SDK입니다.
직접 HTTP 요청을 작성하는 대신 SDK를 사용하면 타입 안전성, 에러 처리 간소화, 개발 생산성 향상 등의 이점을 얻을 수 있습니다.
SDK 사용의 이점
| 이점 | 설명 |
|---|---|
| 타입 안전성 | 강타입 시스템으로 컴파일 타임에 오류를 검출하여 런타임 에러를 방지합니다. |
| 에러 처리 간소화 | HTTP 상태 코드를 의미 있는 예외로 변환하여 명확한 에러 핸들링을 지원합니다. |
| 보일러플레이트 제거 | HTTP 클라이언트 설정, 헤더 관리, JSON 직렬화 등 반복 작업을 자동으로 처리합니다. |
| 일관된 인터페이스 | 모든 엔드포인트에 대해 일관된 패턴을 제공하여 학습 곡선을 낮춥니다. |
| 자동 리소스 관리 | 리소스 누수를 자동으로 방지하는 메커니즘을 제공합니다. |
| IDE 지원 | 자동완성, 타입 체킹, 인라인 문서 등 IDE 기능을 최대한 활용할 수 있습니다. |
상세 비교
1. 타입 안전성
SDK는 강타입 언어의 장점을 활용하여 컴파일 타임에 오류를 발견할 수 있습니다. API 응답 구조가 명확한 타입으로 정의되어 있어 IDE의 자동완성과 타입 체킹을 통해 안전한 코드를 작성할 수 있습니다.
// ✅ SDK 사용 - 컴파일 타임에 타입 체크
StudentResponse students = client.students().getStudents(
new StudentApi.StudentRequest()
.grade(1)
.classNum(1)
);
Student firstStudent = students.getStudents().get(0);
String name = firstStudent.getName(); // 타입 안전하며 IDE 자동완성 지원
// ❌ 직접 HTTP 호출 - 런타임 오류 가능성
JSONObject response = makeHttpRequest(...);
String name = response.getJSONArray("students")
.getJSONObject(0)
.getString("name"); // 오타나 구조 변경 시 런타임 에러 발생2. 에러 처리 간소화
SDK는 HTTP 상태 코드를 의미 있는 예외로 변환하여 제공합니다. 각 에러 상황에 맞는 구체적인 예외 타입을 통해 명확한 에러 처리가 가능합니다.
// ✅ SDK 사용 - 구체적인 예외 타입으로 명확한 에러 처리
try {
StudentResponse students = client.students().getStudents(request);
} catch (UnauthorizedException e) {
// 401 - API 키 갱신 필요
log.error("API key expired", e);
renewApiKey();
} catch (RateLimitException e) {
// 429 - Rate limit 초과, 재시도 로직
log.warn("Rate limit exceeded, retrying...", e);
retryAfter(e.getRetryAfter());
} catch (DataGsmException e) {
// 기타 API 오류
log.error("API error: {}", e.getMessage());
}
// ❌ 직접 HTTP 호출 - 수동으로 상태 코드 파싱 필요
if (response.statusCode() == 401) {
// 인증 오류 처리
} else if (response.statusCode() == 429) {
// Rate limit 처리
} else if (response.statusCode() >= 500) {
// 서버 오류 처리
}3. 보일러플레이트 코드 제거
HTTP 클라이언트 설정, 헤더 관리, JSON 직렬화/역직렬화 등 반복적인 작업을 SDK가 자동으로 처리합니다.
// ✅ SDK 사용 - 단 3줄로 API 호출 완료
DataGsmClient client = DataGsmClient.builder("your-api-key").build();
List<Meal> meals = client.neis().getMeals(
new NeisApi.MealRequest()
.date(LocalDate.now())
);
// ❌ 직접 HTTP 호출 - 많은 보일러플레이트 코드 필요
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.datagsm.com/v1/neis/meals?date=2025-01-02"))
.header("X-API-KEY", "your-api-key")
.GET()
.build();
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
ObjectMapper mapper = new ObjectMapper();
List<Meal> meals = mapper.readValue(response.body(), new TypeReference<List<Meal>>(){});
// + 에러 처리, 리소스 정리 등 추가 코드 필요4. 일관된 API 인터페이스
SDK는 모든 엔드포인트에 대해 일관된 패턴을 제공하여 학습 곡선을 낮추고 코드 가독성을 높입니다.
// 모든 API가 동일한 패턴을 따름
StudentResponse students = client.students().getStudents(request);
ClubResponse clubs = client.clubs().getClubs(request);
ProjectResponse projects = client.projects().getProjects(request);
List<Meal> meals = client.neis().getMeals(request);지원하는 언어별 SDK
DataGSM OpenAPI는 다양한 프로그래밍 언어에 대한 공식 SDK를 제공합니다. 각 언어별 SDK는 해당 언어의 관습과 패턴을 따르며, 동일한 기능을 제공합니다.
| 언어 | 최소 버전 | 빌드 도구 | 주요 특징 | 기술 문서 |
|---|---|---|---|---|
| Java | JDK 13+ | Gradle, Maven | 타입 안전성, AutoCloseable, 빌더 패턴 | Java SDK 기술 문서 |
| Kotlin | 1.3.72+ | Gradle, Maven | Java SDK와 완벽 호환, DSL 지원, Coroutine 통합 | Java SDK 기술 문서 |
| Python | 3.8+ | pip | 타입 힌팅, 컨텍스트 매니저, async/await 지원 | Python SDK 기술 문서 |
| JavaScript/TypeScript | Node.js 20+ | npm, yarn, pnpm | 완전한 TypeScript 지원, Promise 기반 | JavaScript SDK 기술 문서 |
SDK vs 직접 HTTP 호출 비교
| 특성 | SDK 사용 | 직접 HTTP 호출 |
|---|---|---|
| 타입 안전성 | ✅ 컴파일 타임에 타입 체크 | ❌ 런타임 에러 가능성 높음 |
| 에러 처리 | ✅ 구체적인 예외 타입 제공 | ⚠️ 수동으로 상태 코드 파싱 필요 |
| 코드 간결성 | ✅ 간결하고 읽기 쉬운 코드 | ❌ 많은 보일러플레이트 코드 |
| 유지보수성 | ✅ API 변경 시 자동으로 반영 | ❌ 수동으로 업데이트 필요 |
| 학습 곡선 | ✅ 문서화된 인터페이스와 IDE 지원 | ⚠️ API 스펙을 직접 학습 |
| 리소스 관리 | ✅ 자동으로 리소스 정리 | ⚠️ 수동으로 관리 필요 |
| 개발 속도 | ✅ 빠른 개발 및 프로토타이핑 | ⚠️ 설정과 구현에 시간 소요 |
| 디버깅 | ✅ 명확한 에러 메시지와 스택 트레이스 | ⚠️ 원시 HTTP 응답 분석 필요 |
주요 기능
SDK는 DataGSM API의 모든 기능을 지원합니다:
| 기능 | 설명 | 지원 API |
|---|---|---|
| 학생 데이터 조회 | 재학생 데이터를 학년, 반, 번호, 전공 등으로 조회 | client.students() |
| 동아리 데이터 조회 | 전공동아리, 창체동아리 데이터 조회 | client.clubs() |
| 프로젝트 데이터 조회 | 학생들의 프로젝트 및 포트폴리오 데이터 조회 | client.projects() |
| NEIS 데이터 조회 | 급식, 학사일정 등 나이스 시스템 데이터 조회 | client.neis() |
| 페이지네이션 | 대용량 데이터를 효율적으로 처리하는 페이징 지원 | 모든 API |
| 필터링 | 다양한 조건으로 데이터를 필터링 | 모든 API |
시작하기
각 언어별 SDK 사용법은 다음 기술 문서를 참고하세요:
- Java/Kotlin 사용자: Java SDK 기술 문서에서 설치, 설정, API 사용법을 확인하세요.
- Python 사용자: Python SDK 기술 문서에서 설치, 설정, API 사용법을 확인하세요.
- JavaScript/TypeScript 사용자: JavaScript SDK 기술 문서에서 설치, 설정, API 사용법을 확인하세요.
다음 단계
SDK를 설치하고 시작하려면:
- 해당 언어의 SDK 기술 문서에서 설치 가이드를 따라 의존성을 추가하세요.
- API 키를 발급받아 환경 변수로 설정하세요.
- 빠른 시작 예제를 따라 첫 API 호출을 시도하세요.
- 각 API 레퍼런스를 참고하여 필요한 기능을 구현하세요.
추가 리소스
- HTTP API 기술 문서: SDK 없이 직접 REST API를 호출하려면 HTTP API 기술 문서를 참고하세요.
- GitHub 저장소:
- 이슈 및 피드백: 버그 리포트나 기능 요청은 각 SDK의 GitHub Issues를 이용해주세요.