본문 바로가기

KOSTA

2021-05-24(월) kosta - 스프링 부트 수업 1일차

728x90

오늘부터 스프링 부트에 대해 알아보도록하겠다. 스프링 부트를 원래 사용하던 개발 툴인 Eclipse에서도 사용가능하지만 현재 지금까지 여러 프로젝트와 파일이 설치된 Eclipse는 무겁기 때문에 새롭게 STS를 실행하여 스프링부트를 실행하고자 한다.

 

만약 Eclipse에서 스프링 부트를 사용하고자 한다면 아래사진처럼 Eclipse Marketplace로가서 설치를 해서 사용하면 된다. 우리는 먼저 STS를 이용해서 설치해보고 안되면 Eclipse에서 스프링부트를 사용하도록 하겠다.

 

*스프링부트 사용하는 방법*
1.eclipse에서 plugin설치하기
2.별도의 spring tool 로 짜기(sts)

현재 실습하는 환경은 아래와 같다. SPRING-TOOL-SUITE는 JDK, Tomcat이 내장되어있다.

스프링부트의 동작원리는 아래와 같다.

 

강사님이 알려주신 아래 주소에서 Spring-tool-suite를 다운로드하였다.

아라 zip파일을 C아래에 압축을 풀었다.

 

 

압축을 풀었던 STS를 실행해준다. C드라이브 밑에 압축을 풀어주었기 때문에 c드라이브 밑에 sts-4.8.1.RELEASE가 있다.

실행을하면 Workspace를 만들라고나온다. 역시 C밑에 생성하였다. 우리는 workspace이름을 workspace-spring_kosta라고 만들었다.

open perspective를 눌러서 Java EE를 Open해주었다.

앞서 이야기 했던 것처럼 Springboot는 Tomcat을 내장하고 있기 때문에 별도 Server를 연결해주지 않는다.

creat new spring starter project를 누른다음 아래철머 세부적인 부분을 설정해주었다. Next를 누른다.

아래와 같은 화면이 나타난다. 여기서 선택하면 pom.xml에 dependency로 들어간다. 참 편리하다.

아래 4가지를 추가해주었다.

-Lombok : 코드를 줄여준다. getter,setter,toString,arguments 등..

-Spring Boot DevTools : 자동으로 서버를 시작해준다. 우리가 매번 서버 스타트를 안해줘도 된다.

-Spring web: web도 추가해준다.

-Thymleaf: Thymeleaf를 사용하면 el등을 사용할 수 있다.

그리고 마지막으로 Finish해준다.

 

위에 설정했던 것들을 아래와 같이 pom.xml에서 확인할 수 있다.

위에 사진을 보면 다운로드가 진행중이다. 다운로드가 끝나면 아래 사진처럼 보일 것이다. 

아래 사진의 sbprojectApllication.java가 프로젝트 시작점이다.

pom에 들어있는 dependency를 정리한 내용은 아래와 같다.

lombok을 사용하기 위해서 dependency에 넣어주었지만 여기에 추가로 lombok을 설치해주어야한다.

위 사이트에서 다운로드 한다.

그러면 아래와 같이 jar파일 생겼을 것이다. 아래 jar파일을 실행해보자.

그러면 아래와 같이 실행화면이 보일것이다. Specify location을 눌러서 우리가 설치한 sts폴더로 찾아가준다.

 

본인은 C:\sts-4.8.1.RELEASE 여기에 파일을 두었으므로 sts-4.8.1.RELEASE폴더까지 열고 클릭한다. 

그러면 빈 창에 sts와 lombak을 설치할 수 있게 뜰것이다.  그러면 install/update를 하면된다.

 

 

install을 완료하면 아래 사진처럼 lombok.jar가 들어간것을 확인할 수 있다.

본격적으로 테스트를 하기전에 com.kosta.sbproject패키지 안에 com.kosta.sbproject.controller,com.kosta.sbproject.model,com.kosta.sbproject.service를 만들었다.

그리고 CarVO를 아래처럼 만들어주었다. getter나 setter 생성자를 별도의 메서드로 만들지 않고 lombok이 알아서 만들어 줄 수 있도록 @(어노테이션)을 사용했다.

테스트를 위해서 sbprojectApplicationTests.java파일을 열고 아래처럼 코드해주었다.

최종적으로 아래처럼 코드해서 테스트해보았다. lomboktest2는 아래 new를 사용하지 않고 객체를 생성하는 방법이다. 참고하도록 하자.

package com.kosta.sbproject;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import com.kosta.sbproject.model.CarVO;

import lombok.extern.java.Log;

//JUNIT
@Log
@SpringBootTest
class SbprojectApplicationTests {

