전제 : db는 원격 리눅스서버에 설치해야함
* 방안 a : 리눅스 서버에 소스코드를 모두 옮기기
* 방안 b : 개발은 로컬에서하고 db만 연결
소스 코드 배치 방식 비교:
a. 리눅스 서버에 JS 소스 코드를 모두 옮기는 방법:
장점:
애플리케이션과 데이터베이스가 같은 환경에 있어 네트워크 지연 최소화
배포 및 관리가 단순화됨
보안 설정이 더 쉬워짐 (외부에서 DB 직접 접근 불필요)
단점:
로컬 개발 및 테스트가 불편할 수 있음
서버 리소스 관리에 더 주의를 기울여야 함
b. 로컬에 JS 소스를 두고 리눅스 DB에만 연결하는 방법:
장점:
로컬 개발 및 테스트가 용이함
애플리케이션과 데이터베이스의 독립적인 스케일링 가능
개발 환경과 프로덕션 환경의 분리가 명확함
단점:
네트워크 지연으로 인한 성능 저하 가능성
보안 설정이 더 복잡해질 수 있음 (DB 포트 외부 개방 필요)
배포 프로세스가 더 복잡해질 수 있음
선택 기준:
애플리케이션의 규모와 복잡성
개발 팀의 규모와 작업 방식
보안 요구사항
성능 요구사항
유지보수 및 확장성 고려
일반적인 권장사항:
개발 단계: 로컬에 소스 코드를 두고 개발하되, 테스트용 DB는 로컬 또는 원격으로 설정
프로덕션 단계: 애플리케이션과 데이터베이스를 모두 리눅스 서버에 배치
* 결론 : 개발단계이므로, 로컬에서 개발 && db는 원격으로 설정하고자 함.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
* 그래서, 실제 기업에서는 어떻게하는데?
유추 : 로컬에서 작업 with 개발용 원격db? or 개발용 로컬 db? -> git에올림 -> test -> 통과시 배포환경에 적용(우리는 가상환경의 리눅스)
실제 기업에서는 일반적으로 다음과 같은 방식으로 개발 및 배포를 진행합니다:
- 개발 환경 분리:
- 개발(Development)
- 테스트(Test) 또는 스테이징(Staging)
- 프로덕션(Production)
- 코드 관리:
- Git과 같은 버전 관리 시스템 사용
- GitHub, GitLab, Bitbucket 등의 플랫폼 활용
- 로컬 개발:
- 개발자들은 로컬 환경에서 코드 작성 및 테스트
- 로컬 데이터베이스 또는 개발용 원격 데이터베이스 사용
- CI/CD (지속적 통합/지속적 배포):
- Jenkins, GitLab CI, GitHub Actions, CircleCI 등의 도구 사용
- 자동화된 빌드, 테스트, 배포 프로세스
- 컨테이너화:
- Docker를 사용하여 애플리케이션 컨테이너화
- Kubernetes 등으로 컨테이너 오케스트레이션
- 클라우드 서비스 활용:
- AWS, Google Cloud, Azure 등의 클라우드 플랫폼 사용
- 서버리스 아키텍처 (예: AWS Lambda) 활용
- 데이터베이스 관리:
- 프로덕션 데이터베이스는 보안이 강화된 별도 서버나 관리형 서비스에 호스팅
- 개발 및 테스트용 별도 데이터베이스 인스턴스 운영
- 보안:
- VPN 또는 SSH 터널을 통한 안전한 데이터베이스 접근
- 암호화된 연결 (SSL/TLS) 사용
- 비밀 정보는 환경 변수나 보안 관리 서비스(예: AWS Secrets Manager)에 저장
- 모니터링 및 로깅:
- ELK 스택(Elasticsearch, Logstash, Kibana) 또는 클라우드 기반 솔루션 사용
- 성능 모니터링 도구(예: New Relic, Datadog) 활용
- 스케일링:
- 로드 밸런서를 통한 트래픽 분산
- 자동 스케일링 그룹 설정
- 백업 및 재해 복구:
- 정기적인 데이터베이스 백업
- 다중 지역 배포로 고가용성 확보
일반적인 워크플로우:
- 개발자가 로컬에서 코드 작성 및 테스트
- 코드를 Git 저장소에 푸시
- CI/CD 파이프라인 트리거
- 자동화된 테스트 실행
- 테스트 통과 시 스테이징 환경에 배포
- 스테이징 환경에서 추가 테스트 및 검증
- 승인 후 프로덕션 환경에 배포
이러한 접근 방식은 기업의 규모, 프로젝트의 복잡성, 보안 요구사항 등에 따라 다양하게 조정됩니다. 대부분의 기업은 개발의 용이성과 프로덕션 환경의 안정성 사이의 균형을 맞추기 위해 노력하며, 자동화와 클라우드 서비스를 적극 활용하는 추세입니다.
'CS > Linux' 카테고리의 다른 글
24.9.5. 개발일지 // virtual box에 배포하기 , nat, bridge, ufw방화벽, nginx (0) | 2024.09.05 |
---|---|
[Linux] pw 없이 접속하기, ssh-keygen, 배포하기 (0) | 2024.09.05 |
[Linux] 배포관련 아키텍쳐 best practice? (0) | 2024.09.04 |
[Linux] 원격 db 연결안됨 해결 //리눅스 포트 방화벽설정방법 (0) | 2024.08.27 |
[Linux] 원격으로 mysql 설치하기 && 로컬에서 원격으로 연결하기 (0) | 2024.08.26 |