IDL의 최신 버전인 IDL 9.2가 ENVI 6.2와 함께 출시되었습니다. IDL 9.2의 새로운 기능들 및 주요 업데이트 내역들을 간략하게 요약해봅니다.
1. 파이썬(Python) 기본 탑재
이제 IDL에 파이썬(Python)이 기본적으로 탑재됩니다. 즉 IDL 9.2를 설치하면 파이썬도 함께 설치된다는 의미입니다. 기존에는 IDL에서 파이썬 기능을 사용하려면 유저의 PC에 파이썬이 별도로 설치된 상태에서 IDL에서 IDL-파이썬 브릿지(IDL-Python Bridge) 기능을 유저가 직접 셋업하는 과정이 필수였는데, 이제는 브릿지 기능을 셋업할 필요없이 파이썬 기능을 바로 불러서 사용할 수 있게 되었습니다. IDL 9.2에 기본 탑재되는 파이썬은 버전 3.13이며 numpy, pandas, regex 등과 같은 주요 패키지들도 모두 포함됩니다. IDL 9.2에서 파이썬을 바로 불러와서 사용하는 예제를 보면 다음과 같습니다.
IDL> pd = Python.Import('pandas')
% Python is embedded version 3.13.
% Loaded DLM: PYTHON313.
% PYTHON_INIT: C:\Program Files\NV5\IDL92\bin\bin.x86_64\idl-python313.
IDL> dates = pd.date_range("20130101", periods=3)
IDL> df = pd.dataframe(randomu(seed, 4, 3), index = dates, columns = ["A", "B", "C", "D"])
IDL> print, df
A B C D
2013-01-01 0.647128 0.954983 0.171173 0.664392
2013-01-02 0.251179 0.635682 0.986357 0.125033
2013-01-03 0.003626 0.229533 0.639266 0.297249
그리고 유저가 다른 패키지들을 새로 설치하거나 기존에 설치된 패키지를 제거하는 것도 가능합니다. 이를 위해서는 이번에 신규 도입된 PyUtils 클래스를 이용하면 됩니다. 새로운 패키지를 설치할 경우에는 PyUtils 클래스의 PipInstall 메서드를 사용하면 되는데, 예를 들어 Beautiful Soup라는 패키지를 새로 설치하는 경우를 보면 다음과 같습니다.
IDL> PyUtils.PipInstall, 'beautifulsoup4'
Looking in indexes: http://pypi.python.org/simple
Collecting beautifulsoup4
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.13.3
Package beautifulsoup4 successfully installed in C:\Users\myusername\.idl\idl\python_idlx_x.
그리고 만약 유저가 기존에 이미 별도로 설치하여 사용중인 파이썬을 IDL에서 불러와서 사용하고 싶을 경우에는 PyUtils 클래스를 Load 메서드와 함께 사용하면 됩니다.
IDL> PyUtils.Load, 'python313'
물론 기존에 이미 지원되어오던 IDL-파이썬 브릿지 기능도 여전히 사용이 가능합니다.
2. FILE_HASH 함수
이번에 새로 도입된 FILE_HASH 함수는 특정한 파일에 대한 암호화 해쉬(Cryptographic Hash) 값을 계산하여 전달해주는 역할을 합니다. 이것은 파일의 무결성을 체크하는 용도로 사용될 수 있습니다. 세부적으로는 MD5, SHA-1, SHA-2(256 bit), SHA-2(512 bit) 등의 해쉬 알고리즘들을 지원합니다. 사용되는 예제를 보면 다음과 같습니다.
IDL> file = filepath('hdf5_test.h5', subdir=['examples', 'data'])
IDL> print, file_hash(file)
69121a6aa9bc4eed8bdbd668f98d5503
IDL> print, file_hash(file, /SHA256)
74e416059b19e63581f9d8d03266081ed6a9a9a18fa44c2e41709ff7a7c20dba
3. HttpRequest 클래스의 신기능 추가 및 기존 기능 보강
IDL 9.0에서 처음 도입되었던 HttpRequest 클래스에 대하여 Patch 메서드가 새로 추가되었습니다. 기존에 지원되던 Put, Post 메서드들과는 달리 Patch 메서드는 서버상에 이미 존재하는 리소스에 대한 업데이트를 할 수 있게 해줍니다. 사용 예제를 보면 다음과 같습니다.
IDL> data = hash("name", "patched file", "file", "@helloworld.txt")
IDL> response = HttpRequest.Patch('https://httpbin.org/patch', multipart = data)
IDL> response.status
200
IDL> response.json()
{
"args": {
},
"data": "",
"files": {
"file": "Hello World\r\n"
},
"form": {
"name": "patched file"
},
...
}
그리고 Get, Post, Put 메서드에 대하여 FILENAME 키워드가 추가되었습니다. 특히 Get 메서드의 경우 기존에는 데이터만 다운로드를 할 수 있었지만 이제는 FILENAME 키워드를 사용하여 파일을 바로 다운로드할 수 있게 되었습니다. 사용 예제를 보면 다음과 같습니다.
response = HttpRequest.Get( 'https://httpbin.org/patch', $
FILENAME='c:/temp/result.txt')
print, response.status_code
print, file_lines('c:/temp/result.txt')
4. 시리얼 포트(Serial Port) 통신 기능
파이썬 브릿지 기능에 새로 추가된 pyserial 패키지를 사용하여 시리얼 포트와의 통신이 가능하게 되었습니다. 이러한 기능을 사용하려면 먼저 다음과 같은 방식으로 해당 패키지를 설치해야 합니다.
pyutils.pipinstall, 'pyserial'
그 다음에는 기기의 시리얼 포트에 장비를 연결하고 import 메서드를 사용하여 가용한 포트들의 목록을 확인합니다.
serial = Python.import('serial')
ports = Python.import('serial.tools.list_ports')
com_ports = ports.comports()
foreach p, com_ports do print, p.device
만약 기기의 OS가 윈도우즈인 경우에는 COM2, COM3와 같은 정보를 얻게 될 것이고, 리눅스나 Mac OS 머신인 경우에는 /dev/ttyUSB0와 같은 정보를 얻게 될 것입니다. 이와 같이 가용한 포트를 확인한 다음에는 그 포트를 통하여 여러가지 상호작용들을 하면 됩니다. 윈도우즈 머신에 Arduino라는 장비를 연결한 경우에 대한 예제를 보면 다음과 같습니다.
serial = Python.import('serial')
arduino = serial.Serial(port="COM3", baudrate=9600, timeout=0.1)
wait, 2 ; give time to connect
!null = arduino.write(byte("hello"))
wait, 0.05
data = arduino.readline()
print, data
!null = arduino.close()
5. 커맨드 라인 기능 개선 (윈도우즈 OS 한정)
워크벤치 인터페이스가 아닌 커맨드 라인 방식으로 IDL을 사용하는 기능에 대한 개선 사항들이 몇가지 있었습니다. 다만 이러한 개선사항들은 윈도우즈 버전만 해당됩니다. 주요 개선 사항들은 대용량 데이터 처리 퍼포먼스의 향상, 표기되는 텍스트들에 대한 컬러 지원, Tab 키를 사용하는 자동완성 기능 지원 등입니다.

