Soonlife DOCS
API 레퍼런스

활동 API

봉사활동, 비교과과정, 봉사학습 신청·조회·취소·평가 제출 전체 명세

엔드포인트 목록

메서드경로설명
GET/api/volunteer-service/봉사활동 목록 및 신청 내역
POST/api/volunteer-service/apply/봉사활동 신청
POST/api/volunteer-service/cancel/봉사활동 취소
GET/api/extracurricular/비교과과정 프로그램 목록
POST/api/extracurricular/detail/비교과과정 상세 조회
GET/api/extracurricular/attach/비교과과정 첨부파일 목록
GET/api/extracurricular/leaflet/비교과과정 리플렛 목록
GET/api/extracurricular/download/비교과과정 파일 다운로드
GET/api/service-learning/봉사학습 강의 목록 및 신청 내역
POST/api/service-learning/detail/봉사학습 강의 상세 조회
POST/api/service-learning/apply/봉사학습 신청
POST/api/service-learning/cancel/봉사학습 취소
POST/api/service-learning/eval/save/봉사학습 평가 저장
GET/api/service-learning/attach/봉사학습 첨부파일 목록
GET/api/service-learning/download/봉사학습 파일 다운로드

모든 엔드포인트는 sch_session 쿠키 인증이 필요합니다.


봉사활동

SCH 통합정보시스템의 봉사활동 신청·관리 API입니다. 학기별 개설 봉사활동 목록 조회, 신청, 취소를 지원합니다.

GET /api/volunteer-service/

현재 학기 또는 지정한 학기의 봉사활동 개설 목록과 본인 신청 내역을 반환합니다. yysmt를 모두 생략하면 응답의 period_list 첫 번째 항목(가장 최근 학기)을 기준으로 자동 조회합니다.

쿼리 파라미터

파라미터타입필수허용값설명
yystring아니오4자리 연도학년도 (예: 2025) — 생략 시 최신 학기 자동 적용
smtstring아니오11, 21학기 코드 — 생략 시 최신 학기 자동 적용

smt 허용값:

설명
111학기
212학기

yysmt는 항상 함께 전달해야 합니다. 둘 중 하나만 전달하면 나머지를 기본값으로 채웁니다. 특정 과거 학기를 조회할 때는 두 파라미터를 모두 전달하세요.

요청 예시
GET /api/volunteer-service/?yy=2025&smt=11

응답

200 OK

응답 예시
{
  "yy": "2025",
  "smt": "11",
  "period_list": [
    {
      "YY": "2025",
      "SMT": "11",
      "SMT_NM": "1학기",
      "FRMT_DT": "20250301",
      "END_DT": "20250630"
    },
    {
      "YY": "2024",
      "SMT": "21",
      "SMT_NM": "2학기",
      "FRMT_DT": "20240901",
      "END_DT": "20241231"
    }
  ],
  "aply_list": [
    {
      "ORGAN_CD": "ORG001",
      "ORGAN_NM": "아산시자원봉사센터",
      "SERV_CD": "VS202501001",
      "SERV_NM": "노인복지관 급식 봉사",
      "SERV_DT": "20250315",
      "SERV_PLACE": "아산시 온양노인복지관 3층 식당",
      "SERV_TIME": "4",
      "APLY_DT": "20250308",
      "APLY_ST": "01",
      "APLY_ST_NM": "신청완료"
    }
  ],
  "service_list": [
    {
      "ORGAN_CD": "ORG002",
      "ORGAN_NM": "순천향대학교병원",
      "SERV_CD": "VS202501010",
      "SERV_NM": "병원 환경정화 및 환자 안내 봉사",
      "SERV_DT": "20250322",
      "SERV_PLACE": "순천향대학교병원 본관 1층 로비",
      "SERV_TIME": "3",
      "MAX_CNT": "20",
      "APLY_CNT": "12",
      "REMAIN_CNT": "8",
      "APLY_STRT_DT": "20250310",
      "APLY_END_DT": "20250319"
    },
    {
      "ORGAN_CD": "ORG003",
      "ORGAN_NM": "아산시청 자원봉사팀",
      "SERV_CD": "VS202501020",
      "SERV_NM": "지역 하천 환경정화 활동",
      "SERV_DT": "20250329",
      "SERV_PLACE": "아산시 곡교천 일원",
      "SERV_TIME": "4",
      "MAX_CNT": "50",
      "APLY_CNT": "34",
      "REMAIN_CNT": "16",
      "APLY_STRT_DT": "20250315",
      "APLY_END_DT": "20250326"
    }
  ]
}

