전체 글 78

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

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

ETC/Redis 2021.02.07

[git] 깃 브랜치 전략, git branching strategy - GitFlow

git은 소스코드를 관리하는데 도움을 주는 툴입니다. git에는 branch라는 기능이 있습니다. branch는 말 그대로 가지를 뜻하며, 해당 가지에 대해서 다른 버전으로 코드를 관리할 수 있습니다. 개발을 할 때는 배포되는 버전, 개발 중인 버전, 급한 버그를 픽스하는 버전, 리뷰를 하는 버전 등으로 코드를 나누어 관리를 하게 되는데, 이러한 복잡한 관리를 branch를 활용하면 편하게 관리할 수 있습니다. GitFlow 전략 그래서 이러한 branch를 관리하는 전략 중에 가장 유명한 전략이 GitFlow라는 전략입니다. GitFlow 전략은 그림(nvie.com/img/git-model@2x.png)부터 보시면, 아래와 같습니다. 위에서 부터 내려오고, 각 동그라미가 branch입니다. GitFl..

ETC/Git 2021.01.24

[Docker] RUN, CMD, ENTRYPOINT 차이점

도커파일 작성 시에, 사용할 수 있는 명령어 중에 실행하는 것과 관련된 명령어는 RUN, CMD, ENTRYPOINT 세 가지가 있습니다. 세 명령어에 대한 차이점을 예시와 함께 확인해보도록 하겠습니다. 1. RUN 이 중에 RUN 명령어는 확연한 차이가 있습니다. RUN 명령어는 도커파일로부터 도커 이미지를 빌드하는 순간에 실행이 되는 명령어입니다. 그래서, RUN 명령어는 라이브러리 설치를 하는 부분에서 주로 활용이 됩니다. FROM python:3.7.9 RUN pip install -r requirements.txt 위와 같은 도커파일 예시에서, RUN 명령어를 활용하여 필요한 파이썬 라이브러리를 설치할 수 있습니다. 2. CMD CMD 명령어는 RUN 명령어가 이미지를 빌드할 때 실행되는 것과 ..

ETC/Docker 2021.01.10

[Kafka] 카프카 기본 실습

1. 카프카 설치 카프카 실습을 위해서 설치를 해볼건데, 간편하게 도커로 해보도록 하겠습니다. 카프카는 공식 도커 이미지가 없습니다. 그래서 찾아보니, 아래 링크를 사람들이 많이 활용을 한다고 해서 저도 한번 활용을 해보았습니다. github.com/wurstmeister/kafka-docker wurstmeister/kafka-docker Dockerfile for Apache Kafka. Contribute to wurstmeister/kafka-docker development by creating an account on GitHub. github.com 먼저 git clone을 해주고 해당 디렉토리로 들어갑니다. git clone https://github.com/wurstmeister/kafk..

ETC/Kafka 2020.12.27

[Kafka] 카프카 데이터 모델

카프카의 데이터 모델은 토픽과 파티션으로 나누어집니다. 토픽은 메시지를 받을 수 있도록 논리적으로 묶은 개념, 파티션은 토픽을 구성하는 데이터 저장소로서 수평 확장이 가능한 단위라고 합니다. 토픽 메일 시스템을 생각해 보면, 메일 서버에는 많은 메일이 마구 섞여 있고, 원하는 메일을 찾기 위하여 메일 주소로 관리합니다. 카프카에서의 토픽이 메일 주소와 같은 개념입니다. 예를 들어 뉴스 토픽, 이미지 토픽이 존재하면 뉴스와 관련된 프로듀서들은 뉴스 토픽으로만 데이터를 보내고 이미지와 관련된 프로듀서들은 이미지 토픽으로만 메시지를 보냅니다. 뉴스 데이터만 보고 싶으면, 컨슈머에선 뉴스 토픽에서만 메시지를 가져가고 이미지 데이터만 보고 싶으면 이미지 토픽에서만 데이터를 가져가서 사용할 수 있습니다. 토픽 이름..

ETC/Kafka 2020.11.29

글또 5기 다짐

