[Database] 클러스터링 인덱스와 논 클러스터링 인덱스 0. 들어가기전에 자주 나오는 인덱스 개념인 클러스터링 인덱스와 논 클러스터링 인덱스에 대해서 알아보았습니다. 1. 클러스터링 인덱스 MySQL InnoDB에서는 클러스터링 인덱스를 항상 사용한다.보통 테이블의 PK에 적용이 되는 인덱스이며, PK가 없으면 not null + unique한 컬럼에 사용이 되며, 이마저도 없으면 임의의 값으로 MySQL이 만들어서 사용한다. 그래서 항상 InnoDB를 사용하는 테이블에는 클러스터링 인덱스가 적용되어 있다고 할 수 있다. 그렇다면 왜 이런 방식을 사용하는 걸까? 그 이유는 검색 속도가 빠르기 때문이다. 클러스터링 인덱스는 테이블을 물리적으로 정렬을 한 인덱스이다. 즉, PK가 있다면 PK 기준으로..
분류 전체보기
[Database] 인덱스 0. 들어가기 전에 성능 측정 공부를 하기전에 인덱스에 대해서 알아봤습니다. 1. 인덱스 인덱스는 무엇일까? 해당하는 단어를 사전에서 찾아보면 색인이라고 되어있다. 즉 무언가를 찾을 때 더 빨리 찾을 수 있게 하는 방법이라는 뜻이다. 좀 더 프로그래밍 관점에서 설명하자면 인덱스는 저장 성능(쓰기, 삭제, 수정) 성능을 희생하면서 읽기 성능을 높이는 방법이다. 그렇다면 이런 생각이 들 것이다. 저장 성능이 떨어진다고? 항상 좋은 것만은 아니네? 맞는 말이다. 일반적으로 인덱스는 10%의 저장소의 비율을 차지하고, 인덱스의 정렬 비용 때문에 저장 성능이 떨어진다. 따라서 인덱스는 읽기 성능을 높이기 때문에 저장 횟수보다 읽기 횟수가 더 많은 서비스에서 사용되면 좋다. 클라우드 서비..
build 할 때 RestDocs 파일이 생성이 안되는 문제 트러블 슈팅 0. 들어가기 전에 저희 프로젝트는 RESTDocs를 파일을 만들어서 API를 문서화를 했습니다. 각각의 API를 종류에 맞게 adoc 파일로 관리를 해 유지보수를 하기 쉽게 사용하고 있었습니다. 하지만 이 방식의 단점은 한눈에 어떤 종류의 API가 있는지 파악하기가 어려웠습니다. 그래서 만들어진 adoc 파일을 하나의 파일로 만들 수 있는 gradle task를 만들어 사용했습니다(참고 PR). 하지만 이 과정에서 문제가 발생했는데, 이 글은 그 문제를 어떻게 해결했는지에 대해서 설명하는 글입니다. 1. 문제 상황 먼저 intellij에서 spring boot를 실행시키면 gradle에 작성한 task 대로 정상 작동합니다. ta..
[Nginx] 하나의 EC2 안에서 React와 Spring 통신하기 0. 들어가기 전에 바톤 팀의 배포 EC2는 위 그림과 같았습니다. 한 EC2 안에 react와 spring이 띄워져 있으니 localhost로 API 요청을 보내면 좋겠다고 생각했습니다. 왜냐하면 현재 EC2 인스턴스가 EIP를 받지 않은 상태이기 때문에 불의의 사고로 인해 EC2가 재부팅되면 IP가 변경되기 때문입니다. IP가 변경되면 그에 해당하는 react의 코드를 수정해야 하니 불편한 상황이 생길 것 같았습니다. 그래서 프론트엔드 크루분들께 'localhost로 요청하는 게 좋을 것 같다'고 하며 수정을 요청했습니다. 하지만 실제로 배포된 코드를 살펴보니 문제가 생겼습니다. 이 글은 이때..
[Docker] 도커 컨테이너 간 통신 트러블 슈팅 0. 들어가기 전에 바톤 프로젝트를 진행하면서 마주쳤던 컨테이너 간의 통신 문제를 재현해보고 해결 방법을 알아보겠습니다. 1. 문제 상황 바톤 프로젝트는 아래와 같이 백엔드 인프라 환경이 구성되어있습니다. 간단하게 설명하자면 깃허브에서 dev/BE로의 push 이벤트가 발생하면 github actions로 빌드를 하고 빌드된 파일을 이미지로 만들어 docker hub에 push 합니다. 그 후 dev EC2안에 있는 self hosted runner가 이미지가 업데이트된 것을 확인하고 이미지를 pull을 받아 자동으로 실행시켜 줍니다. deploy 환경에도 마찬가지입니다. 이 중에서 문제가 발생했던 환경은 public subnet(dev) 입니다. 저희..
[Docker] 바톤 팀 인프라 구조로 알아보는 도커 0. 들어가기 전에 우테코 프로젝트를 하면서 아래와 같은 그림(by 헤나)을 만나게 되었습니다. ??? 아직 확정된 그림은 아니지만, 모르는게 너무 많았습니다. 도커는 단순히 환경 분리를 위한 목적? 으로만 알고 있었는데 개념이 잘 잡혀있지 않으니 어떻게해서 저런 그림이 나온지 1도 몰랐습니다.. Docker Hub는 뭐고 돌고래는 왜 고래 위에 타 있지? 아무튼 이 글을 통해 도커의 개념을 이용해서 위 그림을 해석해 보는 시간을 가져보겠습니다. 1. 도커란? 애플리케이션 개발, 배포 및 실행을 하기 위한 개방형 오픈 플랫폼 위에 있는 그림을 이해하려면 먼저 도커에 대한 이해가 필요합니다. 도커 공식 문서에 따르면, 도커를 사용하면 애플리케이션과 인프..
바톤 팀이 Java17를 사용하는 이유 0. 들어가기 전에 우테코 팀 프로젝트에서 저희 팀이 자바 버전을 선택한 이유에 대해서 정리해보았습니다. 1. Java11 vs Java 17 자바 버전을 고르기 위해 후보가 몇 가지 있었습니다. 바로 Java 11과 Java 17입니다. 이외에도 Java 1.8과 Java 20도 후보에 올랐었습니다. Java 1.8은 Java 11에 비해서 부족한 함수(ex) List.of)를 가지고 있고, 기본 GC가 Parallel GC를 사용하므로 11부터 기본 GC로 채택된 G1 GC도 사용하지 않았기 때문에 탈락 했습니다. Java 20은 현재로서 가장 최신버전이기 때문에, 하위 버전의 장점을 모두 가지고 있고 Java 21로 변경하기 용이하다는 장점이 있었습니다. 하지..
[DataBase] Flyway 톺아보기 0. 들어가기 전에 테코톡을 준비하면서 알아본 flyway를 정리해보았습니다. 1. Flyway란? 오픈소스 데이터베이스 마이그레이션 툴 Flyway의 공식 홈페이지에서는 flyway를 오픈소스 마이그레이션 툴이라고 소개하고 있습니다. 일반적으로 마이그레이션은 데이터나 소프트웨어를 한 시스템에서 다른 시스템으로 이동하는 것을 의미합니다. 그렇지만 flyway에서는 데이터베이스의 변경을 마이그레이션이라고 합니다. 즉, 데이터베이스에 테이블이 추가, 삭제, 수정되는 행위를 마이그레이션이라고 합니다. 2. 특징 Flyway는 7가지의 특징이 있습니다. 2.1 Migrate SQL파일을 추가해서 테이블을 변경할 수 있습니다. 자세한 방법은 아래에서 알아보겠습니다. 2.2..