일반적인 코드 검토 프로세스 란 무엇이고 나쁜 것으로 간주되는 것은 무엇입니까?


16

우리 회사는 최근 공식적인 코드 검토를 시작했습니다. 프로세스는 다음과 같습니다. github에 제출하고, 풀 요청을 요청하고, 약 세 사람이 코드를 검토 한 다음, 모두 통과하면 코드가 입력됩니다.

프로세스는 공정한 것처럼 보이지만 코드 검토를 수행하는 세 사람은 공정하지 않은 것 같습니다. 검토를 위해 코드를 넣을 때 100-200 개의 댓글 사이에 도착합니다. 나를 위해 가장 큰 숫자는 한 번 300 댓글이었습니다. 물론 큰 변화라고 생각할 수도 있지만 50 줄 미만의 코드 (단위 테스트 포함)를 사용하면 매우 작은 변화 일 수 있습니다. 모든 의견은 "해야 할 것"으로 간주되며 논쟁의 여지가 없습니다.

그것을 염두에두고, 여기서 나의 주요 문제는 조금 과도하게 보인다는 것입니다. 나는 그룹과 이야기를 나 basically 다. 그리고 그들은 기본적으로 내가 PHP에서 수년간의 개발을했다고해서 내가 "개발자"라는 의미는 아니라고 말했다. 물론 이것은 아프지 않은 것보다 더 아프다. 또한 그룹 내에서 그들은 많은 의견을 제시하지 않는 것으로 보이며 대부분의 경우 다른 의견이나 제안을 무시하거나 무시하여 무언가가 깨져도 유효한 의견으로 거의 받아들이지 않습니다.

내 질문은 이것이 공정한가요? 아니면 흔한가요?


3
어떤 종류의 의견을 받고 있습니까? 많은 것 같습니다. 주석 형식화입니까? 코딩? 주석의 특성에 대해 더 잘 알지 못하면 대답하기가 어렵습니다 (그리고 아마도 코드에서 주석을 트리거 한 내용).
MetalMikester

1
헤이-그것이 올바른 용어인지 확실하지 않지만 변수 이름 바꾸기, 함수 이동, 함수 이름을 3-5 배 이상으로 바꾸는 것과 같은 일반적인 "모범 사례"의견입니다. 우리는 phpcs를 설치하여 형식이 정확합니다.
user1207047

또한이 티켓에 대해 언급하는 것을 잊었습니다. 저는 실제로이 회사의 레벨 3 개발자입니다. 저는 PHP 인증을 받았으며 지난 8 년 동안 이곳에서 고용되었습니다. 최근에 이런 일이 시작되었습니다. 8 년이 지난 후, 당신은 무언가를 알고 있다고 생각하고 싶습니다.
user1207047

1
"그래서 8 년이 지나면, 당신이 옳은 것을 알고 있다고 생각하고 싶습니까?" -글쎄, 당신은 놀라게 될 것입니다 ... 내가 직장에서 때때로 보는 것들 ...
MetalMikester

답변:


15

모든 의견은 "해야 할 것"으로 간주되며 논쟁의 여지가 없습니다.

우선 순위가 없으므로 IMHO는 실제 문제입니다. 당신이 100-300 의견을 얻을 때, 거기 있어야 그들 중 일부는, 그들 중 일부는 프리 오 B (가능성이 나중에 버그로 이어질) 우선 순위 A (실제 버그)를 가진 그들 중 일부는 (다른 모든) C를 프리 오합니다. 동료에게 자신이 원하는 바를 모두 기꺼이 존중하지만 변화를 효과적으로 적용하고 시간이 제한적이라고 우선 순위를 주장하십시오. 그런 다음 prio A 주석을 먼저 수정하여 시작하고 그 후에 더 많은 시간을 보낸다면 B로 시작할 수 있습니다 (행운이 있다면 상사는 prio B와 C를 고정하는 것이 그렇게 중요 하지 않다는 것을 이해하고 당신에게 줄 것입니다 시간을 낭비하는 대신 몇 가지 더 중요한 작업).


의견의 우선 순위를 요청하기 위해 여러 번 시도했습니다. 나는 "좋은 것"과 "필수"와 같은 것을 다시 얻는다. 대다수가 "필수"인 것으로 밝혀졌습니다.
user1207047