응답 최상위 필드:

필드타입설명
yystring조회된 학년도
smtstring조회된 학기 코드
period_listarray선택 가능한 학기 목록 — UI 드롭다운 옵션으로 사용
aply_listarray본인의 봉사활동 신청 내역
service_listarray신청 가능한 봉사활동 목록

period_list 항목 필드:

필드타입설명
YYstring학년도
SMTstring학기 코드
SMT_NMstring학기 이름 (예: 1학기)
FRMT_DTstring학기 시작일 (YYYYMMDD)
END_DTstring학기 종료일 (YYYYMMDD)

aply_list 항목 필드:

필드타입설명
ORGAN_CDstring기관 코드
ORGAN_NMstring기관명
SERV_CDstring봉사활동 코드
SERV_NMstring봉사활동명
SERV_DTstring봉사 일자 (YYYYMMDD)
SERV_PLACEstring봉사 장소
SERV_TIMEstring봉사 시간 (시간 단위)
APLY_DTstring신청일 (YYYYMMDD)
APLY_STstring신청 상태 코드
APLY_ST_NMstring신청 상태명 (신청완료, 취소 등)

service_list 항목 필드:

필드타입설명
ORGAN_CDstring기관 코드 — apply/ 요청 시 필요
ORGAN_NMstring기관명
SERV_CDstring봉사활동 코드 — apply/ 요청 시 필요
SERV_NMstring봉사활동명
SERV_DTstring봉사 일자 (YYYYMMDD)
SERV_PLACEstring봉사 장소
SERV_TIMEstring봉사 시간 (시간 단위)
MAX_CNTstring모집 인원
APLY_CNTstring현재 신청 인원
REMAIN_CNTstring잔여 인원
APLY_STRT_DTstring신청 시작일 (YYYYMMDD)
APLY_END_DTstring신청 마감일 (YYYYMMDD)

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
에러 예시 — UNAUTHORIZED
{
  "error": "UNAUTHORIZED",
  "message": "세션이 만료되었거나 유효하지 않습니다."
}

POST /api/volunteer-service/apply/

봉사활동을 신청합니다. GET /api/volunteer-service/service_list 항목에서 ORGAN_CD, SERV_CD를 추출하여 전달합니다.

요청 Body

Content-Type: application/json

필드타입필수설명
yystringO학년도
smtstringO학기 코드 (11 / 21)
organ_cdstringO기관 코드 (service_list[].ORGAN_CD)
serv_cdstringO봉사활동 코드 (service_list[].SERV_CD)

organ_cdserv_cd는 반드시 GET /api/volunteer-service/ 응답의 service_list 항목에서 추출하세요. 임의 값을 전달하면 SCH 서버에서 오류가 반환됩니다.

요청 Body 예시
{
  "yy": "2025",
  "smt": "11",
  "organ_cd": "ORG002",
  "serv_cd": "VS202501010"
}

응답

200 OK

응답 예시
{
  "ok": true
}

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
MISSING_FIELDS400yy, smt, organ_cd, serv_cd 중 하나 이상 누락
SCH_ERROR400SCH 서버 거부 — 이미 신청됨, 정원 초과, 신청 기간 아님 등
에러 예시 — MISSING_FIELDS
{
  "error": "MISSING_FIELDS",
  "message": "yy, smt, organ_cd, serv_cd 필드가 모두 필요합니다."
}

POST /api/volunteer-service/cancel/

봉사활동 신청을 취소합니다. GET /api/volunteer-service/aply_list 항목 객체 전체를 aply_row로 전달합니다.

요청 Body

Content-Type: application/json

필드타입필수설명
aply_rowobjectOaply_list 항목 객체 전체 (수정 없이 그대로)

aply_rowaply_list 항목을 수정 없이 그대로 전달해야 합니다. SCH 서버가 객체 안의 여러 필드를 조합하여 취소 대상을 특정합니다. 일부 필드만 전달하면 취소가 실패할 수 있습니다.

요청 Body 예시
{
  "aply_row": {
    "ORGAN_CD": "ORG001",
    "ORGAN_NM": "아산시자원봉사센터",
    "SERV_CD": "VS202501001",
    "SERV_NM": "노인복지관 급식 봉사",
    "SERV_DT": "20250315",
    "SERV_PLACE": "아산시 온양노인복지관 3층 식당",
    "SERV_TIME": "4",
    "APLY_DT": "20250308",
    "APLY_ST": "01",
    "APLY_ST_NM": "신청완료"
  }
}

