Posts

담배 컷터

담배값이 크게 인상되어 흡연자의 부담이 늘었지만, 주변에 담배를 끊겠다는 사람은 많아 보이지 않는다. 점심을 먹으러 가는 중 회사 동료가 담배를 피우다 장초를 버리는 모습을 보고 아깝다는 생각이 들었다. 저렇게 태우지 않은 부분이 많이 남았을 때는 피운 부분까지만 잘라내 보관했다가 나중에 다시 피우면 좋지 않을까 해서 떠올린 것이 담배 컷터다. 시가(cigar)의 경우는 시가 컷터가 있어 태운 부분만 잘라내는 것을 어디선가 본 것 같다.

Read more...

프로젝트 오일러 1

1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면?

문제 자세히 보기: [국어] [영어]

프로젝트 오일러 문제 중 가장 쉬운 문제일 것이다. 처음에는 문제가 이렇게 쉽지만 뒤로 갈수록 조금씩 어려워져 나중에는 문제가 무슨 뜻인지 이해하기도 힘들어진다. 이 문제는 너무 단순해 아무렇게나 풀어도 답을 구할 수 있다.

Read more...

MacOS X에서 JDK 버전 전환

보통 JDK 최신 버전을 설치해 사용한다. 운영환경에 여전히 JDK7을 쓰고 있지만 개발환경에서는 JDK8을 쓰되 -target 1.7 옵션을 주어 컴파일하면 문제가 없지 않을까 생각했다. 그런데 서버를 올릴때 계속 에러가 발생해 인터넷에서 찾아보니 Spring 3.2.8 버그란다. 이 문제는 Spring 3.2.9에서 해결되었다고 하지만 운영환경은 여전히 Spring 3.2.8을 사용하고 있고, 내가 Spring 버전을 올릴 권한도 없다. 어쩔 수 없이 노트북에 JDK7을 설치할 수밖에 없다.

Read more...

정규 표현식을 이용한 찾기/바꾸기 시 카운터 사용

반복된 패턴을 찾아 다른 문자열로 치환하고 싶을 때 정규 표현식을 사용하면 편리하다. 지금까지는 정규 표현식을 사용해 문자를 치환할 때 고정된 패턴만 지정할 수 있다고 생각했다. 그래서 스택오어플로우에서 정규 표현식으로 문자열을 치환할 때 카운터(counter)를 사용할 수 있냐는 질문을 봤을 때 '되지도 않는 질문'이라 속단했다.

Read more...

MySQL Row Generator

Oracle에서는 connect by를 사용해 필요한 만큼 행(row)을 생성할 수 있다.

select level from dual connect by level <= 100;

PostgreSQL에서도 generate_series를 사용해 쉽게 행을 만들 수 있다.

select * from generate_series(1, 100);

재귀적 CTE(Common Table Expressions)를 사용하면 특정 DBMS에서만 제공하는 기능을 사용하지 않고 표준 SQL만 사용해 행 생성기(row generator)를 만들 수 있다. PostgreSQL에서는 다음과 같은 식으로 원하는 만큼 행을 생성할 수 있다.

Read more...

함수형 언어로 구현한 퀵정렬

언어의 한계가 사고의 한계다.
- 비트겐슈타인

아주 오래 전에, 그러니까 C/C++, Java 외 다른 언어는 공부할 필요가 없다고 생각했던 때에, 잡지에서 다음과 같은 코드를 본 적이 있다.

qsort [] = []
qsort (p:xs) = qsort [y | y <- xs, y < p] ++ [p] ++ qsort [y | y <- xs, y >= p]

Read more...

Hexo: 소스 코드 하이라이팅 스타일 변경

블로그 테마를 수정하면서 소스 코드 하이라이팅 스타일도 바꾸고 싶었다. 내 테마의 스타일은 stylus로 되어 있는데, 파일을 살펴보니 중간에 다음과 같은 부분이 보였다.

Read more...

초보 DBA 삽질기 5

그동안 프로젝트 성격의 일도 있었지만 대부분은 반복적인 작업이었다. 일이 점점 지겨워지고 있었다. 매일 아침 데이터베이스 상태를 확인하는 것도, 작업을 할 때마다 세 번씩 확인을 받아야 하는 것도 모두 짜증났다. 내가 사고를 쳤기 때문에 이런 절차가 생겼고, 이런 절차를 만든 게 나 자신이었고, 안정적인 운영을 위해서는 이런 절차가 필요하다는 점이 나를 더욱 힘들게 했다. 참을성이 바닥나고 있었다.

Read more...

초보 DBA 삽질기 4

입사한지 1년 반이 되어 가고 있었다. 그동안 심각한 장애는 대부분 내 실수에서 비롯되었다. 애플리케이션 서버는 여러 대로 운영하기 때문에 한 대에 문제가 생겨도 거래가 중단되지 않는다. 데이터베이스는 문제가 생기면 모든 거래가 중단되는 단일 실패 지점(Single poing of failure)이었다.

Read more...

초보 DBA 삽질기 3

지난 번 사고 후 네 달 이상 장애가 발생하지 않았다. 처음에 조금 실수를 했지만 이제는 어느 정도 자리를 잡았다는 생각이 들었다. 그동안 많은 일을 했고, 특히 전산센터를 이전할 때 내가 작성한 데이터베이스 동기화 프로그램이 중요한 역할을 했다는 점에 자부심을 느꼈다. 몇 달 동안 사고 없이 데이터베이스를 운영하면서 감도 조금 생겼다. 하지만 실수는 방심할 때 찾아오는 법이다.

Read more...