사람의 디버깅 기술을 확인하거나 평가하는 방법은 무엇입니까? [닫은]


48

코드를 쉽게 디버깅 할 수있는 사람을 결정하는 기술은 무엇입니까? 얼마 전 내 친구는 비교적 좋은 프로그래머와 인터뷰를했습니다. 프로그래머가 고용되었습니다. 그는 좋은 코드를 작성하고 프레임 워크와 디자인 패턴을 이해할 수있었습니다. 그가 빠진 것은 디버깅 기술이었습니다. 그는 전혀 디버깅 할 수 없었으며 자신이나 다른 사람의 코드에서 문제를 발견하는 것이 그에게 큰 고통이었습니다.

그 이후로 우리는 사람의 디버깅 기술을 평가하거나 추정 할 수있는 방법에 대해 생각하고 있습니다.

첫 번째 질문은 사람이 소프트웨어를 효과적으로 디버깅 할 수 있는지 여부를 결정하는 기술은 무엇입니까?

그리고 두 번째 : 인터뷰 중에 이러한 기술을 테스트하는 방법은 무엇입니까?


14
실제로 한 인터뷰에서 컴퓨터에서 디버깅하는 코드가 제공되었습니다. 그들은 소스 코드를 tar 나 gzip 등으로 수정했고, 어떻게 디버깅 할 것인지 알고 싶었습니다.
wkl

4
확실하게하는 유일한 방법은 그 또는 그녀가 "살아"있게하는 것입니다. 개발 환경이 무엇이며 간단한 코딩 및 디버그 테스트가있을 것이라는 것을 미리 알려주십시오.

@ ThorbjørnRavnAndersen은 생방송 일 필요도 없습니다. 나는 작은 기능의 인쇄물을 그 기능이 무엇을하는지에 대한 명세와 함께 나에게 두 곳에서 인터뷰를 한 다음, "버그를 찾기"를 요청했다.
Quancle

@quanticle 여기에서도 마찬가지로 회사에서 직접 인터뷰를하기 전에 5 가지 질문에 대한 프로그래밍 테스트 (약 절반이 디버깅 중)를 제공합니다. 분명히 그것은 대부분의 후보자를 제거합니다 ...
Izkata

분석 할 스택 추적을 제공하십시오 :-)
JustMe

답변:


24

사람이 가장 먼저하고 싶은 일은 코드를보고 디버거로 코드를 단계별로 실행하는 것입니다.

아직 행동 계획이없고 디버거 블라인드에 뛰어 든다면 기본적으로 부활절 달걀입니다. 이것은 모든 종류의 문제 해결에 해당됩니다.

인터뷰 상황에서 시스템 작동 방식을 묻고 시스템 기록에 대해 묻는 사람은 문제 해결에 도움 있습니다. 시스템을 먼저 생각하고 역학을 먼저 생각하는 사람은 좋은 문제 해결 방법이 될 수 있습니다.

이것은 복잡한 시스템에서도 마찬가지입니다.


1
이것에 대한 좋은 관점을 얻으려면 +1하십시오. 동의하지만 기계공을 두 번째로 생각할 때 도구를 사용하는 방법이 더 좋습니다. 자동차와 마찬가지로 기계공 도구를 이해하지 못하거나 사용할 수없는 엔지니어는 자격을 갖춘 엔지니어가 아닙니다.
maple_shaft

16
이 답변은 본능적 인 디버깅을위한 여지를 남기지 않습니다. 충분한 시스템, 코드 유형 또는 언어로 작업 한 사람은 종종 펑키 한 일을 향한 "냄새"를 느낄 수 있습니다. 때로는 결함을 찾기 위해 시스템의 기능을 알 필요가 없습니다.
Jordan

먼저 "본능적 인 디버깅"과 같은 것은 없습니다. 전문가가 사용할 휴리스틱 (일명 "부러진 다리 단서")이 있습니다. 확신. 사용 가능한 휴리스틱이 있으면 전문가가 효과적으로 사용합니다. 그러나 이러한 휴리스틱은 이러한 전문가들을 엉덩이에 물릴 수 있습니다. 인지 심리학 전문가에 대한 수많은 작업을 읽으십시오. 따라서 훌륭한 전문가는 어디서부터 시작해야할지에 대한 좋은 아이디어를 가질 수 있지만 이러한 직감에 전적으로 의존해서는 안됩니다. 그리고 그들은 장의 감정을 적어도 어느 정도 설명 할 수 있어야합니다.
ElGringoGrande