응답

200 OK

응답 예시
{
  "ok": true
}

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
MISSING_FIELDS400aply_row 필드 누락
에러 예시 — aply_row 누락
{
  "error": "MISSING_FIELDS",
  "message": "aply_row 누락"
}

비교과과정

SCH 통합정보시스템의 비교과과정 프로그램 조회 API입니다. 학기별 개설 프로그램 목록, 상세 정보, 첨부파일 및 리플렛을 지원합니다.

GET /api/extracurricular/

현재 학기의 비교과과정 개설 프로그램 목록과 본인 신청 내역을 반환합니다.

쿼리 파라미터

파라미터타입필수기본값설명
yystring아니오최신 학기학년도 (예: 2025)
smtstring아니오최신 학기학기 코드 (11 / 21)
excr_divstring아니오T프로그램 카테고리 코드
keywordstring아니오""프로그램명 검색어
use_suststring아니오0학과 필터

use_sust 허용값:

설명
0전체 학과 프로그램 표시
1본인 소속 학과 프로그램만 표시

excr_div에 허용되는 코드 목록은 이 엔드포인트 응답의 categories 배열에서 동적으로 제공됩니다. 첫 요청에서는 기본값 T(전체)로 조회한 뒤, 반환된 categories를 UI 드롭다운 옵션으로 활용하세요.

요청 예시 — 취창업 카테고리 키워드 검색
GET /api/extracurricular/?yy=2025&smt=11&excr_div=A&keyword=AI&use_sust=0

응답

200 OK

응답 예시
{
  "yy": "2025",
  "smt": "11",
  "now": {
    "YY": "2025",
    "SMT": "11"
  },
  "categories": [
    { "EXCR_DIV": "T", "EXCR_DIV_NM": "전체" },
    { "EXCR_DIV": "A", "EXCR_DIV_NM": "취창업" },
    { "EXCR_DIV": "B", "EXCR_DIV_NM": "글로벌" },
    { "EXCR_DIV": "C", "EXCR_DIV_NM": "인성·봉사" },
    { "EXCR_DIV": "D", "EXCR_DIV_NM": "학술·연구" }
  ],
  "user_info": [
    {
      "DEPT_NM": "컴퓨터소프트웨어공학과",
      "GRADE": "3"
    }
  ],
  "open_list": [
    {
      "EXCR_SEQ": "20250001",
      "EXCR_NM": "취업역량 강화 특강 — 이력서 작성법과 면접 전략",
      "EXCR_DIV": "A",
      "EXCR_DIV_NM": "취창업",
      "OPEN_DT": "20250310",
      "CLOSE_DT": "20250320",
      "PROC_DT": "20250325",
      "PROC_PLACE": "산학협력관 201호",
      "SERV_TIME": "2",
      "MAX_CNT": "30",
      "APLY_CNT": "18",
      "APLY_YN": "N",
      "FILE_NO": "F20250001"
    },
    {
      "EXCR_SEQ": "20250002",
      "EXCR_NM": "AI 코딩 워크숍 — Python과 머신러닝 입문",
      "EXCR_DIV": "A",
      "EXCR_DIV_NM": "취창업",
      "OPEN_DT": "20250312",
      "CLOSE_DT": "20250322",
      "PROC_DT": "20250328",
      "PROC_PLACE": "공학관 E동 203호",
      "SERV_TIME": "3",
      "MAX_CNT": "25",
      "APLY_CNT": "25",
      "APLY_YN": "N",
      "FILE_NO": "F20250002"
    }
  ],
  "aply_list": [
    {
      "EXCR_SEQ": "20240055",
      "EXCR_NM": "글로벌 커뮤니케이션 리더십 캠프",
      "PROC_DT": "20241015",
      "APLY_DT": "20241001",
      "APLY_ST": "02",
      "APLY_ST_NM": "수료"
    }
  ]
}

응답 최상위 필드:

필드타입설명
yystring조회된 학년도
smtstring조회된 학기 코드
nowobject현재 학기 정보 (YY, SMT)
categoriesarray카테고리 목록 — EXCR_DIVexcr_div 파라미터로 재사용
user_infoarray본인 학과명·학년 정보
open_listarray신청 가능한 프로그램 목록
aply_listarray본인의 신청 내역

open_list 항목 필드:

