엑셀 로그인 시스템 구축, 사용자별 시트 관리까지 한번에!

사용자별 시트 접근권한 제어 및 엑셀 파일 보안을 위한 로그인 시스템 구축 방법을 단계별로 알아봅니다

홈페이지 » 엑셀 로그인 시스템 구축, 사용자별 시트 관리까지 한번에! :: 완성파일제공

엑셀 로그인 시스템 만들기 :: 사용자별 접근권한/시트관리까지 한번에

엑셀 로그인 시스템 만들기 목차 바로가기
강의 요약

엑셀 파일보안을 위해 가장 보편적으로 사용되는 기능에는 엑셀에서 기본으로 제공되는 '통합문서보호' 또는 '시트보호' 가 있습니다. (필요에 따라 DRM 등의 문서보안 프로그램이 사용되기도 합니다.) 히지만 이 기능들은 통합문서나 시트를 선택적으로 보호하지 못하고, 파일 또는 시트를 일괄적으로 한번에 암호화하게 됩니다.

따라서 사용자별 또는 직급별로 구분하여 파일을 보호해야 할 경우, 여러개의 통합문서로 나눠서 관리하거나 시트별로 다른 암호를 설정하는 등의 번거로운 절차가 필요했는데요. 이번 강의에서는 엑셀 매크로를 활용하여 사용자별 접근권한을 제어하고 로그인 기록을 관리할 수 있는 엑셀 로그인 시스템 구축 방법을 단계별로 알아봅니다.

엑셀은 기본적으로 파일보안에 아주 훌륭한 프로그램은 아닙니다. 파일의 원본을 공유해야 하는 엑셀의 특성상, 100% 완벽하게 파일을 보안하는 것은 현실적으로 불가능합니다. 굳이 비교하자면, 엑셀시트보호 < 통합문서보호 < 매크로보호 < DRM(기타 외부 보안 프로그램) 순으로 보안단계가 올라간다고 볼 수 있습니다.

따라서, 아래와 같은 환경에서 엑셀작업 (또는 업무공유)가 주로 발생한다면, 매크로를 사용한 로그인 시스템 사용을 긍정적으로 검토해 볼 수 있습니다.

  • 하나의 파일로 여러 부서간에 자료 공유가 필요하나, 복잡한 함수 또는 기능이 포함된 엑셀문서를 다뤄야 할 경우
  • 파일 수정이 1시간이상 단위로 발생하며, 한 파일에 동시접속이 거의 발생하지 않는 경우
  • 사내 네트워크 드라이브에서 엑셀 파일을 공유 하는 경우 (또는 드롭박스, 구글드라이브 등의 클라우드 사용)
  • 동일한 형식의 파일을 여러 부서 또는 매장으로부터 주기적으로 취합하는 경우
영상강의

예제파일 및 완성파일 다운로드

강의에 사용된 전체 명령문

frmLogin (로그인 유저폼) 명령문

Private Sub txtID_Enter()
 
    If Me.txtID.Value = "직원번호를 입력하세요" Then
        Me.txtID.Value = ""
        Me.txtID.ForeColor = RGB(51, 51, 51) ' HEX: #33333
    End If
 
End Sub
 
Private Sub txtID_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    If Me.txtID.Value = "" Then
        Me.txtID.Value = "직원번호를 입력하세요"
        Me.txtID.ForeColor = RGB(128, 128, 128) ' HEX: #808080
    End If
 
End Sub
 
Private Sub txtPW_Enter()
 
    If Me.txtPW.Value = "비밀번호를 입력하세요" Then
        Me.txtPW.Value = ""
        Me.txtPW.ForeColor = RGB(51, 51, 51) ' HEX: #33333
        Me.txtPW.PasswordChar = "*"
    End If
 
End Sub
 
Private Sub txtPW_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    If Me.txtPW.Value = "" Then
        Me.txtPW.Value = "비밀번호를 입력하세요"
        Me.txtPW.ForeColor = RGB(128, 128, 128) ' HEX: #808080
        Me.txtPW.PasswordChar = ""
    End If
 
End Sub
 
Private Sub btnLogin_Click()
 
    Login_Verification
 
End Sub
 
