최근 여러 프로젝트에서 ai를 적극적으로 활용하면서 작업을 진행했다. 불과 3~4년에 비해서 정말로 시대가 격변했구나 라고 느낄정도였다.
사실 이번 포스팅은 꽤나 민감한 주제인 ai의 등장으로 점점 일자리를 잃고있는 우리에 대한 이야기다.
ai에게 대체
되는게 아니라 ai를 잘 활용
하여 시대에 적응하는 사람이 되려면 어떻게 해야하는지 부족하지만 내가 ai를 활용하는 방법과 느낀점들을 써본다.
난 불과 얼마전까지만해도 ai를 회의적으로 생각했다. 개발자로써 스스로의 역량이 중요하지 ai에 의존하면 그게 무슨 개발자냐? 라고 말할정도였다.
간간히 ai의 도움을 받긴했지만 왠만해서는 스스로 해결하려고 노력했다. 그러던 와중 직장에서 gpt 유료 결제를 해주며 업무 효율이 5배는 올라가는데 대체 이걸 왜 안쓰냐? 라는 말을 들었다. 회사에서 유료 모델을 제공했는데도 저는 ai 쓰기 싫어요 라고 땡깡부릴(?) 수는 없기 때문에 아마 그때부터 개발을할때 ai를 활용하기 시작한걸로 기억한다. 그리고 이때부터 내 생각이 완전히 달라졌다.
10년전
"지금은 인터넷 검색으로 다 찾을수있는데 옛날에는 일일이 책이나 신문을 찾아봤었데!"
현재
"지금은 ai가 다 대답해주는데 옛날에는 일일이 인터넷에 검색을했었데!"
불과 3~4년 전까지만해도 새로운 기술을 배우거나 패키지의 사용법을 알아내려면 일일이 공식문서를 찾아봤었다. 아주 방대한양의 영어로된 문서를 Getting Started
부터 읽어보고 필요한 내용이 있으면 다행이지 문서가 매우 부실하거나 불친절한(특히 aws-sdk 공식 문서) 경우 스택오버플로우나 해외 개발자 커뮤니티에 자료를 찾아봐야했었다 이 과정의 시간이 정말 오래걸렸다. 특히나 개발자 커뮤니티에 질문을 올렸을때 답변을 받기까지 일주일이 걸리거나 아예 답변이 없을경우는 결국 혼자서 고생해가며 스스로 알아내는 경우도 있었다.
그런데 지금은 ai에게 ~기술로 ~를 만들어야하는데 어떻게 해?
라고 물어보면 아주 친절하게 한국어로 원리와 사용 예시까지 구체적으로 설명해준다. 이해가 안가는 부분을 계속 물어봐도 친절하고 빠르게 즉시 대답해준다.
나만의 개인강사가 생긴것이다. 내 경우를 말하자면 나는 개발을 진행하면서 내가 구현한 로직이나 아키텍처가 충분히 합리적이고 문제는 없는지 내 예시를 스택오버플로우나 해외 기술 블로그같은곳을 하나하나 찾아보면서 비교해보고 검증을 하는데 시간을 엄청나게 들였었다. 지금은 ai에게 내가 구현한 결과물을 보여주면서 이게 충분히 합리적인 방식인지, 논리적으로 문제는 없는지, 현업에서는 어떻게 쓰고있는지 에 대해서 질문하고 단 몇초만에 리뷰를 받는다.
실제로 최근 프로젝트에서 oauth, mq기반 알림톡 발송, 람다를 사용활용한 스케줄러 작업등 내가 해본적없던 여러가지 기능들을 구현했는데 예전같았으면 한달이 걸릴작업을 정말로 일주일도 안돼는 기간안에 완료할수있었다.
나는 주로 nest.js로 백엔드 작업을 하면서 swagger 문서를 작성해둔다. api가 완성되었을때 테스트를 진행해야하는데 mock 데이터가 필요할때 이 데이터들을 예전에는 하나하나 직접 작성했었다. swagger가 있긴했지만 복잡한구조의 json을 작성하는건 여간 귀찮은일이 아니었다. 그래서 그냥 dto를 보여주면서 이 구조에 맞게 적절한 json을 생성해달라고하니까 바로 만들어줬다.
DTO 또한 마찬가지다. nest.js 작업을 하면서 리퀘스트 dto나 리스폰스 dto를 전부 작성해야했는데 이것도 매우 귀찮은일이었다. 그래서 이것도 db 스키마를 보여주면서 이런저런 값들이 포함되어야하는 swagger가 적용된 리스폰스 dto를 만들어 달라고하니까 즉시 만들어준다.
검증할 필요가없고 반복적인 작업들은 ai를 통해서 해결을하고 나는 순수하게 개발을 하는데에만 집중할수있었다. 애초에 ai가 가장 잘해네는 작업이 이런것들이다. 어째보면 너무 당연하고 이미 이렇게 활용하는 사람들이 많겠지만 알게모르게 자동화가 가능한걸 사람이 직접하고있는 경우가 꽤 많다 나또한 최근에서야 "아! 이거 ai한테 시키면되는데 왜 내가 직접하고있는거지?" 하고 깨달아서 이제서야 이렇게 하고있다.
위 내용들은 ai를 잘 쓰는 방법 이고 모든 분야에서도 마찬가지 지만 특히나 개발자로써 내가 반드시 명심해야 한다고 생각하는 내용이 있다.
빵이 먹고싶은데 "빵을 만들어줘"
가 아닌 "빵을 만드는 방법은 뭐야?"
라고 질문하는게 가장 중요하다고 생각한다. 물론 지금 ai로도 빵을 만들어주는(코드를 짜주는)것도 가능하다. 하지만 그 빵이 어떤 성분으로, 어떻게 만들어져있는진 알고있어야 안심하고 먹을수있지 않을까? 그리고 만드는 방법을 알고있다면 얼마든지 내가 원하는대로 커스터마이징이 가능하다. 원하는대로 어떤 빵이든 만들면 그만이다. 그게 불가능하다면 ai가 만들어준 건포도가 들어간 빵만 먹어야할수도 있다. 방법을 조금이라도 알고있다면 하다못해 최소한 ai한테 "건포도는 빼고 만들어" 라고 할수는 있다.
나는 기본적으로 ai가 만들어준 결과물은 신뢰하지 않는다. 반드시 검증하는 과정을 거친다. 실제로도 ai가 짜준 코드에 논리적인 결함이나 빼먹는 부분이 굉장히 많다. 그리고 ai 또한 의견 차이
가 있다 이게 무슨 소리냐면 나는 보통 gpt와 gemini를 번갈아가면서 똑같은 질문을하고 두 답변을 비교하면서 마음에드는 대답을 채택한다. 근데 이때 gpt와 gemini의 의견이 다를때가있다. 문제를 해결하는데 A라는 방법과 B라는 두가지 방법이 있는데 gpt는 A를, gemini는 B를 추천한다.
대부분의 경우 간단하게 해결하기 VS 확장성을 고려해서 설계를 바꾸기 문제였다. 물론 둘다 문제를 해결할순 있지만 간단하게 해결하면 나중에 힘들어질 가능성이 있고 지금 설계를 바꾸자니 오버엔지니어링 일수도 있다. 여기서 중요한건 본인 상황에서 어느 방법이 가장 적절하고 합리적인지 스스로 판단하고 결정할수있는 능력이 필요하다는것이다.
ai를 훌륭한 선생님 으로 쓰면서도 스스로 학습하려는 태도
는 필수다. 나 또한 ai가 문제를 해결해줬을땐 그 방법을 학습하고 내것으로 만들어서 다음에 비슷한 문제가 발생했을때 바로 떠올려서 스스로 해결한다. 아니면 최소한 비슷한 문제를 ai한테 자세하게 설명해서 헤메지 않고 빠르게 해결할수도 있다.
실제로 지난번에 리눅스에서 프로그램을 설치하고 명령어를 입력해도 실행이 안되던 문제가 있었다. 그때 ai가 설명해준 방법은 source ~/.bashrc
명령어를 통해서 설정을 새로고침 하라는 내용이었다. 나중에 다른 비슷한 문제를 겪었을때 분명 환경설정 새로고침 해야한다는건 알겠는데 정확한 명령어가 기억나지 않아서 이렇게 물어봤다 리눅스에서 ~/ bashrc 였나 설정 새로고침하는 명령어 뭐였지?
그리곤 ai는 바로 정확한 명령어를 알려줬고 빠르게 문제를 해결했다. 만약 이걸 몰랐다면
이런 절차를 밟았을 가능성도 있었을 것이다.
그리고 솔직히 말하자면 나는 ai가 써준 코드를 그대로 복붙해서 쓰는 태도를 매우 부정적으로 생각하고있다. 이건 ai에 의존
하는것이며 이런 태도가 ai에게 대체
될수있는 가장 큰 이유라고 생각하며 ai를 유용한 도구이자 파트너
로써 사용하는 방법을 알아야 ai 시대에서 ai를 잘 활용할수있는 더 높은 개발자로 한단계 성장할수 있다고 생각한다.