Build란 ?
- 필요한 라이브러리를 다운 받고 classpath에 추가
- 소스 코드를 컴파일
- 테스트 실행
- 컴파일된 코드를 packaing → jar / war / zip etc
- packing된 파일을 주로 artifacts 라고 부르고 서버나 레파지토리에 배포
→ 해당 일들을 자동화해주고 기술해주는 것
1. Maven
- 빌드 도구로써 주로 자바기반의 프로젝트에서 많이 사용됩니다.
- XML기반으로 설정 모델을 제공하고 pom.xml 파일로 작성할 수 있습니다.
💡 POM은 project object model의 약어입니다.
Maven’s Objectives
https://maven.apache.org/what-is-maven.html
- 위의 Maven 홈페이지에서 Maven 이 이루고자 하는 목표를 확인가능
왜 Maven을 사용할까?
- archetypes 라는 프로젝트 템플릿을 제공 → 매번 같은 설정을 반복하지 않게 도와줌
- 프로젝트에서 사용하는 외부 라이브러리인 dependency 를 관리해줌
- 플러인과 외부 라이브러리를 분리하여 관리
- dependency를 다운닫는 Repository가 로컬이 될 수도 있고 Maven Central 와 같은 공개된
Repository가 될 수도 있음
2. Gradle
- 또 다른 Build Tool로서 Groovy 기반으로 빌드 스크립트를 작성하게 도와줌. 최근에는 코틀린도 지원해서 코틀린 기반으로 Build Script를 작성가능
1. Spring : 여러 프로젝트로 구성
- 자주 사용되는 프로젝트 : Spring Boot, Spring Data, Spring Security, Spring Cloud
2. Spring Framework : 여러 모듈로 구성
- setup하는데 많은 시간 소요 → spring boot가 해결
3. Spring Boot
- Spring Framework의 여러 프로젝트중 하나의 프로젝트
- 주요 기능
- SpringApplication을 통한 손쉬운 실행
- Auto Configuration
- 쉬운 외부 환경 설정 - Properties, YAML, Command line 설정 등 프로파일을 통한 실행환경 관리
- Packaging Executable Jar
- Developer Tools
의존성이란?
어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이의 의존성이 존재하게 된다.
의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가짐
- 컴파일타임 의존성: 코드를 작성하는 시점에서 발생하는 의존성. 클래스 사이의 의존성.
- 런타임 의존성: 애플리케이션이 실행되는 시점의 의존성. 객체 사이의 의존성.
결합도란 ?
하나의 객체가 변경이 일어날 때에 관계를 맺고 있는 다른 객체에게 변화를 요구하는 정도
- 의존성이 바람직할 때 느슨한 결합도 또는 약한 결합도
- 반대로 두 요소의 의존성이 바람직하지 못할 때 단단한 결함도 또는 강한 결합도
⇒ 느슨한 결합도로 코드 변경이 필요