본문 바로가기
[ 개발 지식 ]

개발자 면접 준비 중 헷갈릴만한 단어 정리

by 히앤님 2020. 11. 16.
반응형
SMALL

[파일 및 환경설정 개념]

 

JVM(Java Virtual Machine)

자바 가상머신. 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다. 또한 JVM은 플랫폼에 의존적이다. 즉 리눅스의 JVM과 윈도우즈의 JVM은 다르다. 단, 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있다.

 

JRE(Java Runtime Environment)

자바 프로그램을 실행시켜주는 환경을 구성해주는 도구다. JRE는 JVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현했다고 할 수 있다.

 

JDK(Java Development Kit)

자바 개발시 필요한 툴킷을 제공하는 도구모음이다. 개발하려면 당연히 실행도 시켜야 하므로 JDK 안에는 JRE와 개발을 위해 필요한 도구(javac, java등)들을 포함한다.


Eclipse(통합 개발 환경)

Java를 기반으로 한 통합 개발 환경. Windows, macOS, 리눅스 중 어디서든 자유롭게 이용 및 수정, 재배포가 가능하다.

 

STS(Spring Tool Suite)

쉽게 말해 스프링에 특화된 이클립스. 잦은 환경구축이 필요할때 sts가 유용. 이클립스에 기본으로 포함안된 플러그인이 미리 세팅되있어서 편하다.(ex. 신규 프로젝트 생성 시 톰캣서버 자동 생성) 스프링 프레임워크 대부분이 XML 설정 파일 관리가 중요한데, STS는 크게 설정하는거 없이 바로 프로젝트 만들어서 개발할 수 있다.


Apache (=웹서버)

정적인 데이터만을 처리하는 웹서버. 

 

 

Tomcat (=WAS 중 하나)

동적인 데이터를 처리, 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너. 웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등이 웹 컨테이너(톰캣)에게 전달된다. 톰캣은 일반 상용 WAS처럼 JavaEE 스펙을 모두 갖추고 있지 않고 JSP와 서블릿을 실행하는 컨테이너와 웹서버만 제공한다.

 

-> 웹을 서비스하기 위해 서버가 필요하다. 

