동생에게 이 책을 선물했다. 다 읽은 뒤에는 엄마에게도 읽어보라고 권할 생각이다.(물어보니 책을 선물한지는 꽤 되었는데 아직 반도 못읽었다고 한다.....) 밝은 밤은 어떤 호수공원에서 밀려오는 물안개같은 희끄무레하면서도 촉촉한 아픔이 서서히 내게도 다가오는 책이다. 작가가 말하고자 하는 여러 세대에 걸쳐져 내려오는 아픔이 마음 깊이 스며드는 이야기였다. 이 책을 읽는 동안 나는 마치 세월의 흐름 속에서 잔잔히 그리고 서서히 자라나는 마리골드를 지켜보는 듯한 기분에 사로잡혔다. 세대의 굴레 속에서 상처받고 다시 일어서는 할머니와 엄마, 지연의 이야기는 내 마음에 정말정말 오래도록 머물렀고 긴 시간 끝에 고심하며 글을 써본다.

 

 

마음이라는 것이 꺼내 볼 수 있는 몸속 장기라면, 가끔 가슴에 손을 넣어 꺼내서 따듯한 물로 씻어주고 싶었다. 깨끗하게 씻어서 수건으로 물기를 닦고 해가 잘 들고 바람이 잘 통하는 곳에 널어놓고 싶었다. 그러는 동안 나는 마음이 없는 사람으로 살고, 마음이 햇볕에 잘 마르면 부드럽고 좋은 향기가 나는 마음을 다시 감스에 넣고 새롭게 시작할 수 있겠지. 가끔은 그런 상상을 하곤 했다.

 

 

  엄마는 평범하게 사는 것이 제일 좋은 삶이라고 말했었다. 아빠와의 결혼으로 자신도 평범한 가족을 꾸리게 되어서 좋았다고 이야기했었다. 그런 말을 습관적으로 하던 엄마를 예전에는 잘 이해할 수가 없었다. 나는 머릿속에 동그라미 하나를 그리고 그 안에 평범일하는 단어를 적었다. 다른 사람들과 다르지 않은 삶, 두드러지지 않은 삶, 눈에 띄지 않는 삶, 그래서 어떤 이야깃거리도 되지 않고, 평가나 단죄를 받지 않고 따돌림을 당하지 않아도 되는 삶, 그 동그라미가 아무리 좁고 괴롭더라도 그곳에서 벗어나서는 안 된다는 것이 엄마의 믿음이었는지도 모르겠다고, 나는 잠든 엄마의 숨소리를 들으며 생각했다.

 

 

지연의 엄마 미선은 이혼 후 홀로서기를 결심한 딸을 보며 마음속 깊은 곳에서부터 복잡한 감정을 느꼈다. 미선에게는 지연이 평범하고 안정된 삶을 살기를 바라는 마음이 간절했다. 하지만 그 바람 뒤에는 늘 불안과 두려움이 도사리고 있었다. 그녀는 사회가 규정한 틀, 즉 '좋은 아내', '착한 딸', '헌신적인 어머니'라는 프레임 안에서 벗어나는 삶이 얼마나 험난할지 잘 알고 있었다. 그 틀을 벗어나면 맞닥뜨리게 될 세상의 차가운 시선과 냉대가 딸을 향해 얼마나 잔혹하게 다가올지를 미선은 누구보다 잘 알았다.

미선은 딸을 미워해서가 아니었다. 오히려 너무나도 사랑했기에, 그 사랑이 두려움으로 바뀌어버린 것이었다. 자신의 삶 속에서 수없이 마주했던 벽과 장애물들, 그리고 그 모든 것들 앞에서 어쩔 수 없이 선택했던 침묵과 포기. 그것이 때로는 살아남기 위한 유일한 방법이었다는 것을 몸으로 체득했기에, 미선은 딸이 자신과 같은 고통을 겪지 않기를 바랐다. 그래서 딸이 그 틀 안에서 안전하게 머물러 주기를 바랐다. 그것이야말로 세상에서 상처받지 않는 길이라고 굳게 믿고 있었기 때문이다.

하지만 그 믿음은 딸의 자유와 행복을 억압하는 족쇄가 되어버렸다. 미선은 딸이 자기 길을 가겠다고 선언할 때마다 마음속으로 혼란과 갈등을 겪었다. 왜냐하면 딸이 맞이할 세상은 그녀가 알고 있는 세상과는 너무도 달랐고, 그 다름이 미선을 더더욱 불안하게 만들었기 때문이다. 딸을 위해서라면 차라리 자신의 방식이 더 나을지도 모른다고, 딸을 그 틀 안에 가둬두는 것이 오히려 그녀를 보호하는 것이라고 스스로를 설득하며 갈등 속에서 헤맸다.

결국, 미선은 자신이 딸을 보호하고 있다고 믿었지만, 그 보호가 오히려 딸의 숨통을 조이고 있다는 사실을 깨닫지 못한 채, 점점 더 깊은 괴리감 속으로 빠져들었다. 사랑이라는 이름으로 딸을 감싸려 했던 그녀의 마음은, 아이러니하게도 딸을 이해하지 못하는 벽이 되어버렸다.

 

 

그때의 나는 사람이 싫으면서도 한편으로는 간절히 사람을 만나고 싶었다. 서울에서처럼 친구와 한참 이야기하고 싶기도 했고, 손을 뻗으면 닿을 곳에 내 편이 되어주는 사람이 하나만 있어도 좋겠다는 욕심이 들기도 했다. 나에게 결혼은 그런 것이었지만, 더이상 그런 관계가 가능하리라는 믿음이 들지 않았다.

 

 

영옥은 딸 미선과 오랫동안 소원한 관계를 유지해왔다. 두 사람은 서로의 마음을 깊이 들여다보지 못한 채, 먼발치에서 서로를 지켜보며 살았다. 그들은 서로의 삶을 이해하지 못했고 그래서 대화를 나누는 일조차 드물었다. 오랜 세월 동안 쌓인 오해와 침묵은 두 사람 사이에 깊은 골을 남겼다. 그 골이 너무 깊어서 이제는 그저 서로를 향한 단절된 시선만이 남아 있었다.

하지만 손녀 지연과의 만남은 서로에게 뜻밖의 선물 같은 순간이었다. 희령에서 우연히 마주친 지연과의 관계는 그녀에게 새로운 희망이자 위로다. 지연은 영옥의 눈에 자신이 살아온 험난한 길을 다시금 떠오르게 하는 듯했다. 영옥이 그녀가 손녀임을 깨달았음에도 계속 존댓말을 사용한다. 나는 이러한 부분에서 영옥의 마음을 느낄 수 있었다. 영옥은 손녀를 판단하거나 가르치려 하지 않았다. 그녀는 그저 조용히 자신의 이야기를 들려주며 지연이 원하는 대로 받아들일 수 있는 여지를 남겨두었다. 영옥은 자신이 딸 미선에게서 놓쳐버린 것들을 지연에게도 반복하고 싶지 않았을 것이다..

영옥은 자신이 살아온 세월의 무게를 잘 알고 있었고 그 무게를 손녀에게 지우고 싶지 않았다. 그녀는 지연이 자신을 통해 어떤 부담감이나 압박감을 느끼지 않기를 바랐다. 그래서 영옥은 늘 손녀 지연에게 조심스러웠다. 아니 오히려 손녀와의 관계에서 한 걸음 뒤로 물러나, 지연이 자신의 선택을 할 수 있도록 배려했다. 그저 자신의 삶을 이야기해주며, 그녀가 필요할 때 곁에 있어주겠다는 마음으로 다가갔다.

우리는 종종 `어르신으로 가르침을 얻는다, 지혜를 받는다`라는 표현을 듣곤 한다. 그러나 영옥은 지연에게 가르침보다는 공감을 주고자 했다. 지연이 자신의 길을 찾아가는 과정을 존중하며, 그녀가 스스로 삶의 방향을 정할 수 있도록 그저 곁에서 묵묵히 지켜보았다. 그들은 서로에게 많은 말을 나누지는 않았지만, 그 침묵 속에는 깊은 이해와 따스함이 깃들어 있었다. 어쩌면 영옥에게 지연은 단순한 손녀 이상의 존재였고, 지연에게도 영옥은 잃어버린 한 조각을 찾아준 듯한 사람이었을 것이다. 그들은 서로를 통해 위로를 받았고, 세대와 경험을 넘어서는 애틋함을 이루어냈다.

 

 

그렇지만 그게 다 무슨 소용일까. 사람이 사람을 기억하는 일, 이 세상에 머물다 사라진 누군가를 기억한다는 것이 무슨 의미가 있을지 알 수 없었다. 나는 기억되고 싶을까. 나 자신에게 물어보면 언제나 답은 기억되고 싶지 않다는 것이었다. 내가 기원하든 그러지 않든 그것이 인간의 최종 결말이기도 했다. 지구가 수명을 다하고, 그보다 더 긴 시간이 지나 엔트로피가 최대가 되는 순간이 오면 시간마저도 사라지게 된다. 그때 인간은 그들이 잠시 우주에 머물렀다는 사실조차 기억되지 못하는 종족이 된다. 우주는 그들을 기억할 수 있는 마음이 없는 곳이 된다. 그것이 우리의 최종 결말이다.

 

 

