본문 바로가기
프로젝트

GiftFunding) 프로젝트 셋업

by son_i 2023. 11. 16.
728x90

드디어 개인 프로젝트의 시작이다.

 

프로젝트의 주제와 기능 리뷰를 마치고 Spring Initializr로 세팅을 하는데에 있어서 이전까지는 강의에서 강사님들이 세팅하는데로 따라했지만 "왜" 사용했는지가 제일 중요한 것 같아 하나씩 알아가면서 진행해보려고 한다.

 

- 일단 LTS(Long Term Support)에 따라 제일 기간이 긴건 8이다.

java 8부터 lambda, Stream을 지원한다.

(11부터는 var 타입추론)

생각해보니까 이전 배당금 프로젝트에서 var 타입을 많이 사용했었는데 자바 11버전을 사용해서 그럴 수 있었던 것이다.

 

참고로 Spring boot 3.x버전부터는 자바 17을 사용해야한다.

 

나는 스프링부트 2.7.17버전을 사용할 것이고 자바는 8을 사용할 것이다.


Spring framework와 Spring Boot도 다른 것이다.

Spring framework의 대표적인 특징은 아래와 같다.

1. DI (의존성 주입) : class들의 의존관계들을 Bean 설정 정보 바탕으로 컨테이너가 자동적으로 연결해줌.

  -> 객체간 결합이 느슨해지며 코드의 재사용성이 증가하고 단위 테스트가 용이해짐.

 

2. IoC (제어의 역전) : 객체의 생명주기부터 생명주기의 관리를 개발자가 아닌 스프링 프레임워크가 해줌. 

  메서드나 객체의 호출을 개발자가 결정하는 것이 아닌 외부에서 결정되며 제어의 흐름이 바뀐다는 의미.

 -> 객체 간의 결합도를 줄여 가독성 및 코드 중복, 유지보수를 편하게 할 수 있음.

IoC는 직관적이지 못 해서 IoC를 구현하는 방법에 DI가 있음.

 

3. AOP (관점 지향 프로그래밍) : 핵심 기능을 재외한 부수적인 기능을 프레임워크가 제공하는 특징.

 -> spring 프로젝트에 security를 적용하거나, logging 등을 추가하고 싶을 때 기존 비즈니스 로직 건들지 않고 AOP로 추가 가능.

 

위 세가지 특징으로 결합도를 낮춰 유연한 개발을 가능하게 했다.

 

차이점

1. Dependency

Spring framework의 경우 dependency 설정해줄 때 설정 파일이 매우 길고 모든 dependency에 대해 버전 관리도 하나하나 다 해줘야함.

 

Spring Boot의 경우 build.gradle에 한 줄 추가하는 것만으로 관리할 수 있음.

 

2. Configuration

Spring framework는 configuration 설정도 매우 길고 모든 어노테이션과 빈을 등록 해줘야함.

 

Spring Boot 는 application.properties 파일이나 application.yml파일에 설정하면 됨.

 

  - AutoConfiguration

Spring에는 없고 Spring Boot에만 있으며 Spring Boot로 어플리케이션을 만들 때 메인 클래스에 @SpringBootApplication이 달려있다. 이 안에 타고 들어가면 많은 어노테이션이 포함되어 있는데

 

@ComponentScan 으로 @Component, @Controller, @Repository, @Service 어노테이션들이 붙어있는 객체들을 스캔해 자동으로 Bean에 등록해준다.

 

@EnableAutoConfiguration : @ComponentScan 이후 사전에 정의한 라이브러리들을 Bean에 등록해준다. 사전에 정의한 라이브러리들은 External Libraries -> spring-boot-autoconfigure -> META_INF -> spring.factories 에서 확인 가능.

 

3. Server 내장 여부에 따른 배포 방식

Spring Framework는 war 파일을 WAS(Web Application Server)에 담아 배포해야한다. 

 

Spring Boot는 Tomcat이나 Jetty 같은 내장 WAS를 가지고 있어 JAR파일만으로 배포가 가능하다.

 

결론
Spring Boot는 Spring을 더 쉽게 이용하기 위한 도구이다 !

공부를 마치고 나의 초기 세팅 !
Spring Web : REST API를 만들 것이기 때문에 꼭 필요

Lombok : 코드를 간결하게 해주기 위해 사용

Spring Security : 인증/인가 시스템을 만들기 위해서 사용

MySQL Driver : DB를 RDBMS인 MySQL을 사용

Validation : 입력 값들에 대해 유효성 검사를 해주기 위해 사용.

 

초기 Dependency는 이정도로 하고 나머지는 진행하면서 추가해주려고 한다.


참고

https://velog.io/@brucehan/Spring-vs-Spring-Boot-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0