자 이번에 알아가게 될 건 자동화 도구다.
Build
다들 프로젝트 경험이 있고, JAVA 혹은 Spring을 써봤다면 Maven, Gradle을 본 적이 있을 것이다. 이는 모두 build 자동화 도구로 각각 설명하겠다.
Maven 이란?
Maven은 Java 기반의 프로젝트 관리 도구이자 빌드 도구이다. Maven은 프로젝트의 빌드, 의존성 관리, 배포, 문서화 등을 자동화하는 데 사용된다. Apache Software Foundation이 개발하였으며, Gradle이 등장하기 전에 가장 널리 사용된 빌드 도구였다.
주요한 기능은 Maven은 프로젝트에서 사용할 모든 설정을 pom.xml 파일에 정의한다. 이 파일에는 프로젝트의 의존성, 빌드 설정, 플러그인, 리포지토리 정보 등이 포함되어 프로젝트 설정과 빌드를 쉽게 할 수 있도록 한다.
Maven의 가장 큰 장점 중 하나는 자동 의존성 관리이다. 프로젝트에서 사용하는 라이브러리나 외부 모듈의 버전과 위치를 pom.xml 파일에 정의하면, Maven이 이를 다운로드하고 관리한다.
이외에도 다향한 플러그인 지원과 라이프사이클로 관리한다는 점이 있지만 현재는 대부분 Gradle을 사용하고 있다.
Gradle 이란?
2012년에 출시된 Groovy를 기반으로 한 오픈소스 빌드 도구로 거의 모든 타입의 소프트웨어를 빌드할 수 잇는 빌드 자동화 시스템이다. 우선 Build부터 짚고 넘어가겠다.
Build는 소스 코드를 컴파일, 테스트, 정적분석 등을 실행하여 실행 가능한 파일 형태로 만들어주는 과정이며 이전에는 라이브러리 추가 변경 시 빈번한 다운로드 작업 필요하거나, 기존 라이브러리 제거 등의 번거로움등이 있었다.
그렇기에 개발자들 간의 버전관리의 어려움과 다운로드 받은 jar 파일 보안 위험 등의 문제점을 해결할 수 있는 도구는 뭐가 있을까 하고 나온게 Gradle이다.
빌드 도구는 기능 추가에 따라 늘어나는 라이브러리를 자동 추가 및 관리를 해주며, 프로젝트 별 라이브러리의 버전을 쉽게 동기화 할 수 있어서 개발에 집중할 수 있게 도와주는 소중한 존재이다.
Gradle 의 장점으론 프로젝트를 설정 주입 (Configuration Injection) 방식으로 정의하기 때문에 Maven 의 상속 구조대비 재사용에 용이하고 프로젝트의 조건 체크가 가능해서 프로젝트 별 주입되는 설정을 다르게 처리 가능하다!
CI/CD
2편에서 DevOps의 필요성으로 언급한 CI/CD는 지속적 통합 (Continuous Integration) 및 지속적 제공/배포 (Continuous Delivery/Deployment) 를 의미한다. 이는 결론적으로 소프트웨어 개발 라이프사이클을 간소화하고 가속화 하는 것을 목표로 한다.
CI/CD 가 중요한 이유는 조직이 버그 및 코드 오류를 예방하는 동시에 지속적인 소프트웨어 개발 및 업데이트 주기를 유지하는 데 도움이 되기 때문이며, 애플리케이션이 커짐에 따라 CI/CD의 기능을 활용하면 복잡성을 줄이고 효율성을 높이며 워크플로우를 간소화할 수 있다.
Jenkins, Spinnaker, GoCD 등 한번쯤은 봤을법한 이름들이 CI/CD의 대표적인 도구들이다.
https://www.jenkins.io/download/
Download and deploy
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software
www.jenkins.io
추후 jenkins 사용법도 다뤄보겠다.
TEST
이는 테스트 하기 위한 도구로 유명한 단위 테스트 툴인 Junit과 Jest가 있다.
JUnit은 Java 언어용 단위 테스트 프레임워크로 Java 진영에서 가장 많이 쓰이고 있는 테스트 프레임워크이며,
Jest는 Test Runner, Test Matcher, Test Mock까지 제공해 주는 All in one 테스팅 프레임워크 이다.
이러한 테스팅 도구를 사용하게 되면 작성된 코드가 제대로 동작되는지를 확인할 수 있다.
다음은 API 테스트 툴인 Postman 이다.
https://www.postman.com/downloads/
Download Postman | Get Started for Free
Try Postman for free! Join 35 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.
www.postman.com
Collection 별로 관리할 수 있고, 환경변수 저장해서 효율적으로 API 테스트를 할 수 있다.
이런 식으로 Api에 `GET`, `POST`, `PUT`, `DELETE` 등을 요청할 수 있고, `Key` 와 `Value` 값을 같이 보내 리턴값을 테스트 할 수 있다.
Deploy
deploy 에서 가장 유명한 건 Docker이다.
Docker
도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. Docker hub를 통해 공유 및 배포할 수 있다.
위와 같이 가상머신에 대비 오버헤드를 줄일 수 있고 새로운 컨터이너를 만드는데 걸리는 시간은 겨우 1~2초 정도로 VM과 비교도 할 수 없을만큼 빠르다.
Kubernates
쿠버네티스는 컨테이너화된 애플리케이션의 자동 디플로이, 스케일링 등을 제공하는 관리시스템으로, 오픈 소스 기반이다. 컨테이너화된 애플리케이션의 자동 디플로이, 스케일링 등을 제공하는 관리시스템으로, 오픈 소스 기반이다.
도커(Docker): 애플리케이션과 그에 필요한 환경을 컨테이너라는 단위로 패키징하고 실행한다.
→ 개발자가 로컬 환경에서 쉽게 애플리케이션을 실행하고 테스트할 수 있음.
쿠버네티스(Kubernetes): 여러 대의 서버(노드)에서 다수의 도커 컨테이너를 효율적으로 배포하고, 운영하며, 확장할 수 있도록 도와주는 오케스트레이션 도구이다.
→ 실제 서비스 환경에서는 컨테이너 수가 많아지기 때문에 이를 자동으로 관리하는 시스템이 필요함.
즉 도커로 만든 컨테이너를 쿠버네티스로 자동 관리하면 대규모 서비스도 안정적으로 운영할 수 있다.
'SK 루키즈 > Cloud' 카테고리의 다른 글
[Rookies 개발 2기] 스프링부트 + GitAction + CI/CD (1) (3) | 2025.01.16 |
---|---|
[Rookies 개발 2기] AWS에 Java Spring 프로젝트를 올려보자 (2) (0) | 2025.01.16 |
[Rookies 개발 2기] AWS에 Java Spring 프로젝트를 올려보자 (1) (3) | 2025.01.16 |
[Rookies 개발 2기] DevOps 개념과 도구 (2) (1) | 2025.01.16 |
[Rookies 개발 2기] DevOps 개념과 클라우드 서비스 (1) (1) | 2025.01.15 |