DBeaver로 Oracle XE 21c 접속/계정 생성/테이블 생성하기

이미지
Oracle DB와 연동할 일이 생겼다. XE를 연동 테스트 대상 제품으로 정하고 설치했는데 MariaDB와는 다른 구조라서 조금 헤맸던 경험을 기록한다. XE는 Oracle Database Express Edition을 지칭한다. 무료고, 경량이고 같은 기업용 제품과 같은 엔진을 쓰지만 하드웨어 자원을 사용하는데 제한이 있다고 한다. 1. 설치 후 최고 사용자 설정 우선 설치가 끝나면 Database Configuration Assistant를 실행하여  기존 최초로 생성된 데이터베이스를 설정한다. 데이터베이스 선택에서 계정 설정을 마친 뒤  모두 다음(N) > 을 눌러주면 된다. * TDE 전자지갑 비밀번호는 DB 레벨에서 데이터 암호화 서비스를 위한 비밀번호다. - ... - 접속 모드 > 전용 서버 모드 설정 완료후, Dbeaver로 Oracle 접속을 시도하면 우선 Oracle JDBC Driver를 설치하라는 창이 뜨고 설치해준다. 2. 최초 Connection Database configuration manager에서 데이터베이스 이름을 'XE'로 잡았으므로 최초 접속 시, 아래와 같이 구성한다. - 데이터베이스는 'XE' - Username은 'system' - Role은 Normal - Password는 패스워드 3. PDB 전용 사용자 생성 이렇게 master 또는 system 유저로 구성된 세션에서는 SELECT * FROM ALL_USERS ; 를 통해 오라클 DB에서 생성된 기본 계정들을 열람할 수 있는데 우리는 애플리케이션 서버와 통신하기 위한 전용 사용자를 생성해야한다. 오라클 12c의 멀티테넌트 아키텍처 구조상 컨테이너 데이터베이스(CDB)와 플러그인 데이터베이스(PDB)가 있는데 CDB는 물리적으로 하나의 Oracle 인스턴스를 의미하고 PDB는 논리적으로 독립된 DB로 작동한다. CDB는 여러 개의 PDB를 가지고 공통 사용자 계정이 존재한다. 때문에 CDB에 생성되는 사...

ipTime 라우터/공유기에 연결된 기기에 IPV4가 할당 안 될 때

컴퓨터를 라우터에 LAN 케이블을 연결했고 컴퓨터의 CLI에서 ip addr을 했을 때 이더넷 인터페이스에 ipv4주소가 잘 나옴에도 불구하고 라우터/공유기의 IP목록에 안 뜨는 경우가 있다. (고급설정 > 네트워크 관리 > 내부 네트워크 설정 > 사용중인 IP 주소 정보) DHCP 통신으로 라우터로부터 ipv4주소는 성공적으로 할당 받았으나 "사용중인 IP 주소 정보" 재검색 버튼을 눌러도 갱신이 되지 않는다면 해당 컴퓨터에서 공유기에 PING 신호를 보내어 목록을 갱신할 수 있다. 주로 공유기가 해당 ip대역의 gateway 역할을 하고 xx.xx.xx.1번대를 차지하므로  ping xx.xx.xx.1 의 신호가 Network unreachable만 아니면 정상적으로 갱신된다.

Linux 머신에 꽂은 USB 플래시 드라이브에 어떻게 접근할까?

