두 번째 뇌

[Chapter-01] IT 기술면접대비 & 개발자 면접 질문 - 개발 상식 본문

평생 쓰는 이력서/면접준비

[Chapter-01] IT 기술면접대비 & 개발자 면접 질문 - 개발 상식

현파랑 2021. 5. 21. 13:11

개발상식

목차


 

📖짤막한 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)으로 구성이 가능해야한다.
      • 각 레이어에 속한 구성요소는 인접하지 않은 레이어의 구성요소를 볼 수 없어야한다.
  • 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 이다.
Comments