Sub Login_Verification()
' 아이디와 비밀번호가 사용자정보시트에 존재하는지 확인 (일치하는지)
Dim EndRow As Long  '마지막 행
Dim i As Long       'For문 변수
 
' 오류처리
If Me.txtID.Value = "직원번호를 입력하세요" Then MsgBox "직원번호를 입력해주세요.": Exit Sub
If Me.txtPW.Value = "비밀번호를 입력하세요" Then MsgBox "비밀번호를 입력해주세요.": Exit Sub
 
' 직원번호와 비밀번호 확인
With shtUser
 
    EndRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    'https://www.oppadu.com/엑셀-vba-마지막-셀-찾기-마지막-행-찾기/
 
    For i = 2 To EndRow
        If .Cells(i, 1).Value = Me.txtID.Value And .Cells(i, 2) = Me.txtPW.Value Then
            '로그인 성공
            Login_Success
            MsgBox .Cells(i, 3).Value & "님 안녕하세요. 환영합니다." & vbNewLine & _
                    "접속시간 :" & Format(Now(), "yyyy년 mm월 dd일 hh시 mm분")
            Unload Me
            Exit Sub
        End If
    Next
 
'--------------------
Attempt = Attempt - 1
 
If Attempt > 0 Then
    '로그인 실패
    MsgBox "존재하지 않는 직원번호 또는 비밀번호가 잘못되었습니다." & vbNewLine & _
            "남은 횟수 : " & Attempt & "회"
Else
    MsgBox "직원번호 또는 비밀번호가 3회이상 잘못되어 프로그램을 종료합니다."
    blnClose = True '강제종료
    CloseWB False
End If
 
End With
 
End Sub
 
Sub Login_Success()
 
'변수설정
Dim WS As Worksheet
Dim EndRow As Long
 
' 각 시트를 돌아가면서 시트를 보임/숨김
For Each WS In ThisWorkbook.Worksheets
    Select Case WS.Name
        '관라자일 경우 -> 사용자정보 시트를 표시
        Case "로그인기록", "사용자정보"
            If Me.txtID.Value = "admin" Then WS.Visible = xlSheetVisible
        '로그인 시트는 숨김
        Case "로그인"
            WS.Visible = xlSheetVeryHidden
        '나머지 시트는 표시
        Case Else
            WS.Visible = xlSheetVisible
    End Select
Next
 
'로그인 기록시트에 기록 추가
With shtHistory
    EndRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Cells(EndRow, 1) = Now
    .Cells(EndRow, 2) = Me.txtID.Value
End With
 
Attempt = 3
 
End Sub

모듈에 추가된 명령문

Public blnClose As Boolean
Public Attempt As Long
 
Function CloseWB(Optional SaveChanges As Boolean = True, Optional DisplayAlert As Boolean = False) As Boolean
 
Dim WB As Workbook
Dim i As Long
Dim vbYN As VbMsgBoxResult
 
Application.DisplayAlerts = False
 
Logout
 
If blnClose = False Then
 
    If DisplayAlert = True Then
 
        vbYN = MsgBox("'" & ThisWorkbook.Name & "' 의 변경내용을 저장하시겠습니까?", vbYesNoCancel)
 
        If vbYN = vbNo Then SaveChanges = False: blnClose = True
        If vbYN = vbYes Then SaveChanges = True: blnClose = True
        If vbYN = vbCancel Then blnClose = False: GoTo Finally
 
    End If
 
    For Each WB In Application.Workbooks
        If WB.Name <> "PERSONAL.XLSB" Then i = i + 1
    Next
 
    If i = 1 Then
        If SaveChanges = True Then
            ThisWorkbook.Save
            Application.EnableEvents = False
            Application.Quit
        Else
            ThisWorkbook.Saved = True
            Application.EnableEvents = False
            Application.Quit
        End If
    Else
        If SaveChanges = True Then
            ThisWorkbook.Save
            ThisWorkbook.Close
        Else
            ThisWorkbook.Saved = True
            ThisWorkbook.Close
        End If
    End If
 
End If
 
CloseWB = False
Application.DisplayAlerts = True
 
Exit Function
 
Finally:
Application.DisplayAlerts = True
CloseWB = True
 
End Function
 