필드타입설명
EXCR_SEQstring프로그램 일련번호
EXCR_NMstring프로그램명
EXCR_DIVstring카테고리 코드
EXCR_DIV_NMstring카테고리명
OPEN_DTstring신청 시작일 (YYYYMMDD)
CLOSE_DTstring신청 마감일 (YYYYMMDD)
PROC_DTstring프로그램 진행일 (YYYYMMDD)
PROC_PLACEstring진행 장소
SERV_TIMEstring인정 시간 (시간 단위)
MAX_CNTstring모집 인원
APLY_CNTstring현재 신청 인원
APLY_YNstring본인 신청 여부 (Y / N)
FILE_NOstring첨부파일 조회용 번호 — attach/?file_no= 파라미터로 사용

aply_list 항목 필드:

필드타입설명
EXCR_SEQstring프로그램 일련번호
EXCR_NMstring프로그램명
PROC_DTstring진행일 (YYYYMMDD)
APLY_DTstring신청일 (YYYYMMDD)
APLY_STstring신청 상태 코드
APLY_ST_NMstring신청 상태명 (신청, 수료, 취소 등)

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료

POST /api/extracurricular/detail/

비교과과정 프로그램의 상세 정보를 조회합니다. GET /api/extracurricular/open_list 항목 객체 전체를 row로 전달합니다.

요청 Body

Content-Type: application/json

필드타입필수설명
rowobjectOopen_list 항목 객체 전체 (수정 없이 그대로)
요청 Body 예시
{
  "row": {
    "EXCR_SEQ": "20250001",
    "EXCR_NM": "취업역량 강화 특강 — 이력서 작성법과 면접 전략",
    "EXCR_DIV": "A",
    "EXCR_DIV_NM": "취창업",
    "OPEN_DT": "20250310",
    "CLOSE_DT": "20250320",
    "PROC_DT": "20250325",
    "PROC_PLACE": "산학협력관 201호",
    "SERV_TIME": "2",
    "MAX_CNT": "30",
    "APLY_CNT": "18",
    "APLY_YN": "N",
    "FILE_NO": "F20250001"
  }
}

응답

200 OK — 프로그램 상세 정보. CONT 필드에 HTML 또는 텍스트 형태의 프로그램 설명이 포함될 수 있습니다.

응답 예시
{
  "EXCR_SEQ": "20250001",
  "EXCR_NM": "취업역량 강화 특강 — 이력서 작성법과 면접 전략",
  "EXCR_DIV_NM": "취창업",
  "PROC_DT": "20250325",
  "PROC_PLACE": "산학협력관 201호",
  "PROC_TIME": "14:00 ~ 16:00",
  "SERV_TIME": "2",
  "MAX_CNT": "30",
  "APLY_CNT": "18",
  "INSTR_NM": "김지훈 (취업지원팀 선임연구원)",
  "CONT": "실제 인사담당자가 직접 전달하는 이력서 작성 노하우와 면접 전략을 다룹니다. 실습 위주로 진행되며, 개인 피드백 세션이 포함됩니다.",
  "APLY_STRT_DT": "20250310",
  "APLY_END_DT": "20250320",
  "FILE_NO": "F20250001",
  "APLY_YN": "N"
}

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
MISSING_FIELDS400row 필드 누락
에러 예시 — row 누락
{
  "error": "MISSING_FIELDS",
  "message": "row 누락"
}

GET /api/extracurricular/attach/

비교과과정 프로그램의 첨부파일 목록을 반환합니다. open_list[].FILE_NO 값을 file_no 파라미터로 사용합니다.

쿼리 파라미터

파라미터타입필수설명
file_nostringO첨부파일 그룹 번호 (open_list[].FILE_NO)
요청 예시
GET /api/extracurricular/attach/?file_no=F20250001

응답

200 OK

응답 예시
{
  "items": [
    {
      "FILE_NO": "F20250001",
      "FILE_SEQ": "1",
      "FILE_NM": "취업역량특강_안내문.pdf",
      "FILE_SIZE": "245760",
      "FILE_EXT": "pdf"
    },
    {
      "FILE_NO": "F20250001",
      "FILE_SEQ": "2",
      "FILE_NM": "이력서_작성양식.docx",
      "FILE_SIZE": "32768",
      "FILE_EXT": "docx"
    }
  ]
}

items 항목 필드:

필드타입설명
FILE_NOstring파일 그룹 번호
FILE_SEQstring파일 순번
FILE_NMstring원본 파일명
FILE_SIZEstring파일 크기 (바이트)
FILE_EXTstring파일 확장자

파일 다운로드는 GET /api/extracurricular/download/?file_no=FILE_NO로 요청합니다. FILE_NOFILE_SEQ의 조합으로 특정 파일을 다운로드할 수 있습니다.


