본문 바로가기

용어 요약

1. 웹 개발에 대한 전반적인 용어

1. DNS(Domain Name System) : 도메인 주소를 컴퓨터가 인식할 수 잇는 '123.123.123.1' 등과 같은 IP(인터넷 프로토콜) 주소로 변환해 주는 서버

2. 절차지향과 객체지향의 차이

 1) 절차지향 : 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법

 2)객체지향 :  실제 세계를 모델링하여 소프트웨어를 개발하는 방법

개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하기 때문에

하드웨어의 처리량을 획시적으로 줄여줌.

 3) 절차지향언어는 데이터와 데이터를 변화시키는 함수가 불리되어 데이터의 구조가 변경되면 그 데이터를 참조하는 모든 함수들을 수정해야하는 단점이 있다.

객체지향언어는 객체안에 데이터와 함수가 존재 그 데이터에 문제가 생긴다고해도 객체만 수정하면 되니깐 절차지향언어의 단점을 극복.



3. 캡슐화란: 관련있는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것이다.

콘택600을 예를 들어 캡슐화를 설명하겠다.

콘택600이 복용자에게 제공되는 기능은 "재채기, 콧물, 코막힘"의 완화이다. 그런이 이러한 콘택600이 재채기용 캡슐, 콧물용 캡슐, 코막힘용 캡슐로

나눠져있다면 코감기 걸렸을 때, 총 세알의 캡슐을 복용해야한다면 이는 캡슐화가 성립되지 않는 상황이다. 

그런데콘택600은 '코감기의 강력한 처방'이라는 하나의 목적하에 둘 이상의 기능이 모여서 하나의 목적을 달성하고 있다. 다시 말해서 캡슐화가 되어있는

상황이다. 만약 캡슐화가 무너지면 클래스 상호관계도 복잡해지며 프로그램 전체의 복잡도가 높아진다.


4. 정보은닉 : 정보은닉이란 외부에 의해 특정 객체의 데이터의 손상과 오용을 막는 것이며

getter와 setter를 이용하여 데이터의 오용을 막아준다.


5. 서블릿과 서블릿 컨테이너

 1) 서블릿이란? 

 - 클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바프로그램.

 2) 서블릿 컨테이너란?

 - 서블릿을 관리해주는 컨테이너로서 서블릿의 생명주기를 관리하고 요청에 따른 스레드를 생성해준다.

  또, 클라이언트의 Request를 받아주고 Response를 보낼 수 있게 웹서버와 소켓을 만들어서 통신을 해준다.


 - 통신 지원 : 서블릿과 웹서버가 통신할 수 잇는 손쉬운 방법을 제공한다. 

우리가 통신을 한다고 생각할 떄 소켓을 만들고, 특정 포트를 리스닝하고, 연결 요청이 들어오면 스트림을 생성해서 요청을 받는다고 알고 있는데

이 과정을 서블릿 컨테이너가 대신 해주는 것이다. 서블릿 컨테이너는 이런 통신과정을 API로 제공하고 있기 떄문에 우리가 쉽게 사용할 수 잇다.

 - 생명주기 관리 : 서블릿 컨테이너가 기동되는 순간 서블릿 클래스를 로딩해서 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한

서블릿 메서드를 찾아서 호출한다.

만약 서블릿의 생명이 다하는 순간 가비지 컬렉션을 진행한다.

 - 멀티스레딩 관리 : 서블릿 컨텐이너는 해당 서블릿의 요청이 들어오면 스레드를 생성해서 작업을 수행한다. 

즉 동시에 여러 요청이 들어온다면 멀티스레딩 환경으로 동시 다발적인 작업을 한다.


6. 웹서버와 WAS의 차이

 - 웹서버 : Web Client(웹 브라우저)에게 제공하는 컨텐츠를 제공하는 서버.

정적인 HTML 혹은 JPEG나 GIF같은 이미지를 HTTP프로토콜을 통해 웹브라우저로 제공

 - WAS : Server 단에서 어플리케이션을 동작할 수 있도록 지원.

일반적으로 컨테이너라는 용어로 사용됨.

Servlet, JSP, ASP, PHP등의 프로그램으로 사용됨.


7. JSP : 서블릿의 복잡한 규칙을 대신하기 위해 나온것이 JSP이다. JSP문서를 실행시키면 이문서가 자동으로 서블릿으로 컴파일되어 실행하게 되낟.

 1) JSP와 서블릿의 차이 : 

-  서블릿 : 톰캣 위에서 동작하는 JAVA 프로그램

초기화된 서블릿이 클라이언트의 요청이 잇을 때 마다 Thread를 생성해서 병렬적으로 service를 수행함.

