2.1.7 빌드 자동화 툴 : Gradle과 라이브러리
Gradle은 빌드 자동화 툴이다. 빌드 자동화 툴을 이용하면 컴파일, 라이브러리 다운로드, 패키징, 테스팅 등을 자동화 할 수 있다. 빌드 자동화 툴이 없으면 라이브러리 사용을 위해 라이브러리 사이트에서 jar 파일을 다운로드 받아야한다.
1. plugins
gradle 공식 웹사이트에 따르면 gradle 자체는 많은 기능을 제공하지 않는다. 대신 플러그인을 통해 gradle을 확장해서 사용할 수 있다. 대표적인 예가 java이다. 자바를 컴파일 하려면 gardle java 플러그인이 필요하다. 이때, id 'java'는 자바이고 이는 빌드를 위해 자바 플러그인을 사용하는 것을 명시한다. org.springframework.boot나 io.spring.dependency-management도 마찬가지이고 플러그인의 버전 정보를 넘겨줘야한다.
2. group, version, sourceCompatibility
위 3개는 프로젝트의 메타데이터이다. group은 보통 artifact(애플리케이션)를 배포하는 데 사용된다. Spring Initializr의 Project Metadata에서 정의한 바로 그 Group과 동일하다. version은 이 프로젝트의 버전이다.
위에 sourceCompatibility가 없는데 java의 languageVersion으로 명시되어있다.
3. Lombok
개발 시간을 단축하기 위해 롬복 라이브러리를 사용한다. 롬복 코드를 작성하려면 annotation processor라는 것이 필요하다. 따라서 configurations에 annotatioProcessor를 컴파일 당시 사용하라고 gradle에게 알려준다. 또 이 'annotation processor'로 org.project.lombok:lombok을 사용하도록 디 펜던시에 명시한다.
4. Repository
repositories는 라이브러리를 다운로드 하는 리포지토리이다. 여기에서는 그 중에 mavenCentral(https://mvnrepository.com/repos/central)을 주로 사용한다.
5. Dependency
dependency는 섹션에서 이 프로젝트에 사용할 라이브러리를 명시하면 gradle이 repository에서 라이브러리를 다운 및 설치한다.
6. Test
gradle을 사용하면 빌드뿐만 아니라 Unit 테스트도 실행할 수 있다. 우리가 사용하는 테스트 도구는 JunitPlatform을 사용해 유닛 테스트를 한다.
? 빌드를 나눠 작업하고 디펜던시와 순서를 고려한다는 의미
빌드를 나눠 작업한다는 것은 프로젝트의 전체적인 빌드 과정을 하나로 처리하지 않고, 여러 개의 독립적인 단계 또는 모듈로 나누어 진행한다는 의미다. 이는 큰 프로젝트에서 효율성과 유지보수성을 높이기 위해 자주 사용하는 전략이다.
1. 빌드를 나누는 이유
프로젝트 규모가 크다: 한 번에 전체를 빌드하면 시간이 오래 걸리고, 디버깅도 어렵다.모듈화된 구조: 각 모듈(또는 서브 프로젝트)이 독립적으로 빌드될 수 있다.병렬 처리 가능: 서로 의존성이 없는 모듈들은 동시에 빌드할 수 있어 시간을 단축한다.
2. 디펜던시와 순서 고려
"디펜던시"란 특정 모듈이 다른 모듈에 의존하는 관계를 의미한다. 예를 들어, A 모듈이 B 모듈에서 제공하는 기능을 필요로 한다면, A는 B에 의존한다.빌드 순서를 고려해야 하는 이유는, 의존 관계가 있는 경우, 의존된 모듈(B)을 먼저 빌드해야 이후 모듈(A)이 정상적으로 작동할 수 있기 때문이다.
예시
유닛 테스트 실행 후 프로덕션 빌드: 테스트가 먼저 성공해야 프로덕션용 빌드를 진행할 수 있다.프런트엔드와 백엔드 프로젝트: 백엔드 API가 프런트엔드가 사용할 데이터를 제공하므로, 백엔드 서버를 먼저 빌드하고 실행해야 프런트엔드 개발이나 테스트가 가능하다.
3. 디펜던시와 순서 고려 과정
디펜던시 파악: 모듈 간에 어떤 의존성이 있는지 명확히 정의한다.빌드 스크립트 작성: Gradle, Maven, Webpack과 같은 빌드 도구에서 빌드 순서를 지정한다.병렬 빌드 가능 여부 확인: 독립적인 모듈들을 병렬로 빌드하여 효율을 높인다.
구체적인 예제
프로젝트 구성Module A: 공통 라이브러리를 제공Module B: Module A를 사용하여 비즈니스 로직 처리Module C: Module B를 통해 최종 애플리케이션 구성
이 경우:
Module A → Module B → Module C 순으로 빌드해야 한다.순서를 무시하면 Module C에서 Module B의 결과를 사용할 수 없고, Module B는 Module A의 기능을 사용할 수 없기 때문에 빌드 실패가 발생한다.
결론
빌드를 나눠 작업한다는 것은 모듈을 독립적으로 빌드 가능한 구조로 분리하는 것을 뜻하며, "디펜던시"와 "순서"는 의존 관계에 따라 빌드의 진행 흐름을 정해야 함을 의미한다. 이를 통해 큰 프로젝트도 효율적이고 체계적으로 관리할 수 있다.
어노테이션 프로세싱 설정
gradle dependencies에 annotation processor 라이브러리를 추가했지만 이 라이브러리는 gradle이 인식하는 라이브러리로 eclipse가 인식하는 라이브러리가 아니다. 이클립스는 lombok으로 대체한 메서드들의 존재를 모른다. 따라서
Demo(마우스 오른쪽 클릭)
-> Properties창
-> Java Compiler
-> Annotation Processing울 선택한 후
-> Annotation Processing 관련 체크박스를 체크
위 순서로 롬복을 동작하게 만든다.
롬복에서 제공하는 annotation이 잘 동작한다.
2.1.10 포스트맨 API 테스트
REST API는 크게 URI, HTTP 메서드, 요청 매개변수 또는 요청 바디로 구분되는데 이를 브라우저에서 테스팅 하는 데는 한계가 있다. 브라우저 말고 cURL이라고 커맨드라인 툴을 이용할 수 있는데 초보자가 사용하기 쉽지 않다. 따라서 GUI를 제공하는 Postman 프로그램을 사용한다.
'React.js, 스프링 부트, AWS로 배우는 웹 개발 101' 카테고리의 다른 글
[TIL] 25/01/28, Service Layer : Business Logic (0) | 2025.01.29 |
---|---|
[TIL] 25/01/27, REST API (0) | 2025.01.28 |
[TIL] 25/01/26, 백엔드 서비스 아키텍처 (0) | 2025.01.26 |
[TIL] 25/01/21, 웹 서버 기술 (0) | 2025.01.21 |
[TIL] 25/01/20, Todo 웹 애플리케이션 기능 (0) | 2025.01.20 |