It's going to be one day 🍀

안녕하세요! 매일 매일 공부하려고 노력하는 백엔드 개발자 지망생의 공부 흔적입니다.

Back-End/Spring

[spring] 강의 중 개념 정리 (외부)

2jin2 2024. 3. 8. 16:08

spring의 기본 역할

 

1) @RestController, @Controller, @Service, @Repository, @Component, @Bean...

이런 어노테이션을 달아놓은 클래스들에 대해서는 spring이 대신 new 해서 만들어줄 것이다.

이때 범위를 알려주는 것 : 컴포넌트 스캔

 

2) 1번을 통해 만들어놓은 인스턴스들을 필요한 사람이 손들어서 요청하면 내가 전달해줄 것이다.

DI - @Autowired, 생성자를 통해 선언을 하거나, setter method를 통해 선언하면 spring이 해당 인스턴스(=빈)을 찾아서 꽂아준다.

 

실습 코드로 예를 들어보면, -> HiController에서 HiService를 사용하겠다.

@RestController

public class HiController {
	@Autowired
    private HiService hiService;
}

public class HiService {
}

이때 작성을 잘못하면 에러가 날 수도 있다. 이 내용을 기억하면서 에러 메시지를 주의 깊게 확인하기!

-> 스프링이 대신 생성, 관리해주는 클래스들에 대한 기본적인 위치,  대상정보들에 대해 유의하기.


web 개발을 / Backend 개발을 하려고 하면 필요한 것들이 많이 있다.

대부분의 것들은 항상 반복되는 작업이다.

=> spring boot가 반복되는거는 항상 내가 디폴트로 상품을 제공해줄게 (ex 자동차 기본 깡통옵션차)

    -> 근데 니가 추가적으로 필요한거 원하는게 있다면 알려줘. 내가 그거까지 반영해줄게.

    -> 또는 니가 직접 설정하고 싶다면, 직접 설정할 수 있게 해줄게.

 

=> 이렇게 제품을 만들어서 제공중인게 spring boot이다.

 

ex) 음식 두부

=> 예전에는 콩심고 수확하고 멧돌에 갈아서 압축해서 먹어야했다면,

spring boot는 그걸 생략하고 두부만 받아서 먹을 수 있도록 해준다.

 

하지만 개발자는 언젠가 콩심는 법, 수확하는 방법,,, 등등을 알아야 좋은 개발자가 될 수 있다!!


servlet == http 를 처리할 수 있도록 해준 네트워크, 앱 개발 규약이다. (java의)

=> servlet의 규약에 맞춰서 만든 상품들이 있는데, 그중 대표적인게 tomcat이다.

tomcat 같은 제품들을 흔히 servlet container 라고 칭한다.

 

spring의 core기능을 바탕으로 (객체생성관리) "spring-web" - servlet을 customize (Dispatcher Servlet) 흐름 비유로 쉽게 알아보기

 

'''

1) dispatcher servlet : 대장

 

2) handlermapping 

@RestController > @GetMapping, @Post, ...

http://localhost:8080/hello/instr

uri(url들)에 대해서 어떤 요청은 어떤 컨트롤러의 어느 메소드한테 전달하면 될지? 이런 것들에 대한 세부 정리 (작업반장 == handlermapping)

 

handlermapping을 통해서 요청받은것들을 일단 우리가 작성한 코드를 통해서 수행을 다 했다.

=> 수행결과물은 (josn, html, ...)

 

3) viewResolver : 마지막 포장하는 사람

http request ->

1. DispatcherServlet이 딱 받아서 handlermapping한테 야 이거 맞는거 처리해줘 위임.

2. hadlermapping : 아 여기에 해당되는 컨트롤러와 메소드가 존재합니다. 그리고 이건 GET 만 받을 수 있다고 합니다. (POST로 요청시)

3. 2번 과정에서 문제가 없다면 그제서야 우리가 작성한 controller부터 코드들이 수행이된다. 수행이 다 되면 결과를 다시 dispatcher servlet이 인지를 해서 

4. 이거 결과 처리 다 됐다니까 이쁘게 포장해서 최종 전달해!  -> viewResolver한테 명령함.

5. viewResolver가 마무리해서 요청자한테 전달하고 끝남.

'''

+) 3번에 대해서 강사님 설명 추가

3. 2번과정에서 문제가 없다면 그제서야
우리가작성한 controller부터 코드들이 수행이 된다. 
=> 근데 우리가 작성한 코드들이란.대부분 데이터를 저장/조회/관리하는게 많다 
=> 데이터는 대부분 RDBMS라는 곳에 저장해서 사용하니 문제가 없다.
=> 그럼 java를 통해서는 DB를 어떻게 사용할수 있을까 => 수요일에 학습한 내용. 
=> 이건 너무 무식한 방법이다. 다르게 해보자 spring-jdbcTemplate & Mybatis설정/사용예시본거고 + 그럼 본격적으로 데이터 관리를 한번 해보자 == 간단한 수강신청 기능 만들어보기
=> 요즘에 좀더 편하게 나온게 있고 대부분 회사들에서도 많이 사용한대 : JPA(hibernate) + querydsl