10
그들이 의견을 가장 먼저 말하면 당신의 흑백에 100 % 동의하지 않습니다. 누군가가 디버거를 시작하는 것이 좋은 첫 번째 옵션이 아니라고 생각하면 그 사람도 문제 해결에 좋지 않습니다. 문제가 통신이 중단 된 경우, 가장 먼저해야 할 일은 디버거를 시작하고 어떤 프로세스 / 스레드 / 태스크가 차단되거나 작동을 멈췄는지 알아내는 것입니다. 디버거를 시작하는 또 다른 이유는 문제가 반복 가능한지 확인하기위한 것입니다. 시스템을 깨는 방법을 알게되면 솔루션을 찾는 것이 훨씬 쉬워집니다.
Dunk

5
@ElGringoGrande 그는 내가 읽고있는 것과는 반대되는 것을 제안하고있었습니다. 요점은 사람들이 경험이 많을수록 디버깅에 자연스럽게 더 좋아진다는 것입니다. 도구 나 방법론은 그 효과만큼 중요하지 않습니다. 당신의 대답이 불완전한 이유입니다. 의자를 당기고 코드를 실행하고 질문을하는 등 디버그를위한 유효한 방법이 많이 있습니다. 나는 큰 PHP 프로그램을 효과적으로 디버깅했다. 나는 그것을 좋아하지 않지만 시스템이 일반적으로 어떻게 작동하는지에 대한 지식만큼 도구에 관한 것이 아닙니다.
Jordan

15

특정 언어 또는 프레임 워크에서 우수한 소프트웨어 개발자의 최선의 방법은 복잡한 문제를 비판적으로 분석하고 언어 또는 프레임 워크에서 우수한 디버깅 기술을 보유하는 능력이라고 주장합니다. 이들은 일반적인 디버깅 도구를 사용하여 높은 수준의 디버깅 능력뿐만 아니라 낮은 수준의 디버깅을 보여줄 수 있어야합니다.

이는 선택한 IDE에서 높은 수준의 디버깅 도구를 보여주는 시나리오를 만드는 것을 의미합니다. 다음과 같은 것을 찾아야합니다.

  • 디버그 모드에서 샌드 박스 응용 프로그램 또는 서버 실행 또는 디버깅을위한 심볼이있는 응용 프로그램 빌드

  • 원격 디버깅 포트 사용 가능 및 시연 또는 심볼로 작성된 샌드 박스가 아닌 응용 프로그램의 디버깅 (언어에 적용 가능한 경우)

  • 중단 점의 전략적 사용

  • 중단 점의 사용자 정의 특성, 중단 점의 조건식 (언어에 적용 가능한 경우)

  • 변수 값 또는 참조를 모니터링하기 위해 표현식 또는 변수 시계 사용

  • 임시 변수 값 또는 참조 또는 포인터 조작을 실시간으로 사용

  • 응용 프로그램 흐름을 시작, 종료 및 종료 할 수있는 능력을 보여줍니다.

  • 콜 스택의 중요 평가

  • 멀티 스레드 응용 프로그램을 디버깅하고 이해합니다.

로그 및 소스 코드 분석, IDE를 사용하지 않고 저수준 디버깅을 수행하는 기능과 같은 도구가없는 다른 디버깅 전략도 시연해야합니다.


매우 유용한 목록 +1 그리고 더 많은 것을 적용했습니다.
Dipan Mehta

8
멀티 스레드 응용 프로그램을 디버깅하는 것이 단일 스레드 응용 프로그램을 디버깅하는 것과는 완전히 다른 의견이라고 생각합니다. 다르고 훨씬 어렵습니다.
Bruce Ediger

20
@JarrodRoberson Brian Kernighan과 Rob Pike는 The Practice of Programming에서 여전히 덜 일시적이기 때문에 디버거보다 인쇄 문을 선호한다고 썼습니다. 많은 사람들이 실행 중에 프로그램을 중단하지 않고 코드 경로를 자세히 볼 수있는 좋은 로깅 시스템을 선호합니다. 또한 로그 파일을 읽고 코어 덤프를 디버그하는 것이 더 쉽습니다. 따라서 리트머스가 대체 디버깅 방식 (로그, 단위 테스트, 어설 션)만큼 유용하지는 않기 때문에 리트머스 테스트에서 좋은 프로그래머를 거부 할 수도 있습니다.
MetricSystem

