글을 잘 쓰고 싶다는 생각을 가진 지는 꽤 오래되었다. 그런데, 부쩍 나에게 글쓰기에 대한 자극을 제공하는 사람이 있다. 요즘 듣고 있는 전공수업의 교수님이다. 이제 겨우 이 교수님의 강의를 들은 지 4주 차지만, 이 교수님으로부터 꽤 많은 영감을 받았다. 내가 이 교수님에게서 마음에 드는 점은 두 가지이다. 첫째는 교수님이 학생들에게 지식을 전하는 방법이다. 교수님은 소박한 단어를 많이 사용한다. 볼때마다 알듯 말듯해서, 영어사전으로 내가 알고 있는 의미가 맞는지 확인해봐야 하는 영어단어들은, 교수님의 와닿는 번역을 보았을 때 확실히 기억에 오래 남는다. 사전에는 거절, 부인 등의 의미를 갖는 "repudiation"이라는 단어는 교수님의 "오리발"이라는 번역을 거친 후에, 완전히 내가 알고 있는 단..
새로운 터미널 환경에서 새로운 레포지토리(repository)라도 클론(clone)받으려고 하면 인증이 참 귀찮다. 웹에서 쓰는 비밀번호를 입력하면, 아래의 이미지처럼 비밀번호 인증(Password Authentication)이 종료되었다는 오류로 실패하게 되기 떄문이다. 따로 깃헙의 개인 액세스 토큰(Personal Access Token)을 발급받거나, SSH key를 생성해야 하는데, 토큰의 권한도 관리해줘야하고, 여러모로 복잡하다. 그래서 나는 Github CLI로 로그인하는 방법을 선호한다. Github CLI를 이용하면 여러가지 편리한 방법으로 터미널에서 로그인을 할 수 있다.brew install gh // macOSapt install gh // Linuxgh auth login이 대화형..
이 글은 Discrete Mathematics and its Applications by Kenneth H. Rosen, 8th Edition의 1.1~1.3 절을 재구성한 내용입니다. 이 글은 LaTeX 수식이 포함되어 있습니다. $\sum$ 명제(Proposition)참/거짓을 판단할 수 있는 평서문(Declarative sentence) "x+5=10"은 명제가 아니다. x의 값에 따라 참/거짓이 달라지므로, 문장만으로, 진위를 판단할 수 없기 때문이다. 나중에 다루지만, 이 문장은 predicate라고 할 수 있다. 명제를 부정(Negation)하면 새로운 명제를 만들 수 있다. 혹은, 두개 이상의 명제를 합쳐서 하나의 새로운 명제(compound proposition)를 만들 수 있다. 이 ..
이 글은 Computer Organization And Design: The Hardware/Software Interface, David A. Patterson and John L Hennessy 6th edition 중, Appdendix C: The Basics of Logic Design의 C.2~C.3를 읽고 재구성한 글입니다. 이 글 속의 이미지들도 이 책의 이미지를 사용했습니다. 이 글은 LateX 수식이 포함되어 있습니다. $ \sum $ ">이 글은 LateX 수식이 포함되어 있습니다. $ \sum $ 컴퓨터 세상의 신호는 디지털(Digital)로 통한다. 디지털은 모든 신호를 두 가지로 표현한다. True, 1, asserted 등으로 표현하는 신호와 false, 0, deasser..
컴퓨터 보안의 속성은 CIA triad 와 AAA triad로 설명할 수 있다. CIA triad는 Confientiality(기밀성), Integrity(무결성), Availability(가용성), AAA triad는 Assurance(보장성), Authenticity(진위여부), Anonymity(익명성) 을 포함한다.*CIA triad이 3가지 속성을 잘 갖춘 서비스가 보안이 튼튼한 서비스라고 할 수 있다. Confidentiality(기밀성) 인증되지 않은 사람이 데이터를 읽지 못하게 해야함을 의미한다. 기밀성은 3가지 방법으로 구현될 수 있다. 첫째로 암호화(Encryption)는 대칭/비대칭 키를 이용하여 데이터의 내용을 숨긴다. 둘째로 인증(Authentication)은 유저의 신원을 확..
게시글 작성 화면을 구현하려면, WYSIWYG 에디터를 사용하게 된다. ChatGPT의 추천으로 나는 TinyMCE라는 에디터를 선택했다. 이 에디터를 이용해 게시판 작성 화면을 구현하면서, 이미지와 파일을 다루는 방법에 대해 내가 작업한 내용을 이 글에서 소개한다. 나도 대부분의 코드 작성을 claude-3.5-sonnet(cursor AI)이라는 친구에게 맡기고, 이후 생긴 버그들을 디버깅한 정도라, 코드에는 개선의 여지가 더 많을 수 있다. 1. 사진/파일 업로드 하기문제상황TinyMCE의 이미지업로더(ImageUploadPicker)와 파일업로더(FileUploadPicker) 기능을 활용하고자 한다면, 이미지/파일을 어딘가에 업로드하고, 그 업로드된 URL을 반환해주는 핸들러 함수가 필요하다. ..
결론부터 적자면 주민등록등본을 내니까 성공했다.Google 플레이스토어에 내가 만든 앱을 업로드하려면, 개발자 계정을 추가해야한다.일단 개발자 계정을 생성하는데에 25달러를 요구했고(하필 환율도 높을 때...), 주소지 입력, 결제계정 생성 등 꽤나 답답한 과정을 거친 후에 도착하는 최종관문이 바로 "본인인증"이다. 이 본인인증이 답답한 이유는 아래와 같다. 1. 실제 거주지의 전기/수도 요금 명세서나 은행 명세서 등의 서류를 요구한다.2. 캡쳐/스크린샷이면 안된다.3. 서류에 반드시 실제 본인의 이름과 주소지가 들어가 있어야한다.4. 90일 이내여야 한다.5. 아마 사람이 직접 승인하는 구조라, 근무일에만 승인된다. 처음에는 대충 되겠지 생각하고, 도시가스 명세서 화면을 캡쳐해서 보냈는데, 반려당했다...
약 한 달간 Cursor AI를 사용해보았습니다. 간단한 React 웹 페이지와 NestJS CRUD 서버, 그리고 React-Native 앱의 거의 개발 착수 단계에 사용하였습니다. 결론부터 말하자면, 새로운 프로젝트를 시작할 때에 있어서는 너무나도 편리하고, 압도적으로 생산성을 늘려줄 수 있는 도구라고 느꼈습니다. Gpt나 Github Copilot을 처음 경험했을 때보다도 큰 충격을 준 도구였습니다. 이 글에서는 Cursor AI에 대한 간단한 소개와 느낀 점들을 다룹니다. Cursor AI란Cursor AI는 VScode의 포크 프로젝트이며, 갖가지 AI 기능이 탑재되어 있습니다. 제가 주로 사용한 기능들은 아래와 같습니다.Tab - line 수정 제안코드를 작성하다보면 Cursor가 특정 라인의..
나의 2025년 목표는 1주일에 적어도 하나씩 컨텐츠를 창작하는 사람이 되는것이다.컨텐츠의 범주에는 여러가지가 포함된다. 글, 영상, 코드 모든 것이 다 가능하고, 컨텐츠의 퀄리티는 나의 양심에 맡긴다.구체적으로는 이런것들이다.블로그 글유튜브 영상/숏폼개인 웹/앱 프로젝트 개발그 외...이 중 하나라도 매주 창작하는 것이 목표다. 원래 목표를 이루려면 여기저기 입방정을 떨고다녀야 한다고 했다.올해 말쯤, 이 글을 다시 보게 되었을 때, 형편없는 목표 달성률에 창피할수도 있겠지만, 일단 이 글을 통해 공표한다!왜 이런 목표를 생각하게 되었는가?5년이 안되게 직장생활을 하며 느낀 점은, 월급쟁이 생활은 매우 힘들다는 것이다. 매일 9시간 이상을 사무실에서 남들과 조별과제를 하며 지내는 일을 즐기는 사람은 적..
안드로이드 개발을 할 때, 안드로이드 휴대폰을 맥북과 연결해서 사용합니다. 하지만 유선연결은 여러가지 이유로 불편하죠.이 글에서는 두 기기를 무선으로 연결해보겠습니다. 아래의 과정을 따라갑니다.미리 말하자면, 휴대폰과 맥북이 같은 와이파이 위에 있어야합니다.adb(Android Debugger Bridge) 설치휴대폰 무선 디버깅 켜고 페어링/연결1. adb 설치adb는 Android Debugger Bridge의 약자로, 안드로이드 개발환경과 안드로이드 실기기의 연결을 도와주는 cli 입니다.안드로이드 스튜디오를 설치하고, 설치 과정 중 sdk도 정상적으로 설치되었다면, 이미 설치가 되어있을것입니다.터미널에 adb 를 입력했을 때, adb의 버전넘버와 매뉴얼이 나온다면 이미 사용가능한 상태입니다.만약,..
쿠버네티스와 kubectl 커맨드 관련 작업을 행복하게 만들어주는 보조 도구들을 소개합니다. 쿠버네티스를 처음 사용하거나, 새로 개발 환경을 세팅해야 할 때, 읽어보세요. k9s https://k9scli.io/ K9s - Manage Your Kubernetes Clusters In Style Who Let The Pods Out? K9s is a terminal based UI to interact with your Kubernetes clusters. The aim of this project is to make it easier to navigate, observe and manage your deployed applications in the wild. K9s continually watches..
엑셀 또는 스프레드시트 파일을 Node.js 환경에서 다루고자 할 때, csv 파일을 사용합니다. Csv 파일은 여러 필드가 쉼표와 줄바꿈으로 표현된, 간단한 파일이므로, fs 모듈을 이용하여 쉽게 읽고쓰기 구현이 가능합니다. 하지만, 저는 아래의 라이브러리의 도움을 자주 받는 편입니다. https://csv.js.org/ CSV Project - Node.js CSV package This is a full-featured CSV parsing tool running entirely on your browser. No data leave your computer ! Use it also to learn how to use our packages and to test the various options ..
dump 가져오기 mysqldump --column-statistics=0 -h [host] -u [user] -p [데이터베이스명] > [파일명].sql -p : 패스워드를 입력하겠다는 옵션 --column-statistics=0: mysql 8.0부터 새로 지원하는 COLUMN_STATISTICS 테이블 관련 기능을 끄는(0)옵션 dump 밀어넣기 mysql -h [host] -u [user] -p [데이터베이스명] < [파일명].sql -p : 패스워드를 입력하겠다는 옵션
타입스크립트를 사용하다보면 흔히 볼 수 있는 에러가 있습니다. Type A is not assignable to type B. (2322) 위 케이스는 이해하기 너무나도 직관적이지만, 종종 저 타입 정의가 복잡해지게 되면 에러 해결에 어려움을 겪곤 합니다. 이 글에서는 이 에러 해결에 도움을 줄 수 있는 타입스크립트의 이론적인 개념들을 훑어봅니다. 서브타입과 슈퍼타입 Dog는 Animal인가요? 네 맞습니다. Animal이 Dog인가요? 아닙니다. 그러므로, Dog는 Animal의 부분집합입니다. 타입 세상에서는 더 큰 집합인 Animal을 슈퍼타입, 그 부분집합인 Dog를 서브타입이라 부릅니다. Animal을 담는 변수에 Dog를 담을수는 있지만, Dog를 담는 변수에 Animal을 담을 수는 없습니다..
주의) 필자도 아직 성공하지 못했습니다. 성공했습니다. 블로그 파비콘을 설정한지 꽤 오랜시간이 지났는데도, 파비콘이 생기지 않았다. 분명, 크롬 탭 상단에는 파비콘이 노출되고 있는데도. 관리 > 블로그 탭에서 아이콘과 파비콘을 넣어주었는데도 그렇다. 사이즈와 파일형식도 맞추라는대로 맞추었다. Google에서 제공하는 검색결과에 표시되는 웹사이트 파비콘 정의 방법에 의하면, 위 태그를에 심으면 된다고 한다. 실제로 내 블로그를 확인해보니 위 태그가 누락되어 있었다. 스킨 편집 > html 편집 에서 태그를 추가해주었다. 추가한 후 잠시 후, 실제 내 블로그에 내가 추가한 태그가 정상적으로 심어졌음을 확인했다. 그리고, 검색해본 바로 구글 크롤러의 파비콘 변경은 시간이 좀 걸린다고 하여, 기다려보기로 하였으..
개요 이 글은 컴퓨터 세상과 javascript에서 한글이 다뤄지는 방식을 알아봅니다. 오로지 대소문자 52자와 공백문자, 문장부호만 있으면 되는 영어와는 달리 한글은 자음과 모음의 조합으로 이루어져 있습니다. 한글은 그래서, 완성형과 조합형 두 가지 형태로 저장됩니다. '가' 부터 '힣' 까지의 11,172 자의 글자가 U+ AC00 ~ D7FF의 유니코드 공간을 할당받아 점유 중이고, 초성 'ㄱ'~'ㅎ' 와 모음(중성)과 종성이 U+ 1100 ~ 11FF의 공간을 점유중입니다. 이외에도 다른 한글관련 유니코드들이 있습니다. 조합형 글자들의 Normalization 문자의 Equivalence 이런 조합의 문제는 한글만이 겪는 것이 아닙니다. "가" 와 "ㄱ"+"ㅏ"가 동등한 것과 같은 성질을 동등성(..
IDE 사용 중 실수로 서버 등을 실행해둔 채로, IDE를 종료하여, 어떻게 종료해야 할지 모르겠을 때 사용합니다. 특정 포트를 사용하고 있는 PID를 찾아서 그 프로세스를 종료시키면 됩니다. macOS와 Linux 모두에서 적용 가능합니다. 예시) 8050번 포트를 잡아먹고 있는 내 프로세스를 죽이고 싶다면 lsof -i tcp:8050 # 혹은 netstat -vanp tcp | grep 8050 # 에서 PID 확인 후 kill -15
oh-my-zsh은 멍청하고 입력이 불편한 터미널을 아주 똑똑하게 만들 수 있는 툴입니다. 맥북을 처음 구매했다면, 거의 필수로 깔아야하는 툴입니다. 설치 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 위 커맨드만 터미널에 입력해주면 설치는 끝입니다. oh-my-zsh는 기본적으로 온갖 alias를 제공합니다. alias를 터미널에 입력하여 어떤 alias가 가능한지 리스트를 볼 수 있습니다. 저는 alias 를 많이 사용하지는 않으나, 홈으로 바로 이동시켜주는 ~ 와 현재 경로의 모든 파일을 보여주는 ls -al의 alias인 la를 가장 많이 사용하는 것 같습니다. oh-my-..
맥북을 사면 가장 먼저 해야 할 일 중 하나는 역시 터미널 꾸미기입니다. 저는 powerlevel10k로 터미널을 꾸며 사용하고 있습니다. 아래 내용은 powerlevel10k readme 에서 필요한 내용만 재구성한 것입니다. 기본 환경 세팅 이전에는 iterm2와 zsh이 설치되어 있습니다. zsh은 최신 맥북 OS 에서는 iterm2에 기본으로 깔려 있습니다. 설치 과정 터미널에 아래 명령어를 순서대로 입력해줍니다. # powerlevel10k를 로컬에 설치하는 커맨드 입니다 git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k # 설치한 powerlevel10k 관련 내용을 zsh의 config 파일인 zs..
안녕하세요. Mozilla에서 소개된 HTTP의 역사 관련 글을 재구성해 보았습니다. https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP HTTP 기본 - HTTP | MDN HTTP는 확장 가능한 프로토콜로 리소스 및 URI(Uniform Resource Identifier), 간단한 메시지 구조, 클라이언트-서버 통신 흐름과 같은 개념에 의존합니다. 이러한 기본 개념을 토대로, 새로운 HTTP 메서드나 developer.mozilla.org HTTP란? OSI 7계층에서 애플리케이션 계층의 프로토콜입니다. 일반적으로는 TCP 및 TLS(HTTPS) 계층 위에서 동작합니다. UDP 위에서 동작 가능하게 된 것은 아래 기술할 것이나, HTTP/3..
안녕하세요. 저는 게임을 좋아하는 백엔드 개발자로써, 줄곧 맥북과 윈도우 데스크탑을 함께 사용하고 싶은 욕구가 있었습니다. 그리고, 최근에 꽤나 만족스러운 퀄리티로 이 둘을 모두 사용하는 데스크셋업을 완료하여 공유합니다. 책상위에는 클램쉘모드의 맥북이, 아래에는 윈도우 데스크탑이 놓인 모습입니다. 선을 꼽았다뺐다 할 필요 없이, 두 pc가 모니터 2개와 마우스, 키보드 등을 공유하고 있습니다. 또한 리모콘으로 두 pc를 왔다갔다 할 수 있습니다. 맥과 윈도우를 왔다갔다 아래는 장치들의 연결 다이어그램입니다. 그림 속 kvm 스위치는 입출력 장치들과 두 pc를 분기하는 역할을 합니다. 이 스위치 덕에 두 pc를 자유롭게 오갈 수 있습니다. 도킹스테이션은 전원과 온갖 케이블을 하나의 c-type 케이블로 묶..