์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Redoc์„ ํ†ตํ•œ ๋ถ„์‚ฐ ์„œ๋น„์Šค ํ†ตํ•ฉ API ๋ฌธ์„œ ๋ฐฐํฌ ๋„์ „๊ธฐ

ddonghyeo 2024. 5. 9. 22:46

 

 

๋‚˜๋Š” ์›๋ž˜ ์‚ฌ์šฉํ•˜๋˜ ์„œ๋ฒ„์˜ API ๋ช…์„ธ์„œ๋Š” ํ•ญ์ƒ springdoc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ Swagger๋ฅผ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค.

 

 

๋ถ„์‚ฐ ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ Swagger๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„œ๋น„์Šค ๋‹น URL์ด ์ƒ๊ฒจ ํ•„์š”ํ•œ ๋ช…์„ธ์„œ๋ฅผ ์ฐพ์•„ ๋งํฌ๋ฅผ ์ด๋ฆฌ์ €๋ฆฌ ์˜ฎ๊ฒจ๋‹ค๋…€์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค.

 

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ์šด ์ข‹๊ฒŒ ๋ผ์ธ ํ…Œํฌ ๋ธ”๋กœ๊ทธ์˜ ๊ธ€์„ ๋ณด์•˜๋‹ค!

 

 

https://techblog.lycorp.co.jp/ko/api-document-integration-and-documentation-automation

 

๋ชจ๋‘๊ฐ€ ํ–‰๋ณตํ•ด์ง€๋Š” API ๋ฌธ์„œ ํ†ตํ•ฉ๊ณผ ์ž๋™ํ™”

๋“ค์–ด๊ฐ€๋ฉฐ ์•ˆ๋…•ํ•˜์„ธ์š”. LINE Plus์—์„œ LINE Monary์™€ MyDashboard ์„œ๋น„์Šค์˜ ๋ฐฑ์—”๋“œ๋ฅผ ๋งก๊ณ  ์žˆ๋Š” ์กฐ์„ฑ๋นˆ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๋ฐ ์šด์˜ ์—…๋ฌด๋ฅผ...

techblog.lycorp.co.jp

 

๋ฐ”๋กœ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด ๋ณด์•„์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

 

 

 

 

 

Github Pages

ํ†ตํ•ฉ๋œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ํŽ˜์ด์ง€๋Š” Github Pages๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐํฌ๋๋‹ค.

 

Github Pages๋Š” ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์˜ ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ์ด๋ฏธ์ง€๋ฅผ ์†์‰ฝ๊ฒŒ ๋ฐฐํฌํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

 

์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ์—์„œ ๋ดค๋˜ ๋„๋ฉ”์ธ ํ˜•์‹์ธ ~~~.github.io ํ˜•์‹์ด๋‹ค.

 

 

 

 

Redoc

 

๋ฌธ์„œ ํŽ˜์ด์ง€ ์ƒ์„ฑ์€ Redoc์ด๋ผ๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

๋‚˜๋Š” ํ‰์ƒ Swagger๋งŒ ์ ‘ํ•ด๋ณด์•˜์—ˆ๋Š”๋ฐ, Redoc์„ ๊ฒฝํ—˜ํ•˜๋Š” ์ข‹์€ ๊ธฐํšŒ๋กœ ์‚ผ๊ณ  ๋„์ „ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค !!

 

https://redocly.github.io/redoc/

 

ReDoc Interactive Demo

ReDoc Interactive Demo. OpenAPI/Swagger-generated API Reference Documentation

redocly.github.io

 

Redoc ๋ช…์„ธ์„œ์˜ ๋ฐ๋ชจ ์‚ฌ์ดํŠธ์ด๋‹ค.

 

 

 

 

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.3'
    id 'io.spring.dependency-management' version '1.1.4'
    id "org.springdoc.openapi-gradle-plugin" version '1.8.0'
}


//...



dependencies {
    //Springdoc
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'

}

 

 

gradle-plugin์˜ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด๋‘๋ฉด gradle task๋ฅผ ํ†ตํ•ด API ๋ฌธ์„œ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•œ ๋ช‡๊ฐ€์ง€ build.gradle ์„ค์ •์„ ๋‚ด ์„œ๋ฒ„์— ๋งž๊ฒŒ ์ ์šฉํ•ด ๋ณด์•˜๋‹ค.

 

 