GET /api/extracurricular/leaflet/

비교과과정 리플렛(홍보물) 목록을 반환합니다. 파라미터가 없으며 전체 리플렛을 반환합니다.

요청 예시
GET /api/extracurricular/leaflet/

응답

200 OK

응답 예시
{
  "items": [
    {
      "LFLT_SEQ": "1",
      "LFLT_NM": "2025학년도 1학기 비교과과정 안내 리플렛",
      "FILE_NO": "LF20250001",
      "REG_DT": "20250228"
    },
    {
      "LFLT_SEQ": "2",
      "LFLT_NM": "취창업 지원 프로그램 안내",
      "FILE_NO": "LF20250002",
      "REG_DT": "20250305"
    }
  ]
}

items 항목 필드:

필드타입설명
LFLT_SEQstring리플렛 순번
LFLT_NMstring리플렛 제목
FILE_NOstring파일 다운로드용 번호
REG_DTstring등록일 (YYYYMMDD)

GET /api/extracurricular/download/

비교과과정 첨부파일을 다운로드합니다. 응답 본문은 파일 바이너리 스트림입니다.

쿼리 파라미터

파라미터타입필수설명
file_nostringO파일 번호 (attach/ 응답의 FILE_NO)
요청 예시
GET /api/extracurricular/download/?file_no=F20250001

응답

200 OK — 파일 바이너리 스트림 (JSON 아님)

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="취업역량특강_안내문.pdf"

이 엔드포인트는 JSON을 반환하지 않습니다. 응답을 Blob으로 처리하여 파일을 저장하세요.

파일 다운로드 처리 예시
const res = await fetch('/api/extracurricular/download/?file_no=F20250001', {
  credentials: 'include',
})
const blob = await res.blob()
const filename = res.headers.get('Content-Disposition')?.split('filename=')[1] ?? 'download'
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = decodeURIComponent(filename)
a.click()
URL.revokeObjectURL(url)

봉사학습

SCH 통합정보시스템의 봉사학습(Service Learning) 강의 조회·신청·평가 API입니다. 봉사학습은 정규 교과목과 연계하여 학점이 부여되는 봉사활동입니다.

GET /api/service-learning/

봉사학습 강의 목록, 본인 신청 내역, 평가 문항을 반환합니다. yysmt를 생략하면 최신 학기로 자동 조회합니다.

쿼리 파라미터

파라미터타입필수기본값설명
yystring아니오최신 학기학년도 (예: 2025)
smtstring아니오최신 학기학기 코드 (11 / 21)
edu_divstring아니오U2520001교육 유형 코드

edu_div 기본값:

설명
U2520001봉사학습교육

edu_div 추가 허용값은 응답의 categories 배열에서 동적으로 제공됩니다. 첫 요청은 기본값으로 조회하여 반환된 카테고리를 UI 드롭다운으로 활용하세요.

요청 예시
GET /api/service-learning/?yy=2025&smt=11&edu_div=U2520001

응답

200 OK

응답 예시
{
  "yy": "2025",
  "smt": "11",
  "now": { "YY": "2025", "SMT": "11" },
  "categories": [
    { "code": "U2520001", "name": "봉사학습교육" }
  ],
  "questions": [
    {
      "Q_NO": "1",
      "Q_NM": "이 봉사학습 프로그램에 대한 전반적인 만족도는 어떻습니까?",
      "Q_TYPE": "5",
      "OPTIONS": ["매우 불만족", "불만족", "보통", "만족", "매우 만족"]
    },
    {
      "Q_NO": "2",
      "Q_NM": "봉사학습 활동이 전공 역량 향상에 도움이 되었습니까?",
      "Q_TYPE": "5",
      "OPTIONS": ["전혀 아니다", "아니다", "보통", "그렇다", "매우 그렇다"]
    }
  ],
  "subjective": [
    {
      "Q_NO": "5",
      "Q_NM": "봉사학습 활동 중 가장 기억에 남는 경험과 느낀 점을 자유롭게 작성해주세요."
    }
  ],
  "lectures": [
    {
      "EDU_SEQ": "SL2025001",
      "EDU_NM": "지역사회 환경 개선 봉사학습",
      "PROF_NM": "박현수",
      "DEPT_NM": "사회복지학과",
      "PROC_DT": "20250405",
      "PROC_END_DT": "20250620",
      "PROC_PLACE": "아산시 온양3동 일원",
      "MAX_CNT": "20",
      "APLY_CNT": "15",
      "CREDIT": "1",
      "EDU_TIME": "30",
      "APLY_YN": "N",
      "FILE_NO": "SLF20250001"
    },
    {
      "EDU_SEQ": "SL2025002",
      "EDU_NM": "다문화 가정 학습 지원 봉사학습",
      "PROF_NM": "이수연",
      "DEPT_NM": "교육학과",
      "PROC_DT": "20250408",
      "PROC_END_DT": "20250625",
      "PROC_PLACE": "아산시 다문화가족지원센터",
      "MAX_CNT": "15",
      "APLY_CNT": "9",
      "CREDIT": "1",
      "EDU_TIME": "30",
      "APLY_YN": "N",
      "FILE_NO": "SLF20250002"
    }
  ],
  "aply_list": [
    {
      "EDU_SEQ": "SL2024010",
      "EDU_NM": "노인 디지털 역량 강화 봉사학습",
      "APLY_DT": "20240908",
      "COMP_YN": "Y",
      "COMP_DT": "20241122",
      "EVAL_YN": "N",
      "CREDIT": "1"
    }
  ],
  "user_info": [
    {
      "STD_NO": "20201234",
      "NM": "홍길동",
      "DEPT_NM": "컴퓨터소프트웨어공학과",
      "GRADE": "4"
    }
  ]
}