sudo fdisk -l로 Disk의 위치를 확인가능하다. Device   Start   End   Sectors   Size   Type 내 경우 USB Flash memory를 꽂으면 Disk /dev/sda에 마운팅됨. Disk model을 통해서 이름을 확인할 수 있다. /dev/sda에 있어서 바로 cd로 접근하려고하면 Not a directory라고 뜨는 경우  sudo 권한으로 다음과 같이 체크해주자. sudo umount {드라이브 경로} sudo mount {드라이브 경로} {마운팅 경로} sudo fsck {드라이브 경로} umount를 실행했더니 아직 마운팅 되지 않았다고한다. (*unmount가 아니다. umount임. 하도 틀려서) mount 해주자. 나 같은 경우 바로 프로젝트 폴더에 만들지 않고 /media/폴더에 mkdir로 마운팅 전용 경로를 만들었다. mount를 실행했더니 wrong fs type이라한다. USB에서 사용하는 파일 시스템이 맞지 않아서다. df -h를 실행하면 리눅스 파일 시스템에 뜨지 않는다. sudo fsck /dev/sda를 통해 검사하면 ext2/ext3/ext4 파일 시스템으로 해석할 수 없다고한다. 그리고 Found a dos partition table in /dev/sda라는 메시지를 볼 수 있다. /dev/sda는 디스크 전체를 의미하고 /dev/sda1는 디스크의 일부인 파티션을 의미한다. 나는 파티션에 접근하지 않고 디스크 자체에 접근하려고 했기 때문에 supdblock을 잘못 인식한거다. 자, 그러면 원인은 잘못된 접근 경로였다. 잘 찾아보니 /dev/sda아래에 dev/sda1정보가 있다. 경로를 /dev/sda1로 바꾸고 다시 명령어를 실행하자. df -h를 했더니 /dev/sda1/가 파일시스템에 인식된다! USB는 USB 컨트롤러가 존재하는 기기와 그 반대 기기를 구별할 수 있다. - 전...

wsl 설치 후 창이 곧바로 사라지는 현상 해결

WSL이 실행할 Linux distribution이 안 깔려서 그럼. 깐 뒤에 실행하면 해결됨. wsl.exe --install Ubuntu-26.04

Python 코드에서 ... 의 의미 ( 타입 힌팅 )

Python에서 '...' 문법은 생략 부호라고 부르며 pass의 역할을 한다. pass를 써도 문제 없지만 더 표현이 간결하기 때문에 쓰임. 다음은 python의 system 패키지 __init__.pyi이다.     @ property     def dev_mode ( self ) -> bool : ...     @ property     def utf8_mode ( self ) -> int : ... 위 프로퍼티 데코레이터가 적용된 함수에서 실제 기능은 구현되지 않은 것을 볼 수 있는데 인터페이스를 정의할 때 자주 사용한다. (인터페이스는 상세적인 구현이 없다.) < .pyi 파일에 대해서 > .pyi 파일은 빌트인 모듈이고 Type Stub files를 연다. 빌트인 모듈이라하면은, python 패키지를 설치했을 때(CPython) 자동으로 딸려오게 되는 모듈을 의미한다. 이 파일들은 sys 모듈의 built-on 모듈들이고 단지 함수의 사인과, 변수들만을 표현할 뿐 실제 공식 Python 코드가 없다. (Input/ outpt) & type Hinting 실제 로직은 C에 숨겨져있다. < .py 파일과 .pyi > 그래서 .py파일과 .pyi를 비교해보면 .py는 실제 로직이 구현된 코드고 .pyi는 구현 메뉴얼이라고 보면 된다. -> Python 인터프리터는 실행하지 않는다. 타입 힌트를 적용한 코드를 .py에 구현할 수 있고 또 framework과 pydantic 유저라면 .py에 구현하는 것이 익숙하지만 C 확장 모듈이나 구형 라이브러리에 타입힌팅을 적용할 때,  직접 소스코드에 타입힌팅을 하면 오류가 많아지니까 라이브러리와 별개로 .pyi파일을 같이 제공할 수 있다. 이렇게 하면 type checker 가 .pyi 파일을 먼저 참조한다.   다른 ... syntax 사용례 1. Type hinting: Tupl...

Python 인터프리터가 __path__를 처리하는 법