	@Test
	public void lombokTest2() {
		CarVO car1= CarVO.builder()
				.model("아이오닉")
				.price(4000)
				.company("현대").build();
		log.info(car1.toString());
	}
	
	
	//@Test
	public void lombokTest1() {
		CarVO car1 = new CarVO();
		CarVO car2 = new CarVO("abc모델", 4000,"기아");
		CarVO car3 = new CarVO("DDD모델","기아");
		CarVO car4 = new CarVO("DDD모델","기아");
		System.out.println(car1);
		System.out.println(car2);
		System.out.println(car3);
		System.out.println(car2.getModel());
		System.out.println(car1.equals(car2));
		System.out.println(car3.equals(car4));
		
	}
	
	
	
	@Test
	void contextLoads() {
	}

}

 

 

아래처럼 JUnit Test를 실행해서 테스트 해보면 된다.

아래 CarVO를 만들때 @Getter, @Setter..등등을 사용했지만 @Data하나만 사용할 수 있다.

아래처럼 @Data하나만 사용할 수 있다.

*참고로 springFramework도 junttest가 가능하지만 우리는 sts에서 실행해보았다.

 

이번에는 test가 아니라 아래 처럼 spring boot를 실행해보도록 하겠다. 그런데 여기서 문제가 있다.

 

DB가 포트번호 8080을 사용하고 있으므로 포트번호를 바꿔줘야한다.

 

아래처럼 application.properties에서 server-port를 다르게 넣어주면 된다.

 

-----------------------------------------------------------------------------------------------------------------------------

 

controller2 패키지를 만들어서 아래에 Controller를 만들었다.

sbproject의com.kosta.sbproject.controller에 있는게 아니라 다른패키지에 있다면component를 추가해서실행해주면 잘된다.

아래처럼 잘 실행되는 것을 확인할 수 있다.

추가로 다른 패키지에 있는 것을 사용하려면 아래 처럼 옆에 추가해주면 된다.

--------------------------------------------------------------------------------------------------------

브라우저 창에서 실행할때 별도의 url내용을 적어주고 싶다면 아래처럼 만들면 된다. 아래 처럼 적으면 다른 것에 접근할때 myapp/test1이런 식으로 접근해야한다.

실행하면 아래와 같다.

그러나 원래대로가 좋기때문에 원상복귀시켰다.

----------------------------------------------------------------------------------------

아래처럼 테스트를 해보았다. 페이지에서 json으로 해당 내용을 잘 표시하는것을 확인했다.

----------------------------------------------------------------------------------------------------------------------------------

이번시간에는 jpa orm으로 들어가겠다. 자바객체와 SQL문을 분리할수 있고 SQL문을 직접사용하지 않고 직관적인 메서드를 사용한다고 한다.

 

JPA 사용을 위해서  dependency 추가해주어야한다.

아래 인메모리 관련된것은 아직 하지 않는다. 내용만 알아두도록 하자.

자 지금부터 JPA 사용을 위해서  dependency 추가해주도록하겠다. 아래 add starters로 간다.

oracle도 같이 추가해주기로한다.

아래 Spring Data JPA와 Oracle Driver를 추가해주었다.

next로 넘어가서 아래 pom.xml을 클릭한 다음 finish를 한다.

jpa를 아래처럼 설정해주어야한다.

application-properties에 아래처럼 추가해준다.

 

DeptVO를 아래처럼 만들어주었다.

package com.kosta.sbproject.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Entity //JPA관리함을 의미
@Table(name = "tbl_dept",
uniqueConstraints = {@UniqueConstraint(name = "unique2", columnNames = {"manager_id","location_id"})})
public class DeptVO {
	@Id //필수
	@GeneratedValue(strategy = GenerationType.AUTO)
	//자동증가시에 필요, 정책이 DB마다 다르다. AUTO(SEQUENCE, IDENTITY)
	//hibernate_sequence가 생성되어 사용된다. insert시에 hibernate_sequence.nextval 사용
	//IDENTITY:ATO_increment
	int department_id;
	@Column(name = "dept_name", unique = true, nullable = false, length = 30)
	String department_name;
	@Column(name = "manager_id", nullable = true)
	int manager_id;
	int location_id;
}

 

 

참고로 위 deptvo를 만들때 manager_id와 location_id가 둘이 합쳐졌을때 유니크한 경우 아래와 같이 코드할 수 있다.

DeptVO를 위에서 처럼 만들고 아래처럼 Board Class를 만들어줬다.

 

--------------------------------------------------------------------------

아래처럼 BoardTest를 만들었다.

그리고 BoardTest 를 아래처럼 구현해주었다. 먼저 insert다. 이제 sql문을 사용하지 않고 DB에 데이터를 넣을 수 있다.

그리고 아래처럼 select all해올수 있다.

application-properties를 create를 하면 매번 table을 drop한다 그래서 update로 바꿔준다.

Sample2RestController에 아래처럼 RequestMapping을 해주었다. 웹페이지에서 /boardlist로 실행하면 json으로 값이 표시될것이다.

BoardRepsitory를 crudRepository 인터페이스를 구현했다.

 

아래처럼 update를 구현했다.

아래처럼 결과가 나온것을 볼 수 있다.