본문 바로가기
공부방

[TIL 06/19]

by hseong 2023. 6. 19.

Build

  • 필요한 라이브러리를 다운 받고 classpath에 추가한다.
  • 소스 코드를 컴파일한다.
  • 테스트 코드를 실행하여 작성한 코드에 대한 검증을 수행한다.
  • 컴파일된 코드를 패키징한다. -> .jar / .war
  • 패키징된 파일을 서버나 리포지토리에 배포한다.

Build Tool

  • 빌드 툴은 이러한 task 들을 자동화한다.
  • 어떠한 일들을 하겠다는 task에 대해 기술할 수 있으며 해당 파일을 빌드 스크립트라고 부른다.
  • 스크리트 언어로 Maven은 XML, Gradle은 Groovy 또는 Kotlin을 사용한다.

Maven

  • 자바 기반의 프로젝트 빌드 툴이다.
  • XML 기반으로 설정 모델을 제공하고 pom.xml에 의해서 정의된다.
  • archetype이라는 프로젝트 템플릿을 제공하여 반복된 설정 작업을 줄여준다.
  • 프로젝트에서 사용하는 외부 라이브러리인 dependency를 관리해준다.
  • 하나의 폴더 안에서 하나의 모듈로 구성할 수 있고 멀티 모듈로 구성할 수도 있다.

Transitive Dependency

  • 어떤 아티팩트에 다른 아티팩트를 의존성으로 추가하면 해당 아티팩트의 의존성이 함께 딸려온다.
  • 이러한 딸려온 의존성을 Transitive Dependency라고 한다.
  • 메이븐은 이러한 딸려온 의존성을 알아서 처리해준다.
  • 만일 동일한 아티팩트의 여러 버전이 존재한다면 의존관계 트리에서 제일 가까운 버전을 선택하게 된다.

Dependency Scope

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
</dependencies>
  • dependency에 특정 스코프를 지정할 수 있다.
  • 만일 스코프를 명시하지 않으면 기본적으로 compile 스코프를 가진다.
  • compile
    • 모든 빌드 작업에서 프로젝트의 classpath에서 사용할 수 있다.
  • provided
    • 컴파일 시와 프로젝트의 테스트 classpath에서만 사용할 수 있다.
  • runtime
    • 런타임 및 테스트 classpath에서 사용할 수 있다.
  • test
    • 테스트 및 실행 classpath에서 사용할 수 있다.
  • system
    • provided와 유사하다.
    • 특정 .jar 파일을 직접 가리킨다.
    • 더 이상 사용되지 않는다.

Gradle

  • Groovy 기반으로 빌드 스크립트를 작성하게 도와준다.
    • XML 보다 간결하다.
    • 단, 해당 스크립트 언어를 알아야 한다.
  • Gradle은 하나 이상의 프로젝트를 지원하며 하위에 다수의 프로젝트를 구성할 수 있다.
  • 하나의 프로젝트는 하나 이상의 task로 구성된다.
    • 일반적으로 task를 plugin의 형태로 제공한다.

Spring

  • 스프링은 여러 프로젝트로 구성된 거대 프로젝트이다.
  • 스프링 프레임워크는 여러 모듈로 구성되어 있다.
    • IoC
    • AOP
    • Testing
    • Spring MVC
    • Data Access

Spring Boot

  • Spring Application의 손쉬운 실행을 지원한다.
  • Auto Configuration
  • properties, 옵션 인수 등을 통한 외부 환경 설정
  • profile을 통한 실행환경 관리
  • 실행 가능 .jar 파일로 패키징

Domain

  • 사용자가 애플리케이션에서 사용하는 관심 영역이 해당 애플리케이션의 도메인이 된다. 즉, 비즈니스 영역 그 자체가 도메인이 된다.
  • 비즈니스의 복잡성을 해소하기 위해 모델을 만들고 이 모든 것들은 class로 작성되고 객체로 만들어진다.

Entity

  • 엔터티는 다른 엔터티와 구별할 수 있는 고유한 식별자를 가진다.
  • 시간의 흐름에 따라 지속적으로 변경 되는 객체이다.
  • 비즈니스 로직을 가질 수 있다.

VO

  • 값 속성이 개별적으로 변하지 않고 값 자체로 고유하다.
  • 한 번 만들어지면 내용이 변하지 않는 불변이다.
  • 대체로 Entity 들이 VO들을 속성으로 가지고 있다.

의존성

  • 어떤 객체가 다른 객체가 협력할 때 두 객체 사이에 의존성이 생기게 된다.
  • 컴파일타임 의존성
    • 코드를 작성하는 시점에서 발생하는 의존성이다.
    • 클래스 사이의 의존성
  • 런타임 의존성
    • 애플리케이션이 실행되는 시점의 의존성이다.
    • 객체 사이의 의존성

결합도

  • 하나의 객체가 변경이 일어날 때, 관계를 맺고 있는 다른 객체에게 변화를 요구하는 정도이다.
  • 의존성이 바람직할 때 두 요소는 느슨한 결합도를 가진다.
  • 바람직한 의존성이란 설계를 개선하기 쉽게 만드는 의존성을 뜻한다.