새비 아저씨와 새비 아주머니는 단순한 부부 이상의 관계였다. 그들은 서로를 진정한 친구이자 동반자로 여겼다. 새비 아저씨는 누구보다도 인간다운 사람이었다. 그는 남을 지배하려 하거나 권위를 내세우는 데에 전혀 관심이 없었다. 당시 사회는 남성들이 가정 내에서 주도권을 쥐고, 아내를 통제함으로써 자신의 권위를 세우는 것이 당연시되던 시대였다. 하지만 새비 아저씨는 그러한 사회적 관습에 반기를 들었다. 그에게 있어서 진정한 위신이란 남을 억누르거나 지배하는 것이 아니라, 평등한 관계 속에서 서로를 존중하는 데 있다고 믿었다. 그것이 그의 고집이자 삶의 원칙이었다.

나는 이런 새비 아저씨의 모습에서 깊은 존경심을 느꼈다. 그가 보여준 태도는 쉽지 않은 선택이었음을 안다. 시대의 흐름에 거슬러 오르는 일은 늘 외롭고도 고된 일이기 때문이다. 더욱이 그 시대였다면 미친놈 소리를 들었으리라.. 모두가 같은 방향으로 걸어갈 때, 혼자만 다른 길을 걷겠다는 결심은 그 자체로 용기가 필요하다는 걸 나는 안다. 나는 새비 아저씨처럼 아닌 것을 보고도 모른척 고개를 끄덕이는 대신, 분명하게 아니라고 말할 수 있는 사람이 되고 싶고 그 마음을 지키기 위해 노력한다. 내 스스로가 옳다고 믿는 길을 묵묵히 걸어갈 수 있는 그런 사람이 되기를 바란다..

새비 아저씨.. 그와는 달리 삼천의 남편은 그 시대의 평범한 남성으로 살아갔다. (그를 옹호하는 것이 아니다. 끝까지 읽어보라) 그가 처음에는 신분을 뛰어넘는 사랑을 품고 삼천에게 다가갔었던 사실은 아이러니하게도 그를 더 비극적인 인물로 만든다. 순수한 마음으로 시작된 그의 사랑은 결국 세상의 압박과 기대 속에서 변질되고 말았다. 그는 자신에게 쏟아지는 시선과 사회적 요구를 이겨내지 못하고 그 무게에 짓눌려버렸다. 그렇게 그는 자신이 사랑했던 사람에게 해서는 안 될 말을 내뱉고 돌이킬 수 없는 상처를 남기고 말았다.

삼천의 남편이 겪었던 사회로부터의 가스라이팅은 단지 개인의 나약함이 아니라 당시의 사회적 구조와 깊이 맞닿아 있다. 그 역시 시대의 희생자였을지 모른다. 그러나 그럼에도 불구하고 자신의 사랑을 지키지 못하고 결국 상처를 주고야 말았다는 사실은 변하지 않는다. 그런 면에서 그는 평범한 사람일지언정 현대의 관점에서 보면 결코 좋은 남편은 아니었다. 그저 시대의 흐름에 떠밀려 자신을 잃어버린 또 하나의 비극적 인물로 남았다. 그의 끝자락은 정말 우연한 사고였을까? 아니면 그가 선택한 일인 것일까... 나는 후자일 것이라고 믿는다. 역설적인 본인의 모습을 부정한...

 

 

그날 밤 꿈에 전남편이 나왔다. 꿈속에서 나는 그가 내게 준 상처도 잊고, 우리가 다시 만나게 된 것에 그저 행복해했다. 그의 큰 손을 잡아보기도 하고 그를 안아보기도 했다. 편안하고 좋은 기분이었다. 그리고 잠에서 깨었을 때 어떻게 그런 꿈을 꿀 수 있었을까 생각했다. 아직도 내 마음의 일부는 그와 함께했던 시간을 그리워하고 있구나. 오로지 그만이 내게 줄 수 있었던 친밀함을 갈구하고 있구나. 당연한 일이라고 되뇌면서 나는 조금 울다가 자리에서 일어났다.

  내가 새비 아주머니의 입장이었더라도, 나는 남편을 위해 그만큼 울었을 것이고 남편을 다시 만나서도 그만큼 행복했을 것이다. 전남편이 저버린 것은 그런 내 사랑이었다. 내가 잃은 것은 기만을 버리지 못한 인간이었지만, 그가 잃은 건 그런 사랑이었다. 누가 더 많은 것을 잃었는지 경쟁하고 싶지는 않지만 적어도 그 경쟁에서 나는 패자가 아니었다.

 

 

책을 읽어본 독자라면, 아이러니하다고 생각한 부분이 있지 않은가? 삼천의 가족이 한국전쟁이 발발하자 새비 아주머니가 일러준 대구의 주소로 향하던 그 순간, 소설 속에서 그녀의 마음이 표현되진 않았지만 아마도 한없이 무거웠을 것이 분명하다. 나는 왜 이 부분이 소설속에서 자세히 묘사가 안되었는지 잠시 고민했다. 어쩌면 독자들에게 그 역설적인 상황에 대해 이해하고, 자연스럽게 느끼도록 유도한 작가의 의도인 걸까? 나의 상상력을 동원해 삼천이 당시 어떤 마음을 느꼈을지 곰곰히 생각해 보았다. 줄거리를 조금 설명해 보자면, 과거에 반대로 새비 아주머니의 가족이 사상 의심자로 몰려 위기에 처해 절박하게 도움을 청했을 때 삼천은 며칠만 묻게해달라는 새비 아주머니의 간곡한 요청을 거절했다. 당시의 삼천은 그 '사상'이라는 것이 무거운 짐, 화살이 자신과 가족에게 돌아올까 두려웠고, 그 두려움은 그녀를 냉정하게 만들었다. 하지만 이제 전쟁의 포화 속에서 자신이 그토록 외면했던 사람에게 도움 청하기 위해 길을 떠나야 하는 상황에 놓이자 삼천의 마음속에는 죄책감과 후회가 뒤섞였을 것이다.

그 피난길을 걷는 동안 삼천은 자신이 했던 선택이 떠올라 가슴이 먹먹했을 것이다. 과거에 느꼈던 두려움이 이제는 자신을 부끄럽게 만들었고, 그때의 거절이 얼마나 차갑고 잔인했는지 깨달았을 것이다. 삼천은 자신이 얼마나 이기적으로 행동했는지, 그리고 그 선택이 새비 아주머니에게 얼마나 큰 상처를 주었을지 생각하지 않을 수 없었을 것이다. 피난길에서 느꼈을 후회와 불안은 아마도 마른 땅에 내렸던 재섞인 빗물처럼 그녀의 마음속 깊숙이 스며들었을 것이다.

그러나 그와 동시, 새비 아주머니의 대구로 향하는 발걸음에는 은근한 희망이 섞여 있었을지도 모른다. 과거의 잘못을 바로잡을 기회, 비록 늦었지만 진정으로 고마움을 표현할 수 있는 기회를 얻을 수 있다는 작은 희망 말이다. 그 희망은 아마도 삼천이 걸음을 멈추지 않고 계속해서 앞으로 나아가도록 힘을 주었을 것이다.

이 모든 감정들이 뒤섞인 채로 삼천은 피난길을 걸었다. 그 길은 단순히 한 장소에서 다른 장소로 이동하는 것 이상의 의미를 가지고 있다. 그것은 자신의 과거와 대면하고 잘못된 선택을 바로잡으려는 마음의 여정이다. 삼천은 그때 아마도 인생이란 것이 얼마나 아이러니하고 예측 불가능한지 그리고 결국에는 우리가 서로에게 진 빚을 어떻게든 갚아야 하는 순간이 온다는 것을 절감했을 것이다. 그 여정은 삼천에게 상처이자 치유의 길이었으며 자신의 두려움과 마주하고 그것을 넘어설 수 있는 용기를 배우는 시간이었을 것이다. 사필귀정이라 했던가.. 새비아주머니와 재회한 뒤 모든 것은 옳게 되돌아갔다.

 

 

'넌 사랑받기 충분한 사람이야.' 어느 날 말을 이을 수 없어 눈물만 흘리던 내게 지우가 그렇게 말했다. '앞으로는 내가 널 더 많이 사랑할게. 이제 사랑받는 기분이 뭔지도 느끼며 살아.' 아무 이유 없이 나를 싫어하는 사람이 있듯이, 어떤 이유 없이 나를 사랑해주는 사람도 있다는 것을 나는 지우를 보며 알았다.

 

 

증조모가 집을 비울 때면 봄이는 동구 밖까지 가서 기다리다가 돌아오는 증조모를 향해 달려갔다. '너는 내가 왜 좋아?' 의아한 표정으로 봄이의 등을 쓰다듬는 증조모의 얼굴에는 늘 작은 서글픔이 서렸다. 자기에게 달라붙는 봄이에게 그러지 말라고 투정하듯 말하는 증조모의 목소리는 따뜻하고 부드러웠다. 누군가에게 그런 사랑을 받는다는 것이 증조모에게는 평범한 읾이 아니었을 것이다.

 

 

증조모 삼천에게 봄이는 단순한 반려동물 이상의 존재였다. 신분적 차별 속에서 오랫동안 상처받아온 증조모는 자신을 온전히 이해해주고, 아무런 조건 없이 따르는 강아지 봄이를 보며 작은 위로를 얻었다. 다른 사람들 앞에서는 감추어야 했던 연약함과 슬픔을 봄이 앞에서는 드러낼 수 있었다. 봄이가 삼천에게 달려와 안길 때마다 증조모의 마음속 깊이 숨겨둔 고독과 아픔은 조금씩 사라지는 듯했다. 그러나 그 순간들 속에서도 삼천은 늘 자신의 자존감이 낮아져 있는 것을 느꼈고, 자신을 아무런 이유 없이 좋아하는 봄이가 그저 고맙고도 안쓰러웠다.

