텍스트우리는 실서버에 어떠한 기능을 추가하거나 수정할 때
사용자가 로컬 PC에서 개발 후 테스트를 진행했을 때 오류가 없는 것을 확인하고
실서버에 반영해준다.
이 과정에서 컴파일, 빌드, 배포 모든 과정을 거친다.
컴파일 = 번역
사용자가 작성한 소스코드 파일(.java)을 컴퓨터가 이해할 수 있는 기계어로 번역한다. (.class)
.java를 .class로 변환하는 것
컴파일을 해주는 프로그램을 컴파일러라고 한다.
원시파일을 컴퓨터가 알아들을 수 있게 바이너리 형태의 파일로 만들어 주는 과정을 컴파일이라 한다.하지만 다양한 외부 리소스를 같이 연결하는 과정을 링커를 통해 실행파일이 생성된다.
사용자가 작성한 소스코드 파일(.java)을 컴파일해서 컴파일된 코드(.class)가 되면, 이것을 컴퓨터가 실행할 수 있는 상태로 변환하는 것을 빌드라고 한다.
컴퓨터가 실행할 수 있는 상태란, resource를 .class에서 참조할 수 있는 적절한 위치로 옮기는 등등의 작업을 하는 것이다.
즉, 컴파일된 코드를 실제 실행할 수 있는 상태로 만드는 것이다.
컴파일을 포함하여 war, jar 등의 실행파일을 만드는 과정 또한 빌드라고 부른다.
위의 일련의 과정을 빌드라고 한다. 즉 컴파일은 빌드 안에 부분집합이라고 생각하자.
소스코드는 사람이 알아들을 수 있는 형태의 파일을 원시파일이라고 합니다.
컴퓨터가 알아듣게끔 이진 코드로 만들어주는 과정을 컴파일이라고 합니다.
오브젝트 파일을 컴퓨터에 맞게 변환을 하여도 프로젝트가 바로 실행될 수 없어요,
왜냐면 프로그래밍을 할 때 외부 라이브러리를 사용하고 함수도 사용하고 리소스도 사용하기 때문에
오브젝트 파일을 외부 리소스를 연결하는 과정이 필요합니다.
이 과정을 링커라고 합니다. 빌드는 대체 뭘까?
사람이 알아들을 수 있는 원시파일을 실제 컴퓨터에서 프로그램을 돌릴 수 있도록 하는 일련의 과정이라고 알면 됩니다.
컴파일이라는 과정은 빌드 안에 부분 집합으로 되어있습니다.
빌드는 우리가 하나?
빌드는 빌드 도구가 해줍니다 .net 뭐 등등
빌드 도구는 뭐냐 알아 보자면 소스코드로부터 실행가능한 어플리케이션을 생성하는 것을 자동화합니다.
실행 가능한 어플리케이션을 생성하는 것이 빌드를 하는 군 알수 있는데
자동화라는게 또 뭘까? 굉장히 거창해보이지만
개발할 떄 반복적으로 수행해야하는 일,
상황: 서비스 중인 프로그램을 수정한다고 생각해봐요
우리는
1. 코드를 수정한다.
2. 깃에 올린다.
3. 컴파일을한다.
4. 빌드를 한다.
5. 배포를한다.
6. 테스트코드 작성하고 수행하고 검증한다 등등등
일련의 과정을 매번 수동으로 해야하는데
사람이 하지 않아도 될 법한 절차들을 자동화로 할 수 있다는 뜻입니다.
빌드를 자동화하면 빌드 자동화가 될 수 있고, 배포를 자동화하면 배포 자동화, 테스트를 자동화 하면 테스트 자동화가 돼요
빌드 자동화는 어떤 일을 시키냐 하면
의존성을 다운로드 시킨다.
소스코드를 이전 코드로 컴파일 시킨다.
이번 코드 패키징을 시킨다.
자동화 된 테스트를 실행시킨다.
프로덕션 시스템에 배포 시킨다.
빌드 도구나 자동화를 꼭 사용해야하나?
작은 규모의 프로젝트는 필요 없지만, 점점 규모가 커지면 잘 파악하기 힘드니 빌드 프로세스를 좀더 일관성 있게 유지시키기 위해서 빌드 자동화가 필요합니다.