프로그램

임시공휴일 포함 대한민국 휴무일 조회(향후 2년간)

by 지천명영어 posted Apr 26, 2025
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

 

데이터 관리에서 날짜는 중요한 요소입니다. 특히 상거래에서는 주말(토·일)뿐만 아니라 공휴일 관리가 필수적입니다. 예를 들어, 결혼식 관리 회사에서는 봄·가을 주말에 평균 50건의 업무를 처리하므로, 주말과 임시공휴일을 포함한 휴무일 관리가 매우 중요합니다.

 

이 프로그램은 조회일로부터 올해와 내년의 휴무일을 추출하여 표시합니다. 아래는 프로그램의 핵심 내용과 코드 설명입니다.

 

 

이 코드의 핵심은 2가지 입니다.

 

1. API연결하기 

 

대한민국 공휴일 관리는 한국천문연구원_특일 정보(https://www.data.go.kr/data/15012690/openapi.do)에서 합니다.

이곳에서 자신의 api키를 발급받을 수 있습니다. 당연히 무료발급이며 신청하면 바로 발급해 줍니다.

 

2. 리턴된 공휴일 파싱하기

 

오픈API에서 가져온 데이터 값은 보통 json형식을 가지고 있습니다. 하지만 이런 간단한 데이터는 간단한 형태를 가지고 있기에 jsonconverter를 이용할 필요없습니다.

루핑으로 필요한 데이터를 추출합니다.

 

생각보다 간단히 임시 공휴일을 포함한 2년간 휴무일을 가져올 수 있습니다.

 

만약에 데이터 관리가 필요한 업종이라면, 자신이 관리하는 장부의 데이터 셀에 이 정보를 join해서 다음과 같이 휴무일 관리를 하면됩니다.

 

 

위 이미지가 공휴일이 적용된 날짜 관리 형식입니다.

평일과 토요일. 일요일 각각의 색으로 표시해서 구분을 합니다. 이는 주말에 결혼식이 이루어지기 때문에 결혼식이 주말이 아닌 경우 재차 확인후 업무를 진행하게 되어 실수를 줄여줍니다.

 

그리고 5월 5일 어린이날도 평일이 아니기 때문에 날짜를 입력하는 순간 바탕색으로 공휴일을 표시해 줍니다.

 

참고로, 날짜는 날짜 - 요일 - 시간으로 구분해서 업무 편리를 도왔습니다.

날짜가 생명인 업종에는 꼭 필요한 코드입니다.

 

image.png

(실제로 휴무일 조회한 결과 : 2025.6.3 대통령선거일 임시휴무일도 잘 나옵니다.)

 

아래는 휴무일 추출 코드입니다. 참고하세요.

 

vba 코드

 

Option Explicit

 

Sub FetchKoreanHolidaysAPI()

 

    Dim http As Object

    Dim url As String

    Dim jsonResponse As String

    Dim json As Object

    Dim i As Integer

    Dim xmlDoc As Object

    

    Dim items As Object

    Dim item As Object

    ' Holiday 시트 설정

Dim iws As Worksheet:    Set iws = ThisWorkbook.Sheets("License")

Dim i_cell As Range: Set i_cell = iws.Cells(6, 11)

Dim i_range As Range: Set i_range = Range(i_cell.Offset(1), iws.Cells(iws.Rows.Count, i_cell.Column).End(xlUp))

    i_range.Resize(i_range.Rows.Count, 4).ClearContents

    

    ' HTTP 객체 생성  Cells(Rows.Count, i_cell.Column).End(xlUp)

    Set http = CreateObject("MSXML2.XMLHTTP")

    

    ' API URL ()

Dim i_key As String: i_key = "공공데이터포털에서 발급받은 키를 넣으세요"

 

Dim year_cnt As Long, i_year As String

 

For year_cnt = 0 To 1

    i_year = CStr(Year(DateAdd("yyyy", year_cnt, Now())))

    Debug.Print i_year

    url = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getHoliDeInfo?solYear=" & i_year & "&ServiceKey=" & i_key & "&numOfRows=100"

    

    ' API 요청

    http.Open "GET", url, False

    http.send

    

    ' 응답 받기

    jsonResponse = http.responseText

    

 ' XML 파싱 객체 생성

    Set xmlDoc = CreateObject("MSXML2.DOMDocument")

    xmlDoc.async = False

    xmlDoc.LoadXML jsonResponse ' 실제로는 http.responseText 사용

    

    ' 파싱 오류 확인

    If xmlDoc.parseError.ErrorCode <> 0 Then

        MsgBox "XML 파싱 오류: " & xmlDoc.parseError.reason, vbCritical

        Exit Sub

    End If

    

    ' <item> 노드 가져오기

    Set items = xmlDoc.SelectNodes("//items/item")

    

Dim i_date As String

    

Dim j As Long: j = 0

    For Each item In items

        i_date = item.SelectSingleNode("locdate").Text ' 날짜 (YYYYMMDD)

        

        i_cell.Offset(i, j).value = Left(i_date, 4) & "-" & Mid(i_date, 5, 2) & "-" & Mid(i_date, 7)

        i_cell.Offset(i, j + 1).value = item.SelectSingleNode("dateName").Text ' 휴일명

        i_cell.Offset(i, j + 2).value = item.SelectSingleNode("isHoliday").Text ' 공휴일 여부 (Y/N)

        i_cell.Offset(i, j + 3).value = Format(i_cell.Offset(i, j).value, "aaa")

        i = i + 1

    Next item

    

Next

    i_cell.Offset(-3, 3) = Format(Now(), "yyyy-mm-dd hh:mm:ss")

    

End Sub

 


Articles

1 2 3