본문 바로가기
👩‍💻 Tech Interview/└ 기술질문

[금융솔루션] 기술면접 질문 정리

by 쫄리_ 2023. 3. 23.
728x90
반응형

기술스택

JAVA, JSP
PHP

담당업무

여신시스템 운영관리
웹 어플리케이션 개발 / 유지보수

 


예상인터뷰

여신
'신용'을 준다는 의미 
'여신'이란 은행이 고객에게 돈을 '빌려주는 것'을 말합니다.
웹 애플리케이션 (web application)

인터넷이나 인트라넷을 통해 웹브라우저에서 이용할 수 있는 응용 프로그램
웹 브라우저에서 실행되는 소프트웨어

여신시스템 운영관리에서 주요 업무를 설명해주세요.

  • 여신시스템은 대출 등 금융상품의 심사 및 처리를 담당하는 시스템입니다.
    • 시스템 모니터링: 여신시스템의 상태를 지속적으로 모니터링하고, 장애 발생 시 빠른 대응과 문제 해결을 수행합니다.
    • 데이터 관리: 여신시스템의 데이터베이스를 관리하며, 데이터의 정합성과 안정성을 유지합니다.
    • 업무 프로세스 관리: 여신업무의 흐름을 정리하고, 업무 프로세스의 개선을 위해 노력합니다.

여신시스템 운영관리에서 가장 중요한 업무는 무엇인가요?

  • 여신시스템의 안정적인 운영을 위해 시스템 모니터링 및 이슈 대응이 가장 중요한 업무입니다. 장애 발생 시 빠른 대응과 문제 해결이 필요하기 때문에 대응력과 문제 해결 능력이 필요합니다.

JAVA, JSP, PHP 각각의 특징과 차이점은 무엇인가요?

  • JAVA: 객체지향 프로그래밍 언어로, 운영체제나 하드웨어와 상관없이 동작하는 특징이 있습니다. 또한, 가비지 컬렉터를 통해 메모리 관리를 자동으로 수행하기 때문에 안정성과 보안성이 높습니다.
  • JSP: 자바 기반의 서버 사이드 스크립트 언어로, HTML과 같이 사용하여 동적 웹 페이지를 생성합니다. JAVA 언어를 사용하는 것과 동일하게 객체지향 프로그래밍 언어로, 안정성과 확장성이 뛰어납니다.
  • PHP: 서버 사이드 스크립트 언어로, 동적 웹 페이지를 생성하는 데 사용됩니다. C언어와 문법이 유사하며, 주로 오픈소스 CMS(컨텐츠 관리 시스템) 및 프레임워크에서 많이 사용됩니다.

객체지향 프로그래밍에 대해 설명해주세요.

  • 객체지향 프로그래밍은 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶어 객체라는 개념으로 관리하는 프로그래밍 방식입니다. 이를 통해 코드의 재사용성, 확장성, 유지보수 용이성을 높일 수 있습니다.

객체지향 프로그래밍의 4대 특성에 대해 설명해주세요.

  • 객체지향 프로그래밍의 4대 특성은 캡슐화, 상속, 다형성, 추상화입니다.
    • 캡슐화 : 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶어 클래스라는 개념으로 관리합니다.
    • 상속 : 부모 클래스의 속성과 메서드를 자식 클래스에서 그대로 사용할 수 있는 기능입니다.
    • 다형성 : 같은 타입 또는 같은 이름의 메서드가 다양한 구현 방식을 가질 수 있는 기능입니다.
    • 추상화 : 복잡한 개념이나 모델을 단순화하여 필요한 부분만 추려내는 것입니다.

객체지향 설계 원칙(SOLID)에 대해 설명해주세요.

  • SOLID는 객체지향 설계의 다섯 가지 원칙을 의미합니다.
    • S : SRP(Single Responsibility Principle, 단일 책임 원칙) - 하나의 클래스는 하나의 책임만 가져야 한다.
    • O : OCP(Open-Closed Principle, 개방-폐쇄 원칙) - 확장에는 열려 있고, 수정에는 닫혀 있어야 한다.
    • L : LSP(Liskov Substitution Principle, 리스코프 치환 원칙) - 하위 클래스는 상위 클래스에서 가능한 행위를 수행할 수 있어야 한다.
    • I : ISP(Interface Segregation Principle, 인터페이스 분리 원칙) - 인터페이스는 클라이언트가 필요로 하는 메서드만 제공해야 한다.
    • D : DIP(Dependency Inversion Principle, 의존 역전 원칙) - 추상화에 의존해야 하며, 구체화에는 의존하면 안된다.

SOLID 원칙을 준수하면 코드의 가독성과 유지보수성을 높일 수 있으며, 객체지향 설계를 보다 효과적으로 수행할 수 있습니다.


