Browsed by
[Category:] SW Development

How to load the network data to the Postgresql DB

How to load the network data to the Postgresql DB

목차 도로네트워크 데이터 DB생성 PostgreSQL DBMS에 배포되는 원본 데이터를 데이터베이스 적재하기 위한 데이터베이스를 먼저 생성한다. 이 과정은 PostgreSQL 설치시 생성한 postgres 계정으로 접속하여 작업을 진행한다. 이 예제에서는 생성할 데이터베이스 이름을 “network” 로 한다. 이 이름은 필요에 따라 변경해도 무방하다. 아래는 위에서 설명한(1~6) 일련의 과정으로 보여준다. 한국에서 사용하는 좌표계(UTMK, Katech자동차연구원) 등록 경로탐색엔진과 KT지도에서 UTMK좌표를 사용하고 현재는 많이 사용되지 않지만 사용할 가능성이 있어 Katech좌표계도 같이 등록한다. 참고로 맵퍼스로부터 수급받는 원본 데이터는 WGS84 좌표계로 제작되어 있어 좌표계 변환시 내부적으로 참조가 필요하다. 위에서 사용된 spatial_ref_sys DB 테이블은…

Read More Read More

Docker Volume 알아채기

Docker Volume 알아채기

Docker Volume을 create, backup, migrate, restore하는 일련의 예제를 작성해 봄으로써 Docker를 활용할 때 데이터를 영구적으로 저장/유지하는 방법에 대해 알아본다. Docker가 무엇인지 먼저 간략하게 알아보기 Docker는 어플리케이션을 개발(developing), 배포(shipping), 실행(running)하는 하나의 오픈 플랫폼(Open platform)이라 할 수 있다. 또한 어플리케이션을 운영 인프라로부터 개념적으로 분리시켜 줌으로써 보다 빠르게 소프트웨어를 배포할 수 있도록 한다. Docker를 활용하면 응용 프로그램을 관리하는 것과 같은 방식으로 앱의 인프라(infrastructure)를 관리할 수 있어 개발자에게 전체 개발 프로세스를 상당히 간소화 시켜준다. 코드를 배포, 테스트, 배포를 빠르게 해주는 Docker 방법론을 활용하면 개발자는…

Read More Read More

물리학적 사고가 어떻게 AI를 가능하게 했나: 2024 노벨상

물리학적 사고가 어떻게 AI를 가능하게 했나: 2024 노벨상

인공지능(Artificial intelligence)은 이미지 생성이나, 그럴싸해 보이는 챗봇 그 이상이다. 또한 이는 물리학에 기반하며 노벨에 버금가는 노력의 산실이기도 하다. 대부분의 사람들은 AI라고 하면 ChatGPT와 같은 챗봇이나 DALL-E 같이 이미지 생성, 또는 단백질의 중첩구조를 예측하는 AlphaFold와 같은 과학용 어플리케이션을 떠올린다. 이런 사람들 중 인공지능 시스템(Artificial Intelligence System)의 핵심에 물리학이 있을 것으로 생각하는 사람은 극소수일 것이다. 하지만 사실 인공신경망(Artificial Neural Network)이란 개념은 물리학의 세 분야 즉, Biophysics, Statistical physics, Computational physics이 융합된 연구의 결과로 처음 결실을 맺게 되었다. 대략 1980년대 이루어진 이러한 주요…

Read More Read More

Vector Embeddings Explained

Vector Embeddings Explained

What are vector embeddings? Vector embeddings are dense representations of objects (including words, images or user profiles) in a continuous vector space. Each object is represented by a point (or vector) in this space, where the distance and direction between points capture semantic or contextual relationships between the objects. For example in NLP, similar words are mapped close together in the embedding space. Types of vector embeddings Generative AI applications are built using vector embeddings and the data source can…

Read More Read More

Understanding Immutable State in Java: When Why & How to Use It

Understanding Immutable State in Java: When Why & How to Use It

대부분의 프로그래밍 언어에는 시간이 흐르더라도 변하지 않는 개념 즉, 신뢰성(Reliability)과 효율성(Efficiency)을 들 수 있다. 이는 Immutability과 관련된 개념이다. Immutability 상태라 함은 Object에 속해있는 속성들이 Object 생성 이후부터는 변경되지 않는 상황(불변)을 말한다. 이와 반대로 Mutable 상태는 Object가 생성된 이후 속성들이 변경되는 상황을 말한다. 이 두 상태는 개발하다 보면 그에 상응하는 목적과 역할이 존재함을 알 수 있는데 이 글에서는 Immutable 상태에 초점을 맞추는 것으로 하며 다음과 같은 내용들을 얘기해 보고자 한다. Java에서 immutable상태가 왜 중요한가? Immutability 상태는 Java 개발 관점에서 보면 매우…

