본문 바로가기

[프로젝트] 냥냥곰펭

[BE] OpenAI 401 Error 해결

[문제] ChatGPT에게 질문을 하는 API를 사용하면 401 Error가 떴다. 문제는 local에서 했을 때는 아무 문제가 없었는데 배포한 뒤에 발생한 문제였다.

 

[해결] 환경변수가 설정이 되어 있지 않아서 발생

- local에서는 .env 파일에 저장하고 process.env.{변수명} 이런 식으로 사용했다. 그치만 .env는 gitignore로 처리했기 때문에 jenkins가 github에서 파일을 가져오면 env 파일에 담긴 환경변수들이 없다는 뜻이 된다.

 

EC2 서버에 env 파일을 설정

- 이 방법 같은 경우에는, jenkins 안의 docker에서 이미지가 빌드되고 사용되기 때문에 아무런 연관성이 없어 실패했다.

 

.env 파일을 그냥 git에다가 같이 업로드

- 일단 임시방편으로 사용하기 위해서 gitignore을 하지 않고 업로드했다. 그치만 되지 않았다...

찾아보니 pubilc으로 되어있는 git repo에 API KEY가 노출될 경우 openai 자체에서 그 KEY를 삭제해버리는 것이었다!!!!

참고한 사이트에서도 메일에 와있다길래 나도 보니 메일에 한가득 와있었음..

그래서 .env 파일을 git에다가 업로드를 하거나 해당 함수에 바로 입력해주는 방법은 사용할 수가 없었다.

 

Dockerfile ENV 설정

- ENV {변수명} {값} : 이와 같은 방식으로 해주었다.

- 여기에서도 2번과 마찬가지로 dockerfile은 github에 업로드가 되기 때문에 외부에 노출이 되었다 판단하여 KEY를 삭제하는 문제가 발생한다.

 

Jenkins 환경변수 설정 후 script 수정

- Jenkin-pipeline의 설정 > General > 이 빌드는 매개변수가 있습니다 선택 > 매개변수 입력

   - OPENAI_ORGANIZATION은 String Parameter로, OPENAI_API_KEY는 Password Parameter로 설정하였다.

   - 후자를 String으로 처리해도 되는건지는 모르겠다,,!

- script 수정

stage('Pull') {
    steps {
        git url: "${GIT_URL}", branch: "dev", poll: true, changelog: true
        sh 'touch .env'
        sh 'echo -e "OPENAI_ORGANIZATION=\'${OPENAI_ORGANIZATION}\'\nOPENAI_API_KEY=\'${OPENAI_API_KEY}\'\nACCESS_TOKEN_SECRET_KEY=\'${ACCESS_TOKEN_SECRET_KEY}\'" > .env'
    }
}

- git pull을 해오는 과정에서 .env 파일을 추가해주니 정상적으로 동작함!!!!!

 

외부에 KEY 값이 노출되면 값을 삭제해버리는게 신기하기도 하면서 만들 때 알려줬으면 좋았을 것 같다...

암튼 해결했으니 됐지 뭐!!!

 

 

 

* 외부 노출 시 KEY 삭제됨을 알게 된 사이트

[참고] https://minny-it.tistory.com/11

* Script 수정에 참고한 사이트

[참고] https://chanhyukpark-tech.github.io/reactjs/react-jenkins-build-environment-variables-copy/