요청 URL을 다음과 같이 상수 값으로 구현한다면...

2015-03-31 17:34

소스 코드에서 숫자, 문자를 하드 코딩하지 않는 것이 좋은 프로그래밍 습관으로 알고 있다. 이에 대한 연장선으로 다음과 같이 모든 URL을 하나의 클래스에 모아 상수 값으로 구현하고 각 Controller에서 사용하는 다음의 코드는 괜찮은가?

public class WebServletURL {
	public static final String GROUP_CREATE = "/group/create";
	public static final String GROUP_DELETE = "/group/delete";
	public static final String GROUP_READ = "/group/read";
	
	public static final String NOTELIST = "/g/*";
	public static final String NOTELIST_READ = "/notelist/read/*";
	public static final String NOTE_CREATE = "/note/create";
	public static final String NOTE_READ = "/note/read";
	
	public static final String USER_CREATE = "/user/create";
	public static final String USER_LOGIN = "/user/login";
	public static final String USER_LOGOUT = "/user/logout";
}

위와 같이 정의하고 다음과 같이 사용한다.

@WebServlet(WebServletURL.GROUP_CREATE)
public class CreateGroupServlet extends HttpServlet {
    [...]
}

위와 같이 구현하는 것이 문제가 있다고 생각하는 부분이 있다면 무엇일까? 위와 같이 구현하지 않는다면 각 Controller에서 URL을 Mapping하는 경우가 있을텐데 그와 같이 구현할 경우의 장점은 뭘까? 다른 이슈는 없을까?

소스 코드 리뷰를 하면서 느끼지만 항상 이 방식이 맞는 것은 아니라고 것을 종종 느낀다.

0개의 의견 from FB

5개의 의견 from SLiPP

2015-03-31 17:45

하드코딩하지 않는 이유 중 하나는 '의미'를 살려서 코드에 대한 이해를 높이는 것이라 생각하는데, 이런 측면에서 URL 경로를 다른 파일에 상수로 넣는 것은 현재 코드를 읽는데 도움이 되지 않는다고 생각합니다. 불필요한 코드 참조를 유발할 것 같네요.

2015-03-31 21:48

극단적으로 보자면 소스코드의 중복일듯 합니다. 위의 경우가 모두를 대변하지는 않겠지만 굳이 GROUP_CREATE = "/group/create";과같이 똑같은 단어를 내포하고 있는 값을 다시 그 와 같은 단어의 변수명으로 대체를 해야할 필요가 있을지는 잘 모르겠네요. Convention Of Configuration 같이 관례적인 설정을 다시 할필요가 있을지?에 대한 의문이 드네요

GROUP_CREATE : 이것도 그룹을 만드는 것으로 이해가 되고, "/group/create" : 이것도 그룹을 만드는 것으로 이해가 되는데 굳이 다시 변수를 써야 할 필요는 없을듯 합니다. 물론 중복적인 URL이 나와서 WebServletURL.GROUP_CREATE + WebServletURL.GROUP_CREATE_SUB_GROUP 같이 쓴다고 할 수도 있겠지만 저것도 굳이 낳아 보이지는 않습니다.

개인적인 의견이지만 명시적인 convention이라면 굳이 다시 Wrapping하지 않는걸 좀더 선호합니다.

2015-03-31 23:09

빼지 않는게 낫다는 의견이 많운데 저는 반대 의견을 제시해봅니다.

만약 추후에 mapping url을 group이 아닌 groups로 하자고 변경이 되었을 때, 모든 서블릿을 찾아서 수정하는 것보다 한 곳에서 수정할 수 있다는 이점이 있습니다.

두번째로는 서블릿의 종류가 많아질 때 각 서블릿에 해당하는 URL을 한눈에 파악할 수 있어서 행여나 겹쳐서 작성할 실수를 미연에 방지할 수 있습니다.

단점은 각 서블릿을 볼 때 맵핑된 URL 주소를 바로 볼 수 없어서 확인 절차를 통해 한번더 들여다보는 수고는 필요합니다.. ㅠ

코딩을 배울 때 나중 일을 미리 생각해서 작성하지 말라고 배웠지만. 이런 부분에서는 어느정도의 장치가 필요하다고 생각합니다.

2015-03-31 23:19

@장영빈 매핑 URL을 한 곳에서 파악할 수 있다는 것이 의미가 있을 수도 있겠네. 한 곳으로 모음으로써 얻어지는 장점과 각 서블릿으로 분리하는 방법의 장점은 어느 장점이 더 클까? 앞의 댓글에서 중복이라고 표현한 부분에 대해서는 어떻게 생각해?

Convention Of Configuration(이하 CoC)와 관련한 이야기도 있는데 이건 또 어떤 방식으로 처리하는 방식을 의미하는 것일까?

의견 추가하기

연관태그

← 목록으로