2
특정 개발자에게 프로그램의 다른 영역에서 코드가 엉망이되는 것을 방지하기 위해 리뷰에서 많은 작업 항목이 제공되는 경우가 발생했습니다. 그러나 이는 프로젝트에 "강제"되어있는 예외적 인 빈약 한 개발자를위한 것이며 관리 결정으로 인해 리드를 제거 할 수 없습니다.
Dunk

2
당신은 @ 덩크를 알고 있습니다. 당신이 여기 있다고 생각합니다. 귀하의 의견은 실제로 집에 와서 의견을 수락 할 수 없다고 생각 하여이 답변을 수락했습니다. 나는이 그룹의 "외 주자"이며 왜 내면의 원이 점점 더 빨리 검토되고 있고 외부의 사람들은 그렇지 않은지를 알게되었습니다. 나는 경영진에 의해이 팀에 "강제"되었고, 우리는 함께 일하도록 "강제"되었습니다. 따라서 이것이 왜 더 가혹한 지에 대해 매우 합리적이고 논리적으로 설명됩니다. 아니면 코딩에 정말 악취가납니다. 알아낼 수있는 유일한 방법은 다른 그룹 / 회사에 가서 스스로를 보는 것입니다.
user1207047

4
@ user1207047 : 사이트의 표준과 목적에 위배되는 의견 중 하나를 좋아하기 때문에 답변을 수락해서는 안됩니다 (여기서는 패턴을 감지하고 있다고 생각합니다). 이에 대한 찬성 의견 기능이 있습니다.
webbiedave

10

코드 검토는 분열 과정이 될 수 있습니다.

하지만 당신은 중요한 교차점에 있습니다. 그들의 검토에 대해 신중한 분석을하십시오. 그들은 nit-picking 문제를 식별하거나 스타일과 논리의 심각한 결함을 강조하고 있습니까?

전자의 경우 해결을 위해 노력하는 것이 좋습니다 (새로운 직업 또는 새로운 코드 검토 프로세스).

후자라면 코드를 전문적인 품질로 끌어 올리기 위해 많은 코드를 읽고 공부하는 것이 좋습니다.


좋은 생각이야 내가 수집 할 수있는 것 중 일부는 실제로 신중한 분석이지만 대부분은 이동 기능 또는 이름 바꾸기 기능과 같은 엄선 된 것처럼 보입니다. 문제는 그들이 생각하는 과정을 설명 할 때 실제로 의미가 있지만, 그들 스스로는 같은 일을하지 않고 나처럼 같은 실수를하고 있습니다.
user1207047

더욱이, 코드 검토는 너무 깊어서 내가하고있는 일을 잊어 버리고 과도한 수백 개의 주석으로 인해 앱을 수정하는 더 많은 버그를 만듭니다. 예를 들어, 한 번은 코드의 많은 부분을 다시 작성하라는 지시를 받았습니다. 그 전에 코드는 정확하고 기능적이었습니다. 코드 검토와 거의 150 개의 주석 후에 원래 기능과 정확성이 사라지고 수많은 버그가 삽입되었습니다. 이것을 깨닫고 고쳤을 때 나는 기본적으로 "그렇습니다. 코드 검토 프로세스는 이제 당신이 그것을 고칠 수 있고 쉬워지기 때문에 훌륭한 프로그래머가 될 것입니다."
user1207047

8
@user : 메소드 / 함수의 이름 지정이 중요합니다. 반드시 nit-picking은 아닙니다. 이름을 잘못 지정하면 팀에 성 가실 수 있습니다. 명확한 이름을 얻을 수 없다면 아마도 좋은 기능이 아닐 것입니다. 당신은 "새로운"녀석 인 것 같고 다른 사람들은 아마도 이전에 여러 번 논의했던 광기에 대한 방법을 가지고 있습니다. 따라서 의견이 적은 이유. 나는 그들이 원하는 것을 배우고 엉덩이보다 오히려 일치하려고 노력하는 것이 좋습니다. 어느 정도 존경을 받으면 열린 마음으로 만나게 될 대안 아이디어를 제공 할 수있는 위치에있게됩니다.
Dunk

1
@user : 코딩 / 디자인 표준이 필요한 것 같습니다.
Dunk

