2025. 01. 02. ~ 2025. 01. 09.
평소 도서관에 출입할 때마다 인천대학교 학산도서관 앱 실행 -> 모바일 이용증으로 이동하는 프로세스에 불만이 있었다. 앱 로딩이 느리기도 하고, 출입할 땐 잘되다가도 도서관에서 급하게 나가야하는데 앱을 다시 켜서 찍으면 QR코드가 만료되어 있거나 모바일 이용증 버튼을 다시 누르면 QR코드가 로딩되지 않아 앱을 완전히 종료 후 재실행해야하는 골치 아픈 경험을 많이 겪었다. 이 경험들을 하며 쉽게 QR코드를 띄울 수 있는 기능을 만들어봐야겠다고 생각했다.
처음에는 Apple Wallet의 패스 기능을 통해 구현해보고 싶었다. 하지만 거금을 투자해서 개발자 계정을 만들 순 없었기에 빨리 실행할 수 있는 기능을 생각해보며 웹 앱을 통해 구현하려고 했었다. 하지만 외부 의존 없이 기기 자체에서만 실행할 수 있으면 좋겠다는 생각과 위젯 등으로 간단히 실행할 수 있는 단축어가 더 적합하다는 생각이 들어 단축어를 통해 구현하기로 확정지었다.
우선 단순히 크롤링과 비슷하다고 생각했다. 알고보니 canvas로 QR코드를 렌더링하고 있었기 때문에 일반적으로 GET, POST 할 수 없고 Selenium을 통해 이미지를 가져와야한다는 너무 슬픈 사실을 알아버렸다. 이 시점에서 프로젝트를 계속 진행할 수 있을까?라는 생각을 계속 했던 것 같다.
단축어로는 당연하게도 셀레니움을 사용할 수 없기 때문이다. 그래서 알아보니까 아이폰에서 파이썬 코드를 실행하고 그걸 단축어와 연동할 수 있게 그니까 단축어 실행하면 파이썬 코드가 실행되게 할 수 있는 유료 앱이 존재하기는 했다. 근데 그러면 뭔가 간단하게 폰 안에서 바로 실행되는 유틸을 만들고 싶었던 초기 목표와 달라지기도 했고 배포에도 문제가 있다고 생각했다.
우선은 공부한다고 생각하고 폰에서는 실행하지 못하더라도 qr 이미지를 가져오는 소스를 어떻게든 만들어보자고 생각했다. 이 과정도 생각보다 어렵지 않았다. 분명 셀레니움을 사용해야한다는 것을 인지하기 전에 단순히 로그인, qr 페이지 긁어오기 정도는 get request를 간단하게 날리는 것으로 쉽게 해결했는데 셀레니움을 처음 쓰는 것이라 그랬을 것이다. 단순히 로그인 하기 위해 아이디 칸에 아이디 넣고 비밀번호 칸에 비밀번호 입력하고 로그인 버튼 누르는 과정 조차 너무 어렵고 많은 검색 끝에 해결했다.
마침내 어떻게든 완성했다. 너무 뿌듯했고 이 기쁨을 어찌 표현해야할지... 우선 두 가지 문제가 있었다.
- 너무 느린 속도: 역시나 프로젝트 진행 계기와 벗어났다. 이 정도면 그냥 앱 재실행하고 켜는게 나을 수준.
- 네이티브 단축어만 사용하여 구현 불가
다른 방법을 찾아야겠다고 고민하던 중 상식적으로 qr 코드 이미지 자체는 주고 받는 것은 말이 안되고 qr코드 내용을 받으면 그걸 받아 qr코드 형태로 렌더링하는 것일텐데 그러면 필요한 값을 받아오는 API 주소를 찾으면 되는거 아니야?라는 생각을 했다.
그렇게 한 번도 해보지 않은 새로운 짓(?)을 시작하였다. 페이지에 접속하고 F12를 눌러서 fetch 부분을 얼마나 본지 기억도 안난다. 그렇게 내가 원하는 기능을 완성할 수 있었다. 엑세스 토큰을 쿠키에 저장시키고 쿠키에 저장된 엑세스 토큰을 이용하여 학생증 정보를 가져오는 형태였는데 왜인지 모르겠지만 브라우저에 저장된 쿠키와 login request를 통해 얻은 accessToken의 형태가 좀 많이 달라 고생했다. 다른 토큰인줄 알고 어떻게 해야 막막했는데 이상하게도 그냥 사용하면 되는 것이였다. 브라우저에 저장할 때는 난독화를 한다거나 다른 인코딩-디코딩 방식을 사용하는 것일까?
이제 값을 받아와서 딕셔너리로 변환하고 잘 사용하면 되는 것이였는데 단축어에서는 왜인지 잘 되지 않았고 정규식을 통해서라도 해결해보려고 했으나 알 수 없게 자꾸 안되었다... 너무 힘들었지만 어짜피 최종 결과물은 html로 할 것이였기에 html에게 파싱을 전적으로 맡겼다.
아쉬운 점이 있다면 물론 프로젝트를 진행하며 여러 AI의 도움을 받긴 했다만 결국 최종 코드에 도달하기 위해 나의 많은 노력, 부가적인 서치가 필요했다. 하지만 html에 대해 아는 지식이 없어 프론트적인 부분은 내가 지시를 내리고 코드를 복사 붙여넣기 할 수 밖에 없었다.
아무리 내가 백엔드 개발자를 희망한다지만 나의 프론트적 지식의 부족함을 엄청 많이 깨닫고 공부해야겠다고 한 번 더 다짐했다. 그리고 AI에 대해 내가 생각하던 신념이랄까? 신념을 더 확고히하는 계기가 되었다.
- AI를 역시 잘 활용하려면 프롬프트를 잘 써야하고 AI 없이 코딩하는 것은 좋고 말고를 떠나서 매우 비효율적이다. AI가 있음에도 불구하고 내가 CS와 각종 프로그래밍 언어를 더 열심히 공부해야겠다고 느꼈는데 그 이유는 더 나은 프롬프트를 작성하기 위해서다.
default.mp4
사실 컴퓨터공학부에 입학하고 1학기 파이썬 A+, 2학기 C언어 A+를 받으며 나름 잘 하고 있다고 생각하고 있었는데 갑자기 문득 대학교 생활의 1/4가 지나갔는데도 겨우 이정도 발전이라면 내가 나중에 개발자가 될 수 없을 것이라고 확신했다. 결국 학교에서 배우는 것 외에 나 스스로 많이 찾아서 공부해야고 느꼈다. 남들이 하는 투두리스트 만들기 이런 간단한 프로젝트부터 시작하는 것도 좋지만 뭔가 타당성이 있는 프로젝트를 해보고 싶었고, 이 프로젝트를 진행하게 되었다.
물론 아직도 공부해야할 것들이 산더미지만 이 프로젝트로 컴퓨터공학부 1학년을 마무리하는 것은 나름 나 스스로 만족한다.