openApi {
    apiDocsUrl.set("http://localhost:8000") // Document URL
    outputDir.set(file("$rootDir/docs")) // Build Result Path
    outputFileName.set("noti.json") // Build Result File Name
    groupedApiMappings.set(Map.of("http://localhost:8082/noti/api-docs", "noti.json"))
    waitTimeInSeconds.set(60) // Timeout
    customBootRun {
        args.add("--spring.profiles.active=dev")
    }
}

 

๋ณธ๋ฌธ์˜ $buildDir ์€ Deprecate ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. $rootDir ๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.

 

 

 

 

 

 

 

์‹คํ–‰

 

 

gradle์˜ generateApiDocs Task๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

openapi๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ API ๋ช…์„ธ์„œ๋ฅผ ์ถ”์ถœํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์›๋ž˜ ๊ฐ™์ด ๋งž๋ฌผ๋ ค์„œ ๋Œ์•„๊ฐˆ Spring Cloud Config , Eureka , Kakfa ... ๊ฐ€ ์ผœ์ ธ์žˆ์–ด์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

1ํšŒ์„ฑ ์‹คํ–‰์ด๊ธฐ ๋•Œ๋ฌธ์— Eureka, Kafka๋Š” ํ•„์š”์—†๊ฒ ์ง€๋งŒ.. Config Server๊ฐ€ ์—†์œผ๋ฉด ๊ตฌ๋™์ด ์•ˆ๋๋‹ค.

 

GitHub Action Runner๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™ํ•ด์•ผ ํ–ˆ๋‹ค.

 

 

 

 

 

๊ฒฐ๊ณผ๋Š” yml์ด ์—†์œผ๋‹ˆ ์‹คํŒจ ..

 

 

์ด๋Ÿฐ ์ชฝ ์ง€์‹์ด ์—†๋Š” ๋‚˜๋Š” ํ˜ผ๋ž€์— ๋น ์กŒ๋‹ค..

 

1. 1ํšŒ์„ฑ ์‹คํ–‰์ด๋‹ˆ๊นŒ DataSource ๋ฅผ Excludeํ•˜๊ณ  ์‹คํ–‰

์ง์ ‘ mainํ•จ์ˆ˜์—์„œ datasourceConfiguration์„ excludeํ•˜๋Š” ๋ฐฉ๋ฒ•. ๋™์ž‘๋  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐ

 

2. 1ํšŒ์„ฑ application.yml์„ ์ฃผ์ž…

Github Action Secret์„ ํ†ตํ•ด ์„ค์ •๊ฐ’์„ ์ฃผ์ž…ํ•˜๊ณ  RDS์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•. RDS๋ฐฐํฌ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Œ

 

3. Spring Cloud Config๋งŒ ๋ฏธ๋ฆฌ ๋ฐฐํฌํ•ด๋‘๊ณ  Fetching 

Config Server๋ฐฐํฌ ์ „ ์ƒํƒœ. ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํผ. ๋˜ํ•œ, ์ด๋ฏธ ๋ฐฐํฌํ•œ ์ƒํƒœ๋ผ๋ฉด ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ค‘๋ณต ์ ‘๊ทผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Œ

 

4. Github Runner์— Config Service๋ฅผ ๊ฐ€์ ธ์™€์„œ

yml ์ €์žฅ์†Œ์™€ ํ†ต์‹ ํ•  private key๋˜ํ•œ ์ถ”๊ฐ€๋กœ ์„ค์ •์ด ํ•„์š”ํ•จ. ํ”„๋กœ์„ธ์Šค ๋˜ํ•œ ๊ธธ์–ด์ง€๊ณ , ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํผ

 

 

 

 

 

 

 

๊ฒฐ๊ตญ ๊ทธ๋‚˜๋งˆ 2๋ฒˆ์„ ์„ ํƒํ•ด Github Action Secret์„ ์ด์šฉํ•˜์—ฌ 1ํšŒ์„ฑ bootstrap.yml ์„ ์ฃผ์ž…ํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

 

 

 

60์ดˆ timeout

 

 

 

60์ดˆ Timeout ์„ ๊ฑธ์–ด๋†จ๋˜ ๊ฒƒ์—์„œ ๊ฑธ๋ ธ๋‹ค. 60์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ ค๋„ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฒƒ์ด๋‹ค.

 

Kafka ์„œ๋ฒ„์— ํ† ํ”ฝ ์ƒ์„ฑ, ๊ตฌ๋…, Eureka ์„œ๋ฒ„ ๋“ฑ๋ก ์‹œ๋„ ๋“ฑ๋“ฑ ์„œ๋ฒ„ ๊ตฌ์ถ•์— ๋„ˆ๋ฌด ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

 

 

 

