20210523

Jin·2021년 5월 22일
0

Facts

  • 알고리즘 풀이
  • 손가는데로 무언가 읽기

Feelings

오늘의 알고리즘 문제 TDD 소감

https://github.com/gringrape/daily_coding_dojo/

이전에는 문제를 시작점부터 잘게 잘라서 끝까지 도달하는 방식으로 풀었다. 며칠전부터는 solution 함수에 바로 테스트를 걸어놓고 답에서 부터 거꾸로 조금씩 잘라가는 것을 시도하는 중이다. 이전보다 조금 더 LEAN 해진 느낌이 있다. 불필요한 것을 만들지 않는 다는 장점은 있다. 하지만, 뒤에서 부터 자른다는 사고의 전환이 조금 힘들어서 비교적 간단한 문제인데도 시간이 오래걸렸다.

테스트 케이스 작성도 문제가 있다. 귀찮아서 test 에 다 넣고, 케이스 바뀌는 건 빈줄하나 넣어주는데, 다시 보면 뭔소리인지 모른다는 게 함정. 케이스가 바뀌면 별도로 분류하고 설명을 쓰도록 하자. BDD 스타일로 하기가 사실 귀찮지만 ㅜ 훈련을 위해 하도록 하자.

쓰고 보니, 뭔가 평가가 추상적이다. 객관적으로 뭐가 잘못되었는지, 잘되었는지 지표가 있었으면 좋겠다.

향후 방침은 LV1 난이도 유지 + 지금 알고 있는 언어들로 다 풀어보기. 전혀 급할 거 없다. 그렇지만, 다른 언어로 풀어도 점수오르게 해줬으면 좋겠다. 의욕이 더 생길 수 있도록.

재미있는 부분 읽기

읽을 책이 많아서 선형적으로 읽으면 답이 없겠다 싶다. 현재의 자신을 가장 집중 시킬 수 있는 부분을 읽고 생각을 많이 하는게 훨씬 효율적일듯 하다. 놓치는 부분은 ... 인연이 아닌가 보지..

Findings

데이터베이스는 세부사항이다

클린 아키텍처 289p

애플리케이션 내부 데이터의 구조는 시스템 아키텍처에서 대단히 중요하다. 하지만 데이터베이스는 데이터 모델이 아니다. 데이터베이스는 일개 소프트웨어일 뿐이다. 데이터베이스는 데이터에 접근할 방법을 제공하는 유틸리티다.
...
뛰어난 아키텍트라면 저수준의 메커니즘이 시스템 아키텍처를 오염시키는 일을 용납하지 않는다.

업무를 하면서, 데이터 모델에 대해 어떤 모델이 데이터베이스 테이블과 대응하는것인가요? 라는 질문을 한적이 있다. 이때, 데이터 베이스와는 아무런 관련이 없다는 이야기를 강하게 들었는데, 이유를 알 것 같다. 관계형 데이터베이스가 테이블구조를 갖는 것은 아키텍처적인 의미가 하나도 없다. 관계형 데이터베이스가 왜 그렇게 생겨먹었는지를 이해하면 어플리케이션 구조와 무관함을 더 이해할 수 있을 것 같다.

이처럼 디스크 때문에 피해갈 수 없는 시간 지연이라는 짐을 완화하기 위해, 색인, 캐시, 쿼리 계획 최적화가 필요해졌다. 그리고 데이터를 표현하는 일종의 표준적인 방식도 필요했는데, ... 간단히 말해서 데이터 접근 및 관리 시스템이 필요했다.
...
데이터베이스 시스템은 내용 기반이다. 데이터 베이스 시스템은 (파일 시스템과는 달리) 내용을 기반으로 레코드를 자연스럽고 편리하게 찾는 방법을 제공한다.
...
하지만 안타깝게도 정형화되지 않은 문서를 저장하고 검색하는데는 대체로 부적합하다.

관계형 데이터베이스가 그렇게 생긴건 위와 같은 이유가 있다. 따라서 그 구조는 어플리케이션 아키텍처에 영향을 줄 아무런 이유가 없고, 저수준의 세부사항일 뿐이다. 단락의 마지막이 인상 깊다.

데이터는 중요하다. 데이터베이스는 세부사항일 뿐이다.

함수형 프로그래밍 - 관심사의 분리

fpinscala 89 페이지에서는 관심사의 분리와 그 대표적 예시에 대해 잘 알 수 있는 설명이 나온다.

함수형 프로그래밍의 주된 주제 중 하나는 관심사의 분리이다. 한 예로 계산의 서술을 그 계산의 실제 실행과 분리하는 것이 권장된다.

관심사의 분리는 이전 장들에서 여러 형태로 등장했다.

  • 일급함수는 일부 계산을 담고 있으나, 인수로 전달되어야만 실행된다.
  • Option 은 오류가 발생했다는 사실을 담고 있을 뿐, 오류를 통해 무엇을 수행할 것인가는 분리된 관심사이다.
  • Stream 을 사용하면, 순차열을 생성하는 계산을 구축하되, 계산은 실제로 필요할때까지 미룰 수 있다.

함수형 프로그래밍의 코드들이 왜 그렇게 생겨먹었는지를 이해할 수 있는 키워드 중 하나로 관심사의 분리 라는 것을 알게 된 것 같아서 뜻 깊다.

Affirmation

나는 넘을 수 없는 벽을 찾지 않는다. 충분히 넘을 수 있는 벽을 여러개 넘는걸 통해서 성장한다.

... 생각해보니 오늘 TIL 에는 주간에 배운 것들을 정리해보는 시간을 가지려 했는데, 못했다. 추가해야 겠다...

0개의 댓글