--- title: "웹훅 관리" slug: "sourcecommit-use-webhook-manage" updated: 2026-09-17T09:09:26Z published: 2026-09-17T09:09:26Z canonical: "guide-fin.ncloud-docs.com/sourcecommit-use-webhook-manage" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide-fin.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # 웹훅 관리 웹훅을 이용하면 SourceCommit 리포지토리에서 발생하는 여러 이벤트에 대한 후처리가 가능합니다. 특정 URL을 웹훅에 연결함으로써 원하는 이벤트 데이터를 전달받아 비즈니스 로직을 처리할 수 있습니다. 아래와 같이 다양한 방식으로 웹훅을 활용할 수 있습니다. - 코드에 발생하는 변경을 감지하여 SourceBuild, SourceDeploy, SourcePipeline으로의 CI/CD 연계 - 커밋 푸시 또는 풀 리퀘스트 생성 알림을 통해 코드 리뷰 시간 단축 - FileSafer 악성 코드 검사 결과를 즉각적으로 수신 - LFS를 통한 File 잠금/잠금 해제 여부를 즉각적으로 수신 ## 웹훅 관리 웹훅을 이용하려면 먼저 웹훅이 호출되었을 때 이벤트를 전달할 연결 대상을 지정하여 웹훅을 생성해야 합니다. ### 웹훅 생성 웹훅을 생성하는 방법은 다음과 같습니다. 참고 - 하나의 리포지토리 내에 최대 10개의 웹훅을 생성할 수 있습니다. 1. 네이버 클라우드 플랫폼 콘솔에서 ![i_menu(1)](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/i_menu(1).png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) > **Services** > **Developer Tools** > **SourceCommit** 메뉴를 차례대로 클릭해 주십시오. 2. SourceCommit 화면에서 리포지토리를 선택한 후 **[코드로 이동]** 버튼을 클릭해 주십시오. - 리포지토리 목록에서 리포지토리 이름을 클릭해도 됩니다. 3. 리포지토리 상세 기능 화면에서 **[Hooks]** 탭을 클릭해 주십시오. ![sourcecommit-use-webhook-manage_console1_ko](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console1_ko.png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) 4. **[생성]** 버튼을 클릭해 주십시오. ![sourcecommit-use-webhook-manage_console2_ko](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console2_ko.png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) - 웹훅 이름은 알파벳, 숫자, 특수 문자(-, _)를 사용하여 50자 내로 입력 가능하며 이미 생성된 웹훅과 동일한 이름 입력 불가 - 설명은 300자 이내 입력 가능 5. 웹훅이 호출 될 이벤트 유형을 선택해 주십시오. - 웹훅이 속한 리포지토리 내에서 해당 이벤트가 발생하면 웹훅이 호출됩니다. - 이벤트 유형에 대한 자세한 설명은 [웹훅 이벤트 목록](/docs/sourcecommit-use-webhook-event#%EC%9B%B9%ED%9B%85%EC%9D%B4%EB%B2%A4%ED%8A%B8)을 참고해주십시오. 6. 웹훅에 연결할 대상을 추가해주십시오. 이벤트가 발생하여 웹훅이 호출되면 연결 대상을 통해 데이터를 전달합니다. - [URL 연결 대상 추가](/docs/sourcecommit-use-webhook-manage#URL%EC%97%B0%EA%B2%B0%EB%8C%80%EC%83%81%EC%B6%94%EA%B0%80) #### URL 연결 대상 추가 참고 - 하나의 웹훅 내에서 최대 10개의 URL을 활성화할 수 있습니다. 1. 대상 유형으로 **URL**을 선택해주십시오. ![sourcecommit-use-webhook-manage_console3_ko (1)](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console3_ko%20(1).png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) 2. 연결할 **URL**과 **Content Type**, **Secret**을 입력해주십시오. 주의 - URL 대상이 HTTP status 3XX 을 반환할 경우 리다이렉션을 지원하지 않습니다. 참고 - **application/json**: request body 데이터로 JSON payload를 바로 전송 - **application/x-www-form-urlencoded**: 'payload' key에 대한 value로 JSON payload를 전송 - URL: 2000자 내로 입력 가능하며, 외부에서 통신 가능한 주소여야 함 (필수) - Content Type: **application/json**, **application/x-www-form-urlencoded** 중 선택 (필수) - Secret (선택) - 웹훅 호출이 SourceCommit 서비스에서 호출된 것임을 보장하고 데이터가 중간에서 위변조되는 것을 방지하기 위함 - 웹훅 호출 시 request body를 Secret key로 Hmac SHA256 암호화 한 값이 **'x-ncp-sourcecommit-signature-v1'** 헤더를 통해 전송됨 ([예시](/docs/sourcecommit-use-webhook-manage#URL%EB%8C%80%EC%83%81%EC%9B%B9%ED%9B%85%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%88%98%EC%8B%A0)) - 200자 내로 입력 가능 3. URL의 활성화 여부를 결정하고 **[추가]** 버튼을 클릭하여 URL을 생성해주십시오. - 리포지토리 내 이벤트가 발생하여 웹훅이 호출되면 선택한 URL들 중 활성화 여부가 **ON**으로 되어 있는 URL로만 데이터가 전달됩니다. 4. 웹훅 생성 창의 **[생성]** 버튼을 클릭하여 웹훅을 생성해 주십시오. ### 웹훅 설정 변경 필요한 경우, 웹훅 생성 시 입력한 설명 문구와 이벤트 유형, 연결 대상 정보를 변경할 수 있습니다. 웹훅 설정을 변경하는 방법은 다음과 같습니다. 1. 네이버 클라우드 플랫폼 콘솔에서 ![i_menu(1)](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/i_menu(1).png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) > **Services** > **Developer Tools** > **SourceCommit** 메뉴를 차례대로 클릭해 주십시오. 2. SourceCommit 화면에서 리포지토리를 선택한 후 **[코드로 이동]** 버튼을 클릭해 주십시오. - 리포지토리 목록에서 리포지토리 이름을 클릭해도 됩니다. 3. 리포지토리 상세 기능 화면에서 **[Hooks]** 탭을 클릭해 주십시오. 4. **[수정]** 버튼을 클릭해 주십시오. 5. 웹훅 설정을 변경한 후 **[적용]** 버튼을 클릭해 주십시오. - 웹훅 설정 시 입력하는 내용에 관한 자세한 내용은 [웹훅 생성](/docs/sourcecommit-use-webhook-manage#%EC%9B%B9%ED%9B%85%EC%83%9D%EC%84%B1)을 참고해 주십시오. ### 웹훅 삭제 웹훅 호출을 더 이상 원하지 않는 경우 웹훅을 삭제할 수 있습니다. 웹훅을 삭제하는 방법은 다음과 같습니다. 1. 네이버 클라우드 플랫폼 콘솔에서 ![i_menu(1)](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/i_menu(1).png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) > **Services** > **Developer Tools** > **SourceCommit** 메뉴를 차례대로 클릭해 주십시오. 2. SourceCommit 화면에서 리포지토리를 선택한 후 **[코드로 이동]** 버튼을 클릭해 주십시오. - 리포지토리 목록에서 리포지토리 이름을 클릭해도 됩니다. 3. 리포지토리 상세 기능 화면에서 **[Hooks]** 탭을 클릭해 주십시오. 4. 보유중인 웹훅 목록에서 삭제할 웹훅을 선택하고 **[삭제]** 버튼을 클릭해 주십시오. 5. 삭제 확인 창에서 최종적으로 **[삭제]** 버튼을 클릭해 주십시오. ### 웹훅 호출 결과 확인 웹훅 연결 대상 별로 호출 결과를 확인할 수 있습니다. - [URL 연결 대상 호출 결과 확인](/docs/sourcecommit-use-webhook-manage#URL%EC%97%B0%EA%B2%B0%EB%8C%80%EC%83%81%ED%98%B8%EC%B6%9C%EA%B2%B0%EA%B3%BC%ED%99%95%EC%9D%B8) #### URL 연결 대상 호출 결과 확인 연결 대상이 **URL**인 웹훅은 웹훅 목록 화면에서 **[호출 결과]** 버튼을 클릭하여 확인할 수 있습니다. 1. 네이버 클라우드 플랫폼 콘솔에서 ![i_menu(1)](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/i_menu(1).png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) > **Services** > **Developer Tools** > **SourceCommit** 메뉴를 차례대로 클릭해 주십시오. 2. SourceCommit 화면에서 리포지토리를 선택한 후 **[코드로 이동]** 버튼을 클릭해 주십시오. - 리포지토리 목록에서 리포지토리 이름을 클릭해도 됩니다. 3. 리포지토리 상세 기능 화면에서 **[Hooks]** 탭을 클릭해 주십시오. 4. 호출 결과를 확인할 URL 유형의 웹훅을 선택한 후 **[호출 결과]** 버튼을 클릭해 주십시오. ![sourcecommit-use-webhook-manage_console5_ko](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console5_ko.png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) - 대상 유형: 웹훅 대상 유형 (현재 URL만 지원) - 엔드포인트: 웹훅 대상 URL - 호출 시간: 웹훅 호출 시간 - 상태: 호출 성공, 실패 여부 5. 상세 호출 결과를 확인하려면 **[보기]** 버튼을 클릭해주십시오. ![sourcecommit-use-webhook-manage_console6_ko](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console6_ko.png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) - 요청 정보 - 요청 헤더: 웹훅 호출 시 URL, Method, Headers 정보 - 요청 바디: 웹훅 호출 시 전달한 Body 정보 - 응답 정보 - 응답 상태 코드: 웹훅 호출 후 응답 받은 HTTP Status Code - 응답 헤더: 웹훅 호출 후 응답 받은 Headers - 응답 바디: 웹훅 호출 후 응답 받은 Body ## URL 대상 웹훅 데이터 수신 URL 대상 웹훅 데이터를 수신한 후 secret 값과 'x-ncp-sourcecommit-signature-v1' 헤더를 이용하여 위변조 유무를 검증하고 이를 출력하는 예제를 소개합니다. 1. [웹훅 생성](/docs/sourcecommit-use-webhook-manage#%EC%9B%B9%ED%9B%85%EC%83%9D%EC%84%B1) 및 [URL 연결 대상 추가](/docs/sourcecommit-use-webhook-manage#URL%EC%97%B0%EA%B2%B0%EB%8C%80%EC%83%81%EC%B6%94%EA%B0%80)를 참고하여 아래와 같은 내용으로 웹훅을 생성해주십시오. ![sourcecommit-use-webhook-manage_console9_ko](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console9_ko.png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) ``` :::(Info) (참고) * URL 웹훅 데이터 전송 시 HTTP Method 는 **POST** 입니다. * 웹훅 호출 시 request body를 Secret key로 Hmac SHA256 암호화 한 값이 **'x-ncp-sourcecommit-signature-v1'** 헤더를 통해 전송됩니다. * **Secret** 값이 공백일 경우 **'x-ncp-sourcecommit-signature-v1'** 헤더는 제공되지 않습니다. ::: ``` 1. 사용자 웹서버에서 웹훅 데이터를 받을 수 있도록 준비해주십시오. 주의 - secret 값은 유출되지 않도록 보관에 주의가 필요합니다. 아래 코드는 참고용으로만 제공됩니다. - Spring boot ``` @RestController public class SampleController { @PostMapping("/test") public String test( @RequestHeader("x-ncp-sourcecommit-signature-v1") String signature, @RequestBody String data ) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, JsonProcessingException { String secret = "my-secret-key"; Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); String expectedSignature = Base64.encodeBase64String(mac.doFinal(data.getBytes("UTF-8"))); if(!expectedSignature.equals(signature)){ System.out.println("this request failed validation"); } ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(data, new TypeReference>() {}); System.out.println("--- received payload ---"); System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map)); return "test"; } } ``` - Node.js - express ``` router.post('/test', (req, res, next) => { const secret = 'my-secret-key'; const signature = req.get('x-ncp-sourcecommit-signature-v1'); const data = JSON.stringify(req.body); const expectedSignature = createHmac('sha256', secret).update(data).digest('base64'); if(expectedSignature !== signature){ console.log('this request failed validation'); } console.log('--- received payload ---'); console.log(JSON.stringify(req.body, null, 2)); res.send('test'); }); ``` 1. 선택한 이벤트 유형 중 하나를 실행시켜 주십시오. - 아래 예시는 push 이벤트에 대한 예시입니다. ![sourcecommit-use-webhook-manage_console10_ko](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console10_ko.png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D) 2. 사용자 웹서버 콘솔에서 웹훅 수신 로그를 확인해 주십시오. ![sourcecommit-use-webhook-manage_console11_ko](https://cdn.document360.io/0406ed95-101f-4cde-8dd8-308d03444a94/Images/Documentation/sourcecommit-use-webhook-manage_console11_ko.png?sv=2026-02-06&spr=https&st=2026-11-07T17%3A18%3A51Z&se=2026-11-07T18%3A18%3A51Z&sr=c&sp=r&sig=iP%2B5EIKTcnz7bhbdkgC5i2DYjunpSWcS%2BuJOuiuK3YQ%3D)