2018~2019/작업파일

컴퓨터기초지식 정리

전기도둑 2019. 1. 4. 21:53

-JAVA-

1) 객체지향 프로그래밍(OOP)

- 어떤 데이터와 그 데이터에 관련되는 동작을 변수와 메소드로 정의하여 이를 객체라 칭하고 이러한 객체들의 상호작용을 통해 프로그램이 동작하는 것


2) JVM

- 자바를 OS에 상관없이 동작하도록 해주며, 가비지 컬렉터를 이용하여 메모리를 자동으로 관리해줌


3) 가비지 컬렉터

- 자바에서는 사용자가 직접 메모리를 관리하지 않고 가비지 컬렉션을 통해 자동으로 메모리를 관리해줌

- 자바 메모리영역은 클래스, 스택, 힙영역으로 구성되어 있음

- 그 중에서 new()와 같은 동적 할당으로 객체가 생기면 힙 영역에 저장이 되는데 가비지 컬렉터는 힙 영역을 관리함

- 객체가 생성되고 사용된 다음 더 이상 사용되지 않으면 가비지 컬렉터가 모니터링 하고 있다가 메모리를 해제시킴

- Young Generation : 자바 객체가 생성되자마자 또는 생성된 지 얼마 안 된 객체들이 저장되는 영역 (Minor GC)

- Old Generation : Young Generation에서 저장된 객체들이 우선순위가 낮아지면 이동됨 (Major GC)

- Permanent Generation : 클래스 로더에 의해 로드되는 클래스, 메소드 등의 메타 정보를 저장하는 영역


4. 클래스와 객체

1) 클래스

- 어떤 데이터와 그에 대한 동작을 변수와 메소드로 정의한 것

- 아직 메모리가 할당되지 않은 상태


2) 객체

- 클래스를 바탕으로 실제 메모리가 할당된 상태 


5. 자바의 메모리영역

1) 클래스 영역

- static 변수, 전역변수, 클래스 정보 등이 저장됨


2) 스택 영역

- 지역변수와 매개변수, 함수의 호출, 복귀 주소 등 후입선출로 관리됨 


3) 힙 영역

- new와 같은 생성자를 통해 동적 할당된 객체들이 저장되며, GC에 의해 메모리가 관리됨


6. 추상클래스와 인터페이스

1) 추상클래스

- 추상메소드를 한 개 이상 가진 클래스를 추상클래스라고 하며, abstact를 사용함

- 하위 클래스를 제어하기 위해 사용 (오버라이딩을 강제함)


2) 인터페이스

- 모든 메소드가 추상 메소드이며 Implements 키워드를 사용

- 상속 관계가 없는 클래스간에 서로 공통되는 로직을 구현하여 쓸 수 있음

- 다중 상속이 가능하다


7. 오버로딩과 오버라이딩

1) 오버로딩

- 같은 이름의 메소드를 여러 개 정의하는 것 단 매개변수의 타입이나 개수가 달라야 함


2) 오버라이딩

- 부모클래스에서 상속받은 메소드를 자식클래스에서 재정의 하는 것


8. Spring DI

- 말 그대로 의존성 주입하는 것

- 객체를 직접 생성하는 것이 아니라 외부 IoC컨테이너에서 생성된 객체를 주입 시켜 setter 혹은 생성자를 통해 사용함


9. Spring AOP

- 핵심 비지니스 로직과 트랜잭션이나 보안, 로깅과 같은 공통 모듈을 분리하는 개발 방법

- Aspect : 공통모듈

- Advice : 공통 모듈을 적용할 조건

- pointcut : 공통 모듈을 어떤 조인트포인트에 어디를 통과할건지 위치를 지정하는 역할


10. 자바의 콜렉션 인터페이스


* Collection

- 순서나 집합적인 저장공간


1) List

- 순서가 있으며 데이터의 중복을 허용한다

- 인덱스를 사용하여 특정 위치에 요소를 삽입하거나 접근가능

- ArrayList : 조회가 빠르고 크기를 마음대로 조절할 수 있으며 삽입 삭제시에는 느림

- Vector : 동기화가 걸려 있어 여러 쓰레드에서 동시 접근 가능