๋ฌผ๋ก  timeout์„ ๊ธธ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋˜๊ฒ ์ง€๋งŒ,

 

API ๋ช…์„ธ์„œ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •์€ ๋„ˆ๋ฌด ๋ฌด๊ฒ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ฐฉ๋ฒ•์„ ์กฐ๊ธˆ ๋ฐ”๊พธ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

 

 

 

ํšŒ์„ 

 

 

gradle task๋ฅผ ํ†ตํ•ด ์ถ”์ถœ๋œ json ์„ Github Action์ด ๊ฐ€์ ธ๊ฐ€์„œ ์ƒ์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

API ์ŠคํŽ™์ด ๋ฐ”๋€Œ๋ฉด task๋ฅผ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. API ์ŠคํŽ™์€ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋‹ˆ..

 

์ผ๋‹จ Github Pages๋ฅผ ๋ฐฐํฌํ•  ๋ ˆํฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

 

 

 

<owner ์ด๋ฆ„>.github.io ์ด๋ฆ„์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

$ ssh-keygen -t rsa -b 4096 -C "{email}"

 

ssh ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€, Deploy Key๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด passphrase๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

 

 

https://github.com/marketplace/actions/webfactory-ssh-agent

 

ssh-agent๋ฅผ ๋งŒ๋“  webfactory์—์„œ '์–ด์ฐจํ”ผ private key๋Š” Secret์— ์ €์žฅ๋˜๋‹ˆ ์•ˆ์ „ํ•  ๊ฒƒ์ด๊ณ , passphrase๋ฅผ Input์œผ๋กœ ๋„ฃ์ง€ ์•Š์•„๋„ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.' ๋ผ๊ณ  ํ•œ๋‹ค.

 

์‹ค์ œ๋กœ passphrase๊ฐ€ ์žˆ๋Š” ํ‚ค๋ฅผ ๋„ฃ์œผ๋ฉด input์„ ์š”๊ตฌํ•˜๊ณ , ์—†๋‹ค๋ฉด Action์ด ์‹คํŒจํ•œ๋‹ค.

 

 

 

 

๋ ˆํฌ์— public key๋ฅผ Deploy Key๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค.

 

์ด์ œ ๋ณธ ๋ ˆํฌ์˜ github action ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

 

name: API Docs Integration

on:
  push:
    branches:
      - develop

jobs:
  api-docs-integration:
    runs-on: ubuntu-latest
    steps:

      # ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ
      - name: Checkout Code 
        uses: actions/checkout@v3
        with:
          ref: 'develop'

      # Json ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ
      - name : collect json
        run : |
            cp ./noti-service/docs/noti.json ./
            cp ./user-service/docs/user.json ./
            cp ./weather-service/docs/weather.json ./

      # [Redoc] json ํŒŒ์ผ join
      - name: redoc-cli join
        uses: DeltaLaboratory/redocly-cli-action@v1.0.0
        with:
          args: 'join *.json -o api.yaml'

      - name: check result
        run: |
          ls -al
          test -f api.yaml || (echo "Missing api.yaml from previous step." && exit 1)
      
      # [Redoc] Build docs
      - name: redoc-cli build docs
        uses: DeltaLaboratory/redocly-cli-action@v1.0.0
        with:
          args: 'build-docs api.yaml -o index.html'

      - name: check result
        run: |
          ls -al
          test -f index.html || (echo "Missing index.html from previous step." && exit 1)
          
      # ์›นํŽ˜์ด์ง€ Repository์— Push
      - name: Install SSH Key
        uses: leigholiver/commit-with-deploy-key@v1.0.4
        with:
          source: index.html
          destination_folder: docs
          destination_repo: WaitherTeam/WaitherTeam.github.io
          destination_branch: main
          deploy_key: ${{ secrets.DEPLOY_KEY }}

 

Redoc-cli

 

์ฒ˜์Œ์—๋Š” Marketplace์˜ star๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์œ„์— ์žˆ๋Š”๊ฑธ ์ด์šฉํ–ˆ๋Š”๋ฐ, 

๊ณ„์† ์‹คํŒจ๋ฅผ ๊ฑฐ๋“ญํ–ˆ๋‹ค.

 

์ˆ˜์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ณ 

 

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜๋ชป ์ผ๋Š”์ง€, args๋ฅผ ์ž˜ ๋ชป ์ „๋‹ฌํ–ˆ๋Š”์ง€ ๊ณ„์†ํ•ด์„œ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ณ ๋ฅผ ๋ฐ˜๋ณตํ–ˆ๋‹ค.

 

