섹션 3. 스프링 핵심 원리 이해1 - 예제 만들기
섹션 4. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 --> 일부
섹션 3에서 만든 예제 코드를 섹션 4에서 기능을 추가하면 문제가 생기는데, 그 문제를 해결하며 스프링을 도입하는 과정을 담은 강의였습니다.
섹션 3. 스프링 핵심 원리 이해1 - 예제 만들기
(1) 프로젝트 생성
역할과 구현을 나누어 순수한 자바로만 개발한다.
실제 요구사항이 나중에 변경되었을 때 다형성, OCP, DIP가 잘 지켜지고 있는지 볼 것.
(2) 비즈니스 요구사항과 설계
요구사항을 보면 아직 미정인 부분이 많지만, 인터페이스와 구현을 나눠 개발하는 객체 지향 설계 방법으로 설계하면 된다.
(3) 회원 도메인 설계
- 도메인 협력 관계
- 클래스 다이어그램: 정적, 클래스 코드를 볼 때의 구조
- 객체 다이어그램: 동적, 서버가 실제로 떴을 때, 런타임, 인스턴스간 참조
(4) 회원 도메인 개발
회원 등급, 회원 엔티티, 회원 저장소 인터페이스, 메모리 회원 저장소 구현체, 회원 서비스 인터페이스, 회원 서비스 구현체를 만들었다.
(5) 회원 도메인 실행과 테스트
JUnit 테스트를 이용한다.
(6) 주문과 할인 도메인 설계

(7) 주문과 할인 도메인 개발
할인 정책 인터페이스, 정액 할인 정책 구현체, 주문 엔티티, 주문 서비스 인터페이스, 주문 서비스 구현체를 만들었다.
(8) 주문과 할인 도메인 실행과 테스트
스프링을 띄우려면 시간이 오래 걸리므로 단위 테스트를 만드는 것이 중요하다.
섹션 4. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용
(1) 새로운 할인 정책 개발
기획자가 새로운 할인 정책을 추가해달라고 했을 때 DIP, OCP를 못 지키는 문제가 발생하게 된다.
이를 통해 스프링 컨테이너가 왜 생겨났는지 알 수 있다.
cf) alt+enter로 테스트 코드를 바로 만들 수 있다.
(2) 새로운 할인 정책 적용과 문제점
새로운 할인 정책으로 변경하려면 클라이언트 코드를 고쳐야 한다.
1) DIP 위반: 인터페이스 뿐만 아니라 구현 클래스에도 의존하고 있다.

2) OCP 위반: 기능을 확장해서 변경하면 클라이언트 코드에 영향을 준다.

-> 인터페이스에만 의존하도록 변경하면 DIP 문제는 해결되지만 NPE(null pointer exception)가 발생한다.
-> 누군가 클라이언트 코드에 구현 객체를 대신 생성하고 주입해주어야 한다.
(3) 관심사의 분리
객체를 생성하고 연결하는 역할과 실행하는 역할을 명확히 분리한다.
AppConfig를 만들어 구현 객체의 생성과 연결을 책임지도록 한다. AppConfig는 생성한 객체 인스턴스의 참조를 생성자를 통해서 주입해준다. 어떤 구현 객체를 주입할지는 오직 외부인 AppConfig에서 결정된다. 이를 통해 DIP 문제가 해결되었다.

(4) AppConfig 리팩터링
(5) 새로운 구조와 할인 정책 적용
정액 할인 정책을 정률 할인 정책으로 바꿀 때, 이제는 AppConfig 코드만 변경하면 된다.
AppConfig의 등장으로 사용 영역과, 구성 영역으로 분리되었다.
-> 이를 통해 OCP 문제도 해결되었다.
(6) 전체 흐름 정리
새로운 할인 정책을 적용하려고 했을 때 클라이언트 코드를 함께 변경하게 되는 문제가 발생하였다. DIP와 OCP원칙을 위반하게 되는 문제가 발생한 것이다. 이를 해결하기 위해 애플리케이션의 전체 동작 방식을 구성하는 AppConfig를 만들었다. AppConfig는 구현 객체를 생성하고 연결하는 책임을 가진다. 이를 통해 할인 정책을 변경해도 AppConfig가 있는 구성 영역만 변경하면 되며, 사용 영역은 변경할 필요가 없어지게 되었다. DIP, OCP 문제도 해결되었다.
'WINK-(Web & App) > Spring Boot 스터디' 카테고리의 다른 글
[2025 1학기 스프링부트 스터디] 이종윤 #1주차 (0) | 2025.04.03 |
---|---|
[2025 1학기 스프링부트 스터디] 석준환 #2주차 (0) | 2025.04.01 |
[2025 1학기 스프링부트 스터디] 여민호 #2주차 (0) | 2025.04.01 |
[2025 1학기 스프링부트 스터디] 류현준 #1주차 (0) | 2025.03.31 |
[2025 1학기 스프링부트 스터디] 최비성 #1주차 (0) | 2025.03.30 |