-
컴퓨터기초지식 정리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 등 개발 언어를 읽고 처리하는 동적 컨텐츠를 처리하는 것
- 웹 서버에서 처리하기에는 속도가 느려지기 때문에 웹 서버가 처리할 수 있는 형태로 가공하여 제공해줌
'2018~2019 > 작업파일' 카테고리의 다른 글
포트폴리오 사이트 보수작업 목록 (0) 2018.08.29 파일 정리 (0) 2018.07.22