웹서버
: 웹에서 서버 기능을 수행하는 프로그램으로서 HTTP라는 프로토콜을 기반으로 하여 웹 클라이언트(브라우저)로부터의 요청을 서비스하는 기능을 담당한다. 정적인 데이터(HTML이나 이미지, css 등)를 제공한다.
  1. 클라이언트가 요청한 웹 문서를 찾아서 전달하는 기능을 처리한다.
  2. 요청 파일이 없거나 문제가 발생하면 정해진 코드 값으로 응답한다.
  3. 클라이언트로부터의 요청에 대한 기본 사용자 인증을 처리한다.
  4. 서버 프로그램에 대한 요청을 웹 애플리케이션 서버에 수행시키고 그 결과를 응답한다.
    (클라이언트가 GET, POST, DELETE 등등의 메소드를 이용해 요청을 했을때만 그에 대한 결과을 돌려준다.
웹서버로 가장 많이 쓰는 프로그램으로는 Apache재단의 Apache가 있고, Microsoft사의 IIS등이 있다.

컨테이너
컨테이너는 서블릿의 생명 주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 수행하는 프로그램이다.
서블릿 컨테이너는 서블릿 표준 API에서 제공하는 추상 클래스와 인터페이스를 구현한 클래스를 제공하여 기본적인 동작 방식과 API 호환성을 지원한다. 즉, 개발시의 서블릿컨테이너와 다른 컨테이너에서도 수행 및 유지보수가 가능하다. JSP 컨테이너는 JSP를 서블릿으로 변환하는 역할을 한다.



WAS(Web Application Server) : 동적인 처리를 담당하는 서버로, 웹 서버 기능와 컨테이너 기능으로 구성되며 웹 컨테이너, 서블릿 컨테이너라고 부른다. JSP, 서블릿 처리, HTTP요청 수신 및 응답의 기능을 한다. WAS는 웹서버나 컨테이너 기능 외에 엔터프라이즈 환경(=대규모사업)에서 필요한 트랜잭션, 보안, 트래픽 관리, DB 커넥션 풀, 사용자 관리 등의 다양하고 강력한 기능을 제공한다. 국내 기업의 상용 WAS로는 제우스(Jeus)가 있다.


서블릿(Servlet)
자바를 구현하기 위해 존재하는 프로그램.

서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바(Java)로 작성된 프로그램. 서블릿은 최초 요청시 객체가 생성되고 이때 생성된 객체가 재사용되며, 서버가 중지될 때 서블릿 객체는 삭제된다.
http는 비연결성 프로토콜이기 때문에, 다양한 서비스를 개발하는데에 서블릿이 동적인 움직임으로 도움을 준다.


HttpServlet
웹 서버 상에서 작업을 실행하는 서블릿의 경우 HttpServlet을 상속한다.
HttpServlet 클래스가 HTTP 서버(웹 서버) 상에서 수행되는 어플리케이션으로서 필요한 멤버가 구성되어있기 때문이다.

 

 

Apache Tomcat(두가지를 합친 것)

아파치만 사용하면 정적인 웹페이지만 처리 가능하고 톰캣만 사용하면 동적인 웹페이지만 처리가 가능하여 서로 필요한 기능을 가져올 수 없기 때문에, 함께 사용한다. 아파치는 정적인 데이터만 처리하고 JSP 처리는 웹 컨테이너(Web Container)로 보내주어 분산처리 할 수 있다.      포트번호 : 8080

 

기업에서는 web app에서는 톰캣, web에서는 아파치를 사용. 따로 깔아서 연동시킨다.

전방에 정적인 아파치 웹서버를 두고 후방의 동적인 webapp 서비스에 우리는 톰캣(또는 php) 같은 것을 두고 함께 사용한다.


XML( eXtensible Markup Language : 확장될 수 있는 표시 언어 )

데이터들을 쉽게 구조화해서 전달하기 위해 만들어진 문서 형식. 엑셀의 내부구조가 대표적인 XML 형식이다. 메모장으로 열리고 쉽게 수정,열람이 가능하다.

 

*표시 언어의 대표적인 종류인 HTML는 이미 약속한 태그들만 사용하여 데이터를 전달하는데 초점이 맞춰진데 반해, XML은 태그를 사용자 임의로 만들 수 있다는 차이점이 있다. 어떠한 데이터를 설명하기 위해 이름을 임의로 지을 수 있어서 태그가 데이터를 설명하게 만든다. 따라서 추가 데이터가 생기면 태그 안에 내용이 추가된다. 즉 데이터를 전달하는 데에 포커스가 맞춰져 있다. (참고)

 

JSON (JavaScript Object Notation)

인터넷에서 데이터를 저장하거나 전송할 때 그 자료를 표현하는 방법. 자바스크립트의 구문을 따르지만, 자료의 종류에 큰 제한이 없어서 정보를 유연하게 저장, 구조화 할 수 있다. 흔히 키(key)와 값(value)의 쌍으로 묶여있는 배열의 형태를 띈다. (참고)

<차이>

XML : 데이터 값 양쪽으로 태그가 존재한다. 

JSON : 중괄호({})의 형식을 띄고 있으며 키와 값을 : 로 묶고 ,로 나열한다.

 

 

 

AJAX (Asynchronous Javascript And Xml : 비동기식 자바스크립트 + xml)

자바스크립트 라이브러리 중 하나. 자바스크립트를 통해서 서버에 데이터를 요청하는데, 비동기 방식으로 XML 데이터를 주고받는 기법이다. 이를 이용해 브라우저 전체를 새로 고침 하지 않아도 페이지 일부만 데이터를 로드할 수 있다.

단점으로는 히스토리 관리가 되지 않고 보안상에 문제가 있다.

 

* 보통 HTTP프로토콜은 클라이언트쪽에서 요청을 보내고 서버가 응답하여 그것을 받으면 연결이 끊어진다.(1회성)

이러한 응답을 갱신하려면 페이지를 리로드 한다.

 

비동기 방식 : 웹페이지를 리로드 하지 않고 데이터를 불러오는 방식. 불필요한 리소스 낭비를 줄이고 속도를 높일 수 있다.

 

제이슨과 xml은 크로스되는 데이터, 예를들면 구글 맵의 기술이 아닌 좌표같은거. 그런걸로 데이터를 만들어서 바인딩을 하는 것. 디장고도 제이슨을 던질 수는 있음. 


MVC(Model-View-Controller : 무엇을 - 보여주고 - 어떻게할것인가)

개발을 3가지 역할로 나누어 하는 방법론. 사용자의 인터페이스 요소와 개발자의 로직을 분리시켜 서로 영향없이 개발하게 만든다. Model을 설계해서 무엇을 구현할 것인지를 정의하고, 이것을 Controller로 어떻게 처리할 것인지 구현하고 통제한다. View는 컨트롤러의 아래에서 최종 사용자에게 보여지는 UI의 역할을 한다.

 

사용자의 요청에 따라 모델과 뷰의 중간 역할을 하기도 한다.

* View와 Model이 서로 의존성을 띄게 된다. 화면과 데이터가 복잡해지면 Controller에 다수의 View와 Model이 복잡하게 연결되어 MVC가 비대해질 수 있다.

 

CRUD

CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다.

 

 


HTTP(Hyper Text Transfer Protocol)(참고)

인터넷에서 데이터를 주고받을 수 있는 프로토콜. 상태가 없는(stateless) 프로토콜이다. 즉, 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다. 이전 데이터 요청이 다음 데이터 요청과 서로 관련이 없다. 따라서 다수의 요청 처리 및 서버의 부하를 줄일 수 있다.

 

프로토콜(Protocol)(참고)

공통의 데이터 교환 방법 및 순서에 대해 정의한 의사소통 약속, 규약 혹은 규칙 체계. 데이터 교환을 위한 형식을 전부 프로토콜이라고 하지만 그 순서를 입력해놓은 프로그램도 프로토콜이라 부를 수 있다. 구문(송수신 데이터 포맷), 의미(데이터의 각 항목이 가지는 의미), 타이밍(데이터 송수신 동작방식의 정의)으로 구성되어있다.

 

통신 프로토콜(Communication Protocol)

네트워크 상 통신회선을 통해서 컴퓨터, 단말기와 같은 시스템 간에 내부적으로 통신, 접속하기 위해서 정보, 자료, 메시지 등을 주고받는 프로토콜. 대표적으로 인터넷에서 사용하고 있는 TCP/IP가 있다.

 

TCP/IP

컴퓨터와 컴퓨터간에 데이터를 전송 할 수 있도록 하는 장치로 인터넷이라는 거대한 통신망을 통해 원하는 정보(데이터)를 주고 받는 기능을 이용하는 응용 프로토콜

 

-> 원격지의 상대방에게 정보를 전송하기 위해서는 데이터의 전기적인 신호로의 변환 및 통신망으로의 전달이 필요하고 전달된 전기적 신호는 다시 원래 정보로 돌아오도록 만드는 과정을 거친다. 이러한 과정 중 방해가 있어도 그 정보를 최대한 보존할 수 있게끔 하기 위해 프로토콜이 필요하다.

 

Request & Response

요청과 응답. 클라이언트(Client)는 요청을 보내는 쪽이며 보통 웹 관점에서 브라우저를 뜻한다. 서버(Server)는 요청을 받아 응답하는 쪽이며, 웹 관점에서 데이터를 보내주는 원격지의 컴퓨터를 의미한다. 데이터를 주고 받기 위해서는 클라이언트와 서버가 요청을 보내고 응답을 받아야 한다.

 

▽종류

Request Method (요청의 종류) Response Status Code (상태 코드)
GET : 자료를 요청 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
POST : 자료의 생성을 요청 2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
PUT : 자료의 수정을 요청 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
DELETE : 자료의 삭제를 요청 4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.

 

요청과 응답

 

 

HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.

이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.

 

Session

세션(session)은 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.

세션은 사용자의 정보를 유지하기 위해 javax.servlet.http 패키지의 HttpSession 인터페이스를 구현해서 사용한다.

사용자의 정보 유지를 위해서는 쿠키보다는 세션을 사용한 웹 브라우저와 웹 서버의 상태 유지가 훨씬 안정적이고, 보안상의 문제도 해결할 수 있다.

 

Coockie

쿠키(coockie)는 웹 브라우저에 사용자의 상태를 유지하기 위한 정보를 저장한다.

쿠키는 사용자의 상태 유지를 위한 정보를 웹 브라우저에 저장해서 웹 서버가 쿠키 정보를 읽어서 사용한다.

웹 브라우저에 저장된 쿠키는 웹 서버에서 열어볼 수 있다는 점에서 보안상 문제가 발생할 수 있다.

 


forward와 redirect 구분하기(참고)

############# 중요!!!!면접!!!!! ##################

JSP 환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능.

-> 한 서블릿 내에서만 생명력을 가진다.

 

 

사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보자.

여기서 고객은 클라이언트이고, 123번은 URL이며, 상담원은 서버가 된다.

 

첫번째 사례(redirect)

1) 고객이 고객센터로 상담원에게 123번으로 전화를 건다.

