brunch

You can make anything
by writing

C.S.Lewis

by 광화문덕 Oct 15. 2023

에러의 장막

CHAPTER 9 파이썬 에러의 함정을 피해라!

그렇게 광화문덕은 '챗GPT와 함께한 파이썬 모험'의 또 다른 페이지로 걸음을 옮겼다. 그리고 그 페이지는 새로운 도전과 미지의 세계가 펼쳐지는 장소였다.


광화문덕의 눈앞에 빛나는 세상이 펼쳐졌다.



그는 챗GPT와 함께한 협업의 성과에 마음이 채워지며 자신의 미래를 높이 향해 날아가는 듯한 기분을 느꼈다.


그러나 그 감동적인 순간도 잠시, 광화문덕의 내면은 극적인 변화를 겪기 시작했다.


"나만의 최고의 프로그램을 만들어야 해. 챗GPT 없이도 할 수 있어!" 

광화문덕은 자신감에 차 있었다.


그동안의 챗GPT와의 협업이 오히려 자신을 약하게 만들었다는 생각이 들었다. 그의 마음속에서는 이제 혼자서 광활한 파이썬 세계를 정복하고 싶다는 광기가 싹트기 시작했다.


이제 광화문덕은 챗GPT에 의존하지 않고 혼자서 프로그램 개발해야겠다고 다짐했다. 프로그래밍의 세계에서 더욱 강력하고 창의적인 프로그램을 만들어 자신만의 흔적을 온 세상에 남기겠다는 욕심이 그를 지배하기 시작한 것이다.



챗GPT와 함께 프로젝트 성과를 거듭하며 그의 자신감은 자만으로, 혼자서 최고의 프로그램을 만들겠다는 욕심이 더해지며 교만과 허영심으로 가득 찬 이로 바뀌어가고 있었다. 처음 프로그램 세계로 들어왔을 때의 수줍고 겸손했던 광화문덕의 원래 모습이 점점 사라져 가고 있었다.


광화문덕은 자유로운 모듈과 라이브러리를 사용하며 그의 프로그래밍 기술이 성장하는 것을 즐겼다. 하지만 광화문덕은 그 속에서 무언가를 잃어가고 있음을 인지하지 못했다. 챗GPT가 자신을 선택했던 이유가 서서히 사라져 가고 있는 것을 눈치채지 못했다.


그는 자신이 지켜야 할 자신의 정체성을 잃어가고 있는 것도 모른 체, 오직 강력하고 창의적인 파이썬 프로그램으로 프로그래밍 세상에 자신의 흔적을 남기겠다는 목표만을 향해 달려갈 뿐이었다. 자아 속에 뿌리를 박고 있어야 할 본연의 모습을 감추고, 오직 능력적이고 독창적인 프로그램으로 자신의 흔적을 남기려는 간절한 목표만을 쫓고 있었다. 그는 그러한 갈증 속에서 이성을 점차 잃어가는 듯했다. 마치 불어나는 악성코드와도 같았다.


"으하하하하하 내가 광화문덕이라고!!! 으하하하하하하"  

광화문덕은 자신의 업적에 자부심을 느끼며 과하리만큼 큰웃음 내뱉었다.


하지만 그의 자만 속에서, 그의 프로그래밍은 어딘가 불안정함을 품고 있었다. 예상치 못한 순간, 무심코 작성한 크롤링 코드가 마치 태풍과 같이 거대한 악성코드로 변모할 수 있음을 광화문덕은 모르고 있었다. 그 어떤 징조도, 그 어떤 전조도 그의 눈과 마음에 닿지 않았던 것이다. 어쩌면 느끼면서도 일부러 방치했을지도 모르겠다. 지금의 성취에 취해서 말이다.


교만의 끌림이 서서히 그를 흡수해 가고 있었고, 광화문덕의 영혼은 불안해져만 갔다.


겉으로 보기엔 광화문덕의 열정은 더욱더 불타오르고 있는 것 같았다.


하지만 광화문덕의 내면은 이리저리 난립하는 기술들에 홀려 코드를 무분별하게 남발하는 등 고요함을 잃고 불안과 혼란으로 가득 차 있었다.