6. SORT 함수에 STABLE 키워드 추가
SORT 함수는 배열에 대하여 원소값들을 오름차순 또는 내림차순으로 정렬하는 역할을 합니다. 그런데 배열 내에 동일한 값들이 존재할 경우 기존의 SORT 함수에서는 이 값들에 대한 순서가 임의로 배정되는 방식으로 처리되어왔습니다. 즉 이러한 예제를 보면 다음과 같습니다.
a = [4.0, 3.5, 7.0, 1.0, 1.1, 7.0, 7.0]
srt = SORT(a)
PRINT, srt
3 4 1 0 5 6 2
기존의 방식에 의하여 산출된 위의 결과를 보면 배열 내에 7.0이라는 값이 3회 중복되는데, 이 값들에 해당되는 인덱스들인 2, 5, 6이 소팅 결과에서는 임의로 5, 6, 2의 순서로 산출되어 있습니다. 그런데 이번에 새로 추가된 STABLE 키워드를 이용하면 원래의 순서에 충실한 결과를 얻을 수 있습니다. 즉 다음과 같이 처리하면 됩니다.
srt_stable = SORT(a, /STABLE)
PRINT, srt_stable
3 4 1 0 2 5 6
이와 같이 SORT 함수를 STABLE 키워드와 함께 사용하면 대상 배열 내에 동일한 값들이 존재할 경우 배열 내의 원래의 순서에 충실한 결과를 얻을 수 있습니다.
< 기타 사항들 >
일단 IDL 9.2의 주목할만한 사항들은 대략 이 정도입니다. 그 외에 자잘하게 변경된 사항들을 목록으로 살펴보면 다음과 같습니다.
(1) ASDF 형식 파일의 지원 기능에 대한 보강
(2) CREATE_STRUCT 함수에 PRESERVE_CASE 키워드 추가
(3) IPM(IDL Package Manager)의 기능 보강
(4) ISA 함수에 STRICT_ARRAY 키워드 추가
(5) 과학기술 상수들(!const)의 값 갱신
(6) 파이썬 브릿지 기능에 GetAttr 메서드 추가
(7) 32비트 이상의 정수 데이터가 수록된 ESRI Shapefile에 대한 정수값 인식 기능 개선
(8) BZIP2 압축 포맷 지원 (BZIP_COMPRESS, BZIP_UNCOMPRESS)
(9) IDL for VSCode의 기능 개선
(10) MAKE_RT 명령에 새로운 키워드들 추가
(11) WIDGET_TABLE 함수의 기능 개선 (스크롤바 표시 유무 제어 기능, 표시값 포맷 일괄 제어 기능 추가)
대략 이상과 같습니다. 그 외의 업데이트 내역 및 지원 OS 등과 같은 더 자세한 정보들은 아래의 링크들의 내용을 함께 참조하시면 됩니다.
Platform and Feature Support for IDL 9.2
그리고 IDL 9.2의 새로운 기능들 중 더 자세히 살펴볼만한 것들에 대해서는 나중에 따로 소개해보도록 하겠습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > General' 카테고리의 다른 글
| Mac OS 및 Linux용 IDL 9.2에서 내장 파이썬 사용 이슈 (1) | 2025.08.18 |
|---|---|
| 과거 게시물들에 대한 재정비 (2) | 2025.05.28 |
| IDL 관련 Q&A 방법 정리 (0) | 2024.11.22 |
| IDL 9.1 출시 (2) | 2024.10.04 |
| IDL 관련 주요 웹 링크 정리 (2024년 6월 현재) (1) | 2024.06.05 |