Dev/SpringBoot

[SpringBoot] 스프링부트 시작하기

창문닦이 2019. 12. 11. 21:20

- 스프링 부트 : 스프링 프레임워크를 사용 가능한 상태로 만들어주는 도구. 스프링 프레임워크의 서브 프로젝트로 만들어졌다.   
- 프레임워크 : 애플리케이션의 아키텍처에 해당하는 골격 코드이다.
- 메이븐(Maven)/그레이들(Gradle) : 라이브러리 관리와 빌드 자동화 도구이다.

스프링부트 프로젝트의 구조

1. src/main/java : 일반적인 자바 소스 등록
2. src/main/resources : 자바 소스가 아닌 xml이나 프로퍼티 파일을 등록
- 스프링 부트의 경우 기존 메이븐과 조금 다르다. 펼칠 경우 xml파일은 없고, 웹 애플리케이션과 관련된 static과 templates 폴더가 존재한다.   
- statc : html과 같은 정적인 웹 리소스  
- templates : 타임리프 같은 템플릿 기반의 웹 리소스가 저장  
3. application.properties : 이 파일에는 프로젝트 전체에서 사용할 프로퍼티 정보 저장  
- src/test/java : Junit 기반의 테스트 케이스 작성 

pom.xml  

1. pom.xml 파일은메이븐을 이용해서 만든 스프링 부트 프로젝트 전반의 환경을 설정하는 파일이다.
2. 가장 중요한 설정은 dependencies 설정이다. (의존관계에 해당)  
3. 처음 프로젝트 생성시 두 개의 설정 존재한다.
- spring-boot-starter-web : 웹 애플리케이션 개발에 필요한 스프링 MVC 관련 라이브러리  
- spring-boot-starter-test : JUnit을 비롯한 테스트 관련 라이브러리  
4. <parent> 태그를 이용하여 또 다른 pom 설정을 상속 가능.   
5. 두 개만 설정했어도 부모 설정 파일로부터 상속받아 dependency 설정을 가지게 된다

프로젝트명+application.java

1. 스프링부트로 만든 애플리케이션은 일반 자바 애플리케이션으로도 웹 애플리케이션으로도 실행 가능하다. 

 

2. 기본적으로 제공되는 메인 클래스를 현재 상태로 실행하면 웹 애플리케이션으로 실행된다.
- 내장 톰캣이 구동되고 브라우저에서 전송한 요청 처리 가능
- 스프링 부트의 버전이 올라가면 내장톰캣의 버전도 자동으로 올라간다.  
- 코드를 약간 수정하여 일반 자바 애플리케이션으로 실행하면 내장 톰캣 구동 안 함  

 

3. @SpringBootApplication  
- 스프링 부트로 만든 애플리케이션의 시작 클래스를 의미한다. 
- 유일하게 구현된 main() 메소드는 SpringApplication의 run()메소드를 정적 메소드 호출 방식으로 호출
- SpringApplication.setWebApplicationType 으로 애플리케이션 타입 설정 가능
1) 설정 가능한 애플리케이션 타입 세 가지
- NONE : 웹으로 동작하지 않도록 설정  
- SERVLET : 기존의 스프링을 MVC 기반으로 웹 어플리케이션을 구동하겠다는 설정  
- REACTIVE : 스프링 5.0에서 추가된 비동기 처리와 논블로킹 입출력(non-blocking I/O)을 지원하는 웹플럭스(webFlux)를 적용할 때 사용  

 

4. 외부 프로퍼티 파일 사용 하기  
- application.properties 파일은 전체 프로젝트의 프로퍼티 정보를 관리하는 설정 파일이다.
- 자바 소스보다 application.properties 파일의 설정이 우선순위가 높다.
- 애플리케이션 타입 설정 : spring.main.web-application-type=none   
- 톰캣 서버 포트 변경하기 : server.port=8000  
- 톰캣 서버를 구동하여 웹 어플리케이션으로 실행하려면. web-application-type을 다시 servlet으로 변경  
- 만약 server.port=0 으로 설정 시 현재 사용되지 않는 포트번호로 랜덤 할당  
- application.properties에 설정한 프로퍼티 정보들은 실제 해당 properties 객체의 setter 메소드가 호출되어 의존성 주입된다.

 

- 자동 컴포넌트 스캔

스프링 문법에서 xml 설정 파일에 이 누락되면 컨테이너가 컨트롤러를 빈으로 등록하지 않는다 .
@SpringBootApplication 가 작성되면 @ComponentScan이 포함되어 있기 때문에 자동 진행된다.
다른 패키지에 있는 컨트롤러 클래스까지 스캔 대상에 포함시키려면 메인 클래스에 @ComponentScan를 추가하고 스캔하고자 하는 패키지를 직접 지정해야 한다. @ComponentScan(basePackage ={"com.pack1","com.pack2"})

- 롬복(Lombok) 라이브러리

모든 VO클래스와 앞으로 JPA(Java Persistence API)에서 사용할 도메인 클래스에 getter, setter, toString을 반복적으로 작성하는 것은 귀찮은 일이다. 이런 문제를 간단하게 해결해주는 것이 롬복이다. 롬복은 자동적으로 자바 파일 컴파일 시 생성자,  getter, setter, toString와 같은 코드들을 추가해준다.

- 롬복에서 제공하는 어노테이션

어노테이션 기능
@Getter  Getter 메소드 생성 
@Setter  Setter 메소드 생성 
@RequiredArgsConstructor  모든 멤버변수 초기화하는 생성자 
@ToString  모든 멤버변수의 값을 문자열로 연결하여 리턴하는 toString 메소드 생성
@EqualsAndHashCode  equals(), hashcode() 메소드 생성 
@Data  @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 모두 포함 


스프링 프로젝트에서 스프링부트만 적용해도 스프링에 대한 접근성은 자동으로 향상되고, 개발자들은 비즈니스 로직에 집중할 수 있다!

참고 서적 : 누구나 끝까지 따라 할 수 있는 스프링 부트 퀵스타트