
시험 하나 남았는데 회로 공부하다가 잠깐 쉬어가는 겸 블로그 글 업로드 시작!
앞으로 "CI/CD의 구조"라는 주제로 적을 내용은 서버 이전 프로젝트를 진행하기전에, 강의 형식으로 CI/CD의 과정이 어떻게 되는지 현업자 대! 준수님이 설명해준 내용을 내 맘대로 정리한 내용이다. 이전에는 기본적인 형태만 잡고 있었다면, 각 과정을 순차적으로 잘 설명해줘서, 해당 내용과 추가적인 공부 + 알고 있던 지식을 함께 정리해 보려한다.
일단 설명하기 전에, 준수님은 뭐든지 주체와 도구의 구분이 중요하다고 했기 때문에 이 부분을 중점으로 다뤄보겠다!
Build (도구 : gradle)
소프트웨어 빌드(software build)의 정의는 소스 코드 파일을 실행할 수 있는 독립(standalone) 소프트웨어 가공물로 변환하는 과정이다.
빌드는 코드를 ,패키징 해서, 어떠한 배포가능한 형태로 만드는 과정
자바 환경에서 설명해보면
여러 클래스의 상호작용을 위해 "java -cp"와 같은 명령어로 class-path를 지정해주어야 하고, 파일이 하나라도 없으면 실행 자체가 안되는 문제가 발생!
이 과정을 진행해 주는 것이 바로 Gradle
plugins {
id 'java'
}
group = 'com.example'
version = '1.0.0'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'
}
test {
useJUnitPlatform()
}
build.gradle
├── plugins: "나는 Java 프로젝트야!"
├── group / version: 프로젝트 식별자 설정
├── repositories: "라이브러리 어디서 받을까?"
├── dependencies: "어떤 라이브러리 쓸까?"
└── test: "JUnit5 기준으로 테스트할게!"
기본적으로 gradle은 plugin과 dependecy 그리고, dependency를 어디서 가져올지를 결정하는 repository로 결정된다. (mavenCentral은 세계 최대 오픈 소스 저장소!)
Plugin은 gradle에게 이 프로젝트에 대해서 설명하고, 해야할 작업을 알려주는 것!
Dependecy는 내 소스 코드를 실행할 때 필요한 라이브러리
Plugin : "빌드 툴을 업그레이드" (Gradle 자체 upgrade)
Dependency : "내 소스 코드를 업그레이드" (코드 자체에 기능 추가)
🔨 플러그인은 빌드 공장에서 일하는 로봇을 추가하는 거고,
📦 의존성은 내 제품(앱) 안에 들어가는 부품을 추가하는 것!
- 1+2 : gradle classes
- 1+2+3 : gradle assemble
- 1+2+3+4 : gradle build (assemble + test)
결과 : .class 파일을 적당히 묶고 리소스 같은 것들도 추가해서 .jar파일로 만들어냄!
결국 jar 파일을 서버 컴퓨터로 옮겨서 jvm으로 실행하는게 최종 목적인데, 이걸 내가
CI/CD의 의미가 없다!
보통은 github repository에 특정 조건(브랜치나, 태그) 등을 활용해서 push 했을 때, 원하는 주소로 webhook을 보내 변경사항을 감지한다!
이후에는 변경된 코드를 자동으로 build하고, 2번 과정인 도커 이미지로 만드는 과정까지 진행
=> 이전 프로젝트에서는 이 과정을 jenkins라는 툴의 pipeline을 이용!!!