Opensource Project-3 Docker, Docker-compose

kyoungyeon·2024년 10월 24일
0

TIL

목록 보기
119/122
post-thumbnail

Docker

  • 기존 REACT 관련 도커 내용 기록
  • REACT server - 3000 port
  • NodesJS - 3002 port
  • NGINX ..

사용한 원인

  • proxy 설정때문
  • local에서 테스트 하고 oauth/ s3등 접근 하려니 계속 CORS 에러가 남
    • (아마도) port 불일치, IP 불일치 및 정책 문제로 CORS 문제가 다수발생 ( JAVA 및 S3)

      • 누누히 말하지만 JAVA쪽에선 협조가 전.혀. 안됬기 때문에 FRONT에서 다 해결해야했음
    • Proxy 떄문에 NGINX도 써야해서 좀 과한 설정인건가 싶은 생각도 듦

    • EC2 프리티어의 한계로 docker 및 Docker-compose를 쓰면 디스크 관리 , Volume 관리라는 새로운 이슈 발생

Error 1

상황 ) S3에 직접 client 호출

그러나 이미지가 로딩이 느려지는 이유

  • 이론상 hop수가 적기 때문에 ( 직접 연동) 성능부분에서 뛰어났어야 함
  • 기존 AI 생성 이미지가 크기가 컸음
    • 즉 모든 blob 파일을 다 crud 해서 해당 내용을 filter링 하려니 prompt로 키워드 입력받아야 하는 client 입장에선 해당 기능의 단점이 더 부각됨
  • client에서 이 blob 파일을 acceess를 위해 코드 리팩토링을 위한 공수 및 시간 소요
    • 그 외 코드 유지 보수성
  • 민감한 정보(aws access key 등) 유출 보안 위험 발생
  • 그리고 자꾸만 CORS 에러 발생함 ( S3 버킷 policy 및 CORS 정책을 적용했음에도)

solved 성능

Nodejs 자체 API 관리 서버 개발

  • env를 활용해 민감한 정보 관리
  • hop수가 늘지만 로직을 이용하여 전체가 아닌 일부의 blob 파일만 갖고오게 함
  • Proxy 설정을 써서 개발 환경에서 주로 cors error를 우회하기 위해 만듬
    • Proxy 설정때문에 결국은 NGIX도 써야하는게 좀 흠이긴 했음

error2

상황) 개발 환경에선 충분히 Nodejs로 CORS등 에러 핸들링이 가능했음
근데 배포환경에서 NGINX 왜 쓰는데

  • 기존 로컬의 개발 환경에선 이미 setProxyserver.js 로 proxy 설정 함.

  • nodejs 에서도 한번더 cors error 처리 / 쿠키 에러 처리 다 해결했는데!

solved 배포환경과 개발환경의 차이점

  • 이번 프로젝트로 deploy 와 production 환경에 있어서 속도 성능차이가 확실하다는 것을 느낌

EC2 튕김

  • EC2가 t2.micro로 프리티어 레벨^^
    • 볼륨을 프리티어 제공 최대로 높여줌
    • 그래도 docker등 세팅이 무거워 질수록 서버 튕김 현상을 자주 보여줌.
    • Remote로 작업하려해도 tunneling 자체가 무겁게 돌아감 속도가 갈수록 느려짐
      • swap 메모리도 2G 다 땡겨썼으나 여전히 느림
  • 기존 개발환경이랑 똑같은 환경으로 배포하려 했으나 세팅 불가능한 수준임
    • 그래서 NGINX를 찾게된 것임 ( 배포환경을 별도로 관리하려함)
    • NODEJS는 API 용으로만/ REACT는 CLient 서버용/ NGINX에서 CORS및 Proxy 해결

Error 3 의존성 문제

상황) Node module 들 중 node가 18 버전 이상이여야 지원되는 package가 있었음
근데 ec2는 프리티어라 옛날 16 버전만 지원가능한 상황

  • 로컬에서 개발 잘 하면 머하누.. 배포가 안되는데요..
  • 저 의존성 문제로 yarn 도, npm 설치도 안됨

solved Docker

  • 그래서 Docker를 알아봄
    • msa처럼 각 서버를 기능별로 쪼개서 관리하는거임
      • 클라이언트용/API용...
  • 근데 알아보니 말처럼 쉽지는 않았구요
    • 배포는 했는데 local에서 분명 해결한 cors가 재탕되기 시작함

error 3-2 cross-env, cocurrently 이슈

상황 ) 같은 ip 대역대 내에서 nodejs 와 react 둘다 한번에 돌려야 통신이 됨.

  • MACOS와 WINDOWSOS 개발자 둘이서 동시 개발을 하다보니 OS 이슈도 있었음
  • 의존성 문제에 이어 위 패키지도 문제였음
    • script내에선 yarn dev 실행되야 했는데 앞선 의존성 문제로 yarn을 못쓰고 있었음

Solved Docker가 답이다

  • docker로 yarn 설치가 가능함
  • docker로 의존성문제는 해결가능함

error4 DockerFiles 문제

  • 분명 성능 및 효율적인 서버 관리를 위한 Docker 였으나
  • 막상 network, image, container들의 문제로 ec2가 느려짐
  • DockerFile 및 docker cmd를 이용해서 일일이 삭제하는게 좀 귀찮음

sovled docker-compose

  • docker 를 가볍게 관리하기위한 관리용 도구
    • 기존 docker 데몬도 필요하더라구요
      • 원래 목표로 한 디스크 용량이 감소하진 않았음
    • 정말 길어지는 docker cmd를 줄이고 직관적으로 관리하기엔 편하긴해서 쓰는중.

Error5 Proxy , CORS

  • 개발 환경와 배포환경이 다른 것의 주요 원인
    • 위 문제를 해결하는 접근방식이 달라야 하는 듯.

배포를 위한 NGINX?

  • NGINX로 효율적으로 성능 및 서버 관리가 가능하다고 함
    • 일단 포트가 다른 서버가 있기도 하고.
    • NGINX로 중간의 cors나 Proxy 관리만 하면
    • 기존 NODEJS와 client에 중복해있는 cors 처리 코드가 줄어들테니 서버 코드 가독성이 높아지려나.

서버가 다수이기 때문에 독립적으로 관리할 필요는 느꼈지만

  • Docker 에 NGINX 까지 설치하면서 안그래도 디스크 용량 부족 메모리 부족 이슈가 자주뜨던 ec2가 많이 버벅임

    • 굳이 둘다 써야하냐 는 생각이 좀 들었음
  • 배포에선 daemon과 관련 service로 정적 파일 배포함 (public 폴더내 index.html 및 logo 파일등)

    • 아무래도 개발환경처럼 hotfix는 어려움 (즉 온전하게 개발이 끝난후에 좀 더 이점이 있음)
    • Production은 안정적인 서비스를 빠르게 배포할 수 있다는 장점이 있다곤 하지만.

profile
🏠TECH & GOSSIP

0개의 댓글