12
디버그 인쇄 문은 훌륭하며 특히 동시성이 관련된 디버거보다 선호 될 수 있습니다. 그들에 대한 문제는 실제로 느린 컴파일러에 관한 것일 수 있습니다.
Ricky Clarkson

8

나는 당신이 당신의 시스템에있는 버그를 인터뷰의 맥락에서 논의 할 수있는 것으로 증류 해 내고 싶다. 디버거를 시작하고 그를 보자.


7

그에게 다음과 같은 질문을하십시오.

  1. 문제를 어떻게 해결합니까?

  2. 복잡한 프로젝트 중 하나는 무엇이며 어떻게 달성 했습니까?

  3. 어떤 디버깅 도구를 사용 했습니까?

  4. 특정 도구를 선호합니까?

  5. 자신의 시나리오의 예를 제시하고 어떻게 대처할 것인지 물어보십시오.

  6. 다른 사람의 코드를 작성하는 능력을 어떻게 평가 하시겠습니까?

질문을하여 문제를 해결할 수 있습니다. 그가 특정 기술에 능숙하거나 좋지 않을 위험이 항상 있습니다. 그러나 그가 좋은 학습자라면 많은 도움이 될 것입니다.


6

프로그래머가 디버깅 할 수 있는지 확인하려면 수정할 코드를 제공하십시오. 코드를 작성할 수 있는지 확인하려는 경우에도 동일한 방법입니다. 그들에게 문제를주고 코드를 작성하도록하십시오.

이제 코드 작성에 문제는 없지만 디버깅을 요청할 때 실패하는 프로그래머에 대해 혼란스러워합니다. 이 사람은 코드 예제를 취소하거나 데이터베이스에서 읽고 쓰는 것과 같은 경험이있는 영역을 고수합니까? 그들이 코드를 처음으로 얻지 않으면 고칠 수 없습니까?

아마도 사람은 디버깅을 좋아하지 않고 노력하지 않습니까? 나는 이것에 능숙하지 않기 때문에 나에게 그것을 요구하지 말아라. 무력을 배웠다.

기존 코드 기반으로 작업하려면 코드를 살펴보고 문서를 작성하고 메모를 작성해야합니다.

디버깅이 실패한 프로덕션 코드를 수정하는 것으로 생각하지만 코드를 작성하는 동안 디버깅해야합니다. 이 사람은 아주 좋은 프로그래머가 아니거나 새로운 코드를 작성하는 것을 선호합니다. 우리 모두하지 마십시오.


2
우리는 모두 프로그램을 디버깅합니다. 처음에는 프로그램이 작고 모든 것을 머리에두기 쉽기 때문에 쉽습니다. 그러나 점점 커지면서 더 복잡한 디버깅이 어려워집니다. 그리고 지금-어떤 사람들은 여전히 ​​그것을 처리하고 합리적인 시간 안에 버그를 찾을 수 있으며 어떤 사람들은 방금 잃었습니다. 그들은 어디에 초점을 맞추고 그것을 찾는 방법을 모릅니다 ...
Michal B.

1
@MichalB .: 우리 모두는 프로그램을 디버깅하지만, 어떤 사람들은 원칙적으로 접근하는 반면 다른 사람들은 무작위로 조정하고 어떤 일이 일어나는지 보게 됩니다.
Matthieu M.

왜 혼란 스러울 지 모르겠습니다. 좋은 개발자와 좋은 관리자가되는 것은 매우 다른 기술입니다. 기껏해야 대부분의 사람들은 (실제로 대다수의 개발자를 포함하는) 숙련 된 사람이라면 이들 중 하나 또는 다른 사람에게만 숙련되어 있습니다.
Dunk

3

다른 사람의 코딩 능력을 결정하는 것과 같은 방식으로 디버깅에 관해 질문하십시오.

주어진 상황에서 버그를 어떻게 추적 할 것인지 "어떻게"물어보십시오.

한 걸음 더 나아가 컴퓨터 앞에 앉아 문제를 디버그하는 것을 지켜보십시오.