JAVA의 상속과 인터페이스에 대해 설명해주세요.

  • "상속" 은 부모 클래스의 속성과 메서드를 자식 클래스에서 그대로 사용할 수 있는 기능입니다. 이를 통해 코드의 재사용성과 확장성을 높일 수 있습니다.
  • "인터페이스" 는 클래스와 클래스간의 연결을 위한 일종의 계약서로, 메서드와 변수의 원형을 정의하며, 클래스에서는 이를 구현하여 사용합니다. 이를 통해 코드의 유연성과 확장성을 높일 수 있습니다.

MVC 패턴에 대해 설명해주세요.

  • MVC(Model-View-Controller) 패턴은 소프트웨어 디자인 패턴 중 하나로, 애플리케이션을 세 가지 역할로 구분합니다.
  • Model  데이터를 담당하며,
  • View  데이터를 시각화하는 담당하며,
  • Controller는 Model과 View를 연결하여 사용자의 요청을 처리하는 역할을 담당합니다.
  • 이를 통해 코드의 구조화, 재사용성, 유지보수 용이성을 높일 수 있습니다.

MVC 패턴에서 Model과 Controller의 차이점에 대해 설명해주세요.

  • "Model" 은 데이터를 담당하는 역할을 수행합니다.
  • "Controller" 는 Model과 View를 연결하는 역할을 수행하면서, 사용자의 요청을 처리하는 역할을 담당합니다.
  • Model은 데이터를 다루는 데에 중점을 두고, Controller는 사용자의 요청과 응답을 다루는 데에 중점을 둔다는 점입니다.

JSP와 Servlet의 차이점에 대해 설명해주세요.

  • JSP는 HTML 코드 안에 JAVA 코드를 삽입하여 동적인 웹 페이지를 생성하는 기술입니다. Servlet은 JAVA 언어로 작성된 웹 애플리케이션 컴포넌트로, 클라이언트의 요청을 처리하고 응답을 생성하는 기능을 수행합니다. JSP는 보다 간편하게 동적인 페이지를 생성할 수 있지만, 복잡한 로직이나 비즈니스 로직을 구현하기 위해서는 Servlet을 활용하는 것이 더 적합합니다.

Servlet
- Java 코드 안에 HTML 코드 (하나의 클래스)
- data processing(Controller)에 좋다.
- 즉 DB와의 통신, Business Logic 호출, 데이터를 읽고 확인하는 작업 등에 유용하다.
- Servlet이 수정된 경우 Java 코드를 컴파일(.class 파일 생성)한 후 동적인 페이지를 처리하기 때문에 전체 코드를 업데이트하고 다시 컴파일한 후 재배포하는 작업이 필요하다. (개발 생산성 저하)

 

JSP
- HTML 코드 안에 Java 코드
- presentation(View)에 좋다.
- 즉 요청 결과를 나타내는 HTML 작성하는데 유용하다.
- JSP가 수정된 경우 재배포할 필요가 없이 WAS가 알아서 처리한다. (쉬운 배포)


참고 : https://gmlwjd9405.github.io/2018/11/04/servlet-vs-jsp.html


JAVA에서 Garbage Collection (가비지 컬렉션) 의 동작 원리에 대해 설명해주세요.

  • JAVA에서 메모리 관리를 위한 자동화된 기능으로, 더 이상 사용되지 않는 객체를 자동으로 제거하여 메모리 누수를 방지합니다.
  • Garbage Collection은 메모리 할당과 해제를 관리하는 Heap 메모리에서 동작합니다. JVM은 Heap 메모리를 계속해서 모니터링하며, 더 이상 참조되지 않는 객체를 파악하면, Garbage Collector를 실행하여 해당 객체를 해제합니다.

PHP에서 Composer의 역할에 대해 설명해주세요.

  • Composer는 PHP의 의존성 관리 도구로, PHP 프로젝트에서 필요한 라이브러리를 관리하고, 이를 간편하게 설치, 업데이트, 삭제할 수 있습니다. 이를 통해 라이브러리 간의 의존성 문제를 간단하게 해결할 수 있으며, 프로젝트 개발과 유지보수를 더욱 쉽게 수행할 수 있습니다.

PHP에서 쿠키와 세션에 대해 설명해주세요.

  • "쿠키" 는 클라이언트 측에 저장되는 작은 데이터 파일입니다. 이를 통해 사용자의 로그인 정보, 쇼핑몰의 장바구니 정보 등을 저장하고 유지할 수 있습니다.
  • "세션" 은 서버 측에서 관리되는 사용자 정보를 저장하는 방식입니다. 쿠키와 마찬가지로 로그인 정보나 장바구니 정보 등을 유지할 수 있으며, 보안성이 높습니다.

