기본 콘텐츠로 건너뛰기

라벨이 인증서체인인 게시물 표시

AI와 함께 춤을 - 25년차 개발자의 AI 코딩 여정기 (ChatGPT에서 Claude Code까지)

ChatGPT가 본격적으로 서비스를 시작하면서 나 뿐만 아니라 우리 모두의 삶에 많은 것이 달라졌다. 🤖 ChatGPT와의 첫 만남 회사 대표의 강권에 힘입어 ChatGPT가 서비스를 시작하자마자 유료 구독을 해서 사용하기 시작했다. 그런데 나는 인터넷을 업무 외 용도로는 크게 사용하지 않는 편이다. 인터넷 쇼핑도 거의 안 하고, 배달앱은 아직도 사용하지 않고 있다. 인터넷에서 하는 거라고는 개발을 위한 검색, 게시판 읽기, 가끔 궁금한 것 찾아보기 정도다. 그러다 보니, ChatGPT가 처음 나왔을 때 나에겐 크게 쓸모가 없었다. 그때는 ChatGPT에 환각이 많았기 때문에 개발 관련해서 뭔가를 물어보면 쓸 만한 답변을 하질 못했다. 답변을 받았더라도 이를 검증하기 위해 다시 구글링을 해야 했기 때문에 크게 도움이 되진 않았다. 💡 우연히 시작된 AI 코딩 ChatGPT를 코딩에 사용한 것은 우연한 기회였다. 집사람 친구 딸이 학교에서 코딩 숙제가 나왔는데 도저히 모르겠다고 도움을 요청해 왔다. 간단한 계산기였던가 그랬던 것 같은데, 직접 코딩해서 돌아가는지 확인하는 것까지는 귀찮아서 혹시나 하는 마음에 ChatGPT에 작성을 지시했다. 어라. 대충 눈으로 컴파일했을 때 문제없이 동작할 것 같은 코드가 나와서 그걸 보내줬다. 그러면서 개발에 ChatGPT를 사용하기 시작했다. 간단한 함수 단위로 머리 쓰기 싫을 때 작성을 맡기고 복사해서 붙여넣는 방식이었다. 그럼에도 이걸 적극적으로 사용할 수 없었던 것은 코딩에도 환각이 발생했기 때문이다. 코드에서 환각이 발생할 일이 뭐가 있겠냐 싶겠지만, 정확히 기억은 안 나는데 무엇인가를 구현해야 했는데 잘 모르는 부분이라 GPT에게 요청했다. 언제나 그렇듯이 매우 그럴듯한 코드를 뽑아줬다. 다만 존재하지 않는 패키지를 사용하라는 가이드와 함께... 그래서 간단한 함수 작성 같은 경우에만 쓰다가 이것도 귀찮아서 잘 사용하지 않게 되었다. ⚡ GitHub Copilot — ID...

Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:393))

현재 flutter로 개발 중인 프로젝트에서 REST API 통신을 하는데, 안드로이드 단말에서 CERTIFICATE_VERIFY_FAILED 오류가 발생하면서 서버와 통신이 이뤄지지 않는 문제가 발생하였습니다. 현재 상황은 apache 서버에 php를 이용하여 api를 만들었고, 운영서버에는 SSL 이 적용되어 있습니다. SSL 인증서는 공인 인증 기관으로 부터 발급된 인증서를 사용하고 있습니다. iOS에서는 문제없이 서버와 통신이 이뤄지지만 안드로이드에서는 오류가 발생합니다. CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate "CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate"로 검색을 하면 공인 기관에서 발급하지 않고 자체적으로 인증서를 발급받아서 사용하는 경우에 문제 해결 방법들이 검색됩니다. 앱 내부에서만 사용하는 서버인 경우에 자체 발급된 인증서를 많이 쓰는 모양입니다.  자체 인증서로 인한 문제를 해결하는 방법은 두가지 정도가 있는 듯 합니다.  1. 인증서 검증을 하지 않는 방법 Dio dio = new Dio(); (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (HttpClient client) { client.badCertificateCallback = (X509Certificate cert, String host, int port) = true; return client; }; 2. 인증서를 내장하는 방법 ByteData data = await rootBundle.load('assets/raw/certificate.pem'); SecurityContext context = SecurityContext.defaultConte...