우아한 테크코스 프리코스 1주차 회고

사요·2024년 2월 1일

우아한 테크코스

목록 보기
3/3

우아한 테크코스 시작

우선, 우아한 테크코스를 시작한 후로 프로그래밍 학습에 있어
새로운 세상이 열린 것 같은 느낌이었습니다.
프로그래밍 공부할 때 항상 외로운 느낌을 받았는데, 같은 분야를 함께 열심히 나아가는 동료들을 보니
내적 동기가 샘솟는 느낌이었습니다.

4주동안 미션을 수행하면서 후회없이 최선을 다하자는 마음가짐을 가지고,
우아한 테크코스가 저의 프로그래밍 역사를 다시쓰는 전환점이 되었으면 좋겠다고 생각했습니다.

1주차의 목표

우선 1주차에는 최소한 기본기를 갖춘 코드를 작성하자 라는 목표를 세웠습니다.
적어도 다른사람이 제 코드를 보았을 때 이상하다고 생각이 드는 부분이 없었으면 좋겠다고 생각했습니다.

제가 생각한 기본기는 다음과 같았습니다.

  1. 커밋 컨벤션, JavaScript 코드 컨벤션, README.md 작성 등의 기본을 잘 지키기
  2. 기능 단위로 커밋하기
  3. 내가 내 스스로 왜 그렇게 했는지 설명할 수 있는 코드를 작성하기
  4. 자바스크립트 언어의 특성을 이해하고 이에 따른 클린코드 작성을 위해 노력하기

어떻게 보면 당연한 것들이지만, 저의 여태까지 프로그래밍 습관을 되돌아 볼때
제대로 지켜지지 않고 있다고 생각했습니다. 그래서 우아한 테크코스에 제출하는 과제들을 통해서
좋은 습관을 들이고 기본기를 탄탄히 잡기 위해서 노력했습니다.

1. 기본 지키기

먼저 일관성 있는 프로젝트 관리를 위해서 Angular JS 의 커밋 컨벤션, Airbnb JavaScript Style Guide
에 대해 알아보았습니다.

우선 커밋 컨벤션의 경우에는 기존에도 feat: refactor: 처럼 말머리를 붙여서 커밋하는 습관이 있기는 했지만,

실제로 커밋의 목적과 해당 말머리가 일치하지 않는 경우가 많았던 것 같습니다.

같이 협업할 때에는 서로의 작업을 이해하고 효율적으로 대처하기 위해서 이러한 규칙을 꼼꼼하게 지키는 것이 중요하다고 생각했고 각 커밋의 목적에 맞는 컨벤션을 준수하기 위해서 노력했습니다.

그 다음 프로그래밍 요구사항에 JavaScript 코드 컨벤션을 지켜서 프로그래밍 해야한다는 조건이 있었습니다.

우아한테크코스의 자바스크립트 스타일 가이드는 Airbnb 자바스크립트 스타일 가이드를 기준으로 한다고 했고,
PDF 자료를 통해 chap 10 까지 정독하였습니다.

처음에는 스타일 가이드가 하는 역할은 여러 취향을 가지고 있는 프로그래머들 속에서
코드의 스타일을 일관성 있게 유지해주는 것이라고 생각했습니다.
단순히 사소한 코드에 대해 의견이 분분해지는 것을 막기 위해서
하나의 지침서를 주는 것입니다. 그래서 과제 구현에 앞서 이러한 일련의 규칙들을 하나하나 직접 읽어볼 필요가 있을까 고민이 들었습니다. 그러나 가이드를 빠르게 스키밍하고 나니, 단순히 취향을 지정해주는 스타일 가이드 라기 보다는
자바스크립트라는 언어를 보다 더 합리적으로 사용하기 위한 접근 방식에 가깝다고 느꼈습니다.
따라서 한번 즈음 공부해보아도 좋겠다는 생각이 들었고 결론부터 말하자면 읽기를 잘했다는 생각이 들었습니다. 특히 bad 관행과 good 예시들을 통해 합리적인 자바스크립트 사용을 방해하는 나쁜 습관들을 돌아볼 수 있는 계기가 되었습니다.