3

나는 종종 후보자들에게 가상의 상황을 주었다. 너 뭐하니? "로그 확인"이라고 대답 할 수 있으며 "문제가 발생한 이후 로그에 기록 된 내용이 없다는 것을 제외하고는 로그에 비정상적인 것이 표시되지 않습니다"라고 말합니다. 그리고 문제 해결 능력을 평가 한 것에 만족할 때까지 계속됩니다.


2

일반적으로 좋은 적성을 가진 사람도 좋은 디버깅 기술을 가진 사람입니다.

인터뷰 중에 (연령에 따라) 일부 알고리즘과 같은 퍼즐과 같은 과제를 부여 할 수 있습니다. 간단한 방법입니다.

가능하면 일부 작업에서 코드를 인쇄하여 여기에 문제가 있는지 여부와 문제를 해결하는 방법을 문의하십시오.

나는 사람들이 구문을 읽고 수정하는 능력에 초점을 맞추는 난독 한 인터뷰 질문을하는 것을 선호하지 않습니다.


+1 좋은 답변입니다! 최고의 소프트웨어 개발자는 훌륭한 디버깅 기술을 보유하고 있으며 구문 오류를 발견해도 많은 것을 보여주지 않는다는 데 동의합니다. 대부분의 IDE 및 일부 우수한 텍스트 편집기 (메모장 ++)는 공통 언어로 구문 오류를 식별합니다. 그러나 퍼즐이 디버깅 기술을 보여 준다는 것에 동의하지 않습니다. 퍼즐은 다르지만 관련 기술인 비판적 사고를 보여줍니다.
maple_shaft

@maple_shaft 감사합니다 (아직 +1). 사실 퍼즐은 디버깅에 직접 연결되어 있지 않습니다 . 그러나 사람들이 문제에 어떻게 접근하는지 판단하는 것은 좋습니다. 간접적 인 것입니다.
Dipan Mehta

2
나는 퍼즐을보고 ewwwwwwww와 같습니다. 당신은 정말 "gotcha"보다 더 나은 것을 가지고 있지 않습니까? 그리고 어떻게 "성감"이 그림에 등장합니까? 오래된 ppl은 더 어려운 퍼즐을 해결해야합니까? 좋은 프로그래머 (또는 디버거)는 모두 스도쿠의 팬입니까? 당신은 정말 좋은 프로그래머와 성가신 도시 전체에 귀찮게 끝날 수 있습니다. 문제는 모욕적 인 <period> 더 나은 남자를 생각해 내십시오.
Chani

@Scrooge 저는 프로그래밍 퍼즐 로만 의미했습니다 . 수백 번의 인터뷰로 스도쿠를 한 적이 없습니다.
Dipan Mehta

2

인터뷰 중에 과거에 수정 한 버그와 디버깅에 사용한 단계에 대해 설명하도록 요청하십시오.

그들이 마지막 직장에서 무엇을했는지, 숙제를 할당했는지 등, 문제를 찾기 위해 겪은 일에 대해 설명하게하십시오.


2

디버깅에서 후보 기술 테스트에 대한 신입 사원 관점과 경험을 공유하겠습니다. 한 번은 3 단계의 인터뷰를 받았습니다. 두 번째 단계는 "실제 사례"였습니다. 나는 그 순간에 더 몰랐다. 거기에서 나는 작동을 멈추고 모르는 시스템이 있다고 들었다. 몇 가지 버그가 뒤에 있습니다.

이전 테스트 환경에 원격 데스크톱으로 배치되었습니다. 아마도 플러그가 뽑히거나 고립 된 환경 일 것입니다. 이 프로젝트는 일부 ASP.NET 컨트롤 및 관련 코드 파일 코드가 포함 된 몇 가지 웹 양식이었습니다. 코드 파일은 dll이 있고 소스 코드와 메소드 설명이없는 일종의 비즈니스 계층을 참조했습니다. Webforms는 기대할 수있는 CRUD 기능을 수행했습니다. 작은 검색 기능도 있습니다. 비즈니스 계층은 SQL 서버에서 Views 및 SP와 통신했습니다.

그들은 다른 수준에서 일부 부품을 부러 뜨 렸습니다. 증상이있는 종이를 받았습니다. "검색 할 수 없습니다" "마지막 업데이트 후 '지역'필드가 사라졌습니다"등. 사용자로부터받을 수 있습니다.