- LinkedList : 양방향 포인터 구조로 조회는 느리지만 데이터의 삽입, 삭제에 유리함


2) Set

- 순서가 보장되는 데이터의 집합이며, 데이터의 중복을 허용하지 않는다

- HashSet : 가장 빠름

- LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능

- TreeSet : 순서가 있는 HashSet으로 이진 트리 구조로 만들어짐


3) Map

- 키와 값의 쌍으로 이루어진 데이터의 집합

- 순서가 유지되지 않고, 키는 중복을 허용하지 않지만, 값은 중복을 허용한다

- HashMap : HashTable을 사용한 클래스, 키와 값으로 null 허용

HashTable : HashMap보다 느리지만 동기화 지원, 키와 값으로 null 허용하지 않음



-자료구조-


1. 스택과 큐

1) 스택

- 후입선출

- push를 통해 데이터를 입력하고 pop을 통해 출력함

- 함수의 호출과 복귀 순서에 사용


2) 큐

- 선입선출

- enqueue를 통해 데이터를 입력하고 dequeue를 통해 데이터를 출력

- 대기열과 같은 동작에 사용

- 선형큐는 메모리 재사용이 불가능하기 때문에 이를 보완하기 위해 원형 큐를 사용함


* 우선순위 큐 : 데이터가 들어온 순서에 상관없이 우선순위가 높은 데이터부터 출력됨


2. 트리와 그래프


1) 트리

- 한 개의 루트 노드만 존재하며, 부모노드와 자식노드로 구성

- 간선은 항상 정점의 개수-1 만큼을 가짐

- 방향이 없으며 계층 모델


2) 그래프

- 루트 노드나 부모-자식 관계가 없음

- 방향이 있으며 네트워크 모델


-OS-


1. LRU

- 페이지 교체 알고리즘 중 하나로서, 가장 최근에 사용되지 않은 페이지를 먼저 내보내는 알고리즘


2. 허프만 코드

- 문자열의 빈도와 같이 통계적 정보를 이용하여 압축하는 방법

- 예를 들어 AAABBC라는 문자열이 A는 3 B는 2 C는 1이라는 노드 값을 갖게 되고, 값이 낮은 순서부터 그 값을 합쳐 부모노드를 만들며 트리를 생성함

- 트리가 다 만들어지면 왼쪽 엣지는 0 오른쪽 엣지는 1을 부여하여 A는 0, B는 10, C는 11이 된다.


3. 프로세스와 쓰레드

1) 프로세스

- 운영체제에서 실행되는 하나의 프로그램

- 독자적인 메모리 공간을 갖기 때문에 서로 자원을 공유하지 않는다

- 메모리를 공유하기 위해서는 IPC와 같은 방식이 필요함


2) 쓰레드

- 프로세스 내에서 동시에 실행되는 독립적인 실행 단위

- 적은 메모리를 사용하며 정보 공유가 쉽다

- 독자적인 Stack 메모리를 갖고 그 외의 자원은 프로세스 내에서 공유하게 됨


4. 뮤텍스와 세마포어

- 임계영역에 대한 상호배제 방법이다.


1) 뮤텍스

- 동기화 대상이 오직 한 개

- 임계 영역을 가진 쓰레드들의 러닝 타임이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술

- 공유 리소스에 대한 접근을 조율하기 위해 locking과 unlocking을 사용함

- 뮤텍스를 소유한 쓰레드에게 뮤텍스를 해제할 수 있는 소유권이 있음


2) 세마포어

- 정수 변수를 이용한 P연산과 V연산을 이용하여 임계영역에 접근하는 프로세스나 쓰레드를 제한하는 방법

- 동기화 대상이 하나 이상일 때 사용

- 세마포어를 소유한 쓰레드에게 해제할 수 있는 소유권이 없음 => 소유하지 않아도 해제 시킬 수 있음


3) 모니터

- 프로세스나 쓰레드를 동기화하는 방법

- 한 번에 하나의 프로세스만 모니터에서 활동하도록 함

- 모니터는 프로시져를 호출하여 자동으로 해줌


5. 데드락


-네트워크-


1. OSI 7계층

1) 물리 계층

- 전기적인 신호로 변환 해서 주고 받는 기능으로 통신 케이블 등이 있음.

2) 데이터 링크 계층

