스프링부트 기초

2024. 1. 3. 11:54
728x90

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)를 반환한다.

728x90

BELATED ARTICLES

more