Skip to content

리뷰 #1

@hanjo8813

Description

@hanjo8813

코드에다 달아놓은거
9378a87#comments

Controller layer와 Service layer의 책임에 대하여..

컨트롤러와 서비스 계층의 책임은 명확히 분리되어야 함

  • 컨트롤러 : 요청을 받아 그에 매핑되는 서비스로 전달만 한다
  • 서비스 : 핵심 비즈니스 로직을 담당한다

이렇게만 들으면 뭔 개소린가 싶지만 쉽게 말하면 컨트롤러 메소드에서 할게 1도없다는 거임

예시를 위해 BbsController > getBbsReactList 메소드를 가져와 봤습니다

	@GetMapping("/bbss")
	public Map<String, Object> getBbsReactList(
			@RequestParam("search") String search,
			@RequestParam("choice") String choice,
			@RequestParam("pageNumber") int pageNumber	
			) {
		logger.info("BbsController getBbsReactList : " + new Date());

		BbsParam param = new BbsParam(search, choice, pageNumber);
		int sn = param.getPageNumber(); 
		int start = sn * 10 + 1;
		int end = (sn + 1) * 10;
		param.setStart(start);
		param.setEnd(end);

		List<BbsDto> list = service.getBbsSearchPageList(param);
		int count = service.getBbsCount(param);

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("bbslist", list);
		map.put("cnt", count);

		return map;
	}

로그 찍는건 제외하고, 그 아래부터 보면 파라미터 객체를 만들고 ~ 서비스 호출하고 Map 객체를 만드는 로직이 컨트롤러 계층에 있습니다
하지만 이게 모두 서비스 계층으로 옮겨져야합니다

즉 BbsService > getBbsSearchPageList 메소드에서 위 로직을 모두 담당해야하는 것입니다

이걸 리팩토링 해보면...

BbsController

	@GetMapping("/bbss")
	public Map<String, Object> getBbsReactList(
			@RequestParam("search") String search,
			@RequestParam("choice") String choice,
			@RequestParam("pageNumber") int pageNumber	
			) {
		logger.info("BbsController getBbsReactList : " + new Date());

		Map<String, Object> response = service.getBbsSearchPageList(search, choice, pageNumber);
		return response;
	}

BbsService

	public Map<String, Object> getBbsSearchPageList(String search, String choice, int pageNumber) {

		BbsParam param = new BbsParam(search, choice, pageNumber);
		int sn = param.getPageNumber(); 
		int start = sn * 10 + 1;
		int end = (sn + 1) * 10;
		param.setStart(start);
		param.setEnd(end);

		List<BbsDto> list = dao.getBbsSearchPageList(param);
		// int count = getBbsCount(param); 
		// 그냥 몇갠지 세려면 DB 안찔러도 될듯?
		int count = list.size();

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("bbslist", list);
		map.put("cnt", count);

		return map;
	}

요렇게 되겠네요
컨트롤러에서는 받을걸 고대~로 서비스로 넘겨주기만 하고, 서비스는 컨트롤러의 리턴값에 맞는 값을 어떻게든 뽑아주는걸 볼수있죠잉

그리고 Map으로 response 객체를 생성하는것보다
@RequestBody로 받는 request dto처럼 response에도 dto를 따로 만들어 주면 좋습니다!

@Getter
public class BbsListResponse {
   private List<BbsDto> list;
   private int count;
}

요런식으로.. (자바 클래스를 json으로 직렬화할때 @Getter 필수임)


(늦은시간에 귀찮게해서 정말 죄송합니다)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions