유투브 조영호님의 강의 영상 후기
레이어 아키텍쳐
일반적으로 레이어 아키텍쳐는
프레젠테이션 ( 사용자 입력을 받는 부분 , 화면쪽)
도메인 ( 주요 로직)
데이터 소스 ( 디비쪽)
으로 나뉘고 주요 로직인 도메인 레이어가 가장 중요함.
도메인 레이어
이 도메인 레이어는 두가지 설계 방법이 있는데
- 절차지향 → (트랜잭션 스크립트 모델)
- 객체지향 → (도메인 모델)
두가지 방법이 있고 괄호안은 모델 패턴의 이름.
우리나라는 대부분 데이터와 로직이 나뉘어져 있는 절차지향.
절차지향
- 절차지향은 서비스에 주요로직이 있고 데이터 모델이 따로 있고 DAO를 통해서 데이터를 가져옴
→ 프로세스와 데이터가 나뉘어져 있음.
객체지향
2. 객체지향은 로직과 데이터모델이 하나로 존재함.
→ 프로세스와 데이터가 합쳐져있음. (객체)
→ 다른 객체( 프로세스와 데이터) 들과의 서로 상호작용 할수있는 구조.
객체지향 설계
CRC Card
책임과 협력을 표현하기 위한 객체지향 설계도구
C. Candidate = 역할 또는 객체
R. Responsibility = 객체가 맡은 역할 ( 로직 )
C. Collaborator = 객체가 맡은 역할을 수행하기 위해 필요한 객체
객체지향 설계 방법
- 로직을 수행할때 필요한 데이터들을 가장 많이 갖고있는 객체에 로직을 할당. ( creator 패턴)
→ 객체에 로직을 넣기 힘들경우 팩토리 객체를 만든다.
- 1번의 객체에 로직을 수행하는데 다른 데이터가 필요할 경우 다른 객체의 협력이 필요. ( 호출 )
객체지향 결론
절차지향에서 처럼 하나의 서비스에 모든 로직을 다 집어넣는것이 아닌
각각 알맞는 객체 ( 로직을 수행할 데이터를 가장 많이갖고있는 객체) 에 로직을 할당하며
객체간의 협력관계로 로직을 수행하는것.
도메인 레이어와 아키텍쳐
도메인 레이어를 어떻게 설정하느냐에 따라서 아키텍쳐가 조금씩 틀려진다.
1. 어플리케이션 플로우 로직
도메인 로직을 처리 하기 위한 전후 작업 ( 디비에 넣는다던지 , 푸쉬후 카톡이나 메신저에 전송할때)
어플리케이션 로직을 도메인 로직에 넣으면 의존성( 디비에 넣을땐 디비쪽 의존성)이 생기므로 테스트가 어려워지고 결합도가 높아지고 응집도가 떨어지므로 도메인 로직에 넣지 않음.
2.도메인 레이어 캡슐화
도메인과 관계없는 로직들은 접근 못하게 막아야한다.
3.서비스 레이어
그래서 나온것이 서비스 레이어.
어플리케이션 플로우 로직을 서비스 레이어에 넣는다.
프레젠테이션
서비스
도메인
데이터소스
도메인 레이어 위에 서비스 레이어가 붙는다.
서비스 레이어는 달라도 도메인 로직은 사용이 가능하므로 도메인 로직의 재사용성이 높아진다.
서비스 레이어가 시작할때 트랜잭션이 시작하고 서비스 레이어가 끝날때 트랜잭션이 끝난다.
데이터 소스 레이어
객체모델과 db스키마 사이의 불일치
객체 모델과 DB 스키마 사이의 불일치.
객체 패러다임과 관계 패러다임 간의 불일치.
데이터는 중복 제거하기 용이함.
객체는 유연하다. 수정이 쉽다.
객체지향적으로 볼수록 둘사이는 관점이 다르므로 불일치가 일어남.
이럴경우 datamapper를 두고 양쪽의 불일치를 해결하게함.
datamapper를 사용함으로써 객체와 데이터의 결합도를 낮춘다.
결합도가 낮으므로 서로가 다르게 발전함.
ORM
ORM = datamapper
대표적인 ORM = HIBERNATE , JPA
절차지향의 단점
1. 로직을 찾기가 힘들고 알아보기도 힘듬.
2.수정하기가 힘듬.
객체지향의 장점
1. 로직을 찾기도 쉽고 수정하기도 쉽다.
2. OCP open-closed principle
수정은 닫혀있지만 행동을 변경하고 확장하는것엔 열려있다.
추상화를 기준으로 분리.
3.dependency-inversion principle 의존성 역전 원칙
추상화를 기준으로 분리하면 상위 레벨의 모듈은 하위 레벨의 모듈에 의존성을 전혀 갖지 않는다.
의존성은 같은 레벨단계에서만 가짐.
의존성을 추상화로 향하게 하면 시스템의 확장성이 늘어남. ( 2020.06.28 확실하게 이해가 되진않음 )
4. 추상화를 이용한 효율적인 커뮤니케이션이 가능.
하이레벨모듈로만 얘기 가능하고 더 디테일하게 내려갈경우에 로우레벨모듈에 대한 설명이 가능하다.
계속해서 추상화를 만들다 보면 이것들이 모여서 도메인 레이어가 됨.
객체지향의 단점
객체지향으로 설계할때는 최대한 쉽게 로직을 짜야한다.
하지만 이런경우는 거의없다. 그래서 매번 리팩토링을 해야한다.
어느정도 방향성이 보이기 시작하면 그때부터 편해진다.
https://www.youtube.com/watch?v=26S4VFUWlJM&feature=youtu.be
2020.06.28 - 어느정도 윤곽과 개념이 잡힘.