• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

nodejs mvc 패턴

20.11.06 15:04 작성 조회수 654

0

안녕하세요. 제로초님 다름이 아니라 nodejs폴더 구조를 보면 mvc 폴더 구조가 아닌거같아서요.

routes는 그냥 말 그데로 routes인데 그 routes가 컨트롤러 역할을 하는거같은데 다른 프로젝트 폴더 구조를 보면

query는 model폴덜에 따로 빼서 하고

routes js 코드는 routes/controller 폴더 만들어서 거기에다가 이젠 코드를 짜고 routes는

const User = require('./controller/login');

 ex: routes.get('/', User.login);

이런식으로하던데 일부러 복잡해 지실까봐 안하신건가요? 아니면 지금 제로초님 방식도 mvc패턴 방식인가요??

답변 4

·

답변을 작성해보세요.

1

디자인패턴은 필요할 때 쓰는 것이지 코드를 디자인 패턴에 끼워맞추시면 안 됩니다. 중복을 제거하고 수정하기 쉽고 확장하기 쉽게 설계된 코드는 저절로 특정 디자인 패턴 모양이 됩니다. MVC도 그렇게 나온 것이고요.

Render Props, HOC, Custom Hooks 이런 것 모두 리액트 디자인 패턴입니다. 이런 디자인패턴으로 써야지~~ 이렇게 코딩하는 게 아니라 코딩하가 최적을 찾다보면 이런 모양이 되는 것입니다.

0

이주호님의 프로필

이주호

질문자

2020.11.06

친절한 답변 감사합니다.

0

이주호님의 프로필

이주호

질문자

2020.11.06

알려주셔서 감사합니다. 이제야 조금 이해가됬네요. 

또 추가 질문은 죄송하지만 react도 디자인 패턴이 있던데 지금 저희 현재 react에서는 디자인패턴을 사용한건가요?

0

현재 폴더 구조도 MVC입니다. 모델 폴더가 있고, View는 리액트가 담당하고 라우터가 컨트롤러 역할을 하니까요. 테스트를 하지 않으면 폴더를 복잡하게 나눌 필요가 없습니다. 테스트할 때는 폴더구조를 바꾸는 게 좋습니다.

테스팅을 하게 된다면 라우터와 컨트롤러는 분리하는 것이 좋습니다. 말씀하신 대로 저는 controllers 폴더를 만들고 거기서 require해옵니다. 유닛테스트를 위해 함수 하나 하나를 분리하고, export해야 합니다.

query는 모델로 분리하지 않습니다. 왜냐하면 이미 Sequelize ORM을 사용하고 있기 때문입니다. ORM이 있으면 model이 이미 분리되어 있는 것이나 다름없습니다. query를 테스트하고싶다면 Sequelize를 가짜 데이터로 바꾸면 됩니다. sequelize-mock같은 패키지가 있습니다.