개발/기술
-
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..
-
Graph Database - neo4j개발/기술 2022. 1. 24. 20:00
일반적인 관계형 데이터베이스에서 Entity 사이의 관계를 표현할 때 JOIN 함수를 사용한다. 그런데 JOIN 함수를 사용하는 작업은 성능상에 단점이 있을 뿐만 아니라다소 엄격한 스키마를 따라야해 유연하지 못하다. 그래서 일반적인 SQL 데이터베이스는 관계형 데이터베이스임에도 불구하고 관계를 잘 표현하지 못하는 단점이 있다. 이런 문제점을 해결하고자 Graph 데이터베이스에서는 데이터를 더 유연하게 저장하는 방법을 제공한다. JOIN 과 같은 작업은 존재하지 않으며 모든 데이터는 Node와 Relation으로 표현되고 탐색(traverse)에 최적화됐다. Neo4J Neo4J는 오픈소스로 운영되는 Graph Database 이며 ACID compliant 하다. AuraDB 를 이용해 제공되고 있어 ..
-
log4j 이슈 살펴보기개발/기술 2021. 12. 13. 23:42
12월 09일 부터 오늘까지(12월 13일) Log4J라는 라이브러리가 전세계 개발자 커뮤니티를 떠들석하게 만들었다. Log4J는 자바 서버 프로그래밍을 해본 사람이라면 디버깅 용도로 한 번쯤 사용하는 라이브러리인데 특정 버전에서 이 라이브러리를 사용하면 원격에서 자바 프로그램을 실행 할 수 있는 심각한 결함이 있었다. 로그만 찍어주는 별 것 아닌 라이브러리가 어쩌다 이런 취약점이 생겼고 얼마나 문제가 심각한 것인지 이번 포스트를 통해서 정리해보려고 한다. JNDI 취약점이 발생한 원리를 다루기 전에 먼저 JNDI 라이브러리에 대해서 알아보자. JNDI 는 Java Naming and Directory Interface의 약자로 클라이언트가 서버상의 데이터나 객체를 lookup 할 수 있는 Java AP..
-
AOT(Ahead Of Time) Compiler개발/기술 2021. 11. 26. 20:30
JIT 컴파일러가 바이트코드를 런타임에 기계어로 바꾼다면 AOT는 실행 전에 바이트코드를 기계어로 바꾸는 컴파일러다. 실행 전에 모두 기계어로 변환되기 때문에 JIT 컴파일러가 런타임에 컴파일 하기 때문에 발생하는 성능 이슈가 생기지 않고 거의 네이티브의 성능을 낼 수 있게 된다. AOT 컴파일러가 JIT 컴파일러의 정반대의 원리기 때문에 JIT 컴파일러의 장점은 AOT 컴파일러의 단점이된다. AOT 컴파일러를 사용하면 실행 전에 전체 파일을 빌드해야 하기 때문에 빌드 속도가 느려진다. 설치할 때도 JIT 컴파일러를 사용하는 경우 바이트 코드만 받으면 되는 반면 AOT 컴파일러를 사용하면 기계어로 번역하는 작업까지 포함되기 때문에 느리다. 그리고 JIT 컴파일러의 장점이었던 Hot Reload 기능도 사..
-
JIT(Just In Time) Compilation개발/기술 2021. 11. 26. 20:10
기존 정적 컴파일 방식에서는 실행 전 소스 코드를 모두 기계어로 번역해야 했다면 JIT 컴파일러는 코드를 런타임에 기계어로 번역한다. 인터프리터도 런타임에 소스코드를 기계어로 변환해서 비슷하다고 볼 수 있으나 JIT 가 컴파일 하는 대상은 소스 코드가 아니라 최적화를 한번 거친 바이트 코드다. 바이트코드는 기계어는 아니지만 JVM 같은 가상 머신에서 쉽게 기계어로 변환할 수 있는 코드이며 이 과정이 실시간으로 일어나기 때문에 JIT(Jut In Time) 이라고 부른다. Java 개발자가 빌드해서 만든 바이너리는 기계어로 된 파일이 아니라 JVM에서 돌릴 수 있는 바이트 코드 덩어리다. 이 바이트 코드 덩어리가 JVM에 올라가면 내부 JIT 컴파일러에서 바이트 코드를 기계어로 변역해서 실행하게 된다. J..
-
명령형 UI vs 선언형 UI개발/기술 2021. 11. 26. 20:00
애플리케이션마다 UI Framework가 각각 다른데, 크게 명령형 UI(Imperative UI) 와 선언형 UI(Declarative UI) 로 나눌 수 있다. 명령형 UI Win32 부터 안드로이드, iOS 까지 기존 개발자들에게 가장 친숙한 형태로 메뉴얼하게 화면에 UI View를 추가하거나 삭제할 수 있는 형태의 프레임워크를 말한다. 위 예시 왼쪽 그림에서 View c1, c2를 갖고 있는 ViewB를 오른쪽 그림처럼 배경 화면이 빨간색이고 c3를 갖고 있는 화면으로 변경한다면 명령형 UI 에선 아래 같은 코드로 구현 하게 된다. // Imperative style b.setColor(red) b.clearChildren() ViewC c3 = new ViewC(...) b.add(c3) 선언형..
-
Kafka - Event Streaming Platform개발/기술 2021. 10. 13. 20:30
Event Streaming Platform Kafka를 간단히 설명하면 Event Streaming Platform이다. 그래서 Kafka에 대해서 이해하려면 먼저 Event Streaming Platform이 무엇인지 먼저 이해할 필요가 있다. Kafka 공식 문서에서는 Event Streaming을 다음과 같이 정의한다. Technically speaking, event streaming is the practice of capturing data in real-time from event sources like databases, sensors, mobile devices, cloud services, and software applications in the form of streams of e..