본문 바로가기
기타 CS

Java 기반 웹 백엔드 엔지니어 기술 면접 예상 질문 (feat. chat GPT)

by 밝지 2023. 3. 5.
728x90
반응형

기술 면접 대비 겸 CS 지식 함양을 위해 챗 지피티한테 기술 면접 예상 질문을 부탁했다. 챗 지피티 많이 써보진 않았지만.. 뭔가 이런것들? 에 정말 최적화 되어있는 것 같다. 암튼 챗 지피티가 추천한 10가지 질문 중 정리해볼만한 것들에 대한 포스팅.

 

 

 

Spring MVC 작동 원리

MVC는 Model-View-Controller의 약자로 애플리케이션을 역할에 따라 세 가지 모듈로 나누어 구분하는 패턴이다. Model은 데이터 정보를 가공하여 갖고 있는 컴포넌트, View는 시각적인 UI 요소, Controller는 모델과 뷰를 연결해주는 역할이다. 스프링 프레임워크의 MVC는 우선적으로 프론트 컨트롤러가 클라이언트의 모든 요청을 받아 해당하는 개별 컨트롤러 클래스로 위임한다. 개별 컨트롤러 클래스(핸들러)는 DI를 통해 생성해둔 Bean을 통해 비즈니스 로직을 처리하고 처리 결과를 Model에 담아 프론트 컨트롤러로 보낸다. 프론트 컨트롤러는 Model을 알맞은 View 템플릿으로 전달해 반영 -> 클라이언트로 보낼 화면을 응답 결과로 전송한다. 

[상세]

  1. 클라이언트가 서버에 요청
  2. 프론트 컨트롤러인 DispatcherServlet 클래스가 요청을 받음
  3. DispatcherServlet 이 해당하는 컨트롤러를 찾아 @RequestMapping을 통해 해당하는 메소드로 위임한다.
  4. 컨트롤러는 비즈니스 로직을 서비스에 위임한다.
  5. 서비스에서 요청에 필요한 작업을 수행한다. (필요 시 DB 접근)
  6. 서비스는 처리 후 전달받은 데이터를 컨트롤러에 전달한다.
  7. 컨트롤러는 Model 요청에 맞는 Veiw 정보를 담아 DispatcherServlet에 전송한다.
  8. DispatcherServlet 은 ViewResolver에게 전달받은 View 정보를 전달한다.
  9. ViewResolver 는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
  10. DispatcherServlet은 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리
  11. DispatcherServlet이 클라이언트에 Rending된 View를 응답한다.

 

 

RESTful API 란?

RESTful API는 클라이언트-서버 간 커뮤니케이션에 주로 사용하는 API로 REST 아키텍처 스타일로 설계된 API입니다.

REST 아키텍처 스타일이란, 

  1. HTTP URI을 통해 자원을 명시하고
  2. HTTP method(GET, POST, PUT, DELETE)를 통해 자원을 처리하도록 

설계된 것입니다. 

RESTful API의 장점은

  1. 웹 인프라를 그대로 사용가 가능하고
  2. stateless(통신에 필요한 정보는 클라이언트에서 가지고 있다가 http header에 실어 보냄) 하여 다양한 브라우저와 모바일에서 통신할 수 있고
  3. URI를 통해 요청 내용을 이해하기 쉽고
  4. 자원을 아낄 수 있습니다. 

 

 

ORM, Hibernate

Object Relational Mapping 의 약자로 OOP 객체를 구현한 클래스와 RDB 테이블을 자동으로 매핑하는 것이다. ORM을 이용하면 따로 SQL문을 짤 필요 없이 객체를 통해 데이터베이스를 조작할 수 있다. ORM을 사용하면 재사용, 유지보수, 리팩토링이 쉬워지고 DBMS 종속성이 낮아진다. 하지만 속도가 저하될 수 있고, 객체-관계 간 불일치가 발생할 수 있다.

