project interview Q&A

wi_label·2021년 4월 7일
1

Inteview

목록 보기
3/3

1. Struts2 와 Spring MVC 의 차이

 스트럿츠와 스프링 프레임워크의 가장 큰 차이점은 스트럿츠는 웹에 특화된 프레임워크라는 것입니다.

스트럿츠 프레임워크의 전반적 흐름은  웹 브라우저 사용자가 요청을 하면 서블릿에서 해당 요청을 받으면  structs.xml 설정에 따라 알맞은 액션으로 연결시킵니다 이과정에서 인터셉터(보안, 파일업로드..., 등)  에서 요청을 처리한 후 액션에 넘겨지게 됩니다. 액션에서 비즈니스 로직을 수행한 후 수행한 결과를 request객체에 담고 리턴된 포워드로 jsp를 연결하게 됩니다.

이런 일련의 과정들은 HTTP 요청방식에 대한 전반적인 처리를 다룬 다는 것입니다. 즉 웹 환경에만 특화된 것입니다.

 

반면,  스프링 프레임워크는 웹어플리케이션 뿐만 아니라 자바 어플리케이션에도 특화된 프레임워크입니다. 기본적으로 컨테이너라는 것을 제공하는데 이 컨테이너는 빈의 생성과 소멸등 일련의 라이프 사이크을 관리하게 됩니다. 환경설정도 스트럿츠 방식처럼  xml로 설정하는 방식뿐만이 아닌 자바 기반의 어노테이션을 활용하여 자바 빈들을 등록하실 수 있습니다.

이렇게 등록된 자바 빈은 웹 시스템 뿐만 아닌 어플리케이션에서도 활용 할 수 있습니다.

 

스프링은 MVC환경에 특화된 서블릿이나 컨트롤러 , 뷰리졸버 등을 제공하는 데, 사실상 이러한 것은 웹 환경을 지원하기 위해 제공하는 것입니다. 실질적으로 비즈니스 로직을 실행하는 Service나 Repository같이 자바빈으로 등록된 것 들은 웹 환경이 아닌 어디에서도 사용 가능합니다. 즉, 외부인터페이스에 확장까지 고려한 프레임워크라고 보시면 될 것 같습니다.

2. Nginx 와 WebtoBe의 차이

WebtoBeNginx
Process가 Blocking 시, 프로세스 작업이 끝날 때 까지 대기해야 한다.Event Driven방식의 웹 서버 : 이 덕분에 비동기 Non-Blocking 방식 특징을 활용 가능
주로 요청 하나당 프로세스(혹은 쓰레드) 하나가 쓰이는 방식이다.싱글스레드의 활용 → 적은 메모리 사용
자원(CPU, 메모리 등) 사용이 유동적 (요청에 따라 쓰레드, 프로세스 할당갯수가 증감됨.)자원(CPU, 메모리 등) 사용이 고정적 (싱글스레드)
서버 내 자원(CPU, 메모리 등) 활용이 비효율적이다.대용량 트래픽(수많은 동시접속자) 처리에 있어 요즘 떠오르는 대안

3. Tomcat 과 Jeus의 차이

4. Struts2의 장점/단점

장점단점
단일 진입 서블릿을 사용하여 관리가 용이하다.Struts 프레임워크를 이해하는데 시간이 많이 걸린다.
확장성을 위주로 만들어졌다.프레임워크를 이용해도 프로그램코드가 줄어드는 것은 아니다.
JSTL, JSF 등 표준을 포함하여 버전업 되고 있다.Struts 태그 라이브러리가 표준은 아니다.
여러 통합 개발 환경과 서드파티에서 Struts개발을 지원하고 있다규모가 커질수록 struts-config.xml이 방대해지고, 무수히 많은 액션클래스가 생긴다.

5. Spring MVC의 장점/단점

장점단점
Presenation에서 명확한 역할 분담이 된다.새로운 기술을 익혀야 하는 부담감이 있다.
Presentation 레이어의 정교한 개발이 가능하다. 유효성 체크, 에러 처리와 같은 기능들은 Spring 프레임워크에서 제공한다.프로젝트 초반에 개발 속도의 저하를 가져올 수 있다.
Dependency Pull 없이 Dependency Injection만을 이용해서 애플리케이션을 개발하는 것이 가능하다.
UI 레이어가 단순해 짐으로서 유지보수가 쉽다.

6. Nginx의 장점/단점

장점단점
worker 프로세스 / 싱글 스레드를 채택하여 Context Switch overhead가 발생하지 않는다.커뮤니티의 자료가 부족합니다
비동기 처리로 인해 적은 메모리사용량으로 동시성을 보장한다.확장 모듈이 Apahce에 비해 적습니다
nginx는 웹서버 기능 이외에도 로드밸런스와 같은 캐시 기능도 있다.
독립형 HTTP서버로 배치 가능

