IDE에 Spring Boot 설치 및 설정 관련 사항은 별도 설명 없이 프로젝트 생성 부터 설명이 진행한다.

 

1. Spring Boot 프로젝트 생성하여 아래와 같은 Dependencies를 추가 한다.

* JDBC API
* Spring Data JPA
* Spring Data JDBC
* Rest Repositories
* Rest Repositories HAL Browser

2. Depdependency 내용

Gradle - Build.gradle 

plugins {
	id 'org.springframework.boot' version '2.2.4.RELEASE'
	id 'io.spring.dependency-management' version '1.0.9.RELEASE'
	id 'java'
}

group = 'com.demo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-data-rest'
	implementation 'org.springframework.data:spring-data-rest-hal-browser'
	compile 'mysql:mysql-connector-java'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

test {
	useJUnitPlatform()
}

maven - Pom.xml

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-rest</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-rest-hal-explorer</artifactId>
		</dependency>

		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<scope>runtime</scope>
		</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>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

3. 기본 게시판 Entity 내용

/* com.demo.back.entity>Board.java */ 
package com.demo.back.entity;

import java.time.LocalDate;

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

@Entity
public class Board {
	
	@Id
	@GeneratedValue
	private Long seq;
	
	@Column
	private String title;
	
	@Column
	private String context;
	
	@Column
	private LocalDate uptDt;
	
	@Column
	private LocalDate regDt;

	.... getter & setter ...
}

4. 레파지토리 연계 리소스

/* com.demo.back.repository > BoardRepository.java */

package com.demo.back.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import com.demo.back.entity.Board;

@RepositoryRestResource(collectionResourceRel = "board", path = "board")
public interface BoardRepository extends JpaRepository<Board, Long>{
}

5. application 설정 파일

/* src/main/resources/application.properties */

server.port=8000

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/simpleBoard?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=simpleBoard
spring.datasource.password=simple

spring.data.rest.base-path=/api
spring.data.rest.default-page-size=10

spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true

6. 외부에서 접근 가능 하게 Header 정보 변경

/* com.demo.back.common > CORSFilter.java */
package com.demo.back.common;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;

@Component
public class CORSFilter implements Filter {
	
	@Override
	public void init(FilterConfig fileterConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "*");
        filterChain.doFilter(servletRequest, servletResponse);
    }
	
	@Override
	public void destroy() {
		
	}
}

7. 구동 후 http://localhost:8000/api/ 접속 하면 위 Dependencies 했던 Rest Repositories HAL Browser 가 실행하여 테스트 할 수 있습니다.

1. 이클립스와 JDK Bit가 틀린 경우 발생되면 아래와 같은 화면의 다이어 로그 상자가 출력을 확인 할 수 있습니다.

해결 방안 : 이클립스와 JDK 비트를 64Bit 또는 32Bit 동일한 것으로 변경 후 실행.

 

2. JDK를 찾지 못하는 경우 아래와 같은 에러창을 확인 하실 수 있습니다.

해결 방안 : 

  • JDK 설치가 안되었을 경우 - JDK 설치 여부를 확인.
  • 이클립스가 원하는 JDK 버전이 설치 되어 있지 않을 경우 - 해당 이클립스의  JDK 버전을 사이트에서 확인 후 JDK 설치.
  • 이클립스가 JDK보다 먼저 설치 되었을 경우 - 이클립스 설치 폴더에 eclipes.ini 파일을 열어 맨 하단에 아래와 같이 JDK 설치 부분을 설정 해준다.
-vm 
[JDK 설치 경로]\bin\javaw.exe

1. 이클립스 실행

2. 자신의 원하는 워크스페이스(Workspace)를 선택

3. 이클립스 첫 Welcom 화면

-  JDK 설정

1. 상단에 [Window]-[Preferences]를 클릭.

2. JDK 설정을 하기 위에 [Java] - [Installed JREs]를 선택 후에 [Add] 버튼을 클릭.

3. 아래 캡쳐 화면에서 [Standard VM] 선택 후 다음.

4. [Directory...] 버튼 눌러 JDK 설치 폴더를 지정하면 아래와 같은 JRE 시스템 라이브러리가 추가되는걸 확인.

- 서버 설정

1. 상단에 [Window]-[Preferences]를 클릭.

2. [Server] - [Runtime Environments] 클릭후에 [Add] 버튼 클릭

3. JRE에 위에 설정한 JDK를 선택

5. Tomcat installation directory에 [Browse...]버튼을 클릭하여 톰켓 설치한 폴더를 지정 후 [Finish]버튼 클릭.

 


Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent!

에러로그에 위와 같은 내용이 보인다면 pom.xml 을 열고 properties에 아래 내용을 추가 한다.


<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

밑에 이미지는 교과서 처럼 보는 Java 책에서 많이 다루는 이미지 입니다. 

아주 간단 명료하게만 정리 해놓은 과정입니다. 

요새 많이 사용되는 메이븐(Maven) 처리 과정 포함하여 설명을 다루고자 합니다.

다들 아시겠지만 1번 과정에선 컴파일이 이루어지면서 자바 소스(Java Source)파일들을 즉, 프로젝트 하위 (/src/main/java) 파일들을 컴파일(Compile)하여 이클립스를 사용한다면,

workspace의 \.metadata\.plugins\org.eclipse.wst.server.core 위치에 프로젝트별로 컴파일 소스를 우선 떨구게 될겁니다. 

그러나 이전에 하는 일이 있죠. 우리가 사용 되고 있는 메이븐(Maven)의 소스들과 설정파일들을 우선 처리하여 파일들을 이동 시켜 놓습니다.

그래서 이전 게시물에 올렸던 메이븐(Maven) pom.xml에서 분기를 처리하여 globals 프로퍼티 파일을 사용 할수 있는 겁니다.


이 내용은 교육 기관이나 이런 곳에선 제가 공부 하다가 딴짓을 했거나 해서 못들었거나? 아니면 그떄는 이해를 못했지만 요새 설명을 귀에 쏙쏙 잘 들어 오게 해주셔서 다시 적습니다.


이렇게 1번의 과정이 끝이 납니다. 이후 2번 과정은 간단합니다. 리소스(Resource) 파일을 가져오고 webapp에 있는 내용들을 가져와서 인터프린터 방식으로 사용자에게 출력을 해줍니다.



+ Recent posts