JPA는 자바 ORM 기술 표준으로 인터페이스 모임이다. 이 JPA 표준 명세를 구현한 구현체가 Hibernate 이다.

 

 

 

웹 애플리케이션의 보안 취약점과 예방 방법

보안 취약점 설명 대책
SQL 인젝션 입력 폼 or URL 입력 란에 SQL 문을 삽입하여 조작 외부 입력값 검증 모듈 사용
특수 문자 및 쿼리 예약어 필터링
운영체제 명령 실행 사용자의 입력값이 운영체제 명령어로 구성되어 의도치 않게 시스템 명령어가 실행 웹 인터페이스에서 시스템 명령어 필터링
XQuery 인젝션 공격자가 쿼리문의 구조를 임의로 변경 특수문자 및 쿼리 예약어 필터링 
XPath 인젝션 공격자가 쿼리문의 구조를 임의로 변경 특수문자 및 쿼리 예약어 필터링 
크로스 사이트 스크립트 부적절한 스크립트가 수행됨 입력 문자열에서 <,>,&," 등을 치환
HTML 태그의 일부만 허용
파일 업로드 서버사이드에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일)이 업로드 가능하고, 업로드된 파일이 웹을 통해 실행됨 화이트 리스트 방식으로 허용된 확장자면 업로드 허용
저장 경로를 web document root 밖에 위치 시켜 웹을 통한 직접 접근 차단
파일 다운로드 경로 조작 문자가 필터링 되지 않아 시스템 정보 등 중요 정보가 누출 정해진 경로 외에 디렉토리와 파일에 접근할 수 없도록 필터링
버퍼 오버플로우 Java에서 서용된 가장 큰 값보다 값이 커져서 음수가 저장될 수 있는 취약점 변수 값의 범위를 체크
LDAP 인젝션 특수문자가 필터링되지 않아 공격자에 의해 LDAP 명령어가 실행 필터에 사용되는 특수문자는 일반문자로 인식되도록 처리 

 

 

 

멀티스레딩과 동시성 문제 처리 방법

멀티 스레드 환경에서는 여러 스레드가 동시에 하나의 자원을 공유하고 잇기 때문에 같은 자원을 두고 race condition과 같은 문제가 발생할 수 있다. 동시성을 제어함으로써 레이스 컨디션을 해결할 수 있다. 

[동시성 제어 방법]

  • 암시적 Lock - 문제가 되는 메서드, 변수에 synchronized 키워드를 붙인다.
  • 명시적 Lock - 직접 Lock 객체를 선언(Lock lock = new ReentrantLock())하여 getLock().lock() / getLock().unlock() 한다. 
  • Concurrent 패키지를 활용해 스레드에 안전한 객체 사용
  • ConcurrentHashMap 사용 - 분산 락을 사용해 병렬성과 성능 두 마리 토끼를 모두 잡을 수 있다.
  • 불변 객체를 만들어 사용한다. setter를 만들지 않는다. 
  • stream() 등을 활용해 함수형 프로그래밍을 한다. (불변)

 

 

 

Java 동기/비동기 통신

  • 동기식 처리 - 직렬로 태스크 수행. 태스크는 순차적으로 실행되며 어떤 작업이 수행되면 끝날때까지 다음 작업은 대기한다.
  • 비동기식 처리 - 병렬로 태스트 수행. 어떤 작업이 수행 중이어도 대기하지 않고 다음 태스크를 실행한다.

Java에서는 멀티 스레드 동작이 비동기식으로 작동한다. 비동기 처리는 요청 결과가 반환되는 시간 동안 다른 작업을 수행할 수 있다는 장점이 있지만 설계가 복잡하고, race condition 등 사이드 이펙트가 발생할 수 있다. 메시지큐를 이용하면 비동기식 처리가 가능하다. <-?????? 이건 좀 더 공부를...

 

 

 

 

728x90
반응형