본문 바로가기

분류 전체보기

(297)
Elasticsearch Java Client !(엘라스틱서치 자바 클라이언트,High-Level Rest Client) 자바 언어를 위해 제공되는 클라이언트에는 두 가지 종류가 있다. 내부적으로 HTTP REST API를 사용해 통신하는 방식과 네티(Netty)모듈을 이용해 네이티브 클라이언트를 통해 통신하는 방식이다. REST Client Transport Client(Netty) Java High Level REST Client라고 불린다. HTTP방식을 이용해 엘라스틱서치와 통신한다. 내부적으로는 HttpClient 모듈을 사용한다. HTTPS 사용이 가능하다. Java Client라고도 불린다. 초기부터 제공되던 클라이언트 방식으로, 상대적으로 빠른 속도를 보장한다. 소켓을 이용해 엘라스틱서치와 통신한다. 내부적으로는 Netty모듈을 사용한다. 초기버전의 엘라스틱서치에서는 소켓을 이용하는 Transport 클라이언..
[MacOS 개발환경 #9] DynamoDB 로컬(Local) 환경 설치 - Java 맥(MacOS) 개발환경 - M1 Apple Silicon - 다이나모디비(DynamoDB) 로컬(Local) 환경 설치 및 실행 - Java 다운로드 > 압축해제 > Java로 실행 > 테이블 확인 > 포트변경 실행 확인 다운로드 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html zip 파일 다운로드 압축해제 및 파일 이동 터미널 java 실행 1 java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb 테이블 확인 - 다른 터미널로 DynamoDB 실행 포트번호로 접속 확인 1 aw..
AWS ElasticSearch 구축 및 기초 세팅 1. ElasticSearch 란? 아파치 루씬 기반의 검색 엔진이다. 자바로 개발되어 있으며 오픈 소스로 활용이 가능하다. 2. ElasticSearch 특징 분산 방식 페타바이트의 데이터 처리가 가능하다. 역색인(inverted index) 방식 키워드를 통해 문서를 찾아내는 방식이다. 아주 빠른 전체 텍스트 검색이 가능하다. 문서에 나타나는 모든 고유한 단어 목록을 만들고, 각 단어가 발생하는 모든 문서를 식별한다. 실시간에 가까운 검색 제공, 빠르다 해쉬테이블 방식이어서 검색시 O(1)의 효과를 낸다 RDB 같은 경우 O(n) 기타 기본 기능 - 리밸런싱 및 라우팅은 자동 수행, 복원력, 인덱스 수명 관리, 데이터 롤업 등 3. ElasticSearch 구조 인덱스(색인) ex. 고객 인덱스, 주..
[JPA] 양방향 관계에서 infinite recursion 해결법 ​ nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) ​ JPA에서 대표적인 문제가 몇개 있는데 그 중 하나가 infinite recursion이다. @OneToMany, @ManyToOne 어노테이션으로 양방향 관계를 맺어주면 서로가 서로를 무한 참조하면서 발생한다. ​ ​ 이 문제를 다루려고 저번 포스팅에서 조회를 빼고 데이터 삽입만 진행했다. [JPA] JPA 시작하기(3) - @OneToMany, @ManyToOne 양방향 ​JPA에서 @OneToOne, @OneToMany, @ManyToOne, @ManyToMany 어노테이션을 이용해 테이블간...
[Java, JPA] 도메인 객체간 연관관계에서 즉시로딩과 지연로딩 and 프록시 객체 특정 게시글을 클릭 할 때, 게시글과, 각 게시글에 딸린 첨부파일들을 데이터베이스에서 로딩하여 엔티티객체에 저장하여야하는데, 구현한 로직해서 게시글을 누르면 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: kr.com.test.jpa.domain.Board.board_files, could not initialize proxy - no Session 위와 같이 LazyInitializationException이 발생하였다. 에러를 구글링해보니 엔티티 간 연관관계 설정시에 즉시로딩, 지연로딩에 관한 설정이 필요했다. 보통 엔티티를 설계할 때, 엔티티와 연관된 또다른 엔티티들이 같이 포함되어..
[jpa] 다양한 연관관계 매핑 RDB에는 앞서 언급했던 것 보다 더 많은 관계가 존재한다. 1:N(@OneToMany, @ManyToOne) 1:1(@OneToOne) N:M(@ManyToMany) 이를 다중성이라고 한다. 각각의 다중성에서 형성될 수 있는 연관관계들과 그 특징을 나열해보겠다. 모든 다중성은 왼쪽이 연관관계의 주인이라고 가정하겠다(다대일 -> 다가 연관관계의 주인) 다대일 N:1의 관계이고, N이 연관관계의 주인인(외래키를 관리하는) 형태이다. RDB에서 외래키는 항상 N쪽에 존재한다는 특성에 가장 잘 들어맞는다. 그러므로 대부분 이 형태를 사용한다. 다대일 단방향(N:1) Member.team 필드로 TEAM 테이블의 TEAM_ID 외래키를 관리한다. Member는 Team을 참조할 수 있지만 Team은 Member..
[JPA] @OneToOne, 일대일[1:1] 관계 일대일 [1:1] 일대일 관계는 그 반대도 일대일이다. 일대일 관계는 특이하게 주 테이블이나 대상 테이블 중에 외래 키를 넣을 테이블을 선택 가능하다. 주 테이블에 외래 키 저장 대상 테이블에 외래 키 저장 외래 키에 데이터베이스 유니크 제약조건 추가되어야 일대일 관계가 된다. 일대일 - 주 테이블에 외래 키 단방향 회원이 딱 하나의 락커를 가지고 있는 상황이다. 반대로 락커도 회원 한명만 할당 받을 수 있는 비즈니스 적인 룰이 있고, 이때, 둘의 관계는 일대일 관계이다. 이 경우 멤버를 주 테이블로 보고 주 테이블 또는 대상 테이블에 외래 키를 저장할 수 있다. 단, 유니크 제약조건을 추가한 상태에서만. 다대일[N:1] 단방향 관계 매핑과 JPA 어노테이션만 달라지고, 거의 유사하다. 일대일 - 주 테..
[ Database ] ER 다이어그램 / ERD 기호 및 표기법 데이터베이스를 다루는 과정에서 한 번쯤은 들어봤을 ​ERD. ​ 이번 게시글에서는 ERD에 대해 다뤄보자. ​ ​ ​ ​ ERD ' Entity Relationship Diagram ' ​ 흔히 E-R 다이어그램이라고 불리우며 ERD 라고 줄여 부르기도 한다. ​ 영어 약자 그대로 '​존재하고 있는 것(Entity)들의 관계(Relationship)을 나타낸 도표(Diagram)' 이다. ​ 여기서 말하는 존재하고 있는 것이란 데이터를 뜻하니 데이터들의 관계를 나타낸 도표인 셈이다. ​ 그럼 데이터의 관계를 어떻게 나타내는지 그림들을 참고해 이해해보자. ​ ​ 먼저 ERD의 규칙을 살펴보면 아래와 같다. A는 부모, B는 자식의 관계를 가진 ERD이다. 여기서 '~B로 구성되어 있다'라는 말이 살짝 헷갈..