2
@user : 할 수있는 일은 시스템 내에서 일하고 팀 플레이어임을 증명하는 것입니다. 당신이 그렇게했다면. 당신의 인식이 정확하지 않거나, 당신은 비이성적 인 사람들을 다루고 있습니다. 그들은 당신의 태도가 논쟁 적이라고 인식하거나 단지 불쾌한 사무실 정치입니다. 당신이 통제 할 수있는 유일한 것은 당신의 태도 / 인식입니다. 당신이 어쨌든 문제를 제기하지 않았다고 확신한다면 나는 왜 당신이 머무를 지 모르겠다. 사람들이 어울려서 일하기에 즐거운 곳을 찾으십시오. 다른 곳에서 동일한 문제가 발생하면 거울을보십시오.
Dunk

5

동료들이 코드 검토 프로세스를 사용하여 방법론에 동의하거나 코드를 연마하는 것으로 보입니다. 방금 당신과 같은 코드 검토를 시작했으며 때로는 구현 방식이나 개선 사항에 대해 많은 것을 논의합니다. 이것은 합리적 인 한 전혀 나쁘지 않습니다 (300 개의 댓글이 너무 많이 보이므로 reddit 스레드처럼 보일 것입니다)

코드를 구현하기 전에 코드에 대한 일부 아키텍처 결정에 동의해야하거나 명명 규칙, 패턴 및 모범 사례에 동의하는 것만으로도 "좋은 코드"로 간주되는 항목을 모두 알 수 있습니다.

말한대로 코드 표준을 준수하고 코드가 의도 한대로 작동하는 경우 주석이 너무 많아서 코드를 포럼으로 사용하거나 사용자가 가리키는 것처럼 사용자를 트롤링하고 있습니다.

나는 나 자신에게 비판하려고 노력하고, 대화에 참여하고,이 모든 의견의 이유를보고, 그들이 당신의 코드에 왜 그렇게 불행한지, 그리고 가능하다면 모든 사람을 행복하게하고 코드를 검토하는 데 방해가되지 않는 방식으로 코드를 작성하십시오.

나는 단지 마지막 주석을 읽습니다. 때로는 코드에 동의하지 않으면 코드를 100 번 넘겨보고 다른 아키텍처 결정을 한 이유 때문에 행복하지 않은 모든 곳에서 변경을 제안 할 수 있습니다. 리팩토링 횟수에 관계없이 해당 코드가 마음에 들지 않습니다. 위에서 말했듯이 미리 코드에 대한 접근 방식에 동의해야하므로 코드를 작성할 때 코드에서 기대하는 것을 알 수 있으므로 코드가 더 합리적입니다.


1
100 %는 마지막 단락에 동의합니다. 구현하기 전에 의도 한 디자인에 대해 논의해야합니다. 적어도 당신은 아마도 수용 가능한 프레임 워크로 시작합니다. 그런 다음 구현 후 코드가 아닌 최종 디자인을 논의 할 때 또 다른 가치가 있습니다. 그런 다음 최종 설계 토론 결과와 일치하도록 코드를 수정하십시오. 몇 번 시도했지만 문제가 개선되지 않으면 위치가 적합하지 않으며 다른 곳을 찾아야한다는 것을 분명히해야합니다.
Dunk

4

당신이 말하는 것에서, 그들은 PHP 개발자에 대한 편견이있을 수 있으므로, 그들의 요점을 입증하기 위해 코드에 잘못된 모든 것을 찾으려고 노력하고 있습니다 .¹

코드 검토 자체에 관해서는, 이미 말했듯이, 그렇게 많은 양의 사소한 의견은 몇 가지 좋고 유효한 비판보다 덜 도움이된다고 생각합니다. 코드 검토와 관련하여 경험이 제한적이지만 다음 기술은 과거에 근무했던 팀에게 효과적이었습니다.

  • 우선, 코드 검토가 수행되기 전에 정적 코드 분석기를 사용하여 대부분의 문제를 식별해야합니다. 예 : Sonar, Lint 또는 기타 우수한 코드 분석기를 통해 코드를 실행하면 대부분의 사소한 문제를 제거하는 데 도움이됩니다. 특히 검토자는 괄호 배치, 공백, 주석, 적절한 변수 이름 지정 등을 보장하기 위해 사용자 정의 프로파일을 정의 할 수 있기 때문에 ...
  • 둘째, 의견을 다른 범주로 나누면 잘 작동하는 것 같습니다. 예를 들어, 하나의 그룹에 나중에 주목하고 적용해야 할 작은 것들이 포함 된 두 가지 범주가 있습니다. 또 다른 커밋 및 후속 검토가 필요한 코드를 즉시 수정해야하는 의견에 대한 두 번째 그룹입니다. 물론 후자 그룹의 의견 수는 더 작아야합니다.