한국전쟁이 발발하고, 상황이 급변하면서 삼천은 더 이상 봄이를 곁에 둘 수 없다는 것을 깨달았다. 그녀는 마당 밖까지 쫓아오는 봄이를 보며 이제는 이 작은 생명이라도 자유롭게 놓아주어야 한다는 결심을 했다. 그 결심에는 이 전쟁 속에서 봄이가 무사히 살아남기를 바라는 간절한 마음이 담겨 있었을 것이다.. 봄이에게 "이제 자유롭게 살으라"고 말할 때 삼천의 목소리는 비록 단호했을지 모르지만 그 속에는 애틋함과 슬픔이 묻어났다. 봄이가 자신에게서 멀어지는 것이 맞는 일이라는 걸 알면서도 마음 한편에는 이 작고 충성스러운 생명이 자신에게 남아주기를 바라는 이기적인 바람이 떠나지 않았을 것이다. 그녀는 그 바람을 억누르며 봄이를 놓아주려 했지만, 그 마음속에는 깊은 상실감과 외로움이 자리 잡았다.

봄이 역시 증조모의 말을 이해했을 것이다. 그동안 삼천이와 함께한 시간 동안, 그녀의 따뜻한 목소리와 부드러운 손길을 통해 느낀 사랑을 봄이는 잊지 않았다. 삼천이가 자신의 곁을 떠나려는 이유를 정확히 알 수는 없었터였다. 다만 봄이는 그녀의 마음속 깊은 슬픔을 어렴풋이 느꼈을지도 모른다. 그래서 봄이는 눈치껏 돌아섰다. 자신이 더 이상 삼천이를 따르지 말아야 한다는 것을 알면서도, 돌아서려는 그 순간에도 삼천이를 지켜주고 싶다는 충성심은 여전히 강하게 남아 있었다.

봄이는 거리에서 멀어지며 혼자서 자신의 길을 걷기 시작했다. 그러나 그 마음속 깊은 곳에는 여전히 삼천이에 대한 애정과 그리움이 남아 있었다. 어쩌면 봄이는 자신이 떠나면 삼천이가 더 안전할 수 있을 거라는 생각을 하며 삼천이를 위해 떠나는 선택을 했을 것이다. 돌아서며 느낀 그 상실감은 삼천이를 향한 마지막 충성이자, 그녀에게 조금이라도 더 행복한 시간을 선물하고 싶었던 봄이의 작은 희생이었을 것이다.

 

 

우리는 둥글고 푸른 배를 타고 컴컴한 바다를 떠돌다 대부분 백 년도 되지 않아 떠나야 한다. 그래서 어디로 가나. 나는 종종 그런 생각을 했다. 우주의 나이에 비한다면, 아니, 그보다 훨씬 짧은 지구의 나이에 비한다고 하더라도 우리의 삶은 너무도 찰나가 아닐까. 찰나에 불과한 삶이 왜 때로는 이렇게 길고 고통스럽게 느껴지는 것인지 이해할 수 없었다. 참나무로, 기러기로 태어날 수도 있었을 텐데, 어째서 인간이었던 걸까.

  원자폭탄으로 그 많은 사람을 찢어 죽이고자 한 마음과 그 마음을 실행으로 옮긴 힘은 모두 인간에게서 나왔다. 나는 그들과 같은 인간이다. 별의 먼지로 만들어진 인간이 밎어내는 고통에 대해, 별의 먼지가 어떻게 배열되었기에 인간 존재가 되었는지에 대해 가만히 생각했다. 언젠가 별이었을, 그리고 언젠가는 초신성의 파편이었을 나의 몸을 만져보면서, 모든 것이 새삼스러웠다.

 

 

고통 안에서 시간은 직선으로 흐르지 않았다. 나는 자꾸만 뒷걸음질쳤고 익숙한 구덩이로 굴러떨어졌다. 다시는 회복될 수 없을지도 모른다는 조바심 서린 두려움이 나를 장악했다. 나는 왜 내가 원하는만큼 강해질 수가 없을까. 이렇게 노력하는데도 왜 나아지지 않는 걸까. 그런 생각을 하며 오래 울던 밤에 나는 나의 약함을, 나의 작음을 직시했다.

  인내심 강한 성격이 내 장점이라고 생각했었다. 인내심 덕분에 내 능력보다도 더 많이 성취할 수 있었으니까. 왜 내 한계를 넘어서면서까지 인내하려고 했을까. 나의 존재를 증명해야 한다고 새각해서 였을까. 언제부터였을까. 삶이 누려야 할 무언가가 아니라 수행해야 할 일 더미처럼 느껴진 것은. 삶이 천장까지 쌓인 어렵고 재미없는 문제집을 하나하나 풀어나가고. 오답 노트를 만드록, 시험을 치고, 점수를 받고, 다음 단계로 가는 서바이벌 게임으로 느껴진 것은. 나는 내 존재를 증명하지 않고 사는 법을 몰랐다. 어떤 성취로 증명되지 않는 나는 무가치한 쓰레기나 마찬가지라고 생각했다. 그 믿음은 나를 절망하게 했고 그래서 과도하게 노력하게 만들었다. 존재 자체만으로도 의미와 가치가 있는 사람들은 자기 존재를 증명할 필요가 없을 것이다. 하지만 나는 애초에 그런 사람이 아니었다.

 

 

안정을 추구했던 그 시간동안 나는 성장하지 못했다. 독에 갇힌 나무처럼 가지를 마음껏 뻗어나갈 수가 없었다. 고립되었다. .................(중략)................ 당신은 어째서 내 고통을 보지 않지? .................(중략)................ 체념했다. 그가 집에 없을 때 울다가도 그의 전화가 걸려오면 목소리를 가다듬었다. '목소리가 왜...?' 하고 그가 물으면 '응, 자다가 일어나서'라고 거짓말을 했다. 나는 누구에게 거짓말을 했나. 나에게, 내 인생에게. 인정하고 싶지 않아서, 알고 싶지 않아서, 느끼고 싶지 않아서. 어둠은 거기에 있었다.

 

 

나는 내게 어깨를 빌려준 이름 모를 여자들을 떠올렸다. 그녀들에게도 어깨를 빌려준 여자들이 있었을 거라고 생각했다. 얼마나 피곤했으면 이렇게 정신을 놓고 자나, 조금이라도 편하게 자면 좋겠다고 생각하는 마음. 별것 아닌 듯한 그 마음이 때로는 사람을 살게 한다는 생각을 했다. 어깨에 기대는 사람도, 어깨를 빌려주는 사람도. 구름 사이로 햇빛이 한 자락 내려오득이 내게도 그런 마음이 내려왔다는 생각을 했고 안도했다.

 

 

지연의 고뇌를 나는 여러차례 읽어보았다. 그녀가 생각한 인간의 삶이란 우주의 광활한 시간 속에서 정말로 찰나에 불과하다는 사실을 직시할 때 우리는 존재의 의미를 더 절실하게 찾고 싶어진다는 것이다. 이렇게 짧고도 고통스러운 순간을 살아가는 이유가 무엇일까? 왜 하필이면 이토록 복잡하고 모순된 인간으로 태어난 걸까? 이 질문들은 나 역시 종종 스스로에게 던졌었다.

그래서 나 또한 참나무나 기러기로 태어날 수도 있었던 가능성을 떠올리곤 했다. 나는 그녀가 느꼈을 깊은 회의와 아쉬움을 공감할 수 있었다. 만약 단순히 자연의 일부로서 살아가는 존재였다면 삶은 지금보다 더 평화롭고 덜 복잡했을지도 몰랐겠지. 그러나 다행인건지 불행인 것인지 우리는 인간으로 태어났다. 인간은 스스로를 고통에 빠뜨리기도 하고, 그 고통을 다른 이들에게 가하기도 하는 존재다. 지연이 별의 먼지로 만들어진 자신의 몸을 만지며 느낀 감정은 인간이라는 존재에 대한 근원적인 의문에서 비롯된 것이었을 것이다.

나는 그렇기에 이 짧고도 고통스러운 삶 속에서 나만의 사랑을 찾아야 한다고 생각했다. 사랑이란 단순한 감정이 아니라, 우리의 존재를 의미 있게 만드는 힘이라고 믿는다. 우주의 먼지가 어떤 배열을 통해 인간이라는 존재를 만들어냈는지는 알 수 없지만, 그 배열 속에서 사랑이란 아직 나로서는 다 이해하기 힘든 어떤 에너지가 내포되어 있는 것만은 확실하다.

그것이 사람이든 어떤 일이든 어떤 꿈이든 삶을 더 깊이 이해할 수 있게 해주는 사랑을 찾고 싶다. 지연이 느꼈던 고독과 회의 속에서도 사랑이야말로 그 모든 질문에 대한 답이 될 수 있다고 결론 지었다. 찰나 같은 인생 속에서 사랑은 아마도 가장 큰 의미를 가진 빛일 것이다. 그 빛이야말로 우리가 우주의 어둠 속에서 빛나는 이유이며 존재의 목적일지도 모른다. 지연은 어쩌면 그런 사람이 필요했으리라...고 나는 공감했다. 어쨌거나, 그런 짝을 찾는 일은 결국엔 삶을 아름답게 만드는 요소가 될 것이다. 그래서 나는 이 찰나의 순간을 더 깊고 의미 있게 살아가고 싶다.

