

# Athena 노트북 편집기 사용
<a name="notebooks-spark-editor"></a>

**참고**  
Athena 노트북 편집기는 Pyspark 엔진 버전 3에서 지원됩니다. Apache Spark 버전 3.5에서 노트북을 사용하려면 [SageMaker 노트북](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/what-is-sagemaker-unified-studio.html)을 참조하세요.

Athena 노트북 탐색기에서 노트북을 관리하고 Athena 노트북 편집기를 사용하여 세션에서 노트북을 편집하고 실행할 수 있습니다. 요구 사항에 따라 노트북 세션에 대한 DPU 사용을 구성할 수 있습니다.

노트북을 중지하면 연결된 세션이 종료됩니다. 모든 파일이 저장되지만 선언된 변수, 함수 및 클래스에서 진행 중인 변경 사항은 손실됩니다. 노트북을 다시 시작하면 노트북 파일이 다시 로드되고 코드를 다시 실행할 수 있습니다.

Athena 노트북 편집기는 코드를 작성하고 실행하기 위한 대화형 환경입니다. 다음 단원에서는 환경의 기능에 대해 설명합니다.

## 노트북 세션 및 계산 이해
<a name="notebooks-spark-sessions-and-calculations"></a>

각 노트북은 단일 Python 커널과 연결되고 Python 코드를 실행합니다. 노트북에는 명령을 포함하는 셀이 하나 이상 존재할 수 있습니다. 노트북에서 셀을 실행하려면 먼저 노트북에 대한 세션을 생성합니다. 세션에서는 노트북의 변수 및 상태를 추적합니다.

노트북에서 셀을 실행한다는 것은 현재 세션에서 계산을 실행하는 것을 의미합니다. 계산은 노트북의 상태를 진행하며 Amazon S3에서 읽기, 다른 데이터 스토어에 쓰기와 같은 작업을 수행할 수 있습니다. 세션이 실행 중인 동안 계산을 통해 노트북에 대해 유지되는 상태를 사용 및 수정합니다.

상태가 더 이상 필요 없는 경우 세션을 종료할 수 있습니다. 세션을 종료하면 노트북은 그대로 유지되지만 변수 및 기타 상태 정보는 삭제됩니다. 여러 프로젝트를 동시에 진행해야 하는 경우 프로젝트별로 하나의 세션을 생성할 수 있으며, 세션은 서로 독립적입니다.

세션에는 DPU로 측정되는 전용 컴퓨팅 용량이 있습니다. 세션을 생성할 때 세션에 여러 DPU를 할당할 수 있습니다. 작업 요구 사항에 따라 세션마다 용량이 다를 수 있습니다.

## 명령 모드와 편집 모드 간 전환
<a name="notebooks-spark-command-mode-vs-edit-mode"></a>

노트북 편집기에는 셀에 텍스트를 입력하는 편집 모드와 복사, 붙여넣기 또는 실행과 같은 명령을 편집기 자체에 실행하는 명령 모드라는 모달 사용자 인터페이스가 있습니다.

편집 모드와 명령 모드를 사용하려면 다음 작업을 수행할 수 있습니다.
+ 편집 모드로 전환하려면 **ENTER** 키를 누르거나 셀을 선택합니다. 셀이 편집 모드에 있는 경우 셀의 왼쪽 여백이 녹색으로 표시됩니다.
+ 명령 모드로 전환하려면 **ESC** 키를 누르거나 셀 외부를 클릭합니다. 일반적으로 명령은 모든 셀이 아닌 현재 선택한 셀에만 적용됩니다. 편집기가 명령 모드에 있는 경우 셀의 왼쪽 여백이 파란색으로 표시됩니다.
+ 명령 모드에서는 키보드 바로 가기와 편집기 위의 메뉴를 사용할 수 있지만 개별 셀에 텍스트를 입력할 수는 없습니다.
+ 셀을 선택하려면 해당 셀을 선택합니다.
+ 모든 셀을 선택하려면 **Ctrl\$1A**(Windows) 또는 **Cmd\$1A**(Mac) 키를 누릅니다.

## 노트북 편집기 메뉴에서 작업 사용
<a name="notebooks-spark-notebook-editor-menu"></a>

