
1. 특별한 과제
지나온 과거에 대한 성찰
왜 코딩을 시작했는가?
1년이란 시간을 투자해서 대학에 갔을때, 전공으로 다들 먹고 사는 줄 알았다. 하지만 1년간 공부했던 아랍어는 흥미도 있었고, 나름 성적도 잘 받았지만, 내가 이걸로 먹고 살 수 있을까? 하는 의문이 계속 들었다. 그때 마침 코로나로 인해 개발자의 수요가 폭발적으로 증가하던 시기였다. 이중전공을 고민하던 나에게 한 선배가 코딩을 해보는 건 어떻겠냐고 권유했다. 당시 1학년 겨울방학 이었고, 방학이라 시간도 많겠다, CodeIt이라는 플랫폼에서 파이썬을 배우며 개발을 시작하게 되었다.
처음 한 달 동안은 하루 30분씩 강의를 들으며 학습했고, 그 과정에서 로또 추첨기 로직을 직접 구현했다. 아무것도 없는 화면에서 내가 만든 로직이 실제로 돌아가는 걸 보며 “이거 재밌다”는 생각이 들었고, 그게 개발을 시작하게 된 계기였다.
왜 개발자가 되고 싶었는가?
원래는 통역사가 되고 싶었다. 근데 통역사란 직업은 자신의 의도가 담기면 안되는 직업이다. 대화의 중간에서 양쪽의 의도를 100% 전달해야한다. 이렇게 Messenger의 삶보단, 나의 철학과 의도를 담을 수 있는 Maker로서의 삶을 살고 싶었다.
멋쟁이사자처럼 동아리 활동 중 해커톤에 참여할 기회가 생겼다. 사실 나는 수능이나 각종 시험을 준비하면서도 밤을 새워 공부해 본 적이 없었다. 피곤하기만 하고 효율이 떨어진다고 생각했기 때문이다.
그런데 해커톤에서 기능을 구현하기 위해 필요한 것들을 찾고, 팀원들과 논의하며 개발을 하다 보니 어느새 새벽 5시가 되어 있었다. 그리고 마감 직전까지 매달려 기능을 완성하고, 우리가 만든 게임을 플랫폼에 업로드했을 때의 도파민이 너무 강렬했다.
그때의 짜릿한 성취감이 개발자가 되고 싶다는 목표를 가지게 한 결정적 계기였다. 그 감정을 다시 느끼고 싶어서 지금까지 개발자의 길을 달려오고 있다.
왜 정글에 들어왔는가?
무엇보다 만드는 것 자체가 너무 즐거웠다. 리액트나 플러터로 동작하는 프로그램을 개발하는 과정이 재미있었고, 점점 더 깊이 빠져들었다. 하지만 문제는 이중전공 수업 중에도 개발에 몰두하다 보니, 기초 없이 무작정 기능을 구현하려 했다는 점이었다.
결국 로직이 복잡한 기능을 만들 때마다 구현에 실패하거나, 시간이 예상보다 훨씬 오래 걸리는 한계를 경험하게 되었다.즉 깊이가 부족함을 너무나도 절실히 느꼈다. 개발자로서 탄탄한 기초를 다지고 싶었고, 이를 바탕으로 깊이 있는 학습을 할 수 있는 기회를 찾던 중 정글 8기를 알게 되어 지원하게 되었다.
5개월 동안 내가 어떤 것을 얻어가고 싶은가
기술 면접에서도 흔들리지 않는 CS 지식
이중전공으로 CS를 배웠지만, 깊이 있게 공부해 본 적은 없었다.
현업에서 10년, 20년씩 개발해온 분들이 질문하면 내 부족한 실력이 드러날 것이 분명했다.
그래서 정글에서 끝까지 파고들어, 어떤 질문에도 가볍게 답할 수 있는 수준까지 도달하고 싶다.
단순한 개념 암기가 아니라, CS 지식을 체화하여 실제 개발에 적용할 수 있는 실력을 갖추는 것이 목표다.
끝까지 파고들어, 어려운 문제를 해결하는 경험
개발을 하다 보면 정말 답이 안 보이는 순간이 온다. CS 문제든, 프로젝트 구현 중 만나는 난관이든,
해결책이 보이지 않는 상황에서 머리를 박아가며 끝까지 매달려 보고 싶다.
그 과정을 통해 끈질기게 문제를 해결하는 경험을 쌓고, 어떤 어려움이 닥쳐도 해결책을 찾아낼 수 있는 사람으로 성장하고 싶다.
어떤 자세로 임하고 싶은지
나의 구급상자와 진통제를 동료에게 아끼지 말자. 언젠가는 다시 돌아온다.😍
정글에서 살아남는 10가지 방법 중 하나이다.
물론 돌아오는 것을 바라고 하는 것은 절대 아니고, 나도 베풀면서 배우는 것이 많다고 생각한다.
0주차 미니 플젝을 하면서도 내가 담당한 기능은 아니었지만 도와주고,
같이 찾아보면서 많은 것을 배울 수 있었다.
18주간 내가 가진 구급상자와 진통제를 동료에게 아끼지 말자.
정글이 끝난 후 나의 모습은 어땠으면 좋겠는지
기본기를 갖춘 신입
신입 개발자로서 선배들이 나를 평가할 때,
"그래도 기본기가 탄탄하더라."
"작은 일이라도 믿고 맡길 만하더라."
라는 말을 들을 수 있는 개발자가 되고 싶다.
기본기가 탄탄하면, 새로운 기술을 배울 때도 빠르게 흡수할 수 있고, 주어진 업무를 안정적으로 수행할 수 있다. 그렇기 때문에 단순히 개발을 "할 줄 아는 수준"이 아니라, 기본을 확실히 다져 실무에서도 신뢰받는 신입 개발자가 되는 것을 목표로 하고 있다.
2. 미니 프로젝트 KPT 회고
Project : 일요일에 뭐 먹지?
Keep
- 3시간 단위 팀 회의
- 회의시간은 15분 이내로 빠르게 끝냈음
- 회의 간 각자 진행하는 것, 앞으로 진행할 것, 에러 발생시 에러 원인을 공유
- 회의 종료 직전 다음 진행 사항 리마인드 하며 종료
- 팀장으로서 팀원들이 각자 어느정도 개발을 진행했는지 파악을 빠르게 할 수 있었음
- 3시간은 조금 타이트 했다는 생각도...?
- Notion 기능별 진행사항 총괄 보드 활용
- Not Started, In progress, Done 3단계로 구분
- 노션의 총괄보드 활용, 각 기능별 담당자 배정하여 누가 어떤 기능 개발하는지 다같이 파악
- Naver Maps API 활용
- 처음 활용해보았지만, 개발가이드, 구글링 통해서 목적지 주소를 전달하고 위도/경도를 반환받는 기능을 API를 활용하여 쉽고 빠르게 구현
Problem
- GitHub Flow 전략 적용 실패
- GitHub 사용경험이 나 자신도 많지 않았고, 팀원들 역시 사용경험 없거나, 오래되었던 상황
- main은 배포용, Feat에 수정사항을 Push & PR 하는 과정에 이해도가 부족했고, 팀원들에게 매끄럽게 설명하지 못했음
https://velog.io/@gmlstjq123/Git-Flow-VS-Github-Flow
- 코드 이해도가 부족함에도 GPT를 활용
- 시간에 쫒겨 각 코드의 목적을 파악하지 못하고 GPT를 활용하여 디버깅을 바로 시도함
- 이해도 없이 GPT 사용으로 무한 스크롤 기능 수정시 메뉴 추천 토글 기능 오류 발생하는 등 마지막 디버깅(TEST)시 많은 시간 소요
- 동시 요청 처리 로직 구현 실패
- 동시에 식당 등록 요청시 세션이 끊기는 문제 발생
- Flask가 기본적으로 싱글 스레드이고, 동일한 DB에 동시에 접근하려고 하여 충돌이 발생함
- 해결책으로 Redis 활용한 RQ, 멀티 스레딩 등등 해결 방안 찾았지만 MVP 기능 개발에 집중하기로 함
- 반드시 추후 수정 해보자
- 그래도 팀장으로서 부족했던 Task 파악
- 인원이 3명이지만, 1명은 실제 개발이 아닌 서치를 다음 회의때까지 진행하는 등의 문제가 있었음
- 나도 내가 담당한 기능을 구현하고, 디버깅 하느라 바쁜데, 팀원들도 어떤 것을 해야하는 지 나에게 물어보며 진행을 하는 방식이었기 때문에, 처음 들어와서 정신 없음 + 구현했던 기능 안됨 + 팀원들 업무 분배 Tracking + 자료 작성 및 문서화 를 한꺼번에 하다보니까 몇가지를 놓쳤음
- 그래도 팀원분들 께서 내가 뭘 빠뜨리면 아 이거 왜 안된거냐 하실 수도 있는 건데 친절하게 이런 것은 언제하나요? 라고 여쭤봐주셔서 너무나 감사하게 프로젝트를 진행함.
Try(Trouble Shooting)
- Maxretries Exceed 에러
- 문제 상황 : 첫 식당 등록 이후 다른 식당 등록시 에러 발생
- 원인 : Driver가 요소 찾는 도중 Driver.close()/quit()을 호출
- 해결 방향 : Driver 인스턴스를 Parsing 시마다 생성하는 함수를 새로 만들어서 파싱할때마다 새로운 드라이버 인스턴스를 활용
- 중복 렌더링 문제
- 문제 상황 : 동일한 식당 카드가 2개씩 생성
- 원인 : 좋아요 기준으로 정렬, 같은 값을 가진 요소들이 너무 많아 안정성 떨어짐(unstable)
- 해결 방향 : 변하지 않는 값인 id를 정렬 기준에 달아서 같은 식당을 가져오지 않도록 해결
- 카드의 메뉴 추가 기능 미동작
- 문제 상황 : 식당 등록 후 메뉴 추천 버튼을 눌렀을 때 입력 필드가 등장하지 않음
- 원인 : 동적으로 HTML요소를 append, onClick 이벤트가 적용되지 않았음
- 해결 방안 : innerHTML로 요소에 직접 덮어 씌우는 방식으로 onClick 이벤트 핸들러가 적용 되도록 전달