Sub Logout()
 
Dim WS As Worksheet
 
shtLogin.Visible = xlSheetVisible
 
For Each WS In ThisWorkbook.Worksheets
    If WS.Name <> "로그인" Then WS.Visible = xlSheetVeryHidden
Next
 
End Sub
 
Sub show_frmLogin()
 
frmLogin.Show
 
End Sub

현재_통합_문서 모듈에 추가된 명령문

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 
Cancel = CloseWB(, True)
 
End Sub
 
Private Sub Workbook_Open()
 
Attempt = 3
show_frmLogin
 
End Sub

엑셀 로그인 시스템 완성파일 사용법

사용자별 접근권한을 더욱 체계적으로 관리할 수 있는 업그레이드 된 엑셀 로그인 양식은 회원 자료실에서 무료로 다운로드 가능합니다.

기존 사용 중인 통합문서의 시트를 로그인 완성파일로 옮기는 방법
  1. 기존 사용중인 통합문서의 시트를 선택합니다.

    로그인 양식 옮길 시트 목록 선택
    엑셀 로그인 완성파일로 옮길 시트를 선택합니다.
  2. 시트를 우클릭 한 뒤, '이동/복사'를 클릭합니다.

    시트 이동 복사
    시트를 우클릭 한 뒤, '이동/복사'를 선택합니다.
  3. '로그인 완성' 파일을 선택한 뒤, '복사본만들기' 체크박스를 활성화합니다. '확인' 버튼을 누르면 시트복사가 완료됩니다.

    로그인 양식 시트 복사
    로그인 완성 파일을 선택한 뒤, '복사본 만들기' 체크박스를 활성화합니다.
로그인 유저폼에 회사 로고를 추가하는 방법
  1. 개발도구 - Visual Basic 를 클릭하거나 또는 단축키 Alt + F11 을 눌러 매크로 편집기로 이동합니다. 개발도구가 안보이시는 분은 아래 개발도구 활성화 방법 포스트를 확인하여 엑셀 개발도구를 활성화합니다.
  2. 프로젝트 창의 '폼' - 'frmLogin'을 더블클릭합니다.

    로그인 유저폼 이동
    '폼' - 'frmLogin'을 더블클릭합니다.
  3. 유저폼의 오빠두 로고를 클릭한 뒤, 속성의 Picture - '...' 버튼을 클릭합니다.

    엑셀 로그인 폼 로고 설정
    로고를 선택한 뒤, Picture 속성의 '...' 버튼을 클릭합니다.
  4. 회사 로고가 있는 그림파일을 선택하면, 회사 로고 삽입이 완료됩니다.

    엑셀 로그인 유저폼 로고 변경 완료
    회사 로고 삽입이 완료되었습니다.
로그인 시트에 로그인버튼을 추가하는 방법
  1. 로그인 시트로 이동한 뒤, '삽입' - '도형'에서 네모난 도형을 삽입합니다.

    도형 삽입
    버튼으로 사용할 네모난 도형을 삽입합니다.
  2. 도형을 적절히 꾸민 뒤, 우클릭하여 '매크로 지정'을 선택합니다.

    도형 매크로 지정
    도형을 우클릭 한 뒤, '매크로지정' 을 선택합니다.
  3. 목록에서 show_frmLogin 을 선택한 뒤, 확인을 눌러 로그인 버튼 추가를 완료합니다.

    엑셀 로그인 명령문 지정
    매크로 목록에서 'show_frmLogin'을 선택한 후, '확인' 버튼을 눌러 마무리합니다.

엑셀 로그인 유저폼의 구성

엑셀 로그인 유저폼 구성

이름설명
txtID
[텍스트상자]
직원번호를 입력하는 텍스트상자입니다. 아이디로는 대부분 영어가 사용되므로, IMEMode 를 'frmIMEModeAlpha'로 변경합니다. 만약 아이디로 한글이 사용될 경우 'frmIMEModeHangul'을 선택합니다.
txtPW
[텍스트상자]
비밀번호를 입력하는 텍스트상자입니다. 비밀번호는 반드시 IMEMode 속성을 'frmIMEModeAlpha'로 설정합니다. 또한 비밀번호는 화면에서 숨겨져야 하는 값이므로 PasswordChar 속성을 "*" 로 입력합니다.
btnLogin
[버튼]
직원번호와 아이디를 입력 후, 로그인 동작을 위한 버튼입니다.