응답 최상위 필드:

필드타입설명
yystring조회된 학년도
smtstring조회된 학기 코드
nowobject현재 학기 정보 (YY, SMT)
categoriesarray교육 유형 카테고리 목록
questionsarray수료 후 제출할 객관식 평가 문항 목록
subjectivearray수료 후 제출할 주관식 평가 문항 목록
lecturesarray신청 가능한 봉사학습 강의 목록
aply_listarray본인의 신청 내역
user_infoarray본인 학번·이름·학과·학년 정보

questions 항목 필드:

필드타입설명
Q_NOstring문항 번호 — eval/save/ 요청의 form 키로 사용
Q_NMstring문항 내용
Q_TYPEstring보기 수 (예: 5 = 5점 척도)
OPTIONSarray보기 텍스트 배열

subjective 항목 필드:

필드타입설명
Q_NOstring문항 번호 — eval/save/ 요청의 form 키로 사용
Q_NMstring문항 내용

lectures 항목 필드:

필드타입설명
EDU_SEQstring강의 일련번호
EDU_NMstring봉사학습명
PROF_NMstring담당 교수명
DEPT_NMstring담당 학과명
PROC_DTstring활동 시작일 (YYYYMMDD)
PROC_END_DTstring활동 종료일 (YYYYMMDD)
PROC_PLACEstring활동 장소
MAX_CNTstring모집 인원
APLY_CNTstring현재 신청 인원
CREDITstring부여 학점
EDU_TIMEstring총 봉사 시간 (시간 단위)
APLY_YNstring본인 신청 여부 (Y / N)
FILE_NOstring첨부파일 조회용 번호

aply_list 항목 필드:

필드타입설명
EDU_SEQstring강의 일련번호
EDU_NMstring봉사학습명
APLY_DTstring신청일 (YYYYMMDD)
COMP_YNstring수료 여부 (Y / N)
COMP_DTstring수료일 (YYYYMMDD) — 미수료 시 빈 문자열
EVAL_YNstring평가 제출 여부 (Y / N)
CREDITstring부여 학점

평가 제출 가능 여부는 aply_list 항목에서 COMP_YN = "Y" (수료 완료) 이고 EVAL_YN = "N" (평가 미제출)인 경우입니다. 이 두 조건을 모두 만족하는 항목에만 평가 UI를 표시하세요.

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료

POST /api/service-learning/detail/

봉사학습 강의의 상세 정보를 조회합니다. GET /api/service-learning/lectures 항목 객체 전체를 row로 전달합니다.

요청 Body

Content-Type: application/json

필드타입필수설명
rowobjectOlectures 항목 객체 전체 (수정 없이 그대로)
요청 Body 예시
{
  "row": {
    "EDU_SEQ": "SL2025001",
    "EDU_NM": "지역사회 환경 개선 봉사학습",
    "PROF_NM": "박현수",
    "DEPT_NM": "사회복지학과",
    "PROC_DT": "20250405",
    "PROC_END_DT": "20250620",
    "PROC_PLACE": "아산시 온양3동 일원",
    "MAX_CNT": "20",
    "APLY_CNT": "15",
    "CREDIT": "1",
    "EDU_TIME": "30",
    "APLY_YN": "N",
    "FILE_NO": "SLF20250001"
  }
}

