이제 Spring 쪽 한번 다시 쭉 볼 예정이다. Java/Spring + 코테 + 인프라(찍 먹 자격증) 이렇게 공부 예정이다.
다음 주에 여행을 가므로 코테와 인프라 쪽은 그 이후에 공부할 예정이다.
Spring Framework
1. 모델-뷰-컨트롤러 아키텍처: MVC
- 모델(Model): 컨트롤러와 데이터를 연결하고 비즈니스 로직이 작성, @Service라는 어노테이션을 사용
- 뷰(View): 사용자 인터페이스를 담당
- 컨트롤러(Controller): 사용자의 요청을 처리하고 모델과 뷰 사이를 연결, @Controller라는 어노테이션을 사용
2. Bean 관리:
1. 싱글턴(Singleton) 패턴: 기본적으로, 스프링은 각 빈 정의에 대해 하나의 객체 인스턴스만을 생성, 이는 싱글턴 디자인 패턴을 따르는 것으로, 같은 빈 ID나 이름으로 컨테이너에 요청을 하면, 스프링은 항상 동일한 객체 인스턴스를 반환
2. 의존성 주입(Dependency Injection): 빈은 생성자 인수나 세터 메서드를 통해 의존성을 주입받을 수 있다. 이렇게 함으로써 빈은 필요한 의존성을 외부로부터 받으며, 이는 느슨한 결합과 코드의 테스트 용이성을 증진시킴
3. 어노테이션 또는 XML 구성: 빈은 XML 파일을 통해 명시적으로 선언하거나, 클래스@Component, @Service, @Repository, @Controller등의 어노테이션을 사용하여 자동으로 감지되어 등록될 수 있음.
3. 유연한 URL 매핑: request URL을 컨트롤러의 메서드에 매핑하여 RESTful 경로를 쉽게 구현할 수 있다.
웹 흐름의 기초
- URL 입력 및 분석:
- 사용자가 웹 브라우저의 주소 표시줄에 URL(Uniform Resource Locator)을 입력
- 예를 들어, https://google.com/search?q=hello&hl=ko라는 URL을 입력한 경우:
- 프로토콜: https - 이는 웹 서버와 안전한 연결을 위한 HTTPS 프로토콜을 사용함을 의미
- 호스트명: google.com - 이는 웹 페이지를 호스팅 하는 서버의 주소
- 포트 번호: 명시되지 않았으나 https의 기본 포트인 443을 사용
- 패스: /search - 서버에서 어떤 리소스를 요청하는지를 나타내는 경로
- DNS 조회:
- 브라우저는 도메인 이름 시스템(DNS)을 사용하여 google.com과 같은 호스트명을 IP 주소로 변환
- 서버와의 연결:
- 브라우저는 변환된 IP 주소를 사용하여 서버에 TCP 연결을 시도합니다. HTTPS를 사용하는 경우, SSL/TLS 핸드 셰이크 과정을 통해 암호화된 연결이 설정
- HTTP 요청:
- 브라우저는 HTTP 프로토콜을 통해 서버에게 웹 페이지를 요청 GET 메서드는 URL에 지정된 리소스를 요청
- DispatcherServlet 수신:
- 모든 요청은 먼저 Spring의 DispatcherServlet에 도달. 이 서블릿은 프론트 컨트롤러로 작동하여 들어오는 요청을 적절한 컨트롤러에 전달하는 역할을 함
- 핸들러 매핑:
- DispatcherServlet은 요청 URL을 분석하여 해당 요청을 처리할 수 있는 컨트롤러를 찾는다. 이를 위해 HandlerMapping을 사용
- 컨트롤러 실행:
- 요청이 매핑된 컨트롤러에 도달하면, Spring Framework는 해당 컨트롤러의 메서드를 호출
- 예를 들어, 사용자가 https://yourapp.com/products/details?id=123 URL로 요청을 보냈다면, products/details 패스와 관련된 컨트롤러 메서드가 실행
- 비즈니스 로직 처리:
- 컨트롤러 내부의 메서드는 사용자의 요청과 함께 전달된 파라미터, 예를 들어 상품의 id,를 처리, 이 정보는 서비스 계층에 전달되어 필요한 비즈니스 로직을 수행할 수 있음
- 모델 채우기:
- 서비스 계층에서의 처리 결과를 컨트롤러가 다시 받아 모델 객체에 데이터를 채움, 모델 객체는 주로 요청에 대한 응답으로 보낼 데이터를 포함
- 응답 생성 및 전송:
- 서버는 HTML OR Json 응답 데이터를 생성하여 브라우저로 전송
- 콘텐츠 렌더링:
- 브라우저는 받은 HTML, CSS, JavaScript 등을 해석하고 사용자에게 웹 페이지를 보여주기 위해 렌더링 함
- 추가 리소스 로딩:
- HTML 문서 내에 추가 리소스(이미지, 스타일시트, 스크립트 등)가 있을 경우, 이들도 필요에 따라 각각의 요청을 통해 로드하고 처리
HTTP 기초
HTTP는 서버와 클라이언트 간의 소통을 원활하게 하는 걸 목표로 작성 함
클라이언트와 서버의 관계를 가게와 손님으로 생각해 보자
HTTP 요청의 종류
- GET: 무언가를 보여 달라고 요청할 때 쓰이는 명령 ex) '메뉴판 좀 볼 수 있을까요?'
- POST: 새로운 정보를 보내거나 주문할 때 사용 ex) '이거 주문 할게요!',
- PUT: 이미 있는 정보를 바꾸고 싶을 때 사용 ex) '주문한 것을 바꿀게요'
- DELETE: 무언가를 지우고 싶을 때 사용 ex) ‘주문을 취소하겠습니다’
Http 상태코드
- 2xx: ‘OK’
- 4xx: '요청한것은 저희 매장에 없습니다'
- 5xx: '죄송합니다.'
HTTP 헤더 용도
- HTTP 전송에 필요한 모든 부가정보
- ◦ 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보 등등.
- 표준 헤더가 너무 많다.
- 필요한 경우 임의의 헤더 추가 가능
'TIL' 카테고리의 다른 글
TIL - 2024/09/24 (0) | 2024.09.24 |
---|---|
TIL - 2024/09/23 (0) | 2024.09.23 |
TIL - 2024/09/19 (0) | 2024.09.19 |
TIL - 2024/09/13 (0) | 2024.09.13 |
TIL - 2024/09/12 (0) | 2024.09.12 |