Spring Boot 시작하기

개발일지·2022년 2월 21일

Spring Boot

목록 보기
1/2



새로운 프로젝트 생성

File - New - Spring Starter Project



pom.xml에 dependency 추가

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.6.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>sample01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sample01</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</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-web</artifactId>
		</dependency>
		
		<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-tomcat</artifactId>
		</dependency>
		
		<dependency>
	          <groupId>com.fasterxml.jackson.core</groupId>
	          <artifactId>jackson-core</artifactId>
	          <version>2.10.1</version>
	      </dependency>
	      <dependency>
	          <groupId>com.fasterxml.jackson.core</groupId>
	          <artifactId>jackson-databind</artifactId>
	          <version>2.10.1</version>
	      </dependency>
			
			<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-jdbc</artifactId>
			</dependency>
			
			<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>2.2.0</version>
			</dependency>
			
			<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis-spring</artifactId>
    			<version>2.0.6</version>
			</dependency>
			
			<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>3.5.9</version>
			</dependency>
			
			<dependency>
    			<groupId>com.oracle.database.jdbc</groupId>
    			<artifactId>ojdbc6</artifactId>
    			<version>11.2.0.4</version>
			</dependency>
	
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>



application.properties에서 포트번호와 DB연결을 설정해준다.

# port number setting
server.port=3000

# DB setting
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:xe
spring.datasource.username=hr
spring.datasource.password=hr

해당 설정은 오직 Oracle 사용 시에만 해당된다.



Application 클래스가 존재하는 패키지에 DatabaseConfig를 생성해준다.


import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

@Configuration
public class DatabaseConfig {
	
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		System.out.println("DatabaseConfig sqlSessionFactory");
		
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		
		Resource arrResouce[] = new PathMatchingResourcePatternResolver().getResources("classpath:sqls/*.xml");
		sqlSessionFactoryBean.setMapperLocations(arrResouce);
		sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
		
		return (SqlSessionFactory)sqlSessionFactoryBean.getObject();
	}
	
	@Bean
	public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
	
}



Application 클래스가 존재하는 패키지에 WebConfig 클래스를 생성해준다.

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addCorsMappings(CorsRegistry registry) {
		// TODO Auto-generated method stub
		// WebMvcConfigurer.super.addCorsMappings(registry);
		
		// registry.addMapping("/**").allowedOrigins("http://localhost:8090");
		registry.addMapping("/**").allowedOrigins("*");
	}

}



Dto를 생성한다.

public class MemberDto {
	
	private String id;
	private String pwd;
	private String name;
	private String email;
	private int auth;
	
	public MemberDto() {
		
	}

	public MemberDto(String id, String pwd, String name, String email, int auth) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
		this.auth = auth;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public int getAuth() {
		return auth;
	}

	public void setAuth(int auth) {
		this.auth = auth;
	}

	@Override
	public String toString() {
		return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", auth=" + auth + "]";
	}

	
	
	
}



Mapper를 생성한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="mul.camp.a.dao.MemberDao">

	<select id="allMember" resultType="mul.camp.a.dto.MemberDto">
		SELECT * FROM MEMBER
	</select>
	
</mapper>

기존 sts와는 다르게 namespace를 자세한 경로로 명시해줘야한다.



DAO를 생성한다.

@Mapper
@Repository
public interface MemberDao {
	
	public List<MemberDto> allMember();
}

이제는 더이상 Interface를 선언하고 상속받은 클래스를 따로 안 만들어줘도 된다. DAO에는 @Mapper, @Repository 어노테이션을 함께 추가해준다.



Service를 생성한다.

@Service
@Transactional
public class MemberService {
	
	@Autowired
	MemberDao dao;
	
	public List<MemberDto> allMember() {
		return dao.allMember();
	}
}

Service에는 @Transactional 이라는 어노테이션이 추가되었다.



Controller를 생성한다.

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import mul.camp.a.dto.MemberDto;
import mul.camp.a.service.MemberService;

@RestController // @Controller + @ResponseBody -> Restful
public class HelloController {
	
	@Autowired
	MemberService service;

	@RequestMapping(value = "/base", method = RequestMethod.GET)
	public String base() {
		System.out.println(" HelloController base()");
		return "base";
	}
	
	@RequestMapping(value= "/connParamGet")
	public String connParamGet(String title) {
		System.out.println("HelloController connParamGet()");
		System.out.println("title :" + title);
		
		return "통신성공";
	}
	
	@RequestMapping(value= "/getMember")
	public MemberDto getMember() {
		System.out.println("HelloController getMember()");
		
		MemberDto dto = new MemberDto("abc", "123", "AAA", "aa@naver.com", 1);
		
		return dto;
	}
	
	@RequestMapping(value= "/getMemberList")
	public List<MemberDto> getMemberList(){
		System.out.println("HelloController getMember()");
		
		List<MemberDto> list = new ArrayList<MemberDto>();
		list.add(new MemberDto("abc", "123", "AAA", "aa@naver.com", 1));
		list.add(new MemberDto("bcd", "234", "BBB", "bb@naver.com", 2));
		list.add(new MemberDto("cde", "456", "CCC", "cc@naver.com", 3));
		
		return list;
	}
	
	@RequestMapping(value= "/dbTest")
	public List<MemberDto> dbTest(){
		System.out.println("HelloController dbTest()");
		
		List<MemberDto> list = service.allMember();
		
		return list;
	}
}

기존 sts에서는 @Controller와 @ResponseBody를 따로 선언해줘야했지만 SpringBoot에서는 @RestController라는 어노테이션 하나로 AJAX 비동기처리가 가능해졌다.



DB연동은 이클립스에서 새로운 워크스페이스를 생성한 후 Oracle 11로 ojdbc6.jar가 존재하는 경로를 찾아 기존에 생성했던 데이터베이스 계정으로 접속해서 다시 연결해주었다.






0개의 댓글