-
[모각코] 3주차 결과 (7/18 13:00 ~ 16:00)카테고리 없음 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
- 미리 정해진 빌드 순서
- 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 사용