모든 세부 사항을 기억하지는 못하지만 적어도 테이블 필드의 이름이 바뀌어 SP가 손상되어 검색 기능에 사용되었습니다. 이는 VS에 오류가없고 필드 이름을 추적하는 BL 소스 코드가 없음을 의미합니다. Sqlcommand에 대한 SELECT 매개 변수의 철자가 잘못되어 웹 양식이 오작동했습니다. 또한 GridView (자동 생성 열)에서 누락 된 필드 인 필드가 생략되었습니다. ASP.NET 버튼은 복제되고 강화 된 방법이어야하고 버튼을 새로운 방법으로 가리킬 수있는 "잊어 버린"것을 의미합니다.

또한 HTML 태그에서 제목을 사용하는 것이 허용되지 않는 사소한 일입니다. 또한 반대의 ALT 태그는 그것을 필요로하는 컨트롤에서 생략되었습니다. 올바르지 않은 닫힌 html 태그에 오류가 있었지만 오작동하지 않았습니다. 모든 것이 순수한 극장 프로젝트 오류인지 또는 다른 모집을위한 동일한 프로젝트인지 확실하지 않습니다. 나는 묻지 않았다. 물론 난이도는 신입 사원의 필요와 일치해야합니다.

이러한 테스트는 인터뷰 후 디버깅이 어떻게 수행되었는지 확인하기 위해 스크리닝 (추종 안 함)되어야합니다. 그 단계에서 나 자신을 위해, 나는 시험이 조금 어리 석다는 것을 알았지 만 그것이 큰 포인트 일 것입니다. 그것이 아니거나 그렇지 않은 경우, 많은 가치가있는 후보자가 올바른 장소에 있어야합니다.

* 나는 테스트가 후보자 / 내 기술에 입증되었다고 생각한다.
* 외국 시스템 분석
* 최소한의 정보를 사용하여 오류 및 버그 찾기
* 시간이 지나도 스트레스없이 누군가가 당신을 도와주지 않고 코드를 수정 함
* 다른 지식 수준;
** SQL DB 및 저장 프로 시저,
** 프로젝트에서 dll 사용,
** asp.net 기술,
** 계층 구조
** 문제 지향 측면

또한 개발자 환경을 처리하고 Db 서버 관리 도구를 찾고 이해하는 것과 같은보다 명백한 사항도 있습니다. 분명히 종이에는 정말 멋져 보이지만 실제로는 그러한 작업에 멈출 수있는 후보들이 있습니다.


2

나는 직책과 관련된 실제 문제를 골라서 후보자에게 나에게 제시된대로 제시한다. 물론 나는 그들에게 일반적인 배경과 코드 스 니펫 또는 회로도와 같은 소량의 관련 문서를 제공합니다.

나는 그들에게 그들의 임무는 문제를 해결하는 것이며 그들이 가지고있는 기술적 인 질문에 답변하고 그들이 수행하고자하는 실험의 결과를 말해 줄 것을 제안합니다. 그들이 "여기에 스코프 프로브를 놓을 것"이라고 말하면, 그들이 찾은 것을 추적 할 것입니다. 그들이 printf루프 에 삽입하고 싶다면 절대로 나오지 않거나 (!) 먼저 "7"을 인쇄 한 다음 반복적으로 "5"라고 알려줍니다. 그들이 잡초에서 멀리 떨어져서 의미있는 대답을 할 수 없다면 나는 우리가 잘못된 길을 가고 있다는 것을 인정하고 다른 곳으로 돌아갈 것입니다. 그들이 막히면 나는 앞으로 나아갈 수있을 때까지 주요한 질문을하거나 힌트를 줄 것이다.

내가보고 싶은 것은 질서 정연한 사고 과정, 해결책을 찾기위한 결의, 잘 고려 된 질문과 실험, 이상적으로는 문제의 성공적인 식별입니다. 때때로 나는 누군가가 한 시간의 인터뷰에서 완전히 디버깅하기에 너무 복잡한 문제를 선택하고 결국에는 실제 답변을 제공합니다. 그 시점에서 나는 그들이 "aha"순간과 그 원인에 도달하는 만족과 그 문제에 관여하고 있음을 보여주는 반응을 찾고있다. 최고의 후보자들은 그 시점에서 자발적으로 후속 질문을하여 문제에 대한 그들의 정신지도를 실제로 진행되고있는 것과 연계 시키려고 노력할 것입니다.


