[SW 기술 면접] 웹, JAVA 관련 Part

딱지의겨울

·

2021. 6. 8. 14:41

📌 MVC 패턴

Model, View, Controller 의 약자. 개발할 때 3가지 형태로 역할을 나누어 개발하는 방법론, 비즈니스 처리 로직과 사용자 인터페이스 요소들을 분리시켜서 서로 영향없이 개발하기 수월하다는 장점이 있다. 

 

  • Model: 처리되는 알고리즘, DB와의 상호작용, 데이터어플리케이션의 내부 로직을 처리하기 위한 역할
  • Controller: 모델이 어떻게 처리할 지를 알려주는 역할. 화면에서 사용자의 요청을 받아서 처리하는 부분으로 요청 내용을 Model과 View 에 업데이트 요청을 하게 됨. Model과 View가 각각 무엇을 해야할 지 알고 있고 통제함. 
  • View: 최종 사용자에게 보여주는 역할. 사용자 인터페이스 내의 구성요소들을 표현. (사용자에게 보여지는 화면)

 

📌 JAVA

  • 객체 지향 프로그래밍 언어. 
  • JVM(자바 가상 머신)만 설치하면 컴퓨터의 운영체제에 상관없이 작동. = 운영체제에 독립적
  • 기본 자료형을 제외한 모든 요소들이 객체로 표현. 
  • 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어. 
  • Garbage Collector를 통한 자동적인 메모리 관리
  • 멀티쓰레드를 지원.

🔹자바 컴파일 과정

  • 컴파일러가 소스코드를 자바 바이트 코드(.class) 로 변환.
  • JVM이 그 바이트코드를 기계어로 변환하여 인터프리터 방식으로 어플리케이션을 실행

🔹정적 링크 라이브러리 (.lib)

  • 컴파일 시에 함수가 실행 파일에 연결됨. 
  • 실행 파일에 함수의 코드가 복사되기 때문에 실행파일의 크기가 커지는 단점이 있지만 실행 파일은 완전한 단독 실행 파일이 됨. 
  • 실행 파일에 함수의 코드가 포함되어 있기 때문에 컴파일이 끝나면 lib 파일이 없어도 프로그램을 실행할 수 있음.

🔹동적 링크 라이브러리 (.dll)

  • 런타임 시에 함수가 실행 파일에 연결됨. 
  • 실행 파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않으므로 실행파일의 크기가 작아짐. 
  • 실행 파일은 함수에 대한 정보만 가지고 있을 뿐 실제 코드를 가지고 있지 않기 때문에 프로그램 실행시에는 dll 파일이 항상 존재해야 함. 

 

📌 스크립트 언어와 컴파일 언어

🔹스크립트 언어

  • Javascript, Pyhton
  • 실행될 때 바로 해석하므로 코드 변경시 실행할 때마다 결과가 바뀌게 됨. 

🔹컴파일 언어

  • C, C++, C#, Java
  • 컴파일러를 통해서 한번 컴파일 된 후에는 코드 수정 후 재컴파일 하기 전까지는 같은 결과를 나타냄. 

 

📌 OOP (Object-Orientated Programming)

  • 객체 지향 프로그래밍. 데이터를 객체로 취급하여 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것. 
  • 코드의 재사용성이 높음. 
  • 코드의 변경이 용이
  • 개발 속도 향상
  • 상속을 통한 장점 극대화
  • 다형성, 상속, 캡슐화
  • Object (객체): 데이터와 그 데이터에 관련되는 동작을 모두 포함한 개념.
  • 절차 지향 프로그래밍: 순차적 프로그래밍이라고도 하고 해야할 작업을 순서대로 코딩함. 

 

📌 Overloading vs Overriding

🔹Overloading(오버로딩)

  • 같은 이름의 메소드를 여러 개 정의하는 것
  • 매개 변수의 타입이 다르거나 개수가 달라야 함. 리턴타입과 접근제어자는 상관없음. 
  • void cat(){}
    void cat(int a){}

 

🔹Overriding(오버라이딩)

  • 상속에서 나온 개념. 
  • 상위 클래스의 메소드를 하위 클래스에서 재정의 
  • 같은 이름의 메소드를 다른 기능으로 고쳐 쓰는 것. 

 

📌 Servlet, JSP

  • Servlet: Container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것. HTML in JAVA
  • JSP(Java Server Page): HTML 기반에 JAVA 코드를 블록화하여 삽입한 것. Java in HTML

 

📌 JDBC

  • Java Database Connection. 
  • Java 언어를 통해 데이터베이스에 접근할 수 있는 프로그래밍을 의미. 

 

