WIL: 알고리즘 풀이는 퍼즐 맞추기일까? feat. node.js, Express and Middleware
이번 주에 하게 된 질문은 제목과 같다.
"알고리즘 풀이는 퍼즐 맞추기일까?"
일단 퍼즐을 맞추기 같은 방식은 효과가 있었다. 로직의 일부만 코딩하고 콘솔로 확인한 후, 그 다음 일부를 코딩하는 걸 반복해서 로직들을 연결하는 방식 말이다.
처음부터 전체 코드를 설계하고 그 설계를 구현할 수는 없는 것 같다. 일단 '되는 것'들을 눈으로 확인한 후 그 다음 단계를 생각해도 누가 욕하지 않는다. 여기서 '되는 것' 이란 하다못해 배열의 오름차순 정렬이어도 좋다. 그게 되는 걸 눈으로 확인했다면 그 로직을 기반으로 다음 단계를 구상할 수 있다. 한단계 한단계 나아가는 것이다.
여기서 '배열의 오름차순 정렬' 같은 사소한 작업이라도 그게 로직의 일부일 수도 있다면 하는 게 안 하는 것보다 낫다. 왜냐하면 오름차순으로 정렬된 배열을 내가 눈으로 볼 수 있기 때문이다. 그게 답으로 나아가는 방향인지 아닌지 모를 수도 있다. 하지만 맞는 것 같다면 해보고 콘솔에 찍어보는 게 낫다. 정렬된 배열을 눈으로 보고 나면 그것이 다음 로직의 디딤돌인지 아닌지를 알 수 있을 것이다.
이런 방식의 단계적 접근은 내가 머릿속으로 시뮬레이션해야 하는 논리적 흐름의 길이를 줄여 준다.
10 단계의 흐름을 거쳐야 답이 나오는 상황이라면 머릿속으로 10단계를 거치는 게 아니라 코드로 1단계씩 맞춰 '보여' 주는 게 낫다.
그렇게, 퍼즐을 맞춰 보자.
한편으로는 반대되는 생각도 한다.
모니터의 코드와 멀리 떨어져서 샤워라도 하면서 구상하는 건 어떨까? 그림 그리듯이.
적어도 2번은 그렇게 코드를 구상했다. 오늘 4.20. 목요일 오전에는 고민하던 코드가 아침잠에서 깨어 일어나는 과정에 머릿속에 정리되었다. 전날 팀원분과 페어 프로그래밍을 하면서 많이 배웠던 코드인데 당시에는 두뇌가 작동을 멈춰 버려서 이해가 안 되었었다. 너무 늦은 시간에까지 깨어 있다 보니 뇌가 반역을 일으킨 것 같다. 해서 이해되지 않은 채로 잠들었는데 아침에 로직 정리를 시작했다.
샤워하고 출근준비를 하는 도중에 코드를 구상했는데 구현될 거라는 느낌이 있었다.
출근해서 vscode 웹버젼으로 코드를 짜보았는데 아이디어 자체는 옳다는 결론이 나왔다. 프로그래머스도 정답처리를 해주었다.
이럴 때면, 알고리즘 전체에 대한 그림 없이 접근하는 건 삽질이라는 생각이 든다. 로직 전체를 그려보고, 자바스크립트라는 언어로 그 로직을 표현할 수 있는지를 알아봐야 하지 않을까?
모든 것은 흑백이 아니라 회색지대에 있다고 들었다. 알고리즘 풀이는 어떤 종류의 회색 지대에 있을까?

퍼즐 맞추기와 그림 그리기 사이에 있을까?
나무 보기와 숲 보기 사이에 있을까?
feat1. node.js
- 크롬에 탑재된 v8 자바스크립트 엔진으로 빌드 된 서버 구축용 Javascript 런타임(실행 환경)
- 이벤트 기반으로 비동기식으로 작업을 처리한다.
출처: 이상한 개발자 블로그 https://node-js.tistory.com/27
feat2. express
- node.js위에서 동작하는 웹 프레임워크
- 웹 프레임워크: 수많은 일들 중에는 반복적으로 발생하는 일들이 있는데, 이것들을 다 수동으로 처리하긴 힘들고 지치기에 정성을 들여서 자동화한다. 반복적으로, 어디에서나 등장하는 일들을 처리할 때 더 적은 코드, 지식들로 많은 일들을 안전하게 처리할 수 있도록 도와주는 게 프레임워크
- node.js 개발 시 개발을 빠르고 손쉽게 할수록 도와주는 역할을 한다. 이것은, 미들웨어 구조 때문에 가능한 것이다. 자바스크립트 코드로 작성된 다양한 기능의 미들웨어는 개발자가 필요한 것만 선택하여 express와 결합해 사용할 수 있다.
출처: Jungwon Lee velog https://velog.io/@wjddnjswjd12/node.js-express-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4%EB%9E%80
feat3. middelware
- Express는 노드(Node.js) 기반의 웹 프레임워크로, 요청(request)과 응답(response)을 다루는 데 있어서 미들웨어(middleware)를 사용한다.
- 미들웨어는 Express 애플리케이션에서 HTTP 요청과 응답 사이에 실행되는 함수이다.
- 미들웨어는 요청과 응답에 대한 객체(request, response)와 next 함수를 인자로 받는다.
- next 함수는 다음 미들웨어를 실행하기 위해 호출되어야 합니다.
출처: chat gpt (prompt: express middelware에 대해 설명해 줘)
feat4. RESTful
- RESTful이란 REST를 기반으로 한 웹 서비스의 아키텍처를 의미한다.
- REST(Representational State Transfer)는 로이 필딩(Roy Fielding)이 자신의 2000년 박사 학위 논문에 정의한 네트워크 소프트웨어 아키텍처다. 쉽게 말하면 '네트워크에서 통신을 구성할 때 이런 구조로 설계하라는 지침' 정도로 볼 수 있다. 본디 네트워크 통신을 위해 제시하였으나, 현실적으로 온라인 '네트워크'의 지분 중 태반을 차지하는게 월드 와이드 웹이기 때문에 '웹' 기반의 전송을 위해 쓰이는 경우가 대부분이다. 태생 자체가 데이터 송수신에 최적화 되어 있다보니 이를 위한 웹 API 쪽에서 굉장히 많이 쓰인다. 이를 'REST API'라고 부르는데, 이제는 그냥 '웹 API'와 동일하다고 볼 수 있을 정도로 보편화되었다. 어디선가 HTTP기반의 웹 API를 구현한다면 십중팔구는 REST를 준수하는 RESTful API라고 보면 된다.
출처: 나무위키, chat gpt
Smile ^ ^