DEV 52

데이터 플랫폼 설계와 구축 | 01. 데이터 플랫폼 소개 | 데이터 웨어하우스부터 하둡 전성기까지의 흐름

# 기본 용어 - 데이터 웨어하우스 : 여러 소스 시스템들의 데이터를 한 군데로 구조화해 모으는 저장소 -> 기업의 의사결정 체계가 직관 기반에서 데이터 기반으로 변화 - 클라우드 데이터 플랫폼 : 모든 유형의 데이터를, 거의 무제한의 장소에서 비용 효과적인 클라우드 네이티브 방식으로 수집, 통합, 변환, 분석, 관리되는 데이터 플랫폼 -> 기존 방식의 문제 3가지 3V : 데이터 규모Volume, 데이터 다양성Variety, 데이터 속도Velocity # 데이터 웨어하우스 관련 동향 1. SaaS의 활용이 폭발적으로 증가. 비정형, 반정형 유형의 데이터가 생성됨 2. 마이크로서비스 아키텍처로의 변환 3. 기존 정형 데이터 분석만으로는 얻을 수 없는 데이터를 얻기 위해 원시 데이터를 직접 액세스하는 경향..

DEV/Data Platform 2023.10.30

ElasticSearch Tutorial | 05. Fileabeat 연결하기

Fileabeat 다운로드 download page link : https://www.elastic.co/kr/downloads/past-releases/filebeat-7-15-0 tar for MAC OS : https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.0-darwin-x86_64.tar.gz 프로젝트 루트로 이동해서 tar 파일을 다운로드 받습니다. cd {YOUR_PROJECT_ROOT}/filebeat wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.0-darwin-x86_64.tar.gz 압축을 해제합니다 tar -xvf filebeat..

ElasticSearch Tutorial | 04. Logstash 연결하기

Logstash 다운로드 download page link : https://www.elastic.co/kr/downloads/past-releases/logstash-7-15-0 tar for MAC OS : https://artifacts.elastic.co/downloads/logstash/logstash-7.15.0-darwin-x86_64.tar.gz 프로젝트 루트로 이동해서 tar 파일을 다운로드 받습니다. 지금은 ES를 standalone으로도 구성해보고, 뒤에서 cluster로도 구성해볼겠습니다 cd {YOUR_PROJECT_ROOT}/logstash wget https://artifacts.elastic.co/downloads/logstash/logstash-7.15.0-darwin-x8..

ElasticSearch Tutorial | 03. Kibana 연결하기

Kibana 다운로드 ElasticSearch에서 다운받았던 버전과 똑같은 버전의 Kibana를 다운로드 받습니다. download page link : https://www.elastic.co/kr/downloads/past-releases/kibana-7-15-0 tar for MAC OS : https://artifacts.elastic.co/downloads/kibana/kibana-7.15.0-darwin-x86_64.tar.gz 프로젝트 루트로 이동해서 tar 파일을 다운로드 받습니다. 지금은 ES를 standalone으로도 구성해보고, 뒤에서 cluster로도 구성해볼겠습니다 cd {YOUR_PROJECT_ROOT}/kibana wget https://artifacts.elastic.co/d..

ElasticSearch Tutorial | 02. Cluster 구성해보기

ElasticSearch Cluster 구성하기 standalone으로 구성해볼 때 사용했던 디렉토리 구조는 아래와 같습니다. ./standalone ├── elasticsearch-7.15.0 // 이 디렉토리 전체를 복사 │ ├── LICENSE.txt │ ├── NOTICE.txt │ ├── README.asciidoc │ ├── bin │ ├── config │ ├── data // 직전 실행 과정에서 남아있던 파일을 삭제 │ ├── jdk.app │ ├── lib │ ├── logs // 직전 실행 과정에서 남아있던 파일을 삭제 │ ├── modules │ └── plugins └── elasticsearch-7.15.0-darwin-x86_64.tar.gz cluster로 구성하기 위해 ela..

ElasticSearch Tutorial | 01. 무작정 시작하기

