본문 바로가기
카테고리 없음

SpringBoot <총 정리>

by 고구마는호박고구마 2023. 2. 9.

간단하게 생각나는대로 정리해보았다. 틀린 내용이 있을 수 있음

 

스프링? 왜 이름이 스프링일까? 

- 개발자들의 겨울은 끝이 났다. 봄이왔다는 소리 (쉽게 서버개발이 가능!!)

그래요? 오케이 사용해 볼께요!!

아직 추운데요?....

 

스프링을 사용하면서 외장서버를 연결하고, 환경설정도 복잡하며 핵심 서비스로직 이외에 처리 할 것이 많았음

 

아 모르겠고 서비스 로직만 구현하게 주세요 ㅠㅠ 

 

예따!!!

 

 

스프링부트 - 내장된 서버 톰캣(쉬운 서버 설정), 디펜던시(환경설정)의 간소화,  라이브러리의 의존성 진행x 등등

 

우리 스프링이 달라졌어요 , 많은 복잡한 환경설정도 간단 명료 !!

<스프링 부트의 의존성 관리>

spring-boot-starter-paren.xml 에는 자바 버전(프로퍼티스), 또는 정보를 읽어 오기 위해 yml, 파일이나
properties 파일을 읽어오는 기능이 정의 되어있다. (플러그인들도 설정이 다 되어있음)
spring-boot-starter-parent.xml 로 들어가면 부모로 spring-boot-dependencies.xml 를 가지고 있음
spring-boot-dependencies.xml 에는 각종 라이브러리 버전들이 명시되어있다. 

내장 서버로 톰캣!!

 

 

의존관계를 살펴보면 

 

 SpringBootStarters - 필요로 하는 라이버리가 포함되어 있다.
 spring-boot-starter-web 은 아래 종속성을 자동으로 추가한다.
 - spring-web-*.jar
 - spring-webmvc-*.jar
 - tomcat-*.jar
 - jackson-databind-*.jar


스프링 컨테이너

스프링부트 스프링 컨테이너에서 따로 우리가 만든 객체를 관리해준데... 우리에게 도움을 주려고 (천사)

그대신 우리는 어노테이션을 사용하여 객체들이 여기있다고 알려줘야 된다!!!

@Component  -> 스프링 컨테이너야 이 클래스 저장해라는 말!

 - @Configuration

 - @Service

 - @Repository

 등등 이런식으로 클래스들의 색깔에 맞게 작성할 수 도 있다. 이 안에는 @Component를 내장하고 있기때문에!

 

@Bean -> 스프링 컨테이너야 이 메서드 저장 


@SpringBootApplication

처음 실행되는 어노테이션 @SpringBootApplication 안에는 밑에 3개를 포함 하고 있음 

@ComponentScan ( 특정 패키지로 부터 하위 클래스들을 돌아서 빈을 설정)
-> 등록하고자 하는 빈들을 알아서 쭉 등록이 된다. // 따로 @Bean 설정 안해도 된다이말이야!!

@EnableAutoConfiguration

-> 자동으로 Configuration 설정 (밑에 내용)
@SpringBootConfiguration

-> 애플리케이션의 구성을 제공하는 어노테이션

 

 

AutoConfiguration

DI를 자동으로 주입해준다고?

원래 의존성 주입(DI)을 하려면 생성자 주입을 하였다. (생성자 주입 - 클래스의 생성자에서 외부 객체를 주입해줌)

이 클래스에서는 User 객체를 생성하고 삭제하고 db에 넣는 클래스가 있다면 UserDB에 그걸 만들어지거나 변경된 값을 보내야 되기 때문에 UserDB 클래스를 외부에서 받아와서 처리를 한다. 

이러한 생성자 주입도 결국은 위 객체에서 생성자를 생성해주고 넣어주는 방식이기에 결국은 복잡해 질 수 있음 

스프링부트야 이거 객체찾아서 주입좀 알아서 해줘~ ->@Autowired  어노테이션을 설정한다.

+ 롬복에서 제공하는@RequiredArgsConstructor 어노테이션을 통하여도 DI 가능 (final로 설정가능


자 그럼 스프링부트를 사용하면 웹 사이트는 어떻게 작동을 할 까?

 

클라이언트가 요청을 보낸다.

RESTful API 를 보내면 우리는 Controller 클래스를 생성하여 Servlet을 통하여 전달받은 api에 맞는 메서드를 실행하게 된다. 여기서 잠깐 Servlet 이란 ?


동적인 페이지를 만들기 위해 웹서버에 붙이는 프로그램중 하나
http servelt request의 메서드를 호출하는 것 ( 웹 요청을 다루는 것 - servlet이 알아서 해줌 )

-> @ComponentScan 을 통하여 객체를 찾을때 servlet도 생성을 함
Get메서드, Post메서드 등 /hello 가 들어오면 hello 를 찾아야 된다 -> 서블릿 컨테이너 역할 
서블릿컨테이너는 싱글톤으로 관리가 된다 (하나의 서블릿이 여러 요청을 수행) = Dispatcher Servlet
 (그래서 소멸이 없음!!)  -> 동시에 어떤 처리를 해야 된다면? 멀티스레드로 동작
서블릿컨테이너 각각의 요청을 관리하고 뿌린다.

이제 그 요청에 맞게 우리는 로직을 구현한다.

왜 나는 아직 추울까...

https://velog.io/@hellonayeon/springmvc-vs-springboot <- 여기 사이트가 https://www.geeksforgeeks.org/difference-between-spring-and-spring-boot/ 트를 상속하여 영어로된 차이점을 오버라이딩하여 한글로 재정의 하였음.

 

댓글