전체 글 53

[알고리즘][자료구조] Linked List (링크드 리스트)

Linked List 원소의 추가/삭제가 빈번하게 일어날 때, 배열은 해당 원소 이후의 모든 원소를 1칸씩 앞/뒤로 옮겨 주어야합니다. 이런 문제를 해결한 자료 구조가 Linked List입니다. 하나의 Node가 다음 Node에 대한 Link를 가지고 있는 것이 Single Linked List 이전 node에 대한 Link도 가지고 있는 경우 Double Linked List 아래 그림과 같이 간단한 작업으로 Node의 추가 삭제가 가능합니다. 보통 Head에는 Data를 가지지 않고 Node1에 대한 Link만을 가지고, Tail Node에서 next로 Nullptr을 가지는 것이 일반적입니다. 하지만 이 Linked List는 특정 원소에 접근하는 시간이 길다는 단점이 있습니다. ArrayList..

GRASP

OO Design Principle 중 가장 널리 알려진 것은 SOLID 원칙입니다. 2021.04.25 - [Architecture (아키텍쳐)/DesignPattern] - SOLID Principle 하지만 GRASP 도 그에 못지 않게 널리 알려져있고 중요한 원칙입니다. GRASP란 무엇일까요? Craig Larman에 의해 만들어졌으며 GRASP는 General Responsibility Assignment Software Pattenrs의 약자로 한국어로 직역해보면 "일반적인 책임 할당 소프트웨어 패턴" 입니다. 즉 GRASP는 상호작용하는 Object에 어떻게 Responsibilities를 할당하는 지에 대한 내용을 담고 있다고 할 수 있습니다. 여기서 Responsibility란 정확히 ..

Factory Method, Abstract Factory (팩토리 메서드, 추상 팩토리)

