TDA(tell don't ask) - 객체에게 일을 시키는 방식으로 만들자
주석을 달고 싶으면 메소드를 분리하라는 신호이다!
VO는 불변 객체라 시스템의 복잡도를 낮추는데 큰 도움이 된다. 왜냐 어떤 메서드에 호출되도 값은 일관 되기 때문
VO는 위에 사진처럼 항상 만들어 질떄 값을 체크해줘야함
생성자는 값을 넣거나 값을 검증하건아 값을 할당하는 역활만 하는게 좋다
DTO 는 상태를 보호하지 않으며 모든 속성을 노출하므로 획득자와 설정자가 필요없다 즉 public으로 해도 상관 없다는 뜻
'보통' DB에 저장된다 = 즉 엔티티가 DB에 저장되는게 필수 조건은 아니다. 즉 엔티티는 DB와 전혀 관계가 없다
PersistenctObject(PO) 가 맞는 표현
데이터 위주의 사고 < 행동 위주의 사고가 객체 지향적일 확률이 높다
Duck typing - 행동이 같다면 같은 클래스로 부른다
또는 컴포넌트를 분리하자
순환참조가 없다면, 애초에 양방향 참조가 없으니까 mappedBy를 고민할 필요가 없다
-> 클래스 변수 만들때 항상 final인지 고민해보자
-> VO도 변경 메서드가 있을 수 있다.(대신 새로운 VO를 반환해야함) 일반 메서드와 구별하기위해 전치사로 시작하는 경우도 있음
인터페이스는 public 메서드다. (User를 사용하는 사람은 encode메서드를 알 필요가 없다 = private)
인터페이스 = 이 기능을 사용하고 싶으면 이렇게 하세요
블락이 있으면 메서드로 분할 생각해보기
테스트하기 쉬운 코드가 좋은 코드다. 테스트를 먼저 생각해보자!
상속을 지양하고 Composition을 사용하자
- !!!!!!!!!!!!!!비즈니스 로직을 서비스단이 아닌 도메인이 가지도록 하자!!!!!!!!!!!!
- 그냥 새로운 객체를 만들어 버리면 된다 그만큼 테코도 쉬워짐
이러한 객체를 도메인서비스 라고 부름( 로직 자체가 목적인 객체)
도메인 서비스는 이름짓기 애매해서 보통은 마지막에 Manager을 붙임
시스템 외부 연동은 되도록 추상화를 하자
서비스는 굳이 추상화 하지 않아도 된다.왜냐 한번 생성되면 평생 같은일을 하게 되니까(but 인프라스트럭쳐 계층은 반드시)
도메인 계층을 만들고, 도메인 영역을 풍부하게 만들자
- !!!!!!!!!!!!서비스는 얇게, 도메인은 풍부하게 만들자!!!!!!!!!!!!
포트포워딩: 특정 포트로 들어오는 요청을 다른 포트로 변경하여 다시 요청하는 과정
DSR: Direct Server Return
Inline 구성 : LB를 프록시처럼 사용
- 온프레미스 : 자체 전산실 서버에 직접 설치해 운영하여 서비스를 전달하는 방식
- 온디멘드 : 수요가 필요한 즉시 바로 서비스를 전달할 수 있는 방식
High Availablility의 약자
서비스가 다운타운 없이 얼마나 유지되나
가용성이 높다고 표현함
두가지 동시 사용
write는 마스터에서만, read는 둘다.
slave 는 마스터 DB replication
시스템 장애가 났을때 어떤식으로 시스템을 복구하겠다 계획을 세우는것
ex: 이중화 시스템 장애대응 메뉴얼
- FailOver: 시스템에 장애가 났을경우 예비 시스템으로 자동전환 하는것
- SwitchOver: 시스템에 장애가 났을경우 수동으로 전환 하는것
- FailBack : 장애가 끝나면 예전 상태로 되돌리는것
인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수있는 공통적인 수단
ServiceProivder
-사용자가 로그인 성공했는지 +Token발급(Authorization 서버역활)
-토큰이 ServiceProvider들의 리소스 접근권한을 판별(Resource 서버역활)
외래키는 공짜가아니다. write 성능 크게 저하
한방쿼리, 서브쿼리 지양하자 (쿼리에 논리를 넣지말자), 쿼리에 논리 로직을 넣어서 쿼리자체를 프로그램으로 만들지 말자
fulltext index 사용금지
in 쿼리는 특정 개수가 넘어가면 풀스캔을 함, 사용 지양, -> 여러번 쪼개서 쿼리 날리는게 더 좋음
like % 는 뒤에있을때만 인덱스를 태운다