Read More Read More

Java Stream API: Mastering Collectors

Java Stream API: Mastering Collectors

Java에서 Stream을 이용할 때 그 값이 하나의 값이든, Collection이든 또는 배열이든간에 최종 결과값을 산출하게 된다. Java에서 Stream은 Collector들을 통과하면서 어떤 형태의 Container로 변환된다. Java Stream API는 다양 형태의 Collector들을 제공하며 이 글에서 이런 Collector들을 하나씩 살펴보고자 한다. Stream을 Collection으로 변형시키는 것은 광범위한 토픽이라 할 수 있다. 따라서 다양한 툴들이 존재하고 다양한 방법으로 활용하거나 무수한 조합으로 사용할 수 있으므로 언제, 어떻게 사용하는지에 대해 모두 이해하는 것은 현실성이 떨어진다. 활용방법에 대해 좀 더 쉽게 접근할 수 있도록 어떻게 소개할 지 시나리오를 제시하고자…

Read More Read More

Java Stream API: Mastering Reduction Operations

Java Stream API: Mastering Reduction Operations

Java에서 Stream을 다루다 보면 stream에 있는 값들을 하나의 결과 값으로 변환하는 작업들이 흔히 발생한다. stream을 하나의 값으로 reducing하거나 모든 값을 더해 하나의 값으로 취합하는 작업들이 여기에 해당한다. Java Stream API는 이런 일련의 작업들을 효율적으로 할 수 있도록 직관적이면서 강력한 툴을 제공한다. 이 글에서는 코드를 깔끔하게 하고 원하는 성과를 달성할 수 있도록 이런 operation들의 활용 방법에 대해 알아본다. 앞으로 다루게 될 모든 Operation들은 Terminal Operation이라고 하며 Stream을 가공해서 반환될 값으로 변형한 다음 Stream을 Close한다는 의미를 갖고 있다. count method Stream에서 처리하는…

Read More Read More

The C4 model for visualizing software architecture

The C4 model for visualizing software architecture

오랫만에 Software관련 책을 하나 읽었다. 분량이 그리 많지 않은 내용이라 쉽게 읽었다. Software 개발은 항상 문서작성을 포함하는 범주로 나는 정의하고 있다. 왜냐하면 Software는 혼자서 작성하는 일이 거의 없고 공동의 작업결과물이기 때문이다. 공동의 작업은 필수적으로 소통이 따르게 마련이며 이 때의 소통은 Software가 어떻게 만드러지며 어떤 과정을 거쳐 여기까지 왔는지를 표현하기 때문이다. 따라서 이런 소통의 결과물 없이 Software만 얘기한다면 그냥 길가에 굴러 다니는 돌맹이에 불과할 것이다. 우리가 역사적 기념물이나 유적을 만날 때 아는 것 만큼 본다고들 많이 얘기한다. 즉, 내가 얼마만큼 알고…

Read More Read More

Concurrency and parallelism

Concurrency and parallelism

We need to clarify an important point. Concurrency and parallelism are two concepts that are often confused, leading to misunderstandings. Parallel means that two or more tasks are executed at the same time. This is possible only if the CPU supports it, requiring multiple cores to achieve parallelism. However, modern CPUs are typically multi-core, and single-core CPUs are largely outdated and no longer widely used, as they are significantly outperformed by multi-core ones. This shift is because modern applications are designed to…

Read More Read More

알쓸코기: 알아두면 쓸데있는 코딩기술 – Generic

알쓸코기: 알아두면 쓸데있는 코딩기술 – Generic

개발을 하다보면 비슷한 구조나 패턴의 코드가 반복되는 경우를 많이 겪을 것이다. 이런 상황에서 좀더 깔끔하고 간략하게 코드를 정리하고 싶은데 딱히 떠오르지 않는다면 Java의 Generic이 해결책이 될 수 있다. 사실 대부분의 Java 개발자라면 Generic에 대해서 어느정도 알고 있으리라 생각된다. 특히 Collection의 클래스나 Stream의 경우 Generic을 활용하기 때문에 익숙할 것으로 생각된다. 하지만 이런 Generic을 이용하여 템플릿 형태의 메소드나 클래스를 직접 제작하거나 활용하는 경우는 그리 많지 않을 것이다. 이 글에서는 Generic을 활용하여 코드의 간결성과 재사용성을 높이는 방법에 대해 소개하고자 한다. 이전 글에서는 경로탐색을…

Read More Read More