의문점 공부하기/🧾공부하며

🧾프로젝트할때 고려할거

아리빠 2023. 10. 4. 20:46

젠킨스 자동배포/수동배포



- Jenkins란 지속적 통합 및 지속적 배포(CI/CD)를 지원하는 도구, 소프트웨어 개발 및 배포 프로세스를 자동화하고 최적화하는 데 사용된다.


자동 배포 (Automated Deployment):
자동 배포는 CI/CD 파이프라인의 일부로 작동하며, 코드 변경 사항을 자동으로 테스트하고 배포
소스 코드 변경이 주기적,트리거에 따라 자동으로 배포
배포 프로세스는 사람의 개입 없이 자동화되며, 대개 스크립트 또는 도구를 사용하여 정의된다



장점:

속도와 일관성- 빠르고 일관된 배포 프로세스를 통해 소프트웨어 업데이트가 신속하게 이루어지고, 사람의 개입을 줄여 오류 감소
지속적인 배포 가능- 새로운 변경 사항이 항상 배포 가능한 상태로 유지
단점:

복잡성: 자동 배포 파이프라인을 설정하고 유지하는 데 시간과 노력이 필요




수동 배포 (Manual Deployment):
수동 배포는 사람의 개입이 필요한 프로세스

배포를 시작하려면 개발자나 운영자가 명령을 내리거나 작업을 직접 수행해야 한다
보통 중요한 업데이트나 복잡한 배포 작업에 사용



장점:
통제: 배포 과정을 개발자나 운영자가 직접 통제할 수 있다.
유연성: 특수한 상황에 대응하기 위해 수동으로 조치를 취할 수 있다.
단점:
속도와 일관성: 수동 배포는 느리고 일관성이 부족할 수 있으며, 오류 가능성이 높아질 수 있다.
인간 오류: 사람의 개입으로 인한 실수가 발생할 수 있다.
작업 복잡성: 복잡한 배포 작업은 수동으로 실행하기 어려울 수 있다.

스프링부트 애플리케이션을 도커로 띄울 지 .jar  app 실행할지



.jar 파일 직접 실행:

특징:
스프링 부트 애플리케이션을 .jar 파일로 패키징하여 실행한다
로컬 머신 또는 서버에서 Java 실행 환경만 필요하며, 별도의 컨테이너 관리 도구나 Docker가 필요하지 않다.
개발 및 디버깅 시 편리하며, 빠른 시작과 실행이 가능
장점:
단순성: Docker 컨테이너 설정과 관리에 대한 추가 작업이 필요하지 않다.
로컬 개발 환경에서 스프링 부트 애플리케이션을 쉽게 실행할 수 있다.
단점:
확장성 및 관리: 애플리케이션을 확장하거나 여러 서버에서 실행하려면 별도의 관리 및 배포 프로세스가 필요
환경 일관성: 개발 환경과 운영 환경 간의 일관성을 유지하기 어려울 수 있다.



도커 컨테이너 내에서 실행:

특징:
스프링 부트 애플리케이션을 Docker 컨테이너로 패키징하고 실행
환경과 애플리케이션을 컨테이너 이미지로 캡슐화하므로 환경 일관성과 배포 관리가 용이합니다.
컨테이너 오케스트레이션 플랫폼인 Kubernetes 등과 통합하기 쉽다.

컨테이너 이미지: 컨테이너화된 응용 프로그램을 실행하는 데 필요한 모든 소프트웨어와 설정을 포함하는 패키지

 이미지는 컨테이너 기술을 사용하여 응용 프로그램을 쉽게 배포, 실행 및 관리할 수 있도록 돕는다 


독립성: 컨테이너 이미지에는 응용 프로그램과 의존성, 설정 등이 포함되어 있어서 해당 이미지를 실행하는 호스트 시스템에 관계 없이 일관된 환경에서 작동
이식성: 컨테이너 이미지는 컨테이너화된 응용 프로그램을 어디서나 실행할 수 있도록 해줌,로컬 머신, 개발 서버, 클라우드 환경 등 다양한 환경에서 실행 가능
레플리카 및 스케일링: 컨테이너 이미지를 사용하면 필요한 만큼 응용 프로그램 인스턴스를 생성하고 스케일링할 수 있다. 
손쉬운 관리: 컨테이너 이미지는 버전 관리가 용이하며, 변경 사항을 이미지로 쉽게 반영할 수 있다. 이를 통해 애플리케이션 업데이트 및 롤백이 용이
보안: 컨테이너 이미지는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하므로 애플리케이션과 관련된 모든 구성 요소를 통제하고 보안을 강화하는 데 도움이 됨

컨테이너 이미지는 보통 Docker와 같은 컨테이너 관리 플랫폼에서 생성되고 사용.

장점:
환경 일관성: 개발 환경과 운영 환경을 동일하게 유지하기 쉽다.
스케일링 및 관리: 컨테이너 오케스트레이션 플랫폼을 사용하여 쉽게 스케일링하고 관리할 수 있다.
단점:
로컬 개발 환경에서는 컨테이너 실행에 추가 설정이 필요할 수 있다.

(public) IP 주소만 있는 경우 / (private) VPC (Virtual Private Cloud) IP 주소만 있는 경우

Public IP만 있는 서버:

웹 서버: 웹 애플리케이션을 호스팅하는 서버는 공개 IP 주소를 가지고 있어야 함. 사용자는 브라우저를 통해 공개 IP 주소로 액세스 가능
외부 API 서버: 외부 서비스 또는 클라이언트와 통신하기 위해 공개 IP 주소를 가진 서버가 필요한 경우가 있다.
FTP 서버: 파일 전송 프로토콜 (FTP)을 사용하여 파일을 다운로드하거나 업로드하는 서버는 공개 IP 주소를 사용자에게 제공
DNS 서버: DNS 서버는 공개 IP 주소를 가지고 있어야 다른 DNS 서버에서 도메인 이름을 검색할 수 있다.
게임 서버: 온라인 게임 서버는 공개 IP 주소를 사용하여 플레이어가 게임에 접속할 수 있도록 함

Private VPC IP만 있는 서버:
내부 서버: 회사 또는 조직의 내부 네트워크에서 사용되는 서버는 주로 내부 가상 사설 IP 주소를 가지고 있다. 이러한 서버는 외부에서 직접 접근할 수 없으며 내부 시스템 간 통신을 지원
데이터베이스 서버: 데이터베이스 서버는 주로 내부 네트워크에서 실행되며, 애플리케이션 서버와의 안전한 통신을 위해 내부 IP 주소를 사용
애플리케이션 서버: 내부 서비스 또는 애플리케이션을 제공하는 서버는 내부 IP 주소를 사용하여 다른 서버와 통신하거나 내부 서비스에 액세스
보안 강화: 공개 IP 주소를 가지지 않는 서버는 외부에서의 공격을 줄일 수 있으며, 보안을 강화하기 위해 사용

허브의 사용 이유와 도커허브 단점



이미지 호스팅 및 배포:
컨테이너 이미지를 저장하고 배포하는 데 허브를 사용할 수 있다

이미지를 허브에 업로드하면 여러 환경 및 서버에서 쉽게 공유하고 배포할 수 있다.
이미지 관리와 공유가 용이하며, 여러 환경에서의 일관성을 유지하기 쉽다.



오픈 소스 및 공개 프로젝트:
오픈 소스 컨테이너 프로젝트의 경우, 컨테이너 이미지를 허브에 공개적으로 호스팅하여 개발자 및 사용자들이 쉽게 액세스하고 사용할 수 있다.
커뮤니티와 협력을 촉진하며, 프로젝트의 가시성을 높임



CI/CD 및 자동화:
CI/CD 파이프라인에서 컨테이너 이미지를 빌드하고 배포하기 위해 허브를 사용할 수 있다.

CI/CD 도구는 허브에서 이미지를 가져와 테스트 및 배포에 활용할 수 있음
자동화된 배포 및 업데이트 프로세스를 구성하고 빠른 소프트웨어 전달을 지원



보안 및 제어:
이미지를 허브에 업로드하고 액세스를 제어하여 보안을 강화

허브에서 이미지를 비공개로 설정하고 접근 권한을 제한할 수 있다.
중요한 데이터와 이미지를 안전하게 관리하고 액세스 제어를 유지할 수 있다.



버전 관리 및 롤백:
허브는 이미지의 버전 관리를 지원하므로, 변경 사항을 추적하고 필요한 경우 롤백할 수 있다

도커 허브의 단점:

보안과 프라이버시 문제: 

도커 허브는 공개 이미지 저장소이므로, 개발자가 올린 이미지는 누구나 볼 수 있다.

프라이버시에 민감한 이미지나 데이터를 저장해야 할 경우, 문제될 수 있음

데이터 이전과 무결성: 도커 허브에서 이미지를 호스팅하는 경우, 허브가 언제든지 해당 이미지를 변경하거나 삭제할 수 있다. 이로 인해 이미지의 무결성과 안정성을 보장하기 어려울 수 있음

Public 은 설정은 똑같이 가져가는 것인데, 외부 보안을 어떻게 신경 쓸 것인가?



방화벽 설정:
서버에 대한 외부 접근을 제한하기 위해 방화벽을 구성

필요한 포트만 열어서 외부에서 접근 가능한 서비스를 제한

ex)웹 서버에는 80번 포트(HTTP)와 443번 포트(HTTPS)만 연다



보안 그룹 또는 네트워크 정책 설정:
클라우드 서비스나 가상 머신 환경에서는 보안 그룹 또는 네트워크 정책을 사용하여 서버에 대한 외부 액세스를 제어할 수 있다. 특정 IP 주소 또는 범위에서만 서버에 접근을 허용할 수 있다.



SSH 또는 리모트 액세스 보안 강화:
SSH 또는 리모트 액세스를 사용하는 경우, 강력한 암호와 퍼블릭/프라이빗 키를 사용하여 액세스를 제한하고 보안을 강화,SSH 포트 번호를 변경하거나 다중 인증 요소(MFA)를 사용할 수 있다.



정기적인 시스템 업데이트:
서버 운영체제 및 소프트웨어 패키지를 정기적으로 업데이트하여 보안 취약점을 최소화



로그 및 감사 추적:
로그를 수집하고 감사 추적을 설정하여 서버에서 발생하는 활동을 모니터링하고, 이상 징후나 보안 위협을 탐지

'의문점 공부하기 > 🧾공부하며' 카테고리의 다른 글

🧾교착상태(DeadLock)란?  (0) 2023.10.31
🧾로그인에 대해 ++  (0) 2023.10.09
🧾 채팅 (Emotion Connector)  (0) 2023.09.26
🧾얼굴인식 (Emotion Connector)  (0) 2023.09.15
🧾로그인(Emotion Connector)  (1) 2023.09.13