NAS Docker 다운으로 CI/CD 배포는 어렵지 않나요?


- NAS Docker 다운 환경 준비하기
- EC2 인스턴스 생성과 SSH 접속
- Docker 및 Jenkins 설치하기
- CI/CD 설정 및 Jenkins 연동하기
- GitLab과 Jenkins 연결 설정
- Webhook으로 자동 빌드 트리거 설정
- Docker로 백엔드(Spring Boot) 배포하기
- Dockerfile 작성 및 빌드 과정
- Spring Boot 애플리케이션 컨테이너 실행
- Docker로 프론트엔드(React) 배포하기
- React 애플리케이션 빌드 및 배포
- Nginx를 통한 정적 파일 제공
- CI/CD 배포 최적화를 위한 팁
- 문제 해결 방법
- 배포 후 점검 사항
- 함께보면 좋은글!
- 전기톱 체인 텐션 조절은 어렵지 않다
- 스마트전구 페어링 실패? 이럴 땐 어떻게 할까
- 시게이트 외장하드 인식 안됨? 쉽게 해결하는 법은?
- 프로젝터 화질 뿌옇게 바꾸는 청소법은?
- 홈카메라 노이즈 제거로 선명한 영상 만들기
NAS Docker 다운 환경 준비하기
컨테이너화된 애플리케이션을 위해 NAS에서 Docker 환경을 구축하는 것은 매우 중요한 과정입니다. 이 섹션에서는 AWS EC2 인스턴스 생성과 SSH 접속 및 Docker와 Jenkins 설치하기에 대해 자세히 설명하겠습니다.
EC2 인스턴스 생성과 SSH 접속
AWS에서 EC2 인스턴스를 생성하는 과정은 다음과 같이 진행됩니다.
- AWS 계정 생성: 아직 계정이 없다면 AWS에 가입합니다.
- EC2 인스턴스 생성: AWS 관리 콘솔에 로그인한 후, EC2 대시보드에서 인스턴스를 생성합니다. 인스턴스 유형과 AMI(운영 체제)를 선택해야 합니다.
- 보안 그룹 설정: HTTP(포트 80)와 HTTPS(포트 443)뿐만 아니라 Jenkins와 프론트엔드 개발에 필요한 포트도 열어야 합니다. 예를 들어, 8080번 포트는 프론트엔드를 위해 사용되며, 9090번 포트는 Jenkins의 포트로 설정합니다.
"충분한 보안을 고려하여 불필요한 포트는 열지 마세요."
- SSH 접속 설정: 인스턴스가 실행된 후, SSH 키를 통해 EC2 인스턴스에 접속합니다. Linux 기반 시스템에서는 아래와 같은 명령어를 사용합니다.
bash ssh -i "path_to_your_key.pem" ubuntu@your_ec2_public_ip
이후 방화벽 설정을 하여 필요한 포트를 허용해주어야 합니다. 예를 들어, 다음의 명령어를 사용하여 8080, 9090 등 필요한 포트를 열 수 있습니다:
sudo ufw allow 8080
sudo ufw allow 9090
Docker 및 Jenkins 설치하기
EC2 인스턴스에 Docker와 Jenkins를 설치하는 과정은 아래와 같습니다.
1. 시스템 업데이트
sudo apt update
2. Docker 설치
Docker를 설치하기 위해 많은 패키지가 필요합니다. 아래의 명령어로 설치할 수 있습니다.
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker 서비스를 시작하고, 부팅 시 자동 시작하도록 설정합니다.
sudo systemctl start docker
sudo systemctl enable docker
사용자를 Docker 그룹에 추가하기 위해 아래의 명령어를 입력합니다.
sudo usermod -aG docker ${USER}
이후 다시 로그인하여 Docker 버전이 제대로 설치되었는지 확인합니다.
docker --version
3. Jenkins 설치
Jenkins를 설치하기 위한 단계는 아래와 같습니다.
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update
sudo apt install jenkins
Jenkins 서비스를 시작하고, 자동 시작 설정을 합니다.
sudo systemctl start jenkins
sudo systemctl enable jenkins
초기 비밀번호는 다음 명령어로 확인할 수 있습니다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Docker와 Jenkins 설치 후, 웹 브라우저를 열고 http://your_ec2_ip:8080으로 접속하여 Jenkins 초기 설정을 진행합니다. 웹페이지에 나타나는 초기 비밀번호를 입력하고 필요한 플러그인들을 설치합니다.
이로써 NAS Docker 환경을 준비하는 기초 작업이 완료되었습니다. 이제 여러분은 CI/CD 환경을 구축할 수 있는 기초적인 인프라를 갖추게 되었습니다.
CI/CD 설정 및 Jenkins 연동하기
CI/CD(지속적 통합 및 지속적 배포)는 소프트웨어 개발의 핵심 부분으로, 자동화된 빌드와 배포를 통해 개발자들이 더욱 효율적으로 작업할 수 있게 도와줍니다. 특히, GitLab과 Jenkins를 사용하면 강력한 CI/CD 파이프라인을 구축할 수 있습니다. 이번 섹션에서는 GitLab과 Jenkins를 연결하고, Webhook을 사용하여 자동 빌드를 트리거하는 방법에 대해 알아보겠습니다.
GitLab과 Jenkins 연결 설정
GitLab과 Jenkins를 효과적으로 통합하기 위해서는 몇 가지 단계를 따라야 합니다. 먼저, GitLab에서 Access Token을 생성해야 하며, 이를 통해 Jenkins와의 인증을 진행할 수 있습니다.
- GitLab에서 Access Token 생성
- "GitLab 프로젝트에 접속해서 settings → Access Tokens에서 새로운 토큰을 생성합니다. 필수 권한으로는 API, read_api, read_repository를 선택합니다."
- Jenkins에 GitLab 연결
- Jenkins 관리 메뉴로 가서 System Configuration > GitLab 탭을 선택합니다.
- 아래와 같은 정보를 입력하여 GitLab을 설정합니다:
| 항목 | 내용 |
|---|---|
| Connection Name | 사용자 정의 이름 입력 |
| GitLab host URL | 깃랩 URL 입력 |
| Credentials | +Add 버튼 클릭 후 생성한 Access Token 추가 |
이후 GitLab에서 제공하는 webhook을 통해 Jenkins와의 실시간 연결을 설정할 수 있습니다.
Webhook으로 자동 빌드 트리거 설정
Webhook을 사용하면 GitLab의 특정 브랜치에서 변경 사항이 발생할 때마다 자동으로 Jenkins 빌드를 트리거할 수 있습니다.
- Jenkins에서 Webhook 설정
- Jenkins에서 새로운 아이템을 생성하고, 파이프라인을 선택합니다.
- Build Triggers 섹션에서 'Build when a change is pushed to GitLab' 옵션을 선택합니다.
- 고급 설정에서 secret token을 생성하고 저장합니다.
- GitLab에서 Webhook 추가
- GitLab 프로젝트 서비스 설정으로 가서 Webhook을 추가합니다.
- 다음과 같이 설정합니다:
| 항목 | 내용 |
|---|---|
| URL | [Jenkins URL]/project/[프로젝트 이름] (예: http://your_jenkins_ip:9090/project/your_project) |
| Secret Token | Jenkins에서 생성한 secret token |
| Trigger Events | "Push events" 체크 |
이제 GitLab에서 특정 브랜치에 푸시가 발생하면 Jenkins가 자동으로 해당 브랜치를 빌드하게 됩니다. 이 과정을 통해 CI/CD의 자동화가 가능해집니다.
이러한 설정을 통해 GitLab과 Jenkins의 연동은 완료되었습니다. 이제 자동화된 빌드와 배포를 통해 개발 효율성을 극대화할 수 있습니다. CI/CD 환경 구축은 개발자에게 필수적인 과정이며, 이를 통해 코드를 안정적으로 관리할 수 있습니다. 효율적인 CI/CD 파이프라인 구축으로 더 나은 개발 환경을 만들어보세요!
Docker로 백엔드(Spring Boot) 배포하기
Spring Boot 애플리케이션을 Docker를 통해 배포하는 과정은 인프라를 간소화하고 배포를 자동화하는 데 크게 기여합니다. 이번 섹션에서는 Dockerfile 작성 및 빌드 과정과 Spring Boot 애플리케이션 컨테이너 실행에 대해 자세히 알아보겠습니다.
Dockerfile 작성 및 빌드 과정
Dockerfile은 Docker 이미지를 빌드하는 데 필요한 모든 명령어를 정의하는 텍스트 파일입니다. 아래는 Spring Boot 애플리케이션을 위한 기본적인 Dockerfile 예제입니다.
# 사용할 이미지 지정 (OpenJDK 17)
FROM openjdk:17-jdk-slim
# JAR 파일 복사 및 이름 지정
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
# 애플리케이션 실행 명령어
ENTRYPOINT ["java", "-Dspark.profiles.active=prod,secret", "-jar", "app.jar"]
이 Dockerfile의 각 명령은 이미지 빌드 과정에 포함됩니다. 작성된 Dockerfile을 기반으로 Docker 이미지를 생성하는 명령어는 다음과 같습니다.
docker build -t spring-boot-app .
위 명령에서 -t 플래그는 태그를 지정하는 데 사용되며, .은 현재 디렉토리 내의 Dockerfile을 참조합니다. 생성된 이미지를 확인하려면 다음 명령어를 사용합니다.
docker images
Spring Boot 애플리케이션 컨테이너 실행
Docker 이미지를 빌드한 후, Spring Boot 애플리케이션을 실행하기 위해 다음과 같은 명령어를 사용합니다.
docker run -d --name spring-boot-app \
--network my-network \
-p 8080:8080 \
spring-boot-app
-d플래그는 백그라운드에서 실행됨을 의미하고,--name은 컨테이너의 이름을 설정합니다.--network는 구성한 Docker 네트워크와의 연결을 설정하며,-p는 호스트의 포트를 컨테이너의 포트에 매핑합니다.
이와 같은 방법으로 Spring Boot 애플리케이션을 Docker 컨테이너에서 성공적으로 실행할 수 있습니다. 이 과정은 CI/CD 파이프라인과 통합할 경우 더욱 자동화된 배포를 가능하게 합니다.
"Docker를 사용하면 애플리케이션을 어떤 환경에서도 동일하게 동작하게 만들 수 있습니다."
이러한 작업을 통해 애플리케이션의 일관성과 신뢰성을 유지할 수 있으며, 배포 과정에서 발생할 수 있는 오류를 최소화할 수 있습니다.

이처럼 Docker를 활용한 Spring Boot 애플리케이션의 배포 과정은 매우 간단하고 직관적입니다. 이를 통해 개발자와 운영팀 모두가 더 나은 환경에서 개발할 수 있도록 도와줍니다.
Docker로 프론트엔드(React) 배포하기
프론트엔드 애플리케이션을 Docker를 활용하여 쉽게 배포할 수 있습니다. 이 섹션에서는 React 애플리케이션 빌드 및 배포와 Nginx를 통한 정적 파일 제공 방법을 안내하겠습니다.
React 애플리케이션 빌드 및 배포
React 애플리케이션의 배포는 몇 가지 단계로 이루어집니다. 먼저, 로컬 환경에서 React 앱을 빌드해야 합니다. 다음은 이 과정의 주요 단계입니다:
- React 앱 빌드:
bash npm run build
이렇게 하면build라는 디렉토리에 최적화된 정적 파일이 생성됩니다. 이 파일을 Docker 컨테이너에 포함시키게 될 것입니다. - Dockerfile 생성:
Dockerfile을 생성하여 빌드한 React 파일을 Docker 이미지에 포함시킵니다. 아래는 기본적인 Dockerfile 예시입니다.
```dockerfile
FROM node:20 AS build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
FROM nginx:stable
COPY --from=build /app/build /usr/share/nginx/html
```
위 Dockerfile은 Node.js를 기반으로 React 애플리케이션을 빌드하고, Nginx를 사용해 정적 파일을 제공하도록 설정하였습니다.
- Docker 이미지 빌드:
Docker 이미지를 빌드하기 위해 다음과 같은 명령어를 사용합니다:bash docker build -t my-react-app .
이 명령어는 현재 디렉토리의 Dockerfile을 기준으로 이미지를 생성합니다. - Docker 컨테이너 실행:
이미지를 기반으로 컨테이너를 실행합니다:bash docker run -d -p 80:80 my-react-app
이 단계들을 통해 React 애플리케이션이 Docker 컨테이너 내에서 실행됩니다.
Nginx를 통한 정적 파일 제공
Nginx는 정적 파일을 제공하는 데 매우 효과적입니다. 이 섹션에서는 Nginx를 Docker로 설정하여 React 애플리케이션의 정적 파일을 제공하는 방법을 설명합니다.
- Nginx 설치:
bash sudo apt update sudo apt install nginx - Nginx 설정:
Nginx의 기본 설정 파일을 수정하여/usr/share/nginx/html로 React 앱의 파일을 제공하도록 설정합니다. 설정 예시는 다음과 같습니다:
```nginx
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
```
- Nginx 컨테이너 실행:
Docker를 사용하여 Nginx를 실행할 때, 앞서 생성한 파일들을 마운트하여 사용합니다. 아래 명령어를 사용하세요:
bash
docker run -d --name nginx \
-v /path/to/your/build:/usr/share/nginx/html \
-p 80:80 nginx
이처럼 Nginx를 통해 React 애플리케이션의 정적 파일을 쉽게 제공할 수 있습니다.
"Docker와 Nginx의 조합은 효율적이고 안정적인 배포 환경을 제공합니다."
아래는 React 애플리케이션 빌드 및 배포, Nginx 설정에 대한 요약 테이블입니다:
| 단계 | 설명 |
|---|---|
| React 앱 빌드 | npm run build 실행 |
| Dockerfile 생성 | Dockerfile 작성 |
| Docker 이미지 빌드 | docker build -t my-react-app . 실행 |
| Docker 컨테이너 실행 | docker run -d -p 80:80 my-react-app 실행 |
| Nginx 설치 및 설정 | Nginx 설치 및 설정 파일 수정 |
| Nginx 컨테이너 실행 | docker run -d --name nginx ... |
이 과정을 통해 효율적으로 React 애플리케이션을 Docker와 Nginx 환경에서 배포할 수 있습니다.
CI/CD 배포 최적화를 위한 팁
CI/CD(지속적 통합 및 지속적 배포)는 소프트웨어 개발 프로세스를 자동화하고 효율성을 높이는 데 큰 도움을 줍니다. 본 섹션에서는 CI/CD 배포 최적화를 위한 문제 해결 방법과 배포 후 점검 사항을 살펴보겠습니다.
문제 해결 방법
CI/CD 파이프라인에서 흔히 발생하는 문제는 설정 오류입니다. 설정을 점검하고 수정하는 방법에서 몇 가지 효과적인 팁을 제시하겠습니다.
- 환경 변수 확인: CI/CD 도구에서 사용하는 환경 변수가 올바르게 설정되어 있는지 확인하는 것이 중요합니다. 환경 파일을 업로드할 때 권한 문제를 피하기 위해
chmod명령어를 활용하세요. 예를 들어,.env파일을 정확하게 복사하거나 적용해야 합니다. - 파일 경로 문제: Linux에서 파일 경로는 대소문자를 구분합니다.
src/app.jsx와 같은 파일 경로에서 대소문자 오류를 주의해야 합니다. 이는 종종 Jenkins에서 발생할 수 있는 오류의 원인이 됩니다. - 로그 확인: 배포 과정에서 발생하는 오류는 로그를 통해 추적 가능합니다. 도구 별 로그를 확인하면 문제가 발생한 시점과 원인을 쉽게 파악할 수 있습니다.
"문제를 발견했을 때는 조치를 취하는 것이 아니라 문제 해결 방법을 모색해야 한다." - 익명
배포 후 점검 사항
배포 성공 후에도 점검해야 할 사항들이 있습니다. 이를 통해 시스템의 정상 작동을 보장하고, 잠재적인 문제를 사전에 예방할 수 있습니다.
- 서버 상태 확인: 배포가 끝난 후, 서버가 정상적으로 작동하는지 확인합니다. 특히, EC2 인스턴스와 같이 클라우드 환경에서는 각 서비스의 상태를 점검해야 합니다.
- API 응답 테스트: 백엔드와 프론트엔드 간의 연결이 잘 이루어지고 있는지 API 테스트를 실시합니다. Postman이나 Swagger와 같은 도구를 이용하여 요청을 보내 보고 정상 응답이 오는지 확인합니다.
- 로그 모니터링: 배포 후의 로그를 지속적으로 모니터링하여 예기치 않은 오류나 경고 메시지가 발생하는지를 확인합니다. 이는 나중에 문제를 예방하는 데 유용합니다.
- 사용자 피드백 수집: 배포 후에는 최종 사용자로부터 피드백을 받아 개선점을 파악하는 것도 중요합니다. 고객의 의견은 시스템을 향상시키는 데 많은 도움이 됩니다.
- 테스트 자동화 구축: 마지막으로, CI/CD 파이프라인 내에 테스트 자동화 과정을 추가하여, 배포 후 문제를 최소화하는 방법도 고려해야 합니다.
이러한 점검 사항들을 통해 CI/CD 배포의 신뢰성을 높일 수 있습니다. 세심한 점검과 점검 후 내실 있는 개선은 최적화된 CI/CD 파이프라인의 필수 요소입니다.

함께보면 좋은글!
'스마트폰' 카테고리의 다른 글
| 스마트미러 잔상 예방과 제거 방법은? (4) | 2025.08.09 |
|---|---|
| 스마트미러 얼굴 인식으로 쉽고 빠른 체크인 경험을? (2) | 2025.08.09 |
| NAS 하드 과열 문제 해결 방법은 (2) | 2025.08.08 |
| NAS 권한 오류, 해결법을 아시나요 (3) | 2025.08.08 |
| NAS 클라우드 싱크 데이터 복구 방법은? (2) | 2025.08.08 |
댓글