정말 신기하게도 모던 자바스크립트 딥 다이브 책에서 공부했던 여러 개념들이 연관되어
규칙의 이유를 이해하는데 도움을 받을 수 있었습니다.

예를 들어 인라인 콜백을 전달 할때에는 화살표 함수를 사용할 것을 권장합니다.
화살표 함수는 일반 함수와 다르게 “함수가 어떻게 호출되었는지” 가
아닌 “함수가 어디에서 정의되었는지” 를 통해 this 바인딩이 결정됩니다. 즉, 함수 자체의 this 바인딩을 갖지 않고
스코프 체인을 통해 상위 스코프의 this를 참조하는 것 입니다. 이를 통해서 this 가 의도되지 않은 것을 가리키는 동작을 최대한 지양할 수 있다는 장점이 있었습니다.
즉, 이런식으로 모든 규칙들이 단순히 취향이 아닌, 합리적인 이유로 제정되고 있었습니다.

그 이외에도 객체(배열)를 복사할 때에는 스프레드 연산자를 사용하기, 배열 메서드 콜백에는 리턴 구문 사용하기,

비구조화 문법을 사용해 가독성 높히기, 함수 선언식 대신 함수 표현식 사용하기, 화살표 함수 사용하기,
생성자 함수보다는 클래스 사용하기 등 자바스크립트 언어를 사용할 때 기본적으로 지키면 좋을 규칙들에 대해 배울 수 있어 유익한 시간이었습니다.

그러나 모든 규칙들을 제대로 숙지하고 있기는 어렵다고 생각했기 때문에
코드의 스타일을 준수하고 형식을 포맷팅 하는데에는 ESlint 와 Prettier 의 도움을 받았습니다.

2. 기능 단위로 커밋하기

어떤 프로그램을 만들기 전에 충분히 설계하고 구현한 적이 있었나? 묻는다면 거의 없던 것 같습니다.
그럴 시간에 일단 생각나는 대로 구현하고 피드백 하자 식이었습니다.

그래서 현재 시점에 무엇을 해야하는지 방황하고, 커밋 단위도 자주 뭉개지는 일이 있던 것 같습니다.

그러나 프로그램을 작성하기 전에 요구사항을 충분히 파악해서
기능 구현 목록을 작성하고 작업을 하다보니, 분명 작업 단위가 명확해지는 것을 느꼈습니다.

구현 기능 목록을 어떻게 작성하면 좋을까? 에 대한 고민도 많이 했었는데,
저는 프로그래머의 관점에서 ’기능’ 이 곧 하나의 작업 단위라고 생각했습니다.
그래서 하나의 커밋에 담을 수 있도록 너무 작지도 크지도 않은 적절한 수준의
작업양을 담고, 최대한 그 기능들은 의존성없이 다른 기능들에 영향을 주지 않도록
기능 구현 목록을 나누었습니다.

3. 내가 내 스스로 왜 그렇게 했는지 설명할 수 있는 코드를 작성하기

이번 과제를 하면서 가장 신경썼던 부분, 그리고 동시에 가장 어려웠던 부분이기도 합니다.
구현하기 전에 충분히 생각하고 가장 적절한 방식으로 구현하는 것입니다.

사실 이를 위해서 처음에는 프로그래밍의 정말 근본적인 것들부터 접근하려는 시도를 했었습니다.

객체지향을 공부하기 위해서 프로토타입과 클래스에 대해 깊게 공부하고,
현재 구현해야하는 프로그램에 대한 접근법을 얻기 위해서
자바스크립트의 아키텍쳐 패턴, 디자인 패턴에 대해 알아보는 식 입니다.

아키텍쳐 패턴은 전체적인 시스템 구조, 큰틀을 설계하기 위한 템플릿이고,
디자인 패턴은 SW개발에서 반복적으로 발생하는 문제에 대한 일종의 솔루션이었습니다.

조금 공부해보니 일반적으로 아키텍쳐 패턴에는 MV*가 유명했고,
디자인 패턴으로는 싱글톤, 파사드, 책임 사슬 등 여러가지가 존재했습니다.

그러나 짧은 예제와 설명만으로는 가볍게 이해하는 것조차 조금 힘들었습니다.

