본문 바로가기

전체 글

(120)
TCP / UDP TCP와 UDP는 Transport Layer의 대표적인 프로토콜이다. Transport Layer는 End Point간 신뢰성 있는 데이터 전송을 담당하는 계층인데, 2가지 역할을 한다. 1) 신뢰성: 데이터를 순차적, 안정적으로 전달 2) 전송: 포트 번호에 해당하는 프로세스에 데이터를 전달 만약 Transport Layer가 없다면? 1. 데이터의 순차 전송이 원활이 진행되지 않을 수 있다. ex. 1-2-3 데이터가 2-3-1로 전달 2. 송수신자간의 데이터 처리 속도 차이로 흐름 문제가 생길 수 있다. 3. 네트워크의 문제로 혼잡 문제가 발생할 수 있다. 결과로 데이터의 손실이 발생할 수 있다. ex) Hi my name is Kyuri ➡️ Hi name ri 그래서 필요한 것이 TCP, Tr..
[JAVA] static 변수와 메서드 1.1 static 변수 class kimkyuriFamily{ String lastname="김"; } public class Sample { public static void main(String[] args){ kimkyuriFamily kim1 = new KimkyuriFamily(); kimkyuriFamily kim2 = new kimkyuriFamily(); } } 위 코드는 김규리 가족을 나타내는 클래스이다. 위처럼 클래스를 만들고 객체를 생성한다면, 객체마다 lastname을 저장하기 위한 메모리가 별도로 할당된다. 하지만 lastname은 모든 객체의 공통값이기 때문에, 메모리가 별도로 할당될 필요는 없다. 이렇게 값이 변하지 않는다면 static 변수를 사용하는 것이 유리하다. cla..
[JAVA] 제네릭 (Generic) 1.1 제네릭이란? - 컴파일 시 타입을 체크해주는 기능이다. - 형변환의 번거러움을 줄여주고, 타입을 체크해주므로 코드가 간결해진다. 즉, 데이터 형식에 의존하지 않고, 하나의 값이 다른 데이터 타입들을 가질 수 있도록 하는 방법이다. 1.2 활용 만약, 어떤 자료구조를 만들어 배포하려고할 때 String, Integer 모두 지원하고 싶다고 가정해보자. 이 때 String, Integer에 대한 클래스 모두 만드는 것은 비효율적이다. 이를 해결하기 위해 제네릭을 사용한다. 아래 타입들이 많이 사용된다. (암묵적인 규칙일 뿐 반드시 따라야하는 것은 아니다.) 타입 설명 Type Element Key Value Number 1.3 사용방법 # Object 객체 사용 class Box { Object it..
[JAVA]링크드리스트로 큐 구현하기 (Queue) 큐는 먼저 들어온 것이 먼저 나가는 구조이다. 은행에 먼저 온 사람이 빠른 번호표를 부여받고, 먼저 나가는 원리를 생각하면 쉽다. 이 구조를 구현하기 위해서는 큐에서 나갈 차례를 기억하고 있어야하는데, 이를 위해서 몇가지 장치가 필요하다. 많이 사용하는 용어들이 있다. (1) Enqueue: 큐 맨 뒤에 어떤 요소를 추가한다. 마지막으로 온 손님에게 번호표를 발부해주는 것과 비슷하다. (2) Dequeue: 큐 맨 앞쪽의 요소를 삭제한다. 손님의 업무가 끝나면 번호표를 삭제하는 것과 비슷하다. (3) front: 큐의 맨 앞 위치이다. 다음 서비스를 받을 손님 번호의 역할을 한다. (4) Peek: front에 위치한 데이터를 읽는다. 다음 서비스를 받을 손님의 번호를 확인한다. (5) rear: 큐의 ..
[리눅스] 용량부족 해결 EC2에서 파일을 작성하려니 이런 오류가 생겼다. 오류 : E: Write error - write (28: No space left on device) E: IO Error saving source cache E: The package lists or status file could not be parsed or opened. 에러 문구를 확인한 후 바로 디스크 용량 부족을 체크하였다. 1. Inode 체크 df -i 2. 디스크 용량 체크 df -h / 경로와 snap 관련 경로의 용량이 문제 있어 보인다. 3. 구글링을 통해서 찾으니.. sudo apt autoremove --purge snapd 통해서 snapd 삭제 가능하다고 함. Reading package lists... Error! E: ..
[JAVA] 오버로딩 vs 오버라이딩 1. 오버 로딩 하나의 클래스에 같은 이름의 메서드를 여러개 정의하는 것이다. 조건: 1) 메서드의 이름이 같아야한다. 2) 매개변수의 개수 또는 타입이 달라야한다. 3) 매개변수는 같고 리턴 타입이 다른 경우는 오버로딩이 성립되지 않는다. 대표적인 예시: System.out.println 메서드 void println() void println(boolean x) void println(char x) void println(double x) * 잘못된 예시 int add(int a, int b) { return a+b; } long add(int a, int b) {return (long) (a+b); } 2. 오버라이딩 조상클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것이다..
[DB] 프로시저 (procedure) 1. 프로시저의 개념 프로시저란 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. PL/SQL을 통해서 만들어지는 서브 프로그램이라고 생각하면 되는데, PL/SQL은 상용 관계형 데이터베이스 시스템인 오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 컴퓨터 프로그래밍 언어 중 하나이다. 호출을 통해서 실행되어 SELECT, INSERT, UPDATE, DELETE 명령을 실행한다. 프로시저는 백단과 구별되어 있기 때문에 프로시저의 쿼리문을 수정한다고해도 백엔드에는 영향을 주지 않는다. (실제로 사용해보니 함수와 유사하다.) 2. 프로시저의 구성 구성 요소 DECLARE [선언부] 프로시저의 명칭, 변수와 인수, 데이터 타입 정의 BEGIN / END [시작/종료부] 프로시저의 시..
[ElasticSearch] 기본 개념 1. 엘라스틱 서치의 특징 1.1. 분산/확장성/병렬처리 엘라스틱 서치 구성 시 보통 3개 이상의 노드(엘라스틱서치 서버)를 클러스터로 구성하며, 데이터를 샤드로 저장시 클러스터 내 다른 호스트에 복사본을 저장해두기 때문에 하나의 노드가 죽거나 샤드가 깨져도 복제되어 있는 다른 샤드를 활용한다. 데이터 분산과 병렬처리가 되므로 실시간으로 검색 및 분석할 수 있고, 노드르 수평적으로 늘릴 수 있다. 또한 노드를 클러스터에 추가할 수 있다. 2. 클러스터 하나 이상의 노드(서버)가 모인 것이며, 전체 데이터를 저장하고 모든 노드를 포괄하는 통합 색인화 및 검색 기능을 제공한다. 고유의 이름으로 식별되고, 기본 이름은 "elasticsearch"이다. 어떤 노드가 어느 클러스터에 포함되기 위해서는 이름에 의해..