신입 개발자가 되기 위해 공부했던 독학 자료들/SJBoard 프로젝트를 통한 스프링 공부

[SJBoard 프로젝트] 관리자 페이지 1: 전체 회원 목록 조회 / 회원 권한 변경 / 회원 강제 탈퇴 기능

Seojoo21 2022. 3. 29. 14:07

관리자 페이지를 구현해보았다. 현재 SJBoard의 권한은 아래와 같이 매우 단순하다. 

 

ROLE_MEMBER: 일반 회원

ROLE_ADMIN: 관리자 

 

관리자 페이지는 권한이 'ROLE_ADMIN'인 사용자가 로그인했을 때만 나타나며, 혹시라도 URL이 공개되어 관리자가 아닌 ROLE_MEMBER 권한의 일반 회원이나 로그인하지 않은 일반 사용자가 접근할 경우 해당 페이지에 접속하지 못하도록 스프링 시큐리티의 기능을 이용한다.

 

관리자 페이지의 기본 설계는 아래와 같고 이에 맞춰 관리자 페이지 기능을 구현할 것이다. 

 

----------------------------------------------------------------------------------------------------------------------

<관리자 페이지 기본 설계>

* AdminVO 는 따로 생성하지 않고 필요시 기존의 BoardVO (게시판), ReplyVO(댓글), MemberVO(회원), AuthVO(회원 권한)를 사용

 

1. 영속 계층 

- AdminMapper 

- AdminMapper.xml

- AdminMapperTests

 

2. 비즈니스 계층

- AdminService 

- AdminServiceImpl

- AdminServiceTests

 

3. 프레젠테이션 계층

- AdminController

- /admin/main.jsp (관리자 페이지 접속 시 가장 먼저 보이는 페이지)

- /admin/memberList.jsp (관리자 페이지에서 전체 회원 목록을 조회할 수 있는 페이지)

- /admin/stats.jsp (관리자 페이지에서 게시글, 댓글, 회원 등의 기간별 현황을 조회할 수 있는 페이지) 

----------------------------------------------------------------------------------------------------------------------

======================================START!===========================================

 

1. 스프링 시큐리티로 관리자 페이지 메뉴 추가 및 권한 설정 

먼저 메뉴 부분에 관리자 등급인 ROLE_ADMIN 에게만 보이는 메뉴를 추가한다.

그리고 security-context.xml에도 아래와 같이 <security:intercept-url> 태그를 추가하여 관리자 페이지와 관련된 모든 URL에 ROLE_ADMIN 권한이 있는 사용자만 접속할 수 있도록 한다.  

 

따라서 일반 회원(ROLE_MEMBER) 의 경우 로그인 시 아래와 같이 '홈, 게시판, 회원정보, 로그아웃, 회원가입' 메뉴가 전부이지만, 

관리자(auth: ROLE_ADMIN)의 경우 로그인 시 기본 메뉴에 '관리자 페이지' 메뉴가 추가되어있다.

 

이후 관리자 페이지 관련 모든 작업은 별도의 Mapper, Service, Controller를 만들어 처리한다. 

 

2. 관리자 페이지 

src/main/webapp/views 내에 관리자 전용 페이지 전용 admin 폴더를 만든다. 이후 모든 관리자 페이지의 jsp 파일은 이 폴더 내에 위치하게 되고 경로 또한 '/admin/~'이 된다.

 

관리자 페이지는 아래와 같이 좌측에 관리자 전용 서브메뉴가 있고 우측에는 관리자 전용 서브 메뉴에 해당하는 화면이 나타나게 구성한다.

 

*/admin/main.jsp  

가장 먼저 전체 회원 목록을 조회할 수 있는 '회원 목록' 페이지인 '/admin/memberList.jsp' 를 만든다.

 

'회원 목록' 페이지에서 관리자는 아래의 업무를 할 수 있게 구성할 것이다. 

- 현재 SJBoard에 가입된 회원 정보 조회

- 회원 권한 수정 및 강제 탈퇴 처리 

 

이에 맞춰 아래와 같이 각 단계별로 Mapper, Service, Controller, View 를 구현한다. 

 

3.  회원 목록 페이지를 위한 Mapper, Service, Controller 

3-1. AdminMapper  인터페이스 & AdminMapper.xml

* AdminMapper

* AdminMapper.xml

 

3-2. AdminService 인터페이스 & AdminServiceImpl

 

* AdminService 인터페이스 

* AdminServiceImpl

 

3-3. AdminController

회원 목록 페이지인 '/admin/memberList' 에서 할 수 있는 회원 권한 수정 기능을 처리하는 메서드 updateAuth()와 회원 강제 탈퇴 기능을 처리하는 메서드 deleteMemberByAdmin()은 페이지 변경 없이 /admin/memberList 내에서 처리될 수 있도록 ajax 비동기 처리를 위해 @ResponseBody 어노테이션을 붙인다.  

 

4.  회원 목록 조회 View 페이지 (/admin/memberList.jsp)

전체 회원 목록은 게시판 전체 목록 페이지인 /sjboard/list.jsp를 만들었을 때와 동일하게 <c:forEach> 태그를 이용하여 전체 회원 목록을 출력한다.  

각 행에는 회원 권한 관리 열이 있고 이 열에서 회원 권한 수정 및 강제 탈퇴 기능을 구현할 수 있도록 아래와 같이 코드를 작성한다.

해당 기능을 구현하기 위해 코드 작성 시 애로사항이 많아 오키에 질문글을 올렸었는데 다행히 정확한 답변을 받아 코드 복습 후 응용하여 ajax 기능까지 활용할 수 있었다. 오키에서 내가 올렸던 글과 답변은 아래 링크에서 확인할 수 있다.

 

https://okky.kr/article/1189220   

 

OKKY | JSP 페이지 forEach 태그로 만든 테이블에서 각 행마다 Select Option 값과 버튼을 따로 줄 수는 없

안녕하세요. 현재 개인프로젝트 중 관리자 페이지에서 회원 권한을 수정할 수 있는 기능을 만들고 있습니다. ​ 아래 보시다시피 현재 c:forEach 로 회원 정보를 출력하고 그에 맞춰 각 행의 마지

okky.kr

 

그 다음 페이징 처리 관련 코드도 아래와 같이 추가해준다. 

 

그러면 아래와 같이 관리자의 회원 목록 조회 페이지에서 페이징 처리된 전체 회원 목록을 확인할 수 있고, 각 회원들의 권한 수정 및 강제 탈퇴 기능도 사용할 수 있다.  

 

* 관리자 페이지 내 회원 목록 조회 페이지 화면 

 

*회원 권한 변경 시) 

 

*회원 강제 탈퇴 처리 시)