분류 전체보기 (35) 썸네일형 리스트형 [Jenkins] SonarQube 연동 불량 코드 자동 차단 시스템 Quality Gate 아무리 빠르고 완벽한 CI/CD 배포 파이프라인을 구축했다 한들, 개발자가 푸시한 코드 내부에 심각한 보안 취약점이나 NullPointerException을 유발할 버그가 숨어있다면 무슨 소용일까요? 버그가 듬뿍 담긴 코드를 운영 서버에 가장 빠르고 정확하게 꽂아 넣는 '자동화된 재앙 생성기'로 전락할 뿐입니다. 진정한 데브옵스(DevOps)는 단순히 배포만 해주는 것이 아니라, 품질 기준에 미달하는 쓰레기 코드(Bad Code)가 감지되면 그 즉시 파이프라인의 목을 비틀어 빌드를 강제 중단(Abort)시키는 무자비한 문지기 역할을 해야 합니다. 이번 포스트에서는 전 세계 정적 코드 분석 시장의 절대 강자인 SonarQube(소나큐브)를 젠킨스와 연동하여, 완벽한 'Quality Gate(품질 게이트)'.. [Jenkins] 병렬 빌드로 파이프라인 속도 혁신하기(Parallel Build) 파이프라인을 성공적으로 구축하고 자동화의 기쁨을 누리는 것도 잠시, 프로젝트의 덩치가 커지면서 빌드 시간이 점점 늘어나기 시작합니다. 프론트엔드 빌드 5분, 백엔드 스프링 빌드 5분, 유닛 테스트 5분, E2E 테스트 10분... 코드를 하나 푸시하고 나서 무려 25분을 기다려야 배포가 완료된다면 개발팀의 생산성은 바닥을 칠 것입니다. 이번 포스트에서는 "시간이 돈"인 현대 소프트웨어 개발 환경에서 가장 적은 노력으로 빌드 시간을 드라마틱하게 반토막 내버리는 '병렬(Parallel) 처리 기법'에 대하여 다뤄보겠습니다.1. 직렬 빌드의 치명적인 병목 현상기본적으로 젠킨스의 stages 블록 안에 적힌 stage들은 위에서 아래로 순차적(직렬)으로 실행됩니다. 앞의 작업이 끝나야만 뒤의 작업이 시작될 수 .. [Jenkins] 멀티브랜치 파이프라인 무한 증식 브랜치 자동화 우리는 지금까지 단일 파이프라인(Pipeline) Job을 생성하여 빌드하는 법을 배웠습니다. 하지만 현대 소프트웨어 개발은 GIT Flow나 Github Flow를 기반으로, 기능(Feature) 하나를 개발할 때마다 새로운 브랜치를 수십 개씩 파고(Branching) 합치는(Merge) 과정을 밥 먹듯이 반복합니다. 만약 새로운 브랜치가 생성될 때마다 젠킨스 관리자가 웹 UI에 접속해서 "새 잡(Job) 만들기 -> 복사하기 -> 브랜치명 수정" 노가다를 하고 있다면, 그것은 파이프라인이 아니라 수동 라인입니다. 이 포스트에서는 인프라 관리자의 잡(Job) 복제 스트레스를 0으로 만들어버리는 Multibranch Pipeline(다중 브랜치 파이프라인)의 엄청난 자동 발견(Auto Discovery).. [Jenkins] 젠킨스 워크스페이스 완벽 청소 가이드 (디스크풀 대응) 젠킨스를 도입하여 무중단 자동화 배포 파이프라인의 달콤함을 맛보고 있을 무렵, 보통 서비스 런칭 3개월에서 6개월 차 쯤에 모두가 똑같이 겪게 되는 거대한 재앙이 하나 찾아옵니다. 개발자가 코드를 푸시했는데 젠킨스가 아무런 응답을 하지 않고 뻗어버리는 현상입니다. 황급히 서버에 들어가 로그를 확인해 보면 어김없이 "No space left on device" (디스크 용량 100% 초과)라는 끔찍한 에러가 붉게 물들어 있습니다. 원인은 바로 젠킨스의 작업 공간인 Workspace(워크스페이스) 관리에 실패했기 때문입니다. 이 글에서는 인프라 관리자의 수명을 갉아먹는 이 고질적인 문제를 원천 봉쇄하고, Workspace Cleanup 플러그인을 활용하여 항상 쾌적하고 깔끔한 서버 환경을 유지하는 실무 최적.. [Spring Boot] application.yml 완벽 가이드 (+ Profile 환경 분리) 스프링 부트(Spring Boot)로 개발을 진행하다 보면 필연적으로 데이터베이스 접속 IP, 비밀번호, 외부 결제 API 연동 키(Key) 등 수많은 '설정(Configuration) 데이터'를 다루게 됩니다. 초보 개발자들은 흔히 자바(Java) 코드 안에 String dbUrl = "jdbc:mysql://localhost:3306..." 처럼 값을 하드코딩(Hard-coding)하는 실수를 저지릅니다. 이렇게 코드를 짜면, 내 노트북(로컬)에서는 잘 돌던 프로그램이, IP가 완전히 다른 실제 라이브 운영(Production) 서버에 배포되는 순간 데이터베이스를 찾지 못하고 펑 터져버립니다. 배포할 때마다 소스코드를 열어서 주석 처리하고 IP를 고쳐서 빌드하실 건가요? 이런 원시적인 작업을 우아하게.. [Jenkins] When 조건문으로 스테이지 완벽 제어하기 동적 파이프라인 구축 파이프라인 매개변수(Parameters)를 통해 외부에서 동적인 값을 주입받는 방법을 익혔다면, 이제 그 값에 따라 파이프라인의 물줄기를 요리조리 바꾸는 방법을 알아야 합니다. 만약 매개변수 설정만 해두고 if-else 문 같은 로직 분기를 태우지 않는다면 매개변수는 그저 화면에 찍히는 의미 없는 문자에 불과합니다.본 글에서는 Declarative Pipeline의 꽃이자, 하나의 파일로 수십 가지의 배포 시나리오를 감당하게 해주는 강력한 무기인 'when' 조건문의 완벽한 활용법과 다양한 실무 예제들을 다뤄보겠습니다. 이 글을 마스터하시면 더 이상 브랜치별로 수많은 잡(Job)을 복사/붙여넣기 하는 고통에서 영원히 해방될 수 있습니다.1. 왜 if-else 문을 쓰지 않고 when을 쓰는가?과거 Scr.. [Jenkins] Pipeline의 시작 Scripted vs Declarative 문법 완벽 가이드 과거의 젠킨스는 '마우스 클릭'으로 모든 것을 설정하는 Freestyle Project가 주류였습니다. 하지만 마이크로서비스 아키텍처(MSA)가 도입되고 배포 파이프라인이 수십 개의 스테이지로 복잡해지면서, 더 이상 GUI 화면만으로는 분기 처리나 예외 처리 같은 고도화된 로직을 감당할 수 없게 되었습니다. 그래서 등장한 것이 바로 '코드로 파이프라인을 작성(Pipeline as Code)'하는 방식입니다.본 가이드에서는 젠킨스 파이프라인 구축의 기초부터 실무 핵심 요소인 1) Scripted vs Declarative 문법 비교, 2) Jenkinsfile을 활용한 형상 관리(IaC), 3) Docker 기반 격리 에이전트(Agent) 설정, 4) 보안 자격 증명(Credentials)과 환경변수(En.. [Jenkins] Freestyle Project로 첫 자동화 빌드 만들기 초보자 완벽 가이드 젠킨스를 설치하고 Github Webhook 연동까지 마쳤다면, 드디어 젠킨스에게 "실제로 어떤 일을 해야 하는지" 작업 명세서를 쥐어줄 차례입니다. 젠킨스에서 작업을 정의하는 방식은 크게 'Freestyle Project(자유 스타일 프로젝트)'와 'Pipeline(파이프라인)' 두 가지로 나뉩니다. 코드로 모든 것을 제어하는 파이프라인이 최신 실무 표준이긴 하지만, 젠킨스의 동작 원리와 플러그인의 결합 방식을 시각적으로 이해하기 위해서는 가장 기본적이고 직관적인 Freestyle Project를 먼저 마스터하는 것이 필수적입니다. 이번 포스팅에서는 마우스 클릭 몇 번과 쉘 스크립트 작성만으로 완벽한 자동화 빌드를 구성하는 방법에 대해 다뤄보겠습니다.1. Freestyle Project란 무엇이며, 언.. [Spring Boot] Spring Initializr 실무 의존성 설계 가이드 집을 지을 때 가장 중요한 것은 화려한 인테리어가 아니라 탄탄한 설계도와 뼈대(Foundation)입니다. 스프링 부트(Spring Boot) 개발 역시 마찬가지입니다. 처음에 프로젝트 뼈대를 어떻게 잡고, 빌드 도구를 무엇으로 선택하며, 어떤 라이브러리(Dependencies)들을 담고 시작하느냐에 따라 1년 뒤 프로젝트의 유지보수 난이도가 천차만별로 갈라집니다. 다행히도 스프링 진영은 개발자들이 손쉽게 뼈대를 짤 수 있도록 Spring Initializr(start.spring.io)라는 강력한 웹 기반의 제너레이터를 제공합니다. 실무에서 100% 통용되는 프로젝트 구조 설계와 필수 의존성(Dependencies) 세팅 노하우에 대하여 다뤄보겠습니다.1. Project, Language, Boot V.. [Jenkins] Github Webhook과 Jenkins 연동 완전 자동화의 꽃 개발자가 로컬에서 기능 개발을 마치고 Github에 코드를 푸시(Push)했을 때, 사람이 젠킨스 웹 화면에 일일이 로그인해서 "Build Now(지금 빌드)" 버튼을 누른다면 그것은 진정한 의미의 자동화가 아닙니다. 반쪽짜리 CI(Continuous Integration)일 뿐이죠. 이번 Github Webhook과 Jenkins의 완벽 연동 메커니즘에 대하여 다뤄보겠습니다. 실무에서 가장 빈번하게 발생하는 방화벽 및 네트워크 트러블슈팅 사례까지 낱낱이 파헤쳐 드립니다.1. Webhook(웹훅)의 동작 원리 완벽 이해하기웹훅(Webhook)은 두 개의 시스템이 비동기적으로 실시간 통신을 하기 위해 고안된 아키텍처입니다. 기존의 폴링(Polling) 방식은 젠킨스가 1분마다 Github에 "혹시 새로운 .. ← 이전 1 2 3 4 다음 →