이론공부

기술면접 준비(1)

DJ.Kang 2024. 9. 5. 11:38
  1. RESTful한 API설계의 장점
    • 개념 
      • RESTful : REST원칙을 따르는 API 설계 방식으로, HTTP프로토콜을 기반으로 자원을 정의하고 그 자원에
                        대한 상태 정보를 주고받는 방식
      • 자원(Resource) : URI로 식별되는 개체
      • 표현(Repesentation) : 클라이언트가 자원에 접근할 때, 자원의 상태를 JSON, XML등의 형식으로 전송
      • 무상태성(StateLessness) : 서버는 각 요청을 독립적으로 처리, 클라이언트의 상태를 서버에 저장하지 않음
      • 캐시 가능(Casheable) : HTTP의 캐싱 메커니즘을 사용해 응답을 클라이언트 측에 저장 가능(성능최적화)
      • 계층화 구조(Layerd System) : 클리언트와 서버 사이에 프록시, 게이트웨이 등을 중간 계층으로 배치해
                                                        시스템의 확장성을 높일 수 있음
    • 장점 
      • 확장성 : Stateless(서버가 클라이언트의 상태를 저장하지 않는 것)특성을 가지므로 클라이언트와 서버 간의
                      결합도가 낮다.
      • 유연성 : 다양한 데이터형식을(JSON, XML, HTML) 주고받을 수 있음
      • 직관성 : URI를 통해 자원을 명확하게 식별할 수 있으며, HTTP메서드를 이용해 직관적으로 API 설계 가능
      • 성능 : HTTP의 캐싱 메커니즘(이전의 응답을 임시로 저장하여 재사용)을 활용해 성능을 향상시킬 수 있음
      • 표준화된 인터페이스
  2. 적절한 관심사 분리의 필요성
    • 유지 보수성 증가 : 각 기능이 명확히 분리하여 전체 시스템에 미치는 영향을 최소화
    • 코드 재사용성 : 기능별로 분리된 코드 모듈은 다른 프로젝트나 시스템에서 사용 가능
    • 가독성 개선 : 각 구성 요소가 한가지 책임만 맡고 있으면 코드가 간결해짐
    • 디버깅 및 테스트 용이 : 문제가 발생한 영역을 쉽게 파악하고, 개별 테스트 가능
  3. Setter를 무분별하게 사용하면 안 되는 이유
    • 캡슐화 위반 : 객체 내부 상태가 외부에서 쉽게 접근 할 수 있어 객체의 무결성이 깨질 수 있음
    • 객체 일관성 저하 : 특정 값이 잘못 설정되거나, 예상치 못한 변경이 발생한 경우 객체의 일관성이 무너질 수 있음
    • 변경 추적 어려움 : Setter로 값이 변경될 경우 그 변경이 언제, 왜 일어났는지 추적이 어려움
    • 결합도 증가 : 객체 내부 상태가 외부에 의해 변경되면 객체간의 결합도가 증가함
  4. NoSQL과 RDBMS에 대한 설명
    • NoSQL
      • 비관계형 데이터베이스로, 구조화된 스키마가 없거나 유연한 스키마를 가짐
      • 대규모 데이터 처리와 빠른 읽기/쓰기 작업에 최적화
      • 수평 확장이 용이하여, 클러스터링을 통해 쉽게 확장 가능
      • 다양한 데이터 모델 제공(문서형, 키-값, 열, 그래프)
    • RDBMS
      • 관계형 데이터베이스로, 명확한 스키마와 테이블 간의 관계를 기반으로 데이터 관리
      • SQL을 사용하여 데이터를 조회 및 조작
      • ACID속성(원자성, 일관성, 고립성, 지속성)을 보장하여 데이터의 무결성을 중요시함
      • 수직 확장을 주로 사용하여 서버 성능을 높임
특징 RDMBS NoSQL
데이터 구조 고정된 스키마 유연한 스키마(문서, 키-값, 그래프 등)
확장성 수직적 확장(하드웨어 성능향상) 수평적 확장(서버, 데이터베이스 추가)
쿼리 언어 SQL 데이터베이스마다 다름
ACID지원 ACID 트랜잭션 보장 대부분 Eventuallyu Consistent
데이터 유형 정형 데이터 비정형 또는 반정형 데이터
유연성 스키마 변경이 어렵고 제한적 스키마 유연성이 높므
속도 복잡한 쿼리와 트랜잭션에 최적화 대량의 데이터를 빠르게 처리 가능
  1. 객체지향 프로그래밍이란 무엇이고 활용 방법
    • 객체지향 프로그래밍(OOP)
      • 상태(속성)와 행위(메서드)를 갖는 독립적인 단위인 '객체'를 기본 단위로 구성하여 설계하고 구현하는 방법
    • 원칙
      • 캡슐화 : 객체 내부의 상태를 보호하고, 외부에서 필요한 부분만 공개
      • 상속 : 기존 클래스의 속성과 메서드를 상속받아 새로운 클래스를 생성
      • 다형성 : 동일한 메서드가 다양한 객체에서 다르게 동작할 수 있음
      • 추상화 : 복잡한 내용을 감추고, 필요한 인터페이스만 제공
    • 활용 방법
      • 복잡한 문제를 객체 단위로 나누어 해결
      • 객체 간의 협력을 통해 시스템을 모델링하고 설계
      • 코드의 재사용성과 유지보수성을 높이며, 확장성과 유연성을 제공