전체 글 40

제어자

이유가 어찌되었던 한국에서 가장 많이 쓰이고 있는 언어인 자바가 계속 궁금했었고, 좋은 기회로 사이드프로젝트를 진행하게되어서 자바로 구현해보고자 마음먹었습니다. 이를 위해서 자바 기초 및 스프링을 공부했는데, 제어자가 항상 헷갈려서 정리해놓고자 합니다. 아마 다음 포스팅에는 Optional에 대해 작성하지 않을까 싶습니다. 자바에는 클래스, 변수 혹은 메서드의 선언부에 함께 사용되는 여러 제어자가 있는데, 여러 제어자가 있기에 따로 정리하고자 합니다. 접근제어자: public, protected, default, private 그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp static: - 클래스 변수 혹..

Java/Java 기본 2023.07.23

exception 발생할 때 stacktrace를 로그에 남기기

일반 로그 뿐만 아니라 코드에서 exception이 발생할 때에도 로그를 남기고 싶을 때가 있다. 그럴 경우에는 아래 코드와 같이 남기면 된다. import os import sys import logging import traceback from logging.handlers import SysLogHandler from constants import LOG_LEVEL logger = logging.getLogger() logger.setLevel(LOG_LEVEL) syslog = SysLogHandler(address=(HOST, PORT)) hostname = os.environ.get('HOSTNAME', "") log_format = hostname + " %(levelname)-8s [%(f..

python 2023.07.16

InnoDB 스토리지 엔진 아키텍처

프라이머리 키에 의한 클러스터링 프라이머리 키는 다른 보조 인덱스에 비해 높은 비중 다른 인덱스는 프라이머리 키를 논리적인 주소로 활용 외래키 외래키 지원함 다만 데이터의 수정이 다른 테이블로 전파되므로, 데드락 등의 잠금이 발생할 가능성이 큼 MVCC 멀티버전: 하나의 레코드에 여러 개의 버전이 동시에 관리 목적: 잠금을 사용하지 않는 일관된 읽기 제공 레코드가 트랜잭션 중에 읽기 요청이 발생할 경우, 격리 수준에 따라 제공되는 값이 다름 READ_UNCOMMITED: 트랜잭션에 의해 변경된 값을 반환 REPEATABLE_READ, SERIALIZABLE: 트랜잭션 이전의 값을 반환 잠금 없는 일관된 읽기 MVCC 기술을 이용해 트랜잭션 중이더라고 잠금 없이 읽기가 가능 격리수준에 따라 읽기 명령의 값..

데이터베이스 2023.02.21

MySQL 아키텍처

MySQL 엔진 아키텍처 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있음 MySQL엔진은 클라이언트로부터 접속 및 쿼리요청을 처리하는 커넥션 핸들러 부분과 SQL 파서 & 옵티마이저 등으로 구성 스토리지 엔진은 데이터를 디스크 스토리지에 저장하거나 읽는 등의 작업을 처리 스토리지 엔진은 여러 개를 동시에 사용할 수 있음 핸들러 API는 스토리지 엔진과 MySQL 엔진의 사이에 존재하며, 각 요청을 주고받을 때 사용됨 MySQL 스레딩 구조 MySQL 서버는 프로세스 기반이 아닌 스레드 기반 포그라운드 스레드와 백그라운드 스레드로 구분할 수 있음. 동일한 기능을 수행하는 스레드를 여러 개 포크해서 병렬처리도 가능 포그라운드 프로세스 최소 MySQL 서버에 접속된 클라이언트 수만큼..

데이터베이스 2023.02.06

RTP, RTCP

RTP 개요 실시간 음성 혹은 영상 전송에서 데이터 변형이나 분실 오류 복원은 상대적으로 중요하지 않음. 대신 데이터의 도착 순서나 수신 패킷의 지연 간격 그리고 데이터 압축에 의한 전송 정보량의 최소화가 중요함. 일반적으로 널리 사용되는 TCP/UDP는 실시간 서비스의 특성을 충분히 지원하지 못함 TCP의 경우에는 패킷 순서와 신뢰성이 지나치게 강조되어 재전송 기능과 복잡한 흐름 제어 기능으로 인해 실시간 환경에서는 적합하지 않음 UDP는 기능이 단순하지만, 데이터의 순서 보장을 충분히 지원하지 못함 따라서 UDP에 데이터 순서 번호 기능을 추가한 프로토콜인 RTP를 실시간 서비스에서 사용할 수 있음 특징 타임스탬프 방식을 사용하여 데이터의 순서를 정렬 프로토콜 내부에 위치하는 버퍼의 크기를 각 응용프..

Airflow 기초 사용법 및 DockerOperator

사내에서 데이터파이프라인을 담당하시던 동료분이 에어플로우 세미나를 진행하신 적이 있었습니다. 그분은 워낙 내공이 있으신 분이기도 하고, 발표도 잘하는 분이셔서 에어플로우 파악에 많은 도움이 되었습니다. 그 때의 기억을 바탕으로 Airflow 기초 사용법을 간단히 정리하고, 제가 업무에 사용하였던 DockerOperator 사용 방법도 간략히 정리하도록 하겠습니다. 먼저 airflow 설치 방법은 아래와 같습니다. pip install apache-airflow airflow db init airflow users create \ --role Admin \ --username admin \ --email admin \ --firstname admin \ --lastname admin \ --password..

MLOps 2022.08.10

모델 배포 및 모니터링 전략

UC 버클리에서 주관하는 Full Stack Deep Learning 강의에서 model deploy & monitoring 세션이 있습니다. 강의 내용이 모델 배포 및 모니터링 업무에서 큰 도움이 될 것 같아서 관련 내용을 포스팅할까 합니다. 기본적인 내용이 많지만 나중에 팀원에게 관련 내용에 대해 소개할 때 유용하게 사용할 수 있을 것 같습니다. 프로덕션 환경에서는 수백만의 사용자가 ML 모델을 사용할 수 있습니다. 따라서 여러 사항들을 고려해야 합니다. 먼저 모델 배포 타입에 대해 서술해보면, 모델 배포 타입은 크게 3가지 방법을 고려할 수 있습니다. client-side에서 모델을 실행하는 방법(웹브라우저, 모바일 디바이스 등) server-side에서 모델을 실행하는 방법 서버가 데이터베이스에 ..

MLOps 2022.08.08

NVIDIA Docker 설치

현재 회사에서 NVIDIA GPU 자원이 사용 가능한 도커가 필요했습니다. 따라서 NVIDIA Docker를 설치해야 했는데, 나중에 참고하기 위해서 설치 방법을 포스팅하도록 하겠습니다. 1. 먼저 도커를 설치합니다. 도커 설치에 사용한 명령어는 아래와 같습니다. sudo apt-get install ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings` curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg curl -fsSL https://download.docker.com/linux/ubu..

MLOps 2022.08.08