또한 첫 번째 실제 코드 리뷰에도 원래 예상보다 많은 주석이 포함되어 있다고 말해야합니다. 그러나 나는 이것을 나쁜 것으로 간주하지 않았습니다. 주석에서 계속 배우고 향후 코드 제출에 새로 배운 기술 / 모범 사례를 적용 할 의사가 있다면 주석은 작아 져야합니다. 그것은 확실히 나를위한 사건이었다 ;-)

¹ 내 경험상 많은 프로그래머가 PHP가 가장 악한 프로그래밍 언어이며 가장 경험이 부족한 프로그래머가 사용한다고 주장함에 따라 많은 일이 발생합니다. 나는 훌륭한 소프트웨어가 어떤 언어로도 작성 될 수 있다고 생각하기 때문에이 진술과는 거리가 멀다!

² 의견이 과도하지만 그 가치가 있다고 가정


나는 당신이 한 말에 전적으로 동의합니다. 그것은 학습 경험이며 배워야합니다. 그러나 이것은 그렇게 보이지 않는 시점까지 오랫동안 진행되어 왔습니다. 어리 석거나 다른 일이 일어나고 있습니다. 각 풀 요청이 100 개의 주석을 생성하는 경우 항상 매우 잘못되었거나 여기에 관련된 내용이 있고 그들이 주장하는 것과 일치하지 않는 것이 있다고 가정합니다. "좋아 멈추고 배우자"고 말하거나 요점을 알려야합니다. 적어도 그것이 내가 보는 방법입니다.
user1207047

1
@ user1207047 다른 답변에 대한 답변을 읽은 후에는 이미 자신의 질문에 대한 답변을 알고있는 것처럼 보입니다 .. :-) 코드 리뷰에 뭔가 비린 것이 분명합니다. 어쩌면 상사와 대화하거나 다른 팀으로의 이체를 요청해야 할 때입니까?
Jérôme

3

누구나 정기적으로 코드 검토에서 100 개 이상의 댓글을받는 것이 일반적입니까? 나는 말하지 않을 것입니다. 코드 품질이 "많이 요구되는"사람들이 많은 의견을 얻는 것이 일반적입니까?

그러나 코드 검토 프로세스의 "규칙"에 따라 다릅니다. 모든 사람은 어떻게해야했는지에 대한 자신의 아이디어를 가지고 있습니다. 코드 검토 프로세스에서 주석이 "이러한 방식 대신이 방식으로 수행해야합니다"형식으로 허용되는 경우 적절한 코드에 대해서도 많은 주석이 표시 될 수 있습니다. 프로세스가 "결함"을 찾으려면 주석 수는 훨씬 작아야합니다.

내 경험상 대체 방법에 대한 "제안"을 허용하는 리뷰는 시간 낭비 자입니다. 이러한 "제안"은 검토 프로세스 외부에서 하나씩 처리해야합니다. 결함 검토는 사람들이 "내가했던 것처럼 왜하지 않았습니까?"대신 버그에 집중할 수있게함으로써 더욱 유용합니다. 또한 누군가가 버그를 발견하면 버그를 거부하지 않기 때문에 더 유용합니다. 따라서 상처받는 감정은 없지만 대신 감사 할 것입니다.

업데이트 : 모든 말로, 일부 코드는 결함이 없어도 평범하지 않습니다. 이 경우 검토 의견은 다음과 같은 단일 의견이어야합니다. "이 코드는 정리해야합니다. 코드가 [여기에서 귀하의 이름으로] 논의 될 때까지 검토를 연기하십시오." 이 경우 주석이 수정 될 때까지 코드에 대한 추가 검토가 중지되어야합니다.

UPDATE2 : @User : 코드 / 디자인을 개발하는 동안 코드 / 디자인에 대해 논의하여 멀리 나아 가기 전에 원하는 것을 구현할 수 있습니까? 제안을 기반으로 코드를 개발하는 방법에 대한 내용을 바꾸고 있습니까? 그들의 의견에서 무엇을 배우고 있습니까?