지연이 이혼 후에 느꼈던 감정과 생각들, 그것들은 아마 자신에 대한 깊은 회의와 절망에서 비롯된 것일 터다. 그녀가 느꼈던 고통은 단순히 관계의 끝에서 오는 아픔을 넘어 자신의 존재에 대한 근본적 의문으로 이어진다. 왜 나는 원하는 만큼 강해질 수 없는 걸까? 왜 이렇게 노력하는데도 나아지지 않는 걸까? 지연의 이 질문들은 내게도 낯설지 않다. 삶의 여정에서 우리는 모두 때때로 이러한 의문과 맞닥뜨리게 된다.

지연이 고통 속에서 시간을 직선적으로 느끼지 못하고 과거의 익숙한 구덩이로 계속해서 굴러떨어지는 느낌은 많은 이들이 공감할 수 있는 경험이다. 그 구덩이는 아마도 실패와 좌절 그리고 자신에 대한 실망으로 가득 차 있었을 것이다. 지연이 자신의 약함과 작음을 직시할 때 그녀는 아마도 그동안 억누르며 외면하려 했던 자신의 진짜 모습을 마주한 것일지도 모른다. 우리는 종종 자신이 얼마나 약한 존재인지 인정하기 어려워하지만, 그 순간이야말로 진정한 자아와 마주하는 순간일 수 있다.

그녀가 자신의 장점으로 여겼던 인내심은 때로는 자신을 과도하게 몰아붙이게 만들었고 결국에는 지쳐버린 그녀를 만들어냈다. 삶이 즐기는 것이 아니라 마치 수행해야 할 끝없는 일들로 가득 찬 무거운 짐처럼 느껴졌을 때 지연은 자신을 더 이상 증명하지 않아도 되는 삶이 어떤 것일지에 대해 상상했을지도 모른다. 그녀에게 있어서 존재의 증명은 항상 성취를 통해 이루어졌고 그 성취가 없을 때 자신의 가치는 사라지는 것처럼 느껴졌기 때문이다.

지연의 이 생각을 읽으며 나는 그녀가 겪은 혼란과 절망을 전부는 아니더라도 아주 조금은 이해할 수 있었다. 우리는 모두 사회적 기준이나 성취를 통해 자신의 가치를 증명하려는 강박에 사로잡히곤 한다. 그러나 그 과정에서 우리는 종종 자신의 본질적인 가치를 잊어버린다. 성취 없이도 그저 존재 자체로도 충분히 가치 있는 존재임을 받아들이는 것은 매우 어려운 일이다. 지연이 느꼈던 고통은 결국 자기 자신을 있는 그대로 받아들이지 못한 데서 비롯된 것이 아닐까 생각한다.

이러한 생각 속에서 나는 나 자신에게 질문을 던지게 된다. 나도 지연처럼 성취를 통해서만 나의 가치를 증명하려고 했던 것은 아닐까? 내가 이룬 것들이 사라질 때 나는 여전히 가치 있는 존재로 남을 수 있을까? 이 질문에 대한 답은 쉽지 않다. 그러나 지연의 이야기는 나에게 진정한 가치란 성취나 외부의 인정을 넘어서는 것임을 깨닫게 해주었다. 나의 존재가 성취로 증명되지 않아도 나 자신을 사랑하고 받아들일 수 있는 용기를 가지는 것이야말로 정 반대로 살아가는 지긋지긋하고 답답한 요즘 사회로부터의 완전 독립할 수 있는 행복을 가질 수 있는 삶일지도 모른다. 그렇기에 나는 이제 더 이상 나를 증명하기 위해 고군분투하는 대신 나만의 사랑을 찾고 나의 존재를 있는 그대로 받아들이는 삶을 살고 싶다. 그 길이 때로는 고통스럽고 험난할지라도, 그 속에서 진정한 나를 발견할 수 있을 것이라 믿는다.

 

 

 전남편에게는 일어날 일은 일어난다는 믿음이 있었다. 그는 시간은 흘러가는 강물이 아니라 얼어붙은 강물이라는 말을 즐겨 했다. 시간은 환상일 뿐이며 과거와 현재와 미래는 동시에 존재한다는 것이었다. 인간의 자유의지나 선택이라는 것 또한 커다란 환상일지 모른다고 그는 말했다. 그런 식의 생각에는 분명 이점이 있었다. 그런 믿음은 무엇보다도 인간을 후회의 덫에서 구원해준다. 과거의 내가 다른 선택을 했더라면 현재의 고통이 없었으리라는 사고의 공회전에서 빠져나올 수 있는 힘을 준다. 그는 오랜 시간 동안 나를 속이면서도 그런 생각을 했을까. 이건 일어날 일이었으니 어쩔 수 없다고.

 

 

전남편이 믿었던 시간의 관점(시간은 흐르는 강물이 아니라 얼어붙은 강물 같고, 과거와 현재, 미래가 동시에 존재하며, 자유의지와 선택도 환상일 뿐이라는 생각)은 표면적으로는 매력적일 수 있지만 그의 외도에는 그 믿음이 얼마나 기만적일 수 있는지를 잘 보여준다.

일종의 마음의 안식처처럼 꾸며놓았다는 생각이 들었다. 그 믿음은 인간의 후회와 고통에서 벗어나고자 하는 마음을 달래주며, '이미 정해진 일'이라고 스스로를 위로할 수 있게 해준다. 하지만, 그 어두운 이면에는 나는 그의 외도가 어떻게 그 믿음을 기만적으로 활용했는지를 느꼈다. 과거와 현재, 미래가 동시에 존재한다고 믿는다면 그는 자신의 행동에 대한 책임에서 벗어나려 했던 것이 아닐까? '이미 일어난 일'이라는 말은 그저 그가 자신의 행동에 대한 도덕적 책임을 회피하는 수단이었을지도...

어쨌든 이러한 시간관념은 사랑의 본질과 인간의 진정성을 간과하게 만든다. 외도는 단순히 시간의 얼어붙은 강물처럼 거짓된 위안으로 해결할 수 없는 문제다. 전남편은 자신의 불충실을 정당화하고 지연의 아픔을 마치 자연의 일부인 것처럼 치부했을지도 모를 것이다. 그러나 나는 사랑과 신뢰는 단순히 시간이 만들어내는 허상에 속하지 않는다고 생각한다. 

시간의 얼어붙은 강물처럼 모든 것이 이미 정해져 있다고 믿는 것... 그 말을 한다고해서 실질적으로 인간의 감정적 고통을 없애주지 않는다. 오히려 깊은 상처와 갈등을 무시하는 행동 아닐까? 우리는 후회와 아픔 속에서도 스스로를 직시하고, 사랑과 신뢰를 통해 상처를 치유하며 성장해 나가야 한다. 내 생각에 어쨌거나 우리는 시간을 거스를 수 없는 세상에 살고 있고 그 순리에 따라야 한다고 생각한다. 적어도 타임머신이 나오지 않는 이상은 말이다. 진정한 의미의 시간과 사랑의 상관관계를 굳이 말로써 표현해보자면.. 우리가 스스로의 선택과 책임을 통해 만들어가는 과정 속에서 발견될 수 있지 않을까? 말이 길어졌는데, 어쨌거나 그의 믿음은 그저 시간의 한 측면을 묘사할 뿐 지연의 진심과 상처를 담아내지 못한다. 못하는 것이 아니라 회피라 해야하는게 옳겠다. 그는 결국 그 믿음을 통해 자신의 행동을 정당화하고 지연에게 남긴 상처를 덮으려 했던 것일지도 모른다.

사실 전남편이 근거로 내세운 '이미 정해져 있다'라는 가설, 과거, 현재, 미래의 동시성에 대한 이야기는 '양자역학'과도 관련이 있다. 양자역학을 통해 우리는 어쩌면 실제 세상이 아닌 시뮬레이션 속에 살아가고 있는 것은 아닐지에 대해 논하곤 한다. 개발자의 관점에서 보자면 이 세상은 어쩌면 흘러가는 세상사와 개개인에 대한 사연들이 이미 프로그래밍 되어있고 짜여진 구성대로 진행되고 있다는 것과 비슷하다. 이러한 부분에서 전남편은 양자역학을 믿고싶었고, 내가 어쩔 수 없는 영역이라고 생각했을지 모른다. 양자역학은 시간의 상대성을 부정하기 때문에 아인슈타인과 대립하였다. 그러나, 이중슬릿 관찰자 실험을 통해 입증된 양자역학에 대한 논쟁은 아직도 끊이지 않는 과학의 영역 한 부분이다. 나는 사실 이 양자역학 이야기를 꽤나 좋아한다. 그래서 전남편의 생각에 동의하느냐? 그것은 아니다. 전남편의 생각은 앞서 설명했듯 인간의 진정성과 사랑을 부정하는 오류를 범하고 있다. 벵하민 라바루트의 '우리가 세상을 이해하길 멈출 때'라는 책에서는 다음과 같은 구절이 나온다.

 

 

입자는 여러 방식으로 공간을 통과할 수 있지만 그중에서 하나만 고를 수 있다. 어떻게? 순전히 우연으로, 하이젠베르크가 보기에 어떤 아원자 현상이든 절대적으로 확실하게 기술하는 것은 이제 불가능했다. 이전에는 모든 결과에 대해 원인이 있었지만 이젠 확률의 스펙트럼이 존재할 뿐이었다. 만물의 가장 깊은 바닥에서 물리학이 발견한 것은 슈뢰딩거와 아인슈타인이 꿈꾸었듯 세계의 끈을 당기는 합리적 신이 지배하는 단단하고 확고한 실재가 아니라 우연을 가지고 노는 천수여신의 변덕에서 탄생한 놀랍고도 희한한 세상이다.  -우리가 세상을 이해하길 멈출 때 中..-

 

 

