본문 바로가기
반응형

컴퓨터공학 기초55

[데이터베이스] 트랜잭션이란 ? 트랜잭션이란 ? query를 수행할때 중간에 오류가 발생하면 Rollback을 통하여 처음부터 다시 수행하고 오류없이 실행을 마치면 commit을 하는 작업단위 사용이유 여러 클라이언트가 동시에 액세스할때 발생할 수 있는 데이터 부정합을 방지하기 위해 사용 한번에 하나의 트랜잭션만 허용하면 부정합은 발생하지 않지만 효율성이 떨어진다. 특성 ACID Atomicity (원자성) 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는것을 보장 Consistency (일관성) 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지해야한다. Isolation (격리성) 트랜잭션 수행시 다른 트랜잭션이 끼어들어서는 안된다. (트랜잭션끼리 간섭이 있어서는 안된다.) Durability (지속성) commit이 되면 .. 2020. 2. 29.
[기초개념] 프로세스와 스레드 프로세스 사전적 의미 : 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 프로세스는 프로그램실행시 Code,Data,Stack,Heap의 구조로 되어있는 메모리 영역을 할당 받는다. 프로세스는 최소 1개이상의 스레드를 갖는다. 스레드 프로세스가 할당받은 자원을 이용하는 실행의 단위 스레드는 프로세스 내에서 각각의 stack만 따로 할당을 받고 code,data,heap은 공유한다. 2020. 2. 23.
[기초개념] 객체지향 5대원칙 객체지향 5대원칙 (SOLID) SRP (단일책임 원칙) OCP (개방-폐쇄 원칙) LSP (리스코프 치환 원칙) DIP (의존 역전 원칙) ISP (인터페이스 분리 원칙) SRP 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 하나의 기능을 수행하는데 집중되어 있어야한다. 기능이 많아지면 결합이 발생할 가능성이 높아지며 유지보수 비용이 증가한다. 그렇기때문에 책임을 분리시킬 필요가 있다. OCP 기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 한다. 변경될 수 있는것이 무엇인가에 초점을 맞춰야 한다. 변경이 일어날 수 있는 내용은 수정하기 쉽게 설계하고 변경되지 않아야 하는 것은 수정되는 내용에 영향을 받지 않게 설계해야 한다. LSP 자식클래스는 부모클래.. 2020. 2. 22.
[기초개념] stateful vs stateless stateless http와 같이 이전의 상태를 기록하지 않는 접속 입력값이 같을때 항상 같은값 보장 로드밸런싱, 스케일 아웃에 용이 매 요청시 상태정보를 전달하기때문에 비용이 더 들며 서버에서도 정보를 사전처리하기 위한 작업이 필요 stateful 상태를 기억하고 있는 것 서버의 무리가 가며 스케일 아웃에 어려움이 있다. 2020. 2. 19.
[기초지식]JVM 구조와 자바 런타임 메모리구조 (+Garbage Collector) JVM이란 ? - 자바 가상머신으로 자바 바이트 코드를 실행할 수 있는 주체 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할 - Class Loader, Execution Engine,Garbage Collector, Runtime Data Area 1. Class Loader - 자바에서 소스를 작성하면 .java파일이 생성된다. .java 소스를 자바컴파일러가 컴파일하면 .class파일이 생성된다 이렇게 생성된 클래스파일들을 엮어서 JVM이 운영체제로부터 할당받은 Runtime Data Area로 적재하는 역할 자바 애플리케이션이 실행중일때 수행된다. 2. Execution Engine - Class Loader에 의해 메모리에 적재된 클래스.. 2020. 2. 17.
[자료구조] 해쉬(Hash)란? 해쉬(Hash) 란? - 데이터를 다루는 기법중에 하나로 검색과 저장이 아주 빠르다. - 데이터를 검색할 때 사용할 key와 실제 데이터의 값이 (value가) 한 쌍으로 존재 - key값이 배열의 인덱스로 변환되기 때문에 검색과 저장의 평균적인 시간 복잡도가 O(1)이 된다. 해시 함수 - 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환 시켜주는 함수 - 결과로는 해쉬코드가 나온다. - 동일한 값이 입력되면 언제나 동일한 출력값을 보장한다. 좋은 해쉬함수 - 충돌을 최소하하는 방향으로 설계 - 키의 일부분보다는 전체를 참조하여 키 생성 충돌이란 ? - 해시함수를 통해서 결정된 key가 중복되는경우 충돌해결 Open Address 방식 - 충돌이 발생하면 다른 해시버킷에 데이터를 삽입하는 방.. 2020. 2. 15.
[자료구조] 힙(Heap)이란 ? 힙(Heap)이란 ? 완전이진트리의 일종 완전이진트리와는 다르게 중복값을 허용한다. 최댓값이나 최솟값을 빠르게 찾아내기 위해 만들어진 자료구조 힙(Heap)의 종류 최대힙 : 루트의 값이 가장 큰 힙 최소힙 : 루트의 값이 가장 작은 힙 힙(Heap)의 사용사례 우선순위 큐 힙(Heap)의 구현 구현에는 보통 배열을 이용한다. 일반적으로 편하게 사용하기 위해서 0번째 인덱스는 비워둔다. 왼쪽자식의 인덱스 : 부모의 인덱스*2 오른쪽자식의 인덱스 : (부모의 인덱스*2) +1 부모의 인덱스 : 자식의 인덱스/2 public class MaxHeap { public static void main(String[] args) throws IOException{ BufferedReader reader = new .. 2020. 2. 11.
[자료구조] 배열 vs List 비교하기 배열(Array) 이란 ? 여러 데이터를 하나의 이름으로 그룹핑해서 관리 하기 위한 자료구조 배열의 인덱스는 유일무이한 값 식별자 배열의 특징 크기가 정해져있다. 데이터를 메모리에 순차적으로 나열가능 인덱스를 활용하여 검색에 최적화 되어있다. 저장될 때 인접한 Memory 또는 Memory에 연이어 저장된다. Stack 영역에 메모리 할당 배열의 단점 크기를 수정할 수 없다. 배열은 인덱스에 따라 값이 유지되기때문에 엘레먼트가 삭제되어도 메모리는 차지한다. 삽입, 삭제시 비용이 많이 들 수 있다. List란 ? 빈틈없는 데이터의 적재라는 장점을 취한 데이터 스트럭쳐 List의 특징 데이터간의 순서가 존재한다. 인덱스는 몇번째 데이터인가 정도의 의미이다. 빈 엘레먼트를 허용하지 않는다. 크기가 정해져있지 .. 2020. 2. 10.
[알고리즘] 이진탐색트리(BST) 란 ? 이진탐색트리(BST)란? 최대 2개의 자식노드를 가지는 트리 그 하위도 이진탐색트리의 구조를 가진다. 각 노드에는 값이있으며 값사이에는 전순서가 있다. 중복값을 허용하지 않는다. 이진탐색트의 연산 삽입 삭제 검색 이진탐색의 예시 이진탐색트리(BST)의 구현 public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int size=sc.nextInt(); BSTMethod bstMethod = new BSTMethod(); BST root=null; for(int i= 0;i data) { child = insertPreNode(node.preNode, data); node.preNode = .. 2020. 2. 9.
[알고리즘] 너비우선탐색(BFS) 이란 ? 너비우선탐색(BFS) 이란? Breadth First Search의 약자 어떠한 노드에서 인접한 노드들부터 순차적으로 방문하는 탐색방법 장점 최단경로를 보장한다. 단점 경로가 길 경우에는 많은 기억공간을 요구한다. 무한그래프의 경우 해가 없는경우에는 찾지도, 끝내지도 못하는 상황이 발생할 수 있다. 유한그래프의 경우 해가 없는 경우에 모든 그래프를 탐색한 후 실패로 끝난다. 깊이우선탐색(DFS)보다 구현이 복잡하다. 사용사례 최단경로를 찾고 싶을때 실행순서 예시 구현코드 public class Main { public static void main(String[] args) { int size; int command; Scanner sc = new Scanner(System.in); size = sc.n.. 2020. 2. 7.
[알고리즘] 깊이우선탐색(DFS)이란 ? 깊이우선탐색(DFS)이란? Depth First Search 그래프의 탐색방법중 한 가지로 시작한 노드에서 최대한 깊숙히(더 이상 갈곳이 없을때까지)탐색한 후 원점으로 돌아와서 다른 노드들을 탐색하는 방법입니다. 깊이우선탐색의 특징 자기 자신을 호출하는 순환 알고리즘 어떤 노드를 방문했는지를 반드시 체크해야한다. 체크하지 않으면 무한루프에 빠질 수 있다. 장점 구현이 간단하다. 현재 경로상의 노드만 기억하면 되므로 저장공간이 적게든다. 목표노드가 깊은곳에 있을경우에 빠르게 찾을 수 있다. 단점 단순 검색속도는 너비우선탐색보다 느리다. 해가 없는경우에 깊이 빠질 수 있다. 구한 경로가 최단경로가 아닐 수 있다. 실행순서 예시 구현 코드 import java.util.Scanner; public class .. 2020. 2. 5.
[네트워크] HTTP란 ? HTTP란? - Hyper Text Transfer Protocol의 약자로서 브라우저와 같은 응용 프로그램을 통하여 클라이언트와 서버 사이에 데이터 를 전송하는 프로토콜 - TCP/IP를 이용하는 응용 프로토콜 한줄요약 : 인터넷 데이터 전송 프로토콜 HTTP의 특징 - HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다. 그렇기 때문에 요청/응답 방식으로 동작한다 - 신뢰성 있는 데이터 전송 - Status Code 제공 - HTTP 메소드를 지원한다 GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT ex) 로그인요청 -> 완료or실패 응답 HTTP Code 응용법 - Status Code를 세분화해서 사용하게 된다면 해커의 공격위험성을 높일 수 있다. 코드를.. 2020. 2. 3.