본문 바로가기

분류 전체보기

최범균 <DDD START! > 4-5장 요약 4장. 리포지터리와 모델 구현 별도 테이블에 저장하는 밸류 매핑 애그리거트에 속한 객체가 밸류인지 엔티티인지 구분하는 방법은 고유 식별자를 갖는지 여부를 확인하는 것이다. 하지만 식별자를 찾을 때 매핑되는 테이블의 식별자를 애그리거트 구성요소의 식별자와 동일한 것으로 착각하면 안된다. 별도 테이블로 저장되고 테이블에 PK가 있다고 해서 테이블과 매핑되는 애그리거트 구성요소가 고유 식별자를 갖는 것은 아니다. 보통 주문 애그리거트는 실주문을 의미하는 Order 테이블과 주문 품목을 의미하는 Order Lines 테이블로 구성되어 있다. 여기서 주문 품목(Order Lines)은 밸류이다. Order Lines 테이블도 고유 PK를 갖고 있지만, 주문 애그리거트를 식별하는 고유 식별자는 주문번호이다. (위 ..
2019년 3월 셋째주 주간 로그 #금주의 포켓 #Glue AWS Glue 간단 사용기 – 1부 / ATHENA - AWS Glue와 통합 AWS Glue 간단 사용기를 따라해보니 대략 어떤 느낌인지 감이 왔다 ㅎ_ㅎ 데이터 워크플로우 관리 툴로 이해하면 될 것 같다. 그리고 Glue에서 만들어진 데이터베이스는 Athena / EMR / REDSHIFT에서 바로 가져다 쓸 수 있어서, 데이터베이스/스키마 관리에도 용이해보인다. Athena 테이블 / 파티셔닝 관리도 편해보인다. Glue를 안쓰면, 테이블 파티셔닝 해주는 배치를 따로 돌려줘야한다. 데이터베이스 / 테이블을 한군데에서 관리하고, 데이터 가공 배치를 서버리스 환경에서 돌리고 싶을 때 Glue를 사용하면 좋을 것 같다. #Django - Signal Django best pra..
(PostgreSQL) BRIN 인덱스 활용하기 BRIN 인덱스BRIN 인덱스는 Block Range Index의 약자다. BRIN 인덱스는 페이지의 메타데이터를 뽑아서 인덱스를 구성한다. 그래서 타임시퀀스한 대용량 데이터를 저장하고, 조회할 때 유용하다. 테이블은 여러개의 페이지들로 구성되어 있다. 비슷한 시기에 만들어진 로우는 같은 페이지에 위치하거나, 물리적으로 서로 근접한 위치에 있다. BRIN VS B-TREE BRIN 인덱스는 B-TREE 인덱스보다 쿼리 퍼포먼스가 좋다.그리고 BRIN 인덱스는, B-TREE에서 사용하는 용량의 1%만 사용한다. bb인덱스 생성 속도도 BRIN이 더 빠르다. 쿼리 퍼포펀스 비교해보기대용량 테이블을 만들고, BRIN / B-TREE 인덱스를 추가해서 각각의 퍼포먼스와 디스크 사용량을 비교해보겠다. 1. 샘플데..
(Pytest) Fixture 모아두기 - conftest.py conftest.py Django Pytest 에서 공통으로 사용되는 Fixture / Plugin / Module을 모아두는 파일이다. 테스트가 돌아갈 때, 공통적으로 호출되어야하는 Hook들도 이 파일에서 관리한다. conftest.py은 도메인 모듈 (디렉토리)별로 나눠서 관리하는걸 권장한다. 도메인별로 Fixture를 나눠서 관리하는게 좋고, Fixture를 여러개 만들면 테스트가 느려질 수 있기 때문이다. 샘플 보통 어떻게 활용하는지는 아래의 샘플 코드를 참고하면 감잡을 수 있다 :) saleor > conftest.py https://github.com/mirumee/saleor/blob/master/tests/conftest.py shuup > conftest.py https://github..
(Pytest) Fixture에 매개변수 넘겨주기 함수 호출부에서 Fixture의 일부 데이터를 변경하고 싶다면, 아래와 같이 Fixture에 매개변수를 넘겨주면 된다.@pytest.fixture() def facebook_user_data(): def _data(user_id, email): return { "hometown": "Your, Hometown", "birthday": "01/01/1985", "email": email, "id": id } return _data 호출 방식은 다음과 같다.class TestUserInfo: def test_get_data__회원기본정보와_페이스북정보를_반환한다(self, mocker, facebook_user_data): user = UserFactory.create() facebook_user_data ..
(디버깅) Google Chrome 개발자콘솔로 프론트 통신상태 조절하기 Slow 3G으로 설정해주면, 통신상태가 불안한 상태에서 프론트가 처리되는 상태를 디버깅할 수 있다 👍
위르헌 아펄로 -Management 3.0 9. 제약 조건을 정렬하는 방법 여러분의 목표와 팀의 목표를 절충하자 팀과 목표가 부딪히면 그걸 해결해야 할 것이다. 팀의 결정을 무시하면 매우 갚기 어려운 동기 부채가 생길 것이고, 그건 상황을 더욱 어렵게 만들 뿐이다. 권한 경계 목록을 만들자 권한 경계 목록을 만들면 사람들이 전기 철조망에 뛰어들지 않아도 되기 때문에 사람들에게 동기를 부여하고 생산성을 유지할 수 있다. 10. 규칙을 만드는 기술 애자일의 맹점 애자일 선언의 애자일은 팀이 훌륭할 때만 훌륭하다. 애자일 선언이 역량 문제를 해결해주지는 않는다. 프로젝트의 치사율을 낮추고 싶은 애자일 관리자라면 아래의 기본 원칙을 응용할 수 있다. 문화 : 사회 시스템의 역량을 높이기 위해 어떤 방법을 적용하든, 결국 모든 것은 사람이 진심으로 관심이..
(PostgreSQL) 쿼리 실행계획 비쥬얼라이징하기 1. PgAdmin에서 실행계획 비쥬얼라이징하기PgAdmin에서 질의 쿼리 앞에 EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON) 쿼리를 추가해주면, 손쉽게 쿼리 실행계획을 비쥬얼라이징해서 볼 수 있다. PgAdmin QueryTool > Explain Tab에서 결과를 확인할 수 있다. Index, Join 방식 등도 비쥬얼라이징해주기 때문에, 복잡한 실행결과를 한눈에 파악하는 데에 도움이 된다. 이런식으로! (참고 - READING PGADMIN GRAPHICAL EXPLAIN PLANS) 2. tatiyants > Pev에서 실행계획 비쥬얼라이징하기tatiyants의 PEV를 사용하면, 온라인에서 실행결과를 비쥬얼라이징할 수 있다.PEV 링크 EXP..