profile
하마드
post-thumbnail

서비스에 GTID 기반 Mysql 복제(replication)서버를 구축해보자

프로젝트 개발을 진행하던 중, 실수로 테이블이 Drop 되거나 데이터가 유실되는 경우가 종종 발생하고 있었다.물론 was에서 db로 접속하는 계정은 drop 권한을 막아놓았지만...그럼에도 불구하고 db서버에서 root계정으로 직접 데이터파일을 조작하는 경우, 가장 무

2023년 10월 9일
·
0개의 댓글
·

MySQL 데이터베이스 복제 스레드와, 복제 관련 데이터

Mysql의 모든 변경 사항은 바이너리 로그(Binary log)라는 곳에 순서대로 기록됩니다. 이곳에 저장된 각 변경 정보를 이벤트라고 합니다. Mysql의 복제는 이 바이너리 로그를 기반으로 구현됐습니다. 바이너리 로그가 소스서버에서 레플리카 서버로 전달되고, 레플

2023년 10월 6일
·
0개의 댓글
·

데이터베이스 복제(Replication)란 무엇이고, 왜 할까?

이번 포스팅에서는, 데이터베이스 복제(Replication)에 대해 개념 설명과, 복제를 하는 목적을 설명하도록 하겠습니다.복제란 데이터베이스를 복제하는 것입니다.이렇게 말하면 큰일나겠죠?데이터베이스 사용 및 운영에서 가장 중요한 두 요소는 확장성과 가용성입니다. 확장

2023년 10월 6일
·
0개의 댓글
·

인덱스 - R-Tree

B-Tree 인덱스가 인덱스를 구성하는 칼럼의 값이 1차원의 스칼라 값이라면, R-Tree 인덱스는 2차원의 공간 개념 값이다. Mysql은 공간 확장을 통해 공간 정보의 저장 및 검색 기능을 수행할 수 있는데, 이 기능에는 크게 세 가지 기능이 포함된다. 공간

2023년 9월 18일
·
0개의 댓글
·
post-thumbnail

인덱스 - 함수 기반 인덱스

칼럼의 값을 변형해서 만들어진 값에 대해, 인덱스를 구축할 때도 있다. 이 경우 함수 기반의 인덱스를 활용하는데 이 방법은 두 가지로 구분된다.가상 칼럼 활용한 인덱스함수를 이용한 인덱스함수 기반 인덱스의 내부적 구조 및 유지 방법은 B-Tree 인덱스와 동일하다.만약

2023년 9월 16일
·
0개의 댓글
·
post-thumbnail

인덱스 - 전문 검색 인덱스(full text index)

이전 B-Tree에서 알아본 바로는 인덱스는 전체 일치나 좌측 일부 일치 검색만 활용 가능했다.전문(full text) 검색은 문서의 내용 전체를 인덱스화해서 특정 키워드가 포함된 문서를 검색하는 기능이다.그러나 이 경우는 innodb에서 제공하는 일반적인 용도의 b-

2023년 9월 16일
·
0개의 댓글
·
post-thumbnail

인덱스 - B-Tree

B-Tree는 가장 범용적인 인덱스 알고리즘입니다. 칼럼의 원래 값을 변형하지 않고, 항상 정렬된 상태로 유지하는 알고리즘입니다.B-Tree는 최상위에 하나의 루트 노드(Root node)가 존재하고, 그 하위에 자식 노드가 붙어있는 형태입니다.가장 하위에 있는 노드를

2023년 9월 12일
·
0개의 댓글
·
post-thumbnail

인덱스 - 개념

먼저 MySql에서 사용 가능한 인덱스의 종류와 특성에 대해 알아보도록 하겠습니다.데이터의 저장 매체, 즉 디스크는 컴퓨터에서 가장 느린 부분입니다.따라서 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건인게 대부분입니다.아래에서는 디스크는 읽어들이는

2023년 9월 12일
·
0개의 댓글
·
post-thumbnail

Spring Data Jpa를 활용한 검색 기능 개발하기

피움 서비스 개발을 진행하면서, JPA Method Naming 기능을 활용하여 %Like% 쿼리를 생성해 검색 기능을 개발한 과정을 기록한다.먼저 개발하려는 기능은 다음과 같다식물사전 데이터베이스에 포함된 식물의 이름을 기준으로, 해당 검색어를 포함한 식물의 목록을

2023년 8월 28일
·
0개의 댓글
·
post-thumbnail

피움 서비스의 Querydsl 적용 과정

개요 우아한테크코스 5기 피움 프로젝트를 진행하면서, 필터링 기능 구현을 위해 Querydsl을 적용한 과정을 정리한다 이전글 과정 > 본 프로젝트는 다음과 같은 환경에서 구성되었다 > Springboot 3.1.1 > JAVA 17 Querydsl 설정

2023년 8월 16일
·
0개의 댓글
·
post-thumbnail

