NodeJS에서 객체지향 찾기?

octofox·2022년 3월 29일
1

그 놈의 객체지향, 함수지향 지향지향...
나는 보안학과 신입 때부터 그렇게 두리뭉실한 개발방법론에 휩싸여 이리저리 헤맸다.

nodejs express를 처음 사용하면서 미들웨어로 구조화되는 이것은 무엇인가?? 하고 헷갈려했다.
내가 배운 개발론에는 나오지 않는 신기한 구조였다.
미들웨어는 절차지향에 가깝다는 것을 알게되었지만은... 흠...
나는 정말 코딩을 하면서 객체지향을 느껴볼 길이 없었다.

nodejs가 붕어빵이랑 무슨 상관이냐고 교수님들아!!
차라리 처음부터 자바를 공부했으면 단번에 이해했을 것이다. (너가? 과연?)

그렇게 nodejs로 개발 독학을 하던중 한 회사에 입사했는데 거기서는 php를 사용하게 되었다.
입사 첫날 코드를 봤는데 이것은... 절차... 아니 if else로 만들어진 지옥이었다.(나는 지옥을 믿지 않는다. 하지만 존재한다면 그것은 중첩 if else가 아닐까...)

tail -f 로 찍어본 에러 로그는 내가 어딘가 클릭 한번하면 10줄식 쌓이고 있었다.
나는 신입이라 "오호라~ 이런게 찐 현업인가 보다 데헷" 하고 생각했다.

2달쯤 일하니 머리에서 열이 나기 시작했다.
코드 하나 하나 정성들여 읽어보고 기억하고 주석을 남기고 피를 말리며 이해해나가고 있었다.

nodejs가 그리워졌지만... 사장님이 모르는 언어를 사용할 수는 없는 노릇이었다.
문득 객체지향을 생각해냈다. 이대로는 회사도 터지고 내 머리도 터지겠다 싶어서 사장님을 nodejs로 설득했지만 소용 없었다.

그리고 무섭기도 했다. 내가 그렇다고 nodejs를 잘하는 것은 아니었기 때문이다.
Apachi, nginx 같은 서버를 다룰줄 아는 것도 아니었다. 그래서 사장님과의 타협점을 생각해보았다. php로 객체지향을 해보기로 설득하였다. 라라벨도 안된다고 하시던... 한강의 온도가 알고 싶어졌다.

나는 사실 php를 정말 싫어한다. 웹에서는 이게 그렇게 나쁜 선택지는 아니지만 php가 다른 분야, 예를들어 인공지능이나 어플리케이션 개발을 할 수는 없었기 때문에 미래가 없다고 생각하며 계속해서 시간이 아깝게 느껴졌다.

그렇게 php 서적중 가장 잘나가는 서적을 구입한 후, 그 책을 따라서 나만의 프레임워크를 구축했다.
드디어 유지보수와 확장 가능한 구조를 구축했다.
그렇게 MVC와 객체지향의 맛을 봐버렸다.

아마 nodejs를 사용했다면 객체지향을 맛보지 못했을 것이다.
웹사이트는 orm과 controller, model or entity의 method, templates로 구분되어 견고하게 동작했다. 어딘가 클릭해도 아무 에러도 나지 않을 뿐더러 나는 내가 나의 새로운 코드를 어디에 위치 시켜야 하는지 명확히 알고있었다. 그리고 다음번 프로젝트에서도 같은 구조의 코드로 나의 생산성을 너무나 좋아졌다.

php 따위 외우지 않는다.
tail -f log와 stackoverflow 그리고 구글링으로 완성된다. 역시 코딩은 재사용성이 좋아야한다. 재사용 할 수 있도록 레거시를 잘 남기는 것도 실력이다!

객체지향을 주제로 글을 작성해보려 했지만...
그렇게 typescript의 개념도 나의 머리에 들어왔다.
php는 php 자체로 쓰레ㄱ... 아니 나에게 많은 깨달음을 주었다.
어느 언어는 class를 작성하는 방법은 크게 다르지 않았다.

이렇게 여러가지 프레임워크 나는 react, flutter, php, nodejs express, koa, mongodb 정도를 만져보았는데 큰틀에서의 공통적인 이해를 했다. ios 개발도 한번해봐야지.

하고 싶은 정말 중요한 말이 하나 있다.
진짜로 sql 쿼리 직접 작성하지 마라.(orm라이브러리를 쓰던지, 직접 간단하게 구현하던지).
그리고 DB에서 데이터는 객체로 받아라.
방법은 알아서 찾고, sql join? 코드 더럽히지 말고 join 그냥 쓰지마라.
join문 안쓰고도 똑같이 구현 가능하다. 뭐 성능이 중요하다면 어쩔 수 없지만 텍스트를 주로 다루는 웹페이지에서 그마만큼의 성능향상이 얼마나 체감될까?
나는 성능보다 아름다운 코드가 우선이라고 생각한다. 코드를 아름답게 짜야 성능 향상도 수월하다.

그럼 이제 나의 한풀이를 마친다.

그래서 제목에 대한 답을 해보자면, nodejs에서 express 자체는 객체지향과 거리가 멀다. 어느 하나를 지향한다기 보다는 모듈러 형식이다.
그리고 객체라는 것을 현실에 실존하는 예제들로만 설명해서 객체라는 것이 현실에 있는 제품 같은 것을 코드로 옮긴다 정도로 이해하는 사람들이 많은데(맞는 말이지만?)

M,V,C 하나 하나가 객체이다. 현실에서는 존재하지 않지만 말이다.

M은 DB의 데이터를 효과적으로 가져오고, 데이터 자체에 기능을 더하는 책임이 있다.
C는 url을 따라 M을 이용해서 어떠한 V를 뱉을지 결정하는 책임이 있다.
V는 M을 표현한다. 이렇게 객체지향이다.

profile
개발자라고 우기는 노답 소년

0개의 댓글