7. WebtoBe의 장점/단점

장점단점
다양한 모듈을 제공합니다많은 기능들로 인해 느린 측면이 있습니다
확장성이 좋습니다오버헤드가 발생합니다
보안 수준이 높습니다
벤더사의 존재

8. Tomcat의 장점/단점

장점단점
상용 WAS 제품 보다도 가볍고 빠른 성능 제공기술지원이 없다는 것, 책임질 회사 없다는 것
WAS 제품으로 세계에서 가장 많이 사용되는 제품
표준을 준수한 100% 순수 자바 플랫폼
독립적으로 사용이 가능하며, 아파치 웹서버와 IIS 등의 웹서버와 연동 가능

9. Jeus의 장점/단점

장점단점
세계 상용 최초 Java EE 5, 6 인증 취득
대용량 데이터 처리 시 Request Queuing, 동적 부하분산
벤더사 존재
기술지원 가능

10. MCI란?

  • 기업 시스템 구조에서 다양하게 구분된 업무 채널을 효율적으로 관리하기 위한 체계 또는 이를 실현하기 위한 솔루션, 또는 이를 구현한 프로토콜을 가리킨다. (Anylink)

12. JDBC(Java Database Connectivity)란?

  • 자바에서 DB 프로그래밍을 하기 위해 사용되는 API -> DB종류에 상관없다

13. MyBatis란?

  • Mybatis는 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크이다.
    SQL을 별도의 파일로 분리해서 관리하게 해준다.
    Hibernate나 JAP(Java Persistence Api)처럼 새로운 DB프로그래밍 패러다임을 익혀야하는 부담 없이 SQL을 그대로 이용하면서 JDBC코드 작성의 불편함도 제거해주고 도메인 객체나 VO객체를 중심으로 개발이 가능하다는 장점이 있다.

14. iBatis란?

  • 데이터베이스에 있는 자원들을 보다 편리하게 가져오기 위한 프레임워크이다.
    XML서술자를 사용해서 간단하게 자바빈즈를 PreparedStatement의 바인드 변수인 파라미터와
    ResultSet으로 맵핑시켜주는 기능으로 SQL Maps 또한 ORM이라고도 한다.
    iBATIS 데이터 매퍼 프레임워크는 관계형 데이터베이스에 접근할 때 가독성, 유지보수성, 생산성 등을 향상시켜준다.

20. GitLab란?

21. GitLab의 장점/단점

22. Git란?

23. Git의 장점/단점

24. SVN과 Git의 차이

  • 중앙집중관리식의 SVN 그리고 분산관리식의 GIT
    SVN 은 내 로컬PC 에서 Commit을 하면 바로 중앙저장소에 반영이 되는 반면
    GIT 은 내 로컬PC에서 Commit을 하면 로컬 저장소에 반영이 되고 로컬저장소에서 Push를 하면
    원격저장소에 반영이 된다.

28. React란?

  • 웹은 정적이고 단순한 페이지가 아니다. 웹앱 혹은 웹 어플리케이션이라 불릴 정도로 복잡하고 동적이다. 이런 웹 어플리케이션에서 UI를 동적으로 나타내기 위해서는 복잡하고 많은 상태를 관리해야 하는 부담이 생긴다.
    만약 프로젝트 규모가 크고 다양한 UI와 상호작용이 필요하다면 DOM 요소 하나하나를 직접 관리하는 것은 힘든 일이다. 또, 복잡하게 늘어진 코드를 리팩토링 하는 것도 점점 힘들게 된다.
    React를 사용하면 사용자와 상호작용할 수 있는 interactive한 UI를 쉽게 만들 수 있다. React를 사용하면 기능과 UI 구현에 집중하고 불필요한 주의력 분산을 줄일 수 있게 된다.
    또, React를 사용하면 브라우저 전체를 새로고침 하지 않고도 컨텐츠를 빠르게 변경할 수 있다.

29. React 장점/단점

장점단점
React는 JavaScript 객체 형태의 Virtual DOM 을 사용하여 어플리케이션의 성능을 향상시킴 (JavaScript Virtual DOM 처리가 실제 DOM 보다 빠르기 때문)VIEW ONLY , VIEW 이외의 기능은 써드파티 라이브러리(Third party library, =패키지, 모듈로 불리기도함)를 이용하거나 직접 구현해야함
서버 & 클라이언트 사이드 렌더링 지원을 통해 브라우저측의 초기 렌더링 딜레이를 줄이고, SEO 호환도 가능해짐IE8 이하 지원하지 않음 (IE8 이하 버전을 지원해야 할 경우 v0.14 버전을 사용 해야함)
Component 의 가독성이 매우 높고 간단하여 쉬운 유지보수, 간편한 UI 수정 및 재사용 용이React는 inline-template 과 JSX 를 사용하는데, 일부 개발자들에게는 적응이 안 될 수 있음
React는 프레임워크가 아닌 라이브러리기 때문에 다른 프레임워크와 혼용 가능