파이썬의 특수 내장 변수 __name__, __file__  중에 __path__라는 변수가 있다. __name__의 경우 직접 파이썬 인터프리터가 단일 파일을 실행할 때 '__main__' 값을 가진다. 다른 파일에서 import를 통해 모듈을 불러오는 경우 __name__은 원래 파일명을 가진다. __path__는 단일 파일 모듈(.py)에는 존재하지 않고 하위에 __init__.py가 명시된 패키지에만 존재하는 속성이다. 때문에, 단일 파일 모듈에서 __path__에 접근하면 다음과 같은 에러가 raise된다. NameError: name '__path__' is not defined. Did you mean: '__name__'? 파이썬 인터프리터는 패키지가 포함된 폴더를 import를 통해 호출할 때, 1. __path__ 변수를 만들어 __init__.py에 삽입한다. 2. 패키지의 위치를 __path__ 변수에 리스트 형태로 저장한다. 부분적으로 패키지의 하위 모듈을 호출하고 싶을 때 pkgutils.walk_packages(__path__)를 사용하면 모듈들을 탐색할 수 있다.  

CSS : 하드웨어 픽셀 VS 소프트웨어 픽셀

VueJS 프로젝트를 만들고나면 기초 css 파일에 #app의 max-width값이 지정되어 있는 것을 확인할 수 있다. CSS의 미디어 쿼리를 작성할 때는 보통 base가 되는 최상위 컴포넌트의 픽셀값을 따로 명시하지는 않고 HTML의 head 태그 안에 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 를 명시하여 디바이스의 디스플레이 크기에 따라 device-width가 적용되게한다.    CSS는 하드웨어 픽셀 대신 소프트웨어, 즉 , CSS 픽셀을 참조한다. 하드웨어 픽셀은 기기의 디스플레이 스펙 그 자체라고 보면 된다. 디스플레이의 해상도 글에서도 언급했듯이 같은 해상도여도 디스플레이의 크기와 작고 큼에 따라서 화질이 다르게 보인다. CSS픽셀은 DPR을 사용하여 하드웨어 픽셀이 CSS 픽셀값으로 매핑된다. DPR = Device Pixcl Ratio. 갤럭시S22의 경우 DPR값은 3이고 하드웨어 디스플레이의 가로의 픽셀 수가 1080이다. S22에서 크롬 앱 등의 브라우저 앱을 사용할 때, 브라우저는 웹사이트에 1080px 물리 픽셀 값을 DPR값 3으로 나눈 값인 370px을 전달한다. 서버는 이 값을 인식하고 적당한 미디어쿼리 값에 맞는 CSS를 Return한다. 위와 같은 경우 모바일 페이지에 적합한 CSS를 Return 할 것이다. 최종적으로 S22의 웹브라우저에서는 CSS 뷰포트의 가로 길이가 360pixel인 디자인이 페인팅된다.

Unsloth 웹 기반 모델 트레이닝 프로그램 (프로젝트 설명/버그)

Unsloth은 웹 기반 로컬 모델 개발 도구다. 자세한 설명은 아래 링크를 참고. https://unsloth.ai/ 설치  최근 AI 관련 프로젝트 전용 SSD를 추가로 장착하여 C: 경로에 있던 Unsloth를 삭제하고  E: 경로에 재설치하려고 했는데 여전히 공간을 많이 차지 하고 있었다. Unsloth docs에 나와있는 Uninstall 방법은 프로그램만 삭제되고 프로그램을 통해 다운받은 모델 파일은 삭제되지 않는다.   WSL로 설치했을 경우 {home}/.cache/huggingface/에 다운로드 받은 모델들이 저장되어있다. Uninstall 할 때 참고. 버그 2025.5.2 버전으로 업데이트하고나서 한/중/일어가 <textarea>에 입력되지 않는 현상 발생. https://github.com/unslothai/unsloth/issues/5318 일본어 입력이 안 된다고 이슈가 생겼고 같은 IME이슈라 생각해서 나도 한국어 입력 테스트와 환경 정보를 제공했다. 영자와 달리 한국어/중국어/일어의 경우 여러 영자 입력 조합으로 글자가 완성된다. 이들은 영자와 달리 키 하나에 1:1 대응이 안 되므로 먼저 buffer에 저장한 뒤 조합이 완성되면 문자를 input으로 출력한다.  한/영 전환 키를 눌렀을 때부터 입력이 되지 않았다. <한영전환> KeyboardEvent isTruste:true, key:HangulMode, code:'Lang1' <영문 입력> KeyboardEvent isTrusted:true, key: 'k', code: 'KeyK' <한글 입력> TextEvent > textinput isTrusted:true, data: 'ㅎ' key: Process   12시간도 안돼서 수정되었다. https://github.com/unslothai/unsloth/pull/5327 FE > unsloth / studio / fr...

