성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و

기술 면접 준비 본문

Diary

기술 면접 준비

hyemi_flora 2024. 3. 23. 14:19

*내용에 오류가 있을 수도 있음

 

1> 함수형 / 객체지향 차이, 개념

  • 함수형 프로그래밍(Functional Programming) 
    • 입력값을 받아서 출력값을 반환하는 함수들의 조합을 통해 프로그램을 작성하는 패러다임
    • 상태 변경이 없고 부작용이 없는 순수 함수를 중심으로 한다.
    • 불변성을 강조한다.
  • 객체지향 프로그래밍(Object-Oriented Programming)
    • 객체들의 상호작용을 통해 프로그램을 작성하는 패러다임
    • 데이터와 해당 데이터를 조작하는 메소드를 함께 묶어 사용한다.
    • 캡슐화, 상속, 다형성의 개념을 활용한다.

 

2> CI/CD(Continuous Integration/Continuous Deployment) ?

  • 지속적 통합과 지속적 배포를 의미한다.
  • CI는 개발자들이 코드를 공유 레포지토리에 푸시할 때마다 자동으로 빌드 및 테스트를 수행
    코드 품질을 유지하고 통합하는 프로세스를 의미
  • CD는 통합된 코드를 자동으로 테스트, 패키징하여 운영환경에 배포하는 프로세스를 의미
  • CI/CD는 애플리케이션의 개발과 배포 과정을 자동화하여 개발 생산성을 향상시키고 배포 주기를 단축시키는데 도움을 줍니다.

 

3> REST API(Representational State Transfer API)?

  • 웹 서비스 간의 통신을 위한 아키텍처 스타일
  • REST는 자원(Resource)를 URI로 표현하고, HTTP 메서드 (GET, POST, PUT, DELETE) 를 이용하여 자원을 표현
  • REST API는 클라이언트와 서버 사이의 통신을 무상태( Stateless )로 유지하고, 각 요청에 대한 응답으로 상태 정보를 제공한다.
  • 무상태 Stateless : 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미한다.
                                  서버의 확장성이 높기 떄문에 대량 트래픽 발생에도 대처 수월하게 가능하나
                                  클라이언트의 요청에 상대적으로 상태유지(Stateful) 보다 많은 데이터가 소모된

4> CRUD?

  • Create, Read, Update, Delete로 데이터베이스에서 데이터를 다루는 네가지 작업을 의미한다
  • Create는 데이터 생성
  • Read는 데이터 조회
  • Update는 데이터 수정
  • Delete는 데이터 삭제

 

5> RDBMS / No-SQL 차이

  • Relational Database Managenet System, 관계형 데이터베이스 관리 시스템
    • 데이터를 테이블 형태로 저장하고 SQL을 사용하여 데이터를 조작한다.
  • NoSQL 관계형 데이터베이스가 아닌 데이터모델을 사용하는 데이터베이스
    • 스키마가 없는 데이터베이스, 분산 데이터베이스, 키-값 저장소등 다양한 형태의 데이터베이스를 포함

 

6> GET, POST 방식 

  • GET과 POST는 HTTP 프로토콜을 통해 서버에 데이터를 요청하는 방식
  • GET : 데이터를 요청할 때 주로 사용, 데이터 조회에 사용된다.
  • POST : 데이터를 서버로 제출할 때 주로 사용, 데이터를 생성 또는 수정할 때 사용된다.

 

7> COOKIE 와 SESSION 차이

  • 쿠키(Cookie)와 세션(Session)은 웹 서버와 클라이언트 간의 상태 정보를 유지하기 위해 사용
  • 쿠키
    • 클라이언트의 로컬에 저장
    • 보안에 취약
    • 클라이언트가 서버에 요청을 보낼 때마다 함께 전송 됨
    • 기본적으로 쿠키에 세션ID(세션ID는 기본적으로 해쉬값이라 위변조해도 맞출 수 없다) 보관
  • 세션
    • 서버 측에서 클라이언트를 식별하고 상태 정보를 유지한다.
    • 서버에 저장되므로 쿠키보다 보안에 안전함

 