30. Mobx와 Redux의 차이

  • Mobx와 Redux의 차이는 코드적인 부분에 있어서 가장 차이가 크다고 생각합니다. Redux는 State를 사용하기 위해 mapStateToProps, mapDispatchToProps, bindActionCreators등 Component와 state를 연결해주는 번잡하고 '굳이 이렇게까지 헤야하나' 싶은 작업들을 해야만 했습니다. 하지만 Mobx는 Redux의 번거로운 작업들을 데코레이터로 매우 단순화 시켜주고 가독성이 매우 확실해지는 경험할 수있습니다.
    Redux는 모든 State를 하나의 객체(store)로 관리하기 때문에 React의 불변성을 유지하기 위해서 많은 노력이 필요합니다. state 객체의 depth가 깊어질수록 매우 번거로워지고 관리하기가 어렵습니다. 이를 해결하기 위해 immutable.js, immutableHelper 등을 사용할 수 있지만 이 역시도 매우 번거롭다는점에 모든 개발자분들이 동의할것이라 생각합니다.

31. Mobx 장점/단점

장점단점
처리속도가 빠름Redux DevTools에 대응하는 툴이 없다.
유연함
코드가 적음, 러닝커브가 낮음

32. Axios란?

  • Axios는 브라우저, Node.js를 위한 Promise API를 활용하는 HTTP 비동기 통신 라이브러리이다.운영 환경에 따라 브라우저의 XMLHttpRequest 객체 또는 Node.js의 HTTP API 사용
    Promise(ES6) API 사용
    요청과 응답 데이터의 변형
    HTTP 요청 취소 및 요청과 응답을 JSON 형태로 자동 변경

33. Axios 장점

  • 구형브라우저를 지원한다.(fetch의 경우는 폴리필 필요)
  • request aborting에 대한 방법을 제공한다.
  • 응답 시간 초과를 설정하는 방법이 있다.
  • CSRF 보호 기능이 내장되어 있다.
    (이건 무슨 말인지 모르겠다 공부 필요함!!)
  • JSON 데이터 자동변환이 가능하다.
  • node.js에서의 사용이 가능하다.
  • catch 에 걸렸을 때, .then(~~~)을 실행하지 않고, console 창에 해당 에러로그를 보여준다.

34. JS런타임이란?

  • 자바스크립트 런타임환경은 프로그램에 실행동안 사용 가능한 내장된 라이브러리를 제공합니다. 따라서 만약 당신이 브라우저 안에서 윈도우 오브젝트나 DOM API를 사용하고자한다면, 이 과정에 브라우저의 JavaScript 런타임 환경(Runtime Environment)이 포함될 것입니다. Node.js 런타임(runtime)은 Cluster와 FileSystem API들 같은 다른 라이브러리들을 포함합니다. 두 런타임(Runtime) 모두 내장된 데이터 타입들과 Console 오브젝트 같은 공통된 기능들을 포함하고 있습니다.
    크롬(Chrome)과 Node.js는 따라서 같은 엔진(Google의 V8 엔진)을 공유하지만, 다른 런타임(runtime) 환경, 즉 크롬(Chrome)과 Node.js라는 다른 실행 환경을 가지고 있다고 할 수 있습니다.

35. Babel이란?

  • 최신 사양의 자바스크립트 코드를 하위 사양(ES5 이하)의 코드로 트랜스파일링

36. Babel 장점/단점

장점단점
ECMA6 코드로 ECMA5용 코드를 생성할 수 있으므로 자바스크립트 엔진이 업그레이드 되더라도 대처할 수 있다.ECMA6에 새로 정의된 기능 중 상당수가 polyfill로 구현되어 있는데, 모든 polyfill들이 commonJs방식을 따르기에 amd모듈의 생성은 가능하지만, 실제로는 commonJs모듈만 사용해야 한다.
ECMA6 코드로 amd용, commonJs용 모듈과 그를 사용하는 코드를 생성해 낼 수 있다.생성된 코드가 꽤 장황하므로, 코드의 유지보수에는 Babel을 사용하는 것이 좋다.
ECMA6 코드로 ECMA6에 정의된 새로운 기능을 마음껏 사용할 수 있다.