📌 SDK (Software Development Kit)

  • 개발을 위한 클래스, 컴파일러, 실행도구, 디버깅 툴, 튜토리얼 등을 모아 놓은 환경을 제공하는 것. 
  • 개발을 위한 도구 세트

 

📌 GET / POST

🔹GET 방식

  • 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 '이름'과 '값'이 결합된 스트링 형태로 전달. 
  • POST 방식보다 상대적으로 전송 속도가 빠름
  • 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용. 
  • 보안성이 떨어짐: 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩 되어 URL에 붙음. 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어짐. 
  • 길이에 제한: 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있음. 

🔹POST 방식

  • 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용.
  • 웹 서버에 많은 데이터를 전달하기 위해서는 POST 방식을 사용하는 것이 바람직 함. 
  • 서버로 보내기 전에 인코딩하고, 전송 후 서버에는 다시 디코딩 작업을 함. 
  • 주소창에 전송하는 데이터의 정보가 노출되지 않아 GET 방식에 비해 보안성이 높음. 
  • 속도가 get 방식보다 느림. 
  • 쿼리스트링(문자열) 데이터 뿐만 아니라, 라디어 버튼, 텍스트 박스 같은 객체들의 값도 전송이 가능. 

 

📌 Session 과 Cookie

🔹Session 과 Cookie 사용 이유

  • HTTP 프로토콜의 비연결성, 비상태성이라는 특징을 보완하기 위해. 
  • 새로운 접속이 이루어지면 이전 페이지와 현재 페이지 간의 관계가 지속되지 않음. HTTP 프로토콜을 사용하는 웹사이트에서 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용함.

🔹Session

  • 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한 번의 방문을 의미.
  • Session에 관련된 데이터는 Server에 저장됨.
  • 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라짐.
  • Cookie에 비해 보안성이 좋다.
  • 저장 데이터에 제한이 없음. 
  • 각 클라이언트에 고유 session ID를 부여함. 

🔹Cookie 🍪

  • 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법.
  • 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해주는 정보.
  • Cookie는 인터넷 사용자가 특정 웹 서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일.
  • 서버가 아닌 클라이언트에 텍스트 파일로 저장되어 다음에 해당 웹 서버를 찾을 경우 웹 서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용함.
  • 클라이언트 PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능. 따라서 정보 유출될 가능성이 있음. 
  • 보안성이 낮은데도 쿠키를 사용하는 이유?  모든 정보를 Session에 저장하면 서버의 메모리를 과도하게 사용하게 되어 서버에 무리가 감. 
  • 예시: 아이디 비번 자동 입력 / 팝업창을 통해 오늘 이 창을 다시 보지 않기 체크. 

 

📌 Interface, Abstact

🔹Interface

  • 일종의 추상 클래스. 오직 추상 메서드와 상수만을 멤버로 갖는다. 
  • Implements 키워드를 사용. 
  • 상속 관계가 없는 클래스 간 서로 공통되는 로직을 구현하여 쓸 수 있도록 한다. 
  • extends는 하나의 클래스만 상속 가능하나 interface는 다중 상속이 가능하다. 

🔹Abstract

  • 추상 메서드를 하나 이상 가진 클래스.
  • 자신의 생성자로 객체 생성 불가능. 
  • 하위 클래스를 참조하여 상위 클래스의 객체를 생성

🔹공통점

  • new 연산자로 인스턴스 생성 불가능. 
  • 프로토타입만 있는 메서드를 갖는다. 
  • 사용하기 위해서는 하위 클래스에서 확장/구현 해야 함. 

🔹차이점

  • 사용하는 키워드가 다름. 
  • Abstract 는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능함. 

 

📌 Call by Reference, Call by Value

🔹Call by Reference

  • 참조에 의한 호출. 함수 호출 시 인자로 전달되는 변수 값이 아닌 주소를 넘겨줘서 주소를 참조하여 데이터를 변경
  • 매개 변수의 원래 주소에 값을 저장하는 방식. 클래스 객체를 인수로 전달한 경우. 

🔹Call by Value

  • 에 의한 호출. 
  • 주어진 값을 복사하여 처리하는 방식. 매서드 내의 처리 결과는 메서드 밖의 변수에 영향을 미치지 않는다.

 

📌 Static

  • 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미.
  • 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재. (객체와 무관한 키워드)

 

📌 Garbage Collection

  • 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것.
  • 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터라고 부름. 

 

📌 Primitive type / Reference type

🔹Primitive type

  • 변수에 값 자체를 저장.
  • 정수형 / 실수형 / 문자형 / 논리형
  • Wrapper Class를 통해 객체로 변형할 수 있음. 
    • int → Integer, char → Character
    • 간단한 데이터를 객체로 만들어주는 기능을 지원하는 클래스. 

