어제 한 달 회고를 작성하느라 너무 늦게 잔 나머지 늦게 일어났다.
2시부터 5시까지 페어랑 유튜브 미션 2단계 cypress를 구현했고, 2단계는 어떻게 구현해야 할지 구조를 잡았다.
그러고 코드 리뷰가 왔는데, 코드 리뷰를 받고 오늘 하루종일 아무 것도 할 수 없었다.
우선, 역할이라는 것이 정말 어렵다고 생각한다.
클래스, 함수는 하나의 역할만을 가져야 한다고 하는데, 나에게 잘 와닿지 않는다.
리뷰어님이 작성해주신 글을 보면
내가 친구에게 어떤 물건을 가지고 있으라고 하고, 다시 달라고 할 수는 있지만 친구가 물건을 어디에 보관하고 있는지에 대해서는 내가 관여할 바가 아니다.
라고 하셨는데, 내가 이해한 바로는 모델과 뷰를 알고 있는 컨트롤러가 저장 위치인 로컬 스토리지까지 알고 있는 것이 너무 많은 역할을 하고 있으니 어디에 저장하는지 신경쓰지 않을 수 있게 다른 저장 객체를 만들라는 것 같다.
하지만 이걸 어떻게 분리해야 할지 감이 잡히지 않고, 분리해서 얻는 이득이 무엇인지 정확하게 모르겠다. 일만 두 번 하는 것 같은 느낌이 들기 때문인데, 역할의 분리에 대해서 더 공부를 해야겠다.
그리고 컨트롤러가 비대해지는 것을 막기 위해 Service라는 객체를 만들어 사용하는 것을 추천해주셨는데, 이 부분에 대해서도 많은 고민을 하게 되었다.
우선, 컨트롤러에서는 Service 객체에서 데이터를 받아서 뷰에 뿌려주는 역할을 하도록 구현하는 것이 좋을 것 같다고 하셨는데, 이렇게 되면 Service와 모델이 어떤 차이가 있는지 잘 모르겠다.
단지 컨트롤러가 비대해지는 것을 막기 위해 파일을 두 개로 쪼갠 것 같은데, 어떻게 나눠야 할지 감이 잡히지도 않을 뿐더러 그러면 이제 컨트롤러에서는 모델을 알지 못하고, Service에서 모델을 알고 있는 것인지에 대한 의문도 든다.
그럼 결국 유저의 요청이 컨트롤러로 들어오면 컨트롤러는 서비스에 데이터를 요청하고, 서비스는 모델로 데이터를 요청해서 받아오게 될 것 같은데, 데이터 요청을 두 번 해야하니까 비효율적인 것이 아닐까라는 생각이 들어서 섣불리 구현하지 못하겠다.
다시 한번 생각해보면, 사용자가 검색 키워드를 입력하고 검색 버튼을 눌렀을 때, 서비스에 검색 키워드를 넘겨주면서 요청이 들어왔다는 것을 알리고, 서비스는 검색 키워드를 가지고 모델에서 데이터를 받아온다. 그 후에 컨트롤러로 받은 데이터를 넘겨주고, 컨트롤러는 받은 데이터를 뷰에 넘겨서 화면을 렌더링한다.
아,,, 아직도 정말 두 번 데이터를 넘겨줘야 하는 이유를 모르겠다.
오늘은 아무 공부도 못하고 하루가 지난 것 같아서 너무 아쉽고, 불안하지만 어쩔 수 없는 것 같다. 내일 페어랑 끝장 토론을 해야겠다.