내가 양자역학을 좋아하는 이유는 '우연' 때문이다. 양자역학에서 말하는 우연성은 자연의 불확실성을 드러내며 모든 사건이 반드시 원인과 결과로 이어지지 않는다는 것을 시사한다. 이 관점에서 '사랑'이라는 감정도 어떤 일정한 법칙에 따라 예측되기보다는 불확실하고 예측할 수 없는 요소들로 인해 발생한다고 볼 수 있다. 사랑은 때로는 우연히 찾아오는 만남에서 시작되고, 복잡한 감정의 얽힘 속에서 예측할 수 없는 방향으로 흘러가기도 한다. 양자역학이 강조하는 우연성은 사랑의 본질을 더 깊이 이해하는데 도움을 주며 그 속에서 일어나는 인과관계의 복잡성과 아름다움을 재발견하게 해준다. 이러한 면에서 나는 작품 속 전남편과 다르게 양자역학을 반대로 해석하고 있다.

 

 

나는 가만히 앉아서 그날 아침 의사가 내게 귀리의 죽음을 알렸을 때 느낀 감정이 슬픔만은 아니었음을 기억했다. 나는 안도했다. 나의 일부는 안도했다. 귀리의 고통이 이제 사라졌다는 사실에, 고통을 받는 그애의 모습을 보고 겪어야 했을 나의 괴로움이 끝났다는 사실에. 그 이기적인 마음을 부정할 수가 없었다.

 

 

그가 버스에서 내리고나서도 나는 계속 말한다. 알아, 알아. 결국 다 떠난다는 걸...... 깨어나고 싶어. 나는 벨을 누르지만 버스는 정차하지 않는다. 소리질러 기사를 부르고, 주먹으로 아무리 출입문을 두드려도 버스는 서지 않는다. 아무도 나를 바라보지 않는다.
  등뒤에서 현관문이 닫히는 소리가 들린다. 나는 그것이 남편이 나를 떠남면서 문을 닫는 소리라는 것을 안다. 너만은..... 너만은 나를 떠나지 않을 줄 알았어. 나는 바닥에 앉아서 몸을 떨며 운다.
  지연아.
  그때 내게 앞니 두 개가 빠진  여덟 살의 언니가 다가와서 등을 두드린다.
  지연아, 지연아.
  언니가 나를 부를수록 세상이 환해진다.
  태양이 커지고 있었나봐.
  나는 좀전까지 울던 일을 잊고 언니에게 말한다.
  너무 밝아서 눈이 부셔, 어떻게 이렇게 밝을 수 있어?
  내말에 언니는 재미있는 이야기라도 들은 것 처럼 환한 빛 속에서 소리 내며 웃는다.
  바보야.

  언니가 말한다.
  바보야, 난 널 떠난 적 없어.

 

 

나는 병실 창문으로 해가 뜨는 모습을 보면서 그날 내게 일어났던 일을 생각했다. 언니가 내게 해주었던 이야기를. 나는 그것이 환상이나 꿈이 아니라는 걸 알고 있었고 이 이야기를 평생 누굿에게도 털어놓지 않겠다고 다짐했다. 나는 알았ㅅ다. 내가 오래도록 그 순간을 기다렸다는 사실을, 그리고 다시는 그런 순간이 오지 않으리라는 사실을 말이다. 충분했으므로, 더이상 바랄 수 없었으므로.

 

 

엄마 미선과 지연의 갈등이 심화돼는 과정에는 숨겨진 언니의 상실이 자리잡고 있었다. 미선과 지연은 서로의 마음속에 깊이 자리 잡은 언니의 기억을 나누지 않으면서도 그 상실의 아픔과 그리움의 상처를 스스로 보듬으며 살아왔다. 미선의 침묵은 단순한 방어가 아니라 지연의 향한 깊은 사랑과 배려의 표현이었을 것이다. 단지 자신만의 가치관에 따른 것이기에 지연은 이를 받아들일 수 없었을 뿐... 이 침묵 속에서 두 사람은 언니의 존재를 각자의 방식으로 간직하며, 그리움과 상처를 담담하게 받아들이고 있다.

미선은 지연의 상처를 마음 깊이 이해하고 있다. 그녀는 언니를 잃은 슬픔이 지연에게 남긴 상처를 직시하며 그 아픔이 지연의 마음속에서 아직도 선명하게 남아 있음을 알고 있다. 미선은 그 상처를 덜어주고자 애쓰며, 언니에 대한 이야기를 꺼내지 않는다. 지연의 마음속에서는 언니의 기억이 마치 아주 멀리멀리 보이는 아련한 별빛처럼 희미하게 비추곤 했지만 더는 그 희미한 별빛이... 되돌아 올 수 없는 별빛이 지연에게 더 큰 고통을 주지 않기를 바라는 마음에서, 그리고 본인 또한 상처받기 싫었기에... 미선은 조용히 언니의 이름을 지울 수 밖에 없었을 것이다. 지연은 늘 언니가 떠났다고 믿어왔고, 엄마의 태도에 자신 스스로를 속이고 언니를 잊어왔을 것이다. 그러다 깨달았다. 언니는 항상 마음속에 있었다고... 이혼 한 뒤 나 홀로라고 생각했을 때에도 항상 언니는 그때 그 모습 그대로 곁에 머무르며 지연을 조용히 웃으며 응원해주고 있었다.

 

 

 한 사람의 삶을 한계 없이 담을 수 있는 레코드를 만들면 어떨까. 태어나는 순간부터 어릴 때의 옹알이 소리, 유치의 감촉, 처음 느낀 분노, 좋아하는 것들의 목록과 꿈과 악몽, 사랑, 나이듦과 죽기 직전의 모든 순간까지 모든 것을 담은 레코드가 있다면 어떨까. 처음부터 끝까지 한 사람의 삶의 모든 순간을 오감을 다 동원해 기록할 수 있고 무수한 생각과 감정을 모두 담을 수 있는 레코드가 있다면, 그건 그 사람의 삶의 크기와 같을까. 나는 그렇지 않다고 생각한다. 비가시권의 우주가 얼마나 큰지, 어떤 모습일지 상상할 수 없는 것처럼 한 사람의 삶 안에도 측량할 수 없는 부분이 존재할 테니까. 나는 할머니는 만나 할머니의 이야기를 들으며 그 사실을 자연스레 이해할 수 있었다.

 

 

이 소설은 증조모, 할머니, 엄마, 나(지연)의 이야기를 넘어서서 매우 복잡한 이해관계에 대한 이야기와 사회적 배경이 섞여있다. 얼핏 보기에 각기 다른 인생의 궤적처럼 보이지만 결국 최은영 작가는 그 중심에는 서로를 향한 깊은 이해와 공감, 그리고 사랑이 자리하고 있음을 말해주는 것 같았다. 이들은 각자 자신의 방식으로 삶의 무게를 짊어지며 때로는 홀로 울기도 하고 때로는 서로를 위로하며 버텨낸다. 고통의 연대. 어머니의 어머니가, 그리고 그 어머니의 어머니가 겪어야 했던 고통과 슬픔이 후손들에게까지 이어지는 그 악순환의 고리는 비단 아픔만을 전달하지 않는다. 그 고통을 이겨내고 마침내 서로를 이해하게 되는 과정에서 빚어지는 따스함은, 어제 마지막 휴가를 보내며 산책했던 내 머리 위 하늘에 떠있던 은은한 슈퍼문 달빛과도 같았다. 이들의 삶은 결코 순탄하지 않았지만, 그럼에도 불구하고 그들은 서로를 통해 위로받고, 자신의 길을 찾아 나갔다. 그 모습은 우리에게 진정으로 어떤 사회상을 만들어갈 것이고, 그 사회상이 개개인에게 어떤 보답으로 올것인지 고민하게 한다.

즉, 최은영 작가는 이 소설을 통해 우리에게 묻는다. 과연 우리가 잊지 말아야 할 것은 무엇인지, 우리는 공감하고 사랑하고 있는지.. 밝은 밤이라는 제목은 이 소설은 어둠 속에서도 결코 꺼지지 않는 희망의 불씨를 담고 있는 것 같다. 그 불씨는 과거와 현재, 그리고 미래를 잇는 다리 역할을 하며, 우리에게 그 어느 때보다도 밝은 내일을 만들어 갈 수 있도록 그동안의 아픔을 위로해주었다.

밝은 밤을 덮으며 나는 어느새 눈시울이.................................................다. 그것은 단지 슬픔 때문이 아니었다. 지연에 대한 공감, 그리고 나의 상황에 대해 많이 생각했다. 그리고 각 인물들에 대해 고민했고, 심지어 나는 봄이한테까지도 마음을 들어보았다. 이 책은 나에게 말한다. 어두운 밤이 지나면 반드시 밝은 아침이 찾아오듯 우리도, 나도 언젠가 빛을 마주할 수 있을 것이라고. 그 빛을 향해, 함께 걸어가자고.

책을 다읽고 고민이 많았다. 독후감을 쓰는 것에 대해서 말이다. 동생에게 책을 건네기전 한번 더 읽었다. 내가 이 책에 대한 독후감을 쓴다면 왠지 아주 긴 글이 될 것 같았고 실제로도 아주 오랜 시간에 걸쳐 쓰게 되었다. 우연히 그리고 공교롭게 여기까지 읽어주신 분이 계시다면 깊은 감사의 마음을 표한다. 여러가지로 피곤하다, 얼른 이제 자자 :)

 

 

