웹 서비스

JeBread·2024년 5월 22일

면접 대비

목록 보기
7/12

웹 서비스의 동작 원리와 구조에 대한 이해는 소프트웨어 개발자에게 매우 중요한 주제입니다. 웹 서비스는 클라이언트와 서버 간의 데이터 통신을 통해 다양한 기능을 제공합니다. 여기에는 웹 서비스의 기본 원리, 아키텍처, 프로토콜, 데이터 형식, 그리고 주요 구성 요소 등이 포함됩니다.

1. 웹 서비스의 기본 원리

웹 서비스는 클라이언트와 서버 간의 요청(request)과 응답(response)을 통해 데이터를 주고받는 구조입니다. 클라이언트는 브라우저, 모바일 앱, 또는 다른 서버가 될 수 있으며, 서버는 요청을 처리하고 적절한 응답을 반환하는 역할을 합니다.

2. 웹 서비스의 구조

웹 서비스는 일반적으로 다음과 같은 구조를 가집니다.

  • 클라이언트(Client): 서비스를 요청하는 엔티티. 예: 웹 브라우저, 모바일 앱.
  • 서버(Server): 요청을 처리하고 응답을 반환하는 엔티티.
  • 네트워크(Network): 클라이언트와 서버 간의 데이터를 전송하는 매개체.

3. 주요 프로토콜

  • HTTP/HTTPS: 가장 일반적인 웹 서비스 프로토콜로, 웹 브라우저와 서버 간의 데이터 통신에 사용됩니다. HTTPS는 HTTP에 SSL/TLS를 추가하여 보안을 강화한 프로토콜입니다.
  • REST: Representational State Transfer의 약자로, HTTP 프로토콜을 기반으로 하는 아키텍처 스타일입니다. RESTful 서비스는 URL을 통해 리소스를 식별하고, HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 리소스를 조작합니다.
  • SOAP: Simple Object Access Protocol의 약자로, XML 기반의 메시지 프로토콜입니다. 주로 기업 시스템 간의 데이터 통신에 사용됩니다.

4. 데이터 형식

  • JSON (JavaScript Object Notation): 가볍고, 인간이 읽기 쉬운 데이터 형식. 웹 서비스에서 널리 사용됩니다.
  • XML (eXtensible Markup Language): 계층적 데이터 구조를 표현하는 데 사용되며, SOAP 프로토콜에서 주로 사용됩니다.

5. 웹 서비스 아키텍처

  • 클라이언트-서버 모델: 클라이언트가 요청을 보내고, 서버가 응답을 반환하는 기본적인 웹 서비스 아키텍처입니다.
  • 마이크로서비스 아키텍처: 애플리케이션을 여러 작은 서비스로 분리하여 각각 독립적으로 배포하고 확장할 수 있는 아키텍처입니다.

6. 주요 구성 요소

  • API (Application Programming Interface): 다른 소프트웨어가 상호작용할 수 있도록 제공하는 인터페이스입니다.
  • 웹 서버(Web Server): 클라이언트의 HTTP 요청을 처리하고, 웹 페이지나 데이터를 반환합니다. 예: Apache, Nginx.
  • 애플리케이션 서버(Application Server): 웹 서버와 협력하여 동적 웹 페이지를 생성하고, 데이터베이스와 상호작용합니다. 예: Node.js, Django.
  • 데이터베이스(Database): 데이터를 저장하고 관리하는 시스템. 예: MySQL, PostgreSQL, MongoDB.

7. 웹 서비스 동작 예시

  • 클라이언트 요청: 웹 브라우저가 https://example.com에 접속합니다.
  • DNS 조회: 브라우저가 도메인 이름을 IP 주소로 변환하기 위해 DNS 조회를 수행합니다.
  • TCP 연결: 브라우저가 서버의 IP 주소로 TCP 연결을 설정합니다.
  • HTTP 요청: 브라우저가 서버에 HTTP GET 요청을 보냅니다.
  • 서버 처리: 서버가 요청을 처리하고, 필요한 경우 데이터베이스에서 데이터를 조회합니다.
  • HTTP 응답: 서버가 요청된 리소스를 포함한 HTTP 응답을 브라우저에 반환합니다.
  • 브라우저 렌더링: 브라우저가 응답을 받아 HTML, CSS, JavaScript를 해석하여 웹 페이지를 렌더링합니다.

Q : CORS(Cross-Origin Resource Sharing)는 무엇이며, 왜 중요한가요?

A :