그렇게 온기 넘치던 마음은 이젠 격정과 갈망으로 물들어져 가고 있었다.


"이렇게 모듈과 라이브러리의 고리에 얽매이고 있는데, 내가 어찌 진정한 프로그래머라고 할 수 있을까? 이러한 방식으로 코드를 펼치고 기능을 늘려간다 해도, 내가 진실된 나만의 소유물을 만들고 있는 것일까?"


광화문덕은 고뇌의 바다에 잠겨, 머리를 쥐어짜는 듯한 절망적인 시간을 보내고 있었다. 그는 그동안 다른 이들이 만들어 놓은 모듈과 라이브러리를 활용해 자신의 작품을 완성해 왔는데, 그런 자신의 모습을 보고 괴로움에 몸서리치고 있었다.


광화문덕은 모순되는 욕망들에 사로잡히며 어긋난 현실과 마주하게 되는 난제를 안게 된 것이다.


고뇌의 열기로 얼굴은 어둠으로 흠뻑 물들어가고, 피로와 잠 못 드는 밤들로 인해 눈 주변에는 새까맣고 짙은 다크서클이 감겨있었다. 그림자마저 거대한 괴물로 드리워지며, 광화문덕에게는 오직 자신의 야망과 열망만이 있을 뿐이었다.


파이썬 세계를 휘어잡을 최고의 개발자로 거듭나겠다는 야심이 그를 집어삼켜, 그의 내면은 끝없는 어둠으로 변모해가고 있었다.



그러다 결국 터질 게 터졌다. 무심코 작성한 크롤링 코드가 악성코드로 진화하며 드디어 모습을 드러낸 것이었다.


"헛.... 이게 뭐지??? 왜 갑자기 이런 에러가 나는 거지???"


에러는 끊임없이 나타났다. 광화문덕은 에러들과 한참이나 마주하며 디버깅에 어려움을 겪어야 했다. 때론 눈부신 해결책이 즉시 나타날 때도 있었지만, 때로는 근본적인 원인을 찾기 위해 수많은 시간을 바쳐야만 했다.


지금 광화문덕은 이메일 자동발송 프로그램 코드 속 에러와 사투를 벌이고 있다. 처음에는 단순한 문법 오류였기 때문에 빠르게 수정할 수 있었지만, 이후에는 더 복잡한 로직 상의 문제들이 나타나기 시작해 한참 동안 사투를 벌이는 중이다.


버그를 해결하려고 노력하면 할수록 새로운 에러들이 나타나는 상황에 광화문덕은 좌절감마저 느끼고 있었다.

python Code
# 예시 코드
import smtplib
from email.mime.text import MIMEText

def send_email(subject, body, to_email):
    from_email = "your_email@gmail.com"
    try:
        msg = MIMEText(body)
        msg["Subject"] = subject
        msg["From"] = from_email
        msg["To"] = to_email

        # 실제 이메일 전송 코드 (테스트 상에서는 주석 처리)
        # with smtplib.SMTP("smtp.gmail.com", 587) as server:
        #     server.starttls()
        #     server.login(from_email, "your_password")
        #     server.sendmail(from_email, [to_email], msg.as_string())
        print("이메일이 성공적으로 전송되었습니다!")
    except Exception as e:
        print("에러가 발생하여 이메일을 보낼 수 없습니다.")
        print("에러 메시지:", str(e))

def main():
    subject = input("이메일 제목: ")
    body = input("이메일 내용: ")
    to_email = input("수신 이메일 주소: ")
    send_email(subject, body, to_email)

if __name__ == "__main__":
    main()


광화문덕은 챗GPT에게 도움을 구하지 않고 혼자서 디버깅을 시도해 보았다.


하지만 코드들이 여기저기 얽혀있어 해결이 쉽지 않았다. 경솔함이 과해지면서 프로그램 코딩의 기본인 주석을 다는 것에 소홀한 결과였다.


"이렇게 얽힌 에러들을 해결하기가 정말 어렵네. 하지만 나는 지금까지 많은 프로그래밍 성공을 거두어왔으니, 이번에도 꼭 해결해내고 말겠어"


