진짜 Spring Boot 시작하기

개발툴을 설치했으면 이제 진짜…
Hello Spring Boot!! 를 찍어보기 위해 달려보자..

좌측의 Create new Spring Starter Project 를 눌러준 후 각 정보 입력 후 Next

 

사용할 라이브러리 선택 후 Finish!!

 

프로젝트에 에러가 발생한다.

프로젝트 우클릭 -> Maven -> Update Maven Project
Force Update of Snapshots/Releases 체크 후 OK 를 눌러준다.

오류가 사라지면

프로젝트 패키지 내에

xxxApplication.java 우클릭 -> Run As -> Java Application 클릭!!

Console창에 정상적으로 실행 된 것을 확인 할 수 있다..

웹 관련 설정을 1도 안한 상태라… (의존성 pom.xml 만 작성)

되는건가… 의구심이 들어 주소창에 입력..

http://localhost:8080

Spring security 를 적용하기 위하여 의존성을 추가해서

Spring security 메인 화면이 나오는 상태인데…

일단.. 서버는 잘 기동이 된 걸로 확인 완료..

View Resolver 나 서버 포트 설정은.. 더 찾아 봐야할듯…

Hello Spring Boot!! 를 찍은게 아니라.. 먼가 찝찝…하네-_-


찝찝하여… spring 공홈에서 searching…

https://spring.io/quickstart

내 비록 영포자(영어포기자..ㅠ)이지만… 이정도는.. 찾아서 할 수 있지 않을까…?

pom.xml 에서 spring security 관련 부분을 모두 주석 처리 후

xxxApplication.java  파일 수정

@SpringBootApplication
@RestController
public class EpApplication {
	public static void main(String[] args) {
		SpringApplication.run(EpApplication.class, args);
	}

	@GetMapping("/hello")
	public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
		return String.format("Hello %s!", name);
	}
}

서버 재시작!!?

서버가 없는데…

Spring Boot 는 뭔가 내부적으로 하는게 많은 것 같다..

설정이 복잡하지 않긴 한데…

 

상단의 위 아이콘 클릭으로 대체 가능!!

 

짜잔~?

Hello World! 가 출력되었다..ㅠㅠ

아? Hello Spring Boot! 를 띄워야하지..

 

완료…

 


총 평가..(?)

확실히… 편하긴 편하다…

처음부터 SpringBoot 를 쓴다면.. 오히려 더 좋을지도…?

다만.. SpringFramework 설정부터 해왔던 내 입장에서는..

편한건 사실…

다만… log 설정방법, 서버설정 등과 같은 세부적인 설정파일?

이 직관적으로 보이지 않기 때문에 다소 난해하다고 느껴지는 것 같다.

 

추가적으로 더 찾아서 설정해야 하는 항목으로는..

log level 이나.. 서버 포트.. 등등 관련 항목은 차근차근 찾아보는걸로…

그리고… return 항목에 jsp 를 받는 부분…

SpringFramework 기준으로 말하면..

ViewResolver 와 관련된 부분등이 있을 것 같다..

 

 

0 글이 마음에 드셨다면 하트 꾸욱~

Spring Boot 시작하기?(Spring Tool Suite 다운로드)

글을 쓰기에 앞서…

다른 블로그나 이런 부분을 참조해볼까 싶어 2~3군데 둘러봤는데…

너무 대충? 경험치를 믿고? 자세히 검색을 하지 않아서 그런지…

Spring Framework와 Spring Boot의 차이라던지…

이런점이 바뀌어서 편하다, 이런게 포함되어있다와 관련된 정보만

본상태로 작성을 하는 것이기 때문에 될지 안될지 확신이 서지 않는다..

그럼 시작 해볼까…

 

Spring Boot 를 하려면… 우선 개발툴?을 다운 받아야한다.

많은 개발자들이 사용하고 있는 이클립스(eclipse) 를 다운 받아도 되지만…

(eclipse 가  사용하지 않는 플러그인이 최소화 되어 있는 것 같아 선호 하는 편..)

 

우선 spring 공홈으로 이동…

https://spring.io/

상단에 Projects -> Spring Tools4 를 클릭한다.

