본문 바로가기

전체 글156

Jenkins CI/CD 구축하기 1편 (with. Docker) 인턴 활동 중 Jenkins CI/CD 파이프라인 구축 업무를 맡으면서, 얻은 인사이트를 기록으로 남기고자 포스트를 적게 되었습니다. 이전에 Github Actions을 활용하여 프로젝트의 CI/CD를 구축할 때, Jenkins 또한 고려사항에 있었지만 높은 학습 비용으로 인해 미룬 바가 있었습니다. 하지만 이번 테스크를 통해, 관심이 있던 Docker와 Jenkins를 깊게 학습할 수 있어 감사히 생각합니다.🙇🏻‍♂️ https://wch-0625.tistory.com/161 (Github Actions 활용기)  1. Jenkins란?우선 Jenkins는 코드의 변경 사항이 있을 때 자동으로 빌드하고 테스트하는 CI(지속적 통합), CI가 완료된 코드를 서버에 자동으로 배포하는 CD(지속적 배포).. 2024. 9. 3.
도커(Docker)란? 1. 도커란?도커는 가상화의 한 종류인 '컨테이너' 기반의 오픈소스 프로젝트이다. 컨테이너는 그 자체로 독립적인 실행 환경이다.애플리케이션이 빠르고 안정적으로 실행할 수 있도록, 애플리케이션 파일과 실행에 필요한 모든 의존성을 하나의 패키지로 묶는다. 도커의 컨테이너 개념을 도입하여, 동일한 환경에서 실행되므로 '개발-테스트-프로덕션 환경' 간에도 일관성을 유지할 수 있다.   참고로 도커의 시작은 리눅스의 cgroups와 namespaces을 활용한 LXC 기반으로 시작했지만, 현재는 자체적인 컨테이너 기술을 개발하여 사용하고 있다.  2. 가상머신(Virtual Machine)과의 차이점은?1) 기존 가상화 방식도커는 컴퓨터 자원을 가상화 하는 방식 중 하나이다.그럼 도커 이전에는 어떻게 가상화를 했.. 2024. 8. 28.
[MySQL] Partition 3. DATE 기반 월별 파티션 구현 파티셔닝을 적용할 때, 가장 중요한 점이 필요한 파티션만 적절히 접근할 수 있어야 한다.이를 위해서 파티션 표현식을 잘 세워야 한다. 이번 포스트에서는 DATE / DATETIME 필드를 사용해서 월별로 파티셔닝을 진행할 때, 쿼리 실행 계획을 분석하여 파티션 프루닝이 정상적으로 잘 동작하는지 테스트하고 가장 적합한 파티션 표현식이 무엇인지 찾아보는 과정을 담았다.  1. PARTITION BY RANGE (year(GATH_DTM) * 100 + month(GATH_DTM))파티션 프루닝 테스트단건 조회는 파티션 프루닝이 잘 동작하나, 범위 조회는 파티션 프루닝이 전혀 동작하지 않으며 모든 파티션을 스캔하고 있다. 왜 안 될까?위 표현식을 통해서 파티션 생성은 잘 되는 것은 확인했지만, 전체 파티션을 .. 2024. 8. 5.
[MySQL] Partition 2. 적용하기 전 개념 정리 1. 파티션을 사용하는 이유1) 하나의 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 큰 경우 (=  큰 테이블을 작은 크기의 파티션으로 분리)- 테이블의 데이터가 MySQL의 물리 메모리보다 큰 것이 일반적이지만, 인덱스의 Working Set이 실질적인 물리 메모리보다 크면 쿼리 처리가 현저히 떨어지게 된다. 파티셔닝을 통해 여러 작은 파티션으로 나누면. 각 파티션에 대한 로컬 인덱스로 인덱스 크기를 줄일 수 있어 인덱스 탐색 속도가 빨라지게 된다. 2) 필요한 파티션만 접근하는 경우(read & write)- 전체 테이블을 스캔하지 않고 특정 파티션을 read / write 하는 것이 훨씬 빠르고 효율적이다.예를 들어 로그와 같은 이력 데이터들에 대한 주기적인 삭제 작업이 필요하거나 .. 2024. 8. 2.
[MySQL] Partition 1. 테이블 수동 분할과 파티셔닝 (+. 샤딩 / 래플리케이션) 인턴 중 데이터 수집 테이블의 '월별 파티셔닝 자동화 프로시저' 개발 업무를 담당하게 됐다.파티션을 하는 작업이 처음이기도 하였고, 프로시저를 작성하는 문법이 달라 관련해서 래퍼런스를 찾아보던 중 "현재 기업의 운영 환경에 적용된 파티셔닝과 현업에서 일반적으로 사용하는 파티셔닝" 개념에 차이가 있다는 것을 알게 되었다. 간단히 MySQL에서 지원하는 파티셔닝은 1개의 논리테이블에서 N개의 물리테이블을 갖도록 하는 기능이다. 하지만 현재 업무에서 적용하고 있는 파티셔닝은 "N개의 논리테이블에서 각자 1개의 물리테이블을 갖도록 설계됐었다. 이는 아래와 같이 각 월별로 테이블이 관리하도록 되었는데, 시간이 흐를수록 테이블이 늘어나 데이터베이스를 관리하기 매우 불편한 설계가 됐다. 그래도 일단은 기존의 플로우대.. 2024. 7. 30.
[MySQL] 테이블 복사하는 방법 (DDL, `LIKE`) 기존 데이터베이스 테이블에 있는 데이터를 활용한 테스트를 진행하고자, 테이블 복사에 대한 방법을 찾아보고 정리했다.  1. 테이블 구조 복사기존 테이블의 생성 구문을 확인한다.SHOW CREATE TABLE existing_table;  2. 새 테이블 생성위에서 확인한 생성 구문에서 테이블명만 바꾸고 실행한다.  3. 데이터 복사INSERT INTO new_table SELECT * FROM existing_table;   번외.테이블 복사에 관해 찾아보던 중, 평소 즐겨보던 블로그에서 `LIKE`를 활용한 테이블 구조 복사는 'PK', 'Auto increment'와 같은 설정은 복사할 수 없다는 글을 보게 되었다. "왜 `LIKE`는 위 설정을 복사할 수 없을까?" 하는 물음에 `LIKE`에 대한 .. 2024. 7. 28.