CORS는 웹 페이지가 자신의 도메인과 다른 도메인에서 리소스를 요청할 수 있도록 허용하는 보안 기능입니다. 기본적으로 브라우저는 동일 출처 정책(Same-Origin Policy)에 의해 다른 출처의 리소스 요청을 차단합니다. CORS는 서버 측에서 특정 도메인에서의 요청을 허용하도록 설정하여 이 문제를 해결합니다. 이는 특히 API 호출에서 중요한데, 여러 도메인에서 접근할 수 있도록 허용해야 하는 경우가 많기 때문입니다.

Q : 세션(Session)과 쿠키(Cookie)의 차이점은 무엇인가요?

A :

  • 쿠키
    클라이언트 측에 저장되는 작은 데이터 파일입니다.
    서버가 클라이언트에 설정하고, 클라이언트는 이후의 요청마다 쿠키를 서버에 전송합니다.
    세션 유지, 사용자 추적, 사용자 설정 저장 등에 사용됩니다.
  • 세션
    서버 측에서 사용자별로 상태를 유지하기 위한 저장소입니다.
    클라이언트는 세션 ID를 쿠키나 URL 파라미터를 통해 서버에 전송합니다.
    세션은 서버 메모리나 데이터베이스에 저장되며, 클라이언트별로 분리된 데이터를 유지합니다.

Q : 웹 서비스의 성능을 최적화하는 방법에는 어떤 것들이 있나요?

A :

  • 캐싱(Caching): 자주 요청되는 데이터를 캐시에 저장하여 서버 부하를 줄이고 응답 시간을 단축합니다.
  • 로드 밸런싱(Load Balancing): 트래픽을 여러 서버에 분산시켜 성능과 가용성을 향상시킵니다.
  • CDN(Content Delivery Network): 지리적으로 분산된 서버 네트워크를 통해 콘텐츠를 빠르게 제공하여 로딩 속도를 개선합니다.
  • 최적화된 데이터베이스 쿼리: 쿼리 최적화, 인덱스 사용, 데이터베이스 정규화 등을 통해 데이터베이스 성능을 향상시킵니다.
  • 비동기 처리: 긴 작업을 비동기적으로 처리하여 사용자 응답 속도를 개선합니다.

Q : JWT(JSON Web Token)는 무엇이며, 어떻게 사용하나요?

A :

JWT는 JSON 객체를 사용하여 정보를 안전하게 전송하기 위한 토큰입니다. 주로 인증과 권한 부여에 사용됩니다. JWT는 세 부분(헤더, 페이로드, 서명)으로 구성되며, 각 부분은 Base64로 인코딩되어 점(.)으로 구분됩니다.

  • 헤더(Header): 토큰 타입과 해싱 알고리즘 정보를 포함합니다.
  • 페이로드(Payload): 클레임(claim)이라고 불리는 사용자 정보나 데이터가 포함됩니다.
  • 서명(Signature): 헤더와 페이로드를 기반으로 비밀 키를 사용하여 생성된 서명입니다.

JWT는 서버가 클라이언트를 인증한 후, 클라이언트는 이후의 요청마다 JWT를 헤더에 포함하여 서버에 전송합니다. 서버는 JWT의 서명을 검증하여 요청을 처리합니다.

Q : 웹소켓(WebSocket)은 무엇이며, 언제 사용하나요?

A :

웹소켓은 클라이언트와 서버 간에 양방향 통신을 가능하게 하는 프로토콜입니다. HTTP와는 달리, 웹소켓은 연결을 유지한 상태에서 실시간으로 데이터를 주고받을 수 있습니다. 이는 채팅 애플리케이션, 실시간 알림, 온라인 게임 등 실시간 데이터 통신이 필요한 경우에 유용합니다.

Q : RESTful API 설계의 좋은 사례는 무엇인가요?

A :

  • 명확하고 일관된 URL 구조: 자원(Resource)을 명확하게 식별할 수 있는 URL을 사용합니다.
    • 예: /users, /users/{id}, /articles/{id}/comments
  • HTTP 메서드 사용: 자원에 대한 작업을 나타내기 위해 적절한 HTTP 메서드를 사용합니다.
    • GET: 자원 조회
    • POST: 자원 생성
    • PUT: 자원 전체 업데이트
    • PATCH: 자원 부분 업데이트
    • DELETE: 자원 삭제
  • 상태 코드 사용: 응답에 적절한 HTTP 상태 코드를 포함합니다.
    • 200 OK: 성공적인 요청
    • 201 Created: 자원 생성 성공
    • 400 Bad Request: 잘못된 요청
    • 404 Not Found: 자원을 찾을 수 없음
    • 500 Internal Server Error: 서버 오류
  • 페이로드에 JSON 사용: 데이터 형식으로 JSON을 사용하여 가독성과 사용성을 높입니다.
  • 버전 관리: API의 버전을 명시하여 향후 변경 사항에 대비합니다.
    예: /api/v1/users

0개의 댓글