본문 바로가기
TIL

내일배움캠프 7주차 모의면접

by 율량동박씨 2024. 5. 28.

오늘의 키워드

  • 객체 지향 프로그래밍이란
  • RESTful API 설계를 하는 이유
  • 적절한 관심사를 나누는 이유(SoC)
  • NOSQL과 RDBMS에 대해 설명
  • Setter를 무분별하게 사용하면 안 되는 이유는 무엇인가

오늘의 내용

객체 지향 프로그래밍이란 

  1. 캡슐화(Encapsulation): 객체의 상태(속성)를 객체 내부에 감추고, 객체가 제공하는 메서드를 통해서만 상태를 변경할 수 있게 한다
  2. 상속(Inheritance): 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 재사용할 수 있게 한다
  3. 다형성(Polymorphism): 동일한 메서드 호출이 객체의 타입에 따라 다르게 동작할 수 있도록 한다
  4. 추상화(Abstraction): 복잡한 시스템에서 핵심적인 개념만을 모델링하여 단순화한다

RESTful API 설계를 하는 이유

  1. 확장성: REST는 클라이언트와 서버 간의 인터페이스를 명확하게 분리하여, 각각 독립적으로 확장할 수 있다
  2. 유연성: REST는 HTTP 프로토콜을 기반으로 하여, 다양한 형식(JSON, XML 등)의 데이터를 전송할 수 있다
  3. 보안성: RESTful 서비스는 HTTP의 보안 기능(예: TLS)을 활용할 수 있다
  4. 캐싱: HTTP의 캐싱 메커니즘을 통해 응답을 캐시 하여 성능을 향상할 수 있습니다
  5. 표준화: RESTful API는 널리 사용되는 표준으로, 이를 준수하면 다른 시스템과의 상호운용성이 높아진다

적절한 관심사를 나누는 이유(SoC)

  1. 유지보수성: 코드를 이해하고 수정하기 쉽습니다. 변경 사항이 특정 모듈에 국한되기 때문에 영향을 최소화할 수 있다
  2. 재사용성: 각 모듈이 독립적으로 설계되므로 다른 프로젝트나 시스템에서 재사용하기 쉽다
  3. 테스트 용이성: 모듈별로 독립적인 테스트가 가능하여, 전체 시스템의 신뢰성을 높일 수 있다
  4. 가독성: 코드의 구조가 명확해져서 협업 시 커뮤니케이션이 원활해진다

NoSQL과 RDBMS에 대해 설명

  • NoSQL:
    • 데이터 저장 방식이 비관계형인 데이터베이스 시스템이다
    • 다양한 데이터 모델(문서, 키-값, 그래프, 열 기반 등)을 지원한다
    • 스키마가 없거나 유연하여 구조가 변경되는 데이터를 처리하기에 적합하다
    • 수평적 확장이 용이하여 대규모 데이터 처리를 잘 지원한다
    • 예시: MongoDB, Cassandra, Redis, CouchDB
  • RDBMS:
    • 관계형 데이터베이스 관리 시스템으로, 데이터를 테이블 형식으로 저장한다
    • 엄격한 스키마를 가지고 있어 데이터 무결성 보장이 가능하다
    • SQL을 사용하여 데이터를 관리하며, ACID(원자성, 일관성, 고립성, 지속성) 속성을 제공한다
    • 수직적 확장(서버의 성능 향상)을 주로 사용한다
    • 예시: MySQL, PostgreSQL, Oracle, Microsoft SQL Server

Setter를 무분별하게 사용하면 안 되는 이유

  1. 캡슐화 위반: 객체의 내부 상태를 외부에서 쉽게 변경할 수 있게 되어, 객체의 일관성이 깨질 수 있다
  2. 불변성 저하: 객체의 상태가 언제든지 변경될 수 있으므로, 불변 객체(Immutable Object)를 만들기 어렵다
  3. 디버깅 어려움: 객체의 상태 변경 추적이 어려워져, 버그를 찾고 수정하는 데 어려움을 겪을 수 있다
  4. 설계의 취약성: 객체의 내부 구현이 외부에 노출되면, 객체 설계가 변경될 때마다 이를 사용하는 모든 코드에 영향을 미칠 수 있다
  5. 테스트의 복잡성: 객체의 상태가 외부에서 변경될 수 있으므로, 예측 가능한 상태를 유지하기 어려워 단위 테스트가 복잡해질 수 있다

대안으로, 객체를 초기화할 때 필요한 모든 데이터를 생성자를 통해 전달하고, 필요한 경우에만 제한적으로 Setter를 사용하거나, 상태를 변경하는 메서드를 통해 객체의 일관성을 유지할 수 있도록 설계하는 것이 좋다

오늘의 회고

  • 프로젝트를 하다가 뭘 잘못했는지 빌드중 실행이 전혀 안되기 시작했다 도대체 어떻게 처리해야 되는지 찾아도 안 나오고 gpt도 동원해 봤지만 실패해서 결국 프로젝트를 새로 만들기 시작했다.......