🔹Reference type

  • 메모리 상에 객체가 있는 위치를 저장
  • Class, Interface, Array 등

📌 Framework

  • 소프트웨어 환경에서 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념 구조.
  • 뼈대가 되는 부분을 미리 구현한 클래스, 인터페이스, 메소드 등의 모음. 
  • 개발자가 애플리케이션의 구조적 설계를 신경 쓸 필요 없고, 일정 수준 이상의 품질을 보증하는 코드를 비교적 빠르고 편하게 완성 및 유지보수할 수 있는 솔루션.

 

📌 Spring Framework

  • 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임 워크
  • 경량 컨테이너로서 자바 객체를 직접 관리: 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하여 스프링으로부터 필요한 객체를 얻어올 수 있음. 
  • POJO(Plain Old Java Object) 방식의 프레임워크: 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가벼움. 
  • 제어의 역행(IoC: Inversion of Control): 객체의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출. 
  • 의존성 주입(DI): 의존하는 객체를 직접 생성하지 않고 전달받는 방식을 의미. 코드 재사용성을 높이고 결합도를 낮출 수 있음. Spring 에서는 DI를 자동으로 할 수 있는 기능이 있음. 
  • AOP(관점 지향 프로그래밍)
    • 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법.
    • 스프링에서는 트랜젝션이나 로깅, 보안 같은 여러 모듈에서 공통적으로 사용하는 기능의 경우 분리하여 관리할 수 있음. 
    • 애플리케이션의 핵심적인 기능과 부가적인 기능을 분리해 Aspect 라는 모듈을 만들어 설계하고 개발하는 방법. 
    • 공통적인 기능을 모든 모듈에 적용하기 위한 방법으로 상속을 이용하는데 Java에서는 다중 상속이 불가능함. 이러한 이유로 AOP가 등장했음. 
  • 확장성이 높음: 수많은 라이브러리가 스프링에서 지원되고 있고, 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이함. 

 

📌  AJAX

  • JavaScript의 라이브러리 중 하나. 비동기식 자바 스크립트와 XML의 약자. 
  • 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법. 
  • 비동기 통신, 클라이언트 서버 간에 XML 데이터를 주고 받는 기술

 

📌  REST / RESTful

🔹REST 

  • Representational State Transfer의 약자. URI와 HTTP 메소드를 이용해 객체화된 서비스에 접근하는 것
  • REST의 요소: 리소스, 메소드, 메시지
    • 리소스: URI로 표현
    • 메소드: HTTP 메소드 중 GET, POST, PUT, DELETE를 사용
    • 메세지: JSON 문서를 이용해서 표현. 
  • 리소스 지향 아키텍쳐 스타일. 모든 것을 명사로 표현하며 각 세부 리소스에는 id를 붙임. 

🔹RESTful 하게 API를 디자인 한다는 것.

  • 동일한 URI의 행위에 맞게 POST, GET, DELETE, PATCH 등의 메소드를 사용. 
  • 명사를 사용. 리스트를 표현할 때는 복수형을 사용. 
  • URI Path에 불필요한 파라미터를 넣지 않음. 단계를 심플하게 설계함. 

 

📌  Oracle vs MySQL

🔹Oracle 

  • 대규모 데이터베이스에 적합한 성능과 기능 제공. 
  • 안정성이 매우 높아 금융권 대용량 서비스를 제공 가능. (국내 대형 은행 대부분 오라클 사용)

🔹MySQL

  • 소규모 프로젝트에 적함. 
  • DB를 이전 상태로 복원하는데 도움이 되는 저장점이 없고 COMMIT 과 ROLLBACK 만 존재. 

 

📌 Array vs List

🔹Array

  • 다수의 데이터를 묶어 효율적인 관리가 가능한 자료형.
  • 데이터에 접근하기 위한 인덱스가 존재. 인덱스를 통해 데이터를 가져오기 때문에 조회 속도가 빠름. 
  • 데이터의 위치가 인덱스와 매핑되어 고정되므로 추후 데이터가 삭제되는 경우 배열의 빈 부분의 메모리가 낭비됨. 
  • 정의와 동시에 길이를 지정하며 길이를 바꿀 수 없는 정적 자료형. 

🔹List

  • 빈틈없이 데이터를 적재하는 장점을 취한 자료형. 
  • ArrayList, LinkedList
  • 순서가 있으며 중복이 허용. 자동으로 엘리먼트를 수용할 수 있는 크기가 조정됨. 리스트 내의 엘리먼트의 실제 개수를 알려줌.