스킨을 적용한 티스토리 블로그에서 MathJax로 수식 입력하기
·
일상이야기
티스토리 글에서 수식을 입력하기 위해 MathJax를 이용하면 편리하다. 자바스크립트 MathJax 모듈 내 코드는 LaTeX 문법을 수식으로 변환해준다. 예를 들어 `1 \lt 2` 를 $ 1 \lt 2 $ 로 보이게끔 바꿔준다. 이 MathJax를 적용하는 방법은 구글링을 통해 쉽게 찾을 수 있다. 그리고 대다수의 블로그는 티스토리의 스킨 HTML의 태그 안에 아래의 그러나, 이 방법은 나에게 동작하지 않았다. 정확히는 매번 화면에 진입할때마다 수식이 제대로 보이기도 했고, 안 보이기도 했다. 그 이유는 티스토리가 글을 로딩하는 시점과 MathJax 모듈을 로딩하는 시점의 차이 때문으로 분석된다. 1. 티스토리 글이 MathJax 모듈보다 먼저 로딩(실행)될 경우- 티스토리 글 로딩 -> 로딩된 ..
취미로 백준을 풀어보려는 사람에게
·
일상이야기
저는 고등학생 시절 정보올림피아드를 준비해본 적도 있고, 학교 전공 수업에서도 여러 이론들을 접했지만, 꽤 오래 개발만을 하면서 알고리즘과는 멀어져 있었습니다. 그러나 모종의 이유로, 최근 백준을 시작했습니다. 언어는 가장 기본이라 생각되는 c++로 정했습니다. 약 한 달 정도 백준을 풀어본 지금, 백준을 시작하려고 하는 과거의 저에게 알려줬다면 관심있게 들었을 내용들을 소개해보고자 합니다. solved.ac백준을 시작하려는 마음은 먹었으나, 어떻게 시작해야할지 당혹스러울 수 있습니다. 처음에는 백준에서 제공하는 단계별로 풀어보기탭을 이용하였고, 이 순서대로 문제를 풀어보는 것도 나쁘지 않아 보입니다. 하지만, solved.ac는 훨씬 강한 동기부여를 제공합니다. solved.ac는 내가 해결한 문제들을..
개발 생산성을 높이는 MCP의 개념과 Cursor AI 설정법
·
개발이야기
"바이브 코딩"이라는 단어와 함께 MCP에 대한 관심이 뜨겁습니다. Cursor AI라는 코드 에디터는 LLM이 직접 로컬 프로젝트 파일들을 직접 수정하고 코드를 작성하며 바이브 코딩을 가능케 합니다(Cursor AI에 대해서는 이 글을 참고하세요). 그러나, LLM은 간혹 '할루시네이션' 문제를 일으키거나, 잘못된/버그가 있는 코드를 생성하거나, 최신 정보를 알지 못하여 낡은 답변을 내놓는 등의 한계를 보여줍니다. MCP는 이런 한계점들을 돌파할 수 있도록 LLM에게 쥐어줄 수 있는 도구와 같습니다. 이 글에서는 MCP가 무엇인지와 Cursor AI에서 어떻게 설정할 수 있는지를 소개합니다MCP란?MCP(Model Context Protocol)는 LLM과 외부의 도구를 연결하는 방법에 대한 규약입니다..
OCaml에 대해 실전 속성 압축으로 익혀보기
·
개발이야기
저는 지난 봄학기 어느 전공과목에서, OCaml이라는 언어를 이용하여 과제를 해야했습니다. 당연히 이전까지 OCaml을 몰랐고, 딱 과제를 하는데에 지장없는 수준의 실력을 갖게 된 것 같습니다. OCaml의 모든 것을 알고싶지는 않지만, 당장 OCaml로 뭔가를 해야하는 누군가에게 이 글이 도움이 되기를 바라며 작성해봅니다. 저도 절대 OCaml의 전문가가 아님을 다시 한 번 밝힙니다. 여기 코드들을 VSCode에서 실행해보고 싶으시면, 이 익스텐션을 설치하시면 됩니다.OCaml의 컨셉과 문법함수형 프로그래밍OCaml은 철저히 함수형 프로그래밍 언어입니다. 함수형 프로그래밍이 무엇인지도 익숙치 않을 독자를 위해 간단히 예를 들어 보겠습니다. 보통 일반적인 C나 python등 우리에게 익숙한 명령형 프로..
VSCode 환경에서 make로 빌드되는 c파일 gdb로 디버깅하기
·
개발이야기
이번 학기 전공 과목에서 과제를 디버깅하기 위해 설정해 둔 VSCode의 GDB 설정 파일들을 공유합니다(Cursor AI에서도 당연히 동작합니다). 과제는 C 언어로 작성해야 했으며, 미리 정의된 Makefile을 통해 코드의 빌드, 테스트, 클린 작업이 가능했습니다. Makefile 구성은 대략 아래와 같았습니다. program.c 파일과 관련 헤더 파일들을 하나의 목적 파일(program.o)로 컴파일한 후, 이를 실행 파일로 빌드하는 방식입니다. 특별히 주의할 점은, gcc 명령어를 실행할 때 "-g" 옵션을 넘겨주어야 디버깅가능한 파일로 빌드됩니다. 또, "-O2" 등의 옵션은 디버깅 시에 일부 값을 필터링할 수 있으니 디버깅 목적으로는 사용하지 않아야 합니다.HEADERS = program.h..
[전산기조직] 메모리 계층 구조(Memory Hierarchy)
·
개인 공부
5.1 Introduction책꽂이에서 매번 책을 찾아 읽는것보다는, 많이 읽는 책을 책상 위에 두면 시간을 절약할 수 있다. 우리가 필요한 정보는 모든 책에 균등하게 분포되어있지 않기 때문이다. 프로그램 또한, 필요한 코드와 데이터가 균등하게 분포되어 있지 않다. 비슷한 방법으로, 프로그램에게 우리의 메모리가 더 빨라진듯한 환상을 느끼게 해줄 수 있다. 하지만, 빠르면서 큰 메모리는 존재할 수 없다. 책꽂이를 책상위에 얹을수는 없기 때문이다.프로그램의 실행은 지역성의 원리(principle of locality)를 따른다. 프로그램은 시간적/공간적으로 이미 참조한 데이터와 가까운 데이터를 다시 참조할 것이라는 의미이다. 구체적으로 설명하자면, 지역성에는 두 가지 종류가 있다.시간적 지역성(Tempora..
[전산기조직] 프로세서(The Processor)
·
개인 공부
4.1 Introduction이 챕터는 프로세스의 구현방법에 대해서 다룬다. 아주 추상화/단순화된 관점에서부터 datapath를 만들고 간단한 버전의 MIPS를 구현하기에 이른다. 또한, 현실 세계에서 x86같은 복잡한 ISA 구현에 필수적인, 병렬적인(pipelined) 구현 방법 또한 다룬다.우리는 일부 정수 인스트럭션이나, 부동 소수점 인스트럭션 등을 제외하고 아래의 3종류로 분류되는, 간단한 MIPS 인스트럭션들만을 구현할 것이다.메모리 참조 인스터럭션: lw(load word), sw(store word)산수연산 인스트럭션: add, sub, AND, OR, slt브랜치 인스트럭션: beq(branch equal), j(jump)큰 그림모든 인스터럭션은 아래의 두 과정을 거친다.Program C..
[데이터베이스 개론] 8. 쿼리 실행(Query Execution)
·
개인 공부
15장과 16장은 쿼리 처리를 다룬다. SQL은 쿼리를 매우 높은 수준에서 표현하기 때문에, 쿼리 프로세서는 쿼리를 단순히 실행만 하기 보다, 어떻게 실행할지 고민하여 실행 효율을 높여야 한다. 15장에서는 쿼리 실행, 16장에서는 쿼리 컴파일에 집중한다.쿼리 컴파일 단계는 세 가지 단계로 나뉜다.파싱(parsing): 쿼리로부터 맥락 트리(parse treee)를 만듦논리적 계획 생성(Logical Plan Generation): 맥락 트리로부터 논리적 계획(보통 대수적 표현)을 생성한다. 실행시간을 최소화 하기 위해, 동등하지만 더 효율적인 계획으로 변경한다.물리적 계획 생성(Phyisical Plan Generation): 논리적 계획을 물리적 계획으로 변경한다.2번과 3번 단계를 흔히 쿼리 옵티마..