8> http란? 

  • HTTP(HyperText Transfer Protocol)는 인터넷에서 데이터를 주고받을 때 사용되는 프로토콜
  • 사용자(클라이언트)가 웹 브라우저 주소창에 보고 싶은 페이지의 URL을 입력  즉, 클라이언트와 서버 간의 통신을 위해 설계 됨
  • 클라이언트가 서버에 요청(Request)을 보내고, 서버가 클라이언트에게 응답(Response)을 보내는 형태로 동작한다.
  • HTTP는 TCP/IP 기반의 프로토콜

9> http 관련 메소드는?

  • GET: 서버에서 정보를 요청, 주로 데이터를 조회할 때 사용.
  • POST: 서버로 정보를 제출하기 위해 사용, 주로 데이터를 생성 또는 수정할 때 사용.
  • PUT: 서버에 정보를 저장하기 위해 사용, 주로 데이터를 수정할 때 사용.
  • DELETE: 서버에서 정보를 삭제하기 위해 사용, 주로 데이터를 삭제할 때 사용.
  • PATCH: 리소스의 부분만을 수정하기 위해 사용.
  • HEAD: GET 메소드와 동일한 요청을 하지만, 실제 내용을 받지 않고 응답 헤더만을 받는다.
  • OPTIONS: 대상 리소스에 대한 통신 가능한 옵션을 설명한다.
  • TRACE: 클라이언트로 전송된 요청 메시지를 돌려받는다.

 

10> 미들웨어란?

  • 미들웨어(Middleware) 서버와 애플리케이션의 중간에 위치하여 클라이언트의 요청을 처리하고 응답을 생성하는 소프트웨어
  • 클라이언트의 요청이 도착하면 이를 처리하여 다음 단계로 전달하고, 서버의 응답이 생성되면 이를 가공하여 클라이언트에게 전달
  • 미들웨어는 보안, 로깅, 인증, 캐싱 등 다양한 기능을 수행할 수 있으며, 웹 애플리케이션의 동작을 제어하고 개선하는 데 사용된다.

 

11> WEB 과 WAS차이?

  • WEB(Web Server)
    • 클라이언트로부터 HTTP 요청을 받아 정적인 리소스를 제공하는 서버
    • 주로 HTML, CSS, 이미지 파일 등을 제공
    • 대표적인 웹 서버로는 Apache가 있다.
  • WAS(Web Application Server)
    • 동적인 웹 애플리케이션을 실행하기 위한 환경을 제공하는 서버
    • 클라이언트의 요청에 따라 동적으로 데이터를 처리하고 응답을 생성
    • Java EE, .NET 등의 언어와 프레임워크로 작성된 애플리케이션을 실행
    • 대표적인 WAS로는 Tomcat이 있다.

 

12> 트랜젝션이란?

  • 트랜잭션(Transaction)은 데이터베이스에서 여러 개의 작업을 하나의 논리적 단위로 묶어서 처리하는 것
  • 트랜잭션은 ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 준수하여 작업의 일관성과 안정성을 보장한다.
  • 트랜잭션은 다음과 같은 단위로 수행되고, 데이터베이스의 일관성과 안정성을 유지한다.
    • 시작(Start): 트랜잭션을 시작합니다.
    • 작업(Work): 데이터베이스 작업을 수행합니다.
    • 커밋(Commit): 트랜잭션의 작업을 영구적으로 저장소에 반영합니다.
    • 롤백(Rollback): 트랜잭션의 작업을 취소하고

 

13> DML, DDL ?

  • DML(Data Manipulation Language)과 DDL(Data Definition Language)은 SQL(Structured Query Language)에서 사용하는 언어
    • DML(Data Manipulation Language): 데이터 조작 언어, 데이터를 조회, 삽입, 수정, 삭제하는 데 사용. 명령어로는 SELECT(조회), INSERT(삽입), UPDATE(수정), DELETE(삭제) 
    • DDL(Data Definition Language): 데이터 정의 언어, 데이터베이스 구조를 정의하거나 조작하는 데 사용. 명령어로는 CREATE(생성), ALTER(변경), DROP(삭제)
      DDL은 데이터베이스 객체(테이블, 뷰, 인덱스 등)를 정의하고 관리하는 데 사용된다.

 

14> 암호화과정 설명

  • 암호화 과정은 평문(원본 데이터)을 암호화하여 암호문(암호화된 데이터)을 생성하고, 이를 전송 및 저장하는 과정을 의미한다.
  • 주요 암호화 기법으로는 대칭키 암호화(Symmetric Key Encryption)와 공개키 암호화(Public Key Encryption)
    • 대칭키 암호화는 동일한 키를 사용하여 암호화와 복호화를 수행하는 기법
      주로 대량의 데이터를 안전하게 전송하는 데 사용됨
    • 공개키 암호화는 공개키와 개인키를 사용하여 데이터를 암호화하고, 이를 복호화하는 기법
      주로 안전한 통신을 위해 사용됨

 

15> SPRING IOC, DI, AOP에 대해 설명

  • SPRING IOC(Inversion of Control), DI(Dependency Injection), AOP(Aspect-Oriented Programming)는 스프링 프레임워크의 핵심 개념.
    • IOC(Inversion of Control): 제어의 역전, 객체 생성과 관리를 개발자가 아닌 프레임워크가 담당하는 것을 의미.
      이를 통해 의존성 관리와 모듈화가 용이해진다.
    • DI(Dependency Injection): 의존성 주입, 객체 간의 의존 관계를 설정 파일 또는 어노테이션을 통해 외부에서 주입하는 것을 의미
      이를 통해 객체 간의 결합도를 낮추고 유연한 코드를 작성할 수 있다.
    • AOP(Aspect-Oriented Programming): 관점 지향 프로그래밍, 애플리케이션에서 흩어진 관심사(로깅, 보안 등)를 모듈화하여 중복을 줄이고 관리를 용이하게 하는 것을 의미.
      주로 횡단 관심사(Cross-Cutting Concerns)를 처리하는 데 사용.

 

16> Array, List 차이

  • Array(배열)
    • 고정된 크기의 동일한 타입의 요소들로 이루어진 자료구조.
    • 크기가 고정되어 있으며, 연속된 메모리 공간에 저장되므로 인덱스를 통해 빠르게 접근할 수 있다.
  • List(리스트)
    • 크기가 가변적이며, 다양한 타입의 요소들을 저장할 수 있는 자료구조.
    • 리스트는 배열과 달리 동적으로 크기가 조절되며, 요소들이 연속된 메모리 공간에 저장되지 않을 수 있다.
    • Java에서 List 인터페이스를 구현한 클래스로는 ArrayList, LinkedList 등이 있다.

 

17> MVC 패턴이란?

  • MVC(Model-View-Controller) 패턴은 소프트웨어를 구성하는 데 사용되는 디자인 패턴, 애플리케이션을 세 가지의 구성 요소로 나누어 개발한다.
  • 이를 통해 모델과 뷰를 분리하여 유연한 애플리케이션 구조를 유지할 수 있다. 
    • Model(모델): 애플리케이션의 비즈니스 로직과 데이터를 관리하는 부분, 데이터의 상태를 관리하고 업데이트하는 역할.
    • View(뷰): 사용자에게 정보를 표시하고 사용자의 입력을 받는 부분, 데이터의 시각적인 표현을 담당.
    • Controller(컨트롤러): 사용자의 입력을 받아 모델을 업데이트하거나 뷰를 업데이트하는 부분, 사용자의 요청을 처리하고 그에 따른 응답을 생성.

 

18> interface, abstract 차이점

  • interface(인터페이스)
    • 추상 메소드와 상수만을 포함한 클래스와 유사한 형태의 추상화된 타입.
    • 다중 상속을 지원하며, 다른 클래스에서 해당 인터페이스를 구현하여 사용할 수 있다.
  • abstract(추상 클래스)
    • 일부 메소드가 구현되지 않은 추상 메소드를 포함하고 있는 클래스.
    • 추상 클래스는 직접 인스턴스화할 수 없으며, 상속을 통해 하위 클래스에서 완전한 구현이 이루어져야 한다.
    • 추상 클래스는 인스턴스 변수와 메소드를 가질 수 있습니다.

 

19> 디버깅 방식은?

  • 디버깅(Debugging)은 프로그램에서 발생하는 오류를 찾고 수정하는 과정
  • 로그분석, 테스트, 디버거 사용, 코드 검토, 예외처리를 하면서 디버깅과정을 진행합니다.
    • 로그 분석: 프로그램 실행 중에 생성되는 로그를 분석하여 오류 발생 원인을 추적하는 방법
      로그에는 프로그램의 실행 상태, 오류 메시지 등이 포함되어 있어 오류를 식별하는 데 도움이 됨.
    • 테스트: 다양한 시나리오에 대해 프로그램을 테스트하여 오류를 재현하고 발견하는 방법.
      단위 테스트, 통합 테스트, 시스템 테스트 등 다양한 종류의 테스트를 수행하여 오류를 찾을 수 있다.
    • 디버거 사용: 디버거(Debugger)를 사용하여 프로그램의 실행을 중지하고 변수의 값을 확인하거나 코드의 흐름을 따라가며 오류를 추적하는 방법.
      디버거는 프로그램을 단계별로 실행하거나 특정 지점에서 중지시키는 등의 기능을 제공.
    • 코드 검토: 다른 개발자들과 함께 코드를 검토하여 오류를 발견하고 수정하는 방법.
      코드 검토를 통해 다양한 시각에서 코드를 살펴보고 오류를 발견할 수 있다.
    • 예외 처리: 프로그램 실행 중에 발생하는 예외를 적절하게 처리하여 오류를 방지하거나 처리하는 방법입니다. 예외 처리를 통해 프로그램의 안정성을 향상시킬 수 있습니다.

 

20> hash 에 대해 설명

  • HASH는 임의의 크기를 갖는 데이터를 고정된 크기의 값으로 매핑하는 함수
  • 해시함수는 입력 데이터가 조금만 달라져도 결과값이 크게 달라지는 특성이 있따
  • 보안, 데이터 검색, 암호화 등 다양한 분야에서 사용된다.

 

21> 서버 배포 프로세스 설명

  • 서버 배포 프로세스는 애플리케이션을 개발 환경에서 운영 환경으로 이전하여 실제 사용자에게 서비스하는 과정을 의미.
  • 서버 배포 프로세스는 다음과 같은 단계로 이루어진다
    • 빌드(Build): 소스 코드를 컴파일하고 빌드하여 실행 가능한 애플리케이션 파일을 생성.
      이 과정에서는 테스트가 완료된 코드만을 포함하고 필요한 라이브러리와 의존성을 포함.
    • 테스트(Test): 빌드된 애플리케이션을 테스트하여 안정성과 성능을 검증.
      다양한 테스트 수준(단위 테스트, 통합 테스트, 시스템 테스트 등)을 수행하여 오류를 발견하고 수정.
    • 배포(Deploy): 테스트를 완료한 애플리케이션을 운영 환경으로 배포.
      이 과정에서는 서버에 애플리케이션을 설치하고 설정을 구성하여 사용자가 접근할 수 있도록 준비.
    • 모니터링(Monitoring): 배포된 애플리케이션을 모니터링하여 실행 상태를 실시간으로 확인하고 성능을 관찰.
      이를 통해 오류나 성능 저하를 신속하게 대응할 수 있습니다.
    • 유지보수(Maintenance): 배포된 애플리케이션을 지속적으로 관리하고 업데이트하여 사용자에게 최상의 서비스를 제공.
      이 과정에서는 보안 패치, 기능 추가, 성능 향상 등을 수행.

 

22> 프로세스와 스레드 차이

  • 프로세스(Process)와 스레드(Thread)는 컴퓨터에서 동작하는 실행 단위를 의미.
    • 프로세스(Process):
      운영 체제에서 실행 중인 프로그램을 의미.
      각 프로세스는 독립적인 메모리 공간을 가지며, 프로그램의 실행 상태, 자원 등을 관리.
      각 프로세스는 하나 이상의 스레드를 포함.
    • 스레드(Thread):
      프로세스 내에서 실행되는 작업 단위를 의미.
      하나의 프로세스는 여러 개의 스레드를 생성하여 병렬적으로 작업을 수행.
      스레드는 프로세스의 자원을 공유하며, 각각 독립적인 실행 흐름을 가지고 있다.