페이지가 넘어가서 보면…

다양한 툴이 존재한다..

  1. Spring Tools 4 for Eclipse
  2. Spring Tools 4 for Visual Studio Code
  3. Spring Tools 4 for Theia

2번과 3번은… 사용해본적이 없기에… 익숙한 Eclipse 기반으로 된 툴을 다운로드

64비트 다운로드(Download)

 

다운로드 한 파일을 더블클릭하면… 압축을 해제한다.

압축을 해제 하면 같은 폴더(다운로드 받은 파일 경로)에 새로운 폴더가 생성된다.

sts-4.6.1.RELEASE(작성하는 시점 기준)

해당 폴더에 들어가보면…

위와 같은 리스트가 보이고… 녹색 박스의 SpringToolSuite4.exe 를 실행하면…

 

실행이 안된다…ㅡㅡ

java가 설치되어 있지만, 환경변수가 잡혀있지 않는 경우인데…

컴퓨터->속성 블라블라~로 설정을 잡아 줄 수 도 있지만

그 방식이 아닌 해당 툴을 기준으로 JAVA경로를 잡아준다.

SpringToolSuite4.ini 파일을 열어준다.

최상단에

-vm
C:/Program Files/Java/jdk1.8.0_111/bin/javaw.exe

를 추가해준다.

여기서 하단의 경로는 jdk8 (JAVA8)이 설치된 경로를 적어주어야 한다.

※ 스프링 부트 1.5.X 까지는 JDK 6과 7을 지원했다. 그러나 스프링 부트 2.0(스프링 프레임워크 5.0 적용) 부터 JDK 8 이상 사용이 강제되었다.

출처 – http://honeymon.io/tech/2019/06/17/spring-boot-2-start.html

 

그리고 저장 후 재실행..!!

 

정상적으로 실행되는 것을 확인 할 수 있다.

 

프로젝트를 시작(관련 파일, 소스)할 경로를 지정해주고 Launch 를 클릭해주면 된다.

 

익숙(?)한 이클릭스 베이스의 작업환경…!!

다음 포스팅은… 실제로.. 위에서 설치한 Spring Tool Suite 에

Spring Boot를 설치하여.. Hello Java!! 를 띄.. 아니.. Hello Spring Boot!! 인가?

2 글이 마음에 드셨다면 하트 꾸욱~!!

사용자 정의 예외처리(Custom Exception)

JAVA에서 발생 될 수 있는 다양한 예외처리..

값이 null 객체에 접근시 발생하는 NullPointException..

숫자가 아닌 문자를 숫자로 변환 시 발생하는 NumberFormatException 등..

JAVA에는 다양한 Exception(예외)이 정의되어있다.

또한 미리 정의된 메시지 역시 있지만..

사용자가 필요에 의해 예외를 정의 할 수 있다.

오류가 발생 한 경우 특정 메시지, 코드 등을 정의 하여 반환 하는 경우라 생각한다.

– 사용자 정의 클래스 생성

public class CustomException extends Exception {
	
	private static final long serialVersionUID = 1L;
	
	Exception exception;
	private String message;
	
	public CustomException(String message) {
		this.message = message;
	}
	
	public String getMessage() {
		if(message != null) {
			return message;
		}else {
			return exception.getMessage();
		}
	}
}

