🍀

도커 설치, CICD, 연관관계 delete

작성일자
Mar 7, 2023
태그
DIARY_DEVELOP
프로젝트
Atties
책 종류
 

공부한 내용

docker+github actions 이용해 배포 자동화하기(CICD)

에러

  • CICD 관련 에러
    • 에러) ssh: handshake failed: ssh: unable to authenticate, attempted methods [none], no supported methods remain
      • 해결) PPK 파일을 OpenSSH 포맷으로 변환해서 사용함
        • PPK 파일은 PuttyGen이나 PuTTY 같은 프로그램에서 사용하는 포맷이기 때문에, appleboy/ssh-action과 같은 대부분의 SSH 액션에서는 직접 사용할 수 없습니다. 대신, PPK 파일을 OpenSSH 포맷으로 변환한 후, 해당 키 파일을 Github Secrets에 등록하고, Github Actions YAML 파일에서 사용해야 합니다. PPK 파일을 OpenSSH 포맷으로 변환하려면, puttygen을 사용하여 변환할 수 있습니다.
  • postman 동작 에러
    • 에러) 모든 api들이 실행이 됐다가 아래 에러가 떴다가 계속 반복함.
      • 해결) 포트 번호 문제 같음 → 아니었음 ㅎ..
        • 8080 → 80
        • docker build 할 때 아래 로그가 뜸 Step 3/4 : EXPOSE 8080 ---> Running in e21f7d2e3898
          • Dockerfile에서 EXPOSE 명령어는 컨테이너가 사용할 포트를 지정하는 역할을 합니다. 해당 로그는 Dockerfile의 3번째 줄에서 4번째 줄로 진행되는데, 3번째 줄에서 8080번 포트를 EXPOSE 하고 있다는 것을 나타냅니다. 이는 해당 Docker 이미지가 8080번 포트를 사용할 것이라는 것을 알려주는 것입니다.
            • 즉, 이 Docker 이미지를 실행할 때, 8080번 포트를 열어야 하며, 이를 통해 외부에서 해당 컨테이너로 접근할 수 있습니다.
              하지만, EXPOSE 명령어가 포트를 실제로 열어주는 것은 아니며, 단지 해당 이미지가 사용할 포트를 명시하는 것입니다. 따라서 이후에 컨테이너를 실행할 때 -p 옵션 등을 사용하여 포트를 열어주어야 합니다.
      • 해결) 아직 해결 x
        • 이 에러는 API 서버와 연결이 끊어졌거나 서버 자체에 문제가 발생하여 API 요청이 제대로 처리되지 않은 것을 나타냅니다. 이 문제는 일시적 일 수 있으며, API 서버에서 일시적으로 과부하가 발생하거나 인프라 문제가 발생할 때 발생할 수 있습니다.
          이 문제를 해결하려면 다음과 같은 조치를 취할 수 있습니다.
          1. 재시도 로직 구현: API 호출이 실패하면 일정 시간 후에 재시도하는 로직을 구현하여 이 문제를 해결할 수 있습니다.
          1. API 서버 확인: 문제가 API 서버 쪽에서 발생하는 것인지 확인해야 합니다. API 서버에서 로그를 확인하고 문제를 해결할 수 있는 조치를 취해야 합니다.
          1. 인프라 확인: API 서버가 호스팅되는 인프라에서 문제가 발생한 경우, 인프라 관리자에게 문제를 보고하여 조치를 취해야 합니다.
          1. API 요청량 줄이기: API 서버에 대한 요청량이 많은 경우, 요청량을 줄이는 조치를 취해야 합니다. 이를 위해 캐싱, 요청 쓰로틀링 등의 방법을 사용할 수 있습니다.
          1. API 호출 코드 수정: API 호출 코드를 검토하고 수정하여 이 문제를 해결할 수 있습니다. 예를 들어, API 요청 전에 일정한 시간을 두는 등의 방법을 사용할 수 있습니다.
          위의 조치를 취하여 이 문제를 해결할 수 있습니다. 하지만 이 문제가 지속되는 경우, API 서버 또는 인프라 구성에 대한 재검토가 필요할 수 있습니다.
 
에러) feed 삭제 API 500 에러 : could not execute statement; SQL [n/a]; constraint
  • 해결) feed와 record(주인) 연관관계가 잇는데 feed만 지우고, record만 남겨주고 싶을 땐 record의 feed를 null로 바꿔줘야 함.
    • 챗GPT 답변 (틀린 거 같음) → 이유는 오류 날 거라 했는데, 잘 돌아가서,,
      • findFeed.setRecord(null)FeedRecord의 관계를 제거하기 위한 코드임. Feed 엔티티는 Record 엔티티를 참조하고 있기 때문에, Record와의 연관관계를 끊어주지 않으면 Feed를 삭제할 수 없음. 만약 FeedRecord의 연관관계를 끊어주는 코드를 생략하면, Feed 엔티티를 삭제할 때 Record 엔티티도 함께 삭제되지 않고, 오류가 발생하게 됨. 따라서 Feed 엔티티를 삭제하기 전에 Record와의 연관관계를 끊어주는 코드는 필수적임.
       
    • 추가 에러) null pointer exception
      • 해결) if문으로 null 체크
        • feed 삭제할 경우(인자로 null이 들어오는 경우) NPE 방지 위함

새로 알게 된 것

 

하루 정리

TIL 작성하기
Atties
배포자동화(CICD) → 머지
스웨거 적용 PR 코리하기
8시 백엔드 회의
BeachCombine
피드 삭제하기 API 구현
 
 
도커 설치, CICD, 연관관계 delete