1

널 포인터 참조 또는 + 소스 코드 + gdb로 segfaults하는 간단한 바이너리 (디버그 포함) 기호가있는 컴퓨터에 앉아 충돌의 원인을 찾을 수 있는지 확인하십시오.


2
이 모든 것은 사람이 코드와 바이너리를 분석하여 잠재적 인 null 포인터 참조를 찾을 수 있다는 것입니다. 실제로 일반적인 디버깅 도구의 숙련 된 사용을 보여주지는 않습니다.
maple_shaft

1

응시자가 예비 코드 테스트를 수행하는 경우 인터뷰 중에 코드를 수정하여 버그를 해결하거나 새로운 기능을 추가하거나 더 나은 기능을 추가하도록 요청하십시오. 코드 테스트 사양을 상당히 모호하게 만들면 "버그"가 포함 된 테스트 사례를보다 쉽게 ​​만들 수 있습니다.


1

작은 코드 스 니펫에서 "버그"를 찾는 것은 매우 인공적인 상황입니다. 퍼즐과 두뇌 티저와 같은 방식으로 도움이 될 것이라고 생각합니다.

보다 포괄적 인 접근 방식은 후보자가 과거에 특정 사건을 인용 한 후 어떻게 디버깅을 수행했는지에 대한 행동 적 질문을하고 후속 질문을합니다.

문제 해결에 능숙한 사람은 IDE의 디버그 기능 이상의 것을 이야기 할 수 있습니다. 버그보고 도구, 최종 사용자 상호 작용, 버그 재현, 로그 파일 분석, 확인은 어떻습니까?

코드 블록을 통해 추적하는 것보다 디버깅에 훨씬 더 많은 것이 있으며 디버깅에 대한 누군가의 숙련도를 평가하면 문제가 해결됩니다.


우리가 아직 발견하지 못한 소프트웨어에 버그가 있다고 가정하고 싶습니다. 지진 결함을 찾는 것과 같습니다. 문제는 사람이 말하는 징후를 찾는 방법입니다.
Christopher Mahan

1

회사에서 프로덕션 환경에서 실행하는 멋진 코드를 누군가에게 제공하십시오. 미묘한 버그를 소개하도록 요청하십시오. 그들이 왜 그 것을 골랐는 지 물어보세요. 그들이 그것을 찾고 고치는 방법에 대해 물어보십시오.

원래 코드에서 버그를 발견하면 보너스 포인트입니다.

원래 코드에서 버그를 수정할 수있는 경우 두 배의 보너스 포인트.


1

나는 사람들에게 그들이 추적하고 고쳐야했던 가장 어려운 버그와 그것을 찾아서 고치기 위해 무엇을했는지 설명해달라고 요청하는 경향이있다. 또한 가장 어려운 버그가 초보자만으로는 찾기 어려울 것으로 예상되는 경우 문제 해결 방법이 아닐 수 있습니다 (진입 레벨에 대한 인터뷰가 아닌 한). 그것이 정말로 어려운 일이고 그들이 그것을 추적하려고 할 때 그들의 사고 과정을 묘사한다면, 나는 그들의 기술 수준이 무엇인지 느낄 수 있습니다. 나를 놀라게 한 것은 "헤드 라이트의 사슴"모양을 얻고 그들이 한 일의 하나의 예를 생각할 수없는 수많은 사람들이 복잡하다는 것입니다. 다른 사람이 고치기 어려운 문제를 남긴 사람은 학교 밖을 제외하고는 내가 관심이있는 사람이 아니라는 것을 유감스럽게 생각합니다.


1

다음과 같은 몇 가지 기술에 무관심한 질문을합니다.

  • 근본 원인을 식별하고 버그 (결함)를 해결하기 위해 취한 모든 단계를 수행하십시오.
  • 멀티 스레딩 앱을 디버깅하는 동안 콜 스택을 사용하는 방법

이것은 전화 인터뷰에서 특히 효과적입니다. 문제를 해결하는 동안 자신이 실제로 어떻게 작동하는지 보여주는 확실한 답변을 제공하는 사람 만 있으면됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.