no image
[MySQL] Trigger 생성과 Metadata Lock 문제
문제 상황Trigger 생성 과정에서 오랜 시간동안 쿼리가 실행이 되지 않더니, 이내 갑자기 DB가 멈추는 상황이 발생했다. 디버깅을 위해서 DB 재시작 후, 동일한 문제 상황을 재현했다. 문제가 되는 쿼리를 다시 실행한 결과, DB에 연결된 thread의 수가 지속적으로 상승하고 있음을 확인할 수 있었다.SHOW STATUS LIKE 'Threads_connected'; 이후 스레드 정보를 정확하게 확인하기 위해서 아래 명령어를 입력해보니, 다음과 같은 에러 상황이 발생하고 있었다. SHOW PROCESSLIST;IdUserHostdbCommandTimeStateInfo25800rootlocalhost:51282mydbSleep630Waiting for table metadata lockselect i..
2024.12.07
no image
[QWIKLABS] GKE 사용해보기
Kubernetes? 컨테이너 클러스터(대규모)에서의 어플리케이션을 손쉽게 배포, 관리할 수 있도록 도와줌 GKE(Google Kubernetes Engine) 구글의 인프라를 활용해 추가 기능 제공 Load balancing : 인스턴스 그룹에 대한 부하 분산 및 자동 확장 기능 제공하여 다음과 같은 이점 제공 앱 확장 높은 트래픽 지원 비정상적인 VM 인스턴스 자동으로 삭제/추가 트래픽을 가장 가까운 가장 머신으로 라우팅 Node pools : 클러스터 내 구성이 모두 동일한 노드 그룹으로 노드 풀 마다 독립적으로 작업 가능 Automatic scaling : 클러스터의 노드 풀 크기를 수요에 따라 자동으로 조절하여 가용성을 높이고 비용을 통제 가능 Automatic upgrades : 클러스터가 업..
2024.03.04
no image
[머신러닝 시스템 설계 정리] Chapter2 : 머신러닝 시스템 설계 소개
머신러닝 시스템 설계 : MLOps MLOps 구성 요소 비즈니스 요구 사항 구현 데이터 스택 관리 인프라 구축 배포 및 모니터링 MLOps 구축 과정 ‘목적’, ‘요구사항’, ‘프로세스’를 설계하고 구축해야 함 ‘왜 필요한 지’ → ‘신뢰성, 확장성, 유지보수성, 적응성을 만족하는 지’ 개선 작업이 반복적으로 발생함 풀고자 하는 문제를 ML로 해결 가능한 형태로 구조화해야 함 동일한 문제더라도 구조화 방식에 따라 난이도는 천차만별 2.1 비즈니스와 머신러닝의 목적 ML 프로젝트 목적 고민 필요 ML 지표 vs 비즈니스 지표 연구가 아니라면 비즈니스 지표를 ML 프로젝트로 끌어올릴 방법을 찾아야 함 비즈니스의 핵심은 이익 극대화 → ML 프로젝트로 어떤 ‘성과 지표’에 영향을 줄 수 있는지 설명할 수 있..
2024.02.26
[머신러닝 시스템 설계 정리] Chapter1 : 머신러닝 시스템 개요
ML 프로젝트 구성 개요 비즈니스 요구 사항 구현 사용자/개발자 상호 작용 고려 데이터 및 모델 관리 인프라(모니터링 및 업데이트) 구성 ML 알고리즘 구성 1.1 머신러닝을 사용해야 하는 경우 💡 머신러닝 : 기존 데이터로부터 복잡한 패턴을 학습하고 이를 통해 본 적 없는 데이터에 대해 예측을 수행하는 접근법 1. 시스템이 학습에 적합한 경우 학습할 대상인 데이터가 있고 이를 통해 문제를 해결할 수 있어야 함 숙소 임대료 예측? → 넓이, 방, 개수, 지역, 편의 시설, 평점 등이 있는 Airbnb에서 가능 2. 학습할 복잡한 패턴이 존재하는 경우 무작위가 아닌 패턴이 존재 해야 함 너무 단순한 문제가 아니여야 함 최종적으로 시스템 스스로 복잡한 패턴 학습 → 소프트웨어 2.0 3. 사용 가능한 데이터..
2024.02.19
no image
[Docker] Docker 설치 방법 및 기본 명령어 알아보기
설치 방법 설치 curl -sSL get.docker.com | sh 권한 부여 sudo usermod -aG docker $USER sudo service docker restart Docker 관련 명령어 docker run Image(이미지)를 통해 Container(컨테이너) 생성 docker run 명령어 기본 형식 docker run () () () 옵션 -it : 터미널을 활용해 컨테이너 접근 → /bin/sh 실행 시 활용 가능 docker run -it /bin/sh -p : Port Forwarding 옵션 로컬 포트 : 컨테이너 포트의 형식 # 컨테이너의 8080 포트를 로컬의 80 포트를 사용해서 접근 docker run -p 80:8080 -d : 컨테이너를 백그라운드에서 실행 →..
2023.05.16
no image
[Git] Configuration의 Scope 확인하기
Local git config --local로 접근 가능 해당 레포에만 적용 됨 설정 파일의 경로: 레포/.git/config Global git config --global로 접근 가능 현재 사용자에만 적용 됨 설정 파일의 경로: 유저/.git/config System git config --system으로 접근 가능 현재 PC의 모든 사용자와, 레포에 적용 됨 설정 파일의 경로 : 프로그램/git/config 주의! 모든 것은 현재 사용 중인 로컬 PC의 기준이고, Github 서버에 업로드 된 원격 저장소 origin과는 무관함 참고 Configure git for Azure and GitHUB and BitBucket on one system i am working on multiple proje..
2023.03.16
no image
[Github Actions] 기본 구성 요소 파악하기
Workflows 하나 이상의 Job과 그 내부 Step에 있는 기능들을 자동화하여 관리 가능 Workflows를 실행 시키는 트리거는 Event 라고 부름 Event로는 push, pull request, fork 등 Github 내 다양한 동작들이 지정될 수 있음 .github/workflows에 저장돼 있는 yaml 파일이 바로 Workflows를 정의하는 파일임 name: Update README # workflows의 이름 on: # Event 발생 시 실행 정보 push: branches: [ "main" ] pull_request: branches: [ "main" ] Jobs Workflows에서 독립적으로 수행할 작업들을 Job이라고 부름 각 Job은 각각 다른 서버에서 독립적으로 실행되..
2023.03.12
no image
웹크롤링에 필요한 HTML, CSS 정보
HTML이란? 웹 페이지의 구조를 나타내기 위한 언어 태그로 구성돼 있음 태그 태그는 시작 태그와 종료 태그로 구성 내용 과 같은 형식 태그엔 추가적으로 속성(Attributes)이 있을 수 있음 내용과 같은 형식 자주 사용되는 태그와 그 역할 태그명 역할 div 구역 나누기 a 링크 h1(h2, h3…) 제목 p 문단 ul, li 목록 태그는 부모 태그와 자식 태그로 구성할 수 있음 아래 코드에선 의 자식 태그가 바로 속성 태그의 별명 : 크롤링 대상의 이름 id : 하나의 태그에만 적용 됨 class : 여러 태그에 적용될 수 있음 태그의 스타일 style : CSS의 속성들을 HTML에서 직접 지정할 때 활용 CSS란? 웹사이트의 디자인을 표시하기 위한 언어 글자 색 변경, 폰트 크기, 가로 세로 ..
2023.02.16
no image
Github Actions을 활용한 알고리즘 풀이 README 업데이트 자동화
알고리즘 문제를 풀고, 그 코드를 Github에 업로드하고 있다. 하지만 별도의 README 파일을 작성해두지 않아서 굉장히 어수선한 상태이다. 어떤 문제를 풀었고, 또 그 풀이를 어디서 확인할 수 있는지에 대한 정보가 전혀 없기 때문이다. '이제 정리해야지!'라는 생각에 README 파일을 직접 작성하려고 했다. 하지만 파일이 100개가 넘어서 굉장히 귀찮았다. '그냥 복붙 할까'라는 생각이 잠깐 들기도 했지만, 이왕 하는 거 코드로 한번 구현해 보자라는 생각이 들었다. README는 어떻게 작성? README를 통해 '문제 이름', '문제 링크', '풀이 파일 링크', '풀이 성공 여부' 정보를 제공하려고 한다. 현재 파일들의 경로는 baekjoon/solved/*/b1_1004.py(문제 이름)과 ..
2023.02.15
no image
[FSDL 정리] 머신러닝 프로젝트 테스트(Testing) 하기 : 시스템 영역
ML 시스템 Testing 머신러닝의 경우 일반적인 소프트웨어 프로그램보다 Testing이 어렵다. 소프트웨어는 소스 코드를 프로그램으로 바꾸는 것이 주목적이지만, 머신러닝의 경우 추상적인 데이터와 모델을 활용하기 때문이다. 실제로 소스 코드 관리보다는 데이터를 관리하는 것이 추상적이고 난도가 높다. 또한 모델 학습 과정은 잘 정의되지 않아 복잡한 경우가 많고, 관련 디버깅 툴도 부족한 상황이다. 따라서 ML 시스템에선 주요 기능이 정상적으로 동작하는지 간단히 확인하는 Smoke test 기법을 주로 활용한다. Smoke test : 데이터 확인하기 데이터가 원하는 형태(null 값 여부, 칼럼 여부 등)로 잘 있는지 확인한다. 과정에서 상태를 기록하는 리포트를 작성하거나, 알림을 보낼 수 있도록 설정한..
2023.01.20
no image
[Python] argparse 알아보기
argparse CLI를 통해 사용자 입력을 받아야 할 때 주로 활용한다. argparse.Argumentparser() 사용자 입력이 필요한 경우에 활용하자. 인자를 단순히 저장하는 것에 그치지 않고, 추가적인 행동을 명시해주고 싶을 때 활용하자 argparse.Namespace() 사용자 입력이 필요하지 않은 경우에 활용하자. argparse.py 구조 전체 코드에서 _AttributeHolder는 Action, Namespace, ArgumentParser만 상속한다. 인자를 저장하는 것이 모듈 목적인 점을 고려하면, 결국 Action, Namespace, ArgumentParser가 핵심인 것을 알 수 있다. 추가로 코드를 보면 ArgumentParser는 _ActionsCotainer 까지 상속..
2023.01.05
no image
[FSDL 정리] 머신러닝 프로젝트 테스트(Testing) 하기 : 코드 영역
Testing(테스트)이 무엇이고 왜 필요한가요? 코드에 버그가 있는지 확인하는 작업을 Testing(테스트)라고 한다. 테스트는 코드가 가지고 있는 문제점을 프로젝트에 적용하기 전에 미리 확인할 수 있다는 점에서, 프로젝트 유지 보수에 큰 도움이 된다. 따라서 테스트를 잘하는 것은 프로젝트 성공에 매우 중요한 요소 중 하나이다. 성공적인 테스트를 위해선 우선 테스트 통과 여부와 버그 발생 여부가 항상 100% 관련 있지 않다는 점을 알아야 한다. 실제로 테스트를 통해서 확인할 수 있는 것은 단순히 '정해둔 테스트 케이스 조건을 지켰는지'이다. 결국 테스트의 효과를 극대화하기 위해선 테스트 케이스를 잘 설정하는 것이 중요하다. 그럼 어떻게 테스트 케이스가 설정 됐을 때 '잘' 됐다고 말할 수 있을까? 답..
2022.12.21