글또 4기를 무사히 마무리하고, 2020년 11월부터 다시 시작하는 글또 5기에서도 계속 활동하기로 하였습니다. 글또 4기를 하면서 블로그를 쓰다보니 다른 사람들이 읽었을 때 이해할 수 있어야 한다는 생각으로 쓰다보니, 스스로도 더 깊게 자세히 공부를 하게되고 또 정리를 해둠으로써 다시 볼 수도 있고 그런 부분이 너무 좋았었기에 글또 5기에도 합류를 하였습니다. 글또 4기가 끝나는 시점에 병역특례(전문연구요원)가 끝이 났고, 바로 이직을 도전하여 앞으로는 기존과는 달리 서비스 백엔드 개발을 하게 되었습니다. 그에 따라서, 글또 5기에서는 백엔드 개발에 대해서 공부하면서 내용을 정리하는 블로그를 쓰게 될 것 같습니다. 글또 5기에서도 4기에서 처럼 2주에 한번 씩, 빠뜨리지 않고 꾸준히 글을 쓰고 새로운 ..

나의 이야기 2020.11.14

[Python] 딕셔너리, Dictionary에서 key를 통해 value를 가져오는 방법

파이썬의 딕셔너리(dictionary)는 key와 value를 쌍으로 가지는 자료형입니다. key를 활용하여 value를 가져올 수 있는 방법이 있는데 그 방법들을 한번 소개해보려 합니다. 1. key를 활용하여 dict[key]로 접근 가장 쉽게 접하는 방식입니다. key를 통해 직접 접근하는 방식입니다. 이 방식의 단점은 존재하지 않는 key에 대해서는 KeyError 에러를 발생시킨다는 것입니다. 예를 들면 이런 식입니다. 2. get 함수 활용 get(key, default=None) 함수는 위와 같은 경우의 단점을 보완합니다. get 함수를 활용하면 key가 존재하지 않는 경우에 대해서 에러를 발생시키지 않고, None 혹은 지정한 default 값을 반환합니다. 아래의 이미지와 같이 활용할 수..

python 2020.08.18

[Python] join 함수, filter 함수

python에서 join 함수는 문자열을 다룰 때 정말 많이 활용하는 함수 중에 하나입니다. python은 join을 활용하면, 아래와 같이 string list를 쉽게 합칠 수 있습니다. strings = ['abc', 'def', 'ghi'] ''.join(strings) # >> abcdefghi join으로 합칠 때, 원하는 문자열을 사이마다 넣어줄 수도 있습니다. strings = ['abc', 'def', 'ghi'] '1'.join(strings) # >> abc1def1ghi 간혹, 문자열 리스트에 빈 문자열이 있는 경우도 있습니다. 그 경우에는 위와 같이 join을 하면 1이 2번 사이에 들어가게 됩니다. 그럴 때는, 아래와 같이 filter 함수를 사용하면 빈 문자열을 제거해줄 수 있습..

python 2020.08.10

도커를 활용한 TensorRT 환경 세팅하기

TensorRT 란? TensorRT에 대해 간단하게 설명드리면 TensorRT는 NVIDIA platform에서 최적의 Inference 성능을 낼 수 있도록 Network compression, Network optimization 그리고 GPU 최적화 기술들을 대상 Deep Learning 모델에 자동으로 적용합니다. 딥러닝 모델을 GPU로 서비스를 할 때, TensorRT(https://developer.nvidia.com/tensorrt)로 모델을 변환하면 속도가 훨씬 빨라집니다. 그러면 물리 서버를 줄일 수 있어서, 운영 비용을 훨씬 절감할 수 있습니다. TensorRT가 모델을 최적화 할 때 사용하는 방법은 위 그림에 언급된 Layer & Tensor Fusion, Precision Cali..

Producer-consumer pattern

자연어처리에서는 거대한 언어 모델을 학습하기 위해 방대한 양의 학습 데이터를 사용합니다. 학습 데이터의 전처리도 성능에 많은 영향을 끼치면서 전처리를 많이 하고 있는데 학습 데이터의 양이 너무 크다보니 오히려 학습보다 전처리가 더 오래 걸리기도 하여 학습 데이터의 전처리에서는 병렬처리가 필수가 되고 있습니다. 그래서 오늘은 병렬처리를 할 때, 유용한 패턴을 하나 소개해보겠습니다. 병렬처리에 대해서 공부하게 되면, 꼭 빠지지 않고 등장하는 것 중에 하나가 producer-consumer pattern(프로듀서-컨슈머 패턴;생산자-소비자 패턴)입니다. RabbitMQ, Kafka와 같은 메시징 큐를 보면 producer와 consumer는 절대 빠지지 않습니다. producer와 consumer가 무엇인지 ..

ETC/Pattern 2020.08.02