CSS 가상 클래스 대 가상 요소

가상 클래스 (  element: ) pseudo-class 요소에 특정한 이벤트 마다 스타일을 적용할 수 있는 키워드다. 즉, 스타일을 동적으로 입힌다. display: block display: none 처럼  가상 class show를 적용해서 조직으로 변할 때 배치 영향 받지 않게 구성한다,. 가상 요소 / 가상 Element (  element:: ) pseudo-element 요소의 특정한  부분 에 새 컨텐츠를 추가하거나, 선택하는 키워드이다. CSS1, 2 에서는 콜론 :이었으나  CSS3에서 가상 클래스와 구분하기 위해 ::로 표기한다.

구글 Gemma Python 라이브러리 설치 시, OSError 오류 해결법

이미지
구글에서 배포한 Gemma4 경량 모델을 파인튜닝하기 위해 로컬에 환경 구축을 하다가 생긴 에러를 해결하였습니다. 배경 구글에서 배포한 gemma 라이브러리는 gemma 모델을 활용할 뿐 아니라 튜닝하고, 테스트하고, 체크포인팅하는 등 연구용으로 적합하게 사용할 수 있도록 다양한 라이브러리를 포함하고 있다. gemma가 포함하고 있는 오픈소스 라이브러리 중 orbax은 모델 체크포인팅, optax는 Gradient 작업과 관련된 연산, kauldron은 머신러닝 모델을 학습시키기 위한 라이브러리다. JAX라는 파이썬 고성능 수치계산 라이브러리를 알아둘 필요가 있다. gemma가 포함하고 있는 라이브러리들이 JAX에 기반하고 있기 때문이다. 경쟁 라이브러리에는 PyTorch, Tensorflow가 있다.    orbax는 orbax-checkpoint, orbax-export 라는 orbax 네임스페이스를 가진 다른 라이브러리로 이뤄져있다. 본론 Python 버전 3.11 이상 이어야 하기 때문에  Python 3.13의 가상환경에 설치하는데 다음과 같은 에러가 발생했다. [orbax-checkpoint]ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: 'e:\\Users\\...\gemma\\.venv\\Lib\\site-packages\\orbax\\checkpoint\\experimental\\v1\\_src\\testing\\compatibility\\checkpoints\\v0_checkpoints\\composite_checkpoint\\checkpoint_metadata_missing\\pytree_checkpointable_has_metadata\\state\\d\\ea2cd2503f2fab2439cfe73cda290980' HINT: This error might have occurred since this sy...

같은 코드, 다른 기기에서의 뷰포트

