오늘은 몰랐으면 내일은 알면 된다

2022-12-16 (5) Spring Boot 시작 본문

Java/JAVA 개발자 양성과정

2022-12-16 (5) Spring Boot 시작

마스터피쓰 2022. 12. 16. 19:02

Boot 용 플러그인을 설치해보자. Eclipse Marketplace로 가서 STS라고 검색한다.

그러면 몇가지가 나오는데, STS3은 Legacy Project용이므로 설치를 해서는 안되겠다. STS4를 설치한다.

중간에 이런 문구가 보이면 체크후에 Trust Selected를 클릭한다. 그 다음 IDE를 재시작한다.

Spring Boot는 Spring Framework의 더 간단한 버전이라고 보면 되겠다. Spring을 위한 라이브러리와 서버 등이 내장되어있다.

Spring Boot 2버전은 Spring Framework 5버전을 편하게 개발하기 위한 버전이다. 앞선 실습에서는 Spring Framework 5.2를 썼으므로 Boot도 2버전을 사용한다.

 

왼쪽의 스펙을 보면 Boot에는 Tomcat이 내장되어 있는 것을 확인할 수 있다.

Hibernate도 내장되어 있어, Java Persistence Api를 사용가능하다.

Workspace를 새로 만들고 Java, 인코딩 등 기본 설정을 마친다.(기본설정 생략)


이제 프로젝트를 만들어보자. File -> New -> Spring Starter Project를 선택한다.

Type은 Maven을 사용한다.

Maven을 사용한다는 것은 다음의 효과를 가진다.

 

1. 의존관계 라이브러리를 Maven이 관리한다.

2. 배포용 압축파일을 작성할 수 있는데, 프로젝트를 위해 필요한 라이브러리들도 알아서 다 압축파일에 넣어준다.

    무려 톰캣서버도 넣어준다.(Boot에는 Tomcat도 내장되어있기 때문에)

3. 작성한 단위테스트를 전부 진행해준다.(Junit) 단위테스트가 통과했을 때만 압축파일을 생성해준다.

 

위에서 작성한 압축파일을 해제(배포, deploy)하면, pom.xml을 바탕으로 필요한 라이브러리를 다운받고, 톰캣서버가 설치가 된다.

즉 Maven 프로젝트로 진행하는 이유는 배포를 쉽게 하기 위함이다.

예를들어 위의 압축파일을 Docker에 deploy하면 별다른 설치를 해줄 필요가 없다. 압축만 해제하면 되는 것이다. 클라우드 서비스를 사용할 때도 마찬가지다.

 

Packaging은 Jar, Java Version은 11을 사용한다.

 

Artifact는 프로젝트의 이름이 될 것이다.

Group + Artifact가 Package 명으로 자동 세팅되어있다.

 

주의) Group과 Package 명을 맞춰주지 않으면 추후 Maven 배포시 문제가 생긴다고 하니 주의하자.

이 포스팅에서는 demo 가 붙어서 다른데, 다음부터는 Group과 동일하게 맞춰줘야겠다.

 

세팅이 완료되면 Next로 넘어가자.

Spring Boot Version은 2번대중에서 SNAPSHOT이 아닌 버전을 선택한다.

3버전을 쓰지 않는 이유는 아직 안정화되지 않았기 때문이다.(평판을 대충 따져봤을때 불안정함)

오픈프로젝트는 버전에 민감하기 때문에 되도록 최신버전은 쓰지 않는 것이 좋다.

Available에서 필요한 라이브러리를 검색해서 선택할 수 있다.

Spring Web은 Tomcat을 기본 내장 container로 사용하는 Spring MVC관련 라이브러리이다.

Spring Web만 일단 선택해서 넘어가자.

그러면 또 열심히 뭔가 깔린다.

중간에 나오는 박스에는 Yes 해준다.

 

Maven Dependency를 까보면 라이브러리가 굉장히 많은 것을 확인할 수 있는데, 그에비해 pom.xml은 심플하다.