2) 상담원은 고객에게 다음과 같이 이야기한다. "고객님 해당 문의사항은 124번으로 다시 문의 해주시겠어요?"

3) 고객은 다시 124번으로 문의해서 일을 처리한다.

 

두번째 사례(forward)

1) 고객이 고객센터로 상담원에게 123번으로 전화를 건다.

2) 상담원은 해당 문의사항에 대해 잘 알지 못해서 옆의 다른 상담원에게 해당 문의사항에 답을 얻는다.

3) 상담원은 고객에게 문의사항을 처리해준다.

 

 

forward redirect
web container 차원에서의 페이지 이동, 실제로 웹 브라우저는 다른 페이지로 이동했는지 알 수 없다.(두번째 사례의 경우, 고객은 상담원이 누구한테 물어봤는지 알 수 없다.) web container는 redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라는 명령을 내린다.(첫번째 사례의 경우, 고객은 전화를 끊고 124번으로 다시 전화를 건다)
웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL정보는 볼수가 없다.(두번째 사례의 경우, 고객은 123번으로만 전화했기 때문에 알 수 없다.) 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다.
동일한 web container에 있는 페이지로만 이동이 가능하다. 다른 web container에 있는 주소로 이동이 가능하다.(123 -> 124)
현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.(고객이 요청한 문의사항은 고객이 전화를 끊을 때까지 유효하다.) 새로운 페이지에서는 request, response객체가 새롭게 생성된다.(123번에서 고객이 요청했던 문의사항은 사라지고 124번으로 다시 걸어서 요청한 문의사항을 다시 말해야한다.)
다음 이동한 URL로 요청정보를 그대로 전달한다. 말 그대로 forward(건네주기)하는 것이다. 그렇기 때문에 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효하다. 최초 요청을 받은 URL1에서 클라이언트에 redirect할 URL2를 리턴하고, 클라이언트에게 전혀 새로운 요청을 생성하여 URL2에 다시 요청을 보낸다. 따라서 처음 보냈던 최초의 요청정보는 더이상 유효하지 않게된다.
[차이점 요약]
첫째, URL의 변화여부(변화 O -> redirect, 변화 X -> forward)