์ง์ ‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋œฏ์–ด๋ณด๋‹ˆ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ redoc-cli๋ฅผ arg๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋“ฏ ํ–ˆ๋‹ค.

 

๋„์ปค ๋‚ด์—์„œ ์ž‘๋™ํ•˜๋‹ค ๋ณด๋‹ˆ ๋กœ๊ทธ๋„ ๋ณด์ด์ง€ ์•Š๊ณ  ๋‹ต๋‹ตํ–ˆ๋‹ค ๐Ÿซ 

 

The join command is considered an experimental feature

https://redocly.com/docs/cli/commands/join/

 

join

OpenAPI-generated documentation tool with 17,000+ stars on Github - for API docs you can be proud of.

redocly.com

 

์ง์ ‘ Redoc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„๊ฐ€์„œ join ๋ช…๋ น์–ด๋ฅผ ๋ณด์•˜๋Š”๋ฐ, join์ด ์‹คํ—˜์  ๊ธฐ๋Šฅ...?

 

๊ทธ๋ž˜๋„ ๋กœ์ปฌ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•ด๋ณด๋‹ˆ, ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋…ผ๋ฆฌ์  ์ถ”๋ก ์œผ๋กœ.. join์ด ์‹คํ—˜์  ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๋œป์€ ๊ฐœ๋ฐœ๋œ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์•˜๋‹ค..? ๋ฒ„์ „์ด ๋งž์ง€ ์•Š๋‚˜? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ง์ ‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ปค๋ฐ‹์„ ๋ดค๋”๋‹ˆ.. 4๋…„์ „ ..๐Ÿค” ๋ฒ„์ „์ด ๋งž์ง€ ์•Š๋Š”๊ฒŒ ๋ถ„๋ช…ํ•˜๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ทธ๋‚˜๋งˆ ์ตœ๊ทผ์ธ DeltaLaboratory/redocly-cli-action@v1.0.0 ์œผ๋กœ ๋ฐ”๊พธ์—ˆ๋”๋‹ˆ ๋ฐ”๋กœ ๋™์ž‘ํ–ˆ๋‹ค.. ๐Ÿฅฒ

 

[๊ตํ›ˆ]

 

1. ๋กœ๊ทธ๋Š” ์ •๋ง ์†Œ์ค‘ํ•˜๋‹ค.

 

2. ๋ฒ„์ „ ํ™•์ธ๋„ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค.

 

3. ์ •๋ณด๊ฐ€ ์—†๋‹ค๋ฉด ๋…ผ๋ฆฌ์  ์ถ”๋ก  ๋Šฅ๋ ฅ์„ ๋ฐœํœ˜ํ•ด๋ผ.

 

 

 

Github Push

 

๋ผ์ธ ๋ธ”๋กœ๊ทธ์—์„  ๊ฐœ์ธ Runner๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง€์ •ํ•œ ๋“ฏ ํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋”ฐ๋กœ ๋ ˆํฌ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ–ˆ๋‹ค.

 

์ฒ˜์Œ์—๋Š” deploy key ๋ง๊ณ  access token์œผ๋กœ ํ•ด๋ณด๋ ค ํ–ˆ์ง€๋งŒ ์˜ฌ๊ฐ€๋‹ˆ์ œ์ด์…˜์ด๋ผ ๊ทธ๋Ÿฐ์ง€ ์—ฌ๋Ÿฌ ์„ค์ •์„ ๋งŒ์ ธ๋ด๋„ 403์„ ๋ฐ›์„ ๋ฟ์ด์—ˆ๋‹ค.

 

๊ฒฐ๊ตญ Deploy Key๋ฅผ ๋“ฑ๋กํ•˜๊ณ  , Marketplace์—์„œ ๊ฒ€์ƒ‰ํ•ด์„œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

leigholiver/commit-with-deploy-key@v1.0.4

 

 

 

 

 

 

 

 

 

์ด๋ ‡๊ฒŒ ํ•ด๋‘๊ณ  ์›นํŽ˜์ด์ง€ ์„ค์ •์—์„œ Pages๋ฅผ ํ™œ์„ฑํ™”ํ•ด์ฃผ๋ฉด ..

 

๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค !! ......

 

 

 

 

 

 

 

 

 

 

 

 

์‹œํ–‰์ฐฉ์˜ค.jpg