분류 전체보기 (78) 썸네일형 리스트형 AppConfig 리팩터링 (+ 역할 요약) 이전 학습 내용 : AppConfig를 따로 두어서 생성&주입의 책임을 서비스 클래스의 외부(AppConfig)로 빼주었다. 의존관계 주입(DI)를 구현한 것이다. 그런데 단순히 구현해본 AppConfig는 리팩터링이 필요하다. 그 내용을 보쟛 (단축키 : Ctrl + Alt + M) ∨ 이전 - 중복 제거가 필요 : 매개변수를 보자. new MemoryMemberRepository()가 중복으로 있다. : 중복 제거가 필요하다 => 다른 구현체로 변경할 경우 힘들어짐 : 그 new하는 책임을 메서드 하나로 따로 빼주자. - 애플리케이션의 구조가 보이지 않음 : 역할&구현이 분리되지 않았다. : 예를들면 memberService 역할 속에 new MemoryMemberRepository()라는 구현체 생.. 1회차 결과 1회차 결과 - 다형성을 지키면서 OCP, DIP 원칙 또한 지키게끔 하는 Spring 컨테이너의 원리를 코드로 직접 느껴봄 - 순수 자바 구현 코드를 Spring 컨테이너를 이용하도록 전환해봄 1회차 목표 개인 목표 - 인프런 스프링 강의 section 2 ~ section 3 - 학습 예정 내용 : 도메인 구현 완료하기 => 객체지향원리 적용 & 스프링으로 전환 도메인 설계 내용 (작성중) ∨ (참고) 실무에서 그리는 다이어그램 3가지 - 도메인 (협력, 역할, 책임) 관계 : 개발자가 아닌 기획자도 보고 이해 가능 - 클래스 다이어그램 : 개발자가 클래스(인터페이스)간 관계를 나타낸 것 (정적임) - 객체 다이어그램 : 서버가 실제로 사용하는 인스턴스끼리의 참조 (동적임) 개발자는 클래스 다이어그램 보고 구현해가면 된다. 회원도메인 설계 ∨ 요구사항 - 회원 가입 & 회원 조회 가능 - 등급 존재 : 일반, VIP - 회원 데이터는 미확정 : 자체 DB를 구축할 수도, 외부 시스템과 연동할 수도 더보기 다이어그램 ⓐ 회원 도메인 전체 관계 ⓑ 회원 도메인 클래스 다이어그램 ⓒ 회원 도메인 객체 다이어그램 더보기 도메인 구성 ∨ 회원 엔티티 - 회원 등급 - 회원 엔티티 ∨ 회원 저장소 -.. DIP, OCP 원칙이 깨지는 문제를 Spring으로 해결 요약 : 역할과 책임을 아주 잘 분리 & 다형성을 잘 이용하더라도 OCP, DIP 원칙을 깬다면 좋은 객체지향 설계가 아니다. 대표적 예시 : 순수 자바 코드 & new 연산자로 구현하는 아래 예시 해결법 : Spring DI - 그래서 DI컨테이너 원리를 직접 구현해볼 것임 - AppConfig를 통한 의존관계 주입 : 생성&주입을 서비스클래스가 직접 하지 않고 AppConfig가 하도록 분리한다. : 더이상 서비스클래스는 의존관계에 신경쓰지 않도록 구현하자. ● Spring 안쓰고 자바로 간단히 구현했을 때 문제점 어떤 문제가 생길까? ① 먼저, 회원 도메인에서 문제점을 찾아보자. * MemberServiceImpl은 private final MemberRepository 인스턴스 변수를 가지고 있는.. 기본&중요 | SOLID 그리고 스프링 SRP 단일 책임 원칙 OCP 개방 폐쇄 원칙 ★ ∨ 확장에는 열려있으나 변경에는 닫혀있어야 한다. ㄴ 다형성(+인터페이스)를 이용하더라도 구현객체를 변경하려면 클라이언트 코드를 변경한다면 OCP가 깨지는 문제 발생 ㄴ 객체 생성 & 연관관계를 맺어주는 별도의 조립/설정자가 필요 => Spring DI/IoC컨테이너의 역할! (why? 이후에 이해하게 됨) LSP 리스코프 치환 원칙 ∨ 인터페이스의 규약은 지켜야 함 ISP 인터페이스 분리 원칙 ∨ 자동차 인터페이스 -> 운전/정비 인터페이스로 분리 => 사용자 클라이언트 -> 운전자/정비사 클라이언트로 분리 인터페이스가 명확해짐 & 적절히 대체하기 좋아짐 DIP 의존관계 역전 원칙 ★ ∨ 구현클래스(구현, 구체화)에 의존하지 말고 인터페이스(역할, 추상.. 스프링&웹 | 스프링 DI (+ 계획 변경..!! ㅠㅅ ㅠ) 스프링의 코어는 DIxAOP 컨테이너이고, DI는 스프링 코어의 하나이다. DI 의미 dependancy injection : 객체를 직접 생성하는 것이 아닌, 외부에서 생성하여 주입시켜주는 방식이다. : 예를들면 new로 직접생성하지 않고, 외부에서 생성된 객체를 setter(), 생성자를 통해 사용하는 방식이다. : 스프링의 DI 컨테이너에서 객체를 생성하고, 필요한 곳에 객체를 주입시킬 수 있다. ∨ 의존 관계 주입? : 오브젝트 사이의 의존관계를 만드는 것임 : 어떤 오브젝트가 의존(이용)할 오브젝트를 주입(injection, 프로퍼티(인스턴스변수)에 설정)한다는 것임 ∨ 인터페이스를 이용해 부품화를 실현하는 것 : 인터페이스와 DI 컨테이너를 이용하여 제대로 '부품화'할 수 있다. ex) Pro.. 스프링&웹 | 각 레이어에 관련된 스프링 기능 스프링은 애플리케이션 아키텍처의 기반이 된다. ∨ MVC 프레임워크 (스프링 MVC, 스프링 웹 플로) ∨ JDBC를 추상화한 프레임워크 (스프링 JDBC) ∨ 기존 프레임워크 => DIxAOP 컨테이너를 중심으로 통합 가능하다! . . 웹 애플리케이션의 각 레이어에는 어떤 스프링 기능이 해당하는지 알아보자. 프레젠테이션 층 ∨ 스프링 MVC : 스프링 MVC, 스프링 웹 플로 이용 가능 : 즉 MVC 프레임워크를 이용한다. cf) 스프링 웹 플로를 이용시 Ajax 연계 가능 ∨ 스프링 시큐리티 : 화면별 액세스 제어에 많이 사용된다. : 물론 레이어 전체에서 사용 가능하다. : 인증/인가 기능 제공 & 베이직 인증이나 OAuth 표준에 따라가는 인증서비스(페북, 트위터, 구글)를 사용 가능! 비즈니스 .. 이전 1 ··· 6 7 8 9 10 다음