공부

    Django 초기 설정 - 가상 환경부터 프로젝트 생성까지

    개인 웹 프로젝트를 진행함에 있어 백엔드로 Django를 선택했고, 기본적인 설정을 하는 방법을 글로 작성해서 나중에 헷갈리지 않으려고 한다. 모든 터미널 코드는 macOS 환경을 기준으로 작성되었음을 미리 알린다. 가상 환경 설정하기 먼저, 프로젝트 관리의 편의성을 위해 가상 환경을 설정해 주도록 하자. 설정하기에 앞서 가상 환경이란, 개별의 파이썬 프로젝트들이 서로 다른 버전의 라이브러리를 사용할 수 있도록 하는 환경을 쉽게 구축할 수 있게 해 주는 것이다. 둘 이상의 파이썬 프로젝트가 같은 라이브러리를 사용하지만 버전은 서로 다를 수 있는데, 이러한 환경에서의 개발을 도와주는 것이다. 만약 이 글을 보고 있는 당신이 하나의 컴퓨터로 하나의 프로젝트만 평생 개발할 것이라면 가상 환경은 필요하지 않겠지..

    AES 암호화 알고리즘

    학부 수업에서 다룬 AES 암호화 알고리즘에 대해 정리하고자 합니다. 과제를 위해서 정리한 내용이다보니 틀린 내용이 있을 수 있으니 주의해 주세요. AES 알고리즘이 등장하기 이전에는 DES 알고리즘이 표준으로 사용되고 있었지만, 알고리즘의 취약점이 발견되고 나서 대책이 필요해지기 시작했다. 단순하게 DES를 3번 돌리는 Triple-DES도 사용했지만, 여전히 취약점은 존재했고 특히 S/W상에서 구현할 때 속도가 빠르지 않았다고 한다. 이후 NIST에서 새로운 알고리즘을 모집하였고 이로 인해 선택된 Rijndael의 알고리즘을 AES 알고리즘으로 채택하였다. AES 알고리즘은 128/192/256 비트의 키, 128 비트의 데이터 블럭을 가지고 실행된다. AES의 구조 AES는 4가지의 서로 다른 스테..

    PS에 편한 C++ 문법

    나는 C++로 PS를 하는데, 참고했던 책도 그렇게 최신 책은 아니고 컴파일 환경도 C++14였어서 이런저런 화려한 문법들을 쓰지 않고 PS를 진행했다. 그런데, 다른 사람들의 코드를 읽어 보니 각종 편리한 문법들을 많이 사용하고 있는 것 같아서 나름 사람들 어깨 너머로 배운 내용들이나 편법(?)등을 정리해 놓고자 한다. 다른 사람들의 PS 코드야 예전부터 가끔 읽었지만, 그때는 딱히 내가 저 사람들이 쓰는 문법을 따라 할 필요가 없었다고 느꼈다. 그런데 언젠가부터 이런 마인드를 바꾸기로 결심했는데, 바로 취업을 위한 코딩 테스트를 준비할 때였다. 평소에 PS를 할 때에는 한 문제에 수십 분부터 몇 시간, 며칠을 매달리든 내 자유였지만 코딩 테스트는 그 시간이 정해져 있기 때문에 효율적인 알고리즘을 빠르..

    React에서 map() 사용 시 key 값에 대하여

    개발 중에 갑자기 생각난 이슈. 요즘 새로운 프로젝트를 시작하고 있는데, React에서 자주 찾게 되는 Array.prototype.map() 함수에 대하여 고민해 보게 되었다. map()이 어떤 역할을 하는 함수인지, 어떻게 사용하는지에 대한 설명은 생략하고자 한다. 그 내용을 정리하기 위해서 쓴 게시글이라기보다는, 그 내용을 알면서도 활용할 때마다 항상 고민되는 주제에 대해 다루고자 한다. React에서는 map() 사용 시 key props를 사용하는 것을 권장하고 있다. 사실, ESLint 등을 통하여 작업을 하다 보면 설정에 따라서는 map() 사용 시 key를 부여하지 않는 경우 컴파일 타임에서 에러가 나는 경우도 있다. 지금 진행 중인 프로젝트에서도 ESLint를 초기화만 하고 별다른 rul..

    최단 거리 알고리즘의 이해

    최단 거리 알고리즘에 대해 정리해 본다. 책을 참고했음을 밝힌다. 최단 거리 알고리즘은 말 그대로 시작 지점에서 도착 지점까지 이동하는 경로 중 가장 짧은 경로의 거리를 구하는 알고리즘이다. 장소와 길은 그래프로 나타내기 때문에, 그래프 이론과 밀접한 관련이 있다. 1. 다익스트라 알고리즘 (Dijkstra's algorithm) 가장 스탠다드한 최단 거리 알고리즘이다. 시작 정점을 지정하면 해당 정점에서 출발해서 다른 정점으로 도착할 때의 최단 거리를 알 수 있다. 길찾기 알고리즘을 적용하는 가장 흔한 예는 가중치(weight)가 있는 weighted graph이므로, 나중에 발견된 정점이 최단 거리일 수 있다. 즉, 단순한 BFS로는 최단 거리를 찾지 못하는 경우가 수없이 많다는 것이다. 다르게 말하..

    하나의 컴퓨터로 여러 Git 계정 쓰기 (GitHub, GitLab 등)

    회사에서는 사내 GitLab을 사용하는데, 평소에 GitHub만 써 왔기 때문에 GitLab 로그인 방법을 찾아 보고 ssh keygen으로 적당히 등록하고 '로그인 됐겠지' 라는 마음으로 신나게 commit하고 push한 결과, 로그인이 하나도 안 돼 있었다. commit 이력의 내 이름을 눌러 보면 GitHub에서 쓰던 메일 주소로의 mailto: 링크가 걸려있을 뿐... 이런 불상사를 겪는 사람이 없도록, 또 bash 환경에 익숙치 않아서 나처럼 계속 삽질을 하는 사람이 없도록 Git 다중 계정 사용 방법을 적어놓고자 한다. ssh key 생성하기 Git 계정을 다중으로 이용할 경우 ssh key를 이용하여 계정을 관리하면 된다고 한다. 터미널을 켜서 ssh key를 생성하도록 하자. $ ssh-k..

    TypeScript + ESLint + Prettier 설정하기

    프로젝트에서 TS를 다뤄야 할 상황이 생겨서 TS 개발환경을 설정했다. VSCode에서 TS는 따로 이것저것 설정을 해 줘야 해서 조금은 번거로웠지만 비슷한 처지에 놓인 사람이 혹시 참고가 될 수 있도록 글을 쓴다. 또, 나는 평소에 스페이스바도 안 누르고 엔터도 제때제때 안 누르고 그냥 막 코딩해 놓고 Prettier의 Auto fix on save 기능에 모든 것을 맡긴다. TS는 이것도 따로 설정해 줘야 하길래 이것에 대한 설정도 다루고자 한다. TypeScript 설치하기 VSCode에서 설정 창을 열어서 npm을 통해 TypeScript를 설치해 주자. $ npm i -D typescript 참고로, npm install의 플래그 중 -P(--save-prod)는 프로젝트를 구동할 때 필요한 d..

    Git으로 협업하기(fork 후 upstream과 동기화)

    Git으로 프로젝트를 진행해본 적은 여러 번 있었지만 그때는 동기들끼리 모여서 이것저것 부딪혀 가면서 했지만 요즘은 프로젝트 크기도 좀 커지고, 물리적으로 가까이 있는 팀원도 없는 상황에서 이것저것 건드리다가 잘못되면 안되니 협업하면서 알게 된 걸 정리해 보려고 한다. 또, Windows를 사용할 때에는 SourceTree나 GitKraken과 같은 GUI를 주로 이용했다면, 지금은 Mac을 사용하면서 그냥 터미널 상에서 커맨드를 치면서 이용하고 있기 때문에 적응하기 위해서 좀 정리를 해야겠구나 느꼈다. 떠올랐던 의문점 Git에서 original repo를 fork해서 작업한 후 변경 사항을 commit하고 push 후 pull request를 넣고, 각자가 pull request한 것들이 origina..

    KMP 알고리즘

    KMP 알고리즘에 대해 공부하다가 헷갈리는 것들이 있어 자세히 정리했다. 책을 참고했음을 밝힌다. 먼저, KMP 알고리즘이란 문자열 검색을 보다 효율적으로 실행하는 알고리즘으로, 전체 문자열의 모든 부분에서 문자열 비교를 행하지 않으면서 대상 문자열을 빠르게 검색해 낸다. 전체 문자열이 짧으면 몰라도, 수천 수만 줄로 이루어진 문서에서 단어를 검색하는 작업은 모든 글자에서 하나하나 단어를 확인하기에는 무리가 있을 수 있다. 그래서 우리는 naive한 방법보다 훨씬 효율적인 KMP 알고리즘을 사용한다. 가장 간단한 알고리즘부터 떠올려 보자 먼저, 우리가 문자열 검색을 수행하고자 하는 전체 문자열을 '짚더미(haystack)', 그리고 찾아내고자 하는 대상 문자열을 '바늘(needle)'이라고 칭하자. 짚더..