프로젝트를 하면서 밥먹듯이 하는게 컴파일 빌드 실행 과정인데 부끄럽게도 빌드가 정확히 무슨 역할인지는 잘 모르고 있었던 것 같다.
GitHub Actions로 CI코드를 작성하면서 build를 하는 코드 부분에 gradle build와 gradlew build의 차이점을 찾아보다가
빌드부터 제대로 공부하기로 하였다.
개발자가 코드를 작성하여 서버에 작성하는 것 - "배포"
배포(Deploy)를 하기 위한 과정 - "빌드"
빌드란 ?
컴파일된 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 과정.
ex) Java 프로젝트를 진행한다면 개발자가 작성한 A.jaca와 열어가지 정적 파일에 해당하는 resource가 존재.
- 빌드 : 소스코드(.java)를 컴파일해 바이트코드(.class)로 변환하고 resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF들을 하나로 압축하는 과정을 의미.
* 컴파일 : java는 컴파일의 결과로 JVM에서 실행가능한 .class 파일이 생김.
컴파일 != 빌드. 컴파일은 빌드를 진행하는 과정 중의 하나.
=> 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업.
- 빌드과정 : 컴파일, 테스트, 정적분석, 배포 등의 과정이 포함.
- 빌드 툴 : 수많은 라이브러리들을 자동 추가 및 관리하여 프로젝트 진행을 도와주고 라이브러리 버전을 쉽게 동기화 해줌.
(빌드를 직접 해주면 개발자들간 버전관리도 어렵고 다운받은 jar 파일의 보안 위험도 존재.)
빌드 툴의 종류 : Ant, Maven, Gradle
* Build = Complie + etc
* Run = Build + 실행
(Compile + etc) + 실행
빌드도구 Gradle
GitHub Actions에서 workflow 템플릿에서 빌드 하는 부분이 두 가지 였는데
첫 번째에는 ./gradlew build,
두 번째에는 주석처리가 되어있고 gradle build로 되어있었으며 위에 설명으로 아래와 같이 되어있었다.
"
# 참고: Gradle Wrapper는 Gradle(https://docs.gradle.org/current/userguide/gradle_wrapper.html) 을 실행하는 기본 및 권장 방법입니다.
# 프로젝트에 Gradle Wrapper가 구성되지 않은 경우 다음 구성을 사용하여 지정된 버전으로 Gradle을 실행할 수 있습니다.
"
Gradle 빌드에 권장되는 사용 방법은 Gradle Wrapper를 사용하는 것이다.
Gradle이란?)
-위에서 언급한 빌드를 도와주는 빌드 툴이다.
- Groovy 또는 코틀린 언어를 사용. 이 중 Groovy 언어는 JVM 상에서 싱행되는 스크립트 언어이고 Java와 유사한 문법 구조를 가지며 호환성이 좋음.
Gradle은 장점이 여러가지 있는데 그 중 멀티 프로젝트 빌드를 쉽게 할 수 있다고 한다.
나중에 추가로 더 공부해보기로 하고
Gradle Wrapper란?)
- gradle 빌드에 권장되는 사용방법으로, 명시된 ㅎradle 버전을 호출하고 명시된 버전의 gradle이 없을 경우 자동으로 다운로드 및 설치를 하여 빌드 해주는 스크립트이다.
* 장점 )
1. 특정 버전의 Gradle을 프로젝트와 함께 번들링 할 수 있으므로, 모든 개발자와 CI 서버가 동일한 버전의 빌드 도구를 사용하는 것을 보장한다.
2. 필요한 경우 쉽게 Gradle 버전을 업그레이드 할 수 있다.
3. 복잡한 프로젝트 설정 없이 새로운 개발자나 CI 서버가 빠르게 작업 시작을 할 수 있다.
4. 환경에 종속되지 않고 프로젝트를 빌드할 수 있다.
gradle build를 사용하면 로컬에 설치된 gradle과 java를 기준으로 build 함.
./gradlew build를 실행하면 build.gradle 파일에 정의한 내용 기준으로 build 함
=> 로컬 환경과 관계없이 프로젝트를 빌드할 수 있다.
> gradle-wrapper.propertoes에 distributionUrl에 지정되어 있는 gradle 버전을 사용하여 빌드하게 됨.
결론
호환성 때문에 Gradlew build사용을 권장하는 거라고 생각한다 !
* 참고
https://velog.io/@maldaliza/%EB%B9%8C%EB%93%9CBuild%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
'공부' 카테고리의 다른 글
AWS) IAM에 대해서 (0) | 2024.06.22 |
---|---|
AOP로 동시성 이슈 해결 - 중복 거래 방지 (0) | 2024.03.28 |
Redisson Client, Embedded Redis 기본 설정 및 테스트 (0) | 2024.03.19 |
Docker) Docker에 Jenkins 설치 (0) | 2024.01.22 |
Github Actions 적용해보기 (0) | 2024.01.19 |