pooney
article thumbnail
Published 2020. 5. 14. 19:44
Spring boot 프로젝트 생성 Spring boot

Spring boot

 

Spring을 이용하여 개발하려면 톰캣 설치를 시작으로 여러 가지 복잡한 설정을 해야한다. 그러나 애너테이션기능이 강화되면서 점차 웹 어플리케이션도 일반 응용 프로그램을 개발하는 방식으로 바뀌기 시작했다. 이것바로 스프링 부트이다. 스프링부트는 의존성관리가 용이할 뿐만 아니라 배포 와 테스트 역시 스프링프레임워크보다 쉽고 빠르게 할 수 있다. 스프링 부트로 개발하면 메이븐의 라이버러리 자동 업데이트 기능을 이어받을 수 있을 뿐만 아니라 기존 스프링 프레임 워크의 복잡한 설정 과정을 최대한 줄일 수 있어 편리하다. 

 

스프링부트의 장점 

  • 일반적인 응용 프로그램을 실행하는 수즌으로 스프링 어플리케이션을 구현 할 수 있다.
  • 프로젝트 환경을 구축할 때 필요한 톰캣, Jetty, UnderFlow 같은 서버 외적인 툴이 내장되어 있어 따로 설치할 필요가 없다 
  • xml 기반 설정이나 코드 없이 환경 설정을 자동화 할 수 있다. 
  • 의존성 관리를 쉽게 자동으로 할 수 있다.

 

 

 

 

Spring boot 프로젝트 생성하기

 

1. 마우스 우클릭 후 Spring Starter Project를 선택한다 

 

 

 

 

 

2.  Name과 Group을 지정하여 패키지명을 정한다. 이때 pakaging을 war로 변경을 해야한다 배포할때 war로 배포를 할꺼기 때문이다.

 

 

 

 

 

 

 

3. selected에 선택된 항목을 추가한다. Available이 입력하여 찾아도 되고 항목을 선택해서 찾아도된다. 이과정을 하는것은 기존에 pom.xml에 넣는 작업을 미리 수행하는것 이라 보면된다. 또한 DevTools를 넣는 이유는 내장되어있는 톰이 auto reload 되게 만들기위해서 추가한것이다. Finish를 클릭하여 프로젝트를 생성한다. 

 

 

 

 

 

 

 

4.  프로젝트 항목 

 

static

HTML , CSS , 이미지 등 스태틱한 파일이 올라간다

 

templates

Thymeleaf 템플릿이 올란간다

 

aplication.propertis 

servlet-context, root-context 와 같은 프로젝트 전체와 관련된 기능을 설정한다 key, value로 구성되어있기때문에 심플하고 가볍다.

 

BootexApplication 

main 메소드를 가지고 있는 클래스 프로젝트를 실행하면 main메소드가 실행된다. 그럼으로 반드시 존재해야하는 한다.  이는 스프링 부트의 웹 어플리케이션을 일반 자바 어플리케이션 처럼 개발하려고 하기 때문이다.

 

 

ServletInitializer 

SpringBootServletInitializer 클래스를 상속받는다. 스프링 부트 어플리케이션을 web.xml 없이 톰캣에서 실행하게 해준다. 

 

webapp

일반적인 jsp파일들이 올라온다 sping의 경우 view가 있었지만 spring boot의 경우 jsp를 사용할 일이 적기 때문에 없다. 

 

 

 

 

 

 

 

 

5.  aplication.propertis 에 아래의 코드를 삽입 

 

 

#server
server.port=9090
server.session.timeout=360000

#db연결 
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/bootex?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=12345

#데브옵스와 타임리프 설정
spring.devtools.livereload.enabled=true
spring.thymeleaf.cache=false

 

 

 

 

6. 정상적으로 실행이 되는지 jUnitTest 실행 

 

 

 

 

BootexApplicationTests

 

package com.example.demo;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.sql.DataSource;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
class BootexApplicationTests {
	@Autowired
	private DataSource ds;

	@Test
	public void testDataSource() throws Exception {
		System.out.println("DS=" + ds);
		try (Connection conn = ds.getConnection()) {
			System.out.println("Cooooooooonn=" + conn);
			assertThat(conn).isInstanceOf(Connection.class);
			assertEquals(100, getLong(conn, "select 100"));
			assertTrue( 100 >  getLong(conn, "select count(*) from user"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private long getLong(Connection conn, String sql) {
		long result = 0;
		try(Statement st = conn.createStatement()){
			ResultSet rs = st.executeQuery(sql);
			if(rs.next()) {
				result = rs.getLong(1);
			}
			
		}catch(Exception e) {
			e.printStackTrace();
			
		}
		return result;
	}

	@Test
	void contextLoads() {

	}

}

 

 

 결과 

 

 

 

 

 

 

 

7.  controller 생성 

 

 

 

HelloController

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
	
	@RequestMapping("/hi")
	public String hello() {
		
		return "Hi pooney 오신걸 환영합니다.";
	}

}

 

 

 

JUnitTest 

 

 

HelloControllerTest

 

package com.example.demo.controller;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;

@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerTest {
	
	//MockMvc  브라우저없이 가상의 request를 만든다 .
	@Autowired
	MockMvc mock; 
	
	
	@Test
	public void testHello() throws Exception {
		
	//첫번째 테스트방법	
	//.perform은 수행해라  get은 요청방식 ex)post, get	
	mock.perform(get("/hi"))
	//정상적으로 응답하면 통과 
	.andExpect(status().isOk())
	//content는 Hi ponn~~~랑 같으면 통과 
	.andExpect(content().string("Hi pooney 오신걸 환영합니다."));
	
	
	//두번째 테스트방법 (첫번째 와 두번째 모두 같다) 
	MvcResult result = mock.perform(get("/hi"))
	.andExpect(status().isOk())
	.andReturn();
	assertEquals("Hi pooney 오신걸 환영합니다.", result.getResponse().getContentAsString());
	assertThat(result.getResponse().getContentAsString()).isEqualTo("Hi pooney 오신걸 환영합니다.");
	System.out.println("RRR>>" + result.getResponse().getContentAsString());
	
	
	}
}

 

결과 

 

 

 

 

 

 

 

 

 

8. 프로젝트 실행  (실제로 BootexApplication.java 의 메소드가 실행되는 것이다 )

 

 

 

Run As  -> Spring Boot App 클릭

 

 

 

 

 

 

브라우저창에  localhost:9090/hi/입력 하면 아래와 같은 결과를 출력한다.

 

 

 

profile

pooney

@pooney

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!