37. Webpack이란?

  • 모듈 번들링이라고 한다.
    html 파일에 들어가는 자바스크립트 파일들을 하나의 자바스크립트 파일로 만들어주는 방식을 모듈 번들링이라고 한다.
    쉽게 말하면, 필요한 다수의 자바스크립트 파일을 하나의 자바 스크립트 파일로 만들어 주는 것을 Webpack 이라고 한다.

38. Webpack 장점/단점

장점단점
비동기 I/O와 다중 캐시 레벨을 사용하기 때문에 컴파일 속도가 빠르다러닝커브가 꽤 된다
CLI (Command line Interface) 로 존재하기 때문에, 간단한 명렁어로 조작 및 컴파일이 가능하다typescript나 react, babel 등 여러 라이브러리나 npm 모듈을 같이 쓰게 될텐데, 웹팩 버전에 따른 버전 종속성이 존재하며, 귀찮은 오류들과 조우가능
Loader기능을 통해 다양한 리소스를 Javascript에서 사용할 수 있는 여러 형태로 변환하여 사용이 가능하다Document가 내가 보기엔 썩 nice하지는 않은것 같다

39. NPM이란?

  • NPM는 Node Package Manager의 약자이다. 자바스크립트 패키지 매니저이고 NodeJS에서 사용할 수 있는 모듈들을 패키지화하여 모아둔 저장소 역할을 하며 설치/관리를 수행할 수 있는 CLI를 제공한다.

40. node.js 장점/단점

장점단점
자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있다는게 가장 큰 장점 새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버기술을 빨리 향상시킬 수 있습니다.이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다. 예를 들어, 한번의 요청에 대해 DB에서 조회한 결과값에 따라 다른 로직을 처리해야 하며, 이런 로직이 여러개인 경우 콜백함수 늪 (Callback Hell) 에 빠진다.
이벤트 기반 비동기방식이라 서버 무리가 적다.단일 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않다. 게시판형태와 같이 가벼운 I/O가 많은 웹서비스에 어울린다.
npm(node package manager)을 통한 다양한 모듈(패키지) 제공 npm을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 효율성이 좋다.코드가 수행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 엄청 중요하다. 반드시 모든 케이스에 대해 소스코드를 검증해야 한다.
구글이 만드는 JavaScript 엔진을 사용한다. 구글은 V8 엔진 성능 업그레이드를 계속 하고 있다.

41. Binary search란?

  • 데이터가 정렬되어 있는(binary search의 주요 조건) 배열에서 특정 값을 찾아내는 알고리즘
  • 배열의 중간에 있는 임의의 값을 선택해서, 찾고자 하는 값 X와 비교한다
  • X가 중간값보다 작으면 중간값을 기준으로 왼쪽의 데이터를 대상으로,
  • X가 중간값보다 크면 배열의 우측을 대상으로 다시 탐색한다
  • 동일한 과정을 해당 값을 찾을 때까지 반복한다

42. 블랙박스 화이트박스 차이

  • 블랙박스 테스트는 실행파일 형태 , 화이트박스는 소스코드형태로 소프트웨어를 테스트한다.
    게임을 직접 플레이하며 게임상으로 드러난 결과물을 검사하는 것이 블랙박스 테스트이고
    게임 소프트웨어 내부의 프로그래밍 언어를 실행 단계에 맞게 추적하며 오류를 검사하는 것이 화이트박스 테스트이다.

43. DI란?

  • 의존성 주입이란 말로도 쓰이며 스프링 IOC 컨테이너 핵심 개념 중 하나이며 이미 다양한 프레임워크에 적용되어 있다.
  • 객체 간의 의존 관계를 외부의 조립기가 관리
  • 불필요한 의존 관계를 없애거나 줄일 수 있다.
  • 단위테스트 수행이 수월하다.
  • 설정파일과 어노테이션을 이용하여 객체간의 의존 관계를 설정
  • 각 객체를 빈(bean)으로 관리

44. ORM란?

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말합니다.
    객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용합니다.
    객체 모델과 관계형 모델 간에 불일치가 존재합니다.
    ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결해줍니다.
  • 데이터베이스 데이터 <- 매핑 -> Object 필드
    객체를 통해 간접적으로 데이터베이스 데이터를 다룹니다.
  • Persistant API라고도 부릅니다.
    Ex) JPA, Hibernate

45. JUnit란?

  • Java에서 독립된 단위테스트(Unit Test)를 지원해주는 프레임워크이다.

46. 단위테스트(Unit Test)란?

  • 소스코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다.
  • 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.
  • jUnit은 보이지 않고 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위테스트를 쉽게 해주는 테스트 지원 프레임워크이다.

TBD

profile
옥은 부서질 지언정 흰 빛을 잃지 않고, 대나무는 불에 탈 지언정 그 곧음을 잃으려 하지 않는다.

0개의 댓글