응답

200 OK — 강의 상세 정보. EDU_CONT 필드에 활동 내용 설명이 포함됩니다.

응답 예시
{
  "EDU_SEQ": "SL2025001",
  "EDU_NM": "지역사회 환경 개선 봉사학습",
  "PROF_NM": "박현수",
  "DEPT_NM": "사회복지학과",
  "PROC_DT": "20250405",
  "PROC_END_DT": "20250620",
  "PROC_PLACE": "아산시 온양3동 일원",
  "CREDIT": "1",
  "EDU_TIME": "30",
  "MAX_CNT": "20",
  "APLY_CNT": "15",
  "EDU_CONT": "아산시 온양3동 지역 내 생활쓰레기 무단투기 지역을 중심으로 환경정화 활동을 진행합니다. 월 2회, 총 6회 활동 예정이며, 수료 후 1학점이 부여됩니다.",
  "APLY_STRT_DT": "20250310",
  "APLY_END_DT": "20250331",
  "FILE_NO": "SLF20250001"
}

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
MISSING_FIELDS400row 필드 누락
에러 예시 — row 누락
{
  "error": "MISSING_FIELDS",
  "message": "row 누락"
}

POST /api/service-learning/apply/

봉사학습을 신청합니다. GET /api/service-learning/lectures 항목 객체 전체를 row로 전달합니다.

요청 Body

Content-Type: application/json

필드타입필수설명
rowobjectOlectures 항목 객체 전체 (수정 없이 그대로)

row는 반드시 GET /api/service-learning/lectures 항목을 수정 없이 그대로 전달하세요. SCH 서버는 row 내 여러 필드를 조합하여 신청을 처리합니다.

요청 Body 예시
{
  "row": {
    "EDU_SEQ": "SL2025001",
    "EDU_NM": "지역사회 환경 개선 봉사학습",
    "PROF_NM": "박현수",
    "DEPT_NM": "사회복지학과",
    "PROC_DT": "20250405",
    "PROC_END_DT": "20250620",
    "PROC_PLACE": "아산시 온양3동 일원",
    "MAX_CNT": "20",
    "APLY_CNT": "15",
    "CREDIT": "1",
    "EDU_TIME": "30",
    "APLY_YN": "N",
    "FILE_NO": "SLF20250001"
  }
}

응답

신청 결과는 HTTP 상태코드와 ok 필드를 함께 확인해야 합니다.

200 OK — 신청 성공

응답 예시 — 성공
{
  "ok": true,
  "code": "0",
  "message": "신청이 완료되었습니다."
}

400 Bad Request — SCH 서버 거부 (이미 신청됨, 정원 초과 등)

응답 예시 — SCH 서버 거부
{
  "ok": false,
  "code": "E001",
  "message": "이미 신청된 봉사학습입니다."
}
필드타입설명
okboolean처리 성공 여부
codestringSCH 서버 결과 코드 ("0" = 성공)
messagestringSCH 서버 결과 메시지

SCH 서버가 신청을 거부하면 HTTP 상태코드는 400이지만, 응답 본문은 error 키 없이 ok, code, message 형식으로 반환됩니다. 반드시 ok 필드 값을 확인하여 성공/실패를 판단하세요.

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
MISSING_FIELDS400row 필드 누락
(SCH 거부)400ok: false + code + message 형식 응답
에러 예시 — row 누락
{
  "error": "MISSING_FIELDS",
  "message": "row 누락"
}

POST /api/service-learning/cancel/

봉사학습 신청을 취소합니다. GET /api/service-learning/aply_list 항목 객체 전체를 row로 전달합니다.

요청 Body

Content-Type: application/json

필드타입필수설명
rowobjectOaply_list 항목 객체 전체 (수정 없이 그대로)
요청 Body 예시
{
  "row": {
    "EDU_SEQ": "SL2024010",
    "EDU_NM": "노인 디지털 역량 강화 봉사학습",
    "APLY_DT": "20240908",
    "COMP_YN": "N",
    "COMP_DT": "",
    "EVAL_YN": "N",
    "CREDIT": "1"
  }
}

응답

200 OK

응답 예시
{
  "ok": true,
  "code": "0",
  "message": "취소가 완료되었습니다."
}
필드타입설명
okboolean처리 성공 여부
codestringSCH 서버 결과 코드
messagestringSCH 서버 결과 메시지

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
MISSING_FIELDS400row 필드 누락
에러 예시 — row 누락
{
  "error": "MISSING_FIELDS",
  "message": "row 누락"
}

