간단한 로그인 기능이 있는 게시판이다.
처음 화면은 로그인 화면으로, 로그인/회원가입/비밀번호 찾기를 할 수 있다.
로그인은 DB에 저장된 아이디와 로그인이 같을 경우에만 로그인에 성공하며, 이 후에는 게시판 화면에 자동으로 넘어가게 된다.
회원가입은 아이디, 패스워드, 이름, 닉네임, 이메일을 입력하게 되며 모두 적어야 하며 입력하지 않을 시에는 회원가입이 되지 않는다.
회원 가입을 하게 되면 DB에 자동으로 회원 정보가 넘어가고, 로그인 화면으로 넘어가게 된다.
비밀번호 찾기는 자신의 아이디와 이메일을 입력하게 하고, 만약 일치하는 데이터가 있다면, 비밀번호를 초기화 한채로 비밀번호를 알려주게 된다.
이때 초기화 된 비밀번호는 랜덤으로 생성된 문자열의 조합으로 하고, 알려주고 난 뒤에는 로그인 화면으로 넘어갈 수 있게 한다.
게시판 화면은 로그인을 하지 않을경우 볼 수 없다.
게시판 화면에서는 게시물들이 등록 역순으로 등록되어 있으며, 신규 글 등록, 회원정보 수정, 게시물 상세보기가 가능하다.
신규 글 등록을 하면 자동으로 게시판 화면으로 다시 넘어간다.
회원정보 수정은 게시판 화면 상단에 표시된 자신의 이름을 클릭하면 자동으로 회원정보 수정으로 넘어가게 되며, 수정이 완료 된 경우 자동으로 로그아웃 되며 로그인 화면으로 넘어간다.
게시물 상세보기는 게시판 화면에 있는 게시물의 제목을 클릭하면 넘어가게 된다.
게시물 상세보기에서 게시물 업데이트와 게시물 삭제 버튼은 게시물의 작성자와 로그인 한 사람이 일치할 경우만 보이게 한다.
업데이트와 삭제가 완료되면 게시판 화면으로 모두 이동하게 한다.
도메인 모델을 기반으로 설계를 한다.
저번의 게시판 프로젝트와 매우 유사하나 작동하는 방법에 대한 설명을 추가로 설명하기로 한다.
먼저 클라이언트가 컨트롤러에 html요청을 보내면 컨트롤러는 요청에 맞는 메서드를 실행한다.
컨트롤러가 실행하는 메서드는 서비스 인터페이스에게 의존성이 주입된 상태로 실행된 메서드이다.
따라서 서비스에 있는 메서드가 실행되는데, 그 서비스에 있는 메서드 또한 JpaRepository 인터페이스에게 의존성이 주입된 상태이므로, JpaRepository의 메서드가 실행되게 된다.
JpaRepository의 메서드를 통해 JPA의 O/R Mapper가 메서드의 요청을 영속성 컨텍스트로 받아 쿼리문으로 변환하여, MySql 서버로 보낸다.
MySql 서버는 쿼리에 맞는 SQL Data를 다시 O/R Mapper로 보내며, O/R Mapper는 SQL Data를 Domain 객체로 변환하여 보내게 된다.
그렇게 해서 최종적으로 컨트롤러 메서드는 Domain 객체를 받으며 이를 View에게 View에 맞는 형식으로 객체를 변환하여 보내게 되고, View는 받은 데이터를 화면에 출력하면서 일련의 과정에 끝나게 된다.
이러한 방식은 Get에 의한 요청방식에 주로 사용되나, Post도 이와 매우 유사한 형식으로 진행된다. 다만 클라이언트가 데이터를 View를 통해 같이 보낸다는 차이만 있을 뿐이다.