일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 개발상식
- 1003
- BFS
- 다이나믹프로그래밍
- spring-mvc
- vsCode
- webpack
- Prettier
- dp
- Notion to Github Markdown
- 완전탐색
- react
- notion
- CONVERTER
- 백준
- IT-Note
- 동적계획법
- 코딩테스트
- spring
- DFS
- 프로그래멋
- 알고리즘
- 현파랑
- 패스트캠퍼스
- ESLint
- js
- 접근법
- java
- 발자취
- 면접
Archives
- Today
- Total
두 번째 뇌
[Chapter-01] IT 기술면접대비 & 개발자 면접 질문 - 개발 상식 본문
개발상식
목차
- 📖짤막한 IT 백과사전
- OOP 는 뭐에요?
- OOP 의 특징은 뭐에요?
- OOP 의 5가지 원칙을 설명해주세요.
- Library 와 Framework 의 차이점을 알려주세요.
- Model1 과 Model2 는 무엇이 다른가요?
- MVC 패턴은 무엇인가요?
- REST, RESTful 은 뭐죠? RESTful API 는요?
- TDD 는요?
- 함수형 프로그래밍 은 뭐에요?
- Git 과 Github 은 어떻게 달라요?
📖짤막한 IT 백과사전
용어정의
Annotation | 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종 |
API | Application Programming Interface, 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스 |
Architecture | 시스템의 구조나 구조들로 각 요소들과 외부에 보이는 특성들 및 요소간의 관계 |
Class | 객체를 정의 하기 위한 상태(멤버변수)와 메서드(멤버변수)로 구성되는 틀 |
CSS | Cascading Style Sheet, 문서의 콘텐츠와 레이아웃, 글꼴 및 시각적 요소들로 표현되는 문서의 외관(디자인)을 분리하기 위한 목적으로 사용하는 언어 |
Cursor | 테이블에서 여러 개의 행을 쿼리한 후에, 쿼리의 결과인 행 집합을 한 행씩 처리하기 위해 사용하는 데이터베이스 객체 |
DCL | Double checked locking, 멀티 스레드 환경에 안전한 Singleton 패턴을 구현하기 위한 기법. 이미 인스턴스가 생성된 경우에 동기화 블록에 들어가지 않도록 하기위해 두 번의 검사를 하도록 하는 프로그래밍 기법 |
Encapsulation | 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉하고자 하는 프로그래밍 속성 |
Factory | 어떤 클래스의 인스턴스를 만들지를 서브클래스에서 결정하게 하는 객체 생성 디자인패턴 |
GC | Garbage Collector, 힙 메모리에 남아있는 데이터를 효율적으로 관리(삭제)하는 역할을 하는 도구 |
Glue | Code 코드간 단단하게 결합되어 동작의 수정 및 테스트가 어려운 코드 |
Index | 데이터들의 ROWID 정보를 별도의 세그먼트에 관리하는 데이터의 위치정보를 가진 데이터베이스 객체 |
Inheritance | 한 클래스가 다른 클래스에서 정의된 속성(데이터, 함수)를 이어받아 그대로 사용하는 객체지향 속성 |
Instance | 추상화 개념 또는 클래스 객체, 컴퓨터 프로세스 등과 같은 템플릿이 실제 구현된 것 |
JDK | Java Development Kit, 자바 SE, 자바 EE, 또는 자바 ME 플랫폼 중 하나를 구현한 것으로 솔라리스, 리눅스, 맥 OS X, 또는 윈도 자바 개발자를 대상으로 오라클에 의해 바이너리 제품으로 제공되는 개발 도구 |
JNI | Java Native Interface, 자바 가상 머신(JVM)에 실행되고 있는 자바코드를 네이티브 응용 프로그램(특히 하드웨어와 운영 체제 플랫폼)과 C, C++ 그리고 어샘블리 같은 다른 언어들로 구현된 라이브러리에 의해 호출되거나 호출할 수 있는 프로그래밍 프레임워크 |
JS | 넷스케이프에서 만든 인터프리터형 프로그래밍 또는 스크립트 언어 |
JSP | HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어 |
JVM | Java Virtual Machine, 자바의 소스 코드를 컴파일 하게 되면 바이트 코드로 변환되는데 JVM 은 이러한 바이트 코드를 읽어서 실행할 수 있도록 해주는 도구 |
Log | 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링하기 위한 텍스트 |
Modularity | 비슷한 기능을 갖는 코드들은 같은 단위 프로그램 코드 내에 함께 포함시켜야 하며, 다른 기능들은 별도의 독립적인 단위 코드로 개발됨으로써, 유지보수와 타 프로그램들에서 쉽게 이 코드들을 재사용할 수 있도록 개발해야 한다는 프로그래밍 개념 |
OOP | Object-Oriented Promgramming, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 프로그래밍 패러다임 |
Optimizer | 사용자가 질의한 SQL 문을 처리 가능한 실행계획을 탐색하고 각 실행계획에 대한 비용을 추정하여 최적의 실행계획을 수립하는 DBMS 의 핵심엔진 |
OS | Operating System, 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어 |
Overloding | 같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 하는 프로그래밍 기법 |
Overriding | 객체 지향 프로그래밍에서 서브클래스 또는 자식 클래스가 자신의 슈퍼클래스들 또는 부모 클래스들 중 하나에 의해 이미 제공된 메소드를 특정한 형태로 구현하는 것을 제공하는 프로그래밍 기법 |
Package | 클래스 또는 인터페이스를 포함 시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 나누어 놓아 클래스 관리를 용이하게 하는 클래스의 묶음 |
Platform | 소프트웨어가 구동 가능한 하드웨어 아키텍처나 소프트웨어 프레임워크. 일반적으로 컴퓨터의 아키텍처, 운영 체제(OS), 프로그램 언어, 그리고 관련 런타임 라이브러리 또는 GUI 를 포함하는 개념 |
Polymorphism | 하나의 객체를 여러 개의 타입으로, 하나의 타입으로 여러 종류의 객체를 여러 가지 모습으로 해설할 수 있는 프로그래밍 속성 |
Procedure | 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합 |
Prototype | 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스가 새 객체를 만들기 위해 자신을 복제(clone)하는 디자인패턴 |
Serialization | 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정 |
Servlet | 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양 |
Singleton | 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 디자인패턴 |
Spring Framework | 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크 |
SQL | Structured Query Language, 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어 |
Synonym | 오라클 객체(테이블, 뷰, 시퀀스, 프로시저)에 대한 대체이름(Alias)를 말하며, 실질적으로 그 자체가 객체가 아니라 객체에 대한 직접적인 참조 |
Thread-Safe | 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없어야 한다는 원칙 |
Transaction | 데이터베이스 등의 시스템에서 사용되는 쪼갤 수 없는 업무처리의 단위 |
Trigger | 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업 |
XML | Extensible Markup Language, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어 |
IaaS(Infrastructure as a Service) | PaaS 와 SaaS 의 기반인 Iass 를 서비스로 제공하기 위해 기존 서버 호스팅보다 H/W 확장성이 좋고 탄력적이며 빠른 제공을 할 수 있는 가상화 기술을 이용 |
PaaS(Platform as a Service) | 서비스를 개발 할 수 있는 안정적인 환경(Platform)과 그 환경을 이용하는 응용 프로그램을 개발 할 수 있는 API 까지 제공하는 형태 |
SaaS(Software as a Service) | Cloud 환경에서 동작하는 응용프로그램을 서비스 형태로 제공 |
OOP 는 뭐에요?
- 객체 지향 프로그래밍(Object Oriented Programming)의 약자이다.
- 캡슐화, 다형성, 상속을 이용하여 코드 재사용을 증가시키고, 유지보수를 감소시키는 장점을 얻기 위해서 객체들을 연결 시켜 프로그래밍 하는 것이다.
OOP 의 특징은 뭐에요?
- 캡슐화 : 객체의 내용 중 숨기고 싶은 부분을 외부에서 접근할 수 없게 감출 수 있다. 이는 정보의 은닉과 보호가 가능하다.
- 상속 : Class 의 멤버(데이터)와 함수를 다른 Class 에 물려주거나 물려받을 수 있는 기능으로 다형성을 확보할 수 있다.
- 다형성 : 코드의 재사용성이 증가되고 폭 넓은 코드 구현이 가능하다. 이는 개발속도의 향상으로 이어진다.
- 사람의 말투로 설명하자면 “야.”, “야!”, “야~”와 같이 다른 의미를 전달되는 것이다.
- Overloading(오버로딩)과 Overriding(오버라이딩)으로 표현한다. 하나의 지시(예를 들어 메소드를 실행하는 것)에 대해 여러 객체가 각자 다른 행위를 수행하는 것이다.
OOP 의 5가지 원칙을 설명해주세요.
- SRP (Single Responsibility Principle) : 단일 책임 원칙
- 모든 클래스는 단 하나의 책임을 가진다. 클래스를 수정할 이유가 오직 하나여야 한다.
- 계산기 클래스는 계산을 하는 책임과 GUI 를 나타내는 책임은 서로 분리되어야 한다.
- 계산기 클래스에 GUI를 나타내는 부분까지 있을경우, 이는 SRP 를 위반한다.
- 모든 클래스는 단 하나의 책임을 가진다. 클래스를 수정할 이유가 오직 하나여야 한다.
- OCP (Open-Closed Principle) : 개방-폐쇄 원칙
- 확장에 대해서는 개방 되어 있어야 하지만, 수정에 대해서는 폐쇄 되어야 한다.
- LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
- 자식 클래스는 언제나 자신의 부모클래스를 대신할 수 있다.
- 부모클래스가 위치하는 자리에 자식 클래스를 대치되어도 잘 작동해야 한다.
- ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
- 클라이언트는 자신이 이용하지 않는 메서드에 의존하지 않아야 한다.
- 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
- 하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스가 낫다.
- 클라이언트는 자신이 이용하지 않는 메서드에 의존하지 않아야 한다.
- DIP (Dependency Inversion Principle) : 의존 역전 원칙
- 상위클래스는 하위클래스에 의존해서는 안된다.
Library 와 Framework 의 차이점을 알려주세요.
Library 의 개요
단순하게 활용 가능한 도구들의 집합
- 개발자가 필요에 의해 만든 클래스를 호출하여 사용하는 방식
Framework 의 개요
뼈대 또는 핵심 구조를 뜻하는 기술
- 소프트웨어의 특정 문제를 해결하기 위해 상호간 의존하는 클래스와 인터페이스의 집합
- 완성된 어플리케이션이 아니므로 개발자가 완성시켜야 한다.
- 특정 개념의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다(재사용이 가능한 컴포넌트).
결론 : Library 와 Framework 의 차이점
개발 주도성이 어디에 있는가?
- 프레임워크는 프로세스를 가지고 있으며 개발자(사용자)는 프레임워크 안에서 필요한 코드를 작성
- 라이브러리는 개발자가 프로세스를 작성하면서 필요한 코드를 가져다 사용
즉, 라이브러리는 개발자에게 주도성이 있으며 프레임워크는 개발자가 아닌 핵심 구조 안에 프로세스에 대한 주도성이 담겨 있다.
Model1 과 Model2 는 무엇이 다른가요?
Model1 의 개요
모든 클라이언트 요청과 응답을 JSP가 담당하는 구조
JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 결과 출력을 관리하는 코드가 뒤섞여있다. JSP 페이지 안에서 모든 정보를 표현(View), 저장(Model), 처리(Controller)된다.
- 장점 : 단순한 페이지 작성으로 구현이 쉬워 중소형 프로젝트에 적합하다.
- 단점 : 재사용이 힘들고 가독성이 떨어지며 코드가 복잡해지면 유지보수가 어렵다.
Model2 의 개요
클라이언트의 요청, 응답, 비즈니스 로직 처리 부분을 모듈화한 구조
클라이언트의 요청을 하나의 Servlet 이 받아 알맞게 처리한 후 그 결 과를 JSP 로 전달한다.
- 장점 : 처리작업의 분리로 유지보수와 확장이 용이하다.
- 단점 : 구조 설계를 위한 시간이 많이 소요되므로 개발 시간이 증가한다.
MVC 패턴은 무엇인가요?
MVC 패턴의 개요
모델-뷰-컨트롤러(Model–View–Controller, MVC), 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴
- 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.
- MVC 에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
구성원리
- 컨트롤러는 모델에 명령함으로써 모델의 상태를 변경할 수 있다(워드 프로세서에서 문서를 편집하는 행위).
- 컨트롤러가 관련된 뷰에 명령함으로써 모델의 표시 방법을 바꿀 수 있다(문서를 스크롤하는 행위).
- 모델은 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다.
- 이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거, 수정할 수 있다.
- 어떤 MVC 구현에서는 통보 대신 뷰나 컨트롤러가 직접 모델의 상태를 읽어 오기도 한다.
- 뷰는 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어 온다.
REST, RESTful 은 뭐죠? RESTful API 는요?
- REST 는 Representational State Transfer 라는 용어의 약자로서 웹의 장점을 최대한 활용할 수 있는 아키텍처이다.
- 최근의 서버 프로그램은 다양한 브라우저와 모바일 디바이스에서도 통신을 할 수 있어야 한다.
- REST 아키텍처는 Hypermedia API 의 기본을 충실히 지키면서 범용성을 보장한다.
REST의 특징
- Client - Server Architecture (클라이언트 - 서버 구조)
- 클라이언트-서버 스타일은 사용자 인터페이스에 대한 관심(Concern)을 데이터 저장에 대한 관심으로부터 분리함으로써 클라이언트의 이식성과 서버의 규모 확장성을 개선한다.
- Stateless (무상태성)
- 클라이언트와 서버의 통신에는 상태가 없어야한다.
- 모든 요청은 필요한 모든 정보를 담고 있어야한다.
- 요청 하나만 봐도 바로 뭔지 알 수 있으므로 가시성이 개선된다.
- task 실패시 복원이 쉬우므로 신뢰성이 개선된다.
- 상태를 저장할 필요가 없으므로 규모확장성이 개선된다.
- 메시지로만 처리하기 때문에 구현이 단순하다.
- Cache (캐시 처리 가능)
- 캐시가 가능해야한다.
- 모든 서버 응답은 캐시 가능한지 그렇지 아닌지 알 수 있어야 한다.
- 효율, 규모확장성, 사용자 입장에서의 성능이 개선된다.
- Uniform (유니폼 인터페이스)
- 구성요소(클라이언트, 서버 등) 사이의 인터페이스는 균일(uniform)해야한다.
- 인터페이스의 일반화로 얻어지는 이점
- 전체 시스템 아키텍처가 단순해진다.
- 상호작용의 가시성이 개선된다.
- 구현과 서비스가 분리되므로 독립적인 진화가 가능해진다.
- Layered System (Hierarchical System, 계층형 구조)
- 계층(Hierarchical layers)으로 구성이 가능해야한다.
- 각 레이어에 속한 구성요소는 인접하지 않은 레이어의 구성요소를 볼 수 없어야한다.
- 계층(Hierarchical layers)으로 구성이 가능해야한다.
- Code-On-Demand (Optional, 선택 사항)
- Code-On-Demand 가 가능해야한다.
- 서버가 네트워크를 통해 클라이언트에게 프로그램을 전달하면 클라이언트에서 실행될 수 있어야한다(Java applet 이나 JavaScript 같은 것을 말함).
- 다만, 이 제약조건은 필수는 아니다.
REST의 구성
- 자원 (Resource)
- URI
- 행위 (Verb)
- HTTP Method (GET, PUT, POST, DELETE등등)
- 표현 (Representations)
RESTful한 API란?
- 리소스와 행위는 명시적이고 직관적으로 분리되어야 한다.
- Message 는 Header 와 Body 를 명확히 분리하여 사용한다.
- API 버전을 관리할 수 있어야 한다.
- 서버와 클라이언트가 같은 방식을 사용하여 요청하도록 한다.
RESTful API 설계
- URI 는 정보의 자원을 표현해야한다(리소스명은 동사보다는 명사를 사용).
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)으로 표현
- 주의할 점
- 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
- URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
- 하이픈(-)은 URI 가독성을 높이는데 사용한다.
- 밑줄(_)은 URI 에 사용하지 않는다.
- URI 경로에는 소문자가 적합하다.
- 파일확장자는 URI 에 포함하지 않는다.
장점과 단점
- 장점
- Open API 를 제공하기 쉽다.
- 멀티 플랫폼 지원과 연동이 쉽다.
- 원하는 타입으로 데이터를 송수신할 수 있다.
- 기존 웹 인프라(HTTP)를 사용한다.
- 단점
- 사용할 수 있는 메소드가 적다.
- 분산환경에 부적합하다.
- HTTP 통신 모델에 대해서만 지원한다.
RESTful API 표준
GET /todos | List all todos |
POST /todos | Create a new todo |
GET /todos/:id | Get a todo |
PUT /todos/:id | Update a todo |
DELETE /todos/:id | Delete a todo and its items |
GET /todos/:id/items | Get a todo item |
PUT /todos/:id/items | Update a todo item |
DELETE /todos/:id/items | Delete a todo item |
TDD 는요?
Test-driven Development, 테스트 주도 개발
- 일반적인 개발 절차는 디자인, 코드 작성, 테스트 과정
- TDD 는 테스트가 주도하는 개발로 먼저 테스트 코드 작성, 테스트 코드를 통과하는 minimal 한 코드를 작성하는 것이다.
함수형 프로그래밍 은 뭐에요?
- 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.
- 계산가능성, 결정문제, 함수정의, 함수응용과 재귀를 연구하기 위해 개발된 형식체계인 람다 대수에 근간을 두고 있다.
- 명령형 프로그램과의 차이점
- 명령형의 함수는 프로그램의 상태가 변할 수 있다. 따라서 명령형 함수는 참조 투명성이 없고, 같은 코드라도 실행되는 프로그램의 상태에 따라 다른 결과값을 낼 수 있다.
- 함수형 코드에서는 함수의 출력값은 그 함수에 입력된 인수에만 의존하므로 부작용을 제거하면 프로그램의 동작을 이해하고 예측하기가 훨씬 쉽게 된다.
Git 과 Github 은 어떻게 달라요?
- 버전 관리 시스템 (Version Control System)
- 소프트웨어의 코드를 추가 또는 변경하는 과정을 모두 기록하여 특정한 시점으로 돌아가거나, 문제가 생긴 파일을 복원하는 등, 소프트웨어 개발 현장에서 사용하는 프로그램(시스템)
- Git 은 버전 관리 시스템 중 하나로 Git Repository 불리는 데이터 저장소에 소스 코드 등을 넣어서 이용한다.
- Git Repository 를 인터넷상에서 제공하는 서비스(호스팅 서비스)가 GitHub 이다.
'평생 쓰는 이력서 > 면접준비' 카테고리의 다른 글
[Chapter-02] IT 기술면접대비 & 개발자 면접 질문 - 운영체제 (0) | 2021.05.21 |
---|
Comments