Factory Method 부모 클래스가 객체를 생성할 수 있는 Interface를 제공하지만 자식 클래스들이 생성될 때, 생성되는 객체의 유형을 변경할 수 있도록 해주는 생성패턴 public interface chair() { createLeg(); } public class woodChair() { createLeg() { ... } } public class goldenChair() { createLeg() { ... } } Abstract Factory 관련 객체들의 구상 클래스들을 지정하지 않고도 그들의 패밀리들을 생성할 수 있도록 하는 생성패턴 예를 들어 아래와 같다. public class RPNCalculator { public int calculate(String input, String..

SOLID Principle

SOLID Principle 이란? SOLID Principle은 RC Martin이 만든 Software Design Principles입니다. 아래와 같은 5가지 원칙의 첫 글자를 따서 만들었습니다. The Single Responsibilities Principle (SRP) The Open-Closed Principle (OCP) The Liskov Substitution Principle (LSP) The Interface Segregation Principle (ISP) The Dependency Inversion Principle (DIP) 이 원칙들은 결국 자주 변하는 것과 변하지 않는 것을 분리하여 자주 변하는 것이 변하는 것을 의존하고 변하는 것이 자주 변하는 것에 의존하지 않는 것에 ..

Gang of Four (Gof) 디자인 패턴

GoF GoF는 DesignPatternsBook 의 저자 4명이 만든 디자인 패턴이라는 것에서 유래했습니다. GoF의 분류 이 Gof 패턴은 목적에 따라 Creational, Structural, Behavioral 3가지로 분류하며, 범위에 따라 Class, Object 2가지로 분류하여 총 6가지의 분류가 있습니다. Creational : 생성 패턴. 객체의 사용과 생성을 분리합니다. Structural : 구조 패턴. Classes나 Objcet를 구성할 때, 상속 등을 이용하여 특정한 생성자를 사용합니다. Behavioral : 행동 패턴. Class의 책임(Responsibilities)을 할당하는 문제에서 Static Relation과 Communcation을 제안하여 사용합니다. 우리가 알..

디자인 패턴 이란?

패턴이란? 디자인 패턴을 보기 이전에 "패턴"이란 것에 대해 알아야 합니다. 패턴이란 "특정 상황(Context)에서 자주 반복되는 비슷한 문제(Problem)에 대한 해결책(Solution)" 을 정의한 것입니다. 영어로는 다음과 같은 정의가 널리 쓰입니다. "A solution to a problem in a context" 왜 이러한 패턴을 사용할까요? 객체지향 프로그래밍은 어렵습니다. 재사용이 가능한 객체지향 프로그래밍은 훨씬 더 어렵습니다. - 경험이 많은 디자이너는 과거에 사용했던 좋은 해결책을 재사용합니다. - 잘 설계된 객체지향 시스템은 패턴을 활용합니다. - 디자이너가 패턴에 대해 이해하고 있으면 생산성이 올라가며 유연하고 재사용이 가능한 결과가 나옵니다. - 다른 개발자와의 커뮤니케이션..

쿠버네티스의 구성요소

Pod - 스케쥴링의 최소 단위 - 하나의 IP, 이름, 포트 범위를 갖는다. - Pod 연결은 Service 가 수행 라벨 - 객체를 동적 그룹으로 묶어주는 key-value pairs - 객체와 라벨: NxN 관계 - 객체를 식별하는 용도로만 사용. 예) 스케쥴러가 Pod 와 노드를 배치하기 위해 사용 Label selector - 라벨을 기반으로 객체를 선택 Annotation - 임의의 메타데이터를 객체에 연계 서비스 - Pod 그룹을 라벨로 묶어서 연결. - 보통 layer 3 (TCP/UDP)에서 동작l ..svc. cluster.local 형식으로 네임스페이스가 포함된 DNS 주소를 갖는다. Namespace - K8s 자원으로 관리됨 - 자원에 대한 영역을 제공 Podspec - Pod 정..

Lex 와 Yacc

1. Lex와 YaccLex는 어휘 분석기이며Yacc는 구문 분석기이다. Lex는 특정 패턴의 문자열 토큰을 찾는 것, Yacc는 해당 토큰들의 관계를 분석하여 구문 검사를 하는 것으로 구분 되어있다.이 2가지를 같이 사용하여 컴파일러와 인터프리터 등을 만들기 위해 사용된다. 2. LexLex는 어휘 분석기를 읽어와서, Lexer를 만든 뒤 이를 C 언어로 만들어진 소스 코드의 형태로 출력한다.Lex는 저작권이 있는 소프트웨어로 시작했지만, AT&T의 소스 코드에 기반하는 버전은 오픈 소스 정책을 따라 오픈 솔라리스 등에서 사용된다. 이외에도 유명한 오픈 소스 버전의 Lex로는 빠른 Lex(Fast Lex)라는 의미의 flex가 존재한다. 이 Lex는 3가지의 부분으로 구성된다.해당 Section들은 아..

기타 주제 2021.04.12

Elasticsearch (엘라스틱서치) vm.max_map_count 버그 해결

ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 별다른 설정없이 엘라스틱서치를 사용하다보면 위와 같은 에러를 마주할 것입니다. 해당 에러는 운영체제가 기본으로 사용하는 mmap 사이즈인 65530이 너무 작아서 발생하는 에러입니다. 위와 같은 버그가 발생 시에 Elasticsearch에서 공식 가이드하고 있어요. www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html Virtual memory | Elasticsearch Guide [7..

Elasticsearch (엘라스틱서치) 시작하기 1. 설치 및 configuration (기본적인 설정)

Elasticsearch를 시작할 때, 기본적으로 설정해두면 좋은 설정들이 있다. (Configuration) Ubuntu를 기준으로 설명합니다. (Window도 실행부분 제외하고는 거의 비슷할거같아요) 0. 설치 및 실행 www.elastic.co/kr/downloads/elasticsearch 1. Download and unzip Elasticsearch. 2. Run bin/elasticsearch (or bin\elasticsearch.bat on Windows) 3. Run curl http://localhost:9200/ or Invoke-RestMethod http://localhost:9200 with PowerShell 1. System Configuration 1-1. /etc/sec..

반응형