Spring 게시판 만들기

김민욱·2022년 1월 13일
2

spring

목록 보기
2/6
post-thumbnail

현재 진행중에 있는 프로젝트는 웹사이트 만들기다.
친구랑 같이하는 프로젝트인데 친구가 먼저 만들고 있어서 웹사이트의 기본 구조는 만들어줬다.
jsp파일과 controller정도만 구현을 해줌!

아래의 사진 두개가 친구가 만들어준 골격!


이제 이 골격을 이용해 게시판도 만들고, 추가할 페이지도 더 생성해야한다. 그러기 위해서는 spring 레거시와 MVC구조를 이해를 해야한다..!
내 첫번째 프로젝트인 웹사이트 만들기를 spring legacy를 이용해 게시판 만들어보자.

MVC구조

Controller > Service > serviceImpl > Mapper > Mapper.xml 순서로 만들기로 했다.
물론 중간에 view vo도 포함되어있고, DAO는 Mapper랑 역할이 비슷한 거 같아서 빼기로 결정..!

아래의 사진이 MVC구조!

모델(Service)과 DBMS 사이에 DAO와 Mapper가 존재한다고 생각하면 된다.

controller와 model mapper등이 다 이어지기 위해서는 어노테이션을 쓴다.
Controller에서는 @Controller 그리고 service와 이어지기 위해 @Autowired라는 어노테이션을 쓰고,
ServiceImpl에서는 @Service 와 @Autowired로 mapper와 이어주고,
Mapper에서는 @Repository라는 어노테이션으로 이어준다.
이들은 서로간의 의존관계를 위해 꼭!! 붙여줘야한다. 그러지 않으면 에러발생...

게시판을 구현해보자

여러가지 페이지가 있지만 대부분의 페이지는 프론트로 가능하기 때문에 넘어가고,
ContactController를 먼저 만들어 볼 것이다.

게시판 만들기 정리

게시판을 만드는 프로세스를 정리해보자.

  1. DB설계서를 작성한다.

  2. 워크벤치를 이용해 DB테이블을 작성하고, Intellij와 연동한다.

  3. 테이블의 컬럼 값을 VO클래스를 만들고 VO 객체 클래스에 매핑한다.

  4. 워크벤치에서 CRUD를 만든다.(게시판 목록을 불러오기)

  5. Mapper.xml를 작성한다.

  6. Mapper의 인터페이스를 만든다.

  7. Service 인터페이스를 만든다.

  8. ServiceImpl 메서드를 구현한다.

  9. Controller를 만든다.

  10. View 역할의 게시판 페이지 jsp를 작성한다.

  • 첫번째: Controller를 간략하게 만들기


앞서 말했던 것처럼 @Controller 어노테이션을 붙이고 service와 이어지기 위해 @Autowired를 작성
그리고 localhost:8080/contact로 들어가게하기위해 Mapping을 해준다.
그러면 public ModelAndView getContact()가 그 아래의 객체들과 변수를 이용해 찾아가도록 설정!
return mav;값은 service와 mapper등을 거쳐 다시 돌아와 jsp(view)를 반환하는 것!

- 컨트롤러 구현 순서

  1. @Controller 어노테이션을 클래스에 적용한다.(해당 클래스가 컨트롤러 빈 객체에 등록되어 스프링이 관리해준다.)

  2. @RequestMapping 어노테이션을 이용해서 처리할 요청 경로를 지정한다.(해당 경로로 요청시 메서드 실행.)

  3. 웹 브라우저의 요청을 처리할 메서드를 구현(본격적으로 처리할 로직을 짜면 된다.)

  4. 뷰 이름 리턴

  • 두번째: VO 만들기


워크벤치를 이용해 사전에 만들어둔 DB설계서를 이용해 DB테이블을 작성하였고, 이를 토대로 VO를 만들었다.
그리고 @Data라는 어노테이션을 추가했는데 maven에서 pom.xml에 의존성을 추가하여 넣은 것이다.
@Data의 장점은 원래 VO 아래에 getter와 setter toString()을 추가해야하는데, @Data 어노테이션 하나만으로 getter setter toString를 생략할 수 있다.

- VO 작성 순서

  1. 데이터베이스 테이블 스키마를 확인

  2. 각 자료형에 맞게 필드를 입력

  3. 기본생성자 작성

  4. Getter / Setter / toString

  • 세번째: Service와 Mapper 만들기


아직 구현중에 있지만, service와 mapper는 내가 필요한 메소드가 있을때마다 그때그때 추가를 해주고 있다.
물론 Controller에도 추가를 해줘야함!