WAS를 통해 컴파일 된 후 메모리에 적재되어 클라이어트의 HTTP GET POST등의 요청을 처리하는 자바프로그램

단점은 HTML 코드를 넣기가 굉장히 불편하다.

 2) JSP  : HTML을 코딩하기 너무 불편해서, HTML 내부에 JAVA 코드를 삽입하는 형식의 JSP

하지만 로직과 디자인이 한 파일내에 섞여 있어 유지보수가 어렵다.

톰캣이 Servlet으로 컴파일하여 사용한다.




8. 스프링 컨테이너 : 

 1) IoC(DI)Inversion of control과 Dependency Injection의 줄임말

 - IoC(제어의 역전) : IoC(대신해 줌), DI(미리 찜 해 놓음)

 - IoC는 컨테이너이다. 컨테이너는 당신이 작성한 코드 컨트롤(객체의 생성과 소멸)을 대신 해준다.

즉, 그 동안 개발자들이 담당해왔던 인스턴스에 대한 직접적인 Control을 컨테이너란 놈이 빼앗아 감으로서 인스턴스에 대한 Control을 담당하는 주체가 바뀌었다.라고 말할 수 있다.

(Servlet에 대한 모든 Control 권한은 Servlet 컨테이너가 가지있다. 그렇다면 Servlet 컨테이너도 IoC 컨테이너의 일종이다.)

그렇다면 Spring 프레임워크가 IoC 컨테이너 기능을 가지고 있다는 것은 Spring 프레임워크도 인스턴스에 대한 Control 기능을 가지고 있다는 것이다.

EJB컨테이너는 EJB의 생명주기를, Servlet 컨테이너는 Servlet의 생명주기를 Spring 컨테이너는 POJO(Plain Old JAVA Object)에 대한 생명주기르 ㄹ관리한다.

 - 주입방식은 클래스 형태와 XML 형태 2가지가 있다.

IoC/DI의 개념을 요약하자면 정신 나가듯 언제 사용될지도 모르는 코드를 쳐대면서(IoC)동시에 사용하고 있는 코드가 뭔지도 모르면서 일단 갖다 쓰는 (DI) 획기적이고

진보적인 프로그래밍 작성방식

 2) DI(의존관계 주입) 객체를 직접 생성하는 것이 아닌 외부의 조립기를 이용해 생성하는 것


9. AOP(Aspect-Oriented programming)란 :

 - 공통의 관심사항을 적용해서 발생하는 의존관계의 복잡성과 코드 중복을 해소해 주는 프로그래밍 기법

 - Primary(Core) Concern : 비즈니스 로직을 구현한 부분

 - Cross-Cutting Concern : 보안, 인증, 로그 등과 같은 부가적인 기능으로서 시스템 전반에 산재되어 사용하는 기능


10. OCP(Open-Close Principle)란 : 

 - "확장에는 열려있고 변경에는 닫히게 하라" 

 1) 확장의 조건(1)  SRP(Single Responsibility Principle) 단일책임원칙

 - 우선 Open-Close Principle 중 Open, 즉 "확장에는 열려 있어야 한다"는 말의 참의미는 무엇일까?

 - 확장은 대개 상속(extends)과 구현(Implements)을 통해서만 이루어지게 되있으므로 여기서 "확장에 열려 있다"는 말은

 곧 해당라이브러리를 다른 개발자가 의도대록 확장하고자 할 때, 별탈없이 상속과 구현만으로도 기능이 확장되는 형태의 코드라는 뜻.

이러한 확장과 구현에 자유로운 라이브러리를 작성하기 위해서는 단일 책임 원칙(Single Responsibility Principle)와 낮은 결합도를 지키면 된다.

단일 책임 원칙(Single Responsibility Principle)이란 하나의 클래스, 메서드, 컴포넌트 등은 오로지 하나의 책임(기능)만을 가져야 한다. 

만약 하나의 컴포넌트가 하나 이상의 책임을 동시에 갖고 있을 경우 처음에는 간편하게 코드를 작성해놓은 듯 보이지만 시간이 지날 수록 코드의 재생용이 껄끄러워져 

불합리한 컴포넌트로 변모할 가능성이 높다.

이러한 컴포넌트들은 훗날 확장이 필요할 경우, 최초의 책임들 모두를 계속 유지시키기가 어려워지게 되므로 결국 해당 컴포넌트와 연관관계를 갖고 있는 다른 컴포넌트들까지

모두 수정해줘야하는 불편함이 생긴다.

