ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴퓨터기초지식 정리
    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
Designed by Tistory.