본문 바로가기

스프링boot/정리

Spring MVC) 게시판을 만들어 보자 1

프로젝트가 끝나고 이젠 남은건 취업인데 현실은 쉽지 않은것 같다. 열악한 곳도 요즘은 30대 1은 넘어가는것 같다. 상식적인곳은 200대 1이 기본으로 넘어가고 좋은곳은 말할것도 없겠지... 

 

이력서를 돌리고는 있지만 생각 비우고 싶을때는 공부도 할겸 코딩이 최고인것 같다.

 

예상컨데 아마 많은 국비 수료생들이 수료해도 게시판도 잘 못만들것 같다.(사실 나도 잘 못한다)

 

이 글은 사람들이 나 처럼 개고생 하지 않기를 바라며 어려운 용어 다빼고 최대한 쉽게 설명하며 게시판을 만들어 보겠다. 기초 개념부터 시리즈로 만들것이며 기능을 하나씩 하나씩 같이 넣어보자. (자신이 CRUD는 한다 생각되면 나가야한다 시간낭비다) (백엔드만 만들꺼다)

 

 

우선 기본 설정과 시작하기에 앞서 간단한 설명들만 하겠다.

 

먼저 우리는 MVC패턴을 사용할꺼다. 용어는 사실 필요없다. 인터넷이나 책에서 이런걸 봤을꺼다.

 

 

일단 생각하지 말아라 지쳐서 도중에 포기한다 너무 어렵게 생겼다.

 

우리는 게시판 만드는게 목표다.

 

아래 사이트에 접속해서 spring boot 설정 파일을 다운받자.

https://start.spring.io/

 

 

 

 

선택의 이유

1) 나는 자바 11버전을 사용할것이다(아직 현업에서 8이랑 11을 주로 쓴다고 한다.)

2) 3.0.5 버전은 17부터 지원해서 2.7.10을 선택했다. (괄호 붙어 있는 버전은 개발 미완료 버전이라서 불안정하지니 쓰지 말아라)

3) jar 파일을 사용할꺼다 war 쓰면 무거우며 추가 설정들을 해줘야 한다. 요즘은 타임리프 라는걸 써서 jsp또한 잘 안쓰이는데 jsp 쓸려면 war 선택해야 된다. (사실 쓰는 회사 아직 많음... 그런데 타임리프가 최신이다)

4) gradle 이 maven 보다 훨씬 깔끔하게 작성되고 더 빠르다.

5) Spring Web이 있어야 mvc 패턴및 톰켓 등등 쓸수 있다 그냥 기본값이라 생각하자.

6) JPA로 관계형 데이터베이스 관리 할꺼다.

7) Lombok으로 반복적인 코딩을 줄일수가 있다.

 

설정했으면 GENERATE를 눌러 알집을 다운받고 원하는 경로에 압축해제해라. 그리고 인텔리제이로 오픈하고 실행한번 해봐라.

안될꺼다.

 

이유는 JPA를 추가했는데 없어서 설정 파일이 없어서 충돌난다. yml 파일을 만들어 주자. 그리고 아래 내용을 넣어주자.

 

 

spring:
  h2:
    console:
      enabled: true
      path: /h2

  datasource:
    url: jdbc:h2:mem:test


  jpa:
    hibernate:
      ddl-auto: create # 서버가 실행될때마다 db의 테이블 초기화 및 생성
    properties:
      hibernate:
        format_sql: true
        default_batch_fetch_size: 100 # 페이징 처리에 필요
    open-in-view: false # OSIV 비활성화

logging:
  level:
    org.hibernate.SQL: debug

 

우리는 h2 DB를 사용할꺼다. 서버를 종료하고 다시 키면 DB가 초기화 되어 이것저것 새로 해보기 좋다. 나중에는 딴걸로 바꿀꺼다.

--spring.profiles.active=local을 입력해 주자.(실행 버튼 왼쪽 상자에서 edit 누르면됨) 그러면 h2 따로 안깔아도 http://localhost:8080/h2 입력하면 db접속이 가능하다.

 

그리고 lombok 플러그인을 체크해주자.

 

여기까지하면 이상없이 잘 돌아갈꺼다.(추가 오류 터지면 구글링을 하자 나도 예전에 설정한거라 기억이 다 안날수도 있음)

게시판을 만들기 전에 간단하게 개념만 집고 가자 중요하다 아무리 그래도 이거 정도는 알아야 한다.

 

 

 

 

우리는 Controller, Service, Dto, Repository, Entity 5가지를 이용해서 역할을 나눌꺼다.

 

 

먼저 Service는 실제 프로그램의 로직을 담당하는 녀석이다. 뇌라고 생각하자.

Controller는 Service에서 만든걸 가져오지만 외부 요청에 응답(반응)한다 손과 눈이라 생각하자.

Repository는 DB랑 대화하는 녀석이다. 뭐 DB가 공책이면 이건 필기구라고 하자.

Entity는 DB에 매핑되는 객체인데 쉽게 공책에 뭐 이름쓰는곳 학번 쓰는곳이 설정되는거라고 생각하자.

Dto는 예를들어 Controller에서 Service로 아니면 Service에서 Repository로 등등 서로 데이터 전송할때 사용되는 객체인데 계층간 결합도를 낮춰준다. 쉽게 설명하면 이거 안써도 된다. 그런데 dto 안쓰면 조금만 수정나도 연쇄 폭발할수 있다(안돌아감). 뭐 안전장치라고 생각하자.

 

 

또 CRUD라고 아는가?

 

Create (C): 생성

Read (R): 조회

Update (U): 수정

Delete (D): 삭제

 

생각해보자 우리가 게시판에 글을 쓰고 싶다. 뭘하는가?

 

글 작성하고 등록하겠지 그러면 생성이 필요하고

잘못쓴게 있어? 그러면 수정하겠지

그런데 마음에 안들어 삭제할래 그럼 삭제하는거다

그리고 내가쓴글 확인하려면 조회를 하면 되고.

 

이게 CRUD다. 그런데 우리는 Conroller가 처리하는 녀석이라는걸 알았다. 그리고 우리는 백엔드를 만들고 있는건데 우리가 텔레파시 쏴서 서버안에서만 명령을 처리할수도 없고 실제 화면을 담당하는 프론트엔드랑 연결을 해야될것 아닌가? 그래야 사람들이 클릭도 하고 터치도 하지 이게 Restful Api이며 작동은 프론트에서 쏴준 URL을 백엔드가 받으면 백엔드가 다시 뱉어낸다고 생각해라.

 

 

우리는 약속을 했는데

 

생성할때는 POST를 쓰고

조회할때는 GET을 쓰고

수정할때는 PATCH

삭제할때는 DELETE 라는 명령어를 사용할꺼다.

 

예를들어 프론트엔드가 게시판 목록 보여줘! 라고 말걸때 GET 이라는 방식을 사용해서 백엔드에게 말을 걸어야 한다. (물론 get쓰고 우리가 api주소를 더 지정하는데 나중에 설명할꺼다.)

그러면 백엔드가 미리 설정한 GET과 연결되는 기능을 Controller가 찾아서 여기! 하고 게시판 목록을 보내는거다. 그럼 프론트엔드에서 유저들에게 보여주는거고.

 

여기 까지 기본 설명이였고 다음 게시글에서 POST 만드는것부터 알아보겠다.