https://github.com/JaeYeopHan/Interview_Question_for_Beginner 위 링크에 있는 문제에 대한 답안을 정리해보았다.

1. 전산 기초

개발상식

객체 지향 프로그래밍이란?

  • 컴퓨터 프로그래밍 패러다임 중 하나. 프로그램을 단순히 명령어 모음(절차적 프로그래밍)으로 보는 것이 아니라, 객체라는 기본 단위들의 상호작용으로 보는 것. 이전 패러다임에 비해 인간 중심적 패러다임이라고 할 수 있다. 현실 세계의 사물을 객체라 보고 그 객체로부터 필요한 특징을 추상화해 프로그래밍 하는 것이기 때문.

###RESTFulAPI란?

  • REST는 Representational State Transfer. 웹에 존재하는 모든 자원에 고유한 URI를 부여해 활용하는 것. REST의 구성 요소로는 자원(URI), 행위(HTTP METHOD), 표현(Representations)으로 이루어져 있다. 즉 REST는 HTTP 기반으로 필요한 자원에 접근하는 방식을 정해놓은 아키텍쳐.
  • REST의 특징
    • Uniform Interface: HTTP 표준만 따른다면 어떤 플랫폼에서도 사용할 수 있는 인터페이스 스타일
    • Stateless: Rest는 상태 정보를 유지하지 않고 서버는 각각의 요청을 다른 것으로 인식하고 처리
    • Cachable: HTTP의 기존 웹 표준을 그대로 이용하기 때문에 HTTP가 가진 캐싱 기능 적용
    • Self-descriptiveness
    • Client-Server 구조: REST 서버는 API 제공, 클라이언트는 사용자 인증에 관한 일 관리. 각각의 역할이 구분되므로 의존성이 적어짐.
    • Layered System
  • REST API?
    • REST 기반 규칙을 지켜서 설계된 API
  • REST API 설계 규칙
    • URI는 정보의 자원을 표기. 자원의 이름은 동사보다는 명사.
    • 자원의 행위는 HTTP METHOD로 표현.
    • 슬래시(/)는 계층 관계를 표현
    • URI 마지막은 슬래시 사용X
    • 하이픈(-)은 가독성을 높이는데 사용. 언더바(_)나 밑줄은 사용하지 않음.
    • 파일 확장자는 URI에 포함 X
  • 장점
    • Open API를 제공하기 쉽다
    • 멀티플랫폼 지원 및 연동이 용이
    • 원하는 타입으로 데이터를 주고받을 수 있다
    • 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다
  • 단점
    • 사용할 수 있는 메소드가 4가지밖에 없다
    • 분산환경에는 부적합하다
    • HTTP 통신 모델에만 지원한다
  • 참조
    • https://velog.io/@stampid/REST-API%EC%99%80-RESTful-API

TDD란 무엇이며 어떤 장점이 있는가?

  • Test Driven Development. 테스트 코드 작성 -> 코드 개발 -> 리팩토링 순으로 짧은 개발을 반복하는 것.
  • 장점
    • 실시간으로 오류 상황을 파악하여 시스템 결함을 방지할 수 있다
    • 짧은 개발 주기로 고객의 요구사항을 빠르게 수용할 수 있음
    • 코드의 모듈화가 자연스럽게 이루어짐
    • 유지보수가 쉬워짐
  • 단점
    • 기존의 개발 프로세스에 테스트 코드까지 더해져 코드 생산 비용이 높아짐
    • 어떻게 테스트를 할지, 무슨 프레임워크를 선택할지 등 여러 고려가 필요
    • 모든 상황에 대해 테스트 코드를 작성하기 어려움
  • 참조
    • https://velog.io/@velopert/TDD%EC%9D%98-%EC%86%8C%EA%B0%9C
    • https://m.blog.naver.com/PostView.nhn?blogId=suresofttech&logNo=221039173819&proxyReferer=https:%2F%2Fwww.google.com%2F

함수형 프로그래밍이란 무엇인가?

  • 함수형 프로그래밍
    • 계산을 수학적 함수의 조합으로 생각하는 방식
    • 일반적인 프로그램 언어에서 함수가 특정 동작을 수행하는 역할을 담당하는 것과 반대. 함수를 수행해도 함수 외부의 값이 변경될 수 없다.
  • 함수형 프로그래밍 언어의 특징
    • 불변성(Immutability)
      • 변경 가능한 상태를 최대한 제거
      • 함수 내부에 상태가 존재하지 않아 같은 입력에는 항상 같은 출력값이 보장
      • 부작용(side effect)가 없는 함수
    • First-class, higher-ordered functions
      • 함수는 일등 시민. 함수를 변수에 할당할 수 있고, 다른 함수의 인자로 전달할 수도, 다른 함수의 결과값으로 반환할 수도 있음.
    • Lazy evaluation
  • 참조
    • https://velog.io/@kyusung/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9A%94%EC%95%BD
    • https://medium.com/@lazysoul/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80-d881230f2a5e

MVC 패턴이란 무엇인가?

  • MVC 패턴
    • 소프트웨어 디자인 패턴 중 하나.
      • 디자인 패턴: 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책
  • 구성요소
    • Controller
      • 클라이언트의 요청을 받았을 때, 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출, 혹은 모델에 전달하기 쉽도록 데이터 가공. 모델이 업무를 마치면 결과를 뷰에게 전달.
    • Model
      • 애플리케이션의 데이터.
      • 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보.
    • View - 컨트롤러에게 받은 모델의 결과값을 가지고 사용자에게 보여줄 화면을 만듦. 만들어진 화면을 웹브라우저에 전송해 출력하게 함.
  • 장점
    • 서로 분리되어 각자의 역할에 집중 => 애플리케이션의 유지보수성, 확장성, 유연성 증가
  • 참조
    • https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC
    • https://m.blog.naver.com/jhc9639/220967034588
    • https://asfirstalways.tistory.com/180