이미지
HTML/CSS/JS가 웹 브라우저에서 동작할 때 내 PC와 연결된 디스플레이에서는 정상적인 비율로 나오는데  다른 기기와 연결된 디스플레이에서는 멋대로 비율이 바뀐다던가, 여백 공간이 남는 등의 현상이 발생하고는 한다. 대부분 내 PC와 그 다른 기기의 브라우저 환경이 다르기 때문에 발생한다. 1. 사용자 인터페이스가 다르다. 2. 웹 브라우저 소프트웨어가 다르다. 사용자 인터페이스 차이 예를 들어, PC와 셋톱박스(STB)를 각각 동일한 모니터에 연결한다 했을 때 다음과 같은 두 쌍의 인터페이스가 생성된다. MONITOR-PC = 마우스, 키보드 (스크롤 등으로 무한히 확장 가능한 화면) MONITOR-STB = 모니터, TV (고정된 화면) 사용자 인터페이스가 다르기 때문에 뷰포트 overflow 시, pc 브라우저는 스크롤바, STB 브라우저는 ghost space를 패딩하여 보여준다. 웹 브라우저 소프트웨어 차이 때문에 셋톱박스에서 웹뷰어 프로그램을 사용하여 웹 페이지를 띄운다면 그 웹뷰어 프로그램이 어떤 프로그램의 어떤 버전 기반인지 추적해야한다. 예를 들어, 어떤 A라는 STB의 웹뷰어 프로그램은 Android System WebView는 Google Chromium 기반이며 버전은 Chromium 95.0.4638.74 임을 기록해두는 것이 좋다. 폰트 또한, 폰트 사용에도 유의해야한다. CDN 방식으로 네트워크를 타고 폰트를 다운로드 하는 프로그램이라면 네트워크 구성에 따라 CDN 주소가 막혀서 해당 기기의 기본 폰트가 나올 수도 있기 때문이다. 때문에 설정한 폰트가 제대로 렌더링 되는지 개발자 도구의 computed > rendered fonts에서 직접 확인해줘야한다. 스타일 시트에 폰트 이름이 나온다고 렌더링 되는 것이 아니다. 브라우저 자체 웹 폰트의 경우 클라이언트 프로그램에서 이미 폰트 파일을 가지고 있으므로 네트워크 트래픽이 발생하지 않는다. 서비스하고 있는 제품의 웹 서버에 폰트를 이미 다운로드 해 뒀다면 C...

LCD vs LED vs OLED

옥외 디지털 광고 집행을 위한 필수 구성 요소 디스플레이의 차이에 대해 정리했습니다. 출처는 삼성 디스플레이 뉴스룸. https://news.samsungdisplay.com/ LCD = Liquid Crystal Display LCD에도 여러 타입이 있지만 아래 설명은 기본 타입으로 설명하고 '전압을 가하지 않은 상태에서 빛을 투과시키'는 타입이다. 디스플레이에 출력되는 영상은 " 밝기 "와 " 색 "으로 표현된다. Liquid Crystal, 이하 액정은 액체처럼 유동성을 가지면서 고체처럼 규칙적인 배열을 가진 물질이다. 액정 은 - 빛을 통과시킨다. - 전기 자극을 주면 상태가 변한다. 액정은 " 빛의 투과 정도 "를 조절해서 "액정 표시 장치"라고 불린다. BLU , 이하 백라이트 유닛에서 나가는 빛을 액정의 배열 방식에 따라 통과시키고 그 양을 조절해 디스플레이의 "밝기"와 "색"을 표현한다. LCD는 다음과 같은 계층으로 이루어져있다. ( BLU > 편광판 > TFT > 액정&컬러필터 > 편광판 > 윈도우 ) LCD는 LED와 달리 "스스로 빛을 발하지 않는다." BLU의 백색빛을 이용한다. 백라이트 빛이 편광필름을 통과하면 빛에 방향성 이 부여된다. 액정은 이 방향성이 있는 빛으로 필요한 만큼만 픽셀에 도달할 수 있게  투과되는 빛의 양을 조절한다. 투과된 빛은 컬러필터를 지나면서 색을 표현한다. TFT로 액정을 비트면 빛도 비틀어진다. <TFT> TFT는 박막 트랜지스터 이며 반도체로 이뤄진 전자회로 다. 전류의 흐름을 조절하는 역할을 하며 1.기판 위 전류가 흐를 수 있게 액티브 층 형성 2. 게이트 전압 조절을 통해 source -> drain 으로 전자를 이동시킨다. TFT를 통과한 전류는 LCD의 경우 "액정을 회전시킨다". 즉...

옥외 광고 vs DOOH vs PDOOH

