seong

게시판 만들어보기 (로그인 이후) 본문

Spring/SpringBoot

게시판 만들어보기 (로그인 이후)

hyeonseong 2022. 9. 5. 13:34
먼저 이전 로그인 까지 완성된 것  +  공부 진행

글쓰기 완성하기

UsersController (유저 인증을 위해 세션키  확인)

Users에서 로그인할 때 세션에 저장해 둔 키 값

Users로그인할 때 session의 키 값 이름으로 principal로 했다.

필요할 경우에 똑같은 키 값으로 찾아야한다. 

session은 서버쪽에서 영구적 저장을 하며, 브라우저가 종료 되어도 세션의 키 값은 남아있다, 하지만 브라우저를 닫으면 없어진다.

1. BoardsController 글쓰기 인증 체크 부분

세션에서 인증이 된 사용자라면 글쓰기 writeForm으로 이동 , 아니라면 다시 로그인 폼으로 이동

session은 오브젝트 타입이다 , 그래서 데이터를 받아 오려면 다운캐스팅을 해주고 호출해준다. 

받아와서 값이 null이라면 redirect를 해준다 

redirect는 쉽게 말해 새로고침과 같다. 입력했던 데이터 들을 모두 초기화 해 새로운 페이지를 다시 요청하는 것이다. 

2. WirteForm완성해보기

action 데이터를 가지고 이동할 부분을 적어준다. 메서드는 데이터를 Insert 하기 때문에 post방식 사용

데이터를 키 값(name)에 담아 전송해준다. 이 부분을 적어 주지 않으면 어디에 무슨 데이터가 담길지 모르기 때문에 꼭! 적어준다.

 3. Controller에서 데이터를 받아 넘길 부분을 작성해준다. 

WriteDto를 만들지 않고 String title, String content , Integer UserId를 해주어도 된다. 하지만 이후 코드 유지보수 측면에서 보았을 때 Dto를 만들어 전달 해주는 것이 좋다. 

새로운 Boards를 만들어 담아서 모두 insert를 시켜준다.(Boards를 전달하기 때문에 BoardDao의 Insert메서드는 Boards를 받아야한다.)

위의 코드 까지 결과 확인

아직 데이터를 받아 View로 뿌려주는 코드는 작성하지 않았기 때문에 DB에서 잘 들어갔는지 확인

로그인, 글쓰기 까지 모두 잘 된다. 


코드 리팩토링 - WriteDto에서 메서드화 시키기 

1.  Boards에서 Insert에 주입되는 데이터들을 Controller해주어도 된다. 하지만 WriteDto가 있다면 Dto에게 넘겨주도록 하자.

2.  WriteDto로 가서 엔티티화 시켜주는 메서드 생성

Boards객체를 만들어서 데이터를 넣어주기 때문에 리턴해주는 타입은 Boards이다

set해줄때 Controller에는 writeDto를 불러와야 했지만 지금은 WriteDto가 자기 자신이기 때문에 this로 만들어준다.

Boards에는 id,title,content,userid,createdAt에 대한 엔티티만 존재 하기 때문에

writeDto에 필요한 title,content,id설정에 필요한 값들 생성

3. Controller 작성

writeDto의 데이터를 메서드를 통해 인티티화 시켜주었기 때문에 메서드를 실행한다. 

결과 확인

만들때 Boards에 생성자를 만들어주지 않아서 Userid가  항상 null이었다 . 다음부터 실수 하지말자 

여기까지 만드는 순서 참고 


게시글 목록 보기 

1. 맵퍼 작성(쿼리문)

번호, 게시글 제목, 작성자 이름을 보여주는 쿼리문 작성

쿼리문 쓸 때 INNER JOIN이 필요하다. 작성자 이름은 User테이블의 엔티티 이다,즉 Boards의 테이블엔 없기 때문이다. 

추후 ORDER BY로 id순서대로 보기 쿼리문 추가

그리고 쿼리문을 작성 했으면 mapper에 맞는 View데이터를 만들어준다. 

2. 맵퍼에 맞게 뷰를 작성 (DB와 통신)

3.  Controller 작성

List의 타입은 보여줄 정보들인 MainView이다.

해석 해 보자면 Dao의 findAll 메서드로 모든 게시글을들 찾아 boardsList에 담아준다. 

model을 사용해 정보들을 가지고 boards/main으로 간다. 

Dao오류는 메서드의 리턴 타입을 수정 해주지 않아서 이다. 수정해주자.

4.  jsp 작성

var은 jsp파일 내에서 사용할 변수 이름이다.

items는 controller에서 불러올 키 값이다.  -> 키 값으로 불러온 값들을 var = boards에 담아주고 사용한다. 

결과 확인

DB에도 있는지 확인


MainView 코드 리팩토링 , 게시글 하나 보기 

MainView은 게시글 목록에 보여지는 데이터이다, 즉 클라이언트에게  Response(응답)해서 보여주는 것이다.

Dto로 리팩토링 하고, 게시글 하나 보기 작성.

1. domain은 DB와 통신할 때 사용했다, 클라이언트에게 응답해 보여주는 web패키지로 이동 및 Dto로 수정 

2. MainView를 삭제 하면 썻던 곳에서 에러가 난다 -> 모두 MainDto로 수정해주면 에러가 없어진다.  

3. mapper는 찾아가서 바꿔준다.

게시글 클릭 하면 해당 게시글 정보 페이지 띄우기

1. Controller 작성

2.  jsp 작성

결과 화면

cos title 클릭
제대로 출력된다!