- MAC주소를 가지고 통신하며 에러검출, 재전송, 흐름제어

3) 네트워크 계층

- 주소부여 및 라우팅

4) 전송 계층

- TCP프로토콜을 이용하여 패킷 생성 및 전달

5) 세션 계층

- 세션 생성 및 삭제 등 세션에 관한 동작

6) 표현 계층

- 암호화, 복호화

7) 응용 계층

- HTTP와 같은 프로토콜이 있으며 응용 서비스를 수행


2. L4를 이용한 로드밸런싱

1) 라운드로빈

- 세션을 순차적으로 맺어주는 방식

- 장애발생 여부 확인이 어렵고 균등 분할이 어려움


2) Hash

- 특정 클라이언트는 특정 서버로만 연결하는 방식

- 경로가 보장되지만 공평하게 분산되지 않을 수 있음


*로드밸런싱

- 여러 대의 서버가 일을 나누어 처리할 수 있도록 함

- L4 스위치가 IP와 포트번호를 참고해 각 서버에 작업을 분산시킴

- 로드 밸런서 자체의 비용이 높고 불필요한 복잡함을 증가 시킬 수 있음


3. TCP와 UDP의 차이점

1) TCP

- 연결형 서비스

- 신뢰성이 높음 : 흐름제어와 혼잡제어를 통해 순서 보장

- 전송속도가 느림

- 3-way handshake를 통해 연결하고 4-way hacnshake를 통해 연결을 해제함


*흐름제어

- 송신측과 수신측의 데이터속도 처리의 차이를 해결하기 위한 방법

- 송신측이 수신측보다 빠른 경우, 송신측의 데이터 전송을 강제로 줄임

- Stop and Wait(매번 확인 응답을 받음), Sliding Window(수신측에서 받을 수 있는 윈도우 크기 지정)


*혼잡제어

- 송신측의 데이터 전달과 네트워크의 데이터 속도 차이를 해결하기 위한 방법

- 라우터에 데이터가 몰릴 경우 데이터를 모두 처리할 수 없게 되는 데 이때 송신측의 데이터 전송 속도를 강제로 줄임 

- Slow Start, 빠른 재전송, 빠른 회복


2) UDP

- 비연결형 서비스

- 신뢰성이 낮음 : 순서 보장이 되지 않음

- 전송속도가 빠름


4. 세션과 쿠키의 차이점

1) 세션

- 서버에 저장

- 쿠키에 비해 보안성이 좋음

- 브라우저가 종료되면 무조건 삭제됨


2) 쿠키

- 클라이언트에 저장

- 보안이 낮음

- 브라우저를 종료해도 만료시간까지 저장됨


*사용하는이유

- HTTP는 비연결지향적이고 상태 정보를 따로 저장하지 않기 때문에 세션과 쿠키를 사용하여 상태 정보를 저장하고 연결을 지속함


5. GET과 POST

1) GET

- URL뒤에 이름과 값이 결합된 스트링 형태로 전달

- 주로 클라이언트에서 서버에 데이터를 요청할 때 사용

- 주소창에 쿼리 스트링이 그대로 보여지므로 보안이 낮지만 속도가 빠르다

- 길이 제한이 있다.


2) POST

- HTTP BODY안에 넣어 전달

- 주로 클라이언트에서 서버에 데이터를 전달할 때 사용

- 전달되는 데이터가 보이지 않으므로 보안이 높으며 속도가 느리다


6. RESTful

- 웹의 장점을 최대한 활용할 수 있는 아키텍처

- 리소스(URL), 메소드(GET, PUT, POST, DELETE), 메시지로 구성되어 있음

- 장점 : 사용이 쉬우며 클라이언트와 서버가 명확히 분리됨

- 단점 : 메소드의 한계가 있으며 엔드포인트가 많아짐


7. WAS와 웹서버


1) 웹서버

- Apache

- HTML 문서와 같은 정적 컨텐츠를 처리하는 것


2) WAS

- Tomcat

- php, jsp 등 개발 언어를 읽고 처리하는 동적 컨텐츠를 처리하는 것

- 웹 서버에서 처리하기에는 속도가 느려지기 때문에 웹 서버가 처리할 수 있는 형태로 가공하여 제공해줌