- SRP를 고려하지 않는 개발방식 :

 * 매번 매서드를 작성할 때마다 최대한 많은 기능을 한번에 집어넣어 상황을 원큐에 해결하려고만 한다. - 그리고 매우 흡족해하며 엄청나게 획기적인 기능을 만들었노라 확신한다.

 * 해당 메서드를 다른 컴포넌트에서 사용할 때 불필요한 기능이 있긴 하지만 별 상관 ㅇ벗으므로 그냥 쓴다. - 이때부터 조금씩 문제가 뒤틀리기 시작한다.

 * 후에 해당 메서드를 의존하는 다른 메서드들이 불필요한 기능들 때문에 기괴한 형태로 만들어 지곤한다.

  - 예를 들어 해당 메서드가 실행되면 특정 프로퍼티 값이 변경됨으로서 괜한 다른 메서드들까지 영향을 받는 경우들.. 이런 상황을 해결하기 위해 부득이하게 현재 의존중인 메서드에 

프로퍼티를 원래 상태로 복구시키는 기능까지 추가하게 되곤 한다. 문제는 현재 작성중인 메서드가 이런 프로퍼티값과 일체 상관없다는 것뿐이다.!

 * 결국 해당 메서드를 수정해야만 하는 순간이 오고야 말았지만 너무 광법위하게 사용되고 있으므로 차라리 클라이언트를 끝까지 설득해 현재 구현하려는 기능을 포기하게끔 한다.

- 이건 정말로 최악의 상황이다. 최초에 구현한 컴포넌트에 너무 많은 기능을 부여한 탓에 이를 수정하면 아예 모든 코드를 송두리째 바꿔야만 하는 상황이 오고만 것이다. 
돈 몇푼에 이런 힘겨운 작업을 하느니 머리속의 온갖 전문용어들을 짜내어 클라이언트가 기능을 포기하게끔 하는게 이득이다.

 

2) 확장의 조건 (2) - 인터페이스의 활용

 - 개인적으로 초보 개발자가 중급 재발자로 올라가는 기준을 하나 꼽자면 바로 인터페이스의 중요성을 깨달은 순간이 아닐가 싶다. 인터페이스를 적극 활요하는 개발자들의 장점은 

무엇보다 확장에 고민하지 않는다는 점이며 둘째로 코드의 실수가 없고 안정감있게 기능을 구현해낸다는 것이다.

굳이 스프링을 이용하지 않더라 하더라도 개발자가 클래스를 만들기 이전에 구현하고자 하는 클래스의 설계정보를 담고 있는 인터페이스를 사전에 구현해 놓는다면

외부에서 해당 인터페이스만으로도 객체의 정보에 접근가능해지기 때문에 결합도가 굉장히 낮아지며 해당 인터페이스를 구현함으로 메서드의 구현을 보장받았기 때문에

개발자가 코드 작성 시에 혹여나 기능을 빠뜨리는 상화 또한 사전에 예방해준다.


3) 변경에는 닫혀있어야 한다.

사용 중인 라이브러리를 튜닝하기 위해 상속이나 구현을 통하지 않고 소스 자체를 직접 수정하고 있다면 이것은 '변경에 닫히게 하라'는 원칙을 무시한 것이다.

변경에 닫혀있다는 것은 해당 라이브러리가 기능 변경 시에 코드 자체를 직접적으로 수정해야만 한다거나 상속이나 구현을 통해 변경하기에 매우까다로운 상태라면 이 또한

'변경에 닫히게 하라'는 원칙을 무시한 것이다. 변경에 닫혀있다는 것은 해당 라이브러리를 사용하는 사용자가 기능의 변경이 필요한 경우 가급적 소스 자체에 손대지 않고 상속과

구현만으로 확장만을 이용해 원하는 기능을 구현해낸다는 것이다.

언뜻보기엔 매우 까다로운 조건일 수도 있겠지만 어디까지나 SRP와 인터페이스를 적극 활용해 개발했다면 해당라이브러리는 항상확장이 용이하며 변경이 불필요한 코드일 것이다.



AngularJS란 무엇인가?

 - AngularJS는 웹 어플리케이션 개발에 필요한 여러 기능을 제공하는 오픈 소스 자바스크립트 프레임워크이다.

 - AngularJS의 데이터 모델은 단순 자바스크립트 객체(Plain Old JavaScript Object)다. 

여러 자바스크립트 MVC 프레임워크에서는 모델을 제공하기 위해 프레임워크의 기본 모델 클래스를 상속하여 모델 클래스를 작성하게 한다.

하지만 AngularJS에서는 별도의 모델 클래스가 없으며 그저 단순한 자바스크립트 객체에 불과하다.

더 놀라운 것은 단순한 자바스크립트 객체인 모델의 데이터와 뷰 데이터가 양방향 데이터 바인딩이 되는 것이다.