로그인 유저폼 동작 설정

1. 아이디 및 비밀번호를 입력할 경우

아이디를 입력하기 위하여 txtID 로 포커싱In 또는 포커싱Out 될 경우의 명령문을 추가합니다.

' --------------------------------------------------------- 
' frmLogin 유저폼 모듈에 추가합니다.
' --------------------------------------------------------- 
 
Private Sub txtID_Enter()
 
    If Me.txtID.Value = "직원번호를 입력하세요" Then
        Me.txtID.Value = ""
        Me.txtID.ForeColor = RGB(51, 51, 51) ' HEX: #33333
    End If
 
End Sub
 
Private Sub txtID_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    If Me.txtID.Value = "" Then
        Me.txtID.Value = "직원번호를 입력하세요"
        Me.txtID.ForeColor = RGB(128, 128, 128) ' HEX: #808080
    End If
 
End Sub

비밀번호를 입력하기 위하여 txtPW 로 포커싱In 또는 포커싱Out 될 경우의 명령문을 추가합니다.

' --------------------------------------------------------- 
' frmLogin 유저폼 모듈에 추가합니다.
' --------------------------------------------------------- 
 
Private Sub txtPW_Enter()
 
    If Me.txtPW.Value = "비밀번호를 입력하세요" Then
        Me.txtPW.Value = ""
        Me.txtPW.ForeColor = RGB(51, 51, 51) ' HEX: #33333
        Me.txtPW.PasswordChar = "*"
    End If
 
End Sub
 
Private Sub txtPW_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 
    If Me.txtPW.Value = "" Then
        Me.txtPW.Value = "비밀번호를 입력하세요"
        Me.txtPW.ForeColor = RGB(128, 128, 128) ' HEX: #808080
        Me.txtPW.PasswordChar = ""
    End If
 
End Sub
2. 로그인 버튼을 클릭할 경우

로그인 버튼을 클릭하면 아래 조건을 확인하여 로그인 성공 및 실패를 구분한 뒤 각 동작을 수행합니다.

  • txtID 또는 txtPW 값이 기본값일 경우 "아이디 또는 비밀번호를 입력하세요" 라는 안내메세지 출력
  • 입력된 직원번호와 비밀번호가 사용자정보 시트 정보과 일치하는지 확인 : 일치할경우 -> 로그인 성공
  • 불일치 할 경우, 로그인 시도횟수 확인하여 3회 이상일 시 -> "아이디 또는 비밀번호를 확인하세요" 안내메세지 출력
  • 로그인 시도횟수가 0 일 경우 -> 파일 강제 종료
' --------------------------------------------------------- 
' frmLogin 유저폼 모듈에 추가합니다.
' --------------------------------------------------------- 
 
Private Sub btnLogin_Click()
 
    Login_Verification
 
End Sub
 
Sub Login_Verification()
' 아이디와 비밀번호가 사용자정보시트에 존재하는지 확인 (일치하는지)
Dim EndRow As Long  '마지막 행
Dim i As Long       'For문 변수
 
' 오류처리
If Me.txtID.Value = "직원번호를 입력하세요" Then MsgBox "직원번호를 입력해주세요.": Exit Sub
If Me.txtPW.Value = "비밀번호를 입력하세요" Then MsgBox "비밀번호를 입력해주세요.": Exit Sub
 
' 직원번호와 비밀번호 확인
With shtUser
 
    EndRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    'https://www.oppadu.com/엑셀-vba-마지막-셀-찾기-마지막-행-찾기/
 
    For i = 2 To EndRow
        If .Cells(i, 1).Value = Me.txtID.Value And .Cells(i, 2) = Me.txtPW.Value Then
            '로그인 성공
            Login_Success
            MsgBox .Cells(i, 3).Value & "님 안녕하세요. 환영합니다." & vbNewLine & _
                    "접속시간 :" & Format(Now(), "yyyy년 mm월 dd일 hh시 mm분")
            Unload Me
            Exit Sub
        End If
    Next
 
