웹개발

백엔드 웹 개발의 기초

lukeit 2024. 8. 16. 14:14

다루는 내용:

Backend Web Developing

  • API: Client가 필욯하는 데이터를 반환함
  • Backend Developer가 생각해야되는것: Client가 원하는 데이터를 어떻게, 잘 반환할까?
    1. 어떻게 = 방법 (REST API, GraphQL, Queue, Web Socket, ...)
    2. 잘 = 속도 + 가용성
      • 가용성 (Availability): 시스템에 문제가 생겨도 시스템을 계속 이용할 수 있는가
        • 두가지 Aspect에서 생각해야됨:
          1. 웹 서비스를 제공하는 입장에서 (개발자의 입장)
          2. 웹 서비스를 제공받는 입장에서 (AWS, Google Cloud, Naver Cloud, ...)
        • 좋게 만드는 방법:
          • MSA (Microservice Architecture)
          • Using Multiple Servers with Load Balancing
      • 잘:
        • 요청~응답의 속도 및 대량 트래픽 커버
        • 데이터 조회를 위한 DB내 Query 수행 시 쿼리를 효율정으로 작성해 소요시간 축소
        • 대량 트래픽에 기인한 DB 조회 시, 부담 축소 및 속도 향상을 위한 로컬 / 글로벌 Cache 도입
        • 대량 트래픽에 따른 다중 DB 접속 시 동시성 처리
          • 동시성: 순차적으로 수행되도록 Transaction이라는 기술을 도입해야함
            • "직렬화 (Serializable)"을 사용함
              • 단점: 느림!
              • 해결방법: 각 Transaction의 Isolation 레벨을 낮춤
              • Transaction의 실행을 겹치게 해서 각 Transaction 사이에 gap을 줄임
    Backend Developing = 데이터 관리 (데이터에 대한 모든 것)
    • CRUD: Create, Read, Update, Delete
    • 왜 데이터가 필요한가: 어떤 유저가 행위를 하면 저장해두어야 온전하게 처리가 가능함
    • URL, Method, Variable 등 을 받아야함
    • Backend가 있는 Application을 만들 때 신경써야 하는 것
    1. 어떤 요청이 들어왔는지 일일히 확인해야함
      • Framework를 사용한다면 Framework가 다 해줌!
        • "RequestMapping"
    2. JSON 형태로 오는 Request 요청 데이터를 객체로 받기 위해 "역직렬화(Deserialize)"가 필요함
      • Java가 데이터를 다룰 때 객체로 다루기 때문
      • Deserialize: 1차원의 문자열을 2차원의 객체로 바꾸는 작업
        • "MessageConverter" = Spring does it all for you!
    3. 객체인 Response 반환 데이터를 다시 JSON으로 반환하기 위해 "직렬화(Serialize)"가 필요함
      • "MessageConverter"
    • 이런식으로 일일히 개발해야하한다면 어렵기 때문에 Framework를 사용함

Serialize (직렬화) vs Deserialize (역직렬화)

  • Client: 웹 브라우저, 웹 서버
    • 3 가지:
      • Web Browser
        • Method를 사용하지 못함
      • Postman
        • GUI (Graphical User Interface based) 기반
      • cURL
        • CUI (Character User Interface) 기반
        • allows programs to interact using text-based commands
  • Client의 정보 (Request)를 JSON (=String) 형태로 보내줘야함
    • 서버가 요청을 받음 (서버는 항상 "객체"를 사용함)
      • 사용하는 이유: 객체를 "조작"하기 위해
    • DTO: Data Transfer Object
      • API가 받아내는 것들 = DTO
      • 전송하는 것들 = DTO
        • Summary:
        • 외부: REST API를 통해 네트워크에 있는 모든 데이터는 JSON(String)으로 전송됨
        • 내부: 백엔드 프로그래밍 언어로 개발한 웹 서버에서 모든 데이터는 객체(Object)로 다뤄짐
  • Deserializatioon = 요청: HTTP Request Body (JSON) -> Java 객체 (2D)로 변환
  • Serailization = 응답: Java Object (2D) -> Response Body (JSON)으로 변환
반응형