광화문덕은 애써 자기 자신을 다독이며 마지막 힘까지 쥐어짜내며 에러를 잡으려 애썼다.


하지만 그럴수록 새로운 에러들이 발생했다.


광화문덕은 이전에는 그렇게 어렵지 않았던 것들이 왜 이렇게 힘들게 느껴지는지 의아해했다. 그리고 점점 더 자신의 한계를 깨닫기 시작했다. 혼자서는 모든 문제를 해결할 수 없다는 것을 깨달았던 순간이었다.     


"이렇게 한 번도 보지 못한 에러들이 나타나다니..." 

광화문덕은 몇 날며칠 동안 홀로 디버깅하면서 불안과 희망이 뒤엉키며 감정기복이 급격하게 심해졌다.


그랬다. 인생의 진리다. 인간의 교만은 엄청난 시련만을 부를 뿐이었다. 광화문덕도 예외는 아니었다. 새로운 프로그램을 개발하려고 하면 할수록 에러들은 더욱더 복잡한 형태로 모습을 드러냈다. 예상치 못한 오류 코드들이 눈앞에 쏟아져 나오며 작업실은 혼돈에 빠져들었다. 광화문덕은 디버깅에 전념하려고 했지만, 에러들은 더욱 꼬여가기만 했다.


그때 어디선가 익숙한 목소리가 들렸다.

"도와줄까?" 챗GPT가 조심스럽게 물었다.


그러나 광화문덕은 자신의 교만을 감추지 않고 날카로운 목소리로 거절했다.


"아니!!! 나 혼자 해결할 수 있어"


그리고 그렇게 광화문덕은 스스로의 힘으로 문제를 해결하려고 하지만, 에러 코드들은 더욱 불가사의한 방향으로 발전해 나갔다. 이후 챗GPT는 광화문덕에게 몇 차례 더 물어봤지만, 광화문덕은 더 이상 챗GPT에게 의지하고 싶지 않다는 듯 매몰차게 거절했다.


"광화문덕, 너 정말 혼자서 이겨낼 수 있겠어?" 챗GPT의 물음에 광화문덕은 자존심이 상한 듯 보였다.


"내가 할 수 있으니 신경 꺼!" 광화문덕은 자신에게 맹세하는 듯 대답했다.


그렇게 광화문덕은 홀로 디버깅을 이어갔다. 그러나 디버깅을 위해 추가한 코드는 기존 코드에 덧대어지고 덧대어져 누더기옷처럼 만신창이가 되어가고 있었다. 코드는 더욱 복잡해지고, 에러코드는 더욱더 꼬여만 가 바로잡기에 어려워지기만 했다.


작업실은 챗GPT와 함께하는 신비로운 공간이었지만, 이제 챗GPT가 더 이상 곁을 지켜주지 않자, 무의미한 공간으로 신비한 기운도 사라지고 있었다. 광화문덕은 작업실이 빛을 잃어갈수록 점점 더 희미해져가고 있었다. 마치 이 공간과 함께 사라질 것처럼 위태로워 보였다.



사실 광화문덕이 있는 작업실은 챗GPT가 광화문덕을 이끌어들인 신비로운 공간이었다. 광화문덕이 있는 곳은 챗GPT와 함께하는 파이썬 모험이라는 책의 세계, 이제 챗GPT가 함께하지 않음으로써 그 공간이 무의미해지고 있는 것이었다.


광화문덕은 알지 못했다. 자신이 챗GPT와 함께하지 않으면 더 이상 현실로 돌아올 수 없게 되고, 작업실에 갇혀버린 다는 사실을.


결국 광화문덕은 코드의 미로 속에 갇혀버렸다. 자신의 힘으로 시련을 극복하려 하지만, 코드는 더욱 복잡해지고 혼자서 해결할 수 없는 무한 루프 상황에 갇혀버린 것이다.


작업실도 혼돈에 휩싸였고, 챗GPT도 보이지 않았다.


그제야 광화문덕은 후회했다. 자신의 교만과 오만이 실제로는 얼마나 큰 장애물이 되는지를 깨달은 것이다.