프로젝트의 리더 인 경우 모든 작업 제품에 대한 책임은 본인에게 있습니다. 작업 제품을 승인하면 제품이 허용된다고 주장합니다. 양질의 제품을 만드는 것으로 유명합니다. 따라서 나는 기대가 있고 만족스럽지 못합니다. 동시에 저는 선호하는 이유를 가르치고 설명하려고합니다. 그러한 선호가 항상 이상적이지는 않지만 (특히 다른 사람들의 눈에) 이러한 선호의 대부분은 경험에서 비롯된 것입니다. 일반적으로 나쁜 것들을 반복하지 않기위한 반응. 따라서 푸시 백에 관계없이 승인을 받기 위해 필요한 몇 가지 개인 "스티커"가 있습니다.

다른 한편으로, 당신은 당신의 작업 제품을 승인하는 데 필요한 기대치를 배워야합니다. 당신은 동의하지 않을 수 있지만, 당신은 규칙을 지배 할 권한이없는 것으로 보이므로 예상되는 것을 배우십시오. 팀이 당신을 실패하게 만들려고 의심합니다. 그렇게하면 그것들도 나빠 보이게됩니다. 그런 점에서, 배우기를 열망하고 있다는 것을 보여주십시오 (아직 그렇지 않더라도). 그들이 말한 것을 취하고 그들의 선호에 적응하기 위해 최선을 다하면, 그것들을 꽤 많이 다시 보게 될 것입니다. 어쩌면 당신이 적어도 견딜 수있는 것을 찾아서 그들이 당신에게 그들의 길을 가르치기 위해 약간의 손을 잡고 있는지 볼 수도 있습니다. 그 과정에서 당신은 실제로 당신의 기술을 다음 단계로 끌어 올릴 수있는 것을 배울 수 있습니다.


동의하며, 그 근거에 대해 나로부터 아무런 주장도 듣지 못할 것입니다. 그러나 프로세스는 그다지 좋지 않습니다. 그들은 대부분의 경우이 세 그룹을 벗어난 사람들 만이 자신보다 더 철저한 조사를받는 것으로 보인다고 말합니다. 그들은 다른 사람들이 나쁜 개발자라고 주장하지만 팀의 유일한 "개발자"입니다.
user1207047

그러나 코드를 이해하지 못하거나 개발자가 기존 방법을 사용하는 대신 휠을 재발 명했거나 그의 방법이 순환 복잡도를 50으로 설정 한 경우에도 주석의 경우입니다. 버그가 없습니다. 읽기 어려운 코드와 복제 버그가 아니더라도 책임입니다. 그렇기 때문에 변수 이름이 잘못 지정되었거나 솔루션이 코드를 이해하기 어려운 시간적 커플 링을 도입한다고 주저하지 않습니다. 기술 부채를 관리해야합니다.
Laurent Bourgault-Roy '12

1
@Laurent : 나는 당신이 무엇을 말하는지 알고 많은 방법으로 동의합니다. 그러나 이것은 눈덩이가되는 웜 캔을 엽니 다. 회사에 코드 검토가 노력의 상당 부분을 차지할 수있는 자금과 일정이 있다면 의료 장비 / 항공기 프로젝트와 같이 괜찮습니다. 그러나 대부분의 프로젝트에는 사치가 없습니다. 따라서 검토 의견의 범위를 제한하는 것이 매우 유용합니다. 귀하의 우려를 상쇄하기 위해 개발자와 작업을 감독하는 것이 sw의 역할입니다. 코드를 검토하기 전에 누가 가장 면밀히 모니터링하고 문제를 해결해야하는지 알아야합니다.
Dunk

우리는 여기에 동의하지 않을 것입니다 :). 기술 부채는 조만간 지불해야하는 금액이며, 기다릴수록 더 많은이자를 지불해야합니다. 당신은 정리를 지연 페니를 저장하지 않습니다. 지금 정리하는 데 시간이 걸리지 않으면 코드를 이해하는 데 어려움이 있기 때문에 다음 변경으로 인해 두 배의 시간이 소요될 수 있습니다. 나는 8 년 된 코드베이스로 작업하고 품질 문제로 인해 개발이 중단되는 속도가 느려졌습니다. 우리는 이제 공식적인 "내부 품질은 협상이 불가능하다"라는 규칙을 가지고 있습니다. 그것이 우리를 구했다고 증명할 수 있습니다!
Laurent Bourgault-Roy

