스프링 환경 설정 및 주말복습

bitna's study note·2022년 7월 2일

스프링

목록 보기
6/54

7월 2일

어제 컴터와서 자바깔고 이클립스 깔고, 톰캣깔고, 스프링 깔고,오라클DB깔고....
이제 스프링 환경 설정 하고 있음.

스프링 깔고 , encording 모두 UTF-8로 바꾸고, 서버 톰캣9으로 설정 하면 최소한의 설정은 끝

이제 무터는 플젝을 하기위한 설정

1.스프링 초기 환경설정 하기

(1)lombok 다운로드 설정
lombok은 생성자나 getter,setter,toString등 스프링에서 편하게 쓸수 있게 도와줌

(2)Spring legacy project 설정

(3)poom.xml설정
전체 프로젝트의 설계도, 스프링은 기본은 '메이븐' 이다.('그래들'도 '메이븐'이 포함되어있음)
'메이븐' 또는 '그래들'은 뭘까?? 빌더 역할을 하고 있음
프로젝트를 만들때 필요한 API나 라이브러리를 설치해주는 역할을 한다.

건설 현장의 시방서를 쓰듯이 poom.xml설정을 바꿔줘야 한다.

log4j 하단에 현재 필요없는 exclusions 태그와 그밑에 scope까지 지움

위에 부분 설정해 주고 poom.xml->오른쪽 마우스->Maven->update project ->업데이트 됨

(4)lombok Maven Dependencies 설정
https://mvnrepository.com/ 로 가기->lombok 검색->Project Lombok ->버젼선택->Maven 탭 선택(주소복사하기)->poom.xml ->dependencies 닫는 태그 사이에 붙여넣기

(5)test 해보기
poom.xml에 아래와 같이 설정해주고

해당 프로젝트->오른쪽클릭->run as ->Run on Server->톰캣9->finish

인터넷 창이 뜨면 성공

인터넷 창이 뜨는 이유는
src>main>java 에서 com>keduit>controll 의 package 로 가보면 HomeController 클래스가 작성 되어 있음
HomeController 클래스는 자동으로 생성이 되어있음

package com.keduit.controll;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home"; //view 폴더에 home.jsp 로 가서 브라우져에 실행시킴 이것도 스프링이 만들어줌
	}
	
}

2.의존성 주입(DI) 해보기

(1) 클래스 만들기

package com.keduit.sample;

import org.springframework.stereotype.Component;
import lombok.Data; //생성자, toString, getter & setter 를 생성해줌

@Component //스프링아 빈으로 등록해줘
@Data //lombok의 기능을 가져다 쓰겠다.
public class Chef {

}
package com.keduit.sample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import lombok.Data;
import lombok.Setter;

@Component //스프링아 빈으로 등록해줘
@Data
public class Restaurant {
	
	@Setter(onMethod_=@Autowired) //Restaurant 에 Chef를 주입해줘
	private Chef chef;
}

(2) 자바빈 등록 하기
root-context.xml 로 간다.
여기에 Chef 와 Restaurant class를 등록해 줘야 하는데,
root-context.xml에 자동문장완성 기능을 쓰기 위해서는 beans xmlns 이부분에
나 자동문장완성 기능 쓸거야 라고 알려줘야함
=>하단에 Namespaces에서 context 체크설정 하믄됨
=>소스탭으로 다시 돌아가면 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 설정되어 있음
=>소스탭에 <context:component-scan base-package="com.keduit.sample"></context:component-scan>
써줌
com.keduit.sample 해당경로에 가서 @Component 로 쓴걸 찾아서 빈 등록을 해줘!!

(3)test 해보기
src>test>java 로 코드가 잘 작성 되었는지 테스트 해본다.

package com.keduit.sample;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.beans.factory.annotation.Autowired;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class) //SpringJUnit4ClassRunner.class 이클래스로 테스트 할때 쓸거야
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")//테스트 할때 참조를 하는 경로를 적어줌
@Log4j //뷰단에서 화면을 뿌려줄때 log관리는 Log4j로 할꺼야,log.info()를 써줄수 있게 해줌
public class SampleTest {
	
