본문 바로가기

전체 글984

Disk 추가해보자. 리눅스는 /dev 내부에 모든 디바이스 장치를 표현하고 있다. 크게 두 가지로 나누어지며, 블록 디바이스와 캐릭터 디바이스이다. 블록 디바이스는 하드 디스크, CD/DVD, USB 등 블록이나 섹터 단위로 데이터를 전송하는 디바이스이다. 캐릭터 디바이스는 키보드, 마우스, 프린터 등의 입출력 장치로 바이트 단위로 데이터를 전송하는 디바이스이다. b로 시작하는 파일은 블록디바이스며, c로 시작하는 파일은 캐릭터 디바이스이다. /dev 하위 여러 디바이스를 살펴보자. 요즘 hda는 보기 힘들고, 대부분 serial 방식의 디바이스를 사용하기 때문이다. 개수로 a,b,c이며, 1,2,3으로 파티션을 의미하게 된다. sr0은 cd-rom을 의미한다. hda1 - PAPA 방식의 HDD1 (파티션 1) sda1 .. 2023. 6. 13.
hostnamectl hostnamectl은 Linux 시스템의 호스트 이름을 관리하는 데 사용되는 명령줄 도구입니다. 일반적으로 최신 버전의 Ubuntu, Fedora 및 CentOS와 같이 systemd를 사용하는 시스템에서 사용할 수 있습니다. hostnamectl을 사용하면 다음을 포함하여 시스템의 호스트 이름과 관련된 다양한 작업을 수행할 수 있습니다. 현재 호스트 이름 보기: 'hostnamectl'을 사용하여 시스템의 현재 호스트 이름을 표시할 수 있습니다. 호스트 이름 설정: hostnamectl을 사용하면 시스템의 호스트 이름을 설정할 수 있습니다. set-hostname 옵션을 사용하여 새 호스트 이름을 지정할 수 있습니다. 정적 및 임시 호스트 이름 표시: Systemd는 정적 및 임시 호스트 이름의 개념.. 2023. 6. 13.
Linux FileSystem (1) 리눅스 파일 시스템을 공부할 때 POSIX라는 배경을 알면 상당히 도움이 된다. 오늘은 인터페이스 규격인 POSIX와 대부부의 각 파일시스템 구조 그리고 여기에서 사용될 수 있는 다양한 리눅스 명령어를 암기한다. POSIX UNIX는 매우 다양한 형태로 발전되었습니다. 다양한 형태의 UNIX 계열 운영체제가 등장하고 발전해 가면서 운영체제 간의 호환성과 이식성은 매우 어려워졌습니다. 개발자나 서버 엔지니어나 통일된 무언가를 원합니다. 이 욕망은 UNIX 계열 운영체제 간의 이식성을 높이기 위해 80년대 후반에 Portable operation system interface 표준이 탄생했습니다. POSIX는 인터페이스를 정의하는 개념이기에 프로그래머는 약간의 자유를 얻었고 하드웨어, 운영체제 ,공급업체에 .. 2023. 6. 11.
2023년도 6월 시간은 정말 빠른 것 같다. 새로운 회사에서 회사가 하려는 일에 맞는 목표에 맞게 공부 방향을 잡다 보니 내가 계획한 부분 대부분이 밀리고 새로운 계획들이 속속들이 생겨났다. 그러다 보니 중구난방으로 여러 기술을 배우고 지식을 습득하는데, 이는 상당히 비효율적인 것 같다. 한 달을 주마다 나누어 첫째 주는 회사 관련 기술을 습득하는데 집중하고, 둘째 주는 내가 나아가려는 방향에 집중하는 게 어떨까? 회사에서 어떠한 기술과 어떤 지식이 필요할지, 내가 나아가려는 방향에 대해 어떤 지식이 필요할지 우선 정리해 본다. 증강현실, AI, 컴퓨터 비전과 같은 지식이 회사에는 필요하다. 현재는 아닐지라도 미래에 필요해질 가능성이 크다. 이 각 분야는 매우 큰 분야이기에 한 분야에만 몰두해도 시간이 모자라다. 그러면.. 2023. 6. 10.
우분투 개발 환경 구축 C계열 Python Java C언어를 컴파일할 수 있는 환경을 구축해 보자. 우분투에서는 C계열 언어를 지원하기 위해 build-essential이라는 패키지로 묶여 제공되고 있습니다. apt show build-essential Package: build-essential Version: 12.9ubuntu3 Priority: optional Build-Essential: yes Section: devel Origin: Ubuntu Maintainer: Ubuntu Developers Original-Maintainer: Matthias Klose Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 21.5 kB Depends: libc6.. 2023. 6. 10.
AWS Linux AMI AWS의 Linux 배포판 유형을 선택할 때 default 값으로 Amazon Linux AMI를 선택하도록 되어 있는데, 해당 리눅스가 어떤 특징을 가지는지 간략하게 알아보자. 해당 Linux는 Amazon 사에서 개발한 RedHat Enterprise Linux 베이스의 배포판으로 EC2 인스턴스 생성 시 선택 가능한 AMI( Amazon Machine Image) 중에 하나이다. 이 운영 체제는 AWS 인프라에서 최적화되었으며, 안정성과 성능을 갖추고 있습니다. Amazon Linux AMI는 Amazon EC2 인스턴스에서 쉽게 배포하고 사용할 수 있으며, 다양한 애플리케이션을 실행하는 데 필요한 도구와 라이브러리를 제공합니다. 자체적인 Repository를 사용함으로 인해 패키지 설치가 매우 빠.. 2023. 6. 10.
SLAM SLAM(Simultaneous Localization and Mapping)은 로봇이나 차량과 같은 모바일 에이전트가 해당 맵 내에서 자신의 위치를 ​​추정하면서 동시에 환경 맵을 구축할 수 있도록 로봇 공학 및 컴퓨터 비전에 사용되는 기술입니다. SLAM은 자율 시스템이 기존 지도나 외부 현지화 시스템에 의존하지 않고 실시간으로 세계를 탐색하고 상호 작용하는 데 중요합니다. SLAM의 주요 목표는 로봇이 자신의 위치를 ​​정확하게 결정하기 위해 지도가 필요하지만 정확한 지도를 생성하기 위해 자신의 위치도 알아야 하는 "닭과 달걀" 문제를 해결하는 것입니다. SLAM 알고리즘은 센서 측정을 기반으로 로봇의 위치와 환경 지도를 반복적으로 추정하여 이 문제를 해결합니다. 다음은 SLAM 프로세스에 대한 자.. 2023. 6. 7.
itch.io https://itch.io/game-assets Top game assets Find game assets like Mystic Woods - 16x16 Pixel Art Asset Pack, Pixel Art GUI Elements, Sprout Lands - Asset Pack, Modern exteriors - RPG Tileset [16X16], Medieval Fantasy Character Pack on itch.io, the indie game hosting marketplace itch.io itch.io에서는 다양한 에셋들을 무료 혹은 유료로 구매할 수 있다. 2D 게임에서 장애물을 구현하기 위해 몇 자료를 받아 내가 필요한 형태로 가공하려고 한다. 이를 보면 분할된 여러 이미지가 있어.. 2023. 6. 3.
만든 앱을 어떻게 도커를 활용하여 사용해야할까? 서버마다 독립적인 컨테이너로 애플리케이션을 배포하고 구동하는 방법이 필요할 것 같다. 기존에 서버 배포방식을 보면 클라우드 서버를 구매하고, 그 안에 애플리케이션의 필요한 환경을 구성하고, 필요한 프로그램을 다운로드하고 이를 관리하는데 시간도 오래 걸리기 때문에 정해진 이미지를 도커 허브에 구성해 놓고 필요에 따라 이를 빌드하여 사용하는 것이 더욱 효율적인 것 같다. 분명 이로 인해 특정 부분의 트레드 오프가 발생하지만 지금은 이점밖에 보이지 않아서 관련 자료를 더 찾아보아야 할 것 같다. https://nodejs.org/ko/docs/guides/nodejs-docker-webapp Node.js 웹 앱의 도커라이징 | Node.js Node.js® is a JavaScript runtime buil.. 2023. 5. 31.
docker 사용해보기 tip : docker를 쓰지 않으면 용량이 매우 커진다. 따라서 도커를 모두 정리하고 싶다면 docker system prune이라는 명령어로 컨테이너, 이미지, 네트워크를 모두 삭제할 수 있다. 그리고 이 명령어는 실행 중인 컨테이너에 영향을 주지 않는다. docker exec 라는 명령어를 사용한다. 간단하게 redis를 도커에 설치하여 redis cli를 이용하여 redis server에 명령어를 전달해 보자. docker run redis 1:C 30 May 2023 12:20:02.299 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 30 May 2023 12:20:02.299 # Redis version=7.0.7, b.. 2023. 5. 30.
Batch 성능 개선 https://github.com/sungil-yu/exampleBatch/commit/777ca90ddd160d174c14f2474c4b30de8bfc22b0 order statistics & decider · sungil-yu/exampleBatch@777ca90 Show file tree Showing 10 changed files with 241 additions and 1,254 deletions. github.com 다음 코드를 기반으로 성능을 개선하는 포인트를 알아본다. Test를 위한 데이터를 만드는 SaveUserTasklet에서 더 많은 유저를 저장하도록 코드를 변경한다. @Bean public Job userJob() throws Exception { return this.jobBui.. 2023. 5. 29.
Spring Batch Test Code Spring Batch를 테스트를 하는 방법은 버전 별로 구성하는 환경이 다른 것 같지만 4.1 버전 이상을 사용할 것이기 때문에 다음과 같이 구성한다. testImplementation 'org.springframework.batch:spring-batch-test' 4.1 버전 이상에서는 @SpringBatchTest 어노테이션으로 자동 스캔을 통해 batch test의 필수 빈을 의존성 주입해 주는 것이다. 실제 @SpringBatchTest 어노테이션 클래스에서 import문만 봐도 빠르게 이해가 될 것이다. import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.batch.test.JobLauncherTestUt.. 2023. 5. 28.
Batch 예제 최근 Spring Batch에서 제공해 주는 itemWriter와 itemReader, itemProcessor를 통해 chunk 단위의 배치를 연습하는 과정을 진행했다. https://github.com/sungil-yu/exampleBatch GitHub - sungil-yu/exampleBatch: Initial Commit Initial Commit. Contribute to sungil-yu/exampleBatch development by creating an account on GitHub. github.com 이제 csv 파일을 읽고 processor를 필터로 사용하고, 아웃풋 데이터를 db에 저장하고 로그를 찍는 배치를 개발해 본다. 1. Job을 Bean으로 등록한다. 2. Step을 .. 2023. 5. 24.
Spring Batch 아키텍처 괌에서 어제 돌아와서 너무 피곤한 상태입니다. 오늘은 괌을 가기 전에 공부했던 스프링 배치에 대한 아키텍처에 대해 알아보고 왜 다음과 같이 설계되었는지도 알아보려고 합니다. 최근 소프트웨어 설계에 관한 책을 읽으면서 느끼는 것이 설계라는 것이 얼마나 힘들고 많은 고민을 통해 만들어진 것을 체감했습니다. 스프링에서도 여러 개발자가 머리를 맞대고 개발자에게 더 편리한 기능을 좋은 설계를 기반으로 제공하려고 많은 노력을 했기 때문에 이 노력을 엿볼 것입니다. 스프링 배치는 확장성과 diverse group of end users를 염두하고 설계되었다고 합니다. 이러한 설계는 Application, Batch Core, Batch Infrastructure의 세 가지 주요 구성요소를 통해 이야기될 수 있습니다... 2023. 5. 21.
Hellow WebGPU 보호되어 있는 글 입니다. 2023. 5. 15.
Spring Batch about 15 minutes https://spring.io/guides/gs/batch-processing/ Getting Started | Creating a Batch Service A common paradigm in batch processing is to ingest data, transform it, and then pipe it out somewhere else. Here, you need to write a simple transformer that converts the names to uppercase. The following listing (from src/main/java/com/example/batchproces spring.io 스프링 배치 아키텍처를 살펴보기 전에 15분 걸린다는 간단한 스프링 배치 실.. 2023. 5. 14.
Batch란 Batch와 관련된 개발을 한 번도 한 적이 없습니다. 그래서 이를 공부해 보고 실무에서 언제 사용하면 좋을지 판단할 수 있도록 공부를 해보려고 합니다. 이 글의 카테고리는 Spring Batch인데, 이는 스프링 프레임워크에서 배치를 지원하기 위한 API들이 존재하고, 현재까지 실무에서 사용된 프로젝트들이 스프링 부트 애플리케이션으로 배포가 되어있어 Spring Batch 기술에 대해 알아보고 구현해보려고 합니다. 물론 배치는 다양한 기술로 구현할 수 있다는 것을 알고 있어야 합니다. 우선 배치라는 것은 일련의 작업을 한 번에 처리하는 방식을 말합니다. 즉 컴퓨터 자원을 최대한 사용하여 무거운 작업을 일괄로 처리하게 됩니다. 일반적으로 여러 작업을 하나의 그룹으로 묶고, 이 그룹을 한 번에 실행하여 작.. 2023. 5. 14.
Normal Map (2) 보호되어 있는 글 입니다. 2023. 5. 13.
Normal Mapping high frequency polygon mesh를 렌더링 할 때 매우 표면적으로 음영이 드러나 굴곡을 표현하는 것을 볼 수 있다. 사실 이 high frequency는 매우 많은 버텍스를 사용함으로 인해 더 세세하게 표현되는데, 이 약간 울퉁불퉁한 이러한 재질을 어떻게 표현할까? 점 광원이 있다고 하고 각 버텍스에서 점 광원까지의 라이트 벡터를 설정하자. 이 중 난반사를 보면 각 버텍스의 노멀벡터와 라이트 벡터의 각도로 표현할 수 있다. 이를 각 폴리곤 메시의 버텍스에 빛의 세기를 표현하면 오돌토돌한 음영을 만들어 낼 수 있다. 그런데 이렇게 하면 고품질은 되지만 성능과 시간 투자가 많이 필요하다. 그렇다고 이미지 텍스처를 매핑하고 버텍스를 줄이자니 매우 밋밋한 표면이 만들어질 것이다. 시간도 적게들이.. 2023. 5. 13.
Bounding Volumes 3D 그래픽스에서 Bounding Volumes(경계 볼륨)은 객체 또는 그룹의 외곽을 근사적으로 표현하는 기법입니다. 이는 객체의 충돌 감지, 가시성 테스트 및 렌더링 최적화와 같은 작업에서 유용하게 사용됩니다. Bounding Volumes는 다양한 형태로 사용될 수 있으며, 가장 일반적인 형태는 다음과 같습니다. 1. Bounding Box (경계 상자): Bounding Box는 가장 간단한 형태의 경계 볼륨입니다. 이는 3차원 공간에서 객체를 사각형 상자로 근사화하는 방법입니다. 상자의 크기는 최소한의 정보만을 포함하도록 결정되며, 일반적으로 객체의 최소 및 최대 꼭짓점을 둘러싸는 가장 작은 상자로 정의됩니다. 2. Bounding Sphere (경계 구): Bounding Sphere은 객체를.. 2023. 5. 13.
2D 이미지로 입체감을 주는 방법 무한하게 이어지는 배경이미지를 구현하는 개념부터 알아보자. 이는 캐러셀에서 loop를 하는 개념과도 동일하다. 하나의 이미지로는 무한하게 슬라이드 하지 못한다. 따라서 해당 뒤에 이어지거나 루프로 초기화가 될 이미지를 한번 더 붙여줘야 한다. 만약 앞 뒤로 이동하게 된다면 원본 이미지 배열 앞, 뒤에 각각 이어지는 이미지를 준비해 주자. 이를 canvas로 구현하면 다음과 같다. constructor(config){ this.img = config.img; this.speed = config.speed; this.height = App.height; this.width = App.height * (this.img.width / this.img.height); this.leftPos = {x: 0, y: .. 2023. 5. 8.
Antialiasing Transparency는 Antialiasing과 연관이 있다. 안티엘리어싱을 사용할지 말지는 Renderer가 결정한다. gpu 렌더러가 안티엘리어싱을 제공하면 사용할 수 있고 그렇지 않다면 사용하지 못하는 것이다. 여기서 시작하여 어떤 물체가 투명하냐 불투명하냐를 결정하는 것은 Material에서 결정되게 된다. 이 둘은 무슨 관계일까? 그려지는 물체가 투명도가 있으면 원래 그려져 있던 것과 새롭게 그려지는 것을 블렌딩 하는 과정에서 투명도를 어떻게 반영할 것인가를 만들어서 그려냅니다. 이 투명도는 GPU의 블렌딩이 해주어야 합니다. 안티앨리어싱이 없으면 계단현상이 일어난다. 이는 픽셀이 생각보다 크기 때문이다. 해상도가 정말 좋다면 안티앨리어싱을 안 해도 된다. 다만 어찌 됐는 계단현상을 발생할 것.. 2023. 5. 6.
Texture Three.js에서 Texture는 Materia에 붙여서 사용하게 된다. 물체에 그림을 어떻게 입혀야 할까? gemetric modeling과 Texture Mapping이 있다. vertex 하나하나 geometry를 모델링하는 것보다 텍스처를 매핑하는 것이 훨씬 더 효율적이다. geometric 모델링은 각 버텍스 하나하나 마다 색을 할당한다. 얼마나 많은 연산이 일어나야 할까? 대신 texture mapping은 실제 이미지를 표현에 감싸는 식으로 동작한다. 이러한 이미지를 실제로 모델의 어느 부분에 붙여야 하는지 알려주는 행위가 필요하다. 이를 이미지의 uv좌표와 모델의 버텍스 좌표가 어디에 매핑되는지 알려주어야 한다. 다양한 이미지가 있을 수 있다. gray scale, color 등등.. 얻.. 2023. 5. 6.
Light Three.js에서 Light를 추가하면 할수록 성능이 떨어진다. 그 이유는 간단하다. 빛이 하나 있을 때 버텍스에 대해 버텍스 수만큼만 빛을 처리하면 되는데 빛이 여러 개 있는 경우 모든 버텍스에 빛의 수만큼 곱한 연산이 필요하기 때문이다. 그렇기에 빛을 사용할 때 조심해서 사용해야 한다. 기본적인 조명 모델에 대해 알아보자. 1. Light Radiation 네온사인, 태양과 같이 자체적으로 빛을 내는 모델이 있다. 그러면 단색으로 칠하기만 하면 된다. 비슷하게 surface Ambient가 있다. 모든 물체가 이 정도의 에너지를 가진다고 가정하는 것이다. 기본적으로 완전히 빛을 차단하는 것은 지구에서 불가능하다. 난반사로 인해 빛의 세기가 감소하더라도 아주 조금이라도 모든 곳에 닿기 때문이다. 물론.. 2023. 5. 6.
flat, smooth shading 지오메트리의 노말 벡터를 어떻게 주느냐에 따라 결정이 된다. Webgl에서는 geometry안에 각 각의 버텍스마다 노말벡터를 정한다. three.js에서는 필요에 따라 material을 결정하게 된다. three.js에서는 Material에서 falt, smooth shading 설정 값에 따라 각 버텍스의 노말 벡터의 값이 변경되면서 적용됩니다. 예제를 보자. 3개의 구를 만들고 Material은 MeshPhongMaterial을 사용하여 적절한 광원을 계산하도록 한다. Phong Model은 간단하고 빠른 계산을 위해 사용되는 모델이다. 3가지 요소가 있고 이는 diffuse, specular, ambient 값을 계산한다. 그리고 4가지 요소의 벡터를 사용한다. 버텍스의 위치와 버텍스의 노말 벡터.. 2023. 5. 6.
View 보호되어 있는 글 입니다. 2023. 5. 5.
Module 파이썬은 수 많은 모듈이 있다. 모듈에는 함수, 상수 또는 클래스들이 모여져 있는 집합체이다. 모듈? 패키지? 라이브러리? 이를 간단하게 정리하면 다음과 같다. 모듈은 클래스 ,함수, 상수의 집합이라고 하자. 이러한 모듈들이 여러 주제지향적으로 묶여있다고 하자. 이러한 모듈의 집합을 패키지라고 한다. 이러한 패키지들이 여러 개로 모여있고 하나의 큰 분야를 차지하면 라이브러리라고 할 수 있다. 파이썬에서 모듈을 사용하기 위해선 다음과 같은 구문을 사용합니다. import 모듈이름 [as 별칭] 이는 파이썬 모듈을 프로그램 내부에서 사용할 수 있게 네임스페이스에 추가하는 명령어 입니다. 만약 선택적으로 일부 변수와 메서드만 가져오고 싶다면 다음과 같이 한다. from 모듈이름 import 메소드1, [함수/.. 2023. 5. 5.
class 파이썬은 객체지향 프로그래밍을 지원한다. 이를 위해 잠시 객체지향에 대해 매우 짧게 정리하고 파이썬이 이를 위해 어떤 도구를 제공해 주고 이에 대한 문법을 알아보자. 객체지향 객체지향 프로그래밍에 대해 어떻게 정의를 내릴까? 아무것도 몰랐을 때 객체지향은 실세계를 반영하여 복잡한 구조를 현실적으로 쉽고 사람에 이해의 기반하여 유지보수하기 쉽고 실용성 있게 개발하기 위한 방법론이라고 공부했던 기억이 있고 이후 객체지향의 특징과 각 언어마다 제공해 주는 특징을 익히기 바빴다. 이제 와서 다시 생각해 보니 위 설명은 너무나도 추상적이다. 그렇다 객체지향은 매우 추상적 투성이었다. 현실세계를 소프트웨어 세계로 투영한다는 것 자체가 말이 안 된다. 현실세계는 더욱 복잡하고 이를 한계가 있는 기술인 소프트웨어로 설.. 2023. 5. 5.
function 파이썬에서 함수의 형태를 우선 알아보자. def functionName(arg, arg2): 명령 블록 define의 약자인 def의 키워드와 함수이름, 함수 매개변수와 세미콜론으로 정의한다. 그 밑에 탭을 통한 구분밑에 명령블록을 작성하면 된다. 원뿔의 부피를 계산하는 함수를 작성해 보자. 매개 변수에 대한 검증하는 부분은 제외하고 작성하자. def coneVol(radius, height): vol = 1/3 * 3.14 * r ** 2 * h print("부피", vol) 만약 반환값이 있는 경우 혹시 반환타입을 적어주는 문법이 있을까? 내장 함수의 format함수를 사용해 보자. format은 정렬방향, 필드 폭, 소수점 이하 자릿수, 데이터타입을 넣어주면 된다. def coneVol(radius.. 2023. 5. 5.
메모리 동적 할당 지금까지 정적할당만 하였다. 전역변수와 static 변수를 담는 데이터 영역과 지역변수와 매개변수를 담는 스택영역에 대해서만 메모리를 할당하였다. 데이터 영역은 프로그램의 생명주기와 동일하게 할당되고 해제된다. 스택영역은 함수 호출과 종료의 라이프 사이클에 의해 스택영역에 할당되고 종료된다. 즉 이는 프로그램 작성 시점에 기억공간의 할당공간을 어림잡을 수 있다. 정적할당은 쉽게 기억공간을 사용할 수 있고, 에러의 발생 확률을 줄일 수 있다. 하지만 사용하게 될 기억 공간의 크기를 정확히 알지 못하거나, 사용되는 자료의 크기가 각각 차이가 심하다면 우리는 기억공간을 낭비하게 된다. 그렇다면 동적 할당은 왜 하는 걸까? 프로그램 실행 중에 메모리 공간을 사용해야 할 일이 반드시 발생한다. 이 경우 동적으로 .. 2023. 5. 2.