기술도서/자바스프링 개발자를 위한 실용주의 프로그래밍11 자바스프링 개발자를 위한 실용주의 11. 알아두면 유용한 스프링 활용법 타입 기반 주입spring에서 DI는 타입 기반으로 주입을 한다. 인터페이스를 구현한 구현체가 여러개 있을 때, 콜렉션 형태의 인터페이스를 DI하도록 선언하면 관련 bean들이 콜렉션에 주입된다. 자세한 설명은 코드로 대체한다. public interface NotificationChannel { boolean supports(Account account); void notify(Account account, String message);}@Componentpublic class EmailNotificationChannel implements NotificationChannel { @Override public boolean supports(Account account) { .. 2024. 11. 9. 자바스프링 개발자를 위한 실용주의 10. 도메인 2-10. 도메인- 사용자가 겪는 문제를 해결해주는 것이 비즈니스이다.- 문제를 분석하고, 그에 맞는 솔루션을 생각하고, 그걸 소프트웨어로 구현하는 것이다.- 사용자들이 겪는 문제 영역이 도메인이다. 어플리케이션의 본질우리는 일반 어플리케이션을 개발하는 것이 아니다. 도메인 어플리케이션을 개발하는 것이다.도메인 모델과 영속성 객체통합하기 전략도메인 모델과 영속성 객체를 일치시키기코드량 줄어든다영속성 라이브러리와 강결합구분하기 전략도메인 모델과 영속성 객체를 구분하기코드량 늘어난다영속성 라이브러리와 분리 은탄환은 없다. 적절한 트레이드 오프 필요 2024. 11. 9. 자바스프링 개발자를 위한 실용주의 9. 모듈 모듈성독립성과 은닉성을 갖는 속성의존성 관리 : 모듈을 사용하기 위해 어떤 의존성이 필요한지 명시할 수 있어야 한다.캡슐화 관리 : 모듈은 불필요한 구현을 외부로 드러내지 않는다. 모듈과 모듈 시스템모듈은 모듈성을 만족한다.모듈성은 독립성, 은닉성이라는 특징이 있다.모듈 시스템은 코드 묶음이 모듈성을 갖도록 도와주는 시스템이다.모듈 시스템은 기능적으로 모듈 수준의 의존성관리와 캡슐화 관리가 필요하다.패키지와 모듈은 다르다.자바의 패키지 시스템은 모듈이 아니다. 폴더에 가깝다.하지만 패키지를 만들때도 모듈성을 추구하는 것이 좋다. 독립성최대한 내부에서 해결하라외부를 강하게 의존하지 마라외부 시스템을 사용한다면 외부 시스템 사용을 명시해라은닉성불필요한 정보를 들어내지마라. 그래야 작업이 편하다.예시로 gra.. 2024. 11. 9. 자바스프링 개발자를 위한 실용주의 8. 레이어드 아키텍처 아키텍처는 제약조건 즉, 규칙이다. 아키텍처를 만드는 이유는 목적을 달성하기 위해서이다. 강제적인 규칙같지만 유연하게 채택한다. 아키텍처에 집중하다 보면 목적 달성에서 멀어질 수 있기 때문이다.잘못된 레이어드 아키텍처개발을 시작할 때 어느 레이어를 우선적으로 접근할까? 아래는 잘못된 접근을 설명한다.JPA Entity우선 접근데이터베이스에 종속되기 쉬움. 데이터 관점에서 시작하게 되므로 행동을 생각하기 보다는 속성에 집중하게 될 우려가 있다.API 엔드포인트 우선접근JPA보다는 낫다. 도메인 요구사항 관점에서 보기 시작한다. 하지만 JPA Entity우선 접근과 동일하게, “행동”보다는 도메인이 가질 속성에 집중할 가능이 높다.위 둘의 접근은 기술 스펙을 결정하는 일이다.[JPA Entity우선 접근]은.. 2024. 11. 9. 자바스프링 개발자를 위한 실용주의 7. 서비스 서비스의 역할도메인 객체를 불러온다.도메인 객체나 도메인 서비스에 일을 위임한다.도메인 객체의 변경 사항을 저장한다.Manager서비스를 이해하기 위해 Spring에서 서비스를 어떻게 정의하는지 보자.@Service 주석 요약“서비스는 도메인 주도 설계(DDD: Domain-Driven Design) 에서 시작된 개념으로 캡슐화된 상태 없이 , 모델과는 독립된 동작을 제공하는 인터페이스이다.”DDD 창시자 에릭 에반스가 설명한 서비스entity나 vo에서 찾지 못하는 중요한 도메인 연산이 있다. 이들 중 일부는 본직적으로 사물이 아닌 활동이나 행동인데, 우리의 모델링 패러다임이 객체이므로 그러한 연산도 객체와 잘 어울리게끔 노력해야 한다. 서비스는 DDD에서 시작됐고, 그 창시자는 도메인 객체가 처리하기.. 2024. 11. 9. 자바스프링 개발자를 위한 실용주의 6. 안티패턴 스마트UI 패턴스마트 UI 패턴을 정의하자면 다음과 같다.“데이터 입출력, 비즈니스로직, 데이터베이스 통신 등 모두 UI레벨에서 처리하는 것.” 백엔드 개발자 입장에서 UI는 컨트롤러가 될 수 있다. 즉, 컨트롤러에 지나치게 많은 로직이 들어있는 경우라고 볼 수 있다. 이러한 맥락으로 본다면 스마트 컨트롤러라고 부를 수도 있다.@RestController@RequiredArgsConstructorpublic class MemberController { private final MemberService memberService; private final MemberService memberRepository; @GetMapping public Result modifyMember(St.. 2024. 11. 9. 이전 1 2 다음