Eggs Sunny Side Up
본문 바로가기
프레임워크(Framework)/SpringBoot

SpringBoot 기본설정

by guswn100059 2023. 6. 15.

프로젝트 생성

 

SpringBoot에서는 ContextPath 안잡음

 

spring boot version은 자바에 매칭해줘야함. or 오히려 더 낮게 매칭. => 2.x.x

3.x.x => java 11 이상부터 매칭

 

라이브러리 미리 로드

[선택사항]

lombook_vo에서 기본생성자, getter/setter 등 자동생성할 때 사용

JPA_mybatis 대체제

Thymeleaf_EL/JSTL 대체제

[필수사항]

Spring Web

Spring devtools

 


현재는 e_Gov에서 프로젝트 설정을 해줬지만 현업에선 아래 화면에서 설정해주는 경우가 많다.


application.properties

Spring에서 

  • Fc를 설정해주는 servlet-context.xml
  • DB와 연결해주는 root-context.xml
  • web.xml

=> 이 3가지를 포함하는 파일

 

src/main/resources

Spring에서 

  • WEB/INF/views/~.jsp

=> 이러한 jsp파일들을 src/main/resources에서 다룬다.

 

why? Spring처럼 사용하고 싶으면 별도로 잡아줘야하는 설정이 너무 많다!!

jsp 사용하는 이유는? --> java code 쓰고 싶어서

Spring boot + Thymeleaf(for FE+BE 소통 원활)

따라서, Spring boot에서는 html 사용!

 

디렉토리 구조

1. resources / static --> css, js(정적)

2. resources / templates --> html


SpringBoot에서 실행하는 방법

 

Boot Dashboard에서 실행시킬거임!


아래와 같은 오류가 뜨면 DB 설정이 없을 때 뜨는 오류!

따라서 DB없는 상황에서 실행하고싶으면 아래 pom.xml에서 JPA 라이브러리 삭제하고 실행!


SpringBoot는 Tomcat서버를 쓰지 않는다.

프로젝트 자체 내부에서 단위로 서버가 내장되어 있다.

따라서 아래와 같이 port번호 오류가 뜨면

application.properties에서 port번호 변경!

 

★application.properties에서 자동완성으로 코드를 작성하고 싶으면

아래와 같이 화면을 열어야 함!!★

# Spring Boot 특징
# 1. 서버가 내장되어 있다.
# --> 서버의 포트번호 변경
server.port=8090

한글로 주석이 되어 있기 때문에 아래같은 오류창이 뜨면 'Save as UTF-8' 을 클릭해주면 됨!


DB연결

SpringMVC DB연결 필요한 라이브러리

- mysql driver

- hikariCP

- mybatis

- mybatis-spring

- spring-jdbc

 

Sprinb Boot에서 필요한 라이브러리

- mysql driver

- JPA

=> 나머지는 Spring Boot 내부에 모두 존재!

=> 라이브러리를 로드하고 나면, Spring boot에서는

     DB연결할거라고 판단해서, 연결설정이 잡혀져있는지 확인

     안잡혀있다면 실행이 안됨!

 

pom.xml

<dependencies>
	<!-- Spring Boots는 자동으로 프로젝트와 호환되는 라이브러리 버전을 가져온다. 
		 : 버전작성 X
	-->
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>
	</dependencies>

 

application.properties

# 2. DB 연결설정
# DBCP(DataBaseConnectionPOOL)
# url, username, password, driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/com
spring.datasource.username=com
spring.datasource.password=com01

mybatis 캐치프라이즈

--> java 코드(인터페이스)와 sql구문(xml)을 분리

--> mapper --> mapping(java와 sql연결)

 

JPA 캐치프라이즈

--> NO SQL(SQL 구문을 쓰지 말자!!)

--> repository

 

SpringBootStartApplication.java

package com.smhrd;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// Springboot 시작점(핵심!)
@SpringBootApplication
public class SpringBootStartApplication {
	