Exception.class 를 상속 받아 작성(message 뿐 아니라 코드, 객체 다양하게 추가하여 사용 가능..

 

– 사용하기..

try {
	TestVO testVO= testService.getTestInfo(key);
	ArrayList<TestVO> testList = testService.getTestList(testVO.getKey());
	
	request.setAttribute("testVO", testVO);
	request.setAttribute("testList", testList);
}catch (CustomException custom) {
	request.setAttribute("message", custom.getMessage());
	return ERROR_PAGE;
}catch (Exception e) {
	request.setAttribute("message", e.getMessage());
	return ERROR_PAGE;
}

위와 같이 작성하고 testVO가  null 이면 CustomException 에서

JAVA 기본 예외가 작동할 줄 알았다..

(Exception.class 상속 받았으니까…)

그러나 아무러 작동도 하지 않을 뿐더라..

생성자에 정의한 message 역시 설정 할 수 없다..

또한 아래와 같은 에러 메시지가 발생한다.

try 구문안에 CustomException 을 사용하는 경우가 없기 때문…

getTestInfo 메소드를 정의한 인터페이스에  throws CustomException을 추가

TestVO getTestInfo(String key) throws ErsException;

실제 서비스에서는 CustomException 을 발생시키고

생성자를 이용하여 오류 메시지를 작성한다.

@Override
public TestVO getTestInfo(String key) throws CustomException {
	TestVO testVO = testMapper.getTestInfo(key);
	if(testVO == null) {
		throw new CustomException("정보를 조회 할 수 없습니다.");
	}
	return testVO; 
}

try 구문 안에 해당 예외처리를 발생(throw new CustomException) 시켜줘야 한다.

 

Service 단에서 객체 null 여부를 체크하여 처리하는 방식..

또한

catch (CustomException custom) {
	request.setAttribute("message", custom.getMessage());
	return ERROR_PAGE;
}catch (Exception e) {
	request.setAttribute("message", e.getMessage());
	return ERROR_PAGE;
}

CustomException 에서 catch 할 수 없는 예외를 위해 JAVA 에서 제공하는

Exception 을 추가로 처리하여 발생 할 수 있는 예외를 처리하여 준다.

 

0 글이 마음에 드셨다면 하트 꾸욱~

@Transaction 어노테이션 설정

처음 @Transactional 어노테이션을 사용할 당시에는 다른분이 설정을 해둔 값을 보지 않고 가져다가 사용만 한 터라…

대충 Service 객체 내에서 여러 CRUD 중 exception 발생한 경우

지금까지 실행한 CRUD 를 모두 rollback 하는 정도로만 알고 사용…

이번에 프로젝트(?)를 설정하면서 무조건 rollback 이 아니라

특정상황에서는 commit 을 해야 되는 경우도 있다는 것을 알게 되었고..

(혼자 상상해보기로는.. log 내역은 에러가 발생해도 남겨야 하니까..?)

삽질한 내역?이 조금 아쉬워서 글로 남김..ㅠ

servlet-context.xml

xml 상단추가
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

<!-- @Transaction 어노테이션 설정 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

 

TestServiceImpl.java

@Transactional
@Override
public JSONObject setCustInfo(HttpServletRequest request) {
	블라블라~
}

@Transactional 에 다양한 옵션 값을 통해 commit, rollback 설정이 가능하며

예외발생한 클래스에 따라 다르게 설정도 가능하다.

 

DB 관련 (dataSource, Mapper 경로 등) context.xml 에 추가하였을 때 작동하지 않았으나..

servlet 관련 설정한 servlet-context.xml 에 설정하니 정상 작동하였다..

아직도 블라블라-context.xml 에 대해 불러오는 방법?

설정되는 순서에 대해 이해가 부족한 것 같다..ㅠ


빠진 부분이 있어서 추가…

servlet-context.xml 에서 추가한 transactionManager에서 proeprty로 사용되는

dataSource 정의

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

 

web.xml (root path 설정)

<context-param>
	<param-name>webAppRootKey</param-name>
	<param-value>ers.root</param-value>
</context-param>

 

web.xml root-context.xml 정의

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

 

root-context.xml
(데이터베이스 속성 관리 파일 정의)

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="/WEB-INF/spring/db.properties"/>
</bean>

 

데이터베이스 접속정보

DB : MSSQL
접속 url : 192.168.0.1
포트 : 1234
DatabaseName : test
접속아이디 : username
접속비밀번호 : password
위와 같을때… 아래와 같이 사용( = 앞부분.. ex : jdbc.driver는 변수로 생각)

jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://192.168.0.1:1234;databaseName=test
jdbc.username=username
jdbc.password=password

 

다시 root-context.xml 로 와서

mapper 관련 xml 정의

<import resource="mapper-context.xml" />

 

mapper-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="${jdbc.driver}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
</bean>

여기서 정의한 dataSource를 참조..!!

0 글이 마음에 드셨다면 하트 꾸욱~