-
알고리즘, 테스트코드가 필요한 이유생각 정리 2022. 12. 15. 20:04
< (주의) 이 글은 알고리즘과 테스트 코드를 공부하며 든 저의 개인적인 생각과 의견들을 서술한 글입니다. />
지금까지 여정.
어느덧 개발자가 되겠다고 결심하고 공부를 시작한지 약 9개월정도가 흘렀다. 그동안 많은 성장이 있었고, 이제 어느정도 프로그램이 동작하게끔 만드는 정도의 실력은 갖추었다고 생각이 든다. 하지만 내가 작성했던 코드들을 보다보면 정말 th레기 그 자체라는 생각이 들 때가 많았다. (내가 왜그랬지..좌절의 연속.)
내가 썼던 코드를 보고있는 나. 그중 가장 th레기 코드가 많은 프로젝트는 짧은 기간안에 어떻게든 완성을 시켜야 했다. 그래서 "어떻게든 굴러가게 만들자" 라는 마음가짐으로 코드를 썻고, 결과적으로 가독성은 물론이고 효율성도 저세상 가버린 코드들로 가득차게 되었다. 천천히 고민할 여유가 없었던 탓도 있지만, 사실 시간이 좀 더 길게 주어졌다고 해도, 내가 좋은 코드를 작성할 실력이 없었기에 결과는 아마 비슷했을 거라 생각한다. 그러다보니 요즘에는 "어떻게 하면 좋은 코드를 쓸까?", "어떻게하면 더 효율적으로 코드를 쓸 수 있을까?", "어떤 코드가 좋은 코드일까?" 등등에 대해 고민하고 공부를 하게 되는 것 같다.
성장의 3가지 단계
Kent Beck(켄트 백) 이라는 한 유명한 개발자는 프로그램을 만드는데 3가지 단계가 있다고 말한다.
출처 fastCampas 유튜브 1. make it work (동작)
2. make it right (올바르게,정확하게)
3. make it fast (빠르게)
첫번째 단계는 프로그램이 동작하게 만드는 것이고 두번째는 올바르게 동작하게 만드는것, 마지막으로 빠르고 효율적으로 동작하게 만드는 단계를 거친다는 것이다. 이것은 단순히 하나의 프로그램을 만드는 과정을 얘기한 것이지만, 나는 마치 내가 성장하고 있는 과정과 비슷하다는 생각이 들었다. 지금까지 프로그램이 어떻게 동작하게 하는지에 대해 배우고, 프로그램을 동작하게끔 만드는 수준이였다면 이제는 프로그램이 정확하게 ,더 쾌적하게 잘 동작하도록 만들 수 있어야겠다고 생각이 들었다. (잘해지고싶다.)
그래서 다음 스텝인 make it right, make it fast를 잘 하기 위해 무엇을 공부하고, 어떤 스킬을 키워나가야 할지에 대해 고민하게 됐고, 그것이 알고리즘 공부와 테스트코드 작성을 하게된 이유이다.
1. 테스트 코드
프로그램이 올바르고 정확하게 정확하게 동작하도록 하기 위해 개발자가 할수 있는 것 중에, 가장 좋은 것이 테스트코드 작성이 아닐까 싶다. 테스트 코드는 프로그램이 올바르게 동작하는지를 명확히 알 수 있게 해준다. 정확하게 동작하는 실질적 데이터를 제공함으로써 개발을 더욱 안정적으로 할 수 있게 해준다. 또한 어떠한 코드를 추가하거나 수정했을 때, 그로인해 기존의 코드들이 이전과 다르게 동작한다면 그러한 변경점을 빠르게 파악할 수 있다는 장점도 있다. 나는 Jest를 이용해 mock데이터를 만들고 여러가지 테스트코드를 짜면서 테스트하고 공부하고 있다. 또 E2E 통합테스트로 Cypress 라이브러리를 이용해서 브라우저에서 버튼이 올바르게 동작하는지, 타이틀 텍스트가 잘 나오는지 등등 ui적인 측면을 테스트 하는 것도 시도하고 연습중에 있다.(테스트가 통과할때 매우 짜릿하다.)
하지만 프론트엔드 특성상 테스트로 커버해야하는 데이터나 요인이 외부 서버에 있다던지, 혹은 유저가 접속하는 다양한 브라우저 환경이 다 다르다던지 하는 변수가 많다보니, 백엔드에 비해서 테스트하기에 용이하지 못한 부분이 있는것 같고 나도 그렇게 느꼈다. 그래서 테스트코드의 효용성과 실효성에 대해 많은 개발자분들의 의견이 갈리는 것 같다. (많은 테스트코드 작성이 오히려 변경이 잦은 프론트엔드 환경에서는 짐이되거나 안좋게 작용할 때도 있다고 한다.) 역시 테스트코드 작성이 익숙치 않다보니 쉽지는 않다.
하지만 그럼에도 불구하고 테스트코드를 내가 연습하고 작성하는 이유는, "우선 내가 경험을 해보고 말하자"라고 생각하기 때문이다. 또 실질적으로 점점 많은 회사에서 테스트코드 작성이 신입개발자에게 필요한 역량 중 하나로 여겨지는 것 같다.(중요) 돈을 받고 일하는 프로 개발자라면 프로그램이 단순히 동작하는 것을 넘어서, 올바르고 정확하게 동작한다는 지표를 제시해줄 필요성도 있을 것 같다. 그리고 제품이 출시되려면 테스트는 어떻게든 이루어져야 하는데 개발자가 그런 부분에 코드로 기여할 수 있으면 어찌됐든 전체적인 프로세스에 기여하는 셈이니 좋다고 생각한다. 언젠가 나도 사람들 앞에서 테스트코드에 대해서, TDD에 대해서 나의 경험을 얘기 할 수 있는 그날을 꿈꾸며 더 열심히 공부 하도록 하자.
2. 알고리즘 공부(효율적인 코드)
좋은 코드가 무엇일까? 좋은 코드의 조건에는 여러 의견이 있겠지만, 내가 생각하는 조건은 첫번째로 가독성, 두번째는 효율성 이라고 생각한다. 알고리즘 공부는 이 두가지 측면을 모두 충족할 수 있는 방법이라는 생각이 들었다. 직면한 문제에 대해 더 빠른 알고리즘을 선택하고, 더 적합한 자료구조를 선택하여 문제를 해결하는 능력을 기를 수 있는 가장 빠른 길은 알고리즘 공부라고 판단했다. 이는 곧 세번째 단계인 make it fast를 만드는 기초 될 것이다. 물론 프로그램을 빠르고 효율적으로 만들기 위해서는 랜더링 최적화나, 디바운싱을 걸어서 api호출을 줄이고 최적화 하는 등등 여러가지 실전적 스킬들이 필요하고, 오히려 더 중요할 수도 있다. 하지만 알고리즘 공부를 해보니 어차피 그러한 전반적인 모든 것들이 이 알고리즘 & 자료구조 등의 기초 위에서 실행 된다는 것을 알 수 있었다. 그런 생각이 드니까, 하기싫던 알고리즘 공부가 조금은 재밌어 졌다. 그래서 요즘 udemy에서 알고리즘 강의도 사서 매일 듣고 코딩테스트 문제를 풀고있는데 매우 어렵다...그래도 점점 나아지는 것에 의의를 두자
맺으며..
나는 이전까지 많은 실수들을 하고 배우며 지금까지 달려왔다. 하지만 나는 앞으로도 실수를 할 것이고 그것들을 통해서 배울 것이다.
내가 지금 이렇게 깨닫고 성장할 수 있는 것은 어쩌면 지금까지 내가 작성했던 바보같고 무모한 코드들 덕분이 아닐까?
그러니 깨지고 넘어지더라고 겁먹지말고 저지르자. 무모하게 더 과감하게 (나같은 초짜는 그래야 한다) 아무것도 안하면 아무일도 일어나지 않는다.
그동안 알고리즘과 테스트코드에 대해 막연한 생각들로 가득차 있었는데, 막상 공부를 하고 연습해보니 어떤 부분이 도움이되고 왜 이것들을 공부해야 하는지 알 수 있었다. 역시 시작이 가장 어렵다. 생각은 적게하고 just do it
'생각 정리' 카테고리의 다른 글
컴포넌트 세분화(프로젝트 구조)와 commit의 중요성 (0) 2022.10.21 메인 프로젝트를 끝내다 - Quick-Book 😇 !!! (회고) (0) 2022.10.13 [코드스테이츠] section2 회고 (0) 2022.06.22