정규 표현식을 이용한 찾기/바꾸기 시 카운터 사용
반복된 패턴을 찾아 다른 문자열로 치환하고 싶을 때 정규 표현식을 사용하면 편리하다. 지금까지는 정규 표현식을 사용해 문자를 치환할 때 고정된 패턴만 지정할 수 있다고 생각했다. 그래서 스택오어플로우에서 정규 표현식으로 문자열을 치환할 때 카운터(counter)를 사용할 수 있냐는 질문을 봤을 때 '되지도 않는 질문'이라 속단했다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
반복된 패턴을 찾아 다른 문자열로 치환하고 싶을 때 정규 표현식을 사용하면 편리하다. 지금까지는 정규 표현식을 사용해 문자를 치환할 때 고정된 패턴만 지정할 수 있다고 생각했다. 그래서 스택오어플로우에서 정규 표현식으로 문자열을 치환할 때 카운터(counter)를 사용할 수 있냐는 질문을 봤을 때 '되지도 않는 질문'이라 속단했다.
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에서는 다음과 같은 식으로 원하는 만큼 행을 생성할 수 있다.
언어의 한계가 사고의 한계다.
- 비트겐슈타인
아주 오래 전에, 그러니까 C/C++, Java 외 다른 언어는 공부할 필요가 없다고 생각했던 때에, 잡지에서 다음과 같은 코드를 본 적이 있다.
qsort [] = []
qsort (p:xs) = qsort [y | y <- xs, y < p] ++ [p] ++ qsort [y | y <- xs, y >= p]
블로그 테마를 수정하면서 소스 코드 하이라이팅 스타일도 바꾸고 싶었다. 내 테마의 스타일은 stylus로 되어 있는데, 파일을 살펴보니 중간에 다음과 같은 부분이 보였다.
그동안 프로젝트 성격의 일도 있었지만 대부분은 반복적인 작업이었다. 일이 점점 지겨워지고 있었다. 매일 아침 데이터베이스 상태를 확인하는 것도, 작업을 할 때마다 세 번씩 확인을 받아야 하는 것도 모두 짜증났다. 내가 사고를 쳤기 때문에 이런 절차가 생겼고, 이런 절차를 만든 게 나 자신이었고, 안정적인 운영을 위해서는 이런 절차가 필요하다는 점이 나를 더욱 힘들게 했다. 참을성이 바닥나고 있었다.
입사한지 1년 반이 되어 가고 있었다. 그동안 심각한 장애는 대부분 내 실수에서 비롯되었다. 애플리케이션 서버는 여러 대로 운영하기 때문에 한 대에 문제가 생겨도 거래가 중단되지 않는다. 데이터베이스는 문제가 생기면 모든 거래가 중단되는 단일 실패 지점(Single poing of failure)이었다.
지난 번 사고 후 네 달 이상 장애가 발생하지 않았다. 처음에 조금 실수를 했지만 이제는 어느 정도 자리를 잡았다는 생각이 들었다. 그동안 많은 일을 했고, 특히 전산센터를 이전할 때 내가 작성한 데이터베이스 동기화 프로그램이 중요한 역할을 했다는 점에 자부심을 느꼈다. 몇 달 동안 사고 없이 데이터베이스를 운영하면서 감도 조금 생겼다. 하지만 실수는 방심할 때 찾아오는 법이다.
잘 돌아가면 건드리지 말라는 말이 있다. 100% 완벽하게 이해하지 못하는 시스템에 대해서는 이 말이 좋은 충고일 수도 있겠다는 생각이 든다. 데이터베이스 관리 시스템은 매우 복잡한 소프트웨어이므로 이것을 완벽하게 이해하기란 정말 어려운 일이다. 더군다나 데이터베이스가 어떻게 구성되어 있느냐에 따라 같은 명령도 다른 양상을 보일 수 있다. 중단이 허용되지 않는 데이터베이스 시스템에서 뭔가 작업하려면 더욱 주의해야 하고 가능한 보수적으로 접근해야 한다.
그동안 SI 프로젝트에서 개발 DBA만 하다 처음으로 운영 DBA가 되었다. 그날도 뭘 해야 할지 몰라 데이터베이스 이곳 저곳을 들여다보며 일거리를 찾고 있었다. 모두들 바쁜데 나만 한가한 것 같았다.
JavaScript 코드에 HTML 문자열을 써야 하는 경우가 종종 있다. 문자열이 짧을 때는 그냥 한 줄로 써도 크게 상관 없다. 복잡한 계층 구조를 가지는 긴 HTML 문자열을 써야 할 경우에는 한 줄로 작성하지 않는다. 작성하기도 어렵고 알아보기도 어렵기 때문이다. 보통 다음과 같이 여러 줄로 문자열을 만들고 +
로 연결해 변수에 저장한다.