본문 바로가기

spring boot를 이용한 게시판

spring boot 프로젝트 생성하기

정말 슬프게도 인텔리제이내에서 spring boot 프로젝트를 생성할 수 없다

유료버전은 가능한것같더라

그래서 spring 페이지에서 프로젝트 초기 설정을 한 프로젝트를 다운받아와서 인텔리제이에서 열어야한다.

https://start.spring.io/

위에 링크로 들어가면 요새는 gradle로 groovy언어나 kotlin언어로만 코딩하나보다 그냥 gradle만 있던게 없어졌다

하는 수 없이 java와 유사한 groovy로 프로젝트 생성하고 java언어 선택한다.

 

이제 spring boot를 선택해야하는데 최신버전인 좋은 게 아니였다

 java JDK 11버전을 쓰면서 3.xx버전은 호환 되지 않는다 내가 해봤더니 17버전!17버전!이러면서 에러가 떴었다.

자신의 JDK버전에 맞추어 spring boot버전을 선택하자

java JDK 11 - spring boot 2.xx버전과 호환되고 

java.JDK 17 - spring boot 3.xx버전과 호환된다.

괄호 안에 snapshot이라고 되어있는 것도 있는데 이것은 spring boot에서 새로운 기능을 실행해보려고 만든 실험버전이다.

나는 안정적인 버전인 2.7.8버전을 선택했다.

 

packaging은 jar로 해준다.

war vs jar

https://jeongkyun-it.tistory.com/126

 

[Spring Boot] JAR / WAR 배포는 무엇으로 결정할까? (개념 / 특징 / 차이점)

서론 이번 글에서는 jar와 war가 각자 갖고있는 특징이 있고 상황에 맞게 배포를 해야하는데 이 부분에 대해 정리를 해보려한다. ** 필자는 SpringInAction5의 책을 참고하여 작성했다. JAR는 언제 쓰일

jeongkyun-it.tistory.com

jar는 JRE만 있으면 실행가능하고 모든 자바기반을 클라우드 플랫폼에서 실행가능하다.

spring boot는 내장 톰캣을 포함하고 있기 때문에 jar로만 배포 가능하다.

단 jar에서는 jsp지양

 

war는 기존의 자바 애플리케이션 서버 환경에서 배포할때 사용한다.

war는 따로 돌아갈 톰캣과 같은 외부 서버가 필요하다.

특정 웹컨테이너의 구조에 맞게 실행된다.

 

 

 

이제 의존성을 추가 해야한다.

add dependencies를 선택해서 spring web, jpa, mariaDB, thymeleaf, lombok을 추가해준다.

thymeleaf는 서버에서 수행한 결과를 보여주는 html,프론트엔드를 관리하는 view부분이다.

generate를 눌러서 board.zip파일을 내려 받은후 압축을 푼 폴더를 이제 인텔리제이에서 열면된다.

나는 spring-workspace라는 폴더를 c드라이브에 만든후 그 아래에 board라는 폴더를 옮긴후 인텔리제이에서 열었다.

인텔리제이에서  open을 클릭해서 board를 열어준다.

이제 쭉 다운로드 되면서 프로젝트가 설치된다 그리고 한번실행해본다.

board>src>java>boardApplication을 실행한다.

실행했을때 콘솔창에 database에 연결되어있지 않는다는 오류만 뜨면 된다.


DB연결

mariadb에 연결한다.

application.properties로 들어가서 DB설정을 해준다.

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mariadb://localhost:3306/board

이렇게 적어 넣은뒤 실행했는데 이미 사용중인 포트라고 뜨면서 에러가 난다면

server.port=8090

8080포트가 사용중이여서 에러가 나는 것이므로 8090포트로 서버포트번호를 변경해서 실행해준다.

포트번호는 TCP나 UDP에서 컴퓨터 내에서 실행중인 프로세스를 구별하기 위해 배정하는 번호이다.

ex)

데이터를 주고 받기 위해서 프로세스가 실행을 하여 돌아가고 있는 중에 이제 내 컴퓨터에 결과물이 도착했다 근데 내 컴퓨터에서 돌아가고 있는 결과물을 기다리는 중인 프로세스는 4개이다. 이때 서로 각각을 구별하여 정확하게 전달해야 정상 작동할 수 있으므로 프로세스별로 포트번호를 부여하여 관리하는 것이다. 

포트번호가 없다면 짜장면을 시킨 사람에게 짬뽕이가고 짬뽕시킨 사람에게 탕수육이 가고 탕수육시킨 사람에게 짜장면이 갈 수 있기 때문이다.

started가 떴다면 정상이다.

크롬에 접속해서 localhost:8090이라고 쳤을때 이런 화면이 나온다면 성공이다.

에러가 뜨는 것은 당연하다 루트일때 어떠한 화면을 출력해 줘야할지 설정하지 않았기 때문이다.

이제 com.study.board밑에 Controller라는 폴더를 하나 만들고 boardController라는 java파일을 생성해준다.

boardController에 들어갈 내용

package com.study.board.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BoardController {
    @GetMapping("/")
    @ResponseBody
    public String main(){
        return "hello world";
    }
}

어노테이션(@)은 이 파일의 역할을 알려주는 담당한다는 것을 알려준다.

@GetMapping("/")은 url의 주소가 루트이거나 아무것도 없을 때  실행하는 로직임을 알려준다.

@ResponseBody는 클라이언트의 요청으로 서버가 실행되어야할 로직임을 지정한다.

return "hello world" 는 아까는 빈페이지 였던 웹페이지에 hello world를 띄운다.

 

웹브라우저를 재실행해서 이 화면이 뜨면 정상이다.