카테고리 없음

[모각코] 3주차 결과 (7/18 13:00 ~ 16:00)

ddd12347 2022. 7. 18. 16:00

Build

  • 필요한 라이브러리를 다운 받고 classpath에 추가
  • 소스 코드를 컴파일
  • 테스트를 실행함
  • 컴파일된 코드를 packaging함 (jar, war, zip)
  • packaging된 파일들을 artifacts라 부르고 서버나 레포지토리에 배포함

Maven

  • 자바용 프로젝트 관리도구

  • 프로젝트의 전체적인 라이프 사이클을 관리한다.

  • xml 기반으로 설절 모델을 제공하고 pom.xml 파일로 작성할 수 있다.

  • archetypes 라는 프로젝트 템플릿을 제공하여 매번 같은 설정을 반복하지 않게 도와준다

  • 프로젝트에서 사용하는 외부 dependency를 관리해준다

  • 플러그인과 외부 라이브러리를 분리하여 관리한다

  • Maven Coordinates

    • Maven 프로젝트를 식별하는데 사용
    • groupid : 주로 회사나 단체명을 작성 ex) org.springframework, org.prgms
    • artifactId : 주로 프로젝트명을 작성 ex) sprint-context, order-api ..
    • version : 프로젝트 버전을 작성 ex) 0.0.1-SNAPSHOT
  • build lifecycle

    https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FysAxy%2FbtqBTLmONJO%2FDH8KRLC3rkduni6kBY9UnK%2Fimg.jpg

    • 미리 정해진 빌드 순서
    • Maven은 프레임워크이기 때문에 동작 방식이 정해져있고, 미리 정의하고 있는 빌드 순서가 있다. 이를 라이프사이클이라 한다.
    • Default(Build)
      • 컴파일, 테스트, 압축, 배포와 같은 작업을 모두 실행하는 라이프 사이클
      • Compile → Test → Package → Install → Deploy
    • Clean
      • 빌드를 통하여 target 디렉토리에 생성된 모든 산출물을 삭제하는 라이프 사이클
    • Site
      • 프로젝트에 대한 문서 사이트를 생성할 수 있도록 지원
  • phase(단계)

    • Build lifecycle의 각 단계를 phasefkrh gksek.
    • phase는 의존관계를 가지고 있어 해당 phase가 수행되려면 이전 단계의 phase가 모두 수행되어야한다.
  • Goal

    • 특정 작업을 말하며, 최소한의 실행 단위이다
    • 하나의 플러그인에서는 여러 작업을 수행할 수 있도록 지원한다 (플러그인이 실행하는 명령들)
    • 플러그인에서 실행할 수 있는 각각의 기능을 Goal이라 한다.
  • 의존범위

    • 라이브러리를 어느 범위까지 적용해서 사용할 것 인지 정의하는 것
    • Compile : 기본값, 모든 단계에서 사용 가능함
    • Provided : 컴파일 시점에만 포함되고 배포할 때는 포함되지 않음 (Survlet, J2EE …)
    • Runtime : 컴파일에서는 사용되지 않고 실행과 테스트에만 사용
    • Test : 테스트하는 시점에서만 적용
    • System : 외부에서 찾는다. 외부의 JAR 파일의 위치를 명시해야함

Spring Boot

  • 스프링 부트는 컴퓨터를 부팅한다는 말 처럼 시스템을 사용 가능한 상태롤 만드는 것
  • 주요 기능
    • SpringApplication을 통한 손쉬운 실행
    • Auto Configuration
    • 쉬운 외부 환경 설정 - Properties, YAML, Command Line 설정
    • 프로파일을 통한 실행환경 관리
    • Packaging Executable jar
    • Developer Tools

Spring Framework의 핵심개념

  • Spring IoC 컨테이너 그리고 Beans
  • 리소스 핸들링
  • Validation, Data binding, 타입 변환
  • 스프링 expression 언어
  • AOP
  • Null-safety
  • 데이터 버퍼와 코덱
  • 로깅

Domain Driven Design

  • Entity
    • 엔터티는 다른 엔터티와 구별할 수 있는 식별자를 가지고 시간의 흐름에 따라 지속적으로 변경이 되는 객체
  • Value Object(VO)
    • VO는 각 속성이 개별적으로 변화하지 않고 그 자체로 고유한 불변 객체
    • JAVA record 사용 (java 14 이상)

의존성

  • 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성을 가지게 된다
    • 컴파일타임 의존성 : 코드를 작성하는 시점에 발생하는 의존성 (클래스 사이의 의존성)
    • 런타임 의존성 : 애플리케이션이 실행되는 시점의 의존성, 객체 사이의 의존성
  • 결합도
    • 하나의 객체가 변경이 일어날 때에 관계를 맺고 있던 다른 객체에 변화를 요구하는 정도
    • 느슨한 결합도를 가지는 것이 바람직하다 → Interface 사용