※간단하게 생각나는대로 정리해보았다. 틀린 내용이 있을 수 있음※
스프링? 왜 이름이 스프링일까?
- 개발자들의 겨울은 끝이 났다. 봄이왔다는 소리 (쉽게 서버개발이 가능!!)
그래요? 오케이 사용해 볼께요!!
아직 추운데요?....
스프링을 사용하면서 외장서버를 연결하고, 환경설정도 복잡하며 핵심 서비스로직 이외에 처리 할 것이 많았음
아 모르겠고 서비스 로직만 구현하게 주세요 ㅠㅠ
스프링부트 - 내장된 서버 톰캣(쉬운 서버 설정), 디펜던시(환경설정)의 간소화, 라이브러리의 의존성 진행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
(그래서 소멸이 없음!!) -> 동시에 어떤 처리를 해야 된다면? 멀티스레드로 동작
서블릿컨테이너 각각의 요청을 관리하고 뿌린다.
이제 그 요청에 맞게 우리는 로직을 구현한다.
왜 나는 아직 추울까...
댓글