스프링부트 기초
1. Client - Server Model (or Architecture)
: 인터넷 브라우저에서 보는 페이지.
브라우저가 페이지를 제공할 때, 인터넷을 통해 페이지를 달라고 요청(클라이언트)을 보내면, 인터넷의 어떤 컴퓨터가 페이지를 응답(서버)해준다.
- 클라이언트 : 인터넷에 연결된 장치 혹은 소프트웨어 프로세스. 서비스를 요청하는 주체
- 서버 : 사용자에게 전송될 데이터(웹 페이지, 이미지 등) 또는 기능이 저장된 컴퓨터 또는 프로세스. 요청에 대한 적당한 응답을 하는 주체
** URL
: 브라우저의 주소창 (어디에 요청을 보낼지를 입력하는 창)
자원(Resource)이 어디 있는지 나타내는(Locator) 기준 (Uniform)
- scheme : 어떤 방식으로 요청을 하는지
- authority : 어떤 컴퓨터에 요청을 하는지
- path : 그 컴퓨터의 어디에 있는 자원인지
- query : 그 자원에 대한 추가 요구 사항
~~> 개발자는 ? 어떤 url을 기준으로 요청이 들어왔을 때 어떤 응답을 전달할지 관리 (특히 path/query를 기준으로)
** 프레임워크의 역할
: 개발자의 일을 간소화하자! 개발에 필요한 기능들을 미리 구현해 놓은 것.
- 어떤 url에서 어떤 요청을 들을 것인지, 그 요청에 대한 응답 형태가 어떤 것인지 비즈니스 로직만 다시 생각하면 되도록 반복된 기능을 만들어두자~~
ex. 서버 프로세스를 시작하고, 특정 포트에서 들어오는 신호를 들으며, 해당 신호를 데이터의 형태로 해석하고, 다시 요청을 보낸 컴퓨터로 응답을 보내는....기본적인 반복 기능들.
2. IOC (Inversion of Control)
* 일반적 객체지향 프로그래밍에서는...
개발자가 클래스를 정의한다.
개발자는 자신이 제공하고자 하는 기능을 위해 적당한 시점에 클래스를 객체로 생성하고 배치하고 사용해야 한다.
** 스프링에서는...
DemoController클래스를 만들고 > 클래스에 @Controller 어노테이션 달기.
home() 메서드를 만들고 > 그 메서드에 @RequestMapping임을 나타냄.
> SpringApplication.run()을 실행하니 작성한 코드가 어느 시점에 실행이 된다..
> 객체를 개발자가 직접 만들지 않는다!!
클래스를 만드는 주체는 개발자이지만,
그 클래스 인스턴스가 언제 만들어지는지를 결정하는 주체는 Spring Boot이다!
코드 제어 주체가 반전됨 (inversion of control)
* Spring IoC Container (=Spring Container, Application Context)
- 개발자가 작성한 클래스와 몇가지 설정 정보를 바탕으로
해당 클래스 객체의 Lifecycle을 관리하는 스프링의 IoC 패턴 구현체.
- IoC Container가 관리하는 객체가 Bean!
- @Controller : 이 클래스는 IoC Container에서 관리해주세요... 요청이 왔을 때 어떻게 처리해야 할지에 대한 정보를 가지고 있다.
- @SpringBootApplication : 이 클래스는 Spring Boot Application입니다. 이 클래스를 기준으로 Bean 객체를 찾아서 관리해주세요.. >> 안에는 다른 어노테이션도 합쳐져있다.
@SpringBootConfiguration : Spring Boot 설정 관련 어노테이션
@EnableAutoConfiguration : Spring Boot의 필수 어노테이션
@ComponentScan : Bean 객체 검색 기준 설정 어노테이션
- @Component를 스캔한다. (@Controller도 @Component의 일종)
- basePackagaes 인자로 패키지 설정 가능. (ex. @ComponentScan(basePackages = {"com.example.demo"}))
- @Controller : 사용자의 입력을 처리하는 클래스
- @Service : 비즈니스 로직을 담당하는 클래스
- @Repository : 데이터베이스와 직접적인 소통을 담당하는 클래
- SpringApplication.run() 메서드 : 실행된 Spring Boot Application의 ApplicationContext(IoC Container)를 반환한다.
'Programming > Spring, SpringBoot' 카테고리의 다른 글
Post/Redirect/Get : redirect를 사용해야하는 이유 (0) | 2024.01.04 |
---|---|
Spring MVC & Thymeleaf (4) | 2024.01.03 |
Spring 어노테이션 정리 (0) | 2023.12.29 |
[타임리프 에러] Property or field ' ' cannot be found on object of type 'java.util.ArrayList' - maybe not public or not valid? (1) | 2023.12.29 |
thymleaf 설정 시 yml 파일 (0) | 2023.12.28 |