광고 업계 용어 간단 정리. 옥외 광고  옥외 = 건물 밖 광고가 이동하든 고정되어있든 상관없이 건물 밖에 설치하여 많은 사람들에게 노출시키는 광고물. 풍선, 전신주에 붙는 판촉물, 네온 사인 전광판, 미디어 월 등 형태는 다양하다. DOOH = Digital out of home 옥외의 광고이지만 디지털 디스플레이를 활용한 광고가 해당됨. 옥외 광고보다 범위가 좁다. PDOOH = Programmatic Digital out of home 옥외 디지털 디스플레이 광고인데 프로그래밍 로직이 결합된 형태. 단순히 영상을 송출하는 것이 아니라 스케줄링, 추천, 상호작용을 하기도 하고 광고 송출 통계를 기록하기도하고  심지어 광고 등록, 집행까지 할 수 있게 만든 형태. 

Python httpx readtimeout 사례 & 해결법

파이썬의 비동기 http 클라이언트 라이브러리 Httpx에서 발생하는 readtimeout은 HTTPError > TransportError > TimeoutException의 하위 Timeout Exception이다. httpx.TimeoutException은 timeout 에러의 Base class이며 시간 내에 작업이 수행되지 않았을 때 발생한다. Timeout에 해당하는 예외처리 중에 보다 세부적인 케이스로 ConnectTimeout : host에 연결하는 도중 Timeout ReadTimeout      : host로부터 데이터를 받는 도중 Timeout WriteTimeout      : host로 데이터를 보내는 도중 Timeout PoolTimeout       : pool로부터 connection을 얻으려고 대기하는 도중 Timeout 가 있다. Agent를 개발하면서 LLM API를 호출할 때 ReadTimeout을 많이 겪게 된다. host인 LLM API 서버로부터 응답을 기다리다가 발생하는 것인데 host와 client ( https client ) 둘 다 튜닝이 필요하다. host에서는 응답 데이터를 압축한다던가 응답 토큰 수에 제약을 두는 방법을 적용하고 client에서는 https client의 readtimeout 스레시홀드를 늘리는 방법이 유효하다. 다만 client의 readtimeout을 무한정 늘리면 양측에 열린 connection이 계속해서 자원을 점유하기 때문에 LLM API의 응답 데이터를 제한시키는 것이 좋다.  

Python bcrypt를 활용해 비밀번호 hashing 할 때 발생하는 에러.

bcrypt 라이브러리는 패스워드 해싱을 위한 라이브러리다. https://pypi.org/project/bcrypt/ 그런데 프로젝트 설명을 보면 argon2id나 scrypt를 사용하라고 권장하고 있다. 왜 인지는 모른다. 4.3.0 버전에서는 해싱함수가 정상적으로 작동했으나 최신버전은 5.0.0에서는 다음과 같은 ValueError가 발생한다. ValueError: password cannot be longer than 72 bytes, truncate manually if necessary 프로젝트 Changelog를 보면 다음과 같이 나와있다. hashpw에 전달되는 패스워드가 72바이트보다 길면 ValueError를 일으키도록 되어있다. 이전까지는 Error를 Raise하지 않고 라이브러리 내에서 truncate해서 return했다고 한다. (OpenBSD의 bcrypt 구현) Python 3.14 환경을 사용해야하는 제약이 없다면 4.3.0으로 다운그레이드하거나 직접 ValueError를 핸들링해주는 방법이 있겠다. ====================================================== 여담으로 본래 고속 연산 작업을 하기 위해 C로 작성된 소스코드가 컴파일된 .so 형태로 존재했고 CFFI ( C Foreign Function Interface )가 python <-> c간의 인터페이스 변환 역할을 했다. 그러나 현대에 이 라이브러리는 최신버전 4.0.0 이후 보안성과 메모리 안전성을 위해 Rust로 작성하였고 (.rs) src/lib.rs에서 그 흔적을 찾아볼 수 있다. PyO3라는 라이브러리를 통해 Rust와 Python 소스코드를 바인딩하고 Rust 컴파일러인 rustc가 기계어 파일로 컴파일 한다. 본문에서 말한 hashpw 함수는 lib.rs 소스코드의  68 ~ 138에 해당한다. 해당 소스코드에서는 let hashed = py .detach(|| bcrypt::ha...