캡처는 잘렸지만 훨씬 길다. 살펴보면 엔간한건 다있다

pom.xml 화면 아래의 Hierarchy를 확인해보면, 라이브러리들끼리 어떤 연관관계를 가지고 설치되어있는지 확인할 수 있다.


이제 생성된 프로젝트들을 좀 살펴보자. 프로젝트는 Maven Project의 형태를 갖추고 있고,

기본 생성된 DemoApplication.java를 보면 main method가 Container를 구동시키고 있는 것을 확인할 수 있다.

앞서 스프링 컨테이너가 올라오려면 스프링 설정파일이 필요하다고 했다.

Boot에서는 ApplicationContext 등의 설정을 xml을 사용하지 않고 application.properties 파일에 한다.

xml은 열고 닫는 태그 등 설정파일이 점점 복잡하고 커지기 때문에 더이상 사용을 권하지 않는다.

 

아무 설정을 하지 않고 DemoApplication(Spring Boot Application)을 돌려보면 아래와 같은 오류가 난다.

내장 Tomcat 서버가 구동되면서 기본포트인 8080으로 설정되는데, Oracle과 충돌이 나기 때문이다.

application.properties로 가서 server. 까지만 작성하면 eclipse가 도움말을 보여준다.

포트를 9999로 바꾸고 다시 컨테이너를 구동시켜보자.

정상 구동되는 것을 확인할 수 있다.

context path 가 아무것도 설정이 안되어있는 것을 볼 수 있다.

http://localhost:9999 로 들어가보면 아무 설정이 없기 때문에 fallback 페이지를 띄워준다.

Tomcat에 배포는 제대로 되었으나 아무런 자원이 없기 때문에 오류가 난 것이다.

변경해보자. 먼저 아래와 같이 application.properties에 context-path를 설정해준다.

이제 테스트용 Controller를 하나 만들어보자. demo package 밑에 control이라는 package를 추가하고, TestController.java를 만든다.

간단하게 메서드도 하나 만든다.

@Controller
public class TestController {

	@GetMapping("/a")
	@ResponseBody
	public ResponseEntity<?> a() {
		return new ResponseEntity<>("와앙", HttpStatus.OK);
	}
}

그 다음 컨테이너를 구동시키고, context path/주소 로 들어가보자. 그럼 예상 결과가 나온 것을 확인할 수 있다.


properties파일을 가만히 보면 server. 라는 property는 계속 중복사용되는 것을 확인할 수 있다.

이를 요즘 트렌드(?)로 convert 해보자. application.properties를 우클릭하고 convert .properties to .yaml 를 클릭한다.

프로퍼티 파일이 바뀐것을 확인할 수 있다.


Spring Framework에서 Tomcat이 변경사항을 제때 반영해서 Restart 해준 것과 달리, Boot의 내장 Tomcat은 그렇게 해주지 않는다.

그러면 개발시에 좀 귀찮기 때문에 변경도 하는 겸, lombok도 추가해보자.

pom.xml을 우클릭하여 Spring... Add Starters를 선택한다.

Lombok을 선택하고 Next를 클릭한다.

pom.xml 을 선택하고 Finish한다.

이번엔 원래 하려던 '변경사항이 생기면 Tomcat 재시작하기' 를 설정해보자. Spring... Add DevTools 를 선택한다.

주의) Add Starters 하면 Progress Bar 가 진행되지않고 멈춰버리는데, 대충 좀 기다려보고 더이상 안올라오는 느낌이면 eclipse를 강제종료한다.

pom.xml에 추가된 것을 확인할 수 있다

'Java > JAVA 개발자 양성과정' 카테고리의 다른 글

2022-12-19 (1) logging  (0) 2022.12.19
2022-12-17 (1) Spring Boot 계속  (0) 2022.12.17
2022-12-16 (4) Dynamic SQL을 이용한 실습  (0) 2022.12.16
2022-12-16 (3) Transaction  (0) 2022.12.16
2022-12-16 (2) AOP  (0) 2022.12.16