[LibraryProject] Q&A 게시판 답변 기능 구현

2024. 4. 27. 21:47libraryProject

728x90
반응형

 안녕하세요. 진득코딩입니다. 이번 시간에는 관리자 모드에서 게시판 관리 첫 번째 기능인 Q&A 답변하기 기능에 대해서 알아보도록 하겠습니다.

view

Q&A 질문하기 게시판 목록

 도서관 홈페이지에서 게시판 배너에 있는 Q&A 배너를 누르게 되면 나오는 화면입니다. Q&A 게시판을 이용하여 질문하기를 한 게시물들의 전체 목록을 보실 수 있습니다. 위 게시물은 테스트용으로 미리 게시한 게시물입니다. 조회수와 답변 여부를 확인할 수 있는데 답변 여부가 0이면 답변이 아직 안된 상태이며, 1이 되면 답변이 완료된 게시물이라는 의미입니다. 하단에 있는 질문 등록하기 버튼을 누르게 되면 질문하기 기능을 사용하실 수 있습니다. 해당 질문하기 기능은 필자가 구현한 기능이 아닌 게시판을 담당한 조원이 구현한 기능입니다.

질문하기 form

 작성자는 해당 회원의 이름이 자동적으로 입력이 되며 required를 사용하여 변경할 수 없도록 해두었습니다. 제목과 내용을 입력하고 작성 완료 버튼을 눌러서 질문을 등록할 수 있습니다.

질문 등록 후 Q&A 게시판 목록

 질문을 등록하게 되면 위와 같이 작성일이 포함된 게시물이 목록에 추가되게 됩니다. 이 상태에서 본격적으로 필자가 구현한 답변하기 기능에 대해서 살펴보도록 하겠습니다.

관리자 index

 관리자나 사서 권한으로 로그인 한 후 관리자 모드로 접근하게 되면 출력되는 관리자 index입니다. sidenav에 있는 게시판 관리 안에 있는 Q&A 게시판 배너를 누르게 되면 답변하기 기능을 사용하실 수 있습니다.

답변하기 기능 게시판 목록

 Q&A 게시판을 누르면 Q&A 질문하기 게시물들의 목록을 볼 수 있습니다. 여기에서 게시물들의 전체적인 정보를 확인하실 수 있고 제목을 눌러서 해당 게시물의 상세 정보를 확인하실 수 있습니다.

질문하기 게시물 상세 보기

 Q&A 질문하기 게시물에 대한 상세 보기 화면입니다. 게시물의 제목, 작성자, 질문 내용을 확인하실 수 있습니다. 해당 게시물에 대한 답변하기 기능을 이용하시려면 하단에 있는 답변하기 버튼을 눌러서 답변하시면 됩니다.

답변하기 기능 form
답변하기 기능 사용하기

 답변하기 버튼을 누르면 답변하기 기능을 사용하기 위한 답변 form이 출력되는 것을 확인하실 수 있습니다. 기본적으로 해당 게시물의 제목과 답변자의 닉네임이 출력되게 되고 답변 내용에 기본적으로 질문 내용이 출력될 수 있도록 기능을 구현하였습니다. 질문 내용 밑에 관리자가 원하는 답변을 입력하신 후 답변하기 버튼을 누르면 답변이 완료됩니다.

답변 후 Q&A 게시판 목록

 답변이 완료된 게시물은 Q&A 게시물 목록에서 제외되어 답변이 필요한 게시물들만 목록에 출력되게 됩니다. 답변이 완료된 게시물은 유저 입장에서는 어떤 식으로 확인하게 되는지 살펴보도록 하겠습니다.

답변 후 Q&A 게시판 목록

 Q&A 게시판으로 들어가서 목록을 살펴보게 되면 답변 여부에 답변한 게시물의 값이 0에서 1로 변경된 것을 확인하실 수 있습니다.

답변 후 Q&A 게시판 상세보기

 답변이 완료된 게시판에 들어가게 되면 전에는 안보이던 답변 테이블이 추가된 것을 확인하실 수 있습니다. 해당 기능은 어떤 식으로 구현되었는지 코드를 살펴보면서 확인해보도록 하겠습니다.

 

code

controller1

 컨트롤러에서 전체 목록 보기 메서드에서는 question_board 테이블에 있는 모든 행을 리스트에 담아서 전체보기 view로 뿌려주게 됩니다. 상세 목록 보기 메서드에서는 question_num을 이용하여 요청한 게시물의 정보를 DTO에 담아서 상세보기 view로 뿌려주게 됩니다. 답변하기 버튼을 누르게 되면 상세보기에서와 같이 question_num을 이용하여 특정 게시물의 정보를 DTO에 담아서 답변하기Form으로 DTO를 뿌려주게 됩니다.

controller2

 form에서 정보를 입력한 후에 답변하기 버튼을 누르게 되면 question_num을 통해 해당 질문하기 게시물에 대한 정보를 담아서 bean에 넣게 되고 해당 bean을 이용하여 answer_board 테이블에 해당 정보를 입력하게 됩니다. 또한 question_num을 통해 답변을 완료한 게시물을 찾아 답변이 완료된 값으로 변경해주게 됩니다.

service

 위 4개의 기능 모두 DB에 접근해야 하는 기능이므로 각각의 맞는 DAO를 호출합니다. 초기 설계 당시에 question_board 테이블의 question_num은 int로 하였고 answer_board 테이블의 question_num은 String으로 설정하여서 answerClear 메서드에서 question_num을 String으로 형변환한 후에 DAO로 넘겨주었습니다. 현재 answer_board의 question_num은 int이지만 String으로 구현한 현 상태에서 문제가 없어서 해당 형변환하는 코드를 유지했습니다.

DAO

 DAO에서는 각각의 맞는 질의문을 사용하고 있는 mapper를 호출해줍니다. 특정 행을 찾아야하는 기능에는 pk를 함께 보내주고 inser같이 게시물에 들어갈 정보가 필요한 기능에는 bean을 포함하여 보내주었습니다.

mapper

전체 목록을 찾는 질의문에서는 처리가 안된 게시물들만 목록에 뜨게 하기 위해서 where etc=0을 사용하였습니다. 초기 설계할 때 process 컬럼을 추가할 생각을 하지 못하여서 급한대로 etc 컬럼을 process 컬럼의 역할을 하는 컬럼으로 활용하였습니다. answerClear 메서드에서는 question_board 테이블에 접근하여 처리가 완료된 게시물이라는 것을 표시해주기 위해서 etc를 1로 변경해주었습니다.


 해당 기능은 처음으로 다른 조원과 관련된 기능을 구현하였습니다. 처음이어서 해당 질문하기 기능을 구현한 조원과 커뮤니케이션을 통해서 프로젝트를 할 때 다른 조원과의 의견을 나누는 역량이 기능을 구현할 때에도 중요하다는 것을 깨닫게 되었습니다. 다음 시간에는 게시물 관리 기능인 공지사항 관리 기능에 대해서 살펴보도록 하겠습니다. 끝까지 읽어주셔서 감사합니다.🙂

728x90
반응형
LIST