반응형 내가 공부하려고 올리는/스프링19 프로젝트를 더욱 S.O.L.I.D 하게 수정해보기 SOLID는 다음 5가지 원칙을 말합니다. SRP : 단일 책임 원칙(Single Responsibility Principle) OCP : 개방 폐쇄 원칙(Open Closed Principle) LSP : 리스코프 치환 원칙(Liskov Substitution Principle) ISP : 인터페이스 분리 원칙(Interface Segregation Principle) DIP : 의존관계 역전 원칙(Dependency Inversion Principle) 따라서 SOLID하게 라는 말이 맞지는 않지만 견고하게 만든다는 뜻에서 한번 사용해봤습니다 😅 오늘 수정해볼 부분은 Service 클래스와 그 구현체들을 SOLID 원칙, 특히 SRP 원칙에 맞춰 리팩토링 하는 시간을 가져보려고 합니다. ✅ 단일 책임.. 2022. 7. 12. 나는 ServiceImpl을 잘 활용했는가? ✅ 나는 ServiceImpl을 잘 활용했는가? 스프링 프로젝트를 진행할 때 비즈니스 계층(Business Layer)에서 Service 클래스를 만들어 사용했다. 이때 서비스 클래스는 1. Service Interface 2. Service Interface 구현 객체 로 나뉜다. 실제 내가 진행했던 프로젝트의 패키지이다. 모든 서비스 클래스는 인터페이스와 그 구현 객체로 나뉜다. 관습적으로 서비스 클래스를 '구현'과 '역할'로 나누어 설계한 점도 있지만 나누게 된 나름의 목표는 있었다. 우선 자바의 다형성을 살리는 것이 하나의 목표였다. 클래스를 설계하면서 때에 따라 필요한 인터페이스만을 가져와서 컨트롤러단의 코드를 깔끔하게 하면서 여러 부품을 필요할 때마다 갈아 끼우듯 코딩하는 것이 1차 목표였다... 2022. 7. 11. 스프링 MVC와 계층형 아키텍처(Layered Architecture) 스프링 프로젝트를 시작하기 앞서 프로젝트를 구조화하기 위해서 아키텍처를 정해야 했다. 내가 선택했던 아키텍처는 '계층형 아키텍처(Layered Architecture)'이다. 계층형 아키텍처를 적용하기로 했던 프로젝트는 DB로 MySQL을 사용하고, Mybatis를 추가로 사용했다. 이 점이 계층형 아키텍처랑 잘 어울리는 부분이라고 생각했다. 우선 간단한 계층형 아키텍처의 모습을 보자 ✅ 계층형 아키텍처(Layered Architecture) 클라이언트의 HTTP 요청이 오면 1차적으로 컨트롤러가 응답한다. 이후 'Service Layer'와 'Model'로 요청이 흐르는데 여기서 Service Layer는 스프링에서 서비스 클래스와 같고, Model은 데이터 접근 객체(dto, entity)와 같다. .. 2022. 7. 11. 빈 스코프 빈 스코프란 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문 스프링이 지원하는 스코프 싱글톤 : 기본 스코프, 가장 넓은 범위의 스코프 프로토타입 프로토타입 빈의 생성과 의존관계 주입까지만 관여 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 빈 스코프는 다음과 같이 지정 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component 수동 등록 @Scope("prototype") @Bean P.. 2022. 2. 6. 빈 생명 주기 콜백 빈 생명주기 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이셔 시작 지점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하려면 객체의 초기화와 종료 작업이 필요 스프링을 통해 빈의 초기화 작업과 종료 작업을 할 수 있다. 스프링 빈은 객체 생성 -> 의존 관계 주입이라는 라이프 사이클을 갖는다. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 스프링 빈 생성 의존관계 주입 초기화 콜백 사용 소멸전 콜백 스프링 종료 초기화 콜백 : 빈이 생성되고, 빈이 의존관계 주입이 완료된 후 호출.. 2022. 2. 4. 의존 관계 주입 의존관계 주입 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계를 주입받는 방법 생성자 호출시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 예시 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.mem.. 2022. 2. 3. 이전 1 2 3 4 다음 반응형