노트북 편집기 상단의 메뉴에 있는 아이콘은 다음 옵션을 제공합니다.
+ **저장** - 노트북의 현재 상태를 저장합니다.
+ **아래에 셀 삽입** - 현재 선택한 셀 아래에 새 (빈) 셀을 추가합니다.
+ **선택한 셀 잘라내기** - 선택한 셀을 현재 위치에서 제거하고 셀을 메모리에 복사합니다.
+ **선택한 셀 복사** - 선택한 셀을 메모리에 복사합니다.
+ **아래에 셀 붙여넣기** - 복사한 셀을 현재 셀 아래에 붙여넣습니다.
+ **선택한 셀을 위로 이동** - 현재 셀을 위 셀 위로 이동합니다.
+ **선택한 셀을 아래로 이동** - 현재 셀을 아래 셀 아래로 이동합니다.
+ **실행** - 현재 (선택한) 셀을 실행합니다. 출력은 현재 셀 바로 아래에 표시됩니다.
+ **모두 실행** - 노트북의 모든 셀을 실행합니다. 각 셀에 대한 출력은 셀 바로 아래에 표시됩니다.
+ **중지(커널 중단)** - 커널을 중단하여 현재 노트북을 중지합니다.
+ **서식 옵션** - 다음 중에서 셀 서식을 선택합니다.
  + **코드** - Python 코드에 사용합니다(기본값).
  + **마크다운** - [GitHub 스타일 마크다운](https://docs.github.com/en/get-started/writing-on-github) 형식으로 텍스트를 입력하는 데 사용합니다. 마크다운을 렌더링하려면 셀을 실행합니다.
  + **원시 NBConvert** - 수정되지 않은 형식으로 텍스트를 입력하는 데 사용합니다. **Raw NBConvert**(원시 NBConvert)로 표시된 셀은 Jupyter [nbconvert](https://nbconvert.readthedocs.io/en/latest/usage.html) 명령줄 도구를 사용하여 HTML과 같은 다른 형식으로 변환할 수 있습니다.
+ **머리글** - 셀의 머리글 수준을 변경하는 데 사용합니다.
+ **명령 팔레트** - Jupyter Notebook 명령과 키보드 바로 가기를 포함합니다. 키보드 바로 가기에 대한 자세한 내용은 이 문서의 뒷부분에 나오는 단원을 참조하세요.
+ **세션** - 이 메뉴의 옵션을 사용하여 세션에 대한 세부 정보를 [보거나](notebooks-spark-getting-started.md#notebooks-spark-getting-started-viewing-session-and-calculation-details), [세션 파라미터를 편집하거나](notebooks-spark-getting-started.md#notebooks-spark-getting-started-editing-session-details), 세션을 [종료](notebooks-spark-getting-started.md#notebooks-spark-getting-started-terminating-a-session)할 수 있습니다.

## 명령 모드 키보드 단축키를 사용하여 생산성 향상
<a name="notebooks-spark-command-mode-keyboard-shortcuts"></a>

다음은 몇 가지 일반적인 노트북 편집기 명령 모드 키보드 바로 가기입니다. 이 바로 가기는 **ESC** 키를 눌러 명령 모드로 전환한 이후에 사용할 수 있습니다. 편집기에서 사용할 수 있는 전체 명령 목록을 보려면 **ESC \$1 H**를 누르세요.


****  

| 키 | 작업 | 
| --- | --- | 
| 1 - 6 | 셀 유형을 마크다운으로 변경하고 머리글 수준을 입력한 숫자로 설정합니다. | 
| a | 현재 셀 위에 셀 생성 | 
| b | 현재 셀 아래에 셀 생성 | 
| c | 현재 셀을 메모리에 복사 | 
| d d | 현재 셀 삭제 | 
| h | 키보드 바로 가기 도움말 화면 표시 | 
| j | 한 셀 아래로 이동 | 
| k | 한 셀 위로 이동 | 
| m | 현재 셀 형식을 마크다운으로 변경 | 
| r | 현재 셀 형식을 원시로 변경 | 
| s | 노트북 저장 | 
| v | 현재 셀 아래에 메모리 내용 붙여넣기 | 
| x | 선택한 셀 잘라내기 | 
| y | 셀 형식을 코드로 변경 | 
| z | 실행 취소 | 
| Ctrl\$1Enter  | 현재 셀을 실행하고 명령 모드로 전환 | 
| Shift\$1Enter 또는 Alt\$1Enter | 현재 셀을 실행하고 출력 아래에 새 셀을 생성한 다음 편집 모드에서 새 셀 입력 | 
| Space | 한 페이지 아래로 이동 | 
| Shift\$1Space | 한 페이지 위로 이동 | 
| Shift \$1 L | 셀에서 행 번호 표시 여부 전환 | 

## 명령 모드 단축키 사용자 지정
<a name="notebooks-spark-editing-command-mode-shortcuts"></a>

노트북 편집기에는 명령 모드 키보드 바로 가기를 사용자 지정하는 옵션이 있습니다.

**명령 모드 바로 가기를 편집하려면**

1. 노트북 편집기 메뉴에서 **Command palette**(명령 팔레트)를 선택합니다.

1. 명령 팔레트에서 **Edit command mode keyboard shortcuts**(명령 모드 키보드 바로 가기 편집) 명령을 선택합니다.

1. **Edit command mode shortcuts**(명령 모드 바로 가기 편집) 인터페이스를 사용하여 원하는 명령을 키보드에 매핑하거나 다시 매핑합니다.

   명령 모드 바로 가기 편집 지침을 보려면 **Edit command mode shortcuts**(명령 모드 바로 가기 편집) 화면의 아래쪽으로 스크롤하세요.

Athena for Apache Spark에서 매직 명령을 사용하는 방법에 대한 자세한 내용은 [매직 명령 사용](notebooks-spark-magics.md) 섹션을 참조하세요.

**Topics**
+ [노트북 세션 및 계산 이해](#notebooks-spark-sessions-and-calculations)
+ [명령 모드와 편집 모드 간 전환](#notebooks-spark-command-mode-vs-edit-mode)
+ [노트북 편집기 메뉴에서 작업 사용](#notebooks-spark-notebook-editor-menu)
+ [명령 모드 키보드 단축키를 사용하여 생산성 향상](#notebooks-spark-command-mode-keyboard-shortcuts)
+ [명령 모드 단축키 사용자 지정](#notebooks-spark-editing-command-mode-shortcuts)
+ [매직 명령 사용](notebooks-spark-magics.md)

# 매직 명령 사용
<a name="notebooks-spark-magics"></a>

매직 명령 또는 매직은 노트북 셀에서 실행할 수 있는 특수 명령입니다. 예를 들어 `%env`는 노트북 세션의 환경 변수를 표시합니다. Athena IPython 6.0.3에서 매직 함수를 지원합니다.

이 섹션에서는 Athena for Apache Spark에서 몇 가지 주요 매직 명령을 보여줍니다.
+  Athena의 매직 명령 목록을 보려면 노트북 셀에서 **%lsmagic** 명령을 실행합니다.
+ Athena 노트북에서 매직을 사용하여 그래프를 생성하는 방법에 대한 자세한 내용은 [매직으로 데이터 그래프 만들기](notebooks-spark-magics-graphs.md) 섹션을 참조하세요.
+ 추가 매직 명령에 대한 자세한 내용은 IPython 설명서의 [Built-in magic commands](https://ipython.readthedocs.io/en/stable/interactive/magics.html)를 참조하세요.

**참고**  
현재 `%pip` 명령을 실행하면 실패합니다. 이는 알려진 문제입니다.

**Topics**
+ [셀 매직](notebooks-spark-magics-cell-magics.md)
+ [행 매직](notebooks-spark-magics-line-magics.md)
+ [그래프 매직](notebooks-spark-magics-graphs.md)

# 셀 매직 사용
<a name="notebooks-spark-magics-cell-magics"></a>

여러 줄로 기록되는 매직은 앞에 이중 퍼센트 기호(`%%`)가 붙고 셀 매직 함수 또는 셀 매직이라고 합니다.

## %%sql
<a name="notebooks-spark-magics-sql"></a>

이 셀 매직을 사용하면 Spark SQL 문으로 장식하지 않고도 SQL 문을 직접 실행할 수 있습니다. 또한 이 명령은 반환된 데이터 프레임에서 암시적으로 `.show()`를 직접 호출하여 출력을 표시합니다.

![\[%%sql 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-1.png)


이 `%%sql` 명령은 열 출력을 20자 너비로 자동으로 잘라냅니다. 현재 이 설정은 구성할 수 없습니다. 이 제한 사항을 해결하려면 다음 전체 구문을 사용하고 `show` 메서드의 파라미터를 적절히 수정합니다.

```
spark.sql("""YOUR_SQL""").show(n=number, truncate=number, vertical=bool)
```
+ **n** `int`, 선택 사항. 표시할 행 수입니다.
+ **잘라내기** - `bool` 또는 `int`, 선택 사항 - `true`인 경우 20자보다 긴 문자열을 자릅니다. 1보다 큰 숫자로 설정하면 긴 문자열을 지정된 길이만큼 자르고 셀을 오른쪽 정렬합니다.
+ **vertical** - `bool`, 선택 사항. `true`인 경우 출력 행을 세로로 인쇄합니다(열 값당 한 줄).

# 행 매직 사용
<a name="notebooks-spark-magics-line-magics"></a>

한 줄로 된 매직은 앞에 퍼센트 기호(`%`)가 붙고 행 매직 함수 또는 행 매직이라고 합니다.

## %help
<a name="notebooks-spark-magics-help"></a>

사용 가능한 매직 명령에 대한 설명을 표시합니다.

![\[%help 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-2.png)


## %list\$1sessions
<a name="notebooks-spark-magics-list_sessions"></a>

노트북과 관련된 세션을 나열합니다. 각 세션의 정보에는 세션 ID, 세션 상태, 세션 시작 및 종료 날짜와 시간이 포함됩니다.

![\[%list_sessions 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-3.png)


## %session\$1id
<a name="notebooks-spark-magics-session_id"></a>

현재 세션 ID를 검색합니다.

![\[session_id 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-4.png)


## %set\$1log\$1level
<a name="notebooks-spark-magics-set_log_level"></a>

지정된 로그 수준을 사용하도록 로거를 설정하거나 재설정합니다. 가능한 값은 `DEBUG`, `ERROR`, `FATAL`, `INFO` 및 `WARN` 또는 `WARNING`입니다. 값은 대문자여야 하며 작은따옴표 또는 큰따옴표로 묶지 않아야 합니다.

![\[%set_log_level 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-5.png)


## %status
<a name="notebooks-spark-magics-status"></a>

현재 세션을 설명합니다. 출력에는 세션 ID, 세션 상태, 작업 그룹 이름, PySpark 엔진 버전 및 세션 시작 시간이 포함됩니다. 이 매직 명령에서는 세션 세부 정보를 검색하려면 활성 세션이 필요합니다.

다음은 상태에 대해 가능한 값입니다.

**작성 중** - 리소스 획득을 포함하여 세션을 시작하는 중입니다.

**작성됨** - 세션이 시작되었습니다.

**유휴** - 세션에서 계산을 수락할 수 있습니다.

**사용 중** - 세션이 다른 작업을 처리 중이며 계산을 수락할 수 없습니다.

**종료 중** - 서비스가 종료되는 중입니다.

**종료됨** - 세션과 해당 리소스가 더 이상 실행 중이 아닙니다.

**성능 저하됨** - 세션에 정상 상태의 코디네이터가 없습니다.

**실패** - 장애로 인해 세션과 해당 리소스가 더 이상 실행 중이 아닙니다.

![\[%status을 사용 중입니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-6.png)


# 매직으로 데이터 그래프 만들기
<a name="notebooks-spark-magics-graphs"></a>

이 섹션의 행 매직은 그래프 생성 라이브러리와 함께 사용하거나 특정 유형의 데이터에 대한 데이터를 렌더링하는 데 특화되어 있습니다.

## %table
<a name="notebooks-spark-magics-graphs-table"></a>

`%table` 매직 명령을 사용하여 데이터 프레임 데이터를 테이블 형식으로 표시할 수 있습니다.

다음 예제에서는 2개 열과 3개 행의 데이터로 구성된 데이터 프레임을 생성하고 해당 데이터를 테이블 형식으로 표시합니다.

![\[%table 매직 명령 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-graphs-1.png)


## %matplot
<a name="notebooks-spark-magics-graphs-matplot"></a>

[Matplotlib](https://matplotlib.org/)는 Python으로 정적, 애니메이션 및 대화형 시각화를 생성하기 위한 포괄적인 라이브러리입니다. matplotlib 라이브러리를 노트북 셀로 가져온 후 `%matplot` 매직 명령을 사용하여 그래프를 생성할 수 있습니다.

다음 예제에서는 matplotlib 라이브러리를 가져와서 x 및 y 좌표 세트를 생성한 후 `%matplot` 매직 명령을 사용하여 점의 그래프를 생성합니다.

```
import matplotlib.pyplot as plt 
x=[3,4,5,6,7,8,9,10,11,12] 
y= [9,16,25,36,49,64,81,100,121,144] 
plt.plot(x,y) 
%matplot plt
```

![\[%matplot 매직 명령 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-graphs-2.png)


### matplotlib 및 seaborn 라이브러리 함께 사용
<a name="notebooks-spark-magics-graphs-using-the-matplotlib-and-seaborn-libraries-together"></a>

[Seaborn](https://seaborn.pydata.org/tutorial/introduction)은 Python으로 통계 그래프를 생성하기 위한 라이브러리입니다. matplotlib를 기반으로 구축되며 [pandas](https://pandas.pydata.org/)(Python 데이터 분석) 데이터 구조와 긴밀하게 통합됩니다. `%matplot` 매직 명령을 사용하여 seaborn 데이터를 렌더링할 수도 있습니다.

다음 예제에서는 matplotlib 라이브러리와 seaborn 라이브러리를 모두 사용하여 간단한 막대 그래프를 생성합니다.

```
import matplotlib.pyplot as plt 
import seaborn as sns 

x = ['A', 'B', 'C'] 
y = [1, 5, 3] 

sns.barplot(x, y) 
%matplot plt
```

![\[%matplot을 사용하여 seaborn 데이터를 렌더링합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-graphs-3.png)


## %plotly
<a name="notebooks-spark-magics-graphs-plotly"></a>

[Plotly](https://plotly.com/python/)는 대화형 그래프를 생성하는 데 사용할 수 있는 Python용 오픈 소스 그래프 생성 라이브러리입니다. `%ploty` 매직 명령을 사용하여 ploty 데이터를 렌더링합니다.

다음 예제에서는 주가 데이터에서 [StringIO](https://docs.python.org/3.13/library/io.html#io.StringIO), plotly 및 pandas 라이브러리를 사용하여 2015년 2월과 3월의 주식 활동에 대한 그래프를 생성합니다.

```
from io import StringIO 
csvString = """ 
Date,AAPL.Open,AAPL.High,AAPL.Low,AAPL.Close,AAPL.Volume,AAPL.Adjusted,dn,mavg,up,direction 
2015-02-17,127.489998,128.880005,126.919998,127.830002,63152400,122.905254,106.7410523,117.9276669,129.1142814,Increasing 
2015-02-18,127.629997,128.779999,127.449997,128.720001,44891700,123.760965,107.842423,118.9403335,130.0382439,Increasing 
2015-02-19,128.479996,129.029999,128.330002,128.449997,37362400,123.501363,108.8942449,119.8891668,130.8840887,Decreasing 
2015-02-20,128.619995,129.5,128.050003,129.5,48948400,124.510914,109.7854494,120.7635001,131.7415509,Increasing 
2015-02-23,130.020004,133,129.660004,133,70974100,127.876074,110.3725162,121.7201668,133.0678174,Increasing 
2015-02-24,132.940002,133.600006,131.169998,132.169998,69228100,127.078049,111.0948689,122.6648335,134.2347981,Decreasing 
2015-02-25,131.559998,131.600006,128.149994,128.789993,74711700,123.828261,113.2119183,123.6296667,134.0474151,Decreasing 
2015-02-26,128.789993,130.869995,126.610001,130.419998,91287500,125.395469,114.1652991,124.2823333,134.3993674,Increasing 
2015-02-27,130,130.570007,128.240005,128.460007,62014800,123.510987,114.9668484,124.8426669,134.7184854,Decreasing 
2015-03-02,129.25,130.279999,128.300003,129.089996,48096700,124.116706,115.8770904,125.4036668,134.9302432,Decreasing 
2015-03-03,128.960007,129.520004,128.089996,129.360001,37816300,124.376308,116.9535132,125.9551669,134.9568205,Increasing 
2015-03-04,129.100006,129.559998,128.320007,128.539993,31666300,123.587892,118.0874253,126.4730002,134.8585751,Decreasing 
2015-03-05,128.580002,128.75,125.760002,126.410004,56517100,121.539962,119.1048311,126.848667,134.5925029,Decreasing 
2015-03-06,128.399994,129.369995,126.260002,126.599998,72842100,121.722637,120.190797,127.2288335,134.26687,Decreasing 
2015-03-09,127.959999,129.570007,125.059998,127.139999,88528500,122.241834,121.6289771,127.631167,133.6333568,Decreasing 
2015-03-10,126.410004,127.220001,123.800003,124.510002,68856600,119.71316,123.1164763,127.9235004,132.7305246,Decreasing 
""" 
csvStringIO = StringIO(csvString) 
 
from io import StringIO 
import plotly.graph_objects as go 
import pandas as pd 
from datetime import datetime 
df = pd.read_csv(csvStringIO) 
fig = go.Figure(data=[go.Candlestick(x=df['Date'], 
open=df['AAPL.Open'], 
high=df['AAPL.High'], 
low=df['AAPL.Low'], 
close=df['AAPL.Close'])]) 
%plotly fig
```

![\[%ploty 매직 명령 사용.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/notebooks-spark-magics-graphs-4.png)
