오늘은 너무 피곤해서 미뤄볼까 했는데, 어제껏도 살짝 미뤄둔 감이 있어서 (커밋을 안한거지만) 이거라도 성실히 하자는 차원에서 오늘도 정리해본다!


같은 것을 작성했지만 모두 다른 코드

사람마다 다른 코드를 작성하는 것은 당연한 일이긴 하겠지만, 오늘 피어세션을 하면서 새삼 느꼈다.

모두의 코드가 같은 부분이 거의 없어서 서로 와 이렇게도 짤 수 있구나 하고 각자 감탄하면서 코드를 봤던 것 같다.

개인적으로 신기했던 부분은 이 부분은 다 이렇게 짜지 않았을까? 라고 생각했던 부분도 다들 달랐다는 점이다.

데이터를 저장하고 출력하는 부분에 있어서도, 서로 관점이 달랐다는 것이 특이했다. 각자 검색, 저장의 용이성 등 중점으로 뒀던 부분이 달랐기 때문에 그랬던 것 같다.

버그없는 코드는 없는걸까!

제출했을 당시에는 대체로 정상 동작하고 있다고 생각했는데, 다음날 아침에 확인해보니 그렇지 않은 부분들이 꽤 있었다.

팀원들과 토론하면서 찾게 된 부분도 있고, 팀원들에게 설명하면서 찾은 부분들도 있다. 또 개인적으로 이렇게 저렇게 코드를 바꿔보다가 찾은 버그도 있었다.

새삼 디자인의 중요성을 느끼게 되기도 했고, API를 좀 더 확실히 알아둘 필요가 있다는 것을 느꼈다.

javascript reduce()

저번에도 한번 정리했던 함수인데, 나름 충분히 알았다고 생각했는데 오늘 또 몰랐던 사실을 알게되었다.

  • initialValue를 넣어주지 않으면, 사용자 설정 함수에 대한 검사가 이뤄지지 않을 수 있다. initialValue를 넣어주지 않았을 때는 누산기로 0번째 인덱스가 들어가고 1번째부터 사용자가 설정한 콜백함수가 동작하기 때문에, 0번째부터 끝까지 무언가를 검사하는 동작을 할 때는 주의해야한다.

예외처리의 중요성

항상 중요하다고 느끼는 부분이긴 하지만, 막상 하려고 하면 그에 대한 처리가 쉽지 않다. 그런데 오늘 프로그램을 다시 실행해보면서 구체적인 처리는 하지 않더라도, 이외 케이스에 대한 간단한 에러 메시지 출력이라도 구현하는 것이 좋겠다고 생각했다. 그렇지 않으면 사용자는 영문도 모른채 동작하지 않는 프로그램을 마주하게 될 것이다. (물론 잘못된 입력이었기 때문이지만!)

데이터 처리방식, mutableimmutable

  • mutable
    데이터를 참조하여 사용해 즉각적으로 변화시키는 방식. 데이터가 변경되는 즉시 반영된다는 장점이 있지만, 동시에 사용할 경우 충돌이 날 위험성이 있다는 단점이 있다.
  • immutable
    데이터를 복사하여 사용해 즉각적인 변화보다는 안정성을 추구하는 방식. 데이터를 복사하여 사용한 뒤 반영하기 때문에 충돌의 위험성은 상대적으로 적다는 장점이 있다. 하지만 데이터 반영과 관련된 문제가 있을 수 있다.

두 방식 모두 어떤 것이 옳다고 말하기는 어렵다고 생각한다. 동시다발적인 일이 잦은 경우에는 아무래도 immutable이 좀 더 안전하지 않을까, 생각한다. 데이터의 무결성이 유지될 가능성이 더 높기 때문이다. 그러나 그렇지 않다면 굳이 데이터를 복사해서 사용하고 다시 반영하는 것은 낭비일 수도 있을 것이란 생각이 들었다.

리눅스와 친숙해질 필요성

백엔드를 어렴풋이 꿈꾸긴했지만, 백엔드는 뭘 잘해야겠다는 생각은 딱히 해보지 않았다. 오늘 과제를 통해서 리눅스와 친해질 필요를 뼈저리게 느꼈다.

실무에서 내가 코드를 작성하는 곳은 내 컴퓨터인 로컬 컴퓨터겠지만, 그것을 반영해야 하는 곳은 원격 서버이다. 따라서 원격 서버에 대해서 이해하고, 동작을 실행할 줄 아는 능력이 필요하겠다는 것을 원격과 로컬을 왔다갔다 하며 개발해보니 절실하게 느껴졌다. (물론 윈도우 서버로 이뤄져있을 수도 있겠지만 대부분 리눅스라고 알고 있음..ㅎㅎ)

새삼 맥을 써서 리눅스 명령어에 익숙한 사람들이 부러웠다 ㅎㅎ.. 리눅스를 너무 오랫만에 다뤄봐서 Virtual Box 실행하는 법도 까먹었었다. 시스템 프로그래밍 때문에 리눅스는 안좋은 기억이 있는데, 극복해보자…

ssh(시큐어 셸)

  • 네트워크 상 다른 컴퓨터에 로그인하거나, 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램. 또는 프로토콜
  • 기존에 있던 Telnet 등을 대체하기 위해 설계되었고, 보안성이 더 강하다.

shell script(셸 스크립트)

  • 셸이나 command interpreter, 또는 한 운영체제를 위해 쓰인 스크립트이다.
  • 주로 파일을 이용한 여러가지 동작들을 하고, 프로그램을 실행, 문자열을 출력하는 등의 일에 사용된다.
  • 다른 프로그래밍 언어보다 훨씬 빠른 경우가 많다. 다른 언어에 비해 셸은 컴파일 단계가 없기 때문이다.

처음이라 어려웠지만 동작하는 부분이 신기한 것이 많았다. 공백 문제 등에 대해서 조금 까다롭긴 했지만 스크립트를 통해 반복적인 일을 자동적으로 만들 수 있었다는 것이 매력적이었다.

TypeScript

  • 마이크로소프트에서 개발한 자바스크립트의 슈퍼셋 오픈소스 프로그래밍 언어. 자바스크립트 엔진을 사용하면서 큰 어플리케이션을 개발할 수 있게 설계된 언어이다.
  • 자바스크립트의 슈퍼셋이기 때문에 자바스크립트로 작성한 것이 타입스크립트로도 동작한다.
  • 타입스크립트에서 원하는 타입을 정의하고 컴파일하면, 자바스크립트로 변경되어 실행할 수 있다.
  • 자바스크립트보다 엄격한 문법을 지원한다.

몰랐던 점인데 델파이의 창시자인 분이 개발에 참여했다고 한다.. 델파이라니.. 괜히 정감가는 언어.. 델파이 잘 지내고 있니..?


오늘은 뭔가 배운 지식이라기보단 경험하면서 느낀점에 대한 일기 성향이 강하다.
그만큼 어제 오늘의 미션은 생각을 많이 하게 해준 미션이었던 것 같다 ;P 내일의 미션은 또 무엇일지 두렵기도 하지만 기대가 되기도 하고!
직접적으로 알려주시는 지식은 많지 않지만 미션을 위해 학습 (을 빙자한 삽질) 하면서 생각하는 법도, 혼자 공부하는 법 엄청나게 많이 배워가고 있다. 앞으로 남은 시간도 제발 평화롭게….흘러가길…