본문 바로가기

TIL

HTTP/HTTPS와 REST/GraphQL 개념 정리

HTTP와 HTTPS 개념 정리

  • HTTP (Hypertext Transfer Protocol): 데이터를 암호화하지 않고 평문으로 주고받는 프로토콜. 공격자가 데이터 전송을 도청하거나 수정할 위험이 있음.
  • HTTPS (Hypertext Transfer Protocol Secure): 데이터를 SSL/TLS 암호화 방식으로 보호하며, 인증서를 통해 서버의 신뢰성을 검증함. 이를 통해 데이터의 무결성과 기밀성을 보장.

예상 질문

 

  • HTTP와 HTTPS의 차이점은 무엇인가요?
    • 모범 답안: HTTP는 데이터를 암호화하지 않고 전송하는 반면, HTTPS는 SSL/TLS 암호화를 통해 데이터를 보호합니다. HTTPS는 인증서를 사용해 서버의 신뢰성을 검증하고, 클라이언트와 서버 간 데이터의 무결성과 기밀성을 보장합니다.
  • HTTPS의 장점은 무엇인가요?
    • 모범 답안: HTTPS는 데이터의 기밀성을 보장하고, 중간에서 도청하거나 데이터를 변경하는 공격을 방지합니다. 특히, 사용자의 민감한 정보를 처리하는 서비스에서 필수적으로 사용되며, 검색 엔진에서도 HTTPS 사이트가 우선순위를 가지는 SEO 측면에서도 이점이 있습니다.

REST API와 GraphQL 개념 정리

  • REST API (Representational State Transfer): HTTP 기반의 요청-응답 구조를 따르는 API. 고정된 엔드포인트로 특정 리소스에 접근하며, CRUD 작업을 수행.
  • GraphQL: Facebook이 개발한 데이터 쿼리 언어로, 클라이언트가 요청한 데이터만 받을 수 있도록 설계됨. 단일 엔드포인트로 여러 자원에 접근 가능하고, 필요한 데이터만 선택적으로 불러올 수 있음.

예시 코드

  • REST API 예시 (사용자 데이터 가져오기)
// REST API GET 요청
fetch('https://api.example.com/users/1')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

// 결과 (전체 데이터)
{
  "id": 1,
  "name": "John Doe",
  "email": "john@example.com",
  "posts": [...]
}

 

 

  • GraphQL 예시 (사용자 이름과 이메일만 가져오기)
const query = `
  {
    user(id: 1) {
      name
      email
    }
  }
`;

fetch('https://api.example.com/graphql', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ query })
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

// 결과 (필요한 데이터만)
{
  "data": {
    "user": {
      "name": "John Doe",
      "email": "john@example.com"
    }
  }
}

예상 질문

  • REST API와 GraphQL의 차이점은 무엇인가요?
    • 모범 답안: REST API는 고정된 엔드포인트로 각 리소스에 접근하며, 전체 데이터를 반환하는 반면, GraphQL은 단일 엔드포인트에서 필요한 데이터만 선택적으로 요청할 수 있습니다. GraphQL은 오버페칭을 방지하고, 요청의 유연성을 제공합니다.
  • GraphQL의 장점은 무엇인가요?
    • 모범 답안: GraphQL의 가장 큰 장점은 클라이언트가 원하는 데이터만 요청할 수 있다는 점입니다. 이를 통해 오버페칭과 언더페칭 문제를 해결할 수 있으며, 하나의 엔드포인트로 여러 자원에 접근할 수 있어 API의 확장성과 유연성이 높습니다.