둘째, 객체의 재사용여부(재사용 O -> forward, 재사용 X -> redirect)

 



servletconfig

서블릿 초기화 파라미터.특정 Servlet이 생성될 때 초기에 필요한 데이터들이 있다. ex) 특정 경로 및 아이디 정보 등.

이러한 데이터를 초기화 파라미터라고 하며, web.xml 에 기술하고 Servlet 파일에서는 ServletConfig 클래스를 이용해서 접근(사용)한다.

 

ServletContext (데이터 공유)

여러 Servlet에서 특정 데이터를 공유해야 할 경우 context paramter을 이용해서 web.xml에 데이터를 기술하고, Servlet에서 공유하면서 사용할 수 있다.

[web.xml] > <context-param> </context-param> 안에 값을 넣으면 같은 폴더 내에서 접근이 가능해진다.

 

ServletContextListener

웹 애플리케이션 생명주기(LifeCycle)을 감시하는 리스너(Listener)가 있다.

바로 ServletContextListener이다. 리스너의 해당 메소드가 웹 어플리케이션의 시작과 종료 시 호출 된다.

 

pageContext

pageContext는 JSP 페이지에 대해 1:1로 연결된 객체로 JSP 페이지당 하나의 pageContext 객체가 생성됩니다. 따라서 같은 JSP 페이지 내에서는 서로 값을 공유할 수 있으며, 주요 기능은 다른 기본객체들을 구할때 사용하거나 페이지 흐름을 제어할 때 사용됩니다. 

 

