본문 바로가기

전체 글

도메인주도개발 시작하기 4장 JPA 를 이용한 리포지터리 구현 도메인 모델과 리포지터리를 구현할 때 선호하는 기술은 JPA 를 들 수 있다. 데이터 보관소로 RDMS 를 사용할 때 객체 기반의 도메인 모델과 관계형 데이터 모델 간의 매핑을 처리하는 기술로 ORM 만한 것이 없다. 모듈 위치 리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다. 이는 리포지터리 구현 클래스를 인프라스트럭처 영역에 위치시켜서 인프라스트럭처에 대한 의존을 낮춰야 한다. DIP에 따라 리포지터리 구현 클래스는 인프라스트럭처 영역에 위치한다. 즉 , mongodb,mysql,postgre등등 구현기술은 인프라스트럭처계층에서 구현하고 언제든지 바꿔낄 수 있어야한다. 리포지터리가 제공하는 기능은.. 더보기
MYSQL ST_DISTANCE_SPHERE 함수 ST_DISTANCE_SPHERE 함수란? MySQL에서 제공하는 지리 함수 중 하나로, 두 지점 사이의 거리를 구하는 데 사용한다.구의 표면을 이용하여 두 지점 사이의 최단 거리를 계산하고 이를 미터로 환산해준다. ST_DISTANCE_SPHERE 함수의 사용법 ST_DISTANCE_SPHERE(point(lon1, lat1), point(lon2, lat2)) 위 구문에서 lon1, lat1, lon2, lat2는 경도와 위도 값을 나타내다. 이 함수는 두 지점 사이의 거리를 미터 단위로 반환한다. 약간 헷갈리는게 우리가 위도/경도가 순서가 익숙한데 여기서는 경도, 위도 순이라는 점이다. 나중에 데이터값이 1000개 10000개 점점 늘어날 수록 성능이 급격하게 떨어질 수 있을 것 같다. 추후에 공간.. 더보기
도메인주도개발 시작하기 3장 - 백 개 이상의 테이블을 한장의 ERD에 모두 표시하면 개별 테이블 간의 관게를 파악하느라 큰 틀에서 데이터 구조를 이해하는데 어려움을 겪음 - 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조ㅗ나 큰 수준에서 도메인 간의 관계를 파악하기 어려워진다 - 애그리거트는 모델을 이해하는 데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준도 된다. - 모델을 보다 더 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하기 때문에, 애그리거트는 복잡한 도메인을 단순한 구조로 만들어 준다. - 복잡도가 낮아지는 만큼 도메인 기능을 확장하고 변경하는데 필요한 노력(개발시간)도 줄어든다 - 애그리거트는 관련된 모델을 하나로 모았기 때문에 한 애그리거트에 속한 객체는 유사하거나 동일.. 더보기
도메인주도개발 시작하기 2장 1. 네 개의 영역 웹 애플리케이션의 표현 영역 HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환해 전달 응용 영역의 응답을 HTTP 응답으로 변환하여 전송 웹 애플리케이션의 응용 영역 표현 영역을 통해 사용자의 요청을 전달받아 시스템이 사용자에게 제공해야 할 기능을 구현 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임 웹 애플리케이션의 도메인 영역 도메인 영역은 도메인 모델을 구현 도메인의 핵심 로직을 구현 웹 애플리케이션의 인프라스트럭처 영역 구현 기술에 대한 것을 다루는 영역 RDBMS,SMTP 서버, 카프카 연동 등 논리적인 개념을 다루는 것이 아닌 실제 구현을 다룸 도메인 영역, 응용 영역, 표현 영역은 구현 기술을 사용한 .. 더보기
Spring log를 ELK를 구축하여 실시간 모니터링 왜 ELK를 선택했을까 ? ELK stack 로그 수집(logstash), 검색(elasticsearch), 데이터 시각화(kibana)를 통합한 서비스 장점 오픈소스 보편적으로 사용되며 레퍼런스가 많다. 모니터링 시스템까지 갖출 수 있다. logstash 외에 다른 tool을 사용하여 데이터 수집 기능을 대체할 수 있다. (순수 데이터 수집만을 목적으로 경량화된 모듈 beats를 제공한다) 수집된 데이터(로그) 검색 기능 Kibana를 연결하여 실시간으로 로그를 분석하고 시각화할 수 있다. 단점 설정이 복잡하다. 완전히 실시간으로 동작하지는 않는다. 관리할 로그의 규모에 비해 투자되는 리소스가 많아보인다.(인적, 시간적 리소스) elasticsearch와 함께 설치되는 X-Pack 플러그인을 무료로 사.. 더보기
mysql DB 데이터 백업/복구(export/import) dump뜨는법 내 로컬에 있는 mySQL의 사용자 정보나 테이블을 import/export 하고 싶을 때 sql 파일을 빼거나 밀어넣어 보자 주의해야 할 것은 mysql 접속해서 입력하는 게 아니라, mysql 밖 터미널에서 입력하는 것이다 ① DB Export mysqldump –u DB사용자 –p DB명 > 파일명 ex) mysqldump -u root -p shabDB > /home/user/test.sql ⑴ 사용자를 포함한 전체 DB를 export할 때는 -A 옵션 사용 mysqldump -u root -p -A > 파일명 ex) mysqldump -u root -p -A > test.sql ⑵ DB에서 특정 테이블만 제외하고 export할 때는 --ignore-table 옵션 사용 mysqldump –u D.. 더보기
Spring Data JPA 에서 Page와 Slice Spring Data JPA를 쓰면서 동적 페이징처리가 매우 쉬워졌다. 바로 PageRequest 객체가 자동으로 limit, offset으로 페이징하던 이전 쿼리를 자동으로 생성해주기 때문이다. Page와 Slice PageRequest 객체를 통해 페이징을 할때 반환형으로 Page와 Slice를 사용한다. 두 객체의 결과물과 성능은 어떤 차이가 있는지 확인해보자 Repository Interface //MemberRepository ... Page findPageBy(Pageable pageable); Slice findSliceBy(Pageable pageable); ... 위와같이 Page와 Slice를 반환해주는 리포지토리를 만들고 @Test public void paging() throws E.. 더보기
kubernetes awsLoadBalancerController 설치 및 환경변수 secret설정 최근 alb를 통해 그룹수준고정할당 60초동안 쿠키가 원래 왔던 서버로 돌아오게하기위한 설정을 하려고했지만 kubernetes를 awsLoadbalancercontroller가 없이 배포하게되면 classicLoadBalancer로 배포가 되게되어 그룹수준고정할당을 할 수 없었다. 이러한 문제를 해결하기위해 awsLoadBalancerController를 설치 해보려고한다. 1. Alb controller이란 EKS에서 kubernetes spec으로 aws nlb or alb를 생성하려고하면 aws allb controller를 설치해야한다. alb controller가 설치되어 있지않다면 aws loadbalacner 생성단계가 pending에서 멈추게되는 문제가 발생한다. 2. 동작원리 ALB co.. 더보기