✔ OOP에 대해 설명하시오.
Object-Oriented Programming 의 약어로 객체지향 프로그래밍을 의미한다.
현실 세계의 객체 모델을 바탕으로 프로그램을 구조화 하는 것이므로 대규모 소프트웨어 개발에 적합하다. 또한, 각 객체들이 독립적인 역할을 지니기에 유지 보수에 유리하다.
OOP의 5가지 설계 원칙 [SOLID]
1) SRP(Single Responsibility Principle, 단일 책임의 원칙)
: 클래스는 단 하나의 목적을 가지며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
2) OCP(Open-Closed Principle, 개방 폐쇄 원칙)
: 클래스는 확장에는 열려있고, 변경에는 닫혀 있어야 한다.
3) LSP(Liskov Substitution Principle, 리스코프 치환 원칙)
: 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야 한다.
4) ISP(Interface Segregation Principle, 인터페이스 분리 원칙)
: 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야 한다.
5) DIP(Dependency Inversion Principle, 의존 역전 법칙)
: 클라이언트는 추상화(인터페이스)에 의존해야 하며, 구체화(구현된 클래스)에 의존해선 안된다.
OOP의 4가지 특징
1 ) 캡슐화(Encapsulation)
: 데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할/ 기능을 하나의 캡슐 형태로 만드는 것이다.
정보 은닉과 밀접한 개념이다.
2) 상속화(Ingeritance)
: 부모 클래스에 정의된 변수 및 메서드를 자식 클래스에서 상속받아 사용하는 것이다.
코드 재사용에 용이하여 효율적인 프로그래밍이 가능하다.
3) 추상화(Abstraction)
: 클래스들의 공통적인 속성과 기능을 추출하는 것이다.
4) 다형화(Polymorphism)
: 같은 이름의 기능을 하는 메서드를 여러 개 만드는 것이다.
오버로딩과 오버라이딩이 대표적이다.
🗝 KEY WORD |
#객체지향 프로그래밍 #대규모 소프트웨어 개발 #독립적인 객체 #유지보수 #SOLID #캡슐화 #상속화 #추상화 #다형성 |
✔ 절차지향 프로그래밍과 객체지향 프로그래밍의 차이점에 대해 설명하시오.
절차지향 프로그래밍 | 객체지향 프로그래밍 |
- 위에서 아래로의 순차적인 처리를 중요시하는 프로그래밍이다 | - 실제 세계의 사물들을 객체로 모델링하여 개발을 진행하는 프로그래밍이다 |
- 대표적인 언어 : C언어, Fortran | - 대표적인 언어: Java, C++, C# |
- 컴퓨터의 처리구조와 유사해 실행속도가 빠르다 | - 절차지향 언어보다 실행속도가 느리다. |
- 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다 | - 캡슐화, 상속, 다형성과 같은 기법 등이 있다 |
🗝 KEY WORD |
#절차지향 순차 #객체지향은 객체 |
✔ RESTful API 에 대해 설명하시오
RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스이다.
즉, REST 기반으로 서비스 API를 구현한 것이다.
✔ REST 에 대해 설명하시오
HTTP URI를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용한 것이다.
CRUD Operation 이란?
Create: 생성(POST)
Read: 조회(GET)
Update: 수정(PUT)
Delete: 삭제(DELETE)
HEAD : header 정보 조회(HEAD)
REST는 한마디로 자원의 표현에 의한 상태 전달을 의미한다.
- 자원 : 해당 소프트웨어가 관리하는 모든 것
- 표현 : 해당 자원을 표현하기 위한 이름(DB의 고객 정보가 자원이면, 'clients' 를 자원의 표현으로 정함)
- 상태 전달 : 데이터가 요청되는 시점에서 자원의 상태를 전달한다.(JSON 혹은 XML을 통해 데이터를 주고 받는게 일반적)
🗝 KEY WORD |
#REST기반 API #CRUD Operation #상호 정보 교환 가능 #애플리케이션 분리 및 통합 |
✔ 프레임워크와 라이브러리의 차이에 대해 설명하시오.
이 둘의 차이점은 실행 제어 흐름에 대한 주도권이 누구에게 / 어디에 있는가에 있다.
프레임워크는 전체적인 흐름을 자체적으로 제어하고, 라이브러리는 개발자가 흐름에 대한 제어를 쥐고 있다.
여기서 개발자의 제어권을 프레임워크에게 넘김으로써 신경써야할 것을 줄일 수 있는데 , 이를 제어의 역전(Inversion of Control)이라 한다.
🗝 KEY WORD |
#제어 흐름 #프레임워크는 본인이 #개발자가 라이브러리에 대한 흐름 #제어의 역전 |
✔ 함수와 메서드의 차이에 대해 설명하시오.
일반적으로 함수는 클래스와 관련 없는 독립적인 작업을 위해 사용되고, 메서드는 함수의 일종이긴 하지만 클래스에 속한 동작을 정의하는 데 사용됩니다.
함수 | 메서드 |
어떤 작업을 수행하는 코드 블록 | 클래스, 구조체, 열거형에 포함되어 있는 함수 |
독립적인 작업 진행 | 클래스 함수 |
🗝 KEY WORD |
#함수는 독립적 #메서드는 클래스에 속한 동작 |
✔ CORS(Cross-Origin Resource Sharing)에 대해 설명하시오.
출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록하는 개념이다.
따라서 다른 서버의 리소스를 불러오기 위해서는, 그 출처에서 CORS에 대한 내용을 Response의 헤더에 추가해줘야 한다.
🗝 KEY WORD |
#자원 공유 #출처 다름 #자원 접근 #Response 헤더 |
✔ CSRF(Cross-Site Request Forgery)에 대해 설명하고 작동원리 및 해결책을 설명하시오.
사이트 간 요청 위조의 약자 웹 어플리케이션 취약점 중 하나이며 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위, 예를 들어 데이터 수정, 삭제, 등록 등을 특정 웹사이트에 요청하게 하는 공격이다.
이 공격이 성공하려면,
1. 사용자의 정보가 보안이 취약한 서버로부터 이미 로그인이 되어있어야 한다.
2. 쿠키 기반의 서버 세션 정보를 획득할 수 있어야 한다.
3. 공격자가 요청 방법에 대해 미리 파악하고 있어야 한다.
CSRF를 방어하기 위해서는
1. Referer check인, HTTP 요청 헤더 정보에서 Referrer 정보를 확인하는 해결책이 있다.
2. CAPTCHA 를 이용하여, CAPTHCA 인증코드가 없거나 틀리면 요청을 거부하도록 할 수 있다.
3. CSRF 토큰 사용하여 사용자 세션에 임의 값을 저장하여 모든 요청마다 해당 값을 포함하여 전송할 수 있다.
🗝 KEY WORD |
#사이트 간 요청 위조 #의지 무관 #공격자의 의도한 행위 요청 #CSRF토큰 |
✔ TDD(Test-Driven-Development)에 대해 설명하시오.
작은 단위의 테스트 케이스를 작성하고 그에 맞는 코드를 작성하여 테스트를 통과한 후에 상황에 맞게 리팩토링하는 테스트 주도 개발 방식이다.
🗝 KEY WORD |
#테스트케이스 #리팩토링 #테스트주도개발 |
✔ DDD(Domain-Driven-Design)에 대해 설명하시오.
실세계에서 사건이 발생하는 집합인 Domain(도메인)을 중심으로 설게하는 방식이다. 도메인 주도 설계의 목적은 소프트웨어의 복잡성을 최소화하며 요구사항을 쉽게 반영하는 것이다. 이에 따른 핵심 목표는 모듈간의 의존성을 최소화하고 응집성은 최대화 하는 것이다.
🗝 KEY WORD |
#도메인 중심 설계 #high cohesion #복잡성 최소화 #요구사항 반영 |
✔ 동기와 비동기의 차이에 대해 설명하시오.
사전적 의미
동기 : Synchronous 동시에 일어나는
비동기 : Asynchronous 동시에 일어나지 않는
동기는 순서대로 처리하는 방식이므로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다. 이와 반대로 비동기 처리는 순서없이 동시에 처리가 되므로 요청한 결과가 동시에 일어나지 않아도 된다.
동기 (Synchronous) | 비동기 ( Asynchronous ) |
- 요청과 결과가 동시에 일어난다. | - 요청과 결과가 동시에 일어나지 않아도 된다. |
- 설계가 단순하다 | - 설계가 복잡하지만, 주어진 시간 동안 여러 개의 요청을 동시에 처리할 수 있다. |
- 순서대로 처리된다 | - 순서에 상관없이 동시에 처리된다. |
🗝 KEY WORD |
#동기는 요청 결과 동시 #비동기는 요청 결과 동시 X #여러 개의 요청 처리 가능 |
✔ 프록시 서버(Proxy Server)에 대해 설명하시오.
사전적 의미
프록시 : Proxy 대리/ 대신
프록시 서버는 서버와 클라이언트 사이에서 클라이언트가 프록시 서버를 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 말한다.
🗝 KEY WORD |
#대리인 #서버와 클라이언트의 대리인 |
<참고 자료>
https://mangkyu.tistory.com/88
[기술면접] CS 기술면접 질문 - 프로그래밍 공통 (1/8)
1. 프로그래밍 공통 [ OOP란 ] OOP는 현실 세계를 프로그래밍으로 옮겨와 현실 세계의 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍하는 기법입니다. OOP
mangkyu.tistory.com
https://dev-coco.tistory.com/164
신입 개발자 기술면접 질문 정리 - 프로그래밍 공통/기타
💡 Restful API에 대해 설명해주세요. Restful API는 HTTP 통신을 Rest 설계 규칙을 잘 지켜서 개발한 API를 Restful한 API라고 합니다. Rest 설계 규칙은 URI는 정보의 자원만 표현해야 하며, 자원의 상태와 행
dev-coco.tistory.com
https://escapefromcoding.tistory.com/724#google_vignette
CORS란 무엇인가?
개요 웹 프로그래밍에서 프런트와 백엔드 작업을 하면, 한번씩 발생하는 문제가 CORS 문제입니다. 현재 하는 업무가 이런 경우는 없었지만, 개인 프로젝트 시 발생했던 문제를 기억하며 해당 문
escapefromcoding.tistory.com
https://devscb.tistory.com/123
CSRF란, CSRF 동작원리, CSRF 방어방법
CSRF란, CSRF 동작원리, CSRF 방어방법 CSRF란 CSRF란, Cross Site Request Forgery의 약자로, 한글 뜻으로는 사이트간 요청 위조를 뜻합니다. CSRF는 웹 보안 취약점의 일종이며, 사용자가 자신의 의지와는 무관
devscb.tistory.com
부족한 내용에 대한 조언은 언제나 환영입니다 :)
'취업일지' 카테고리의 다른 글
[CS]기술 면접 질문 리스트 - 데이터베이스 (1) | 2024.01.06 |
---|---|
[CS]기술 면접 질문 리스트 - 운영체제 (3) | 2023.12.27 |
[CS]기술 면접 질문 리스트 - 네트워크 (1) | 2023.12.22 |
[CS]기술 면접 질문 리스트 - 자바 (1) | 2023.12.20 |