	// @SpringBootApplication
	// --> @Controller 찾기 위해서 SpringMVC component-scan
	// 	   servlet-context.xml에서 별도로 잡아줬음!
	// --> Spring Boot에서는 @SpringBootApplication이라는 annotation이 
	// 	   달려져있는 클래스 파일의 ★하위 패키지★를 자동으로 scan
	
	// 1. 서버가 내장되어있다.
	// 2. application.properties 설정파일을 단순화
	// 3. component-scan 기능을 자동으로 수행
	// 	  (반드시 start application보다 하위에 위치)

	public static void main(String[] args) {
		SpringApplication.run(SpringBootStartApplication.class, args);
	}

}

 

Board.java => Entity

package com.smhrd.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity // --> javax.persistence 사용하기!
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Board {
	// JPA 필수요소 --> table의 자료를 담을 수 있는 나만의 자료형
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private int num;
	private String title;
	private String writer;
	private String content;
	private Date indate;

}

 

application.properties

# 3. JPA 설정
# NO SQL --> sql구문 만들 때 mysql 기반으로 sql 구문 만들어라
# (1) 어떤 DBMS 문법을 사용할 건지 --> 필수
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
# (2) DDL --> create, alter --> 의미 : 서버가 재시작 할 때마다 어떤 DDL 실행할건지
# Entity(VO) 기준으로 table 생성 : create
# Entity(VO) 기준으로 table 수정 : update
spring.jpa.hibernate.ddl-auto=update
# (3) 선택사항 : JPA가 만든 sql 구문 보여줘
spring.jpa.show-sql=true
# (4) 선택사항 : SQL구문 보여줄 때 예쁘게 보여줘
spring.jpa.properties.hibernate.format_sql=true

 

BoardController.java

package com.smhrd.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.smhrd.entity.Board;
import com.smhrd.repo.BoardRepository;

@Controller
public class BoardController {
	
	@Autowired
	private BoardRepository repo;
	
	@RequestMapping("/")
	public String getBoard() {
		// 1. DB에서 데이터 조회하기
		List<Board> list = repo.findAll();
		// select * from board;
		// 기본적인 CRUD 전부 메소드가 내장
		// 복잡한 SQL 구문을 쓰고 싶으면 JPA 문법에 맞춰서 SQL 구문을 생성
		
		// 2. 결과값을 model에 담아서 board.html에 보내주기
		
		// SpringMVC --> WEB/INF/views/index.jsp --> index
		// Springboot --> resources/templates/board.html --> board
		
		return "board";
	}
}

 

BoardRepository.java

package com.smhrd.repo;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.smhrd.entity.Board;

@Repository // --> scan가능하도록 annotation 달아줘야함!
			// Spring은 버전업으로 @Mapper가 생략가능하지만, 
			// SpringBoot에서는 무조건 필수!
// 인터페이스 구현할 때 상속은 implements를 사용하지만
// Spring boot에서는 extends를 사용함.
// JPA 사용하기 위해서 필요한 것
// 1. table을 표현할 수 있는 자료형(Board)
// 2. Repository가 JPARepository를 상속받을 수 있게 제작
// --> JPARepository는 interface지만, 상속받을 때 extends 키워드를 쓰기로 약속
public interface BoardRepository extends JpaRepository<Board, Integer>{
	// DAO역할, Mapper역할
	// mybatis에서는 interface -mapping- xml : Mapper라는 이름 부여
	// JPA에서는 xml이 없다! (NoSQL) --> Repository(DB/저장소)
	
	// board테이블에서 작성자가 김운비와 같은 데이터를 조회
	// --> 메소드 생성 --> JPA가 SQL 구문 생성
	public List<Board> findBoardByWriter(String writer);
	// --> select * from board where writer = '#{writer}'
	// 규칙
	// find + 테이블명 + By + 기준컬럼 + And(Or)
	// --> 반드시 Camel식 기법 사용하기!
	

}

 

댓글