하루 종일 앉아 일하다 보면, 오후 어느 순간 목과 어깨가 돌처럼 굳고 허리가 뻐근해집니다. 비싼 의자를 사면 나아질까 싶었지만, 정작 더 효과가 컸던 건 ==자주 움직이는 습관==이었습니다. 장비보다 태도가 먼저더군요. > 몸을 망치는 건 나쁜 자세보다, '같은 자세'를 오래 유지하는 것입니다. 가장 해로운 건 '안 움직이는 것' 우리는 흔히 자세가 나빠...
메시지를 쓰다가 "안 되" 인지 "안 돼" 인지 몰라 잠깐 멈춘 적, 누구나 있을 겁니다. 한국인도 자주 틀리는 단골이죠. 그런데 이건 외울 필요가 전혀 없습니다. ==딱 하나의 치환법==만 알면, 앞으로 다시는 헷갈리지 않습니다. > 규칙을 외우지 마세요. 바꿔 넣어보면 답이 보입니다. 핵심 한 가지: '하/해'를 넣어본다 방법은 이렇습니다. '되' 자리...
서비스가 갑자기 멈췄습니다. 로그를 열어보니 `No space left on device`. 디스크가 꽉 찼다는 뜻이죠. 그런데 막상 뭘 지워야 할지 모르면, 이 짧은 한 줄이 사람을 한 시간씩 붙잡아 둡니다. 저도 처음엔 무작정 로그 폴더만 뒤졌다가 엉뚱한 곳에서 헤맸습니다. 오늘은 디스크가 찰 때 ==범인 폴더를 빠르게 찾아내는 순서==를 차근차근 정리...
"7일 뒤"를 계산했는데 결과가 하루씩 밀린 적, 한 번쯤 있으시죠? 저는 회원 쿠폰 만료일을 `strtotime`과 문자열로 대충 계산했다가, 월말과 윤년에서 보기 좋게 틀렸습니다. PHP에서 날짜를 안전하게 다루는 길은 생각보다 단순합니다. ==`DateTime` 클래스== 하나만 손에 익히면 됩니다. > 날짜는 '문자열'이 아니라 '객체'로 다뤄야 실...
뉴스에서 "기준금리 동결" 같은 말이 나오면, 왠지 내 대출 이자가 어떻게 될지부터 걱정됩니다. 그런데 정작 기준금리가 정확히 뭔지 물으면 설명하기 애매하죠. 사실 원리는 어렵지 않습니다. ==기준금리는 '돈의 기본 가격'==이라는 한 문장만 잡으면, 나머지는 자연스럽게 따라옵니다. > 금리를 이해한다는 건, 결국 '돈에도 값이 있다'는 걸 받아들이는 일입...
재테크를 시작하면 가장 먼저 만나는 두 단어가 'ETF'와 '펀드'입니다. 둘 다 여러 종목을 한 바구니에 담는다는 점은 같아서, 처음엔 뭐가 다른지 잘 안 보입니다. 저도 한참을 헷갈리다가, =='어떻게 사고파느냐'==를 기준으로 보니 한 번에 정리됐습니다. > 같은 바구니라도, 시장에서 파느냐 창구에서 맡기느냐가 다릅니다. 둘 다 '바구니'라는 건 같다...
건강 이야기에 빠지지 않는 말이 있죠. "하루에 물 2리터는 꼭 마셔라." 저도 한동안 텀블러에 눈금을 그어가며 채웠는데, 어느 날 문득 의문이 들었습니다. 정말 모두에게 똑같이 2리터가 맞을까? 결론부터 말하면, ==2리터는 절대 기준이 아닙니다==. > 몸이 필요로 하는 물의 양은 사람마다, 날마다 다릅니다. '2리터'의 진짜 의미 필요한 수분량은 체격...
PHP에서 가장 자주 만나는 오류 중 하나가 `Warning: Cannot modify header information - headers already sent`다. 결론부터 말하면, HTTP 헤더(쿠키·세션·리다이렉트)를 보내기 전에 이미 본문(HTML, 공백, 출력)이 먼저 전송되었기 때문이다. 원인을 알면 대부분 1분 안에 해결된다. 왜 발생하나 H...
MySQL에 한글을 저장했는데 글자가 `???` 나 깨진 문자로 보인 적 있으신가요? 원인은 대부분 문자셋(charset) 불일치입니다. 한 군데만 어긋나도 깨집니다. 이 글에서 어디를 맞춰야 하는지 순서대로 정리합니다. 결론부터: utf8 말고 utf8mb4 MySQL의 `utf8`은 사실 최대 3바이트만 저장하는 반쪽짜리라 이모지·일부 한자에서 문제가 ...
PHP로 프로젝트를 만들다 보면 거의 한 번은 마주치는 오류가 있습니다. ``` Warning: require_once(.../config/config.php): failed to open stream: No such file or directory Fatal error: require_once(): Failed opening required '.../co...