- Mapper 와 Service 구현 순서

  1. Mapper 인터페이스 클래스 구현

  2. Mapper.xml 설정

  3. Service 인터페이스 클래스 구현

  4. Service implement 클래스 구현

  • 네번째: jsp에 반복문 만들기

게시판에 들어갈 변수명을 vo에 만든 변수명과 똑같이 적어준다.

이번 게시판을 만들면서 발생했던 오류들

Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'CST_DATE' cannot be null

분명 값을 집어 넣었는데 위의 오류가 발생했다..
여러가지를 찾아보다가,, 결국 해결했는데 이유가.. 변수명을 살짝 틀림,,ㅠ 이거로 한시간 넘게 고생한듯..^^

org.springframework.web.servlet.PageNotFound - No mapping for GET
->정상적으로 url매핑이 이뤄지지 않았을 때 나는 에러

해결법

  1. url값을 잘못 써준 경우
    @RequestMapping("url") 부분을 잘 봐보자

  2. @Controller 어노테이션 입력을 까먹었을 경우

  3. servlet-context.xml에서 context:component 태그에 기본 패키지를 제대로 입력하지 않았을 경우
    base-package를 바꾸던지, 매핑된 url을 가지고 있는 컨트롤러를 옮기던지 해야한다.
    https://technote-mezza.tistory.com/62 >>참고 사이트

참고했던 사이트들

[Spring] Spring MVC: Controller return 타입
https://ooeunz.tistory.com/101

[Spring] MVC - 게시판 만들기
https://lhoris.tistory.com/33 >>제일 참고 많이함!
https://norwayy.tistory.com/348?category=872910
https://velog.io/@dbghwns11/Spring-Framework-0
https://kylenoh-developer-note.tistory.com/entry/%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B0-3-7-Spring-%EA%B2%8C%EC%8B%9C%ED%8C%90%EC%9D%84-%EB%AA%A9%EB%A1%9D-%EC%B6%94%EA%B0%80

[Spring] DAO와 Mapper.xml의 쿼리문과의 매핑원리
https://developer-joe.tistory.com/235
https://holybell87.tistory.com/26#.Yd54kVhBw-Q

[Spring] 게시판을 만들고 글을 작성해 DB저장
https://to-dy.tistory.com/65

[Spring]DAO와 Mapper의 차이점
https://twofootdog.github.io/Spring-DAO%EC%99%80-Mapper%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/

[Spring] MVC 구조 Controller service DAO Mapper
https://dalpaeng00.tistory.com/83

[Spring] @Autowired란
https://galid1.tistory.com/512

[Spring] GET/POST Mapping 메서드에 등록된 uri가 같다면..
https://u-it.tistory.com/entry/%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC%EC%9D%98-GETPOST-Mapping-%EB%A9%94%EC%84%9C%EB%93%9C%EC%97%90-%EB%93%B1%EB%A1%9D%EB%90%9C-uri%EA%B0%80-%EA%B0%99%EB%8B%A4%EB%A9%B4-Form-action-uri%EC%83%9D%EB%9E%B5-%EA%B0%80%EB%8A%A5-%EC%8B%9C%EC%9E%91%EA%B3%BC-%EB%81%9D%EC%9D%B4-%EA%B0%99%EC%9D%8C

[Java] HashMap이란 무엇인가?
https://devlog-wjdrbs96.tistory.com/241

[Java] DAO DTO VO 개념차이
https://m.blog.naver.com/cjhol2107/221757079506
https://lemontia.tistory.com/591

[Mysql] Mysql 데이터 타입과 Java 데이터 타입 비교
https://honsal.blogspot.com/2017/04/mysql-java.html

[Mysql] mysql 사용자추가/DB생성/권한부여
https://nickjoit.tistory.com/144

[Mysql] DML명령어(Select, Insert, Update, Delete)
https://saii42.tistory.com/39

[JSP] JSTL 정리, JSP 간단정리
https://velog.io/@ye050425/JSP-JSTL-%EC%A0%95%EB%A6%AC
https://thefif19wlsvy.tistory.com/61
https://forgiveall.tistory.com/575 >>JSP 간단정리

[JSP] JSP 기본 다루기
https://javarayo.tistory.com/20

[Html/CSS] 이미지 가운데 정렬하는 방법들
https://m.blog.naver.com/mathesis_time/221807095356

[Html] 이미지에 ALT 태그 속성값을 반드시 넣어줘야 하는 이유

[Html] input type 종류와 예제
https://coding-factory.tistory.com/24

profile
열쪙 열쪙 열쪙

0개의 댓글