ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 입문 + 웹
    프로그래밍/Spring 2023. 11. 8. 21:39

     

     

    Spring Framework
    • 모델-뷰-컨트롤러 아키텍처: MVC
      • 모델(model) : 컨트롤러와 데이터를 연결하고 비즈니스 로직이 작성된다.  @Service
      • 뷰 (view) : 사용자 인터페이스 담당.   FE가 전담
      • 컨트롤러 (controller) :  사용자의 요청을 처리하고 모델과 뷰 사이를 연결  @Controller

       MVC를 기반으로 모든 스프링 프레임워크가 짜여져있다.

     

     

    • Bean 관리
      • 싱글톤 (singleton) 패턴
        • 기본적으로 스프링은 각 빈 정의에 대해 하나의 객체 인스턴스만을 생성한다.
          이것이 싱글톤 디자인 패턴을 따르는 것으로, 같은 빈 ID나 이름으로 컨테이너에 요청을 하면, 
          스프링은 항상 동일한 객체 인스턴스를 반환한다.

        • @컨트롤러, @서비스 라고 되어있는 부분에서는 내부 프로퍼티를 사용하면 안된다.
          싱글톤 클래스 내부의 프로퍼티는 모든 요청에 대해 공유되는 상태이기 때문에
          (여러 요청이 동시에 들어올 경우 메소드가 중복 사용됨)
          어떤 요청이 해당 값을 변경할 경우, 다른 요청에도 영향을 미칠 수 있다.

          그렇기 때문에 내부 프로퍼티를 지양하고 DI를 통해  필요한 의존성을 외부에서 제공하는 것이다.

      • 의존성 주입 (Dependency Injection)빈은 생성자나 setter를 통해 필요한 의존성을 외부로부터 주입받을수 있다.
        이를 통해 클래스 간의 결합도를 낮추고 유연성과 테스트용이성을 높일 수 있다.
        그리고 의존성을 확립시킨다.
        -> 빈을 만들때도 순서가 필요하다.
        ex. 레포지토리 생성  -> 이를 사용하여 서비스 생성  ->  이를 사용하여 컨트롤러 생성
        그런데 만약 서비스르 만드는데 컨트롤러가 필요하다면 데드락에 걸린다. 
        이건 설계를 잘못한 것
      • 애너테이션 또는 XML 구성
        XML을 통해 명시적으로 선언하거나, 애너테이션으로 등록하여 사용할 수 있다.
    • 유연한 URL 매핑

      request URL을 컨트롤러의 메소드에 매핑하여 RESTful 경로를 쉽게 구현가능   

     

     


     

    웹 흐름의 기초

     

    1.  URL 입력 및 분석             *URL (Uniform Resource Locator)
      1. URL을 입력한다.
      2. https://google.com/search?q=hello&hl=ko라는 URL을 입력한 경우:
        1. 프로토콜 :  https
        2. 호스트명 : google.com   웹페이지를 호스팅하는 서버주소
        3. 포트번호 :  여기엔 명시되지 않았지만 https의 기본포트 443 사용
        4. 패스   /search    서버에서 어떤 리소스를 요청하는지 나타내는 경로
    2. DNS 조회
      브라우저는 DNS (Domain Name System) 을 이용하여 google.com 과 같은 호스트명을 IP주소로 변환
    3. 서버와 연결
      브라우저는 변환된 IP주소를 사용하여 서버에 TCP 연결을 시도한다.
      HTTPS 를 사용하는 경우 SSL/TLS 핸드셰이크 과정을 통해 암호화된 연결이 설정된다.

    4. HTTP 요청
      브라우저는 HTTP 프로토콜을 통해 서버에게 웹페이지를 요청한다.

    5. DispatcherServlet 수신
      모든 요청은 디스패처서블릿에 도달하며 적합한 컨트롤러에 전달하는 역할을 한다.

    6. 핸들러 매핑
      디스패처서블릿이 요청에 적합한 컨트롤러를 찾기 위해 핸들러 매핑을 사용한다.

    7. 컨트롤러 실행

    8. 비즈니스 로직 처리

    9. 모델 채우기
      서비스의 처리결과를 컨트롤러가 받아서 모델 객체에 데이터를 채운다.
      모델 객체는 주로 요청에 대한 응답으로 보낼 데이터를 포함한다.

    10. 응답 생성 및 전송
      HTML OR Json  응답데이터를 생성하여 브라우저로 전송

    11. 콘텐츠 렌더링
      브라우저는 받은 HTML, CSS, JS를 해석하고 사용자에게 보여주기 위해 렌더링 한다.

    12. 추가 리소스 로딩
      이미지, 스타일시트, 스크립트 

     

    여기까지가 웹의 흐름

     

     


    HTTP

     

    HTTP는 서버와 클라이언트간 소통을 원활하게 하는 것을 목표로 작성되었다.

     

    HTTP 구조

     

     

    -> 메소드, url, 쿼리파라미터 등이 들어간다

     

    -> 바디를 어떤식으로 줄건지
       ex. Json

     

     

     

     

     

     

     

    HTTP 헤더 용도

    - HTTP 전송에 필요한 모든 부가정보
      (메시지 바디의 내용, 바디의 크기,  압축, 인증, 요청 클라이언트(브라우저) 정보 등)

    - 표준헤더가 너무 많다

    - 필요한 경우 임의의 헤더 추가 가능

     

     

     

    HTTP 메소드

    1. GET
      서버로부터 정보를 조회하기 위해 사용
      데이터를 가져오는데 사용되며, 데이터를 변경하지 않음
    2. POST 
      서버에 데이터를 생성하기 위해 사용
      새 게시물을 작성하거나,  폼 데이터를 제출하는 등에 사용됨

    3. PUT
      서버에 있는 자원 전체를 교체하기 위해 사용

    4. DELETE
      서버에 있는 자원을 삭제하기 위해 사용

    5. PATCH
      PUT과 비슷하게 사용됨.  
      원하는 특정 프로퍼티만 변경할때 사용

    6. HEAD
      GET과 비슷한데,  특정 리소스에 대한 메타데이터만을 요청

    7. OPTIONS
      - CORS(Cross-Origin Resource Sharing) : 해당 도메인이 어떤 HTTP 메소드와 헤더를 사용할 수 있는지 확인
      - 요청가능한 메소드를 확인

    8. CONNECT
      클라이언트와 대상 서버간에 프록시 연결 설정을 요청할 때 사용
      주로 HTTPS 터널링을 설정하기 위해 사용

    9. TRACE 
      클라이언트가 요청을 서버에 보내면, 서버는 그 요청을 그대로 다시 클라이언트로 보내는 기능을 수행
      주로 디버깅 목적으로 사용한다.
      하지만 보안상의 이유로 권장하지 않으며, 일반적으로 비활성화 되어있음.


      1~4가 굉장히 중요하다.
      나머지는 많이 쓰지 않으므로 알아만 두자!


     

    안전  예/아니오는  내 데이터가 변경될 가능성이라 생각하면 된다.

     

    멱등성(Idempotence)은 동일한 작업이 반복적으로 수행되어도 동일한 결과를 반환하는 특성
    '동일한 작업'이란 동일한 요청을 여러번 서버에 보내는 것을 의미

     

     

     

     


    HTTP 상태 코드

     

    서버가 브라우저의 요청에 어떻게 반응했는지 나타내는 짧은 메시지

     

    2XX  (성공)  :  클라이언트의 요청이 성공적으로 받아들여졌음

       200 OK  :  요청이 성공적으로 처리됨

       201 Created   :   요청이 성공적으로 이루어져서 새 리소스가 생성됨.   POST에서 많이 나옴

       204 No Content  :  요청은 성공적이지만 컨텐츠를 제공하지 않음

     

    3XX  (리다이렉션)  :  요청을 완료하기 위해 추가적인 조치가 필요함

    (이 메소드가 없어졌다.  메소드, 컨트롤러명, url명이 변경된 경우)

       301 Moved Permanently   :   요청한 리소스가 영구적으로 새 위치로 이동됨.

       302 Found   :   요청한 리소스가 일시적으로 다른 URI로 이동됨

       304 Not Modified   :   이전에 방문했을때와 비교하여 리소스가 변경되지 않음

     

    4XX  (클라이언트 오류)  :  클라이언트의 잘못된 요청   (BE기준으로   FE잘못이거나 해커임)

       400 Bad Request   :  서버의 요청을 이해할 수 없다.

       401 Unauthorized   :   요청이 인증을 필요로 함.

       403 Forbidden   :   서버가 요청을 거부하고 있음

       404 Not Found   :   요청한 리소스를 찾을 수 없다.

       405 Method Not Allowed   :   요청한 메소드는 허용되지 않습니다.

     

    5XX  (서버 오류)   :   서버가 유효한 요청을 처리하지 못했음을나타냄  (BE 잘못)

       500 Internal Server Error   :    서버에 일반적인 오류가 발생

       501 Not Implemented   :    서버가 요청 메소드를 지원하지 않음

       503 Service Unavailable   :   서버가 일시적으로 요청을 처리할 준비가 되어있지 않음. 

                                                     보통 유지관리 또는 과부하로 인해 발생






Designed by Tistory.