전체 글
-
Kubernetes Object개발/기술 2022. 2. 22. 21:30
Object Kubernetes 상에서 말하는 Object 는 Kubernetes 시스템 상에서 영속성을 지니고 있는 엔티티(Entity) 말한다. Kubernetes는 이 Entity를 이용해 클러스터의 상태를 나타낸다. Object가 나타내는 것은 컨테이너화돼 동작하는 애플리케이션이 무엇인지 애플리케이션이 사용하는 리소스는 어떤 것이 있는지 애플리케이션과 관련된 정책은 무엇인지 에 대한 것이다. 처음에는 Object라는 개념이 와닿지 않을 수 있는데 Kubernetes 가 하는 역할이 무엇인지 알아가다 보면 당연히 필요한 개념이라고 익히게된다. Object를 생성하면 Kubernetes는 지속적으로 동작하며 오브젝트가 존재하고 명세한 대로 동작하도록한다. 개발자는 오브젝트를 생성/변경/삭제 해서 시스..
-
PostgreSQL VACUUM개발 2022. 2. 17. 20:20
PostgreSQL 에서 delete를 이용해서 삭제를 수행하는 경우 DB 데이터 상에서는 지워지지만 스토리지 상에서는 바로 삭제하진 않는다. 삭제된 자료를 다른 트랜잭션 상에서 사용하고 있다면 그 자료가 지워져선 안되기 때문이다. 그런데 더이상 사용하지 않는 자료가 스토리지 상에 계속 남아 있다면 불필요한 공간을 차지하게 되는 문제가 생긴다. PostgreSQL 에서는 VACUUM 이라는 명령어를 통해 위와 같은 상황을 관리할 수 있는 기능을 제공한다. 영어단어 '청소기를 돌리다'는 의미와 비슷하게 VACUUM 명령어도 데이터베이스 상에 먼지처럼 남겨진 데이터를 정리할 수 있는 기능을 제공한다. VACUUM 명령어는 크게 두가지로 분리할 수 있다. VACUUM 테이블과 인덱스에서 삭제된 자료(old v..
-
Container & Docker개발/기술 2022. 2. 15. 20:00
Container 컨테이너에 설명하기에 앞서 컨테이너 기술이 만들어진 이유를 소개하는게 좋을 것 같다. 우리가 사용하는 컴퓨터에는 여러개의 애플리케이션이 돌아가고 있다. 그리고 대부분의 애플리케이션은 OS에 설치된 라이브러리를 이용해 실행된다. Spring Boot의 경우 JAVA를 참조하고 C 언어로 이뤄진 게임의 경우 GCC 컴파일러를 이용해 실행하게 될 것 이다. 모든 앱이 사용하는 라이브러리가 겹치지 않으면 상관 없다. 그런데 실행하는 앱 별로 필요한 라이브러리 버전이 다른 경우가 종종 있다. 어떤 앱은 Java8에서 실행해야 하는데 새로 배포하는 앱은 Java11 에서 실행되는 환경이 있다면? 일시적으로 링크를 따로 걸어서 해결 할 수 있지만 같은 로컬 환경에 두개의 라이브러리 버전을 관리하는 ..
-
cypher개발/기술 2022. 2. 14. 20:00
cypher는 Graph Database 인 Neo4j 에서 Query를 작성할 때 사용할 수 있는 언어다. 처음 보면 생소하지만 사용하다보면 SQL 과 흡사한 점이 많아 금방 배울 수 있다. 노드와 관계 그리고 속성을 정의하는 쿼리라는 점에 주목해서 보자. 다음 문장을 나타내는 관계를 만든다고 해보자 Mike writes Neo4j Son reads Neo4j Mike likes Son CREATE 문장에서 각 주어와 목적어는 관계상에서 Node로 표현할 수 있으며 각각의 Node는 Label로 묶어 줄 수 있다. Mike와 Son은 User라는 라벨로 표현하고 Neo4j 은 Book 라벨로 표한하자. 각 Node를 Cypher를 이용하면 아래의 쿼리로 세개의 노드를 생성할 수 있다. create(:U..
-
Javascript 동치비교개발/삽질 기록 2022. 2. 11. 20:20
Javascript 에서는 다른 언어랑 다르게 비교 연산자로 '==' 뿐만 아니라 '===' 가 있어 다른 변수와 비교할 때마다 내가 짠 코드가 정확한 건지 아닌지 헷갈릴 때가 종종 있다. '==' 는 느슨한 비교 연산자고 '===' 는 엄격한 비교 연산자인데 사용할 때마다 결과가 달라 이번 포스트에서는 Javascript 비교 연산자를 깔끔히 정리해보려고 한다. string 비교 연산 변수와 상수형 문자열 사이의 비교는 '==' 든 '==='를 사용하든 상관 없다. 아래 코드를 보면 두개의 비교 연산 모두 true로 리턴하게 된다. const simple = "simple" const is = simple === 'simple' ? 'is' : 'is not' // true, is='is' const ..
-
go - goroutine개발 2022. 2. 3. 21:44
고루틴 은 go 언어 내부에서 비동기 작업을 효율적으로 처리 할 수 있는 쓰레드 라이브러리다. Go 내부에서 스케줄러에 의해 자체적으로 관리되며 OS 에서 관리하는 경량 쓰레드보다 더 경량이라고 하니 go 언어를 만들면서 쓰레드 작업을 최적화 하는데 많은 심혈을 기울였다고 볼 수 있다. Kotlin의 Coroutine과 비슷하면서도 쓰레드 설정이나 suspend 함수 같은게 없어 간소화된 형태다. Java 에서 쓰레드 문제로 몸살을 겪었다면 go 언어에서는 goroutine을 이용해 간단하게 해결할 수 있다. 사용법 함수 앞에 간단하게 go 만 붙여주면 goroutine 을 사용해서 실행하게 된다. func bark() { fmt.Println("bark") } func main() { go bark()..
-
Graph Database - neo4j개발/기술 2022. 1. 24. 20:00
일반적인 관계형 데이터베이스에서 Entity 사이의 관계를 표현할 때 JOIN 함수를 사용한다. 그런데 JOIN 함수를 사용하는 작업은 성능상에 단점이 있을 뿐만 아니라다소 엄격한 스키마를 따라야해 유연하지 못하다. 그래서 일반적인 SQL 데이터베이스는 관계형 데이터베이스임에도 불구하고 관계를 잘 표현하지 못하는 단점이 있다. 이런 문제점을 해결하고자 Graph 데이터베이스에서는 데이터를 더 유연하게 저장하는 방법을 제공한다. JOIN 과 같은 작업은 존재하지 않으며 모든 데이터는 Node와 Relation으로 표현되고 탐색(traverse)에 최적화됐다. Neo4J Neo4J는 오픈소스로 운영되는 Graph Database 이며 ACID compliant 하다. AuraDB 를 이용해 제공되고 있어 ..