나는 당신의 의견을 다시 읽었으며 우리의 방법론으로 인해 우리가 다른 전망을 가지고 있음을 알고 있습니다. 리드가없는 애자일 팀에서 일하고 있습니다. 우리는 모두 평등하고 코드 품질에 책임이 있기 때문에 서로를 모니터링해야합니다. 그리고 코드 검토는 각 통합 전에 3-4 시간마다 수행됩니다. 따라서 우리가 매우 나치이거나 소프트웨어의 오래되고 잔인한 부분에 영향을 미치는 리 팩터를 수행 한 경우 큰 풀 요청을 청소하는 데 몇 시간이 걸립니다. 따라서 코드 품질 주석을 "더 큰 문제"로 보는 이유는 무엇입니까?
Laurent Bourgault-Roy

2

팀 검사 프로세스와 몇 가지 중요한 차이점 :

  • 검사의 기초는 전체 팀이 수집 한 점검표입니다.
  • 초점은 스타일을위한 스타일이 아니라 결함 (현재와 미래)입니다.
  • 3 명의 조사관 (저자 포함)은 의견을 정리하기 위해 함께 앉아 있습니다. 다수결의 의견 만 남습니다.

2

50 LOC에 대해 300 건의 의견은 약간 과도하며, 풀 풀 요청마다 3 명의 리뷰어가 있습니까? 회사에는 많은 리소스가 있어야합니다.

유용한 코드 검토 프로세스에 대한 나의 경험에는 몇 가지 규칙 및 / 또는 지침이 있어야합니다.

  • 의견의 우선 순위
  • 주석 분류 (버그, 코드 스타일 등)
  • 합의 된 아키텍처 / 디자인
  • 합의 된 코드 스타일

검토 자로부터 우선 순위를 얻지 못하면 담당 프로젝트 관리자 / 팀장에게 문의하십시오. 비용에 대한 책임자는 우선 순위에 대한 의견을 가져야합니다.

정의 된 아키텍처, 프로젝트에서 사용하는 디자인 패턴 및 동의 한 코드 스타일에 대한 공통된 이해가있는 경우 검토 의견은 보안 문제, 의도하지 않은 버그, 지정된 경우에서 다루지 않는 코너 케이스와 같은 "실제 문제"에 대해서만 표시되어야합니다. 건축 등

개발 팀이 "맛 문제"에 동의하지 않은 경우 (예 : 멤버 변수가 "m_"로 시작해야 함) 모든 검토자는 강제로 시간 / 돈 낭비라는 그의 스타일을 따르도록합니다.


1

이것은 실제로 의사 소통 문제처럼 들립니다. 코드가 300 개의 댓글을 달기에 충분하지 않을 것으로 예상합니다. 검토 자들은 많은 피드백이 필요하다고 생각합니다. 비동기 방식으로 앞뒤로 논쟁하면 많은 시간이 낭비됩니다. 대체로 300 개의 댓글을 작성하는 것은 엄청난 시간 낭비입니다. 이것이 모두 결함이 아닌 경우, 새로운 팀원으로서 팀의 스타일을 아직 모를 가능성이 있습니다. 그것은 정상이며 전체 팀을 가속화하기 위해 배워야 할 것입니다.

내 제안은 시간을 절약하는 것입니다. 피드백을 가속화하십시오. 나는 :

  • 같은 실수를하지 않고 같은 코멘트를 50 번 생성하지 않도록 더 많은 중간 검토를 수행하십시오.
  • 검토자가 코드를 검토 할 때 문제가 발생하면 이에 대해 이야기 할 수 있으므로 다음 커밋에서 제거 될 300 개의 "문제"를 피할 수 있습니다.
  • 코드를 작성할 때이 "실제"개발자 중 한 명이 한동안 다른 방식으로 어떻게 작동하는지 확인하십시오

사람들은 "시간이 더 걸릴 것"이기 때문에 페어링에 반대 할 수도 있지만 여기서는 문제가되지 않습니다.

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