★ ★ ★ ★ ★

 

 

 

끝.

 

 

'독서' 카테고리의 다른 글

이선 프롬  (4) 2024.10.09
지구에서 한아뿐  (6) 2024.09.04
덧니가 보고 싶어  (0) 2024.08.11
보건교사 안은영 (팬픽션)  (0) 2024.08.02
비행운  (0) 2024.07.27

 

나는 개발 일을 하는 것이 좋다. 그래서 퇴근 후에 사이드 프로젝트도 자주 한다. 사이드 프로젝트에서는 내가 직접 방향을 정하고, 요구사항도 결정하며 마음껏 상상할 수 있어서 좋다. 이 과정에서 창의적인 문제 해결의 재미를 느낄 수 있다. 그러나 때때로 요구사항이 불분명하거나 방향성을 잡기 힘든 업무를 맡게 되면, 그 재미는 급격히 줄어들고, 마치 주어진 임무를 기계적으로 수행하는 듯한 느낌을 받을 때가 있다. 개발자가 아니더라도 기획자나 디자이너도 이와 같은 상황에서 비슷한 기분을 느낄 것이라고 확신한다. 그럼에도 우리는 요구사항을 더 명확히 하고, 공학적으로 접근하여 더 나은 답을 도출하기 위해 노력한다. 왜냐하면 우리는 결국 사용자들의 니즈를 해결해야 하는 엔지니어들이기 때문이다.

 

 

작품 속 용기는 이런 점에서 나와 닮아있었다. 아니, 어쩌면 이따금씩 이러한 상황에 직면하는 우리들보다 더 힘든 상황에 처해 있을지도 모른다. 용기는 매일 보안업체에서 출동 업무를 성실히 수행한다. 그러나 그의 진정한 열정은 다른 곳에 있다. 그는 원래 럭비 선수가 되고 싶었지만, 부상으로 인해 그 꿈을 포기해야만 했다. 용기가 지금 하는 일과 럭비 선수의 직업이 유사한 점이라면, 둘 다 피지컬을 사용한다는 점뿐이다. 그가 보안업체에서 출동할 때면 대부분의 경우가 취객의 실수이거나 쥐나 고양이 같은 동물로 인한 헤프닝에 불과했다. 이처럼 유의미한 출동은 거의 없었지만, 용기는 현실적인 성격 덕분에 주어진 임무를 묵묵히 수행한다. 그러면서 앞으로 주어진 먹먹한 현실에 우울해하고 있다. 마냥 해맑기만하고 긍정적인 7살 어린 여자친구의 처지도 그다지 달라보이지않는데... 어찌 그렇게 명랑하기만 한 것인지... 그뿐만일까? 용기는 마음속 깊은 곳에서는 여전히 못이룬 럭비 선수에 대한 아픈 미련이 영 떠나지 않는다. 꿈속에서 조차 럭비 경기를 뛰어야 했으니까 말이다... 

 

 

어찌되었든 이제 괜찮다고, 용기는 지친 자신을 다독였다. 여기가 내 자리야. 꿈꿨던 직업은 아니지만 변두리의 밤을 지키는 출동 요원이 되었다. 팀 사람들도 다 맘에 들고, 격의 없는 동네 누나와 가끔 놀고, 귀엽고 꼬인 데 없는 여자친구와 데굴거리고. 더 바랄게 없다. 돌아가고 싶은 때도 장소도 없다.
  인생이 테트리스라면, 더이상 긴 일자 막대는 내려오지 않는다. 갑자기 모든 게 좋아질 리가 없다. 이렇게 쌓여서, 해소되지 않는 모든 것들을 안고 버티는 거다.

 

 

용기가 새로 생긴 여자친구가 있었음에도 그의 X, 재화는 여전히 그에 대한 미련이 엄청 났었다 보다. 그녀는 세컨드 직업으로 작가를 준비하고 있었다. 그녀의 소설속에서는 매번 용기가 등장하고, 그는 매번 죽었다. 누군가는 용기에 대한 악감정이 얼마나 심하면 이렇겠냐고 생각 할 수도 있겠다만, 나는 이것이 그를 잊지 못한 미련이라고 생각한다.

 

 

원전폐기물 보관함처럼, 위태롭지만 조용하게. 엉망인 내부를 숨기면서 사는 건 모두가 마찬가지 아닐까? 뭔가 중요한 부분이 고장나버렸다면 더욱 들켜서는 안 된다. 안쪽에 나쁜 냄새가 나는 죽은 것들이 가득하다는 걸 상대가 알아버리면 바로 도망치고 말 테다. 용기가 그랬던 것처럼.
  돌아누울 때마다 머릿속에서 부품들이 굴러다니는 소리가 들리지만, 아직은 버틸 수 있다. 괜찮다.

 

 

승주와 헤어져 밖으로 나서니, 초가을 거리에는 매미들이 죽어 떨어져 있었다. 여름 내내 강렬했던 구애의 끝이 가루로 부서지는 몸이라니 슬펐다. 그래서, 너희는 바라던 사랑을 얻고 죽었니? 재화는 죽은 매미들을 깨워 묻고 싶었다.

 

 

정세랑 작가의 책은 독자의 마음 깊숙이 스며들어 잊고 있던 기억을 살며시 불러낸다. 그녀의 이야기는 독특한 전개와 때로는 황당하게 느껴질 법한 상상 속에서도 한 편의 시처럼 마음을 적시며 독자를 이야기의 품으로 부드럽게 이끌어간다. 마치 오래된 꿈 속을 헤매는 듯, 그녀의 글은 천천히, 그러나 확실히 내 안에 잔잔한 울림을 남긴다. 회사에서 점심을 먹고나면 30분 정도가 남는다. 누군가는 동료들과 커피한잔을 하러가거나, 동기와 수다를 떨러가거나, 운동을 하러가거나, 엎드려 잠을 자곤한다. 나는 이 책을 조금 이라도 더 읽고 싶은 마음에, 회사에서 남은 점심시간을 수시로 모니터의 오른쪽 아래 시계를 봐가며 책의 내용에 초집중을 했다. 덧니가 보고 싶어는 정세랑 작가의 책 중 유독 마음에 드는, 내 마음을 아프게도하고, 웃게도 만드는 글들이 많이 있었다. 나의 삶을 관철하고 있는 것 같은 기분이 들었다.

 

 

노래들을 듣고 나서, 여왕이 싱어송라이터에게 말했다.
"얼음에 손도 대지 말아요. 얼음을 어쩌겠다는 생각도 하지 말아요."
싱어송라이터는 동의의 뜻을 밝혔다. 다음날도, 그 다음날도 소리 나지 않는 기타를 들고 앉아 있다 갔을 뿐이었다.
이례적인 관계의 두 사람을 얼음을 사이에 두고 그대로 있는게 그저 좋았다. 영원히 그런 날들이 지속될 줄 알았다.
  두 사람이 동굴 안에서 미처 알아채지 못했던 것은, 지구온난화였다. 지구 온난화가 아주 심해졌고, 어어, 하는 사이에 어느 날 얼음 관이 모두 녹았다. 싱어송라이터는 무척이나 당황해서는 뒤로 멀찍이 물러나 기다렸다. 여왕은 미지근하게 젖은 머리카락에서 물기를 짜고는, 드디어 낯선 악기의 소리를 제대로 들었다.

 

 

나는 이 이야기를 좋아한다. 현실적이지 않아서 좋다. 해피엔딩으로 끝났으니까.

 

 

 

 

영화 부탁 하나만 들어줘에서 숀은 에밀리를 만나기 위해 모든 걸 포기 했다고 스테파니에게 말한다. (사실 에밀리는 미친 여자였지만 말이다. 미친 여자인걸 낌새를 알았지만서도 당시 그는 그녀에게 푹 빠져있었다.) 나는 재화가 이 숀을 닮았다고 생각했다. 여전히 용기에게 푹 빠져있는 그녀의 내면을 보면서.

 

 

선이의 특제 카레는 아니었지만, 짜장도 꽤 맛있었다. 때때로 인생이 그렇다는 생각이 들었다. 간절히 원하는 것은 가질 수 없고, 엉뚱한 것이 주어지는데 심지어 후자가 더 매력적일 때도 있다. 그렇게 난감한 행운의 패턴이 삶을 장식하는 것이다. 물론 매력적인 후자를 가지게 되었음에도 최초의 마음, 그 간절한 마음은 쉽게 지워지지 않아 사람을 괴롭히기도 하고.

 

 

정세랑 작가는 어쩌면 인생 2회차인 것이 아닐까...? 그렇지 않고서야 이러한 경험을, 누구나가 경험 할 수 있는, 그러나 무의식적으로만 느낄 뿐 그 누구도 누군가에게 이야기하지 않고 지나쳐버릴 삶의 한 현상을 글로 이렇게 표현 할 수 있다니... 아무튼 이 부분에서 나는 재화의 용기를 향한 여전한 마음을 느낄 수 있었다. 내 생각엔 어쩌면 용기도 7살 연하 여자친구를 두고 그러한 생각을 가지고 있었으리라. 그리고 나는 이따금 잘 만든 가정집 카레가 너무 먹고싶다는 생각을 하곤 했는데, 이 대목을 읽으며 그러한 생각이 더 강렬해졌고, 이 글을 쓰며 다시 되새김질 되어 정말 너무 카레가 먹고싶어졌다. 농담을 하는 것이 아니다. 어쨌거나, 위 대목의 내용에 대해 나는 매우 진지하게 생각했다.

 

 

옛날 사람들처럼 편심, 촌심, 단심 같은 단어들을 쓸 때마다 지잉, 하고 뭔가 명치께에서 진동하고 만다. 수천 년 동안 쓰여온, 어쩌면 이미 바래버린 말들일지도 모르는데, 마음을 '조각' 혹은 '마디'로 표현하고 나면 어쩐지 초콜릿 바를 꺾어주듯이 마음도 뚝 꺾어줄 수 있을 듯해서. 그렇게 일생일대의 마음을 건네면서도 무심한 듯 건넬 수 있을 듯해서.
  언젠가 용기에게 사랑한다고 말했던 날이 있었다. 용기는 그 말을 초콜릿 바를 받은 가벼이 받았었다. 재화의 마음, 꺾인 부분에서는 잔 가루들이 날렸는데.
  너는 모르지.

 

 

역시 재화는 용기를 애타게 기다렸다보다, 떠나간 이를 정리하지 못하고 그때의 그이에 대한 아쉬움이 드러나는 대목이다. '너는 모르지...' 우리는 이런 말을 마음속으로만 하곤한다. 상대방에게 들리지도 않을 이야기를. 그리고 어쩌면 우리도 누군가에게 이런 말들을 수도 없이 들었을지도 모른다. 아마도 정세랑 작가의 표현들을 읽다보면, 그런 생각이 난다. 결국 이러한 글귀들이 곧 정세랑 작가의 실제 경험과 그것에 따른 영감이 나온게 아닐 까하는.. 예를 들면, 지하철 플랫폼에서 어떤 여자가 강아지를 와앙하고 입을 크게 벌리고 먹어 깜짝놀랐으나 알고 보았더니 그것이 왕만두였다는 내용이 그러하다. 분명 정세랑 작가는 그 글을 쓰기 며칠 전 멀리서 왕만두를 보고 말티즈로 착각했으리라...(아님말고요ㅎ)

 

 

부모님 입장도 이해는 갔다. 미운 오리 새끼 같은 딸을 열심히 키우면 백조가 될줄 알았는데, 시조개나 가루다처럼 알 수 없는 괴생물로 자라버렸으니. 그러나 부모의 승인을 받는 트랙에서는 벗어난지 오래였고 돌아가고 싶지도 않았다.

 

 

  나는 오늘도 네 좌표를 알지 못해. 우리의 좌표가 어디서부터 어긋났는지 알지 못해. 그렇게 말할 필요가 있었다.
  재화는 정말로 우주선에 있을 법한 작고 딱딱한 침대에서 잠이 들었다. 발끝이 시렸다. 잠결에, 엔진처럼 무언가 허밍하는 소리를 들었던 것도 같았다.

 

 

  "너한테 설명할 말이 없어. 하지만 이건 내가 한 일이 아니고 재화가 한 일도 아닐 거야."
  용기는 자기가 얼마나 재수없는 얼굴을 하고 있을까 상상하며 말했다.
  "닥쳐."
  충분히 재수없는 모양이었다.

 

 

"초등학교 때 모둠 비빔밥을 해먹으면 꼭 돈가스를 해오는 애들이 있었어. 아마 엄마한테 알림장을 보여주지 않았던 거겠지. 그런데 비빕밥에 들어간 그 엉뚱한 돈가스가 의외로 또 맛있었다? 다 부서지고 눅눅해지고 그랬는데도 맛이 있었어. 그 돈가스처럼 오빠가 좋았어."

 

 

이 소설속에서 제일 딱한 존재는 용기의 7살 어린 여자친구다..... 용기는 그녀에게 어떠한 적절한 해명도 해줄 수 없었다. 그녀에게 용기는 아마 제일 재수없는 X에 미쳐버린 나사빠진 전남친 정도로 기억될 것이다. 그녀의 친구들도 함께 술자리에서 쌍욕을 해주며 잊으라고 할 것이다. 아마 용기는 이런 부분들도 담담히 받아들이고 오히려 다행이야... 라고 생각 할 것 같다. 똥차가고 벤츠가 온다 했던가, 분명 그녀라면 이제 나이 차이가 덜나는 근사한 남자친구가 생겼을 것이다.

 

 

그랬던 용기가 열여섯 시간씩 자게 되었다. 자고 있을 때에만 크고 작은 상처들이 아무는 걸 느꼈다. 안쪽이, 오래전에 잃었던 균형 잡인 상태로 되돌아가는 것 같았다. 그런 경험을 하고 나서야 비로소 동물들에게 미안해졌다. 코알라들의 대화를 이해할 수 없으니 잘은 모르겠지만, 어쩌면 코알라들도 여자친구에게 세게 차였는지도. 그저 아주 멋진 꿈을 꾸는 종일 수도 있지만.......
....
미안해, 코알라들.
미안해, 여자친구.
미안해, 재화.

 

 

피곤할때면 잠을 정말 열시간, 열 두시간 씩 자곤한다. 정말 피로에 지쳐 그런 걸까? 아니면 이 세상에서 잠시 벗어나 꿈속에서 나만의 안식처를 찾고 싶은 걸까... 아니면 둘다인걸까? 어찌돼었든, 코알라가 잠을 많이 자는 이유는 그들의 식단과 에너지 소비 방식과 관련이 있다. 코알라는 주로 유칼립투스 잎을 먹고 사는데, 이 잎들은 영양가가 낮고 소화하기 어렵다. 또 유칼립투스 잎에는 독소가 포함되어 있어서 이를 해독하는 데도 에너지가 필요하다. 코알라는 이와 같은 저영양 식단을 보충하기 위해 하루에 약 18~22시간을 잠으로 보낸다.

 

 

  "아니야, 언닌 정답이야. 무슨 일이 있어도 계속 정답으로 지켜나가는 사람이니까. 난 누군가의 유사답 정도는 되어본 적 있는 것 같은데, 한 번도 정답은 못 되어봤네."
  선이는 빨대 껍질을 잘게 찢으며 재화의 말을 곰곰 따져보는 듯했다.
  "그런거 될 필요 없는 것 같아. 누구의 무엇도."

 

 

작품 속 선이는 현명한 사람이다. 누군가의 언니, 누군가의 누나로서 좋은 메시지를 계속 전한다. 카레를 짜장으로 바꾸어 버리는 엉뚱하고 황당한 헤프닝을 만들기도 하지만 말이다. 그리고 무엇보다도, 재화와 용기를 엮어주는 중요한 매개체이자, 그들의 잠재된 서로에 대한 마음을 행동으로 바꾸어주는 촉매의 역할을 단단히 해준다. 작품속의 그 누구보다도 단단한 마음과, 그 마음속에는 여유마저 갖추고 있는듯 보인다. 결국, 선이의 어시스트로 두 사람은 만나게 된다. 그것도 무시무시한 스릴러 내용 속에서 극적으로 말이다. 나는 스릴러를 꽤나 좋아하는 편인데 아주 자극적으로 표현한 정세랑 작가의 솜씨에 감탄하게 되었다. 이를 6개나 뽑아버린 상황을 가정하는데, 꽤나 끔찍하게 묘사되어 인상적이었다. 실제로 영화라도 보는 듯한 생생함을 느꼈다.

 

 

이러한 극적인 상태에서 결국 두 사람은 만나는 것으로 끝이 난다. 마지막을 읽고 나서야 깨닫게 되었다. 용기는 재화의 소설속에서만 컨테이너(container)였었다. 감금된 채 이가 뽑힌채로 죽을 마당에 생겼던 그녀를 구출하고자 했던 현실에서는 커리지(Courage)였던 것이다. 재화는 자신을 회피했고 떠나간 용기를 컨테이너라고 생각했었다. 그를 여전히 사랑하지만 도무지 자신을 구해러와주지 않는 용기를 자신의 이야기속에서 죽였었고 겁쟁이 취급을 했다. 어쩌면 재화는 앞으로 자신의 소설속에서 더이상 죽지 않는 용기, 커리지한 용기를 그려나갈 것이다. 나는 이 책이 좋다. 마음을 요동치게 하는 글들이 너무나 많고, 일일히 그것을 담아두고자 카메라앱을 열어서 캡쳐를 해놓는다. 언제든 그 글들을 읽어 볼 수 있도록. 이번 주말은 푹 쉬었다. 하고싶었던 개발 공부도하고, 아파서 저번에 쉬었던 수영도 열심히 했다. 여름이라 그런지 사람들이 수영장에 많아졌고 수영장의 기본 예의를 모르는 사람들도 많아졌다. 그래도 개의치 않고 내가 가고자했던 1km는 넘게 헤엄을 쳤다. 그리고 삼겹살을 주문해서 맥주와 함께, 영화 한편과 저녁을 보냈다. 그리고 일요일은 내리 잠만 잤다. 코알라처럼.

나는 이 이야기들을 좋아한다. 현실적이지 않아서 좋다. 해피엔딩으로 끝났으니까.

(그리고 사실 표지 속 그려진 용기가 나를 묘하게 닮은 구석이 있는 것 같아 책이 별나다는 생각과 이상한 기분을 느꼈다. 또 하필 장면이... 에로에로젤리가 떠오른다.)

 

 

끝.

 

 

 

 

 

 

 

 

 

 

 

 

'독서' 카테고리의 다른 글

