ETC 33

모노 레포(Monolithic Repository)

오늘은 모노 레포 구조에 대하여 소개해보려고 합니다. 회사에서 업무를 하다보면, 프로젝트 별로 레포를 구분하기도 하는데 프로젝트가 점점 많아지면서 레포지토리 갯수가 그만큼 많아지게 되면, 유지보수 측면에서는 점점 복잡하게 됩니다. 프로젝트가 나뉘어져서 레포지토리가 나뉘더라도, 사용하는 라이브러리나 코드는 비슷하다보니 모노 레포를 적용하면 훨씬 관리가 용이해지는 효과를 볼 수 있습니다. 아래의 링크는 'Why Google Stores Billions of Lines of Code in a Single Repository'라는 제목으로 구글에서는 왜 하나의 레포로 관리하고 있는지 설명하는 글입니다. https://dl.acm.org/doi/pdf/10.1145/2854146 위의 글에서 설명하는 모노 레포의..

ETC/Git 2024.01.21

[mysql] fulltext index ngram parser

개요 fulltext index에 대해서 정리를 한 번 했었는데(https://seokhyun2.tistory.com/92), fulltext index에서 토큰을 나누는 기본 방식은 띄어쓰기를 기준으로 분리를 합니다. 띄어쓰기를 기준으로만 분리를 하게 되면, 한국어에서는 조사가 다 붙어있어서 검색이 어렵습니다. 예를 들면 '한국'이란 명사에 대해서 '한국은', '한국에서', '한국의' 와 같이 조사가 붙어서 띄어쓰기로만 토큰을 나누게 되면 다 별도의 토큰으로 인식이 되어, '한국'이라는 명사가 있는 문장만 찾고 싶은데 찾을 수 없게 됩니다. 그래서 추가적으로 제공되는 기능이 바로 ngram parser입니다. 원리 ngram parser가 무엇인지, 원리를 알아볼텐데요. ngram에서 n은 숫자이고, ..

ETC/MySQL 2023.04.23

[mysql] fulltext index

개요 mysql 데이터베이스를 사용하다보면, 조회 속도 개선을 위한 작업을 많이 하게 됩니다. 그래서 index를 많이 사용하게 되는데, 기본적인 index는 column값이 정확하게 일치하는 기준으로 사용할 수 있습니다. column값이 텍스트를 활용하고, 값이 일부만 일치하는 경우 조회를 하기 위해서는 like 쿼리를 사용하는데, 그 속도가 매우 느립니다. 완전 동일한 조회가 아니라서 기본적인 index를 사용할 수도 없구요. 이럴 때, fulltext를 사용하면 조회 속도를 개선할 수 있습니다. 원리 fulltext index를 사용하는 방법을 알아보기 전에, 원리를 우선 간단하게 알아보겠습니다. column의 값이 영어 이름이라고 가정하고, '마이클 잭슨'과 '마이클 조던' 이라는 2개의 값이 존..

ETC/MySQL 2023.04.09

svelte 설치 및 세팅

프론트엔드 개발자는 아니지만, 프로토타이핑을 할 일이 있어서 몇가지 프레임워크를 보다가 svelte(스벨트)를 접하게 되어서 사용하다보니 편의성에 매료되었습니다. svelte의 특징은 다른 글에서 정리해보도록 하고, 오늘은 svelte를 세팅하는 글을 작성해보겠습니다. 먼저 svelte도 react나 vue처럼 node를 기반으로 하고 있습니다. node를 기반으로 하고 있으므로 node가 설치되어 있어야 합니다. 참고로 mac os에서 brew install node 명령어로 brew를 활용해서 간단하게 node를 설치할 수 있습니다. 공식 홈페이지에서는 svelte를 설치하는 2가지 방법을 알려주고 있습니다. (https://svelte.dev/blog/the-easiest-way-to-get-sta..

ETC/Svelte 2022.02.04

특정 port 사용 중인 process 찾기. (port is already in use / port is already allocated)

서버를 개발하고 배포하다보면 port is already allocated 혹은 port is already in use 라는 문구를 자주 보게 됩니다. 로컬에서 개발하다보면 특히 어떤 프로세스가 사용하고 있는지 기억이 안 날 때도 종종 있는데, 그럴 때 아래의 명령어를 사용하면, 해당 포트를 사용 중인 프로세스를 조회할 수 있습니다. lsof -i tcp: 자리에 조회하려는 포트 번호를 입력하면 됩니다. ex) lsof -i tcp:3000

ETC/Ubuntu 2022.02.03

[Kotlin] 스프링부트 프로젝트 생성

스프링부트 프로젝트 생성은 아래의 페이지에 접속해서 생성합니다. https://start.spring.io/ 접속하면 아래와 같이 설정하는 페이지가 보일텐데요. 여기서 원하는 옵션으로 선택하고 GENERATE를 눌러 다운받은 zip 파일을 압축해제하여 사용하시면 됩니다. 스프링은 이렇게 기본 프로젝트를 생성할 수 있는 웹페이지를 제공하고 있으니 활용해서 프로젝트를 생성해주시면 됩니다.

ETC/Kotlin 2021.08.21

[Kubernetes] Taint / Toleration

쿠버네티스 클러스터를 운영하다보면, 특정 워커에는 배포가 되지 않도록 막고 싶은 경우가 생길 수 있습니다. 예를 들어, 딥러닝 어플리케이션들이 배포되는 클러스터에서 일부 워커에만 GPU가 붙어있을 때 GPU가 필요없는 어플리케이션들은 해당 워커들에 배포가 되지 않도록 막고 싶은 경우입니다. 이럴 때 사용할 수 있는 기능이 Taint/Toleration 입니다. Taint Taint란 한국어로는 얼룩이라는 뜻으로, taint가 설정된 노드에는 일반적인 pod는 배포될 수 없으며 taint가 지정된 노드에는 toleration을 적용하면 배포할 수 있습니다. Taint 설정 방법 Taint는 아래와 같이 설정할 수 있습니다. >> kubectl taint node [NODE_NAME] [KEY]=[VALUE..

ETC/Kubernetes 2021.03.21

[git] merge, rebase

0. branch 깃에서 merge와 rebase를 알아보기 위해서는 브랜치부터 알고 넘어가야 합니다. 브랜치는 가지라는 뜻으로 소스코드를 여러 버전으로 관리할 수 있게 해줍니다. 여러 버전으로 관리함으로써, 현재 배포되어 있는 브랜치를 따로 관리하고, 기능을 개발하고 있는 버전의 브랜치 또는 급하게 수정해야되는 핫픽스 브랜치 등으로 나눠서 관리하여 코드 관리를 편하게 할 수 있습니다. 깃헙에서 레포지토리를 처음 생성하면 main이라는 기본 브랜치를 생성해줍니다. main에서 출발하는 브랜치를 생성하면, 처음에는 현재 main 브랜치와 똑같은 상태가 복사되어 새로운 브랜치가 생성이 됩니다. 브랜치 생성은 아래의 명령어로 수행할 수 있습니다. git branch new_branch 생성된 브랜치로 전환하려..

ETC/Git 2021.03.06

[Redis] Redis란? & Redis 사용방법

0. 개요 서비스를 개발하다보면, 서비스 속도가 종종 문제를 일으킵니다. 그래서 속도를 높이기 위해 다양한 방법을 활용하는데, 그 중에 오늘은 Redis를 활용하는 방법을 알아보고자 합니다. 일반적으로 데이터베이스는 저장장치에 저장이 되는데, 데이터베이스를 조회하려면 저장장치로 i/o가 발생합니다. 캐시는 in-memory 방식을 활용하여 데이터를 임시로 저장해두기 때문에 저장장치의 i/o보다 훨씬 빠르게 동작할 수 있습니다. 그래서, 자주 사용하는 데이터는 캐시 서버에서 우선 조회하고 없을 때는 데이터베이스를 다시 조회하는 방식을 활용하면 전체적인 서비스의 속도를 향상시킬 수 있습니다. 또, 쿼리가 길고 복잡한 경우에도 데이터베이스를 조회하는 시간이 오래 걸리는데, 이 쿼리가 자주 사용되는 경우라면 해..

ETC/Redis 2021.02.07