PHP에서 PDO와 mysqli의 차이점에 대해 설명해주세요.

  • PDO와 mysqli는 PHP에서 데이터베이스 연결을 위한 확장 모듈입니다.
  • "PDO" 는 여러 종류의 데이터베이스를 동일한 방법으로 다룰 수 있는 추상화 레이어를 제공하며, 데이터베이스 종류를 변경하더라도 코드의 수정이 적어 유지보수에 용이합니다.
  • "mysqli" 는 MySQL 데이터베이스 전용 모듈로, PDO보다 빠른 속도로 데이터베이스 연결이 가능합니다.

RESTful API에 대해 설명해주세요.

  • RESTful API는 Representational State Transfer(표현 상태 전이)의 약자로,
  • 웹 서비스의 아키텍처 스타일 중 하나입니다. HTTP 프로토콜의 GET, POST, PUT, DELETE 메서드를 이용하여 데이터를 요청하고, 결과를 받아 처리하는 방식입니다. 이를 통해 분산 시스템에서의 데이터 공유 및 통신을 간소화하고, 유연성과 확장성을 높일 수 있습니다.

자바스크립트에서 클로저(Closure)에 대해 설명해주세요.

  • 클로저는 함수와 함수가 선언된 어휘적 환경의 조합으로, 함수 내부에서 선언된 변수를 외부에서 접근할 수 없도록 보호하면서 해당 변수에 대한 함수의 접근을 제공하는 기능입니다. 이를 통해 정보 은닉을 구현하거나, 함수형 프로그래밍에서 고차 함수를 구현하는 등의 용도로 활용됩니다.

AJAX에서 XMLHttpRequest 객체의 역할에 대해 설명해주세요.

  • XMLHttpRequest 객체는 브라우저와 서버 간의 데이터를 비동기적으로 주고받을 수 있도록 도와주는 객체입니다. 이 객체를 활용하여 서버에 데이터를 요청하고, 응답을 받아오는 등의 작업을 수행할 수 있습니다.

웹 어플리케이션 개발에서 AJAX에 대해 설명해주세요.

  • AJAX(Asynchronous JavaScript and XML)는 비동기적으로 서버와 브라우저가 데이터를 주고받을 수 있는 기술입니다. 기존의 웹 페이지에서는 화면을 전환하여 데이터를 요청하고 응답을 받았지만, AJAX를 활용하면 화면 전환 없이 서버로부터 데이터를 받아와 사용자에게 실시간으로 표시할 수 있습니다.

캐시와 캐시 제어에 대해 설명해주세요.

  • "캐시" 는 데이터나 웹 페이지 등을 빠르게 로딩하거나 검색할 수 있도록 저장해놓는 임시 저장소입니다. 캐시를 활용하면 반복적인 작업의 속도를 빠르게 수행할 수 있으며, 웹 페이지의 로딩 속도를 향상시킬 수 있습니다.
  • "캐시 제어" 는 캐시의 만료시간을 설정하거나, 캐시를 강제로 삭제하는 작업 등을 수행하는 기능입니다. 캐시 제어를 통해 캐시의 유효성을 유지하면서 웹 페이지의 성능을 높일 수 있습니다.

웹 보안에서 CSRF (Cross-Site Request Forgery)에 대해 설명해주세요.

  • CSRF는 웹 어플리케이션에서 발생하는 보안 취약점 중 하나로, 악의적인 사용자가 희생자를 속여서 특정한 동작을 수행하도록 유도하는 공격입니다.
  • 이를 방지하기 위해서는 토큰 기반의 인증을 활용하거나, 요청에 대한 검증 절차를 추가하는 등의 방법이 있습니다. 토큰 기반의 인증을 활용하면 각 요청마다 유효한 토큰을 전달하여 요청의 출처를 확인할 수 있습니다. 또한, 요청에 대한 검증 절차를 추가하면 요청이 유효한 출처에서 온 것인지 검증할 수 있습니다.

웹 어플리케이션에서 XSS (Cross-Site Scripting)에 대해 설명해주세요.

  • XSS는 웹 어플리케이션에서 발생하는 보안 취약점 중 하나로, 악의적인 사용자가 웹 사이트에 악성 스크립트를 삽입하여, 해당 스크립트를 실행시키는 공격입니다.
  • 이를 방지하기 위해서는 사용자 입력값에 대한 검증 및 이스케이프 처리를 수행하거나, 쿠키의 HttpOnly 속성을 활용하여 스크립트의 실행을 방지할 수 있습니다.

웹 어플리케이션을 개발할 때, 보안에 대한 고려 사항은 무엇인가요?

  • XSS(Cross-Site Scripting) 공격, SQL Injection 공격 등 보안 취약점에 대한 대응이 필요합니다. 이를 위해 사용자 입력 값 검증, SQL Injection 방어, 암호화 기술 등 보안 대책을 적용해야 합니다.

SQL Injection 공격에 대해 설명해주세요.

  • SQL Injection 공격은 악의적인 사용자가 웹 애플리케이션으로 SQL 쿼리문을 삽입하여 데이터베이스를 비정상적으로 조작하는 공격입니다. 이를 방지하기 위해 사용자 입력값의 검증 및 제한, SQL Injection 방어 메커니즘 등을 적용해야 합니다.

SQL의 Join에 대해 설명해주세요.

  • Join은 데이터베이스에서 여러 테이블을 연결하여 데이터를 검색하거나 처리하는 방법입니다. INNER JOIN, LEFT JOIN, RIGHT JOIN 등 다양한 종류의 Join이 있으며, 각 Join은 특정한 조건을 만족하는 데이터만을 연결하여 결과를 출력합니다.

유지보수를 위해 코드 리팩토링이 필요할 때 어떤 기준으로 리팩토링을 결정하나요?

    • 코드 가독성, 유지보수 용이성, 성능 최적화 등을 고려하여 리팩토링을 결정합니다. 코드 가독성이 떨어지면 유지보수 비용이 증가하게 되므로, 이를 개선하는 것이 필요합니다. 또한, 코드 중복을 줄이거나 최적화하여 성능 개선을 도모할 리팩토링은 기존 코드를 수정하거나 재구성하는 작업으로, 기능은 변경하지 않으면서 코드 가독성, 유지보수 용이성, 성능 개선 등을 목적으로 수행합니다. 따라서 리팩토링을 결정할 때는 다음과 같은 기준을 고려할 수 있습니다. 
      1. 코드 가독성: 가독성이 떨어지는 코드는 유지보수하기 어려워지므로, 코드의 가독성을 높이기 위한 리팩토링이 필요합니다.
      2. 유지보수 용이성: 유지보수를 위해 코드를 수정할 때 기존 코드를 이해하기 어렵거나 수정하기 어려운 경우, 리팩토링이 필요합니다.
      3. 성능 최적화: 코드 중복, 불필요한 코드, 비효율적인 알고리즘 등으로 인해 성능이 저하되는 경우, 리팩토링을 통해 성능을 최적화할 수 있습니다.
      4. 기술적 부채(Technical Debt): 개발 초기에 빠르게 구현하기 위해 임시로 코드를 작성하거나 기술적인 부채를 쌓는 경우, 이를 해소하기 위해 리팩토링이 필요합니다.
      5. 코드 품질: 코드의 품질을 높이기 위해, 코드 스타일, 네이밍 규칙, 주석 등을 개선하는 리팩토링이 필요할 수 있습니다.
    • 이러한 기준을 고려하여 리팩토링을 결정하고 수행하면, 보다 효율적이고 유지보수가 쉬운 코드를 만들 수 있습니다.

테스트 자동화에 대해 설명해주세요.

  • 테스트 자동화는 테스트를 자동으로 수행하는 기술로, 개발자가 직접 테스트를 수행하는 것보다 효율적이고 정확한 결과를 도출할 수 있습니다.
  • 이를 위해 테스트 스크립트 작성, 자동화 테스트 도구 사용 등이 필요합니다. 이를 통해 품질을 향상시키고 개발 생산성을 높일 수 있습니다.

테스트 자동화를 위한 도구에 대해 설명해주세요.

  • 테스트 자동화를 위해 다양한 도구가 존재합니다.
  • 대표적인 도구로는 Selenium, JUnit, TestNG, PHPUnit, Cypress 등이 있습니다.
  • "Selenium" 은 웹 애플리케이션을 테스트하기 위한 프레임워크로, 다양한 브라우저에서 자동화된 테스트를 수행할 수 있습니다.
  • "JUnit, TestNG, PHPUnit" 은 각각 JAVA, PHP 언어를 위한 테스트 프레임워크로, 단위 테스트, 통합 테스트 등 다양한 종류의 테스트를 수행할 수 있습니다.
  • "Cypress" 는 웹 어플리케이션을 테스트하기 위한 도구로, 브라우저에서 자동화된 테스트를 수행할 수 있으며, 테스트 결과를 시각적으로 확인할 수 있는 기능을 제공합니다.
  • 이 외에도 Appium, Robot Framework, Katalon Studio 등 다양한 도구가 존재하며, 프로젝트의 특성과 요구사항에 맞게 적절한 도구를 선택하여 활용할 수 있습니다.

 

728x90
반응형