'--------------------
Attempt = Attempt - 1
 
If Attempt > 0 Then
    '로그인 실패
    MsgBox "존재하지 않는 직원번호 또는 비밀번호가 잘못되었습니다." & vbNewLine & _
            "남은 횟수 : " & Attempt & "회"
Else
    MsgBox "직원번호 또는 비밀번호가 3회이상 잘못되어 프로그램을 종료합니다."
    blnClose = True '강제종료
    CloseWB False
End If
 
End With
 
End Sub
3. 로그인을 성공했을 경우

입력한 아이디와 비밀번호가 일치하여 로그인에 성공하면, '로그인' 시트는 숨김처리 합니다. 그리고 각 사용자정보에 따라 등록된 시트를 출력합니다.

' --------------------------------------------------------- 
' frmLogin 유저폼 모듈에 추가합니다.
' --------------------------------------------------------- 
Sub Login_Success()
 
'변수설정
Dim WS As Worksheet
Dim EndRow As Long
 
' 각 시트를 돌아가면서 시트를 보임/숨김
For Each WS In ThisWorkbook.Worksheets
    Select Case WS.Name
        '관라자일 경우 -> 사용자정보 시트를 표시
        Case "로그인기록", "사용자정보"
            If Me.txtID.Value = "admin" Then WS.Visible = xlSheetVisible
        '로그인 시트는 숨김
        Case "로그인"
            WS.Visible = xlSheetVeryHidden
        '나머지 시트는 표시
        Case Else
            WS.Visible = xlSheetVisible
    End Select
Next
 
'로그인 기록시트에 기록 추가
With shtHistory
    EndRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    .Cells(EndRow, 1) = Now
    .Cells(EndRow, 2) = Me.txtID.Value
End With
 
Attempt = 3
 
End Sub
 
' --------------------------------------------------------- 
' 일반 모듈에 추가합니다.
' --------------------------------------------------------- 
 
Public Attempt As Long
4. 파일을 종료할 경우 (로그아웃 할 경우)

사용자가 파일을 종료하거나 로그아웃 할 경우, 처음 파일을 실행했을 때와 동일하게 '로그인' 시트만 목록에서 보이도 명령문을 추가합니다. 그래야만 이후에 다른 사람이 파일을 실행하더라도, 로그인 시트만 목록에 출력됩니다.

' ---------------------------------------------------------
' 현재_통합_문서 모듈에 추가합니다.
' ---------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 
Cancel = CloseWB(, True)
 
End Sub
 
' ---------------------------------------------------------
' 일반 모듈에 추가합니다.
' ---------------------------------------------------------
Public blnClose As Boolean
 
Function CloseWB(Optional SaveChanges As Boolean = True, Optional DisplayAlert As Boolean = False) As Boolean
 
Dim WB As Workbook
Dim i As Long
Dim vbYN As VbMsgBoxResult
 
Application.DisplayAlerts = False
 
Logout
 
If blnClose = False Then
 
    If DisplayAlert = True Then
 
        vbYN = MsgBox("'" & ThisWorkbook.Name & "' 의 변경내용을 저장하시겠습니까?", vbYesNoCancel)
 
        If vbYN = vbNo Then SaveChanges = False: blnClose = True
        If vbYN = vbYes Then SaveChanges = True: blnClose = True
        If vbYN = vbCancel Then blnClose = False: GoTo Finally
 
    End If
 
    For Each WB In Application.Workbooks
        If WB.Name <> "PERSONAL.XLSB" Then i = i + 1
    Next
 
    If i = 1 Then
        If SaveChanges = True Then
            ThisWorkbook.Save
            Application.EnableEvents = False
            Application.Quit
        Else
            ThisWorkbook.Saved = True
            Application.EnableEvents = False
            Application.Quit
        End If
    Else
        If SaveChanges = True Then
            ThisWorkbook.Save
            ThisWorkbook.Close
        Else
            ThisWorkbook.Saved = True
            ThisWorkbook.Close
        End If
    End If
 
End If
 
CloseWB = False
Application.DisplayAlerts = True
 
Exit Function
 
Finally:
Application.DisplayAlerts = True
CloseWB = True
 
End Function
 
Sub Logout()
 
