React 기술면접 3-1. RESTful API

강연주·2025년 1월 6일

🙋‍♀️ 기술면접

목록 보기
97/112

RESTful API

  1. RESTful API에 대해 이해하고 설명할 수 있습니다.

    • 답변)
      • 의도:
        • RESTful API의 개념과 사용법 이해 여부 평가.
      • 팁:
        • REST의 정의와 원칙 설명.
        • RESTful API의 주요 특징과 HTTP 메서드(GET, POST, PUT, DELETE)의 사용 사례를 언급.
        • RESTful API를 사용하는 예제 떠올리기.
      • 모범답안:
        • REST는 Representational State Transfer의 약자로, 자원을 URI로 표현하고 HTTP 메서드를 통해 조작하는 아키텍처 스타일.
        • RESTful API는 클라이언트와 서버 간의 통신을 위한 인터페이스로, 일관성과 예측 가능성을 제공.
        • GET은 데이터 조회, POST는 데이터 생성, PUT은 데이터업데이트, DELETE는 데이터를 삭제에 사용.

  • 아키텍처 스타일 : 시스템 설계의 기본 구조와 규칙을 정의하는 방식.

RESTful 예시

✅ RESTful URL
- GET /users                 // 사용자 목록 조회
- GET /users/123            // 특정 사용자 조회
- POST /users               // 새 사용자 생성
- PUT /users/123           // 사용자 정보 수정
- DELETE /users/123        // 사용자 삭제

❌ Non-RESTful URL
- GET /getUsers            // 동사 사용
- GET /getUserById/123     // 동사 사용
- POST /createUser         // 동사 사용
- GET /api.php?action=deleteUser&id=123  // 쿼리 파라미터로 액션 전달

URI (Uniform Resource Identifier)

리소스를 식별하는 통합된 방식을 의미한다. (리소스 식별의 모든 방식)
URL과 URN을 포함하는 상위 개념.

예: urn:isbn:0-486-27557-4 (책의 ISBN)

URL (Uniform Resource Locator)

리소스의 위치를 나타내는 주소를 의미한다.
웹에서 주로 사용되는 형식이다.
예: https://api.example.com/users/123
실제 리소스의 접근 방법을 제공한다.

URN (Uniform Resource Name)

리소스의 영구적이고 유니크한 이름을 지정하는 방식이다.
위치에 독립적이며, 리소스를 옮기더라도 동일하게 식별 가능하다.
"urn:" 접두어로 시작한다.

urn:isbn:0-486-27557-4 (도서 식별)
urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 (UUID)
urn:ietf:rfc:2648 (IETF 문서)

➡️ 실제 웹 개발에서는 URL이 가장 널리 사용되며, URN은 특수한 경우(도서 ISBN, 문서 식별자 등)에 주로 쓰인다.


RESTful API 통신 시 주의사항

데이터 유효성 검사

🖥️ javascript

// 데이터 전송 전 유효성 검사
const submitUser = async (userData) => {
  if (!userData.email || !userData.name) {
    throw new Error('필수 필드가 누락되었습니다');
  }
  try {
    const response = await axios.post('/users', userData);
    return response.data;
  } catch (error) {
    handleError(error);
  }
};

에러 처리

🖥️ javascript

const handleError = (error) => {
  if (error.response) {
    // 서버가 응답한 에러
    switch (error.response.status) {
      case 400:
        alert('잘못된 요청입니다');
        break;
      case 401:
        // 로그인 페이지로 리다이렉트
        redirectToLogin();
        break;
      // ... 기타 에러 처리
    }
  } else if (error.request) {
    // 요청은 보냈지만 응답을 받지 못함
    alert('서버와 통신할 수 없습니다');
  } else {
    // 요청 설정 중 에러 발생
    console.error('Error', error.message);
  }
};

헤더 설정

🖥️ javascript

// API 요청 시 공통 헤더 설정
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
axios.defaults.headers.post['Content-Type'] = 'application/json';

RESTful API 설계 원칙

1. 자원은 URI로 표현하고, 행위는 HTTP 메서드로 표현

2. 계층 구조를 활용한 리소스 표현
Copy/users/{userId}/posts/{postId}/comments

3. 쿼리 파라미터는 필터링, 정렬, 페이징에 사용
/users?role=admin&sort=name&page=2

3. 응답 데이터 구조화

🖥️ javascript
// 일관된 응답 구조 예시
{
  success: true,
  data: {
    users: [...],
    pagination: {
      currentPage: 1,
      totalPages: 10
    }
  },
  error: null
}
profile
아무튼, 개발자

0개의 댓글