문제상황
- CodeDeploy를 통해서 CICD를 구축해서 AWS EC2에 Spring Server를 배포.
- FE서버와의 연결상태 확인.
- 게시글 작성에서 이미지를 리스트로 업로드하는 부분이 서버상에서 작동하지 않는다..
에러코드
- java.io.ioexception: permission denied
- ??? 갑자기 이게 무슨일인가 했다.
시도 및 확인
- Local환경에서 Test 결과 - 성공
- 서버 환경에서 Test결과 - 실패
- 어떤 변수값에 의한 문제발생인지 파악이 필요했다.
- 대부분의 기능들이 정상적으로 작동하나 이미지 업로드와 관련된 부분에서 동일한 에러가 발생함을 확인.
- 이미지 사이즈에 의한 문제인가? - 아니다 - 로컬상에도 사이즈를 줄여서 해봤지만 지정한 예외가 처리되게 되어있다.
- 이미지 용량에 의한 문제인가? - 아니다 - 로컬상에서 도합 10MB넘는 용량을 업로드하면 지정한 예외가 처리되었다.
- 코드나 기능상에서 예상할 수 있는 문제는 모두 아닌것으로 생각되었다.
- 환경이나 설정의 문제라고 생각.
권한
이라는 단어에 집중했다 -> 어디의 권한인가? -> 서버상의 권한일것 -> 서버는 어디인가? -> 우분투 서버이며 이는 리눅스 기반의 서버이다.
- 시도1. 현재 ubuntu 에서 사용자 권환상태를 확인.
- 시도2. 권한 침범이 예상되는 경로에 chmod 755 -R /경로 를 사용해서 권한 업데이트
- 결과적으로 성공하지 못했다.
해결
리눅스의 권한이 무엇인지에 대한 이해도가 너무 부족했던것 같다.
그리고 통신 플로우에 대한 이해가 없었던것 같다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/app
overwrite: yes
permissions:
- object: /
pattern: "**"
owner: ubuntu -> root 로 변경
group: ubuntu
hooks:
AfterInstall:
- location: scripts/stop.sh
timeout: 60
runas: ubuntu
ApplicationStart:
- location: scripts/start.sh
timeout: 60
runas: root
- permision denied 디렉토리에 접근 권한이 없기때문에 나오는 오류이다 -> 접근이 안된다.
- 권한을 무언가 설정을 해야한다. S3의 권한확인 -IAM에서 FullAccess가 되어있었다.
- S3는 EC2 밖에 존제하는대 EC2내부에서 권한을 수정하고 있었다.
- 경로 접근에대한 이해도가 부족했다.
- 더 좋은 접근방법은 통신 플로우의 이해도가 필요하다.
- S3에 접근하는 주체에대해 생각해볼 수 있다.
- CodeDeploy 설정인 appspec.yml에서 권한 설정이 잘못되어 있다.
- ubuntu가 최상위 권한인줄 알았으나 실상은 root계정이 최상위 권한자이다.(내가한 오해)
- 그러므로 결국은 권한이 부족한 계정으로 프로그램을 실행하면서 권한부족이 발생했다.
- 그러나 실질적으로 root계정을 사용하는것은 옳바른 방법은 아니다.
- 일반계정에 권한을 따로 지정해줄 필요가 있다.
추가적인 정보를 참조한다면 좋으듯 하다.
참조 https://goodgid.github.io/Github-Action-CI-CD-CodeDeploy-App-Spec-File/