분류 전체보기
-
SSH로 원격 서버 안전하게 접속 관리하기Programming/TIL 2024. 9. 4. 17:22
기본적인 ssh 연결 방법부터 보안을 강화하는 방법까지 실제 홈서버를 만들면서 알아본 내용을 초보자 관점에서 설명합니다.비밀번호 인증 대신 ssh 키 인증을 사용해야 하는 이유와 설정 방법, sshd_config 파일을 통한 보안 설정 등 인터넷상으로 ssh 연결이 가능하게끔 설정할 때 필요한 내용을 포함합니다.그리고 Tailscale VPN을 이용한 ssh 연결 방법을 소개합니다.Intro요즘 짬짬이 노노그램 퍼즐 서버를 개발 중입니다. 간단한 REST api 서버입니다.서버는 예전에 쓰던 노트북을 서버 PC로 운용할 예정입니다. 힌지가 박살 나서 제대로 여닫는 데 10분 이상 걸리는 노트북입니다. 작동은 되니까 전원 물려놓고 서버용으로 방구석에 모셔놓기에는 안성맞춤이지요. 한편, 고장 난 노트북 앞에..
-
노노그램 서버 제작기2: 도커와 서버 배포 준비Programming/Projects 2024. 9. 1. 08:43
Docker와 Docker Compose를 사용해 이전에 만들었던 서버를 배포하는 과정을 다룹니다.멀티 스테이지 빌드를 이용한 도커 이미지 최적화, 도커 네트워크를 통한 컨테이너 간 통신, 도커 컴포즈를 사용한 서비스 관리 등의 내용이 포함되어 있습니다.Intro이번엔 전편에서 만든 노노그램 퍼즐 서버를 실제로 서비스해 보려 합니다. 집에 있는 고장 난 노트북을 서버 PC로, 서버를 실제 웹에 올리는 게 목표입니다.그래서 오늘은 도커를 사용해 퍼즐 서버를 쉽게 배포하고 실행가능하게 만들어 볼 예정입니다.왜 벌써 배포를 고민할까?서버는 이제 개발 초기 단계입니다. API 요청 받으면 JSON 하나 달랑 보내는 게 전부입니다.이용자도 없습니다. 완성한다 해도 사실 저를 제외하고 누가 쓸지도 모르겠습니다.그런..
-
배열과 포인터의 차이Programming/TIL 2024. 8. 27. 05:09
C언어에서 배열과 포인터의 차이점을 상세히 설명합니다.2차원 배열을 이중 포인터로 전달할 때 발생하는 문제와 배열 붕괴(decay) 현상을 통해, 배열과 포인터가 실제로는 다른 개념임을 설명합니다.Intro배열을 포인터로 넘겨주기가로 x 세로 크기 2차원 퍼즐 게임을 만든다고 해봅시다. 일단 아래와 같이 18줄 정도 코드를 작성했습니다.struct puzzle{ int n_rows; int n_cols; int **board;};void print_puzzle(struct puzzle *p){ for (int i = 0; i n_rows; i++) { for (int j = 0; j n_cols; j++) { printf("%d ",..
-
노노그램 퍼즐 웹 서버 제작기 1: 기본 서버 만들기Programming/Projects 2024. 8. 27. 03:02
웹 프레임워크 없이 순수 Go 표준 라이브러리로 HTTP 서버를 구축하는 내용을 담고 있습니다.Go와 PostgreSQL을 이용해 간단한 웹서버를 제작하는 여정을 기록했습니다.노노그램 퍼즐을 저장하기 위한 PostgreSQL 데이터베이스 설계 및 구축, 다국어 지원을 위한 스키마, TABLESAMPLE BERNOULLI를 활용한 랜덤 데이터 추출 최적화 등 처음 웹 서버를 만들어 보며 겪는 과정들을 기록해 놓았습니다.Intro최근 웹 소켓과 TCP/IP 네트워크 기초를 공부했습니다.공부한 내용을 적용해 볼 겸 첫 서버 프로그래밍 프로젝트를 시작해 보려고 합니다.예전에 C 언어 연습용으로 만들다 완성을 미뤄둔 터미널 네모로직 프로그램을 위한 웹 서버입니다. 서버의 목적은 단순합니다. 퍼즐 데이터를 제공하는..
-
백준 1715번 카드 정렬하기: C++ 풀이Programming/PS 2024. 5. 1. 17:09
백준 1715 카드 정렬하기 문제의 C++ 해설입니다.우선순위 큐(최소 힙)를 사용한 일반적인 풀이와 배열을 사용한 더 효율적인 풀이, 두 가지 방법을 설명합니다.백준 13975 파일 합치기 3 와 유사한 문제입니다.기본 접근: 우선순위 큐 활용비교 횟수 최소화 전략제시문에서도 언급하듯, 카드 묶음을 고르는 순서에 따라 비교 횟수가 매우 달라진다.카드를 합치며 묶음 크기가 누적으로 더해지기 때문이다.큰 값을 누적으로 더하는 것 보다, 작은 값을 누적으로 더하는 게 좋다.따라서 비교 횟수 최소화를 위해 현재 카드 묶음 중 크기가 가장 작은 두 카드 묶음을 먼저 합쳐야 한다.우선순위 큐를 사용하는 이유와 시간 복잡도카드를 저장하기 위해 일반적인 배열을 사용한다고 생각해보자.배열을 정렬하면 크기가 가장 작은 ..
-
[CS:APP/시스템 프로그래밍] Bomb Lab 풀이Programming/CS:APP 2024. 4. 1. 20:58
CMU CSAPP (Computer Systems: A Programmers Perspective, 컴퓨터 시스템) Bomb Lab 과제 Solution 및 해설입니다.objdump를 활용한 리버스 엔지니어링을 통해 각 페이즈 해체 과정과 숨겨진 페이즈를 찾는 방법, 그리고 어셈블리 코드 분석 전략을 단계별로 설명합니다.Bomb Lab 시작하기CMU CSAPP 홈페이지 에서 과제 다운로드가 가능하다.wget http://csapp.cs.cmu.edu/3e/bomb.tar과제 파일 압축을 풀어준다. 안에는 실행 가능한 bomb 파일이 있다.파일은 총 6번에 걸쳐 문자열 입력을 받는다. 잘못된 문자열을 입력시 폭탄이 폭발한다. 폭탄이 폭발할 때마다 점수가 깎인다.리버스 엔지니어링 스킬을 총동원해 올바른 문..
-
How to move focus to a specific (visible)buffer in Neovim Lua scriptProgramming/Troubleshooting 2024. 3. 29. 03:33
간단한 건데 생각보다 찾는 데 오래걸려서 기록 코드 터미널에서 실행 시킨다구 버퍼 열어서 command 보내는 스크립트 만드는 데 새 창 만들 때면 포커스/커서가 잘 이동 하는데 이미 띄워진 윈도우면 이동을 안해서 찾아봄 local win = vim.fn.bufwinid(x.buf) vim.fn.win_gotoid(win) vim.cmd "startinsert" api에 다 있었다.
-
티스토리 JetBrains Mono 웹폰트 적용 시 글자가 다를 때/이상할 때Programming/Troubleshooting 2024. 3. 29. 03:13
티스토리나 블로그의 코드 블럭에서 JetBrains Mono 폰트를 적용했을 때 ligature와 글리프가 다르게 보이는 현상을 수정하는 CSS 구문을 소개합니다.평소에 ide에서도 JetBrains Mono 폰트를 쓰고 있어서티스토리 코드 블럭에 JetBrains Mono 폰트 적용해서 사용하고 있는데,오늘 뭔가 글씨가 쎄~~ 하길래 neovim 켜서 비교해 보니까 실제로 글씨가 적용된 게 많이 다르더라고요 차이가 보이시나요r이랑 y의 glyph? 가 확실히 차이 납니다. 해결법-webkit-font-feature-settings: 'liga' on, 'calt' on;요 라인을 추가해주면 됩니다. code { font-family: JetBrains Mono, D2Coding, 'D2 co..