
공학박사 박우람
서울대 기계공학 학사, 석사
미국 Johns Hopkins 대학 기계공학 박사
UT Dallas 기계공학과 교수
재미한인과학기술다 협회 북텍사스 지부장
사람이 찾아낸 최소의 정보 단위는 비트다. 컴퓨터가 이해할 수 있는 유일한 정보인 0과 1을 담을 수 있는 가상의 공간이 바로 이 비트다. 컴퓨터 속에서 0과 1은 거대한 컴퓨터 시스템을 작동하게 하지만, 우리는 그 숫자의 나열을 아무리 들여다봐도 그 뜻을 이해할 수 없다. 비트는 철저하게 컴퓨터를 위한 알파벳이다. 이 0과 1이 컴퓨터 밖으로 나들이를 나와 검은색과 흰색의 옷을 입고 여기저기 몰려다니는 것 같다. 이것이 내가 QR 코드를 처음 보았을 때 받은 인상이다.
QR 코드
미국의 일상에서도 자주 QR 코드를 만나게 된다. 식당 메뉴, 주차료 징수, 광고, 공공 안내 등, 웹주소를 직접 넣지 않고도 간단히 스마트폰 카메라를 가져다 대면 해당 웹사이트로 바로 이동할 수 있어 꽤 편하다. 중국과 인도를 포함한 여러 아시아 국가에서는 인터넷 결제와 연동되어 QR 코드가 널리 사용되고 있다. 사각형의 QR 코드 속에는 어떤 기술들이 숨어 있을까?
QR 코드는 수많은 검은 점과 흰 점으로 이루어져 있고 각각은 1과 0을 뜻한다. QR 코드의 세 귀퉁이에는 사각형 표시가 있다. 이 세 사각형을 기준으로 코드의 상하좌우를 읽어낸다. 그 후 남은 부분으로부터 문자나 웹페이지 주소, 와이파이 정보 등을 얻는다.
QR 코드의 크기는 하나로 고정되어 있지 않다. 가로 혹은 세로 방향으로 칸의 개수를 세어보면, 가장 작은 QR 코드가 21개의 칸을 가지고 있고, 이를 version 1이라고 부른다. version이 하나 늘 때마다 칸은 4개씩 늘어나고 표준 QR 코드 규격에서는 version 40까지 있다.
QR 코드 속에는 우리가 넣고 싶은 정보를 저장하는 부분 말고도 QR 코드의 규칙 때문에 선점된 자리가 여럿 있다. 그 첫째가 바로 앞에서 이야기한 세 모서리의 사각형 자리다. 이 사각형도 그냥 만들어진 것이 아니다. 가운데 9개의 검은 점이 정사각형을 이루고 그 주변을 흰 띠와 검은 띠가 순서대로 둘러싸고 있다. QR 코드 개발자들은 임의의 정보가 QR 코드로 변환되었을 때 가장 발생하기 힘든 패턴을 찾았고, 그것이 바로 이 모서리 사각형의 모양이 되었다. 왜냐하면 정보를 담은 부분과 QR 코드 감지를 위한 모서리 표시는 서로 다른 모양이어야 하기 때문이다.
QR 코드에서 가장 흥미로운 것은 마스킹이다. QR 코드에 담은 정보에 따라 코드의 모양이 결정되는데, 마스킹이라는 과정을 거치지 않으면 코드의 일부 또는 전부가 흰색이거나 검은색이 되는 경우도 발생할 수 있다. 이렇게 되면 QR 코드를 읽는 컴퓨터가 영상을 해석하면서 오류를 범할 확률이 올라간다. 예컨대 연속된 검은 점 10개가 있다고 하자. 검은 점은 연결되어 있어 긴 줄로 보이는데, 이것이 정확히 10개의 검은 점인지 알려면 각 점의 폭을 정확히 알아야 한다. 카메라로 QR 코드를 찍을 때 영상에 왜곡이 있거나 조명 상태가 나쁜 경우에는 그 폭을 정확히 알아내는 데 추가적인 알고리즘이나 계산 시간이 필요하다. 반대로 흰색과 검은색이 번갈아 가며 찍혀 있다면 코드 감지와 연산이 훨씬 쉽다.
이를 위해 QR코드에는 8개의 마스크가 있다. 이 마스크는 QR 코드의 각 칸에 0 또는 1의 숫자가 할당된 패턴이다. 이 마스크를 1차로 만들어진 정보 코드에 XOR 연산으로 적용해 QR 코드의 모양을 바꾼다. 마스크 정보도 QR 코드에 함께 심어서 코드를 읽을 때 역산하여 진짜 정보를 복원할 수 있게 한다.
XOR 연산이란 뭘까. 비트 하나는 0 또는 1의 정보를 가진다. 여기에 0 또는 1이라는 마스크를 적용할 수 있다. 마스크 0을 적용하면 정보는 바뀌지 않는다. 마스크 1을 적용할 때는 정보를 뒤집는다. 즉 0은 1로, 1은 0으로 만든다. 예컨대 00의 정보 열에 01이라는 마스크를 순서대로 적용하면 01이 된다. 이런 식으로 다양한 마스크를 적용해 보면 그중에는 흰색과 검은색이 적절히 섞인, 카메라에 잘 감지되는 QR 코드를 만들 수 있다. 가장 흥미로운 부분은 이렇게 바뀐 정보에 같은 마스크를 한 번 더 같은 방식으로 적용하면 원래 정보를 복원할 수 있다는 점이다. 즉, 변환된 결과인 01에 마스크 01을 적용하면 다시 원래 정보인 00을 얻는다.

XOR 연산을 이용한 정보 변환과 복원
웹사이트를 안내하는 QR 코드를 자주 볼 수 있는데, 한 가지 조심해야 할 점이 있다. 약 4년 전, 텍사스 오스틴에서 있었던 일이다. 공공 주차장 요금 기계에 누군가 QR 코드를 붙였고, 그걸 이용해 많은 사람이 가짜 주차 요금 웹사이트에서 돈을 낸 사건이었다. QR 코드만 봐서는 이것이 진짜인지 가짜인지 알 수 없다. QR 코드를 이용할 때는 웹사이트에 접속하기 전에 주소와 운영 주체를 꼼꼼하게 들여다보아야겠다.


