백엔드 서버 프로젝트에서 Controller의 Request/Response 객체의 역할은 무엇인가?
요청, 응답 body가 항상 엔티티와 일치하지 않는다.
요청, 응답으로 인해 엔티티의 모델링이 깨지므로 Side Effect가 발생할 수 있다.
엔티티는 Service 로직에서만 사용된다.
JSON 을 표현하기 위한 Object로 Request/Response 객체를 사용한다.
물론 Map<key, value> 를 사용할 수 있지만, 안티 패턴이다.

Map을 무분별하게 사용하게 되면, 유지 보수 어려움 겪게 된다.
엔티티를 응답 데이터로 사용하면, 응답 데이터의 변경이 데이터베이스까지 영향을 미치게 된다. (혹은 반대의 경우도 가능)
엔티티와 분리하면, Request/Response 객체에 있는 요청/응답 데이터 검증(Validation) 어노테이션이 엔티티쪽과 섞이는 것을 방지할 수 있다.

아토믹 디자인 쪼개는 기준?
components 디렉토리는 최대한 재사용성을 고려해서 컴포넌트를 구성하면 좋다.
또한 components 안에서도 atoms, molecules, organisms 로 나뉘는데, atoms → molecules → organisms 순으로 하위 컴포넌트들을 이용해서 컴포넌트를 구성한다.
예를 들어, molecules 의 Message 컴포넌트는 atoms 의 Text 컴포넌트 그룹으로 '내용'과 '등록 날짜'를 구성할 수 있다.
<StyledMessage who={who}>
<TextMessage>
<Text text={contents} size="md" boxModel="sm" />
<Text text={createdAt} size="sm" boxModel="sm" />
</TextMessage>
</StyledMessage>
Mock 데이터 사용 방식이 무엇인가?
프론트의 Mock 데이터는 실제로 Mock Server를 이용하고 있는 것은 아니다.
서버쪽 기능 개발이 아직 이루어지지 않은 상황에서, 프론트에서는 정해 놓은 API 스펙 기반으로 독립적으로 기능 개발을 하기 위해서 Mock 데이터를 사용한다.
Axios 모듈은 서버와 데이터를 주고 받기 위한 HTTP Client 라이브러리이다.
하지만 아직 서버에 기능 개발이 되지 않았기 때문에, 서버로의 요청을 가로채서 Mock(임시/대체) 데이터를 사용해야만 한다.
이때, Axios 라이브러리를 통한 요청을 axios-mock-adapter 이용해서 임시(Mock) 데이터로 응답해줄 수 있다.
function getRooms(mock) {
mock.onGet('/api/rooms')
.reply(200, {
rooms: [{ id: 1, text: 'hello world' }, { id: 2, text: 'hi' }]
});
}
function createRooms(mock) {
mock.onPost('/api/rooms')
.reply(201, {
id: 23, text: 'good'
});
}
export default {
getRooms, createRooms
};
위와 같이, 인자를 전달받은 mock 객체를 이용해서 요청에 대한 응답을 개발자가 임의로 지정할 수 있다.
Response 객체로의 변형을 Controller, Service 중 어디서 하는게 맞을까?
Controller에서 처리하면 컨트롤러가 엔티티에 대한 의존성이 생기고, Service에서 처리하면 서비스가 Response에 대한 의존성이 생긴다.
하지만, 요청/응답에 대한 처리는 컨트롤러의 책임이기 때문에 Contoller에서 처리하는 게 맞을 거 같다.
또한, Message → MessageResponse 로의 변형을 MessageResponse 내부에서 처리하는 것이 컨트롤러에서 좀 더 깔끔한 코드를 유지할 수 있을 것 같다. (물론 상황에 따라 다를 수 있고, 개발 스타일에 다를 수 있다.)
일대다 관계에서 연관 관계를 어디에 설정하는 것이 적합할까?
채팅방 입장시 메시지 리스트 조회하는 기능 · Issue #7 · LandvibeDev/web-chat-backend