1. Easticsearch 7.* 다운로드하기 ES 7.* 버전이 아무런 설정을 하지 않아도 127.0.0.1:9200 포트로 접근이 가능합니다. download page link : https://www.elastic.co/kr/downloads/past-releases/elasticsearch-7-15-0 tar for MAC OS : https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.0-darwin-x86_64.tar.gz 프로젝트 루트로 이동해서 tar 파일을 다운로드 받습니다. 지금은 ES를 standalone으로도 구성해보고, 뒤에서 cluster로도 구성해볼겠습니다 cd {YOUR_PROJECT_ROOT}/sta..

Entity의 Id를 직접 지정할 때 주의사항 (persist vs merge)

시스템이 매우 큰 경우 또는 어떤 이유로든 Entity의 @Id를 직접 지정해야하는 경우가 있습니다. 이럴 때에는 아래와 같이 Persistable의 isNew를 override 해주어야 합니다. isNew 판단 여부는 Audit의 기능을 사용했습니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member extends BaseEntity implements Persistable { @Id @Column(name = "member_id") private String id; @Override public boolean isNew() { return super.getCreatedDate() == null; ..

DEV/Spring Data JPA 2023.09.27

JpaRepository를 custom해서 사용하는 방법

본 포스팅에서 제공하는 방법은 Java의 정식 문법을 따르지 않고, spring-data-jpa에서 제공하는 방법을 다루고 있습니다. 본문에 앞서 주의 사항이 먼저 있습니다. 비즈니스의 핵심 로직을 다루는 리포지토리와 화면에 맞춘 정적 쿼리를 조회하는 리포지토리는 분리해야합니다. custom repository의 기능 사용해서 하나의 entity에 대해 하나의 repository만 사용하게 되면, 어떤 경우에 어떤 메서드를 사용해야하는지 파악하기 어렵게 됩니다. 그리고 비즈니스 핵심로직과 화면에 맞춘 쿼리는 변경주기가 다르다는 점도 고려해야합니다. 먼저 커스텀 메서드가 필요한 인터페이스를 생성합니다. 이를 구현한 클래스를 생성합니다. 이 때 클래스 이름의 postfix는 반드시 Impl이어야 합니다. p..

DEV/Spring Data JPA 2023.09.24

QueryHint를 적용하기 전에 고려해볼 사항

변경감지를 위해서는 원본과 현재의 값을 어쩔 수 없이 둘 다 가지고 있어야 합니다. 어떤 부분이 변경되었는지 파악할 수 있어야하니까요. 정말 조회에만 영향이 있는 쿼리라면 별도의 MemberReadOnlyRepository를 분리해서 읽기 전용 조회를 구성할 수도 있습니다. 하지만 쿼리 힌트보다는 1차 캐시를 우선 적용해서 DB로의 쿼리 자체를 줄이는 것을 먼저 적용하는게 우선입니다. redis와 같은 별도의 구성 없이 쿼리힌트만으로 최적화가 될 수 있는지는 성능 테스트를 진행해봐야 합니다. @Repository public interface MemberJpaRepository extends JpaRepository { @QueryHints(value = @QueryHint(name = "org.hibe..

DEV/Spring Data JPA 2023.09.24

@EntityGraph로 fetch join 쉽게 쓰기

@ManyToOne, @OneToOne을 사용할 때는 몇 가지 정해진 규칙이 있습니다. 1. 불필요한 JOIN과 조회가 연속적으로 일어나는 것을 막기 위해 fetchType.LAZY 사용한다. 2. fetchType.LAZY로 인한 N+1 문제를 해결하기 위해 fetch join을 사용한다 쿼리를 작성하다보면 간단한 fetch join을 매번 @Query를 사용해서 JPQL을 직접 작성하기 번거로울 때가 있습니다. 이럴 때는 fetch join을 간단하게 적용하게 도와주는 @EntityGraph를 사용할 수 있습니다. @Repository public interface MemberJpaRepository extends JpaRepository { @Override // @Query("select m fr..

DEV/Spring Data JPA 2023.09.24