자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로 새로운 시작이라는 뜻으로 시작되어 현재는 다양한 생태계를 구축하고 있다. 스프링은 제어의 역전(Invertion of Control), 스프링 컨테이너를 이용한 의존관계 주입(Dependency Injection)을 통해 객체지향 설계 원칙의 특징인 다형성을 활용할 수 있도록 도와줘 코드에 대한 유지보수와 변경을 쉽게 할 수 있도록 한다. 이와 같이 동적인 웹사이트를 개발하기 위한 풍부한 서비스를 제공하고 있어 대한민국 공공기관의 웹 서비스 개발시 사용을 권장하는 전자정부 표준 프레임워크 기반 기술로 쓰이고 있다.
스프링이 다양한 기능을 지원하는 만큼 복잡한 환경설정을 간단하게 해주기 위해 나온 것이 바로 스프링 부트다. 많은 설정을 자동화해서 디펜던시만 추가해주면 필요한 설정파일과 프로젝트 구조를 생성해 주기 때문에 추가적인 설정으로 인한 번거로움을 덜어준다.
CLI로 cmd에서 필요한 스프링 기반 프로젝트 파일을 생성할 수 있는 것으로 스프링 부트 사이트와 같이 필요한 디펜더시와 빌드 툴 등을 지정한 명령어를 실행하면 자동으로 설정된 프로젝트 파일을 생성해준다.
>>프로젝트 생성 명령어
spring init --dependencies=web --java-version=[자바 버전] --type=gradle-project [디렉터리명]
>>사용 예시
spring init --dependencies=web --java-version=17 --type=gradle-project demo
소프트웨어로 해결하고자 하는 문제 영역(서비스)을 도메인이라고 부르고 도메인 모델이란 특정 도메인을 개념적으로 표현한 것이다. 도메인은 애플리케이션의 아키텍처는 4개의 계층 중 하나의 구성 계층이다.
도메인 모델을 도출하기 위해서는 모델을 구성하는 핵심 구성요소인 규칙을 찾고 이를 표현한 주요 데이터와 기능을 포함하는 하나의 객체로 구현하는 것에 있다.
Entity는 다른 엔티티와 구별할 수 있는 식별자를 가지고 있고 시간에 흐름에 따라 지속적으로 변경될 수 있는 객체를 지칭한다. 여기서 식별자는 다음 4가지 방식 중 한 가지 방식으로 생성되는게 일반적이다.
Value Object는 각 속성이 개별적으로 변화하지 않고 값 그 자체로 고유한 불변 객체를 말한다. 따라서 Value Object의 데이터의 변경은 기존 데이터를 변경하기 보다는 변경한 데이터를 갖는 새로운 Value Object를 생성하는 방식을 선호하고 이를 통해 안전한 코드를 작성할 수 있게 된다.
주문 도메인을 구현한 객체 예시
public class Order {
private int id;
private String custormer
private String address;
private List<OrderLine> orderLines;
private void setOrderLines(List<OrderLine> orderLines) { ... }
private void calculateTotalAmounts() { ... }
...
}