피움 서비스의 Querydsl 도입 이유

우아한테크코스 5기 피움 프로젝트를 진행하면서, 필터링 기능을 구현하기 위해 Querydsl 라이브러리를 도입한 과정을 정리한다.내가 담당한 파트는 아래와 같다."사용자가 보유한 반려 식물의 관리 이력을 최신 순으로 조회하기" 반려 식물의 관리 이력 은 History

2023년 8월 14일
·
0개의 댓글
·
post-thumbnail

[데이터베이스] 공유 락과 배타 락

락은 데이터베이스의 무결성 유지를 위해 중요한 개념이다. 락의 개념 중 대표격으로 나뉘어지는 공유 락과 배타 락에 대해 포스팅하도록 하겠다. 공유 락 공유 락(Shared Lock)은 "읽는 동안 수정을 막는 락"이라고 생각하면 편하다. 한 트랜잭션에서 어떤 데이터에

2023년 8월 9일
·
1개의 댓글
·

[데이터베이스] 트랜잭션 격리 수준

트랜잭션 격리 수준에 대해 언급하기에 앞서, 트랜잭션 격리 수준에 따라 일어날 수 있는 현상을 먼저 언급하도록 하겠다.더티 읽기(dirty read) : 어떤 트랜잭션이 커밋되기 전에 다른 트랜잭션에서 데이터를 읽는 현상. 사용자 a가 값을 9에서 10으로 변경하고 커

2023년 8월 6일
·
0개의 댓글
·

[데이터베이스] 실행계획과 옵티마이저, 인덱스

데이터베이스에게 sql을 통해 질의를 수행한다고 가정해보자. 이 때 데이터베이스의 결과 통지 과정은 다음과 같다.데이터베이스가 sql을 받고 구문 오류가 없는지를 보는 파스 작업을 한다. 오류가 나면 신택스 오류 메세지를 날린다.파스를 통과하면 sql문에 필요한 데이터

2023년 8월 6일
·
0개의 댓글
·
post-thumbnail

[트러블슈팅] @SpringbootTest의 RANDOM_PORT 환경에서 @Transactional 어노테이션을 사용했을 때, RestAssured GET 요청이 수행되지 않는 경우(트랜잭션 격리 이해하기)

개요 피움 서비스의 인수 테스트를 작성하던 도중, 실제 포트에 애플리케이션을 구동시켜 테스트를 하는 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 환경에서 테스트를 할 때, 테스트

2023년 7월 30일
·
0개의 댓글
·

HTTP 캐싱

참고 : https://www.youtube.com/watch?v=UxNz_08oS4Ehttp 캐시는 특정 응답의 요청을 어딘가에 저장해놨다가. 동일한 요청이 올 때 재사용 하는 것을 말한다.응답을 재사용하면 서버까지 질의를 하는 과정을 거치지 않으니 클라이언

2023년 7월 30일
·
0개의 댓글
·
post-thumbnail

로드 밸런싱

로드 밸런싱을 이해하기 위해서는 스케일 업과 스케일 아웃에 대해서 먼저 인지해야 한다.만약 서비스에 사용자가 몰려들어 현재 내 서버에 부하가 크게 왔다고 생각해 보자. 그렇다면 먼저 들 수 있는 생각은 “서버의 하드웨어 성능을 높이면 되지 않을까?” 와 같은 것이다.따

2023년 7월 29일
·
1개의 댓글
·
post-thumbnail

포워드 프록시와 리버스 프록시

(출처 : 네이버 지식백과)사전 정의에 따르면 프록시란 “타인을 위하여 행동하거나 발언할 권한을 부여받은 사람이다”, 여기서 “타인을 위하여 행동”, 즉 “대리한다, 대신한다”라는 키워드에 집중하면 될 것이다.(출처 : 네이버 지식백과)일단 먼저 컴퓨터 세계에서 “프록

2023년 7월 29일
·
0개의 댓글
·
post-thumbnail

AssertThatThrownBy와 AssertThatCode의 차이

우테코 레벨 2 주문 기능 개발 미션을 수행하던 중, 주문 정보 관련 객체인 "Order"를 생성할 때 생성자 이내에 검증 로직을 추가했다.따라서 해당 객체의 정상적 생성을 테스트하기 위해 다음과 같은 테스트를 진행했다. 객체를 생성할 때 정상적이면 아무런 예외가 던져

2023년 6월 5일
·
0개의 댓글
·

Repository를 왜 쓸까?

우아한테크코스 지하철 미션을 수행하면서, 내 영속성 계층에서 조회한 자원으로 "지하철 호선"과 "호선에 속한 역의 정보", 그리고 "각 역 사이의 거리" 정보를 모두 가져와 "Line"이라는 객체를 만들어야 하는 순간이 있었다.초기 Service 클래스의 형태는 대충

2023년 5월 23일
·
0개의 댓글
·