	@Setter(onMethod_=@Autowired)
	private Restaurant restaurant;
	
	@Test
	public void testExist() {
		log.info(restaurant);
		log.info("--------------------------");
		log.info(restaurant.getChef());
	}

}

다 작성후에
해당클래스->오른쪽클릭->run as ->JUnit Test

테스트 해보면 System.out과 log.info는 같은 기능을 하며 스프링에서는 log.info를 쓴다. src>test>java 에서 먼저 코드가 잘 작동하는지 test해보고 잘작동하면 실행코드를 작성 한다.

3.자동 주입

4.JDBC Test 하기
(1)JDBC Test class 작성

package com.keduit.sample;

import static org.junit.Assert.fail;

import java.sql.Connection;
import java.sql.DriverManager;

import org.junit.Test;

import lombok.extern.log4j.Log4j;

@Log4j
public class JDBCTest {
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testConnection() {
		try (Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger"))
		//try에 괄호안에 소스를 넣어주면 close를 안해줘도 됨
		{
			log.info(conn);
		}catch (Exception e) {
			fail(e.getMessage());
		}
	}
}

(2)ConnectionPool 사용하기
https://mvnrepository.com/ 로 가기->HikariCP검색->4.0.3버젼->태그 가져오기->poom.xml 넣기->dependencies 태그 사이에 넣어주기->root-context.xml 아래와 같이 등록하기

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
     <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
     <property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe"></property>
     <property name="username" value="scott" ></property>
     <property name="password" value="tiger"></property>
  	 </bean>
     
   
	  <bean id="dataSource"  class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
	    <constructor-arg ref="hikariConfig"></constructor-arg> //dataSource 빈을 만들때 hikariConfig의 빈을 참고하여 만들거야 라는 의미!!
	  </bean>

스프링은 실행하면 root-context.xml을 먼저 스캔하는데, 이때 위와 같이 빈을 설정해 준걸 체크한다.
스프링은 hikariConfig 빈을 먼저 만들고 constructor-arg ref="hikariConfig" 로 설정해준것 처럼 hikariConfig 빈을 참고하여 dataSource 빈을 만든다.

package com.keduit.sample;

import static org.junit.Assert.fail;

import java.sql.Connection;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class) //SpringJUnit4ClassRunner.class 이클래스로 테스트 할때 쓸거야
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")//테스트 할때 참조를 하는 경로를 적어줌
@Log4j //뷰단에서 화면을 뿌려줄때 log관리는 Log4j로 할꺼야
public class DataSourceTest {
	
	@Setter(onMethod_ =@Autowired)
	private DataSource dataSource;
	
	@Test
	public void testConnection() {
		try(Connection conn=dataSource.getConnection()){
			log.info(conn);
		}catch (Exception e) {
			fail(e.getMessage());
		}
	}
	
}

5.MyBatis 설정하기

(1)https://mvnrepository.com/ 로 가기->MyBatis 와 MyBatis Spring 아래와 같이 poom.xml설정하기

(2)poom.xml에 dependency 설정하기

tx는 트렌젝션 관련 설정이고, jdbc는 스프링 jdbc관련 설정이다.

(3)Sql SessionFactory의 설정
MyBatis가 Sql SessionFactory 객체로 소통을 한다.

(4)test class 작성 하기

package com.keduit.sample;

import static org.junit.Assert.fail;

import java.sql.Connection;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class) //SpringJUnit4ClassRunner.class 이클래스로 테스트 할때 쓸거야
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")//테스트 할때 참조를 하는 경로를 적어줌
@Log4j //뷰단에서 화면을 뿌려줄때 log관리는 Log4j로 할꺼야
public class DataSourceTest {
	
	
	@Setter(onMethod_ =@Autowired)
	private SqlSessionFactory sqlsessionfactory;
	
	
	@Test
	public void testMyBatis() {
		try(SqlSession session=sqlsessionfactory.openSession();
			Connection conn=session.getConnection()){
			log.info(session);
			log.info(conn);
		}catch (Exception e) {
			fail(e.getMessage());
		}
	}
	
}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글