- 의존관계 주입(Dependency Injection)을 이용해 웹 어플리케이션 자바스크립트 개발을 할 수 잇다. 

AngularJS는 서비스 프로바이더를 이용해 특정서비스 컴포넌트를 구현하고 해당 서비스 컴포넌트가 사용하는 다른 서비스 컴포넌트를 직접 잠조하는 것이 아니라

의존관계 주입을 이용해 사용하게 한다.

 - AngularJS에서 MVC 구조를 제공하므로 별도로 MVC구조를 위한 코드를 작성하지 않아도 된다. 


9. 프레임워크란? 소프트웨어 뼈대 구조

-지원 프로그램, 라이브러리, 언어, 다른 소프트웨어 구성요소들을 엮어주는 소프트웨어 등을 포함

10. 플랫폼 : 소프트웨어 실행 환경(소프트웨어가 실행되는 환경)

 - 일반적으로 O/S는 모두 플랫폼이다. Windows는 위도우즈 프로그래만을 실행시킬 수 잇는 플랫폼이고, 리눅스는 리눅스 프로그램만을 실행시킬 수 잇느 ㄴ플랫폼이다.

자바 프로그램은 O/S에 대한 종속성은 거의 없고 자바 런타임 환경없이는 실행되지 않으므로 자바 런타임 환경을 주요 플랫폼으로서 필요로 한다.

이들 각 계층의 각 플랫폼은 자신만의 실행 엔진과 API 및 개발환경을 제공한다.


11. JAVA Collection : 모든 콜렉션의 상위 인터페이스로써 콜렉션들이 갖고 있는 핵심 매소드를 선언한다.

1) List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.(ArrayList, LinkedList Stack, Vector)

2) Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.(HashSet, TreeSet)

3) Map : 키와 값의 쌍으로 이루어진 데이터의 집합, 순서는 유지되지 않으며 키는 중복을 허용하지 않고 값은 중복을 허용한다.(HashMap, TreeMap, HashTable, Properties)


12. Serialization : 


13. Generic : 명시적으로 타입을 지정할 때 사용하는 것.


13. 쓰레드란? 하나의 프로그램내에서 둘 이상의 프로그램 흐름을 만들어 내기 위해서 디자인된 것.

프로세스와 달리 쓰레드간에는 공유하는 상태 정보들이 있다. 이것이 쓰레드의 컨텍스트 스위칭을 빠르게 하는 요인이 된다.

*쓰레드는 하나의 프로그램 내에서 여러개의 실행흐름을 두기 위한 모델이다.

*쓰레드는 프로세스처럼 완벽히 독립적인 구조가 아니다 쓰레드들 사이에는 공유하는 요소들이 있다.

*쓰레드는 공유하는 요소가 있는 관계로 컨텍스트 스위칭에 걸리는 시간이 프로세스보다 짧다.

*공유하는 요소는 Code영역, Data영역, Heap영역이 있고 스텍영역은 독립적으로 할당해 준다.

14. JDBC란?

15. Interface와 Abstract : http://silverktk.tistory.com/134

 1) 추상 클래스는 한개이상의 추상 메소드를 가지고 있는 클래스.

추상 클래스는 추상 메소드가 구현되어 있지 않아 인스턴스의 생성이 불가능하며, 해당 클래스를 extends하여 추상메소드를 구현해야만 사용.

추상메소드란 : 메소드의 선언부만 있고 본문이 없는 것. 구현은 자식클래스에서 하는 방법

일반 클래스의 경우상속받은 자식클래스가 반드시 부모 클래스의 메소드를 오버라이딩할 필요는 없지만 추상클래스를 상속받은 자식클래스는 반드시 추상 메소드를 

오버라이딩하여야 하기에 메소드를 강제로 구현하게 할때 많이 쓰임


 2) 인터페이스는 추상메소드로 이루어진 클래스이다.

인터페이스를 쓰는 가장 큰 이유는 다중상속을 지원하지 않는 자바에서 다중상속의 장점을 가져오기 위해서 이다.

다중상속이 가지는 단점은 배제하고 오직 장점만을 취하기 위해 인터페이스를 쓴다.


16. Object 클래스 : 

boolean equals(Object obj), String toString(), 

protected Object clone(), protected void finalize(), void notify(), void wait(long timeout, int nanos)

Class getClass(), int hashCode(), void notifyAll(), void wait(), void wait(long timeout), 


M2M : GPS나 CDMA등 무선기술을 이용해 장비를 제어하고 정보교환을 하는것
라우터란? 서로다른 네트워크 대역을 연결해주는 장치로써 3계층에 해당이 되며 가장 적절한 통신통로를 이용하여 다른 통신망으로 전송하는 역할