티스토리 뷰
지금 개발중인 시스템에서 고민했던 문제를 여기에 정리해둔다.
현재 개발중인 내용은 기존의 시스템 A는 고도화하고 그 시스템에 새로운 B시스템을 붙여 만드는 것이다. 각 시스템의 관리자는 각 시스템만 조회할 수 있지만, 이 두 시스템을 모두 접속할 수 있는 마스터 계정이 있다. 이것이 첫번째 문제이고, 이 두 시스템이 공통으로 사용 가능한 기능이 있다는 것이 두번째 문제이다.
전체 관리자의 경우, 각 페이지에서 서로 다른 시스템으로 이동할 수 있는 링크가 있어서 이동할 수 있다. 하지만 이 링크는 현재 접속중인 시스템을 표시해야 한다. 문제는 header에서 이 링크를 표시하고, 공통으로 사용하는 기능의 페이지는 나눠지지 말고 파일 하나로만 존재해야 한다는 것이다.
아래와 같이 구현해야할 흐름을 정리할 수 있다.
A시스템으로 접속 -> 현재 시스템이 A시스템이라는 정보를 가지고 있음 -> 시스템정보에 따라 header 다르게 표시 -> 시스템 이동버튼 클릭해서 이동함과 동시에 현재 시스템 정보 B로 변경
공통기능의 경우는 이미 A시스템에 존재하기 때문에 header에서 시스템 분기 처리를 해주거나, 아님 B시스템의 header를 새로 만들어서 레이아웃을 설정해서(tiles.xml) 시스템 분기 처리에 따라 다른 뷰를 가져오게 하는 방법이 있다.
header에서 시스템 분기처리를 해주는 방법은 먼저 어떤 기준으로 분기처리를 할 것인가 하는 문제가 있다. 이때 기준으로 삼을 정보는 선택한 시스템이고, 이 선택한시스템정보를 세션에 저장하거나 로컬/세션스토리지에 저장해놓고 사용하는 방법이 있을 것이다.
첫번째로 생각해낸 방법은 두번째인 header만 갈아끼운 레이아웃을 설정해서 시스템 분기에 따라 다른 뷰를 가져오는 방법이었다. tiles.xml에 새로운 레이아웃을 정의하고 새로운 뷰 id를 준 뒤, 공통으로 사용하는 기능의 컨트롤러마다 header에서 session에 설정한 현재 선택된 시스템 정보를 확인해서 다른 뷰를 불러오도록 했다.
이렇게 되니 가장 큰 문제로 변경범위가 커졌다. tiles.xml과 공통으로 사용하는 기능마다 전부 변경해줘야 했다. 좀 더 효율적이고 간단한 방법이 없을까 대리님께 코드를 보여드리며 말씀드렸더니, 컨트롤러에서 현재 선택된 시스템에 따라 뷰를 나누게 되면 변경범위가 커지게 되니 이 부분은 (이 방법으로 할거면) interceptor로 빼는 게 나을 것 같다고 하셨다. 그리고 다른 사람이 기능을 추가하는 등의 수정을 할 때 직관적으로 이해할 수 있을지, 내 설명이 필요하진 않을지를 물어보셨다. 나도 그 점이 물음표였다. 그리고 대리님은 내가 생각했던 로컬/세션스토리지에 저장하는 방법도 얘기하셨는데, 그냥 로컬/세션스토리지에 저장하는 방법을 먼저 말씀드려볼걸 생각했다.
그래서 나는 결국 첫 번째 방법인 로컬/세션 스토리지를 사용하는 방법으로 선택했다. 그렇게 바꾸니 header만 변경하면 되니 변경부분도 적었고, 무엇보다 새로운 기능을 추가하더라도 header 메뉴의 적절한 부분에 새로운 기능의 링크만 넣어주면 될 뿐 시스템 처리 때문에 신경쓰지 않아도 되었다.
이 방법이 가능했던 가장 큰 이유는 내가 사용하려는 정보가 클라이언트에 저장해도 무방했던 정보였기 때문이다. 만약 클라이언트에 저장하면 안되는 중요한 정보였다면 어떻게든 서버 내부에서 처리하려고 했을 것이다. 이럴 경우에는 대리님이 말씀해주신 것처럼 interceptor에서 처리하는 방법을 사용할 수 있겠다. 그런 경우가 있을수도 있기 때문에 interceptor에서 처리하는 방법도 시간을 내서 구현해봐야겠다고 생각했다.
'업무 경험 및 성과' 카테고리의 다른 글
@ControllerAdvice로 같은 예외일 때 뷰나 데이터를 내려주는 분기처리를 할 수 없을까에 대한 고민 (0) | 2022.07.28 |
---|---|
[회고] 시스템 개발 프로젝트 (0) | 2022.06.24 |
heap 덤프 분석해서 out of memory 원인 찾기까지의 과정 (0) | 2022.04.09 |
엑셀업로드를 통한 대량등록 성능 개선의 건 (0) | 2022.01.12 |
[회고] 기능 고도화 프로젝트 (0) | 2021.12.16 |