방송/영상 표준 해상도

모니터 디스플레이 (16:9) HD         1280 x 720         1k=1000 FHD       1920 x 1080       2k QHD      2560 x 1440         3k UHD      3840 x 2160       4k DCI 규격 영화 스크린 Digital Cinema Initiatives 할리우드 스튜디오들이 디지털 영화 상영을 위해 정의한 기술 규격 2048 x 1080     DCI 2K FULL 4096 x 2160      DCI 4K Full . . . . .

Before coding in Spring framework

오래된 Spring framework 코드를 유지보수 할 일이 생겼다. 여타 웹 애플리케이션 프레임워크가 그렇듯, http request-response를 다루니까 크게 코드를 읽는 데 불편하지는 않았다. 그러나 애플리케이션 로직이 java 문법으로 작성된 만큼  java 개발 생태계를 익혀야 할 필요성을 느껴 간략하게 상기하는 차원에서 특별한 순서 없이 작성하였음. =============================================================== JAVA  JAVA'S Editions  java에는 여러가지 에디션이 있는데 1. java SE (J2SE) : 표준 에디션 2. jakarta EE(J2EE , 구 java EE) : 서버 페이지에 특화 3. java ME (J2ME) : 임베디드 환경에 특화 / 경량 등이 있다. 프로그램을 제작할 때, 사용 환경에 따라 적합한 유형의 java를 선택하여 개발할 수 있다. JSP HTML 페이지를 동적으로 생성하기 위한 파일. JSP Template은 Java Servlet 코드로 변환된다. HTML page에 Java 코드가 포함된 꼴을 띄고 있다. 최근엔 JS, JS 프레임워크에 비해 밀리는 추세. 동적 HTML page 생성 vs  AJAX 서버 사이트 스크립트 언어를 사용해서 HTML Page를 동적으로 만드는 것이 줄고 있음. 왜냐하면 현대에는 API를 사용하여 서버 자원에 접근을 하고(DB, File) 화면에 보여주는 UI는 HTML/CSS/JS를 사용한다. 따라서 client <-> server 간 통신이 필요하고 XHR, XML HttpRequest를 사용한다. 이런 프로그래밍 기법을 AJAX라함. .java 소스코드의 컴파일  프로그래머가 작성한 .java 소스 코드는 Javac 컴파일러에 의해 .class코드로 변환되고 windows / linux / mac 환경에 각각 깔린 jvm에 의해 해당 시스템의 기계어...

미술 작품 촬영과 Tiff 확장자 파일

이미지
미술 작품의 디지털화, 아카이빙 사물들은 어떤 조명을 받는 지에 따라서 반사해내는 빛의 다르다. 미술관, 전시관에 가면 작품에 조사하는 조명이 중요한데 조명에 따라 보이는 색이 다르기 때문이다. 조명에 따라 관객이 다르게 받아들일 수 있다. 작품 본연의 색깔이라고하면은 보통 백색광을 조사했을 때 반사되는 빛을 말한다. 미술 작품들을 촬영 후 디지털화 하여 저장할 때 바로 TIFF 확장자 파일이 등장한다. - 촬영 미술 작품을 촬영할 때는  국제 표준 인증을 충족하는 촬영 환경이 전제되어야 높은 색채 정확도와 원본에 가깝게 재현력을 확보할 수 있다. - 저장 디지털화 된 파일은 원본에 가깝게 유지해야하므로 손실 압축 방식인 JPG보다는 PNG가 선호된다. TIFF는 여기서 한 발 더 나아가 채널 당 저장할 수 있는 색상 깊이가 PNG에 비해 더 높다. (PNG: 1채널에 16비트, TIFF : 1채널에 32비트) 보편적인 이미지-뷰어 프로그램들은 대부분 JPG, PNG, GIF 등의 이미지를 지원하지만 전문가용 카메라로부터 추출된 RAW 파일, TIFF 파일등은 전문 사진 편집용 프로그램에서만 열 수 있는 경우가 많다. 디지털화 된 미술 작품의 출력 이제 아카이빙 된 파일을 복합기, 인쇄기를 통해 출력한다고 가정하자. PNG로 저장된 작품을 인쇄할 때와 TIFF로 저장된 작품을 인쇄할 때의 질이 확연히 다르다. 주로 웹 상에서 DID, 모니터 장치에 RGB로 출력되는 JPG의 경우 중복된 영역을 탐지하여 일부 정보 손실을 감안하고 압축하여 저장한다. PNG의 경우 무손실 압축방식이지만 CMYK가 지원되지 않으며 색상 정보가 상대적으로 TIFF보다 적다. TIFF는 RGB, CMYK모두 지원되며 색상정보가 풍부한 무손실 포맷이다.

데이터 연구 분야, 기술 통계 vs 추측 통계

이미지
기술 통계 이미 보유하고 있는 데이터에 대해 분석한다. 있는 그대로 요약, 정리, 시각화하여 데이터의 특성을 도출한다. 보유하고 있는 데이터의 모집단과 같이 데이터의 범위를 확장하여 추정하지 않고 가지고 있는 데이터에만 집중한다. 가지고 있는 데이터 그대로의 특성을 분석하므로 불확실성이나 오차와 같은 개념이 없다. 추측 통계 작은 표본을 가지고 전체의 특성을 유추한다. 전수 조사가 불가능할 때 데이터의 일부만 가지고 전체의 특성을 추정하므로 오차가 필연적으로 발생하고 - 확률 - 신뢰 구간 - 예측 모델의 개념이 추가된다. 예측 모델은 과거의 표본을 분석하여 수학적 패턴을 찾아낸다. 대표적인 통계적 모델은 회귀 분석 모델, 로지스틱 회귀, 시계열 분석 모델(ARIMA) 등이 있다. 머신러닝 모델 vs 통계적 모델 통계적 모델들은 수학적인 패턴이 존재하기 때문에 왜 그런 결과가 나왔는지 해석이 가능하다. 최신 머신러닝/딥러닝 모델은 결과에 대한 설명보다는 **"결과를 얼마나 잘 맞히는지(정확도)"**에 올인하기 때문에 속을 알 수 없는 복잡한 구조(블랙박스)인 경우가 많다.

데이터 연구 분야 시뮬레이션 vs 최적화

이미지
시뮬레이션 예시 그림의 유체 역학과 같은 물리적 상호작용을 보여주는 시각적 프로그램 뿐 아니라 현실과 가깝게 만든 모델 을 제작한 뒤 여러 변수를 대입 하여 실험해 보는 행위가 모두 시뮬레이션에 속한다. 가상의 네트워크를 만들어서 네트워크 트래픽을 시뮬레이팅 할 수도 있고 가상의 주식 시장을 만들어서 시장의 변동성을 시뮬레이팅 할 수도 있다. 불확실성이 많은 현실 세계의 도메인에서 시스템의 동작과 흐름을 모방하여 미래를 예측하고 이해한다. 결국 시뮬레이션도 미래를 예측하고 이해하기 위해 사용한다. 이 모델에서 조건을 바꾸면 어떤 일이 일어날 지를 관찰한다. 최적화 목표를 달성하기 위한 가장 좋은   방법 을 찾는다. 방법이라고하면 최소값 or 최대값의 해답을 의미한다. 꼭 값 하나로 귀결 되는 것은 아니며 단일 스칼라 값 외에도 스케줄, 경로, 벡터 행렬 등으로도 표현될 수 있다. 방법을 찾기 위 전제되어야 할 조건은 목표가 명확해야 한다는 것이다. 시뮬레이션과 최적화 최적화 과정을 통해 후보 해를 도출하고 시뮬레이션으로 검증하여 사용한다.

이 블로그의 인기 게시물

Blogger 커스터마이징 : CSS 수정 (sticky-header)

Vue 첫 걸음

Python의 빌트인 class들의 관계