동기화 기법 -세마포어
2023. 6. 1. 00:02
lecture
동기화(Synchronization)가 필요한 이유 두 개의 프로세스가 동일한 공유된 메모리에 접근. - 프로세스는 서로 협동하여 규칙을 준수하며 사용 해야 한다. - 잘못된 연산을 없애고 일관성을 보장해야 한다. 응용프로그램에서 동기화 방식 Semaphore MUTEX Condition Variable T2 -> T3 순이다. - 우선순위는 T3 ->T2 ->T1 순이다. - 초기화 된 세마포어 변수 sem을 T1, T2, T3 각 3개의 스레드가 잠그려 하는 상황이다. - 세마포어를 잠글 때에는 sem_wait() 함수를, 풀어줄 때에는 sem_post() 함수를 사용한다. - T1이 sem을 잠그면서 sem의 count를 하나 감소시킨다. count가 0이 되면 이후 이 세마포어를 잠그려는 스레드는..
ArrayList 와 LinkedList 의 차이점
2023. 5. 12. 00:46
Language/Java
빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보단 LinkedList를 사용하는것이 좋다. 그러나 인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우에는 arrayList가 더 좋은 성능을 발휘한다. ArrayList에 객체를 추가하면 인덱스 0부터 차례대로 저장된다, 또한 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 밀려난다. ArrayList를 생성하고 런타임 시 필요에 의해 객체들을 추가하는 것이 일반적이지만, 고정된 객체들로 구성된 List를 생성할때도 있다. 이런 경우에는 Arrays.asList(T...a)메소드를 사용하는 것이 간편하다. √ List list = Arrays.asList(T...a) T타입 파라미터에 맞게 asList(..
자바에서 병렬(parallel) 처리란?
2023. 5. 10. 23:23
Language/Java
병렬(parallel) 처리란 한가지 작업을 서브 작업으로 나누고, 서브 작업들을 분리된 스레드에서 병렬적으로 처리하는 것을 말한다. 병렬 처리 스트림을 이용하면 런타임 시 하나의 작업을 서브 작업으로 자동으로 나누고, 서브 작업의 결과를 자동으로 결합해서 최종 결과물을 생성한다. 예를 들어 컬렉션의 요소 총합을 구할 때 순차 처리 스트림은 하나의 스레드가 요소들을 순차적으로 읽어 합을 구하지만, 병렬 처리 스트림을 이용하면 여러 개의 스레드가 요소들을 부분적으로 합하고 이 부분합을 최종 결합해서 전체 합을 생성합니다. 다음 예제를 보시면 순차 처리 스트림과 병렬 처리 스트림을 이용하여 사용된 스레드의 이름이 무엇인지 콘솔에 출력하여 보여드리겠습니다. public class parallel { publi..
Elasticsearch - node repurpose tool to clean up
2023. 2. 27. 10:11
Elasticsearch
elasticsearch-node repurpose tool to clean up 이라는 문구와 함께 엘라스틱서치가 실행이 안되는 경우도 가끔 있습니다. 일단 elasticsearch.yml 에서 node.roles: ["master"] 로만 구성이 되어있으면 이런 밑에 오류 구문이 나옵니다. java.lang.IllegalStateException: node does not have the data role but has shard data 에러가 발생하게 되는데요. 이를 해석해보면, Data 역할을 받지 않았는데, 샤드 데이터를 가지고 있다는 에러 메시지입니다. 해결방법 ./bin/elasticsearch-node repurpose 명령어를 쳐 주면 이러한 구문 이 나옵니다. 저는 Y를 눌러서 진행해..
elasticsearch 클러스터간 검색
2023. 2. 25. 17:39
Elasticsearch
안녕하세요, 오늘은 엘라스틱서치에서 클러스터간의 검색을 알아보려고합니다. 전제 조건 클러스터간 검색에는 원격 클러스터가 필요합니다. 로컬 조정 노드에서 cluster_remote_client 노드 역할이 필요합니다. cluster_remote_{remote이름}.seeds:["192.168.0.201:9200"] 서버 43번 Elasticsearch.yml 에 추가할 내용 node.roles:[master,remote_cluster_client] search.remote.connect:true Cluster_remote_named.seeds:["192.168.0.201:9200"] 서버 46번 Elasticsearch.yml 에 추가할 내용 search.remote.connect:true Cluster_..
elasticsearch 백업/복원 (클러스터간 백업/복원)
2023. 2. 25. 16:32
Elasticsearch
안녕하세요~! 오늘은 Elasticsearch 백업/복원에 대해서 설명하도록 하겠습니다. 엘라스틱서치 버전 : 7.12.0 확인 : Multi-search Head 요건: 현 서버에서 백업서버로 백업파일 옮길때의 방법과 궁금증 2개의 서버에 각각 마스터가 할당이 되어있기때문에 한개의 서버에서 백업을 실행하고 복원서버에 넣는경우 어떠한 일이 벌어지는지에 대한 궁금증 먼저 기존에서 쓰고 있던 IP 43,46에 파일을 백업을 시켜 201서버로 옮기려고합니다. 다른 서버인 201 서버에 마스터 그리고 M/D 형태로 만들었습니다. 각각의 백업 리포지토리를 생산해 주었습니다. 동일한 이름으로 되어있어서 좀더 이해하기 편할거같습니다. 일단 43/46 서버를 백업해보려고합니다. 백업 방법 순서 : 1) 리포지토리 생성..
알고리즘 퀵 정렬(quicksort) 이란 ?
2023. 1. 30. 23:44
lecture
퀵 정렬은 병합정렬과 마찬가지로 Divide and Conquer 알고리즘입니다.(나누기와 정복). 퀵 정렬의 알고리즘은 pivot(피벗) 요소를 선택하고 선택한 피벗 요소보다 작은 모든 요소는 피벗의 왼쪽으로 이동하고 더 큰 요소는 모두 오른쪽으로 이동하도록 배열 요소를 재정렬합니다. 마지막으로 알고리즘은 피벗요소의 왼쪽과 오른쪽에 있는 하위 배열을 재귀적으로 정렬합니다. 이것을 퀵정렬의 핵심 프로세스 파티션이라고 합니다. 퀵 정렬 알고리즘의 단점 : 이미 정렬된 배열에서 pivot이 가장 크거나 가장 작으면 가장 큰 시간이 소요됩니다. 그림을 보시면 더 이해하기 쉬울거같습니다. 여러 가지 방법으로 분할을 할수 있습니다, 아주 간단한 논리입니다. 가장 왼쪽 요소부터 시작하여 더 작은 혹은 같은 요소의 ..
재귀용법 (recursive call, 재귀호출)
2023. 1. 17. 23:44
lecture
재귀용법이란 함수 안에서 동일한 함수를 호출하는 형태 여러 알고리즘 작성시 사용되므로 우리 모두가 익숙해야져야합니다. 또한, 팩토리얼을 구하는 알고리즘을 재귀호출을 활용해서 알고리즘 작성을 할것인데 같이 보면 좋을거같습니다. 5! = 5 x 4 x 3 x 2 x 1 6! = 6 x 5 x 3 x 2 x 1 = 6 x 5! = 6 x 5 x 4! n! = n x (n-1) x (n-2) x (n-3)! = n x (n-1)! 위와 같이 보이는것을 코드로 작성을 하게된다면 public static int factorialFunc2(int n) { if(n x) return SEARCH(x, Y.root.left) else return SEARCH(x, Y.root.right) 재귀와 반복의 차이점 일반적으로..
정렬 알고리즘 - 1
2023. 1. 15. 23:23
lecture
오늘은 버블 정렬(Bubble sort) , 선택정렬(Selection sort)와 삽입정렬(Insertion sort) 에 대해서 알아보도록하겠습니다. 정렬은 데이터의 탐색의 최적화를 만들기 위해 순서대로 나열해주는 기능입니다. 프로그래밍 컴퓨터 분야에서 사용하는 데이터의 경우 숫자의 순서나 어휘의 순서대로 정렬한 다음 사용해야 되는 경우가 거의 항상 발생합니다 이를 얼마나 효과적으로 해결할 수 있는 지가 정렬의 핵심입니다. 또한, 이진 탐색이라는 강력한 알고리즘을 사용하기 위해선 데이터의 정렬은 필수입니다. 버블 정렬은 굳이 요즘에 쓰이지 않는다고 합니다, 그 이유는 직관적으로는 이해가 쉬운 정렬로 구현하기 쉽지만 일반적으로 O(n^2) 의 시간복잡도를 갖기 때문에 실전에서는 거의 사용할 일이 없습니..
엘라스틱서치 - BULK
2022. 10. 6. 00:03
Elasticsearch
엘라스틱서치에서는 crud 형태로 데이터 값을 하나하나 도큐먼트의 넣는 방식보다 bulk로 한번에 요청하는 것이 효율적입니다. bulk API는 도큐먼트 읽기는 지원하지 않고 도큐먼트 생성/수정/삭제만 지원합니다. bulk 데이터 삭제는 한줄로 작성하고 나머지 작업들은 두줄로 작성이 됩니다. 각 줄 사이에는 쉼표 등 별도의 구분자가 없고 라인 사이 공백을 허용하지 않는다 또한 JSON 문법 처럼 보이지만 복수의 JSON 구조를 줄바꿈 문자열로 구분하는 NDJSON형태입니다. json과 비슷하지만 문법이 조금 다르니 라인이나 쉼표 사용에 주의해야합니다. 벌크 데이터를 파일 형태로 만들어서 적용하는 방법도 있다 실제 현업에서는 파일로 만들어서 사용하는 방식이 더 실용적입니다. (키바나 콘솔에서는 파일 불러오..