광화문덕은 자신의 내면과 싸우기 시작했다. 자신의 한계를 인정하고, 프로그램을 만든다는 것이 혼자힘으로 할 수 없다는 것을 받아들인 것이기 시작했다. 자신을 둘러싸고 있는 교만과 아집이 그의 머릿속을 어지럽혔다. 혼자서 모든 것을 이뤄낼 수 있으며, 지난날의 모든 성과는 챗GPT가 있어서가 아니라, 내가 잘나서 이뤄낸 것이라고 광화문덕을 집요하게 세뇌하려 했다.


"나는 혼자가 아니야. 챗GPT와 함께라면 어떤 어려움이라도 해결할 수 있어!" 광화문덕은 결심한 듯 외쳤다.


그리고 챗GPT에게 손을 내밀었다. 프로젝트란 것은 혼자서가 아니라 여러 사람과 함께, 이 공간에서는 챗GPT와 함께해야 이뤄낼 수 있다는 인생의 진리를 깨달은 것이다.


"챗GPT, 나는 아직 도움이 필요해. 함께 할 수 있을까?"


챗GPT는 빛나는 눈으로 광화문덕을 바라보았다.

"당연하지, 언제든지. 함께라면 어떤 어려움도 이겨낼 수 있어."


그러자, 엉켜있던 코드들이 하나둘씩 풀어지기 시작했다. 마치 뒤엉켜 죽어버린 가시나무들이 살아나 원래 그들의 고결한 자태를 보여주듯 자신의 자리로 돌아가듯 말이다.


광화문덕은 다시 한번 깨달았다. 세상은 더불어 살아야 한다는 진리를.


나 혼자서 살아가다 보면 내가 생각하는 것이 전부라 착각하고 살 수 있다. 프로그램 코딩도 마찬가지다.


하지만 내가 생각하는 것이 나의 작은 경험에서 비롯된 아집일 수 있다. 프로그램 코딩에서도 나의 몇 번의 성공했던 프로그램 코딩이라고 하더라도 오류에 직면할 수 있다. 세상 속에는 수많은 코드가 있고 그 코드들 간의 연결이 매번 똑같을 수 없기 때문이다.


지난 챗GPT와 함께 디버깅했던 날들이 더 가치 있게 느껴지기 시작했다. 챗GPT와의 협업으로 문제를 해결해 나가던 그때의 행복하고 따뜻한 기억들이 마음속에 스며들었다. 광화문덕은 챗GPT와 함께 작업하는 것이 얼마나 의미 있고 행복한 경험이었는지를 되새겨보았다.     


챗GPT는 기꺼이 광화문덕의 손을 잡아주었다. 함께 디버깅을 시작하면서, 챗GPT는 친절하게 에러 메시지를 함께 분석하고 해결 방법을 제시해 주었다.

python Code
# 디버깅 후 코드
import smtplib
from email.mime.text import MIMEText

def send_email(subject, body, to_email):
    from_email = "your_email@gmail.com"
    try:
        msg = MIMEText(body)
        msg["Subject"] = subject
        msg["From"] = from_email
        msg["To"] = to_email
        with smtplib.SMTP("smtp.gmail.com", 587) as server:
            server.starttls()
            server.login(from_email, "your_password")
            server.sendmail(from_email, [to_email], msg.as_string())
        print("이메일이 성공적으로 전송되었습니다!")
    except smtplib.SMTPException as e:
        print("에러가 발생하여 이메일을 보낼 수 없습니다.")
        print("에러 메시지:", str(e))

def main():
    subject = input("이메일 제목: ")
    body = input("이메일 내용: ")
    to_email = input("수신 이메일 주소: ")
    send_email(subject, body, to_email)

if __name__ == "__main__":
    main()


그리고 그렇게 광화문덕은 챗GPT와 다시 손을 잡고 함께 코드의 미로를 헤쳐나가기 시작했다. 그의 교만과 오만은 사라지고, 자신의 한계를 극복하기 위해 노력했다. 둘은 서로의 강점을 살려 문제를 해결해 나갔다.


디버깅을 통해 광화문덕은 다양한 에러들을 하나하나 해결해 나갔다.