지구에서 한아뿐  (6) 2024.09.04
밝은 밤  (0) 2024.08.22
보건교사 안은영 (팬픽션)  (0) 2024.08.02
비행운  (0) 2024.07.27
아주 희미한 빛으로도  (0) 2024.07.14

안녕하세요? 2차 인증(Two-Factor Authentication)을 위해 OTP에 대해 공부하던 중 알게된 사실들에 대해 정리해보려고 합니다.

OTP(One-Time Password, 일회용 비밀번호)의 동작 원리는 사용자가 인증을 시도할 때마다 한 번만 사용할 수 있는 비밀번호를 생성하고 검증하는 것을 의미 합니다. OTP는 보안성을 높이기 위해 고안된 방식으로, 주요하게 두 가지 방식이 있습니다: 시간 기반 OTP(Time-based OTP, TOTP)와 카운터 기반 OTP(HMAC-based OTP, HOTP). 여기서 TOTP가 더 일반적으로 사용됩니다. 오늘 알아볼 내용도 TOTP에 대해 알아봅니다 :)

제가 알아본 방법은 commons-codec 방식과 warrenstrange/googleauth 라이브러리 방식이 있는데요. 이 둘중에 무엇을 활용할지는 프로젝트 요구사항과 선호하는 개발 스타일에 따라 달라질 수 있습니다. 두 가지 접근 방식의 장단점은 아래와 같습니다.

 

 

Commons-Codec 방식

장점:

  1. 경량성: commons-codec는 일반적인 인코딩/디코딩 작업을 위한 라이브러리로, OTP 생성에 필요한 HMAC-SHA 알고리즘을 구현하는 데 사용할 수 있습니다. 이 라이브러리는 상대적으로 가볍습니다.
  2. 유연성: 라이브러리를 사용하여 직접 OTP 알고리즘을 구현하면, 특정 요구사항에 맞게 커스터마이징할 수 있습니다. HMAC-SHA1, SHA256, SHA512 등의 다양한 해시 알고리즘을 사용할 수 있습니다.
  3. 통제: OTP 생성 로직을 직접 구현하기 때문에 세부 사항을 커스텀 할 수 있습니다.

단점:

  1. 개발 복잡성: OTP 알고리즘을 직접 구현하려면 추가적인 코딩 작업이 필요하며, 표준 준수 및 보안성을 확보하기 위해 신중한 구현이 필요합니다.
  2. 버그 발생 가능성: 직접 구현할 경우 실수로 인한 버그가 발생할 가능성이 있습니다.

 

Warrenstrange/Googleauth

장점:

  1. 간편함: warrenstrange/googleauth는 구글 OTP 알고리즘(TOTP) 구현을 위한 라이브러리로, 설정과 사용이 간편합니다. 복잡한 구현 없이 쉽게 OTP 기능을 추가할 수 있습니다.
  2. 신뢰성: 이미 검증된 라이브러리를 사용함으로써 보안성과 신뢰성을 확보할 수 있습니다. 널리 사용되는 라이브러리이기 때문에 커뮤니티와 문서를 쉽게 찾을 수 있다는 장점이 있어요.
  3. 통합: 구글 OTP 표준을 준수하므로, 구글 인증 앱 등과 쉽게 통합할 수 있습니다.

단점:

  1. 제한된 유연성: 라이브러리의 기능과 설정에 제약이 따릅니다. 즉 특정 요구사항에 맞게 커스터마이징하기 어려울 수 있습니다.
  2. 외부 의존성: 외부 라이브러리에 의존하게 되므로, 라이브러리 업데이트 및 유지보수에 대한 추가적인 고려가 필요합니다.

 

결론

  • 단순하고 빠른 구현이 필요한 경우: warrenstrange/googleauth 라이브러리
  • 커스터마이징과 세부 제어가 필요한 경우: commons-codec

 

TOTP (Time-based OTP)의 동작원리

TOTP는 시간에 기반하여 OTP를 생성합니다. 사용자는 일정한 시간 간격마다 변경되는 비밀번호를 사용하여 인증을 받아야 하는 방식이죠. 일반적으로 우리는 사용자 측면에서만 TOTP를 이용해왔습니다. 우선 1차 로그인을 하면, 구글 OTP와 같은 앱을 켜서 정해진 시간마다 변동돼는 6자리 숫자를 모바일로 확인해서 웹화면에 입력하죠. 그렇다면 이러한 일련의 과정은 전체적으로 어떤 과정이 일어나기에 가능한걸까요? 이번에는 TOTP의 그 동작 원리에 대해 확인해 봅시다.

  1. 공유 비밀 키(Secret Key): 서버와 클라이언트(사용자)는 미리 공유된 비밀 키를 가지고 있어야 합니다.
  2. 시간 동기화: 서버와 클라이언트는 시간을 동기화해야 합니다. 일반적으로 Unix 타임스탬프(1970년 1월 1일 00:00:00 UTC부터의 초)를 사용합니다.
  3. 시간 슬롯 계산: 현재 시간을 일정한 간격(예: 30초)으로 나누어 슬롯을 계산합니다. 이 간격을 시간 틱(Time Tick)이라고 합니다.
  4. HMAC 계산: 현재 시간 슬롯과 비밀 키를 사용하여 HMAC-SHA1 알고리즘을 적용합니다. 여기서 HMAC은 키를 사용한 해시 기반 메시지 인증 코드입니다.
  5. OTP 생성: HMAC의 결과로부터 특정 길이(예: 6자리)의 숫자를 추출하여 OTP를 생성합니다. 일반적으로 OTP는 HMAC 결과의 일부를 사용하여 6자리 또는 8자리 숫자로 변환됩니다.
  6. 검증: 사용자가 입력한 OTP를 서버에서 동일한 방식으로 생성된 OTP와 비교하여 검증합니다. 시간 슬롯이 짧기 때문에 OTP는 매우 짧은 시간 동안만 유효합니다.

 

Warrenstrange/Googleauth를 이용한 키 제너레이트 및 검증

 

pom.xml

<dependency>
    <groupId>com.warrenstrange</groupId>
    <artifactId>googleauth</artifactId>
    <version>1.5.0</version>
</dependency>

 

import com.warrenstrange.googleauth.GoogleAuthenticator;
import com.warrenstrange.googleauth.GoogleAuthenticatorKey;
import com.warrenstrange.googleauth.GoogleAuthenticatorQRGenerator;

public class GoogleAuthExample {

    public static void main(String[] args) {
        // Create an instance of GoogleAuthenticator
        GoogleAuthenticator gAuth = new GoogleAuthenticator();

        // Generate a new key
        GoogleAuthenticatorKey key = gAuth.createCredentials();
        String secret = key.getKey();
        System.out.println("Secret key: " + secret);

        // Generate a QR code URL to be scanned by Google Authenticator app
        String userName = "user@example.com";
        String issuer = "ExampleIssuer";
        String qrCodeUrl = GoogleAuthenticatorQRGenerator.getOtpAuthURL(issuer, userName, key);
        System.out.println("QR Code URL: " + qrCodeUrl);

        // Simulate the OTP that the user would provide from their Google Authenticator app
        int otp = gAuth.getTotpPassword(secret);
        System.out.println("Generated OTP: " + otp);

        // Verify the provided OTP
        boolean isCodeValid = gAuth.authorize(secret, otp);
        System.out.println("Is the OTP valid? " + isCodeValid);
    }
}

getOtpAuthURL로부터 알아낸 URL을 실제로 접속하면 QR코드로서 확인해 볼 수 있습니다. 그런데 이렇게 하면 api.qrserver.com에 귀속된 URL을 알려주게 되는데, api.qrserver.com은 구글 서버가 아닙니다. api.qrserver.com은 goqr.me라는 웹사이트에서 제공하는 QR 코드 생성 서비스의 API 라고하네요. goqr.me는 QR 코드를 생성하고 관리하는 데 특화된 서비스로, 다양한 형태의 QR 코드를 쉽게 만들 수 있도록 도와줍니다. 하지만, 이런 의존적인 방식이 마음에 안들경우 직접 QR을 생성할 필요성이 있는데, 이 부분에 대해서는 ZXing 라이브러리를 사용하여 자체적으로 QR을 생성하는 방식으로 해결하였습니다!

 

QR 코드 자체생성하기

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.4.1</version>
    </dependency>
    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.4.1</version>
    </dependency>
</dependencies>

 

QR을 만들어내는 서비스 로직을 아래와 같이 만들어봅시다.

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import org.springframework.stereotype.Service;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@Service
public class QRCodeService {

    public byte[] generateQRCode(String text, int width, int height) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
        ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
        return pngOutputStream.toByteArray();
    }
}

 

이제, 컨트롤러 입니다.

import com.google.zxing.WriterException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class QRCodeController {

    @Autowired
    private QRCodeService qrCodeService;

    @GetMapping("/generateQRCode")
    public ResponseEntity<byte[]> generateQRCode(@RequestParam String text) {
        try {
            byte[] qrCodeImage = qrCodeService.generateQRCode(text, 350, 350);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.IMAGE_PNG);
            return ResponseEntity.ok().headers(headers).body(qrCodeImage);
        } catch (WriterException | IOException e) {
            return ResponseEntity.status(500).body(null);
        }
    }
}

 

이제 http://localhost:8080/generateQRCode?text={인코딩하고자 하는 데이터} 를 요청하면, 자체적으로 생성된 QR PNG를 확인해 볼 수 있습니다 :)

어때요? 근사하죠? 읽어주셔서 감사합니다.

+ Recent posts