Dim WS As Worksheet
 
shtLogin.Visible = xlSheetVisible
 
For Each WS In ThisWorkbook.Worksheets
    If WS.Name <> "로그인" Then WS.Visible = xlSheetVeryHidden
Next
 
End Sub
5. 파일을 실행할 경우

파일 실행 시 로그인 유저폼을 자동으로 띄우고 로그인 시도횟수를 3으로 초기화하는 명령문을 추가합니다.

' ---------------------------------------------------------
' 현재_통합_문서 모듈에 추가합니다.
' ---------------------------------------------------------
Private Sub Workbook_Open()
 
Attempt = 3
show_frmLogin
 
End Sub
 
' ---------------------------------------------------------
' 일반 모듈에 추가합니다.
' ---------------------------------------------------------
 
Sub show_frmLogin()
 
frmLogin.Show
 
End Sub

완성된 파일 저장 및 매크로 보안설정

엑셀 로그인 시스템 파일 작성을 완료했으면, 파일을 저장하고 작성한 매크로를 암호화합니다.

  1. 매크로 편집기로 이동한 뒤, 'VBAProject' 를 우클릭 - 'VBAProject 속성' 으로 이동합니다.

    VBA 프로젝트 속성 이동
    VBA 프로젝트를 우클릭 한 뒤, VBAProject 속성으로 이동합니다.
  2. '보호' 탭으로 이동 한 뒤, '읽기전용으로 프로젝트잠금' 체크박스를 활성화합니다. 이후 암호를 입력한 뒤 '확인' 버튼을 클릭합니다.

    VBA 프로젝트 보호
    일기 전용으로 프로젝트 잠금을 활성화 한 뒤, 암호를 입력합니다.
  3. 매크로 편집기 화면 좌측상단의 '저장' 버튼을 클릭하여 파일을 저장합니다.

    엑셀 VBA 프로젝트 저장
    저장 버튼을 클릭합니다.
  4. 만약 사용중인 파일이 '일반 통합문서'일 경우, "다음 기능은 매크로 제외 통합 문서에 저장할 수 없습니다." 라는 안내메세지가 출력됩니다.

    매크로 제외 통합문서 저장 불가 메세지
    사용중인 파일이 '일반 통합문서'일 경우, 오류메세지가 출력됩니다.
  5. 그럴 경우, '아니오' 버튼을 클릭한 뒤, 파일 형식을 '매크로 사용 통합문서'로 선택하여 파일 저장을 마무리합니다.

    엑셀 매크로 사용 통합문서 저장
    파일 형식을 '매크로 사용 통합문서'로 선택한 뒤 파일 저장을 마무리합니다.
5 8 votes
별점주기
현재 페이지 댓글알림 신청
알림 설정
guest
10 Comments
Inline Feedbacks
View all comments
0ugi
별점주기 :
     

또 엄청난걸 제작하셨군요..

DollShe
별점주기 :
     

정말 대단하십니다. 잘 사용하겠습니다.

나두코리
별점주기 :
     

정말 유용하 기능이 되겠네요 ^^

벅스
별점주기 :
     

매번감탄합니다. 감사합니다.

머털이
별점주기 :
     

역시 오빠두~!!! 잘 쓸게요~~

감자감자
별점주기 :
     

와 근데 이건 진짜 대박이네요 회사에서 중요 서류만 죄다 이걸로 대체하기만해도 보안걱정은 확 줄겠어요

엑셀배우자
별점주기 :
     

회사에서 제가 만든 엑셀 파일에 이거 보구 암호화 진행을 했습니다. 그런데 비밀번호 3회 틀리면 강제 종료가 안되요 ..ㅠㅠ 엑셀을 종료한다는 메시지 박스만 뜨고 종료가 되지 않습니다.. 종료 관련한 VBA 코드는 건든적이 없는거 같은데.. 뭐가 문제일까요.. ㅠ

엑셀배우자

완성 파일 올려주신거도 비밀번호 3회 틀려도 엑셀이 꺼지지 않습니다~

10****
별점주기 :
     

비번3회오류로 못쓰고 있어요 해결좀 부탁드립니다.

10
0
여러분의 생각을 댓글로 남겨주세요.x