POST /api/service-learning/eval/save/

봉사학습 수료 후 평가를 제출합니다. aply_list 항목과 사용자가 작성한 평가 폼 데이터를 함께 전달합니다.

평가 제출은 해당 aply_list 항목의 COMP_YN = "Y" (수료 완료) 이고 EVAL_YN = "N" (평가 미제출)인 경우에만 가능합니다. 이 조건을 확인한 후 제출 UI를 활성화하세요.

요청 Body

Content-Type: application/json

필드타입필수설명
rowobjectOaply_list 항목 객체 전체 (수정 없이 그대로)
formobjectO사용자가 입력한 평가 데이터

form 객체는 GET /api/service-learning/ 응답의 questions(객관식)와 subjective(주관식) 문항을 기반으로 구성합니다.

  • 키: 각 문항의 Q_NO (문자열)
  • 값: 객관식 = 선택한 보기 번호 (문자열, "1" ~ "5"), 주관식 = 사용자 입력 텍스트
요청 Body 예시
{
  "row": {
    "EDU_SEQ": "SL2024010",
    "EDU_NM": "노인 디지털 역량 강화 봉사학습",
    "APLY_DT": "20240908",
    "COMP_YN": "Y",
    "COMP_DT": "20241122",
    "EVAL_YN": "N",
    "CREDIT": "1"
  },
  "form": {
    "1": "5",
    "2": "4",
    "5": "어르신들과 함께 스마트폰 사용법을 익히는 과정에서 세대 간 소통의 소중함을 깊이 느꼈습니다. 단순한 기술 전달을 넘어 진정한 나눔의 의미를 배울 수 있었습니다."
  }
}

응답

200 OK

응답 예시
{
  "ok": true,
  "code": "0",
  "message": "평가가 저장되었습니다."
}
필드타입설명
okboolean처리 성공 여부
codestringSCH 서버 결과 코드
messagestringSCH 서버 결과 메시지

에러 응답

에러 코드HTTP설명
UNAUTHORIZED401세션 없음 또는 만료
MISSING_FIELDS400row 필드 누락
에러 예시 — row 누락
{
  "error": "MISSING_FIELDS",
  "message": "row 누락"
}

GET /api/service-learning/attach/

봉사학습 강의의 첨부파일 목록을 반환합니다. lectures[].FILE_NO 값을 file_no 파라미터로 사용합니다.

쿼리 파라미터

파라미터타입필수설명
file_nostringO첨부파일 그룹 번호 (lectures[].FILE_NO)
요청 예시
GET /api/service-learning/attach/?file_no=SLF20250001

응답

200 OK

응답 예시
{
  "items": [
    {
      "FILE_NO": "SLF20250001",
      "FILE_SEQ": "1",
      "FILE_NM": "봉사학습_활동계획서.pdf",
      "FILE_SIZE": "512000",
      "FILE_EXT": "pdf"
    },
    {
      "FILE_NO": "SLF20250001",
      "FILE_SEQ": "2",
      "FILE_NM": "봉사학습_오리엔테이션_자료.pptx",
      "FILE_SIZE": "2097152",
      "FILE_EXT": "pptx"
    }
  ]
}

items 항목 필드:

필드타입설명
FILE_NOstring파일 그룹 번호
FILE_SEQstring파일 순번
FILE_NMstring원본 파일명
FILE_SIZEstring파일 크기 (바이트)
FILE_EXTstring파일 확장자

GET /api/service-learning/download/

봉사학습 첨부파일을 다운로드합니다. 응답 본문은 파일 바이너리 스트림입니다.

쿼리 파라미터

파라미터타입필수설명
file_nostringO파일 번호 (attach/ 응답의 FILE_NO)
요청 예시
GET /api/service-learning/download/?file_no=SLF20250001

응답

200 OK — 파일 바이너리 스트림 (JSON 아님)

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="봉사학습_활동계획서.pdf"

이 엔드포인트는 JSON을 반환하지 않습니다. 응답을 Blob으로 처리하여 파일을 저장하세요.

파일 다운로드 처리 예시
const res = await fetch('/api/service-learning/download/?file_no=SLF20250001', {
  credentials: 'include',
})
const blob = await res.blob()
const filename = res.headers.get('Content-Disposition')?.split('filename=')[1] ?? 'download'
const url = URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = decodeURIComponent(filename)
a.click()
URL.revokeObjectURL(url)

On this page