RESTful API가 뭔가요?
RESTful API는 HTTP 프로토콜을 기반으로 자원(Resource)을 중심으로 설계된 웹 API 아키텍처입니다.
- 자원은 고유한 URI로 식별됩니다.
- HTTP 메서드(GET, POST, PUT, DELETE)를 통해 자원에 대한 작업을 정의합니다.
- 무상태성(Stateless)을 가지며, 각 요청은 독립적으로 처리됩니다.
- 간단하고 일관된 인터페이스를 제공하여 클라이언트-서버 간 통신을 표준화합니다.
예를 들어, 사용자 관리 API에서 /users 엔드포인트는 GET(조회), POST(생성), PUT(수정), DELETE(삭제) 등 다양한 작업을 지원할 수 있습니다.
데이터베이스의 인덱스가 뭔가요?
데이터베이스 인덱스는 데이터를 빠르게 찾기 위해 사용하는 자료구조입니다. 책의 목차와 비슷한 개념으로, 데이터의 위치 정보를 미리 정렬해두어 검색 속도를 크게 향상시킵니다. 대신 데이터 추가나 수정 시 인덱스를 다시 정렬해야 해서 오버헤드가 발생할 수 있습니다.
장점:
- 데이터 검색 속도를 크게 향상시킵니다.
- 대용량 데이터에서 특정 레코드를 빠르게 찾을 수 있습니다.
- 정렬된 구조로 효율적인 데이터 접근을 가능하게 합니다.
단점:
- 인덱스 생성 및 유지에 추가 저장 공간이 필요합니다.
- 데이터 삽입, 수정, 삭제 시 인덱스를 다시 정렬해야 해서 성능에 오버헤드가 발생합니다.
- 잘못된 인덱스 설계는 오히려 성능을 저하시킬 수 있습니다.
결론적으로, 인덱스는 조회가 많고 상대적으로 데이터 변경이 적은 테이블에 효과적입니다.
HTTP 메서드(GET, POST, PUT, PATCH, DELETE)의 차이점을 설명해주세요.
GET: 서버로부터 데이터를 조회할 때 사용합니다. 주로 읽기 작업에 활용되며, URL에 파라미터를 붙여 데이터를 요청합니다.
POST: 새로운 데이터를 생성할 때 사용합니다. 요청의 body에 데이터를 담아 서버로 전송하며, 데이터 생성이나 복잡한 데이터 처리에 적합합니다.
DELETE: 특정 리소스를 삭제할 때 사용하는 메서드로, 서버의 데이터를 제거하는 목적으로 활용됩니다.
PUT: 기존 리소스를 완전히 대체하는 수정 메서드입니다. 전체 데이터를 교체하는 개념으로, 해당 리소스의 모든 정보를 새로운 데이터로 바꿉니다.
PATCH: 리소스의 일부분만 수정할 때 사용합니다. PUT과 달리 부분적인 데이터 변경에 최적화되어 있어 필요한 부분만 업데이트할 수 있습니다.
스프링과 스프링 부트의 차이점
Spring Framework와 Spring Boot의 차이점:
Spring Framework:
- 수동적인 설정이 필요함.
- 복잡한 설정 과정
- 별도의 웹 서버 설정 필요
Spring Boot:
- 자동 설정 지원
- 내장 웹 서버 제공
- 의존성 관리 간소화
- 빠르고 쉬운 개발 환경 제공
핵심: Spring Boot는 Spring Framework의 복잡한 설정을 대폭 간소화한 프레임워크입니다.
의존성 주입(Dependency Injection)이 무엇이고, 왜 사용하나요?
의존성 주입(Dependency Injection)은 객체 간의 의존 관계를 외부에서 주입받아 결합도를 낮추는 디자인 패턴입니다.
스프링에서는:
- 객체 생성과 관리를 프레임워크가 대신 수행
- 싱글톤 패턴으로 객체를 관리
- 객체 간 의존성을 자동으로 주입
- 코드의 결합도를 낮추고 유연성을 높임
핵심은 객체 간 의존성을 외부에서 주입받아 더 유연하고 테스트하기 쉬운 코드를 만드는 것입니다.
객체지향 프로그래밍의 4대 원칙에 대해 설명해주세요.
객체지향 프로그래밍의 4대 원칙:
- 캡슐화(Encapsulation)
- 객체의 내부 데이터를 외부로부터 보호
- 접근 제어자를 통해 객체의 안정성 보장
- 정보 은닉의 핵심
- 상속(Inheritance)
- 기존 클래스의 특성을 새로운 클래스에 물려줌
- 코드 재사용성 증가
- 계층적 분류 가능
- 추상화(Abstraction)
- 복잡한 시스템을 단순화
- 핵심적인 특성만 추출
- 공통된 특성을 정의
- 다형성(Polymorphism)
- 하나의 메서드나 클래스가 다양한 형태로 동작
- 같은 이름의 메서드가 다른 기능 수행 가능
- 유연한 프로그래밍 설계 가능
자바의 접근 제어자(public, private, protected)에 대해 설명해주세요.
자바의 접근 제어자
- public
- 가장 개방적인 접근 제어자
- 모든 클래스에서 접근 가능
- 어디서든 해당 멤버에 접근할 수 있음
- private
- 가장 제한적인 접근 제어자
- 같은 클래스 내부에서만 접근 가능
- 외부에서 직접 접근 불가
- protected
- 같은 패키지 내 클래스와 상속받은 클래스에서 접근 가능
- 상속 관계에 있는 클래스라면 다른 패키지여도 접근 가능
- default (접근 제어자 없음)
- 같은 패키지 내의 클래스에서만 접근 가능
- 명시적으로 작성하지 않으면 default 접근 제어자가 적용됨
오버로딩과 오버라이딩의 차이점은 무엇인가요?
오버로딩(Overloading):
- 같은 이름의 메서드를 매개변수의 타입이나 개수를 다르게 하여 여러 번 정의
- 컴파일 시점에 결정되는 정적 다형성
- 동일한 메서드명으로 다양한 매개변수를 처리할 수 있음
- 예시: print(int x), print(String s)
오버라이딩(Overriding):
- 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의
- 런타임 시점에 결정되는 동적 다형성
- 부모 클래스의 메서드와 동일한 시그니처(이름, 매개변수)를 가진 메서드를 재정의
- @Override 애노테이션을 사용하여 명시적으로 표현
'BackEnd' 카테고리의 다른 글
[Spring] 백엔드 면접 질문 정리 - 4 (0) | 2025.02.26 |
---|---|
[Java] 백엔드 면접 질문 정리 - 3 (0) | 2025.02.25 |
[CS] 웹 서버(WS)와 웹 어플리케이션 서버(WAS) (0) | 2025.02.17 |
[CS] 모놀리식 아키텍처와 마이크로서비스 아키텍처 (0) | 2025.02.17 |
[Backend] 헥사고날 아키텍처를 예제를 통해 쉽게 이해하기 - 유연하고 확장가능한 설계 (0) | 2025.02.06 |