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
- 불변성(Immutability)
- 참조
- 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 - 컨트롤러에게 받은 모델의 결과값을 가지고 사용자에게 보여줄 화면을 만듦. 만들어진 화면을 웹브라우저에 전송해 출력하게 함.
- Controller
- 장점
- 서로 분리되어 각자의 역할에 집중 => 애플리케이션의 유지보수성, 확장성, 유연성 증가
- 참조
- 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