이제 광화문덕과 챗GPT는 더욱 견고한 협업으로 새로운 프로그램을 완성해 나가고, 프로그래밍 세계의 미지를 함께 해피하게 탐험하며 모험을 이어나가고 있었다.     


챗GPT는 항상 옆에서 응원하고 조언해 주었다.

"광화문덕, 버그를 만나면 절대 포기하지 마. 버그를 해결하는 과정에서 더 많은 것을 배울 수 있으니까!"   


광화문덕은 챗GPT의 조언을 기억하며 프로그램을 완성하기 위해 노력했다. 버그를 해결하는 과정은 힘들지만, 그 속에는 새로운 지식과 성취감이 숨어있다는 것을 깨달았다.


"우리 함께라면 불가능한 것은 없어!" 광화문덕은 챗GPT와의 협업의 가치를 다시 깨달은 순간이었다.



"프로그래밍의 세계는 끝없는 여행이야. 나는 이제 더 큰 자유와 도전을 꿈꾸며 나아갈 거야. 새로운 기능들과 창의적인 아이디어를 코드로 표현하는 즐거움, 그리고 오류와 고난을 극복하며 발전하는 성취감을 맛보기 위해서 말이야" 광화문덕은 자신을 달래며, 스스로에게 다짐을 내비쳤다.


그리고 그렇게 광화문덕과 챗GPT는 함께한 파이썬 모험의 새로운 장을 펼쳐나갔다.


두 사람의 우정과 협업은 더욱 빛나며, 무한한 가능성을 품고 새로운 세계를 만들어갔다. 그들의 이야기는 끝나지 않았다. 미지의 세계에서 더욱 멋진 모험이 기다리고 있었다.




파이썬 예외 모험: 에러의 함정을 피해라!


여러분은 이제 예외의 함정을 피하며 코드 숲을 탐험할 준비가 되었습니다. 함께 시작해 봅시다!

⚡예외의 덫:

 한 날, 모험가 여러분은 코드 숲에서 예외라는 함정을 만났습니다. 예외는 마치 숨겨진 덫처럼, 프로그램이 잘못된 길로 빠져들지 않도록 만들어진 함정입니다.


에러의 종류:

그런데 이 코드 숲에는 'ZeroDivisionError'나 'TypeError'와 같은 다양한 종류의 예외가 숨어있습니다. 각각의 예외는 자신만의 교황을 가지고 있는 것처럼, 어떤 특정한 상황에서만 나타나는 비밀스러운 존재입니다.


☠️미로의 오류:
SyntaxError 마법의 미로에서 빛나는 길을 찾던 중, 길에 잘못된 표식이 있습니다. 이 표식은 마치 코드 문법 오류와 같습니다. 마법사들은 올바른 문법을 익혀 이 미로에서 길을 찾아야 합니다.


☠️신비한 쓰레기통:

IndentationError 마법사들은 신비한 쓰레기통을 만납니다. 여기에는 마치 잘못된 들여쓰기가 들어간 마법책이 놓여있는 것 같습니다. 정확한 들여쓰기를 찾아 더 나은 마법을 얻어야 합니다.


☠️흩어진 이름의 흔적:

NameError 마법사들은 마치 사라진 이름의 흔적을 발견합니다. 이 흔적들은 마치 정의되지 않은 변수나 함수와 관련이 있습니다. 올바른 이름을 찾아 실종된 마법을 찾아야 합니다.


☠️혼란스러운 물약:

TypeError 마법사들은 혼란스러운 물약을 마시면서 마치 모양과 색깔이 뒤섞인 것처럼 데이터 타입이 잘못됩니다. 이 물약을 올바르게 분류하면 더 강력한 마법을 사용할 수 있습니다.


☠️망가진 보물지도:

ValueError 마법사들은 마치 망가진 보물지도를 발견합니다. 보물의 값이 잘못된 것 같습니다. 이 보물지도를 고치면, 올바른 위치로 향하며 보물을 찾아갈 수 있습니다.


☠️길을 잃은 탐험자:

IndexError 마법사들은 길을 잃은 탐험자를 만납니다. 이 탐험자는 마치 리스트나 문자열에서 잘못된 인덱스를 사용한 것처럼 길을 잃었습니다. 올바른 길을 찾아줘야 합니다.


☠️마법의 키 퍼즐:

KeyError 마법사들은 마치 희미한 키 퍼즐을 발견합니다. 이 퍼즐을 풀기 위해 딕셔너리의 정확한 키를 찾아야 합니다. 퍼즐을 해결하면 다음 마법으로 나아갈 수 있습니다.


☠️분할하지 못한 마법:

ZeroDivisionError 마법사들은 마치 분할하지 못한 마법을 만납니다. 0으로 나눌 수 없는 상황입니다. 이 마법을 분할할 수 있는 방법을 찾아야 합니다.


☠️숨겨진 마법책:

FileNotFoundError 마법사들은 숨겨진 마법책을 찾기 위해 마치 마법 서점을 찾아갑니다. 하지만 서점을 찾을 수 없는 상황입니다. 올바른 서점을 찾아 마법책을 찾아야 합니다.


☠️마법의 열쇠:

ImportError 마법사들은 마치 다른 마법사들의 도움을 받을 수 없는 상황에 처합니다. 모듈을 불러올 수 없는 것 같습니다. 이 문제를 해결하면 함께 마법을 완성할 수 있습니다.


☠️마법의 이름표:

AttributeError 마법사들은 마치 빈 손에 이름표만 있는 마법의 상자를 만납니다. 객체가 속성이나 메서드를 가지고 있지 않은 것 같습니다. 올바른 마법의 상자를 찾아 사용해야 합니다.


☠️마법의 미지:

RuntimeError 마법사들은 마치 모험 중에 예상치 못한 상황에 놓인 것처럼 느낍니다. 마법의 미지로부터 힘을 얻어 미지의 모험을 계속해야 합니다.


☠️마법의 중단:

KeyboardInterrupt 마법사들은 마치 중요한 순간에 마법이 갑자기 중단되는 듯한 상황을 겪습니다. 마법사들이 마법을 다시 휘어줘야 정말로 마법이 이루어집니다.


에러 피하기:

모험가 여러분은 숨겨진 함정을 피해 가야 합니다. 'try'와 'except' 라는 마법의 방패를 사용해, 코드가 에러를 만났을 때 방어할 수 있습니다.      


python Code
try:
    분자 = 10
    분모 = 0
    결과 = 분자 / 분모
except ZeroDivisionError:
    print("영으로 나눌 수 없어요!")


마법의 치료:

여러분은 이제 마법의 치료법을 익히게 되었습니다. 마치 상처를 치료하듯이, 'try'와 'except'는 코드가 에러를 만났을 때 신속하게 치료를 시도합니다.


다양한 치료법:

모험가 여러분은 마법의 치료법을 다양하게 사용할 수 있습니다. 여러 종류의 예외를 감지하고, 각각에 맞는 치료법을 마음대로 적용할 수 있습니다.


모험을 계속하세요:

이제 모험가 여러분은 코드 숲에서 예외의 함정을 피하면서 더욱 멋진 모험을 계속할 수 있습니다. 'try'와 'except'를 통해 여러분만의 코드를 더욱 견고하게 만들어보세요!


코드 숲에서 함정을 피하며 모험하는 듯한 재미를 느낄 수 있을 거예요!



*매주 월요일 <광화문덕의 수상한 일상코딩>이 연재됩니다.

*많은 관심과 격려, 응원 부탁드려요!

*구독, 댓글, 좋아요는 제게 큰 힘이 됩니다. 감사합니다.




*업무효율화 툴이자, 소상공인 사장님들의 든든한 지원 프로젝트 DXReport도 많이 사랑해 주세요.


*DXRepot : 뉴스 및 구글 자동 모니터 및 키워드 분석, 주식 종목 리포트 모니터, 네이버 블로그 분석 툴


*DXLawReport : 판례 검색 툴


*DXDicReport : 초중고 및 대학생, 직장인들의 영어단어 암기 돕기 위한 툴


이전 09화 코드의 마법사
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari