전체 글 386

자료 구조 - 큐Queue, 파이썬으로 구현한 큐 예제

큐Queue란? 먼저 넣은 데이터가 먼저 나오는 자료 구조를 큐라고 한다. 먼저 들어간 것이 먼저 나온다는 First In First Out, FIFO라고 말하면 큐다. 영어 사전에서 Queue를 찾으면 줄을 서다, 차례를 기다리는 줄을 뜻한다는 것을 확인할 수 있다. 식당에서 줄을 섰다면? 당연히 먼저 줄에 서 있던 사람이 먼저 식당으로 들어가야 한다. 참고: 위키백과 큐 파이썬 큐 예제 아래는 파이썬으로 구현한 큐 예이다. 큐를 구현하는 것 자체는 어렵지 않다. 큐의 의미 그대로 값을 순서대로 넣고 enqueue(), 먼저 넣은 값을 dequeue() 호출 시 꺼내오면 된다.

자료 구조 - 스택Stack, 파이썬으로 구현한 스택 예제

스택Stack이란? 스택은 한쪽 긑에만 자료를 넣거나 뺄 수 있는 선형 구조. 나중에 들어간 것이 먼저 나온다. Last In First Out, LIFO라고 하면 스택이다. 영어 단어 stack 뜻 자체가 쌓다, 더미이다. 간단히 접시가 쌓여 있는 형태를 떠올리면 된다. 접시를 쌓아 놓았을 때 위에서부터 쓰게 된다. 참조: 위키백과 스택 파이썬 스택 예제 아래는 파이썬으로 구현한 스택 예이다.

Q. JWT(JSON Web Token)란?

A. JSON 웹 토큰은 양 당사자 간에 전송되는 속성 정보(Claim)를 표현하는 단순하고, URL 안전한(URL로 이용할 수 있는 문자로만 구성된) 수단이다."JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties." (출처: IETF JSON Web Token (JWT)) 위 설명으로는 잘 이해가 되지 않는다. 실제 어떻게 구성되어 있는지 살펴보자.JWT 구성JWT 예 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6InRhcHRvcmVzdGFydCIsInJvbGUiOiJhZG1pbiIsInN0YXJ0X2F0IjoxNjQ0MT..

Q. NestJS에서 HTTP 요청 시 로그 찍는 방법은?

A. NestMiddleware 커스텀 클래스를 구현하면 된다. 문제기본 설정에서는 HTTP 요청을 해도 로그가 찍히지 않는다.아무리 localhost:3000을 방문해도 로그는 그대로다.  해결 방법NestMiddleware 커스텀 클래스를 구현한다. 이때 Request, Response 객체 등을 받아서 로그로 출력하면 된다.아래는 코드 예이다.  로그가 찍히는 것을 볼 수 있다. 코드 전체 보기 참고NestJS MiddlewareHow-to : Logging request/response in Nest.js properly

따로 만든 슬랙Slack 업무 진행 과정 표시용 이모티콘Emoticons

슬랙을 업무용으로 주로 쓰다보니 업무를 슬랙 메시지에 적을 일이 많다. 그때 간단히 이모티콘으로 업무 진행 상황을 표시하고 싶어서 추가로 만들었다. 슬랙의 라이트, 다크 테마 양쪽에서 모두 잘 보이도록 하얀색 바탕을 넣었다. 구글 매터리얼 아이콘으로 만든 이모티콘 assignment 업무 배정 의미 done 업무 완료 engineering 업무 중 pending actions 업무 중 pending 업무 중 run 업무 중 열심히.. 출처: Google Fonts Icons 한글로 만든 이모티콘 배달의민족 글꼴을 사용했다. 최대한 글자를 크게 했다. 자주 쓰는 댓글 이모티콘 자주 쓰는 댓글을 이모티콘으로 만들었다. 자유롭게 편하게 쓰셔도 된다. 슬랙에 이모티콘 추가하기 이모티콘을 누르고, 이모티콘 추가를..

개발 Dev 2022.01.23

Q. 장고Django에서 unsigned integer로 primary key를 변경하는 방법은?

A. custom 모델을 따로 만들어 줘야 한다. 보통 MySQL에서 auto increment primary key 설정할 때 unsigned로 하는데 장고는 integer를 쓰든, bigint를 쓰든 signed가 기본으로 설정된다. 왜 그렇게 하는지 이유는 모르겠다. 장고 기본 설정과 달리 unsigned로 하고 싶다면 custom 모델을 만드는 방법 밖에 없다. 아래 코드가 custom 모델 예이다. 위 모델을 불러다가 Book이란 모델을 만든다면 아래처럼 작성해야 한다. 이렇게 하면 auto increment되는 unsigned primary key를 만들 수 있다. class Author(models.Model): id = UnsignedAutoField(primary_key=True) .....

시계열 데이터베이스Time Series Database, influxDB v1.8 튜토리얼, python으로 데이터 입력과 조회하기

데이터베이스 만들기 먼저 데이터베이스를 만들어야 한다. influx를 실행한다. 그리고 weather란 데이터베이스를 만들자. $ influx Connected to http://localhost:8086 version 1.8.9 InfluxDB shell version: 1.8.9 > create database weather Python 코드 예 만들고 나면 아래처럼 코드를 적고 실행하자. influxdb 파이썬 팩키지 설치가 필요하다. 관계형 데이터베이스와 influxDB의 용어 차이를 다시 보면 아래와 같다. 관계형 데이터베이스 RDB influxDB v1.8 influxDB v2.0 database database bucket table measurement measurement indexed ..

시계열 데이터베이스Time Series Database, influxDB v1.8 튜토리얼, 데이터 수집과 조회 예제

influxDB v1.8 설치가 끝났다면 실제 데이터를 수집해보고 사용을 해보자. 설치 방법은 시계열 데이터베이스Time Series Database, influxDB 소개와 설치 방법을 참고하자. 권장 환경 AWS EC2 Ubuntu18.04 프리티어에서 실습해보기를 권한다. 데이터가 쌓이는 것을 경험하고, 실제 시각화툴에 익숙해지기 위해서는 일주일 이상 데이터를 수집할 필요가 있기 때문이다. 서버 컴퓨터가 있다면 서버에서 실습하기를 권한다. 계정 추가 v1.8에서는 웹UI가 없기 때문에 직접 계정을 추가해야 한다. 아래는 사용자명이 admin이고, 비밀번호가 verysecret!인 사용자를 만들고, 해당 사용자한테 모든 권한을 부여하는 경우다. $ influx > CREATE USER admin WI..

시계열 데이터베이스Time Series Database, influxDB 소개와 설치 방법

시계열 데이터베이스란? 시계열(시간과 값이 쌍을 이루는) 데이터를 저장하고 서비스하는데 최적화된 데이터베이스다. influxDB란? influxdata에서 만든 시계열 데이터베이스. 전세계에서 가장 인기 있는 시계열 데이터베이스 중 하나다. 참고: InfluxDB와 SQL 데이터베이스 비교 TICK Stack이란? 보통 Influxdb만 사용하지 않고, Telegraf, Influxdb, Chronograf, Kapacitor를 함께 사용한다. 앞글자를 따서 TICK라고 부른다. Telegraf 데이터 수집 InfluxDB 데이터 저장 Chronograf 데이터 시각화 Kapacitor 이벤트 감지, 알림 influxDB 버전에 따른 차이는? 버전 1.x 2.x 데이터베이스 명칭 database buck..

플라스크Flask Ajax 예제 프로젝트

Ajax란? Asynchronous JavaScript + XML의 앞 글자를 따온 것. mozilla.org에 나온 소개 "Asynchronous JavaScript + XML(AJAX)은 그 자체가 특정 기술은 아닙니다. 2005년 Jesse James Garrett이 처음 만들어낸 말로, HTML 또는 XHTML, CSS, JavaScript, DOM, XML, XSLT, 그리고 제일 중요한 XMLHttpRequest 객체를 비롯해 기존의 여러 기술을 사용하는 "새로운" 접근법을 설명하는 용어입니다. 이렇게 다양한 기술을 AJAX 모델로서 결합했을 때, 웹 어플리케이션은 전체 페이지를 새로 고칠 필요 없이 사용자 인터페이스에 빠르고 점진적인 업데이트를 적용할 수 있습니다. 덕분에 어플리케이션은 보다..

pandas, pymysql을 활용해서 자동으로 데이터베이스 명세서 만들기

여러 데이터베이스 명세서를 만들어야 할 일이 생겼다. 한개도 아니고 여러개. 일일이 복사해서 붙여 넣을 수는 없어서, 자동으로 만들어주는 프로그램을 짰다. 아래 코드 또는 첨부한 주피터 노트북에 데이터베이스 연결 정보를 넣고 실행하면 자동으로 데이터베이스명으로 엑셀 파일이 만들어진다. 위와 같이 table, field, type, collation, null, key, default, extra, privileges, comment 정보를 쉽게 얻을 수 있다.

Q. 개발 블로그에 댓글창으로 많이 쓰는 utteranc.es 추가 방법은?

어렵지 않으니 천천히 따라하면 쉽게 추가할 수 있습니다. 1. github에 blog-comments 등의 이름으로 저장소 추가 2. https://github.com/apps/utterances 가서 install 클릭 3. 추가한 저장소를 utterances와 연결 4. script 만들기 utterances install guide 를 보면 자동으로 script를 생성해 줍니다. 앞에서 만든 저장소 owner/repo 이름을 입력해야 합니다. 이 예제에서는 taptorestart/blog-comments로 했습니다. 그리고 원하는 issue-term을 선택하면 됩니다. title로 선택했습니다. url로 하게 되면 문자 주소를 쓰는 경우 한글이라 url encoding되어 읽을 수 없게 되기 때문입..

동물나라 카약 대회 이야기

동물나라에서 2인 1팀 카약 마라톤 대회가 열렸습니다. 꿀꿀이는 멍멍이와 한 팀, 야옹이는 곰돌이와 한팀이 되었습니다. 꿀꿀이가 멍멍이한테 말을 걸었습니다. “멍멍아, 난 카약이 처음인데 어떻게 하지.” 멍멍이가 말했습니다. “난 1인 카약 시합 챔피언이야. 넌 내 말대로만 하면 돼.” 곰돌이가 야옹이한테 인사했습니다. “야옹아, 안녕. 밥 잘 먹고 잘 자고 왔니?” 야옹이가 대답했습니다. “응. 넌?" "나도!" "근데 나 카약 잘 모르는데 우리가 해낼 수 있을까?” 곰돌이가 말했습니다. “나도 잘 몰라. 같이 공부하면서 하면 되지 뭘.” 대회가 시작되자마자 역시 꿀꿀이와 멍멍이가 탄 카약이 앞서가기 시작했습니다. 한참을 가다가 멍멍이가 꿀꿀이한테 말했습니다. “너 힘 그것밖에 안 되는 거야? 네 몸이..

기업은 회사는 절대 절대 평등하지 않다

아래는 당근마켓의 채용 설명 중 일부다. "영어 이름을 사용하고 직급이 없는 수평문화를 지향해요." 이런 문장을 보면 착각할 수 있다. 수평문화 = 평등이라고. 하지만 절대 절대로 평등하지 않다. 기업은 평등하지 않다. 주식회사에서는 지분을 많이 갖고 있는 사람이 왕이다. 지분이 없는 평직원들끼리 수평문화를 지향한다고 읽어야 맞다. 여기서도 지향하는 것이지 수평은 아니다. 예전에 5단계 이상으로 나눠 놓은 것을 3단계, 2단계로 줄였다고 이해하는 것이 맞다. 내가 말단이라면? 당연히 내 위에 있는 사람과 나는 평등하지 않다. 수평도 아니다. 내가 문제를 일으킨다면 누가 책임을 질 것인가를 생각해보면 쉽게 이해된다. 단계별로 올라가면서 욕을 먹게 된다. 나 다음으로 욕먹는 사람이 내 직속 상관이다. 진짜 ..

Q. GPU 달린 내 컴퓨터에 제대로 pytorch가 설치되었는지 테스트 하는 방법은?

A. python을 실행한다. 아래처럼 입력한다. $ python import torch torch.rand(5).to('cuda') 제대로 작동한다면 아래처럼 나온다. cuda를 써서 난수를 얻어낸 것이다. torch.rand(5) 는 잘 실행되는데, torch.rand(5).to('cuda')는 엄청 오래 걸리고 잘 안 된다면, 관련 프로그램을 다시 설치해야 한다. pytorch가 cuda를 쓸 수 없는 상태이므로.

딥러닝Deep Learning 공부를 위한 서버용 데스크탑 컴퓨터 구입기

금액이 커서 한번 실패하면 또 살 수 없어서 이것저것 찾아 봤다. 그냥 Dell의 딥러닝을 위한 서버 컴퓨터를 살까 싶어서 알아봤지만 너무 비쌌다. 그래서 그냥 직접 맞추기로 결정했다. 딥러닝을 공부하는데 왜 컴퓨터가 따로 필요할까? GPU 때문! GPU 때문이다. 딥러닝Deep Learning 코드를 돌려 보려면 GPU 달린 컴퓨터가 필요하다. 그것도 Nvidia. 많은 딥러닝 코드가 CUDA를 기본으로 쓰고 있기 때문이다. 엔비디아의 GPU가 달려 있지 않은 컴퓨터에서 실행하면? 당연히 에러가 난다. 코드를 돌려보지도 못한다면? 공부가 불가능하다. CPU는 어떤 걸 해야할까? Intel인텔! AMD도 빠르다던데 왜 인텔을 해야 할까. MKL 같은 인텔 기반 수학 라이브러리를 쓰는 코드를 실행하려면 인..

플라스크Flask ORM 예제 프로젝트

ORM이란? ORM(Object-relational mapping)은 객체와 관계형 데이터베이스를 연결해주는 것을 뜻한다. ORM을 이용하면 객체를 다루듯 관계형 데이터베이스를 다룰 수 있다. SQL문 없이 데이터베이스에 내용을 추가Create, 조회Read, 변경Update, 삭제Delete CRUD 할 수 있다. 파이썬Python에서 장고Django가 ORM으로 유명한데 플라스크Flask에서도 할 수 있다. flask_sqlalchemy 팩키지를 이용하면 쉽게 ORM을 구현할 수 있다. 프로젝트 예제 Flask ORM Example Project 위 프로젝트를 내려받아서 실행해보면 어떤 식으로 작동하는지 쉽게 이해할 수 있다.

Q. MySQL 외래키 추가 시 'Cannot Add Foreign Key Constraint' 오류 원인은?

A. 원인이 여러가지가 있는데 내 경우에 타입이 달라서였다. 같은 INT인데 왜 안 되지 한참 헤맸다. 이유는 테이블 A의 INT 타입은 UNSIGNED였고, 참조하는 테이블의 필드는 INT 타입이지만 SIGNED였다. desc 테이블명; 실행해서 정확히 type을 확인해보자. type을 정확히 맞춘 뒤에는 정상적으로 foreign key 추가할 수 있었다.