스코프(Scope)

객체 범위. 변수 또는 함수의 유효범위를 의미한다.

지역변수는 함수 스코프에서만 사용 가능. 전역변수는 자바스크립트 어디에서든 사용 가능.

 

1. 객체 범위(scope) 종류

웹 애플리케이션에는 4개의 객체 범위가 존재합니다.

  1. page 영역
    • 한 번의 클라이언트 요청이 오면, 하나의 JSP 페이지가 응답됩니다.
    • page 영역은 이 때 하나의 JSP 페이지 내에서만 객체를 공유하는 영역을 의미합니다. ( JSP only )
      • JSP 파일에는 pageContext가 내장되어 있으며, 이 객체는 page 영역에서만 유효합니다.
      • JSP 파일에 <% %> 안에 변수를 사용하면 이 변수는 해당 JSP 파일 내에서만 유효한데, page 스코프에 정의된 객체이기 때문입니다.
  2. request 영역
    • 요청을 받아서 응답하기까지 객체가 유효한 영역입니다.
    • Servlet에서 forward 또는 include를 사용하면, request 요청 객체가 공유되어서 request 영역이 됩니다.
    • 지금까지 Servlet에서 JSP로 객체를 보낼 때 사용했던 방법입니다.
      • Servlet에서는 reqeust.setAttribute("이름", 객체);  로 전달하였고,
      • JSP에서는 Obejct ob j =  request.getAttribute("이름"); 으로 받았습니다.
      • 이 때 사용했던 request 객체가 request 영역입니다.
  3. session 영역
    • 하나의 브라우저 당 1개의 session 객체가 생성됩니다.
    • 즉, 같은 브라우저 내에서 요청되는 페이지들은 같은 객체를 공유하게 되는데, 이를 세션 영역이라고 합니다.
    • 세션이 종료되면 객체는 반환됩니다.
    • requset.getSession() 메서드를 호출하여 세션 영역의 객체를 얻을 수 있습니다.
  4. application 영역
    • 하나의 애플리케이션 당 1개의 application 객체가 생성됩니다.
    • 즉, 같은 애플리케이션 내에서 요청되는 페이지들은 같은 객체를 공유하게 되는데 이를 애플리케이션 영역이라고 합니다.
    • 애플리케이션이 종료되면 객체는 반환됩니다.
    • request.getServletContext() 메서드를 호출하여, 애플리케이션 영역의 객체를 얻을 수 있습니다.

 

이로 미루어 보아 scope 범위는 page < request < session < application 순이라는 것을 알 수 있습니다. 

 

 

반응형
LIST

댓글