좋은 아키텍처를 가진 프로그램은 장기적으로 유지 보수와 기능의 추가가 상대적으로 매우 용이하다는데
그렇다면 아키텍쳐/디자인 패턴을 꼭 사용하는게 좋은걸까요?

저는 “패턴은 목적지가 아니다. 디자인 패턴은 설계의 목표가 돼서는 안된다. 패턴은 단지 목표로 하는 설계에 이를 수 있는 방향을 제시하는 나침반에 불과하다.” 라는 말을 인용하고 싶습니다.

더 간단한 코드로도 해결할 수 있음에도 불구하고 무리하게 패턴을 사용하는 것은
오히려 구조를 더 복잡하게 할 것이라고 생각했습니다. ( 오버 엔지니어링 )

단순 학습 목적으로 디자인 패턴을 사용해보는 것이라고 해도,
그 필요성에 공감하지 못한다면 해당 디자인 패턴의 본질을 제대로 파악하기 힘들 것이라고 생각했습니다.

그래서 우선, 내 방식대로 코드를 작성해보고 불편한 점이 생기면 그 때 가서 디자인 패턴 도입을 고려해보기로 결정했습니다. 형식적인게 아닌, 필요에 의해 그 방법을 도입하게 되었을 때 그 솔루션의 장점을 진정으로 느낄 수 있다고 생각했습니다.

4. 자바스크립트 언어의 특성을 이해하고

이에 따른 클린코드 작성을 위해 노력하기

이번 과제에서는 자바스크립트라는 언어를 최대한 잘 활용해보고자 하는 생각이 있었습니다.
제가 여태껏 작성해왔던 코드들은 뭐랄까 다른 언어를 사용하더라도 충분히
비슷한 문법을 써서 대체될 수 있는 매우 일반적인 코드였다고 할까요?

정작 자바스크립트라서 가능한 경험들을 해본 기억이 별로 없던 것 같습니다.

이번에 자바스크립트 클린코드를 추가로 덧붙여 공부하면서
여러 자바스크립트 스타일 가이드가 공통으로 함수형 프로그래밍 을 강조하고 있다는 사실을 깨달았습니다.

자바 하면 객체 지향 프로그래밍이 떠오르듯,
자바스크립트 하면 떠오르는 유명한 패러다임이 함수형 프로그래밍이었습니다.

함수형 프로그래밍은 선언형 프로그래밍의 일종으로, 순수함수를 통해 사이드 이펙트를 최소화해서
예측하기 쉽고, 오류가 적고, 가독성이 높은 코드를 작성할 수 있게 해주는 프로그래밍 패러다임입니다.

그리고 저는 여태까지 자바스크립트를 사용하지만,
명령형이고 절차적인 프로그래밍 기법을 사용해왔다는 것도 깨달았습니다.

아직 개념을 알게 된지 얼마 안되어 미숙하지만, 함수형 프로그래밍 이번 과제를 할 때에도 최대한
함수형 프로그래밍을 지향하는 방식으로 코드를 작성하기 위해 노력했습니다.

마무리

너무 이론적, 본질적인 것에 집중하다 보니 정작 과제에는 하루~이틀 정도 밖에 시간을 투자하지 못한 것 같아 조금 아쉬운 마음입니다. 그리고 만족스러운 코드를 작성하는 것은 정말 어렵습니다.
우선 어떻게 코드를 작성해야 하지? 가독성, 효율성 등 여러기준이 겹쳐 고민이 드는 순간마다 저는 항상 ‘가독성’ 을 최우선으로 하고 코드를 작성했습니다. 남들이 읽기 좋은 코드가 좋은 코드라는 생각이 들었기 때문입니다.
이렇게 오랫동안 더 나은 코드를 향해 깊게 고민했던 경험은 처음인데, 덕분에 많이 배워가는 것 같습니다.

짧지만 길었던 일주일의 시간동안 자바스크립트에 대해 많은 것을 알게 되고
기본기를 갖춘 더 나은 개발자로 성장하는 한 걸음을 뗀 것 같아 기쁩니다.
앞으로의 남은 날들도 너무 기대됩니다! 😃😃

profile
하루하루 나아가는 새싹 개발자 🌱

0개의 댓글