<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>에스프리터</title>
    <link>https://sharingtime.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 06:02:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>에스프리터</managingEditor>
    <image>
      <title>에스프리터</title>
      <url>https://tistory1.daumcdn.net/tistory/848619/attach/0595f201ba604dd2b52f42aea3ae6c80</url>
      <link>https://sharingtime.tistory.com</link>
    </image>
    <item>
      <title>2023년 8월, Monthly I Learned</title>
      <link>https://sharingtime.tistory.com/1450</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;3146e7e4-3a07-47bd-b65d-dd938682edc5&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;
&lt;p class=&quot;page-description&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;h2 id=&quot;bb547bfa-2d70-4fac-b984-ab41026e3c7c&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23-08-30&lt;/mark&gt;&lt;/h2&gt;
&lt;hr id=&quot;23517479-3f79-47f6-b003-4be24d2a2adc&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;4714dbc5-f522-42ed-a999-c21169a961fe&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;ElasticSearch status 조회하기&lt;/h3&gt;
&lt;ul id=&quot;bc57678b-b1a8-45e4-a45b-2cd6eaca09e3&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;curl 날려서 확인 가능하고 health 대신 indices 등을 조회할 수 있음
&lt;pre id=&quot;b1c1af9f-28f2-42af-a3fe-4028face7cfb&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;curl -s http://192.168.0.12:9200/_cat/health?v&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;c269e579-ac88-4451-8d52-02c0b7f7cc0c&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;참조 문서
&lt;ul id=&quot;72b58872-bd54-44aa-a020-97601414be1d&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://brunch.co.kr/@alden/43&quot;&gt;https://brunch.co.kr/@alden/43&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;c88ebcd2-92ab-4c11-afa7-d8021c02df49&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23-08-28&lt;/mark&gt;&lt;/h2&gt;
&lt;hr id=&quot;30d5cf6f-fbc8-44eb-a54f-8835fd940864&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;87243444-d672-4913-9851-60a73df70572&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;구글 캘린더에 음력 일정 등록하기 위한 Lunar7&lt;/h3&gt;
&lt;ul id=&quot;0e004d66-f39c-4dc5-94c4-0db1f3abc026&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;구글 캘린더에 음력 달력 등록하기 위한 방법으로 lunar7이 있음. 기존엔 다른 서비스들도 있었는데 캘린더 서드파티 API가 제한되면서 사라진 듯&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;cb145d8d-3d69-47d9-b799-5d855d0f261f&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a href=&quot;https://comeinsidebox.com/%EA%B5%AC%EA%B8%80-%EC%BA%98%EB%A6%B0%EB%8D%94-%EC%9D%8C%EB%A0%A5-%EB%93%B1%EB%A1%9D-%EB%B0%98%EB%B3%B5-%EC%9D%BC%EC%A0%95-%EC%82%AC%EC%9A%A9-%EB%B3%80%ED%99%98-lunar7-ics-%ED%8C%8C%EC%9D%BC-%EC%83%9D/&quot;&gt;https://comeinsidebox.com/구글-캘린더-음력-등록-반복-일정-사용-변환-lunar7-ics-파일-생/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;25a505e9-c921-489c-8439-ed4089ee6e4b&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;sproc&lt;/h3&gt;
&lt;ul id=&quot;44eb769b-91b3-4b5e-b87d-63da3890cea4&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;어떤 개발 하시는 분인진 모르겠지만 라즈베리로 noaa 이미지 다운로드에 대시보드까지 깔끔하게 구현을 잘 해놓으셨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;6c68db62-5c84-4e91-bf65-048be9ac4fd0&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;링크 참조
&lt;ul id=&quot;c12d1c64-3d85-4e8d-bbeb-a08060882277&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;http://noaa.sproc.co.kr/&quot;&gt;http://noaa.sproc.co.kr/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;dd11342e-e68e-4c97-89e4-949241faa1f6&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;http://sproc.co.kr/main.php?dis=redstar&quot;&gt;http://sproc.co.kr/main.php?dis=redstar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;19f536bc-97ea-415a-8596-8799b7907833&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23-08-26&lt;/mark&gt;&lt;/h2&gt;
&lt;hr id=&quot;55503197-0804-4148-b685-b7c8c7fe96a6&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;328abfbe-7964-487a-a768-7666bfc61ee4&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;Airflow 멀티 테넌트 관련 글 모음&lt;/h3&gt;
&lt;ul id=&quot;0e57ddf8-532e-491a-8fc9-ff87ecc9b7ea&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;참고 링크&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;d50360a7-a7c1-4138-aa0f-4bafc29767cf&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a href=&quot;https://engineering.linecorp.com/ko/blog/multi-tenancy-airflow-2&quot;&gt;https://engineering.linecorp.com/ko/blog/multi-tenancy-airflow-2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;6f6c27cb-fcec-4ff5-a5cb-ef7731df5019&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a href=&quot;https://concave.tistory.com/m/30&quot;&gt;https://concave.tistory.com/m/30&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;be249ab5-8273-43bc-b7b0-496ceaf6bc96&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23-08-25&lt;/mark&gt;&lt;/h2&gt;
&lt;hr id=&quot;af29c89b-5b79-4448-99bc-cae39b3c143d&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;d1824c2d-fadf-4377-b57a-e73cf12768ab&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;NOAA 위성에서 신호를 기상 이미지로 바꿔주는 사이트&lt;/h3&gt;
&lt;ul id=&quot;df011296-906b-4920-a752-f5fb1b305981&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;기존 wxtoimg가 막힘에 따라 찾아본 링크인데 아직 테스트는 못해봄&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;a01cab5c-6e21-4b98-a1a6-6ece7da4485c&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;설치 링크
&lt;ul id=&quot;c650172b-8e76-4e5b-9c10-f437e23aa701&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://noaa-apt.mbernardi.com.ar/download.html&quot;&gt;https://noaa-apt.mbernardi.com.ar/download.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;34303310-b25b-4c5c-a430-83970823ebf3&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;CURL을 언어 별로 바꿔주는 사이트&lt;/h3&gt;
&lt;ul id=&quot;02fabc00-beaa-412f-a76b-c5ac2ce8aa05&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;급히 API 테스트를 할 때 유용한 것 같다.
&lt;ul id=&quot;da6e5d3e-1d01-4873-a4d2-8d91f87c0950&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://curlconverter.com/&quot;&gt;https://curlconverter.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;174b7b88-feea-4509-9cb7-59558a6e4ff3&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;대학원 때 연구 주제로 했다가 까였던 소재&lt;/h3&gt;
&lt;ul id=&quot;5962e8dd-6cdf-4dc1-a5eb-1a872522c32b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;그래도 누군가가 성공해서 불가능한 얘긴 아니였구나 하고 한숨 중..
&lt;ul id=&quot;e0ffb9bb-8c69-46f6-8100-5f332e5ad9a3&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://zdnet.co.kr/view/?no=20200902180339&quot;&gt;https://zdnet.co.kr/view/?no=20200902180339&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;398c5566-3531-41a3-ac04-4178fcb84298&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;SOCAR의 데이터 분석 환경 구축기&lt;/h3&gt;
&lt;ul id=&quot;c135150d-9fd2-4fbf-8772-a872227321a7&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;잦은 브랜치 생성/삭제로 부하를 주는 상황을 막기 위해 로컬에서 Airflow 실행
&lt;ul id=&quot;b722009e-f571-4c09-9ab8-3f49e342f21e&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://tech.socarcorp.kr/data/2022/11/09/advanced-airflow-for-databiz.html&quot;&gt;https://tech.socarcorp.kr/data/2022/11/09/advanced-airflow-for-databiz.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;1c29817b-f9a6-455e-b8a9-77ddab187647&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;airflow 유지보수 dag 예시
&lt;ul id=&quot;66cfc824-eb5e-425e-bf03-2255c507079e&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: square;&quot;&gt;&lt;a href=&quot;https://github.com/teamclairvoyant/airflow-maintenance-dags&quot;&gt;https://github.com/teamclairvoyant/airflow-maintenance-dags&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;9990d308-1130-426b-afac-ec2495e6b167&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;데이터 환경 구축기
&lt;ul id=&quot;6af9275b-4f41-438e-9669-f988695a71d1&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://tech.socarcorp.kr/data/2021/06/01/data-engineering-with-airflow.html&quot;&gt;https://tech.socarcorp.kr/data/2021/06/01/data-engineering-with-airflow.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;9e275ef2-d42d-4460-b63f-07e0ed5440b9&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;파이프라인 구축기
&lt;ul id=&quot;1b516e02-f6db-4e57-b667-a9706dd77cdf&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://tech.socarcorp.kr/data/2023/01/17/build-fms-data-pipeline-1.html&quot;&gt;https://tech.socarcorp.kr/data/2023/01/17/build-fms-data-pipeline-1.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;c011c365-72b2-49fd-a621-42a88e05dbb9&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;테스트 환경 구축기
&lt;ul id=&quot;be123a41-7324-423d-9a4c-d5226ef30a0e&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://tech.socarcorp.kr/data/2023/01/25/build-fms-data-pipeline-2.html&quot;&gt;https://tech.socarcorp.kr/data/2023/01/25/build-fms-data-pipeline-2.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;a41ad0ea-ae9b-4b8c-86b2-90ea5a0d9eb6&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;Skywave Linux&lt;/h3&gt;
&lt;ul id=&quot;08099e6a-835f-4841-90cb-10a1c277a92a&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;항공이나 천문 관련 패키지를 모아놓은 항공/천문 특화 리눅스&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;4e0723dd-4b31-422c-a0dc-a109b1244987&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;설치해보려고 했으나 usb 구동 방식으로만 동작하는 것 같고, RTL-SDR 리시버가 노트북 가까이 있으면 전파 수신에 문제가 있는 것 같아서 패키지 구성이 필요해보임&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;284098aa-d76e-489e-b481-5bdede497a79&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;다운로드 주소
&lt;ul id=&quot;80ff7917-e1ed-4347-98b5-7b4922d5657a&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://skywavelinux.com/downloads.html&quot;&gt;https://skywavelinux.com/downloads.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;cf4a56d8-abee-4b35-b460-d9b295f7b455&quot; class=&quot;&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23/08/24&lt;/mark&gt;&lt;/h1&gt;
&lt;hr id=&quot;59217d6e-7e12-4745-b64a-866b7552fee6&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 id=&quot;af1fc2a9-3e0b-4a76-bae2-448a9c26f64f&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;비개발자에게 프로그래밍을 가르칠 때 필요한 덕목 이야기 스크랩&lt;/h3&gt;
&lt;ul id=&quot;cca632ac-d9de-4bf6-8dfc-847377c91396&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/2188/&quot;&gt;https://yozm.wishket.com/magazine/detail/2188/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;288ca696-c0b1-4cd8-844a-4f19cad15f11&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;마음에 들었던 내용
&lt;ul id=&quot;09ea8bed-574b-4020-ab68-69359b816e0a&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;와닿는 예시로 판타지를 심어주자.당신은 이미 엑셀 함수라는 (엄밀히 말하면 프로그래밍이 아니지만) 프로그래밍을 하고 있다며 용기를 심어주자.몰라도 되는 내용은 일단은 빼자.&lt;/li&gt;
&lt;li id=&quot;2e9ed209-8a44-4077-b2fa-e4fd703e1fbd&quot; class=&quot;&quot;&gt;이론적인 내용은 나중에 등장시키자.&lt;/li&gt;
&lt;li id=&quot;29e4ab8e-2de5-48c7-9aa1-53fd20a24e48&quot; class=&quot;&quot;&gt;제발 외우지 말라고 개발자들도 늘 커닝을 한다고 계속 말해주자.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dde08bb8-3880-425f-8ccd-63c4534c719c&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;postgresql 계정 확인&lt;/h3&gt;
&lt;ul id=&quot;aa34fadf-6005-4a25-9e2f-a8e1e9fb3132&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;pg_shadow 를 통해서 확인할 수 있다.
&lt;pre id=&quot;dc265313-53d7-4adb-a79e-258fe7f3ed75&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;select * from pg_shadow;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;28f47669-d44d-4b97-bc07-3d7459d51673&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;참고 : &lt;a href=&quot;https://usioo-14.tistory.com/9&quot;&gt;https://usioo-14.tistory.com/9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;5ff2b466-2402-4e09-917a-0f0a25a1bf4a&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23/08/22 - 1on1 미팅 주기&lt;/mark&gt;&lt;/h2&gt;
&lt;hr id=&quot;3d93275f-746d-4347-8742-c02f912061e9&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;3bcae25d-4000-47e4-b1ed-f9ecd0d8edd8&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;실무 혹은 관리자 트랙에 대한 고려 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;5b43da80-3729-4e3d-ba43-37689f108d79&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;업무 진척 현황과 방해물에 대한 이야기도 좋음&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;92d8b199-0c14-4a7a-afab-e9b795950a36&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;미팅 주기
&lt;ul id=&quot;ae244b75-658a-42ff-9003-ce7545c92d2f&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;1~4명이면 주 1회&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;72ecd1fd-4cc0-4723-9e32-8d07c631287b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;4~17명이면 월 1회&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;4e4d65bf-366d-4d5e-bb1e-e705832b6c5d&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;참고 &amp;rarr; &lt;a href=&quot;https://blog.clap.company/1on1_cycle/&quot;&gt;https://blog.clap.company/1on1_cycle/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;a6c4b9e1-9374-4f19-bbd2-1bc6f8744b75&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;c4636bfb-8d0e-4df1-b758-2f0090e24307&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23/08/21 - java 버전 변경하기&lt;/mark&gt;&lt;/h2&gt;
&lt;hr id=&quot;e1df22ae-5d99-4ce4-9f61-f49f28046a86&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;cbcf18ee-d5f8-47b2-a96b-01d8623bdd9d&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;alternative-java를 사용하여 java 버전을 변경할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;c1344d6c-6be5-4fd5-a195-fe4100a694c6&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;참고 : &lt;a href=&quot;https://jizard.tistory.com/404&quot;&gt;https://jizard.tistory.com/404&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;76e29239-167d-4f9b-9112-e8bd12a2206b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;코드&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;52e8969c-3dd1-4926-9627-3d1e3868a629&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;# 기존 java 내역 삭제 rm -rf /etc/alternatives/java # 신규 java 경로 지정 ln -s /usr/lib/{java 경로}/bin/java /etc/alternatives/java&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;dbff4cb2-3998-40f7-a046-a177059d522d&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;72e6825b-9e7b-4c3a-a16e-e68d59a7146b&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;23/08/03 - journalctl을 사용해서 특정 서비스의 로그 확인하기&lt;/mark&gt;&lt;/h2&gt;
&lt;hr id=&quot;b3730a01-4d9f-44c0-a868-d41cc0a2395b&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p id=&quot;fca97946-63bf-40b9-b9fa-2e1f2f81fa49&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 명령어 및 -f를 사용하면 스트리밍 식으로 로그를 볼 수 있다.&lt;/p&gt;
&lt;pre id=&quot;c7203fcf-a502-44bd-b88c-41f8c9ce89ed&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;# 프로세스 id 확인하기 systemctl status {프로세스 이름}  # 로그 확인하기 (sudo를 요구함) journalctl -f _PID={pid 번호}&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;2496d2d5-8a47-4574-bf4b-1dcd23a2f1c7&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/article&gt;</description>
      <category>Monthly I Learned</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1450</guid>
      <comments>https://sharingtime.tistory.com/1450#entry1450comment</comments>
      <pubDate>Wed, 30 Aug 2023 14:52:48 +0900</pubDate>
    </item>
    <item>
      <title>2023년 7월, Monthly I Learned</title>
      <link>https://sharingtime.tistory.com/1449</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;434a27e4-0f8e-4fec-b166-015c5335463e&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;
&lt;p class=&quot;page-description&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;h2 id=&quot;6421e400-5b4b-4207-8c4d-c1a495227e9a&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/07/27 - chmod 계산기 사이트&lt;/h2&gt;
&lt;hr id=&quot;919012c5-6552-49ca-bb49-5736250d357e&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p id=&quot;72c4dbb2-c705-4f32-bce0-a12550c6506e&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chmod-calculator.com/&quot;&gt;https://chmod-calculator.com/&lt;/a&gt; 에서 chmod를 계산할 수 있다.&lt;/p&gt;
&lt;figure id=&quot;1b60f728-acd2-4b79-8288-e2cc12ba2fc0&quot; class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/xn2ZB/btspClkCPHB/345RFRt34UsTQZoBA7JRSK/img.png&quot;&gt;&lt;img style=&quot;width: 528px;&quot; src=&quot;https://blog.kakaocdn.net/dn/xn2ZB/btspClkCPHB/345RFRt34UsTQZoBA7JRSK/img.png&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p id=&quot;24107b75-3872-4c7b-9a1a-3f01ff7cca38&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;c84fbdbf-7052-42a6-a7f1-2d9cde323d1b&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;ce67d8a3-f7bc-49b9-b865-a58e0d8f19ff&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/07/26 - postgreql timestamp에서 mileseconds를 지우고 싶을 때&lt;/h2&gt;
&lt;hr id=&quot;4214f06a-ecf7-409c-be66-c89069d8c0ca&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;pre id=&quot;d66aae90-80f8-4473-867f-e6e58ced8be3&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;SELECT now()::timestamp(0); SELECT date_trunc('second', now()::timestamp);&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;10dfbfbd-9bfc-4054-bd81-ff94fa14c973&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/07/25 - 사내용 github repository에 접근하기 위한 방법&lt;/h2&gt;
&lt;hr id=&quot;003d7f17-ae37-4f60-82df-f2328a6f5f4c&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;pre id=&quot;1528434e-2de0-46f0-89be-d05f8c4661a2&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;# 단순 비공개 repo도 아래와 같이 해야되는지는 모르겠음 # 비공개 github repository에 접근하려면 아래와 같이 작성해야 한다 git remote set-url origin https://{사용자 github id}@github.com/{repository 주소}.git&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;93024774-555e-4d22-b1e9-8c7ef76e27a7&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;2a384728-ae7c-4513-ae9f-70585cd9adfe&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/07/24 - github push/pull 할 때 계정 정보 묻지 않도록 설정&lt;/h2&gt;
&lt;hr id=&quot;1426664c-945a-4c58-b245-a14dec725df4&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;pre id=&quot;55095204-08c6-4d13-9249-1e673f15f1f2&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;# 공통으로 주려면 --global 인자를 추가하세요.  # credential 정보 저장 git config credential.helper store  # 임시 캐시 저장 git config credential.helper cache&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;2d6c38fe-f18e-4e70-b157-cbf03a680320&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;9effd2bd-0dc6-4808-bcfd-0ccfd1485f9c&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/07/17 - gmail에서 안 읽은 메일을 확인하고 싶을 때&lt;/h2&gt;
&lt;hr id=&quot;ebed8341-9349-498f-98d5-e631543d15bb&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p id=&quot;17dd1c16-ee02-4bc8-8cb3-ece91fc84f22&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;지메일 검색창에 &amp;lsquo;is:unread&amp;rsquo; 를 입력하면 읽지 않은 메일만 필터링할 수 있다.&lt;/p&gt;
&lt;figure id=&quot;6d31f18f-f0c8-4409-a25f-29a85f4da46a&quot; class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/HhW8Q/btspsWeP3dw/DdrKx887kavbPyDGm4dDOK/img.png&quot;&gt;&lt;img style=&quot;width: 1514px;&quot; src=&quot;https://blog.kakaocdn.net/dn/HhW8Q/btspsWeP3dw/DdrKx887kavbPyDGm4dDOK/img.png&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p id=&quot;6a4e6cff-3372-49bf-a7b3-b2a0db6fbf47&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;543dfcda-0014-4819-a458-a6c053676f0b&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/07/13 - mySQL에서 프로시저 목록 확인하고 삭제하고 싶을 때&lt;/h2&gt;
&lt;hr id=&quot;e2b010ec-bcd3-49d6-8852-3ff7bb201e07&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;pre id=&quot;1bcd5bf3-cd5d-4765-818e-cc4d6bf44161&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;-- 목록 확인 SHOW PROCEDURE STATUS  -- 삭제 DROP PROCEDURE IF EXISTS {프로시저 이름};&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;ed40b2cd-05de-465a-8a11-60898d08a2c6&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;5de588c6-5df7-44b4-bd9c-077c47920526&quot;&gt;
&lt;div class=&quot;source&quot;&gt;&lt;a href=&quot;https://picsum.photos/1500/600&quot;&gt;https://picsum.photos/1500/600&lt;/a&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p id=&quot;8633482b-c6ca-4946-af20-23b2a9ce5bf0&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/article&gt;</description>
      <category>Monthly I Learned</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1449</guid>
      <comments>https://sharingtime.tistory.com/1449#entry1449comment</comments>
      <pubDate>Mon, 31 Jul 2023 15:48:00 +0900</pubDate>
    </item>
    <item>
      <title>2023년 6월, Monthly I Learned</title>
      <link>https://sharingtime.tistory.com/1448</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;d693e233-3411-48a5-9845-e3b20a00c4e1&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;
&lt;p class=&quot;page-description&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;h2 id=&quot;dc2f8d92-7ce6-4286-92fe-e7b4b307c43d&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/30 - embulk에서 Timezone 관련 에러가 날 경우&lt;/h2&gt;
&lt;hr id=&quot;c7e6a120-4f43-4453-8b83-e2323f2f017f&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;88b0a77e-dbc2-416c-bdac-6da2e5c654b3&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;options에 아래와 같이 timezone을 추가한다.
&lt;pre id=&quot;c8f60fed-f598-487b-b5dc-958ac2fb2bf5&quot; class=&quot;code Plain Text&quot;&gt;&lt;code&gt;options: {useLegacyDatetimeCode: false, serverTimezone: Asia/Seoul}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;df44bc6a-7f70-492b-b86e-98dc4875b6ed&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;e561acc5-5dc4-41dc-b31f-034eebfb1b55&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/29 - SQL에서 날짜 값을 정시나 특정 시각으로 고정하고 싶을 때&lt;/h2&gt;
&lt;hr id=&quot;45d52130-2ad8-43a1-8f60-be9f937d5773&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;aafd8983-b941-4ba5-9240-55d942f4a51e&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래와 같이 substr로 자른 뒤, 뒤에 concat을 다시 붙이면 된다.
&lt;pre id=&quot;77078135-55c6-4edc-a1b1-9450e79f68e7&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;SELECT concat(substr('2023-07-01 15:34:10', 1, 14), '00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;84dad4c3-c0c5-4c5a-b99b-3144492e9efb&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;5ba1dd92-ef09-43fe-8c2f-37a1de949290&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/26 - 전체 사용자 cron 스케줄 정보 확인하기&lt;/h2&gt;
&lt;hr id=&quot;bca19e94-44f4-4d2d-bd3a-0969c96c391f&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;707fb8c9-a788-4093-a0e2-0b53cbd11020&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래 위치에 모든 사용자의 정보가 있다. 다만 root 로 실행해야 한다.
&lt;pre id=&quot;b1aa9ca7-2069-4584-ad0c-e949407f0aff&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;cd /var/spool/cron&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;11b46a85-3008-441f-9eb4-4f1f315752de&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;e7423b2a-1e7c-4728-8869-04103c55e002&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/25 - git 에서 마지막 기록으로 Rollback 하기&lt;/h2&gt;
&lt;hr id=&quot;2ca9781e-6ec2-4b93-a5ad-2d2a8e2a9da8&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;982a045f-c1f2-4990-80a2-0555b49f0a58&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래와 같이 Hard reset 하면 되돌릴수 있다.
&lt;pre id=&quot;fe924180-8636-43db-975b-fc01c400fbf8&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;# 과거 커밋 기록 확인 git reflog  # 마지막 직전으로 롤백 git reset --hard HEAD@{1}  # 이런식으로 해도 가능 (n에 숫자입력) git reset --hard HEAD~{n}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;1f17706c-5b7a-42d6-826e-fee97a117124&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;04410abf-2525-4b48-8960-e1355308ada7&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/24 - 온라인에서 특정 문자를 기준으로 Line을 분리하고 싶을 대 쓰는 사이트&lt;/h2&gt;
&lt;hr id=&quot;ab4607e0-64c5-42a4-a757-4baa246442e3&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;fb9672eb-c777-4065-b92d-b0a9d924fa53&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래 사이트를 사용하면 온라인에서 분리할 수 있다. 로컬에서 에디터를 쓰기 힘든 상황일 때 쓸 수 있다.
&lt;ul id=&quot;af179da3-deea-4d28-b266-3bb356df0947&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;http://www.unit-conversion.info/texttools/add-line-breaks/&quot;&gt;http://www.unit-conversion.info/texttools/add-line-breaks/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;d7997309-1df1-4fa4-8c58-725b3f534cf5&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;f7e0dc77-ce22-4c7a-9ac7-773daa1c800a&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/23 - 랜덤하게 이미지를 보여주는 사이트 주소 (picsum.photos)&lt;/h2&gt;
&lt;hr id=&quot;e4c80517-ab00-4b83-8449-281cf0c695f1&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;407b9929-7041-4cbb-8482-311aecd76dc6&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;notion 이미지를 무작위로 매일 변동하고 싶을 때 보여주면 좋을 듯 하다
&lt;ul id=&quot;99b0e452-d45e-484e-9361-a044767c889f&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;code&gt;https://picsum.photos/1500/600?&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;90fa44d5-4f54-49b5-9247-37e51c94bb63&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;2023e77a-5ac5-48a3-b990-c2f0ba290cf1&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/22 - UTC 랑 특정 지역 시간대가 헷갈릴 때 사용할 수 있는 사이트(worldtimebuddy)&lt;/h2&gt;
&lt;hr id=&quot;094ead47-d8f3-4f81-b818-e29729fd1363&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;4762e0f3-1a05-4c98-a82c-eb9dd8bdd48a&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;UTC나 zone 별 시간대를 잘 알고 있지만 순간 헷갈려서 비교를 하고싶을 때 사용할 수 있는 사이트로 &lt;a href=&quot;http://worldtimebuddy.com&quot;&gt;worldtimebuddy.com&lt;/a&gt; 이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;cb17f487-aa0d-493c-a2e7-81ae7360bfd5&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래처럼 위치 별로 시간을 눈으로 비교할 수 있다.
&lt;figure id=&quot;9c87b217-6203-4457-af6e-055a223d6f30&quot; class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/c7IwSg/btsl2cGCVHy/Me3JtGq9RdvjXxPmSkjpJ0/img.png&quot;&gt;&lt;img style=&quot;width: 2160px;&quot; src=&quot;https://blog.kakaocdn.net/dn/c7IwSg/btsl2cGCVHy/Me3JtGq9RdvjXxPmSkjpJ0/img.png&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;da035369-002d-43d2-a68c-bbb5d97c2321&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;5354c186-14b1-4fa6-a68b-0b269f93751a&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/15 - ls 명령어 실행시 권한 정보가 numeric 으로 출력되길 원하는 경우&lt;/h2&gt;
&lt;hr id=&quot;2f7f9ad9-6cec-4ae4-a9f8-50d01205612f&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;4e732bb8-5344-4710-84ba-252b961c7b51&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래와 같이 실행하면 Numeric 정보가 출력된다.
&lt;pre id=&quot;c4643980-6a7f-40a8-9bde-d5cad0586e6d&quot; class=&quot;code Shell&quot;&gt;&lt;code&gt;ls -l | awk '{k=0;for(i=0;i&amp;lt;=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \              *2^(8-i));if(k)printf(&quot;%0o &quot;,k);print}'&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;7070c243-5831-489c-9b32-c3c3200f8baf&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;3e6d0d92-50d6-45da-a27f-c45b34035e79&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/12 - datetime을 요소 별로 분리하기&lt;/h2&gt;
&lt;hr id=&quot;f057a3d8-e1b9-4ac2-9e73-b9b99298bf1d&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;dea9055b-1cdb-44e0-acd5-acc1915b0c81&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래와 같이 datetime 및 strftime을 사용한다.
&lt;pre id=&quot;dc47d15a-1077-4f06-9125-e8e228e5a03c&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;from datetime import datetime now = datetime.now() # 현재 날짜 및 시각  year = now.strftime(&quot;%Y&quot;) print(&quot;연도:&quot;, year)  month = now.strftime(&quot;%m&quot;) print(&quot;월:&quot;, month)  day = now.strftime(&quot;%d&quot;) print(&quot;일:&quot;, day)  time = now.strftime(&quot;%H:%M:%S&quot;) print(&quot;시각:&quot;, time)  date_time = now.strftime(&quot;%m/%d/%Y, %H:%M:%S&quot;) print(&quot;날짜와 시각:&quot;,date_time)&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;a08aeebc-73a5-4bca-bd58-3fe797dcfca7&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;78170ce6-76ac-4bbd-a21e-a32cada96a49&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/08 - 특정 기간의 시간 단위 데이터 개수를 알고 싶을 때&lt;/h2&gt;
&lt;hr id=&quot;19828b65-94bd-4a73-ba7c-23671dee1a29&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;9ce4c2f0-03b9-485d-bb9a-b85ea6d10965&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래와 같이 to_char와 substr을 응용한다.
&lt;pre id=&quot;0af57e4a-0a2a-4869-a958-9f7f71c3672d&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;select substr(to_char(createdat, 'YYYY-MM-DD HH24:MI:SS'), 1, 13) as table_hour, count(1) from table where createdat between '2023-06-08 09:00:00' and '2023-06-08 13:00:00' group by table_hour order by table_hour asc;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;8be2ecc4-6279-4fac-9dbd-3ed1372750f8&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Postgresql에서 실행중인 쿼리를 알고 싶을 때
&lt;pre id=&quot;19de1325-cf2d-4e60-a2ee-86db9f8f7dcf&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;-- 실행 중인 쿼리에서 'test'가 포함된 쿼리를 찾고 싶을 때 select * from pg_stat_activity where query like '%test%';  -- 특정 pid 기준 쿼리 수행을 강제 종료 SELECT pg_terminate_backend(160514) FROM pg_stat_activity;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;49e3e0f3-2008-42e3-b3e4-81d4f006b84f&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;iterm에서 여러 터미널에서 동시 입력(mac 기준)
&lt;pre id=&quot;6f9e77db-94e8-433f-a2c8-db7004a70b0e&quot; class=&quot;code Plain Text&quot;&gt;&lt;code&gt;cmd + shift + i&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;90f3d82a-3fde-42b6-bc3c-ba1bf533845e&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;23/06/07 - Timestamp 값에서 시분초를 0이나 특정 값으로 일괄 바꾸고 싶을 때&lt;/h2&gt;
&lt;hr id=&quot;3a20d6cc-d5b1-4319-9c66-486f8da9e877&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;ul id=&quot;9876e47d-ac61-4c13-a356-fdb92ba4319a&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래와 같이 substr을 사용하여 시:분:초를 치환하여 date_parse 하면 쉽게 변경할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;d6067c83-c225-4656-90fe-617db179d682&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;SELECT DATE_PARSE(concat(substr(registered, 1, 11), '00:00:00'), '%Y-%m-%d %H:%i:%s') FROM DB;&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;ae787623-39f0-4831-be23-ab67968bfbb8&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;78973ad3-0168-4f9b-b89f-321eda2c03e3&quot; class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/4gIpZ/btsl2cUa9yz/br89sNWySakPB7zfEaZ3a0/img.webp&quot;&gt;&lt;img style=&quot;width: 36px;&quot; src=&quot;https://blog.kakaocdn.net/dn/4gIpZ/btsl2cUa9yz/br89sNWySakPB7zfEaZ3a0/img.webp&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/article&gt;</description>
      <category>Monthly I Learned</category>
      <category>til</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1448</guid>
      <comments>https://sharingtime.tistory.com/1448#entry1448comment</comments>
      <pubDate>Mon, 3 Jul 2023 13:04:31 +0900</pubDate>
    </item>
    <item>
      <title>2023년 5월, Monthly I Learned</title>
      <link>https://sharingtime.tistory.com/1447</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;/p&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;1e2be8c9-bb55-4ac5-9fc1-400994a68271&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;h3 id=&quot;c185a762-d9ca-4cf8-9ca3-a34bef565fd5&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;AWS Redshift에서 url 디코딩 된 값을 보고 싶을 때&lt;/h3&gt;
&lt;p id=&quot;6564a3b1-ef3e-4915-a7bf-c551af080bb2&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;기본적으로 제공되는 건 없고 아래와 같이 함수를 생성해야 한다.&lt;/p&gt;
&lt;pre id=&quot;109b4c16-b4e9-4bea-9b51-b480f2100629&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;create function url_decode(text character varying) returns character varying 	immutable 	language plpythonu as $$     result = None     if text is not None:         import urllib         result = urllib.unquote_plus(text)     return result  $$;&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;d1826a10-081a-468c-afc2-ed4044fe380b&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 url_decode 함수를 사용하면 된다.&lt;/p&gt;
&lt;pre id=&quot;810ff8c8-41f9-4fe2-ae98-f24b0d3b4db3&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;select url_decode(query) as url_decode, * from table;&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;8068f20f-b0b0-48bd-9c48-2e6d638e1b77&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;bbc60453-fd9a-453e-8c88-4c48f3a8a39c&quot; class=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;AWS Redshift에서 사용자가 생성한 프로시저를 보고 싶을 때&lt;/h3&gt;
&lt;p id=&quot;5e88c024-47f4-482d-9b94-2ba067d7179b&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 쿼리를 사용하여 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;86836918-d013-41bf-996d-c3c5dd3fa866&quot; class=&quot;code SQL&quot;&gt;&lt;code&gt;SELECT     n.nspname,     b.usename,     p.proname,     p.prosrc FROM     pg_catalog.pg_namespace n JOIN pg_catalog.pg_proc p ON     pronamespace = n.oid join pg_user b on     b.usesysid = p.proowner where     nspname not in ('information_schema',     'pg_catalog')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/article&gt;
&lt;h3 id=&quot;35ce1430-3e87-45dd-8b4c-6bff7c0eaec9&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;git pull rollback(롤백) 하기&lt;/h3&gt;
&lt;p id=&quot;45a5e58a-38fc-4b8d-95f1-9aa3f56b2b78&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 롤백이 가능하다.&lt;/p&gt;
&lt;pre id=&quot;b392c34a-ce12-4294-bfcd-607f88d4110e&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;# 커밋 확인 git reflog  # 가장 최근의 커밋 기준으로 롤백 git reset --hard HEAD@{1}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;8d40a50e-5865-4b59-bf6a-4ee60548bd2f&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;MySQL 프로시저 관련 명령어 메모&lt;/h3&gt;
&lt;p id=&quot;4c3119aa-71be-4aba-84f3-50d736bed0c5&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본적인 프로시저 조회 및 생성 방법은 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;3235f673-fa97-427c-9608-2726e1bd48ac&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;# 프로시저 목록 확인 show procedure status; # 특정 프로시저 정보 호출 SHOW CREATE PROCEDURE Set_blabla;  -- 프로시저 생성 예제 CREATE DEFINER=`{계정명}`@`%` PROCEDURE `{프로시저 명}`() BEGIN     {실행하고자 하는 쿼리}; END ;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;69ab77bd-f2da-4667-bf46-91d783bf1960&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;인텔리제이에서 Git commit 할 때 CRLF 관련 오류가 뜰 때&lt;/h3&gt;
&lt;p id=&quot;05d5fc66-7ef8-4576-958f-521428ecfef8&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;인텔리제이에서 commit 할 때 아래와 같이 CRF 관련 오류가 뜰 때가 있다.&lt;/p&gt;
&lt;pre id=&quot;1653d423-bca5-4dd5-9de1-59a22c4c7522&quot; style=&quot;background-color: #f8f8f8; color: #333333; text-align: start;&quot;&gt;&lt;code&gt;You are about to commit CRLF line separators to the Git repository&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;4d3a7772-872f-4927-b3d3-840498b36477&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;a1b36d19-4805-4b36-b9e7-d61f99d51e25&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;해당 오류는 커밋하려는 코드 내 에 CRLF 개행이 있다는 뜻으로 windows에서 코드 작업을 할 때 발생한다. windows는 CRLF를 쓰지만 mac이나 리눅스는 LF만 쓰기 때문에 추후 커밋할 경우 코드 자체엔 문제가 없는데 엉뚱하게 오류를 발생시킬 수 있다.&lt;/p&gt;
&lt;p id=&quot;e4316b15-eba2-4117-a76f-7d53a49e76c0&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;5136f083-9bf9-4955-80b1-bb69870fd535&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럴 경우 프로젝트 디렉토리에서 아래 커맨드를 입력하면 해결된다.&lt;/p&gt;
&lt;pre id=&quot;52aea5fe-85b4-4a3e-a7dd-52a3aa5bfd52&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;git config --global core.eol lf git config --global core.autocrlf input&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;b0f2dc5b-a2ce-4794-bffa-6324063f432e&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;dacfb25e-cfbd-4593-b4da-3390aa7fa4a1&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Spring Boot에서 profile 별 실행 방법&lt;/h3&gt;
&lt;p id=&quot;989e6e08-1358-4d02-a280-4d49965e5532&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 profile 명을 지정하여 jar 를 실행하면 된다.&lt;/p&gt;
&lt;pre id=&quot;e1ee612c-27a3-450d-8a94-2818a5485040&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;Dspring.profiles.active={프로파일 명}&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;dcbd14e4-fb70-479b-9367-684eb3a522eb&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;5d4a94e1-3260-4c24-9411-c54242568f2d&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;systemCtl 목록 확인&lt;/h3&gt;
&lt;p id=&quot;196dfef1-1327-4895-8b0e-9f5e241bda37&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같이 입력하면 전체 목록 확인 가능&lt;/p&gt;
&lt;pre id=&quot;49709af2-5e32-42cf-b071-9d807aab06e7&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;systemctl list-units&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;2586a229-eea0-44ca-bcc1-369e5fcacbf5&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;b9799a60-0c7c-47a0-af15-c6f5d00e21ab&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;ls -al 명령어에 대한 이해&lt;/h3&gt;
&lt;p id=&quot;727d229c-bd45-4379-a61d-e80c7591941f&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ls-al 명령어를 입력하면 아래와 같은 목록이 출력된다. 각각의 뜻은 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;6e2a6f2d-c5b3-4abf-94a0-d26a9130f04e&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;# 예시 -rw-r--r--  1  user_a root 947  3  8 09:22 live_item.yml  # 쪼갤 경우 / 아래 설명 참조 {-}{rw-}{r--}{r--} {1} {user_a} {root} {947} {3 8 09:22} {live_item.yml}&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;4ef05e37-65ef-4b1c-ad19-3e991696db6a&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{-} &amp;rarr; 파일(-), 디렉토리(d), 블록 디바이스(b), 문자(c), 링크(l)&lt;/p&gt;
&lt;p id=&quot;c6bf5927-1284-4eb0-b1ef-15151cb15a73&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{rw-} &amp;rarr; read(r), write(w),execute(x)&lt;/p&gt;
&lt;p id=&quot;134600fb-b8f0-4c00-b13e-82c93d15857f&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{1} &amp;rarr; 연결된 링크의 개수&lt;/p&gt;
&lt;p id=&quot;64461b0a-517b-45a5-95e4-20815b936b82&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{user_a} &amp;rarr; 소유자&lt;/p&gt;
&lt;p id=&quot;f1b2a3e0-aa69-433a-9ccc-d51f9a332ba5&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{root} &amp;rarr; 그룹&lt;/p&gt;
&lt;p id=&quot;04d8a3fd-a327-418c-b945-c59dd9f5cfc4&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{947} &amp;rarr; 파일 크기&lt;/p&gt;
&lt;p id=&quot;db935758-a0e3-40b8-8a59-00a89c3c90f5&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{3 8 09:22} &amp;rarr; 3월 8일 09시 22분&lt;/p&gt;
&lt;p id=&quot;13f793c8-250e-4db8-9a21-b8fa783914aa&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;{live_item.yml} &amp;rarr; 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;1ba2803a-547d-4b9d-9f90-f842c4cad923&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;docker 이미지를 강재로 리빌딩 하고 싶을 때는 아래와 같이 no-cache 옵션을 사용한다.&lt;/h3&gt;
&lt;pre id=&quot;d6dc648b-fa20-4c5c-a531-2d3f00c1fd39&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;docker build --no-cache -t {태그이름} .&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;8a41e72d-c5da-486c-8bd7-a2e3cf23f51f&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;리눅스에서 USER ADD를 통해 추가된 ID 만 확인하기&lt;/h3&gt;
&lt;ul id=&quot;b284a865-2e0d-4c22-8bc1-a8db24611f5a&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;아래의 명령어를 통해 확인할 수 있다.
&lt;pre id=&quot;96f95c45-8af6-469a-8396-17e71c399334&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot;&gt;&lt;code&gt;grep /bin/bash /etc/passwd&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;9e44aec9-0b85-4651-b490-9738bb6f4155&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;AWS Personalize 에서 dataset import 할 때 unable to find csv가 뜰 경우&amp;hellip;&lt;/h3&gt;
&lt;ul id=&quot;b8cd2646-1292-4a1e-bcef-75309c50efe9&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;해당 경로에 csv 파일이 존재하는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;76197a12-b80e-4974-82bf-8b709bc480fe&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;해당 경로의 csv 파일에 문제가 있는게 아닌지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;1e2df8ce-1af9-4817-b968-b219b3248bd7&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;해당 경로의 csv 파일명 첫번째가 &amp;lsquo;_abc.csv&amp;rsquo;와 같이 특수문자가 아닌지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qereZ/btsnwRzfUZR/zex4XIT9jwLJvnm9Tjoe71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qereZ/btsnwRzfUZR/zex4XIT9jwLJvnm9Tjoe71/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qereZ/btsnwRzfUZR/zex4XIT9jwLJvnm9Tjoe71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqereZ%2FbtsnwRzfUZR%2Fzex4XIT9jwLJvnm9Tjoe71%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;884&quot; height=&quot;286&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id=&quot;db04d323-2179-4cdf-bd8f-04620e5f7116&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;M1 맥북에서 psycopg2 import가 안될 때&lt;/h3&gt;
&lt;ul id=&quot;7987fad5-fbd1-47bc-b51f-f8e217030560&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;psycopg-binary를 재설치 한다
&lt;pre id=&quot;9143a07e-fb7c-45b6-a318-88d06adfb9fe&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot;&gt;&lt;code&gt;pip install psycopg2-binary --force-reinstall --no-cache-dir&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;8fa6db3a-f99a-469d-b03b-b9e6a6865ea8&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;중고차 거래 시 취등록세 관련 환급 확인&lt;/h3&gt;
&lt;ul id=&quot;b489c812-3360-43ab-b832-496717767237&quot; style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;중고차 이전 시 취등록세 등 행정처리 비용을 환급받을 수 있음
&lt;ul id=&quot;cfe81159-6ec7-43f5-9bed-b752145aab96&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;&lt;a href=&quot;https://brunch.co.kr/@bookfit/4197&quot;&gt;https://brunch.co.kr/@bookfit/4197&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;6b1767d4-774e-46b1-bc95-a769d8bd2680&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;리눅스 파일 비우기&lt;/h3&gt;
&lt;pre id=&quot;9e56cab1-4dcf-4a29-bf2e-342c6c19ef1f&quot; style=&quot;background-color: #f8f8f8; color: #abb2bf; text-align: start;&quot;&gt;&lt;code&gt;cat /dev/null &amp;gt; {파일경로}&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;15c44368-ecbb-49f9-a30c-824e1b88c1cd&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;097dc9db-df7d-4543-b035-158ce853b2a2&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;데이터 엔지니어링 서브레딧(sub reddit) 주소&lt;/h3&gt;
&lt;ul id=&quot;de49f8c2-915b-43aa-8c6c-d68cca66eef0&quot; style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/dataengineering/&quot;&gt;https://www.reddit.com/r/dataengineering/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;98da4abd-7d1d-44fc-999f-faf618e3d823&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;c625f70c-599c-4a7a-a5d6-6da901ad59de&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;윈도우에서 특정 드라이브 접근 막는 방법&lt;/h3&gt;
&lt;ul id=&quot;fc45b366-efc0-4804-b6c6-683e7ec1e74a&quot; style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;레지스트리를 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;e9527e09-3212-49e4-a278-5b4194fb55cb&quot; style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer 로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;f15e92eb-01a8-41c1-a711-83a083562647&quot; style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;DWORD(32비트)로 신규 키를 생성하고 파티션의 10진수값 설정
&lt;ul id=&quot;3985a7da-414e-4e58-8e84-465746992605&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;드라이브 접근 제한 &amp;rarr; NoViewOnDrive&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;f716c1ad-f506-4411-bcf0-8d7b3494c132&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;드라이브 보기 제한 &amp;rarr; NoViewOnDrive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;f967950c-7bea-45c2-bc32-b2a3dc0aef68&quot; style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;파티션 10진수는 아래 이미지 참조&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzfeAw/btsnwZKHolv/gmEoOuQL4sGSktjE427zVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzfeAw/btsnwZKHolv/gmEoOuQL4sGSktjE427zVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzfeAw/btsnwZKHolv/gmEoOuQL4sGSktjE427zVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzfeAw%2FbtsnwZKHolv%2FgmEoOuQL4sGSktjE427zVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;503&quot; height=&quot;740&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;740&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;8869e8b6-541a-480c-9d6e-abf5fc03f19a&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Monthly I Learned</category>
      <category>Redshift</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1447</guid>
      <comments>https://sharingtime.tistory.com/1447#entry1447comment</comments>
      <pubDate>Thu, 4 May 2023 11:15:35 +0900</pubDate>
    </item>
    <item>
      <title>최고의 휴식 - 마음챙김 방법 정리</title>
      <link>https://sharingtime.tistory.com/1443</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;d90a5b7c-3550-4795-81d5-af7735f0a9a5&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h3 class=&quot;&quot; id=&quot;e9b9ef9b-ea39-4619-a468-59e73361b7c2&quot;&gt;마인드 풀니스 호흡법&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;07cd192b-761b-430c-81c0-f4db3aec0b5f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;기본자세를 취한다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a1ca69c6-1f6f-4855-88e1-417a63868627&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;몸의 감각을 의식하다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d6e4ede6-e7a7-4e9a-bc7f-a53f863244a2&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;호흡을 의식한다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;65c829ee-b0dd-4747-b9e7-b38532a9694d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;잡념이 떠오를 땐 그 사실을 알아차리고 호흡에 다시 주의를 집중한다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;de88298d-47fb-4ef7-af95-961de1e36f62&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;호흡은 의식의 닻이다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;990b1bb8-15f7-499d-a16f-8ade64c8ace3&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;잡념이 생기는 것은 당연하므로 스스로를 자책하지 않는다&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;81de063f-7a9e-45d5-a7fd-0b30e1154d07&quot;&gt;동작 명상 방법&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;eaa0b0b0-cf1d-4549-bdbe-04e78ac63428&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;걷기 명상 → 팔다리 근육, 관절의 움직임, 발바닥의 감각에 의식 집중&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4af6d3f9-4121-496f-8265-e746fecb9e79&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;선 자세 동작 명상 → 팔 근육의 움직임, 피의 쏠림 등에 의식을 집중&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b2668468-d0c0-4a93-bd22-8e784e8bb93d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;앉은 자세 동작명상 → 근ㅇ꽈 관절의 움직임과 감각에 의식을 집중&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;7c08591a-964e-49b6-a381-f6aa90177ab4&quot;&gt;뇌를 건강하게 만드는 방법&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cae45dcd-46a6-4674-a8bd-de12c68606c0&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;온-오프 전환 의식 갖기&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4bdb29c0-1f5a-4d27-8fde-ba639defc429&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;자연 접하기&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8babb596-52d2-4a78-9de5-73e14deda0e8&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;아름다운 것 경험하기&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;38e7880c-807b-4c60-9217-ab97886700fe&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;몰두할 수 있는 것 찾기&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0e342b63-e7fb-4c1b-b373-d9f44f553adc&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;고향 찾기&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;7ff2140a-bba8-4242-9a6b-93f837b509b1&quot;&gt;브리딩 스페이스&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f8f46430-384c-48cf-ad76-fbbf544051b3&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;스트레스의 영향을 알아차린다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;061384fd-97f1-4c1e-ab3b-309b2ede683c&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;호흡에 의식을 집중&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4a8d4d03-6f3a-4624-ad92-f8e8a819df68&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;몸 전체로 의식을 넓힌다&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;5c023e43-0806-4357-abf1-4e8b7d9686db&quot;&gt;몽키마인드 해소법&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7b7cc7aa-47e7-4053-8279-2386858b0719&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;사고에 라벨링을 해서 ‘여러번 생각했다’ 는 사실을 알아차린다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;df7fb976-2e8e-48a1-9f80-eef7645de061&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;같은 전제를 가지고 반복해서 생각하는 것이 아닌지 예외를 생각한다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;28f01ab7-19cd-474c-aa52-94c6c72d3ff0&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;존경하는 인물과 같은 현자의 관점에서 생각한다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;fa31528e-9de6-4a22-a6d3-bb4c0d03fd37&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;좋고 나쁨으로 판단하지 않는다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;27baf231-aec7-4f87-ae48-5a3c51991f6b&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;원인을 찾아본다.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;6cc5b007-72b6-4002-a8d6-186b928fd57e&quot;&gt;화가 날 때 RAIN 방법&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;5782e42b-d7d3-43cd-9ae9-defc287de22d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;화가 나는 것을 알아차린다. (Recognize)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;653eefe5-8e69-4907-80a5-14a2db4709ae&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;화가 난다는 현실을 받아들인다. (Accept)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cd91c9b5-85be-4354-9207-ce34fc1758d8&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;몸에 어떤 변화가 일어나는지 살펴본다 (Investigate)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;77a27114-beeb-4e65-ab45-c0e561658bf1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;화와 자신을 동일시하지 않고 분리한다 (Non-Identification)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>MIND</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1443</guid>
      <comments>https://sharingtime.tistory.com/1443#entry1443comment</comments>
      <pubDate>Tue, 18 Apr 2023 10:16:23 +0900</pubDate>
    </item>
    <item>
      <title>gp_dumpall - Postgresql 전체를 백업하고 싶을 때 사용하는 명령어</title>
      <link>https://sharingtime.tistory.com/1439</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;e060e119-7976-431c-b832-3497728f8f56&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;p id=&quot;7fea558c-6915-40de-818c-e0c8ef1ad367&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Postgresql 전체를 백업하고 싶을 때 사용하는 명령어로 pg_dumpall이 있다.&lt;/p&gt;
&lt;p id=&quot;8e88cef2-9b90-4831-9606-15c1968cf136&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;테이블 및 데이터 유형을 선택할 수 있는 pg_dump와 달리 pg_dumpall은 스키마를 포함 모든 데이터를 백업한다&lt;/p&gt;
&lt;pre id=&quot;73c34687-8d45-4e0b-8a9b-b692c35578bf&quot; class=&quot;code Bash&quot;&gt;&lt;code&gt;# postgres 계정 기준 백업할 때 pg_dumpall -f /all-backup.sql -U postgres  # postgres 계정 기준 백업할 때 (비밀번호가 있을 때) pg_dumpall -f /all-backup.sql -U postgres -W&lt;/code&gt;&lt;/pre&gt;
&lt;hr id=&quot;0f03ef2b-4efa-4464-8aee-9fad7435bba7&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p id=&quot;31926d7a-ced6-40a1-9a9d-47d12283a410&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관련 리서치:&lt;/b&gt;&lt;/p&gt;
&lt;ul id=&quot;06821154-1775-4a9e-b1a2-ccbefdd1b385&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;pg_dumpall&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Uploaded by&lt;/p&gt;
&lt;mark class=&quot;highlight-orange&quot;&gt;&lt;a href=&quot;https://github.com/jmjeon94/N2T&quot;&gt;N2T&lt;/a&gt;&lt;/mark&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>DATA</category>
      <category>Database</category>
      <category>db</category>
      <category>PostgreSQL</category>
      <category>데이터베이스</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1439</guid>
      <comments>https://sharingtime.tistory.com/1439#entry1439comment</comments>
      <pubDate>Mon, 13 Feb 2023 17:57:55 +0900</pubDate>
    </item>
    <item>
      <title>ifconfig에서 ip 내역만 확인하기</title>
      <link>https://sharingtime.tistory.com/1438</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;934cf06d-b8bb-49d5-8cb8-8da6b2d23251&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;p id=&quot;269250de-9a1c-4b0c-8436-d0c4f42e2cb1&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;ifconfig를 띄웠을 때 보통 ip 정보만을 보고 싶은 경우가 많다. 그럴 때 아래와 같이 입력하면 된다.&lt;/p&gt;
&lt;p id=&quot;614ee016-0ded-4003-958a-dc54739ca291&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;보통 &lt;a href=&quot;http://localhost&quot;&gt;localhost&lt;/a&gt; ip와 자신에게 할당된 ip로 2개가 출력된다.&lt;/p&gt;
&lt;pre id=&quot;5ecab187-8385-4560-a3fe-0081f1c028ee&quot; class=&quot;code Bash&quot;&gt;&lt;code&gt;ifconfig | grep 'inet ' | awk '{print $2}'&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;p class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Uploaded by&lt;/p&gt;
&lt;mark class=&quot;highlight-orange&quot;&gt;&lt;a href=&quot;https://github.com/jmjeon94/N2T&quot;&gt;N2T&lt;/a&gt;&lt;/mark&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>DEV</category>
      <category>ifconfig</category>
      <category>Linux</category>
      <category>script</category>
      <category>리눅스</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1438</guid>
      <comments>https://sharingtime.tistory.com/1438#entry1438comment</comments>
      <pubDate>Mon, 6 Feb 2023 14:36:39 +0900</pubDate>
    </item>
    <item>
      <title>SQL 프로시저 목록 및 쿼리 확인하기</title>
      <link>https://sharingtime.tistory.com/1437</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;7eee4632-1a4a-4941-ae90-eb8eb3c2f4b6&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;p id=&quot;c73a3167-21a4-4eae-95d8-cea94893db06&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;mySQL에서 현재 실행중인 프로시저 목록을 확인하고자 한다면 아래와 같이 사용할 수 있다.&lt;/p&gt;
&lt;p id=&quot;74d16a0d-ab0e-44c2-8ca7-2c93d290df50&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;다만 권한이 있어야 하며 권한이 없으면 결과가 나오지 않을 수도 있다.&lt;/p&gt;
&lt;pre id=&quot;709bb9f1-43fc-4f02-9b1f-7895abaadcc0&quot; class=&quot;code Bash&quot;&gt;&lt;code&gt;show procedure status; show procedure status where Db = 'DB이름';&lt;/code&gt;&lt;/pre&gt;
&lt;hr id=&quot;ca7b0fa5-75d2-4591-9610-580660e4b367&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p id=&quot;d839c54e-3645-4019-94dc-b0ab7c2c31e9&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관련 리서치:&lt;/b&gt;&lt;/p&gt;
&lt;ul id=&quot;b6ae6eb2-0415-48f2-907e-9df7121db4c1&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a href=&quot;https://seeminglyjs.tistory.com/388&quot;&gt;[MySQL] 마이SQL 프로시저 리스트 확인하는 명령어&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Uploaded by&lt;/p&gt;
&lt;mark class=&quot;highlight-orange&quot;&gt;&lt;a href=&quot;https://github.com/jmjeon94/N2T&quot;&gt;N2T&lt;/a&gt;&lt;/mark&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>DATA</category>
      <category>data</category>
      <category>SQL</category>
      <category>데이터</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1437</guid>
      <comments>https://sharingtime.tistory.com/1437#entry1437comment</comments>
      <pubDate>Mon, 6 Feb 2023 14:36:37 +0900</pubDate>
    </item>
    <item>
      <title>윈도우에서 N2T 사용시 인코딩 에러 수정</title>
      <link>https://sharingtime.tistory.com/1436</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;3b062610-667d-46b4-b606-f1cd091f04f3&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;p id=&quot;0e395313-8ac4-4ef1-845e-c88e10d8c497&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;아래 본문댓글에 있던 내용을 좀 더 갈무리&lt;/p&gt;
&lt;pre id=&quot;ef9fd6c4-295f-4589-af0a-85f5e870a728&quot; class=&quot;code Python&quot;&gt;&lt;code&gt;# notion-py는 github에서 직접 설치 pip3 uninstall -y notion-py pip3 install git+https://github.com/wsykala/notion-py.git  # ㅈebdriver-manager 관련 cmd_mapping = { KeyError: 'google-chrome'...} 에러의 경우 pip list 를 통해 webdriver-manager 버전이 3.8.0이면 지우고 3.7.1로 재설치&lt;/code&gt;&lt;/pre&gt;
&lt;hr id=&quot;fe46ce41-d01f-43d5-9dff-cdf41be503ba&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p id=&quot;f39886fc-e823-47c1-b4cf-b2d554b793bc&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관련 리서치:&lt;/b&gt;&lt;/p&gt;
&lt;ul id=&quot;4f6ea039-b376-454e-90dc-dbe6aeefb922&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a href=&quot;https://minimin2.tistory.com/176&quot;&gt;&lt;b&gt;&lt;b&gt;Notion에서 Tistory로 자동 업로드 #8 (N2T)&lt;/b&gt;&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Uploaded by&lt;/p&gt;
&lt;mark class=&quot;highlight-orange&quot;&gt;&lt;a href=&quot;https://github.com/jmjeon94/N2T&quot;&gt;N2T&lt;/a&gt;&lt;/mark&gt;&lt;/div&gt;
&lt;/article&gt;</description>
      <category>DEV</category>
      <category>Python</category>
      <category>Tistory</category>
      <category>티스토리</category>
      <category>파이썬</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1436</guid>
      <comments>https://sharingtime.tistory.com/1436#entry1436comment</comments>
      <pubDate>Mon, 6 Feb 2023 14:36:34 +0900</pubDate>
    </item>
    <item>
      <title>도커 볼륨 마운트 개요</title>
      <link>https://sharingtime.tistory.com/1435</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;26461b1f-b116-4313-8553-5184aa2e5b5b&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;figure id=&quot;670943c4-9c92-4605-b868-d125ff7b318c&quot; class=&quot;block-color-gray_background callout&quot; style=&quot;white-space: pre-wrap; display: flex;&quot;&gt;
&lt;div style=&quot;font-size: 1.5em;&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%;&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;b&gt;Today I Learned 요약 (37회차)&lt;/b&gt;&lt;/mark&gt; - 도커 컨테이너는 휘발성이기 때문에 데이터를 보존하기 위해 별도의 볼륨을 두고 컨테이너가 외부의 데이터를 다루게 할 수 있다.&lt;/div&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;367e91e1-b36d-4e0c-9889-63359964354e&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;도커 볼륨 마운트 개요&lt;/h2&gt;
&lt;p id=&quot;b17ff769-692a-4b3b-a244-94e417ea7aa8&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;볼륨은 스토리지의 한 영역을 분할한 것을 의미한다. 그리고 도커 컨테이너는 휘발성이기 때문에 종료가 되면 기존 데이터는 소멸된다. 이러한 상황에서 컨테이너 외부의 별도 볼륨을 두고 마운트시켜서 컨테이너가 외부의 데이터를 다룰 수 있게 할 필요가 있다.&lt;/p&gt;
&lt;p id=&quot;39221707-1eff-43fb-9d65-f34d35a9de80&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul id=&quot;b051dfed-45da-43fc-a004-31d46a2b7081&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;볼륨 마운트
&lt;ul id=&quot;c109643f-7894-4f1b-8dd3-308f800e4403&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;도커 엔진이 관리하는 영역 내 만들어진 볼륨을 컨테이너에 디스크 형태로 마운트 (임시용이나 지우면 안되는 파일을 두는 목적으로 많이 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;9d2d7739-f97c-47e3-9d3b-74620848e7aa&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;바인드 마운트
&lt;ul id=&quot;43d50c59-2f31-41f2-8073-7e47b6d0c909&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;도커가 설치된 컴퓨터의 디렉토리(폴더) 등 도커 엔진에서 관리하지 않는 외부 영역의 기존 데이터를 컨테이너에 마운트하여 연결하는 방식이다 (자주 사용하는 파일을 두는 데 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;0267a34a-bcb4-4eb2-8ba2-bbf79b1881ad&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;tmpfs 마운트
&lt;ul id=&quot;28baf3ad-fdcf-41eb-8f17-bb7b00d248bf&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle;&quot;&gt;주 메모리 영역을 마운트해서 사용하고, 속도가 높지만 도커가 정지되거나 호스트가 재부팅하면 소멸&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;dcf655b7-cd10-49a7-aa5c-b390b42a47af&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;6256e882-27cf-4a40-b639-420293d45036&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;볼륨과 바인드 마운트 방식의 차이점는 아래와 같다.&lt;/p&gt;
&lt;ul id=&quot;8ba040a5-04a2-4e9d-88c2-68cbfe94ccf9&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;볼륨 마운트는 처음엔 접근이 어렵지만 익숙해진다면 경로 설정 등의 부담이 줄어들어서 권장.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;3c34830d-7d06-4e05-a324-eccf9370b9a4&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;바인드 마운트는 외부의 어떠한 폴더라도 파일을 둘 수 있으며 기존과 동일하게 사용할 수 있기에 외부 프로그램으로 편집도 가능하지만 외부의 변화(삭제, 편집) 등의 영향을 받을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;3a673818-4596-411b-a152-9305ba8195d2&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;f0569528-e62a-4939-a02a-797bead12475&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;어떠한 방식을 사용하든 스토리지 마운트는 run 커맨드로 실행한다.&lt;/p&gt;
&lt;p id=&quot;b07b62df-f3d6-43cb-9a5a-f290bc2ba767&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;볼륨 마운트의 경우, 스토리지 영역을 우선 생성한다.&lt;/p&gt;
&lt;p id=&quot;fbef2e4c-6a97-4186-8f1c-2fce5da9f6bd&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;32f135cd-88de-4839-8acd-c7862dd5ca53&quot; class=&quot;code Bash&quot;&gt;&lt;code&gt;# 볼륨 생성, 삭제 방법 docker volumne create {볼륨이름} docker volume rm {볼륨이름}  # 스토리지, 볼륨 마운트 방법 docker run ... -v 스토리지_실제_경로:컨테이너_마운트_경로 ... docker run ... -v 볼륨_이름:컨테이너_마운트_경로 ...  # 아파치 컨테이너 기반 예제 (로컬경로는 e:\docker_volume으로 지정) docker run --name apa000ex20 -d -p 8090:80 -v {e:\docker_volume}:/usr/local/apache2/htdocs httpd  # --------------------  # 볼륨 마운트해보기 docker volume create apa000vol1  # 아파치 컨테이너 실행 docker run --name apa000ex21 -d -p 8091:90 -v apa000vol1:/usr/local/apache2/htdocs httpd  # volume Inspect 커맨드로 볼륨 상세 정보 확인 docker volume inspect apa000vol1  # 아래와 같이 출력됨 [     {         &quot;CreatedAt&quot;: &quot;2022-12-11T22:13:04Z&quot;,         &quot;Driver&quot;: &quot;local&quot;,         &quot;Labels&quot;: {},         &quot;Mountpoint&quot;: &quot;/var/lib/docker/volumes/apa000vol1/_data&quot;,         &quot;Name&quot;: &quot;apa000vol1&quot;,         &quot;Options&quot;: {},         &quot;Scope&quot;: &quot;local&quot;     } ]  # 컨테이너 Insepct 명령어 docker container inspect apa000ex21  # 도커 볼륨 삭제 docker volume rm apa000vol1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/article&gt;</description>
      <category>CLOUD</category>
      <category>Docker</category>
      <category>도커</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1435</guid>
      <comments>https://sharingtime.tistory.com/1435#entry1435comment</comments>
      <pubDate>Mon, 12 Dec 2022 07:21:11 +0900</pubDate>
    </item>
    <item>
      <title>[MEMO] 예제를 입력하면 정규 표현식을 생성해주는 Regex Generator</title>
      <link>https://sharingtime.tistory.com/1434</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;330015d6-3fa2-4f06-ab51-ec574f6e9914&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;a00ced96-f494-4e85-bb75-7b9b8e2747d6&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;MEMO 요약&lt;/strong&gt;&lt;/mark&gt;
- Regex Generator를 사용하여 간편하게 Regex를 생성할 수 있따.&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;fd514f60-6c1f-49f5-85c1-c469569f6dae&quot;&gt;예제를 입력하면 정규 표현식을 생성해주는 Regex Generator&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;0c26a0a2-c2ae-4edd-90b5-070113bc2a62&quot;&gt;전화번호나 이메일 등 특정 스트링을 보고 거기에 맞는 정규 표현식(regex)를 만들어본 과정은 자주 겪어 봤을 것이다. 보통은 연습삼아, 그리고 정교하게 하기 위해 한땀한땀 Regex를 작성하게 되는데 이럴 때 도움이 되는 사이트로 Regex Generator(&lt;a href=&quot;https://regex-generator.olafneumann.org/&quot;&gt;https://regex-generator.olafneumann.org/&lt;/a&gt;)라는게 있다. &lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;c5536f28-cf43-4be7-a300-dca8bca232bc&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;c065974b-5df1-4bd9-b362-c6c8359a4435&quot;&gt;여기서는 특정 스트링을 입력하면 규칙을 선택한 뒤 Regex를 작성해준다. 선택할 수 있는 옵션에 제한이 있을 수 있어 완벽하진 않지만 1차적으로 시작하기엔 꽤 괜찮아 보인다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;7974b790-e85d-4c1c-bc8f-bdbe17e50311&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bGximZ/btrTgp63dPm/bDfPTKkzVE2vvNtuHxugkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGximZ/btrTgp63dPm/bDfPTKkzVE2vvNtuHxugkK/img.png&quot; style=&quot;width:1410px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;image&quot; id=&quot;27ab3473-6c22-4f69-87ad-6f24a3a31fd9&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/RbnO2/btrTgedA0Cq/k1kzTv4gTlqEoAmTbVSez1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RbnO2/btrTgedA0Cq/k1kzTv4gTlqEoAmTbVSez1/img.png&quot; style=&quot;width:2010px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;10c43d82-0704-4a36-9b41-111a83ea5021&quot;&gt;1번 칸에 Regex를 얻고자 하는 값을 입력하고 2번 단계의 색깔 블럭에서 자신이 원하느 규칙을 클릭하게 되면 3번 단계에서 Regex로 변환해준다. 단순한 값이면 바로 써도 되고, 애매하면 다른 Regex 검수 사이트에서 교차 검증을 해봐도 좋을 듯 하다.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>DATA</category>
      <category>regex</category>
      <category>정규식</category>
      <category>표현식</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1434</guid>
      <comments>https://sharingtime.tistory.com/1434#entry1434comment</comments>
      <pubDate>Fri, 9 Dec 2022 17:21:49 +0900</pubDate>
    </item>
    <item>
      <title>[MEMO] [explainshell.com](http://explainshell.com) - 리눅스 쉘 명령어 해석 도구</title>
      <link>https://sharingtime.tistory.com/1433</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;38ea7f32-0de8-4c44-a0f0-09aa246b144b&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;dfb2ce77-50e5-47a6-8180-c34d09c9151e&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;MEMO 요약&lt;/strong&gt;&lt;/mark&gt;
- &lt;a href=&quot;http://explainshell.com&quot;&gt;explainshell.com&lt;/a&gt; 을 사용하여 리눅스 쉘 명령어에 대해 이해할 수 있다.&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;ebd3b13d-1ede-4bc8-ac93-58b180cf1931&quot;&gt;&lt;a href=&quot;http://explainshell.com/&quot;&gt;explainshell.com&lt;/a&gt; - 리눅스 쉘 명령어 해석 도구&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;3aa970a9-941b-476e-b5ac-e999b708b02f&quot;&gt;리눅스 명령어 관련 예시를 찾고, 시키는대로 하다 보면 동작은 하는데 명령어가 어떻게 구성되는지 혼란스러울 때가 있다. 그럴 때 도움이 되는 사이트로 &lt;a href=&quot;http://explainshell.com&quot;&gt;explainshell.com&lt;/a&gt; 이라는 사이트가 있어서 거기에 해당 명령어를 입력하면 ‘단위’로 쪼개서 어떤 명령어와 파라미터로 구성되어 있는지 친절하게 설명해준다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;587a6aa3-eb2f-4933-bfc1-be0ceba66393&quot;&gt;
&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;2c54f190-560b-4b40-9344-1b15e1d48dc2&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/c3rmjW/btrS7I1fUJa/9KH9KKmaSmLKk0vMfkrO10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3rmjW/btrS7I1fUJa/9KH9KKmaSmLKk0vMfkrO10/img.png&quot; style=&quot;width:768px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;e28d3796-fa6f-4f36-bfdf-887649285ca7&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>DEV</category>
      <category>Command</category>
      <category>Linux</category>
      <category>script</category>
      <category>Shell</category>
      <category>리눅스</category>
      <category>명령어</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1433</guid>
      <comments>https://sharingtime.tistory.com/1433#entry1433comment</comments>
      <pubDate>Fri, 9 Dec 2022 10:31:29 +0900</pubDate>
    </item>
    <item>
      <title>도커 컨테이너와 호스트 간 파일 복사</title>
      <link>https://sharingtime.tistory.com/1432</link>
      <description>&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;
&lt;article id=&quot;94fd9334-d48b-4952-bfb9-e07cece27926&quot; class=&quot;page sans Notion&quot;&gt;&lt;header&gt;&lt;/header&gt;
&lt;div class=&quot;page-body Tistory&quot;&gt;
&lt;figure id=&quot;f47e3cba-850d-4e60-9ea5-d92f8ae60d58&quot; class=&quot;block-color-gray_background callout&quot; style=&quot;white-space: pre-wrap; display: flex;&quot;&gt;
&lt;div style=&quot;font-size: 1.5em;&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%;&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;b&gt;Today I Learned 요약 (36회차)&lt;/b&gt;&lt;/mark&gt; - docker cp 명령어를 사용하여 컨테이너와 호스트 간에 파일을 전송할 수 있다&lt;/div&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;fd059008-ef29-4881-9e4b-81def52fc564&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;도커 컨테이너와 호스트 간 파일 복사&lt;/h2&gt;
&lt;p id=&quot;94dfc82d-4d95-4969-9567-164e4c195a67&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;도커 컨테이너와 호스트(우리가 사용 중인 컴퓨터) 간에 파일을 복사하기 위해서는 docker cp 명령어를 사용하면 된다.&lt;/p&gt;
&lt;pre id=&quot;7fe3deea-16dd-46f6-94cd-5574588d5b84&quot; class=&quot;code Bash&quot;&gt;&lt;code&gt;# 명령어 예시 (전송 방향은 호스트와 컨테이너의 위치를 서로 바꾸면 됨) # docker cp {호스트 경로} {컨테이너 이름}:{컨테이너 경로} # 윈도우에서는 경로를 {PATH}\{PATH} 식이고 리눅스에서는 {PATH}/{PATH}로 기입한다.&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;9d0671d5-8136-4b4c-981e-a04cec75e939&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;8d15fbe8-543b-44da-8735-36ceca2636b0&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;테스트 할 파일로 index.html 를 만들어본다.&lt;/p&gt;
&lt;pre id=&quot;347c62c0-02d8-4ae9-9057-29c239331800&quot; class=&quot;code HTML&quot;&gt;&lt;code&gt;&amp;lt;html&amp;gt; &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt; &amp;lt;body&amp;gt; &amp;lt;div&amp;gt;안녕하슈!&amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;4f867228-ba61-471b-beb4-69505d899778&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;f8cbb949-d6aa-44e9-bc15-2642f5c8387f&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;아파치 컨테이너를 생성하여 해당 html 파일을 넣어보도록 하겠다. 반대도 순서만 변경되고 절차는 동일하다&lt;/p&gt;
&lt;pre id=&quot;fd852cc3-4658-486f-bb7e-349cf16605dd&quot; class=&quot;code Bash&quot;&gt;&lt;code&gt;# 아파치 컨테이너 생성 및 실행 docker run --name apa000ex19 -d -p 8089:80 httpd  # 파일 전송 (윈도우 -&amp;gt; 도커이고 여기서는 e드라이브에 파일이 있는 걸로 간주) docker cp e:\index.html apa000ex19:usr/local/apache2/htdocs&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;6d2ddd6c-f780-426f-b0db-64b1843c059b&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;c90e7d47-3691-46d0-ba5f-bb71ed88d060&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;브라우저에서 localhost:8089를 열고 전송 전후를 비교할 때 아래와 같이 index.html이 교체된 것을 확인할 수 있다.&lt;/p&gt;
&lt;figure id=&quot;f7705ac1-11ad-47fc-88a8-4dcf0d6b944c&quot; class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/sEAS4/btrSPPLoEsx/2rVKZLbYD21jOVnThXFhXK/img.png&quot;&gt;&lt;img style=&quot;width: 259px;&quot; src=&quot;https://blog.kakaocdn.net/dn/sEAS4/btrSPPLoEsx/2rVKZLbYD21jOVnThXFhXK/img.png&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;c5c1078f-eb01-45b8-837a-177a0d9f0325&quot; class=&quot;image&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cfBhVP/btrSJUAtlIp/8yH26j3FSEjZQa7mTij2Ik/img.png&quot;&gt;&lt;img style=&quot;width: 240px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cfBhVP/btrSJUAtlIp/8yH26j3FSEjZQa7mTij2Ik/img.png&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/article&gt;</description>
      <category>CLOUD</category>
      <category>apache</category>
      <category>Docker</category>
      <category>도커</category>
      <category>아파치</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1432</guid>
      <comments>https://sharingtime.tistory.com/1432#entry1432comment</comments>
      <pubDate>Mon, 5 Dec 2022 08:03:52 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 도커 워드프레스 및 레드마인 실행 연습</title>
      <link>https://sharingtime.tistory.com/1431</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;c2eb8ef2-dd7d-4a9f-968c-5cbd3c4ddf69&quot;&gt;&lt;header&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;b8a4177f-fec4-47bd-a9a1-6ba5d23c2b75&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;Today I Learned 요약 (35회차)&lt;/strong&gt;&lt;/mark&gt;
- 파라미터를 사용해서 도커에서 워드프레스 실행 연습 작성&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;06e9a35c-efcf-4901-84bc-c02f97046fc7&quot;&gt;도커 워드프레스 실행 연습&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;68cbb431-f754-4dbc-9785-1f0ab7e801da&quot;&gt;MySQL 컨테이너 옵션 채워넣어서 실행&lt;/p&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;c982fc3a-a472-4561-a54e-66d82444e10f&quot;&gt;&lt;code&gt;docker run --name mysql000ex11 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;07394682-6459-4062-952a-32b0b41f721d&quot;&gt;워드프레스 컨테이너 옵션 채워넣어서 실행&lt;/p&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;38483997-1551-44e8-8128-11e14f0cd9be&quot;&gt;&lt;code&gt;docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;7e7be979-5072-429a-94bb-2923f725e1f1&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;faf27a4b-5242-4716-bb9b-0a962feb45d3&quot;&gt;&lt;strong&gt;도커 run 옵션 간단 요약&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;fca0e19e-0392-441c-b8fd-8486248ebf98&quot;&gt;--name : 컨테이너 이름 지정&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;077c87d6-23d2-4a0f-bb88-c58cf1ff0b1b&quot;&gt;-dit : d(백그라운드 실행) / it(컨테이너 bash 입력)&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;89a80a54-4f0d-4a4a-848a-4576cd7f00a8&quot;&gt;-p : 포트 지정&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;bd43f1ef-25f0-47bf-825e-128807adc89b&quot;&gt;-e : 컨테이너 환경 변수 지정&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;346337bd-01eb-429d-afc4-abee3b95b1ba&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;0467cebb-f095-427a-9f9f-aca10c868c05&quot;/&gt;&lt;p class=&quot;&quot; id=&quot;cc6d8996-e971-452c-b031-33355fe7b7c2&quot;&gt;&lt;a href=&quot;https://note.espriter.net/tag/docker&quot;&gt;&lt;strong&gt;docker&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; 관련 리서치한 것:&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;92f3851c-d745-4113-bd8e-a0e98687f478&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.daleseo.com/docker-run/&quot;&gt;docker run 커맨드 사용법&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8be91da3-1580-4237-850b-40fe7073ebb7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://pyrasis.com/jHLsAlwaysUpToDateDocker/Unit13/28&quot;&gt;이재홍의 언제나 최신 Docker - Unit 13.28 run&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;cc4dd98d-3ce6-4eea-a191-a27265b7a6ac&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>CLOUD</category>
      <category>Docker</category>
      <category>도커</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1431</guid>
      <comments>https://sharingtime.tistory.com/1431#entry1431comment</comments>
      <pubDate>Mon, 21 Nov 2022 18:23:09 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 도커로 워드프레스 실행하기</title>
      <link>https://sharingtime.tistory.com/1430</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;2f871f83-5ae4-4663-b60c-ea1cddb52130&quot;&gt;&lt;header&gt;&lt;div class=&quot;page-header-icon undefined&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;331642f7-bc8a-45ef-9775-75921f71c780&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;Today I Learned 요약 (34회차)&lt;/strong&gt;&lt;/mark&gt;
- 워드프레스, MySQL 컨테이너를 사용하여 워드프레스를 구축할 수 있다.&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;53929a38-2f2b-4e8f-88b3-40a2403ec71d&quot;&gt;도커로 워드프레스 실행하기&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;95b92e0a-fe87-4478-89e2-ed9c6ebc9872&quot;&gt;도커로 워드프레스를 구축하려면 크게 워드프레스 컨테이너와 SQL 컨테이너가 필요하다. 단, 2개의 컨테이너만 실행해서는 정상 동작하지 않기 때문에 중간에 가상 네트워크를 만들고, 해당 네트워크에 2개 컨테이너를 소속 시켜 연결한다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;fa539fd7-8124-4457-b4cb-7c897896fa5f&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;37b84553-9f48-4aa6-9b8b-b0998e36667c&quot;&gt;대략 아래의 순서대로 진행된다.&lt;/p&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;f5ec61f6-8828-4728-a0ca-0ffe0bf06b21&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;도커 네트워크 생성&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;512b8043-eddc-42d9-a038-1e1b3b66cb58&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;MySQL 컨테이너 생성(네트워크 및 SQL 설정 정보 기입)&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;22829e09-c11a-460e-a5e4-4552233abc8a&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;워드프레스 컨테이너 생성(네트워크 및 포트, 워드프레스 db 정보 입력)&lt;/li&gt;&lt;/ol&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;a8102f16-bb2c-42c2-91df-42875ea14c34&quot;&gt;&lt;code&gt;# 도커 네트워크 생성
#docker network create {네트워크_이름}
docker network create wordpress000net1

# 네트워크 생성 확인
docker network ls

# MySQL 컨테이너 생성
docker run --name mysql000ex11 -dit --net=wordpress000net1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password

# 워드프레스 컨테이너 생성 
docker run --name wordpress000ex12 -dit --net=wordpress000net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000kun -e WORDPRESS_DB_PASSWORD=wkunpass wordpress&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;e6e5aa5c-ace0-443e-9ae4-364b75ef8ed8&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;de7a6af6-3d81-45c5-bef4-c4a90a73e8bc&quot;&gt;정상적으로 컨테이너가 실행되었다면 워드프레스 및 MySQL 컨테이너가 실행되고 서로 연결되어 http://localhost:8085에 접근할 수 있게 된다. 만약 오류가 날 경우 높은 확률로 오타일 가능성이 높다. 아래와 같이 언어를 선택하고 워드프레스를 설정할 수 있게 된다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;63a88d64-fb30-40b5-a550-6736f5c98300&quot;&gt;
&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;57801ea9-dc1d-445e-81c9-63bdfebd7282&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/l5F14/btrRhWGbhOx/vmC2rxkBHSO59cp0sKKnN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l5F14/btrRhWGbhOx/vmC2rxkBHSO59cp0sKKnN0/img.png&quot; style=&quot;width:480px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;image&quot; id=&quot;fbed7d8f-c98c-46ab-8a7b-88959e89bb85&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/ZZXo3/btrRicWi4KZ/sfEBHxHw3khJe6QJpiQWD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZZXo3/btrRicWi4KZ/sfEBHxHw3khJe6QJpiQWD0/img.png&quot; style=&quot;width:480px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;5ccba178-308f-4acc-b7d3-fcbbc5b16cdd&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;3c09dc5d-8c33-42d9-815a-672592db8dbb&quot;&gt;뒷정리하려면 아래와 같이 컨테이너를 중지한 뒤 삭제하고, 이미지 → 네트워크 순으로 삭제하면 된다.&lt;/p&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;df711c12-336b-4907-a752-36209836ad57&quot;&gt;&lt;code&gt;# 컨테이너 중지
docker stop wordpress000ex12
docker stop mysql000ex11

# 컨테이너 삭제
docker rm wordpress000ex12
docker rm mysql000ex11

# 이미지 삭제
docker image rm wordpress
docker image rm mysql

# 네트워크 삭제
docker network rm wordpress000net1&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;column-list&quot; id=&quot;2e658365-681a-406f-8de8-abba33f2089b&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;25da0b0f-b624-4727-93f9-8175ddebc6e0&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;f26409c4-581c-438f-bcb4-8e08803c7ca7&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;337a3526-69b0-4e37-a68e-f761adbb4e25&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;419e9152-87e5-4838-9c82-0652d17b5134&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;241a4fa4-9501-4e8a-bdd4-6a513e99c1e1&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;cb7df8f5-9862-4113-8e8c-f404329f23c9&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>CLOUD</category>
      <category>Docker</category>
      <category>Wordpress</category>
      <category>도커</category>
      <category>워드프레스</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1430</guid>
      <comments>https://sharingtime.tistory.com/1430#entry1430comment</comments>
      <pubDate>Tue, 15 Nov 2022 23:33:11 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Docker 이미지 삭제하기</title>
      <link>https://sharingtime.tistory.com/1429</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;bc1fb5ec-9821-42b1-8132-9634c89581e6&quot;&gt;&lt;header&gt;&lt;div class=&quot;page-header-icon undefined&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;e456c527-ab33-4996-b115-f42cadf620cd&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;Today I Learned 요약 (33회차)&lt;/strong&gt;&lt;/mark&gt;
- docker image rm 명령어를 통해 도커 이미지를 삭제할 수 있다&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;fd07009c-cb15-49af-bf23-116b3b81034a&quot;&gt;Docker 이미지 삭제하기&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;f2f21e97-715a-47bc-90cf-5eb4cb445c25&quot;&gt;도커에서 컨테이너를 run 했다가 stop 했다가 rm(삭제) 하더라도 그 틀이라 할 수 있는 이미지 파일은 남는다. 컨테이너 여러개를 생성했다 지웠다를 반복할 경우 이미지 용량이 계속해서 증가하기 때문에 docker image rm 명령어를 통해 이미지를 삭제할 수 있다. 이미지 삭제 전에 컨테이너가 존재하는지 확인 후 삭제한다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;456905cc-d31b-4f02-8b77-2d0d1e4a2662&quot;&gt;
&lt;/p&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;156a4566-e6dc-418d-b0d7-d0772e414bfd&quot;&gt;&lt;code&gt;# 기존 도커 컨테이너 확인
docker ps
# 도커 이미지 확인
docker image ls
# 단일 이미지 삭제
docker image rm {이미지이름}
# 여러 이미지 삭제
docker image rm {이미지이름} {이미지이름} {이미지이름}&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;column-list&quot; id=&quot;8fffc9e6-62a9-416c-b9e5-03a7b96765d4&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;a73f9676-c4bd-4c82-a8b8-1224a1ee8f7e&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;059fff76-6358-4c38-9ba3-fab90d2f34b5&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;94123130-2737-4f1a-9531-b427b5ec4078&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;033ac725-fe1f-41da-97da-58b67bf1ddfe&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;b5a29ae6-3fbc-4958-8db5-1b06123a8fd1&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;9e1ce08e-5c2e-4973-ae77-bbcad2f2bb20&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>CLOUD</category>
      <category>Docker</category>
      <category>도커</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1429</guid>
      <comments>https://sharingtime.tistory.com/1429#entry1429comment</comments>
      <pubDate>Mon, 14 Nov 2022 16:11:24 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS 재해복구(DR) 관련 단어 메모</title>
      <link>https://sharingtime.tistory.com/1428</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;55d3a5c3-65a3-4e9a-a8b4-9ddfdfb2969e&quot;&gt;&lt;header&gt;&lt;div class=&quot;page-header-icon undefined&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;5df2c47e-680e-494a-9335-e7d90ae6a42c&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;Today I Learned 요약 (32회차)&lt;/strong&gt;&lt;/mark&gt;
- 재해 복구 관련 AWS에서는 복구시점(RPO)와 복구시간(RTO)를 정의하고 이에 맞춰 DR 전략을 수립할 것을 권고하고 있다.
- 다중 동기화/복원이 많을 수록 워크로드는 안정되지만 그만큼 비용이 급상승하게 된다.&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;2dc97751-e05d-4146-9c76-31ffa0529992&quot;&gt;AWS 재해복구(DR) 관련 단어 메모&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;953674c6-ef40-41b5-8c2f-8f2ac1703fe9&quot;&gt;카카오 서비스 셧다운 쯤해서 나도 재해복구(Disaster Recovery)에 대해 보다 관심을 가지게 되었다. 있을 순 있지만 남일이라고 생각하고 있었다는 게 적절할 것 같다. 실제로 겪어본 적도 없고… 하지만 카카오가 당하는 걸 보면서 나도 관련 개념에 대해 이해할 필요가 있다고 느껴서 메모를 정리하게 되었다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;ba501d37-4ef7-438d-9211-6551c062be0f&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;f1a71d6d-fb5d-49ac-9eda-64972996f81d&quot;&gt;우선 AWS의 재해복구 관련 문서를 찾아보고 관련 단어(개념)들에 대해 메모해두려고 한다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;d8a0b9fb-96d6-4eef-b86a-782aa78f5757&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bP210D/btrQZzcgMq5/FAKessJw8MxMXhwKpyj7MK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP210D/btrQZzcgMq5/FAKessJw8MxMXhwKpyj7MK/img.png&quot; style=&quot;width:480px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;5aa346e4-7827-477e-afe4-402c48c3f71c&quot;&gt;AWS에서는 재해 발생 시각을 전후로 복구시점(RPO)와 복구시간(RTO)을 정의하고 있다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;be8ab577-9fcc-48a7-abb7-9664555bd277&quot;&gt;
&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cd57b50c-0877-4634-80af-94a74a1b4576&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;복구시점(RPO - Recovery Point Objective)&lt;ul class=&quot;bulleted-list&quot; id=&quot;4ef2947f-a3e3-4a50-8089-80273da55b23&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;서비스 중단 시점과 서비스 복원 시점 간에 허용되는 최대 지연 시간으로, 서비스를 사용할 수 없는 상태로 허용되는 기간&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;9fd7a046-9160-4f3f-9531-4a3936e6aa07&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;복구시간(RTO - Recovery Time Objective)&lt;ul class=&quot;bulleted-list&quot; id=&quot;290ae530-f8c8-42dd-8b2c-c296345d9976&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;마지막 데이터 복구 시점 이후 허용되는 최대 시간으로, 마지막 복구 시점과 서비스 중단 시점 사이에 허용되는 데이터 손실량&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;22b1df09-a63b-4f64-bd28-32b5ab98130e&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;a06d99f3-57e8-4ad1-b367-ce2647658c8c&quot;&gt;위 2가지는 낮을 수록 좋지만 낮게 잡으면 잡을수록 비용은 급속도로 증가하게 된다. 따라서 각자 상황에 따라 RPO와 RTO를 커스텀하게 정의하게 된다. 설정된 RTO와 RPO에 따라 선택할 수 있는 재해복구 전략으로 AWS는 4가지를 소개하고 있다.&lt;/p&gt;&lt;figure class=&quot;image&quot; id=&quot;44ed7cbd-6ef6-4aa1-9ef9-2d0d55c81c01&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cJ7G7b/btrQYDGK8K7/OnyPvVqgHalWrdRG4bmAmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ7G7b/btrQYDGK8K7/OnyPvVqgHalWrdRG4bmAmK/img.png&quot; style=&quot;width:630px&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;54cdbf6d-1e98-45f5-bb06-d60c1d1b3c7c&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;백업 및 복원&lt;ul class=&quot;bulleted-list&quot; id=&quot;096f006e-7a07-4ef0-81b3-a023d8b25c93&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;스냅샷 느낌으로 ‘복구 리전’에 데이터와 애플리케이션을 백업해놓고 재해 발생시 최종 스냅샷을 복구하는 것&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;88798f9d-c89c-47b1-a00d-757cb4aa7c34&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;파일럿 라이트(pilot light)&lt;ul class=&quot;bulleted-list&quot; id=&quot;95030a56-3064-4cdd-848f-f96af1c5e882&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;코어 서비스의 복사본을 별도의 복구 리전에 프로비저닝하는 것. 데이터 역시 복구 리전에 복제된다. 백업을 위한 자원을 계속해서 동작 상태로 유지된다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7777e926-1a37-4434-9116-eae8448eba10&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;웜 대기(worm standBy)&lt;ul class=&quot;bulleted-list&quot; id=&quot;72427226-e488-4d2c-8c4b-76442335b2e2&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;모든 기능이 동일하지만 축소된 버전의 워크로드를 복구 리전에서 상시 실행중인 상태로 유지하는 상태. 재해 발생시 축소된 워크로드가 프로덕션 환경을 대체하게 되며 웜 대기가 확대될 수록 RTO는 낮아지게 됨&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3e2f1d88-b47c-4106-81a0-48601715068a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;복수 리전 액티브&lt;ul class=&quot;bulleted-list&quot; id=&quot;bc21f8e0-f006-4f5d-9089-5f7bddacb6f8&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;워크로드가 동시에 여러 리전에 배포되고 능동적을로 트래픽이 처리됨. 해당 전략을 사용하려면 리전 전체에서 데이터 및 어플리케이션 동기화가 이뤄져야 함. 서로 다른 리전에서 복제본에 동일 레코드 값을 쓸 수 있는 충돌을 처리해야 하는데 해당 문제가 복잡할 수 있음. 가장 유용하지만 가장 비용이 많이 발생함.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;8537e277-a20c-4f59-bb21-3348d8637eb8&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;8b8ccaca-fddc-4bde-9fa9-fd9478c6ff27&quot;/&gt;&lt;p class=&quot;&quot; id=&quot;a7a47679-e153-4a14-a8c3-fd88427915f2&quot;&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot;&gt;AWS&lt;/a&gt;&lt;strong&gt; 관련 리서치한 것:&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;27cedcc7-f8cc-4dc1-a35d-0ff81544ce72&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/wellarchitected/latest/reliability-pillar/rel_planning_for_recovery_disaster_recovery.html&quot;&gt;REL13-BP02 복구 목표 달성을 위해 정의된 복구 전략 사용&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;013681ee-01de-4bcb-afaa-c1959841eedc&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/blogs/architecture/disaster-recovery-dr-architecture-on-aws-part-i-strategies-for-recovery-in-the-cloud/&quot;&gt;AWS의 재해 복구(DR) 아키텍처, 1부: 클라우드의 복구 전략&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3dea472e-20c0-4543-ade7-feaa26163384&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/pdfs/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-workloads-on-aws.pdf&quot;&gt;Disaster Recovery of Workloads on AWS: Recovery in the Cloud&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;column-list&quot; id=&quot;fe248552-8e3f-41ba-92b7-73d0b546c662&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;4ca8e147-a4df-4144-8875-04f418cc9620&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;64fde572-d110-4ea3-8a34-ea35dfd5559d&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;fed9a1ee-4898-46e2-9ffd-32efa8273a4c&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;934f685b-40f3-42ac-bb35-2911ed4af73f&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;ebd194b0-9d28-4a8f-9ff0-836c6e4b7248&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;724d29ad-ec91-4810-b6ea-b062bbd24756&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;ae1d8ef3-0eb5-4446-bdd1-0828cb066d8c&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;79d5616a-b414-47cf-9548-c4699743ced8&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>CLOUD</category>
      <category>aws</category>
      <category>disasterRecovery</category>
      <category>재난복구</category>
      <category>재해복구</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1428</guid>
      <comments>https://sharingtime.tistory.com/1428#entry1428comment</comments>
      <pubDate>Fri, 11 Nov 2022 16:02:43 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 도커 포트 번호 설정하기 221109</title>
      <link>https://sharingtime.tistory.com/1427</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;8b53b4ac-b9e2-427c-8bf7-72c32ed5e2da&quot;&gt;&lt;header&gt;&lt;div class=&quot;page-header-icon undefined&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;1f16eb74-0ea1-46fe-8577-321b311c84c8&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;Today I Learned 요약 (31회차)&lt;/strong&gt;&lt;/mark&gt;
- 도커 실행시 -p 파라미터를 통해 컨테이너와 외부의 통신을 수행할 수 있다&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;84beebb8-0af6-4756-bc03-dc2e9857cd25&quot;&gt;도커 포트 번호 설정하기&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;e9a1be54-b975-458e-bea6-7ae578dd1502&quot;&gt;도커에서 컨테이너를 실행할 때 기본 값으로는 포트 지정이 되어있지 않기 때문에 파라미터를 입력해서 외부와의 포트 포워딩을 시켜줘야 할때가 있다. ‘-p’ 명령어를 사용하면 포트를 지정할 수 가 있다.&lt;/p&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;eb46ae87-e03c-42d5-9945-f951bbce8a83&quot;&gt;&lt;code&gt;# httpd 이미지를 apa000ex2라는 컨테이너로 백그라운드 실행하고 -p를 통해 컨테이너의 80포트를 외부의 8080으로 포워딩
docker run --name apa000ex2 -d -p 8080:80 httpd
# 컨테이너 정지하고 삭제하기
docker stop apa000ex2
docker rm apa000ex2
# 삭제 후 컨테이너 남아있는지 확인하기
docker ps -a&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;ff08cc48-139f-4e98-a798-bf61ee66ded1&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;af8b5485-1ca3-44ba-bb4e-695a6987fb36&quot;/&gt;&lt;p class=&quot;&quot; id=&quot;e4016fa3-79ea-4379-b98b-1fb2f3e4f7dd&quot;&gt;&lt;a href=&quot;https://note.espriter.net/tag/docker&quot;&gt;&lt;strong&gt;Docker &lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;관련 리서치한 것:&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;90e60ec2-ff1c-40ad-abcd-226b3bc4981f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://tttsss77.tistory.com/155&quot;&gt;도커(Docker) : 포트 포워딩 설정(포트 맵핑)하기&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;column-list&quot; id=&quot;83c02ec1-94f3-44cb-a2aa-2dbeff13bbac&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;ab395830-916a-4ff5-9a09-bb26ec4addbc&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;c1fc4dd4-17dd-47c3-83dd-26833a8a205d&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;616ddf58-cd76-49cf-90ea-71d30deaf0c2&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;cf92b743-23eb-4677-9102-53c1b126d1a9&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;01b7e96c-5e4b-4a85-a331-f864ade3fcb1&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;81e5e503-08ea-4d26-a6b7-2daed8ba841a&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;da82112d-4b42-4538-8696-e4694da94d5a&quot; style=&quot;width:100%&quot;&gt;&lt;p class=&quot;&quot; id=&quot;2e731929-637a-4140-aebd-f7d350349588&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>CLOUD</category>
      <category>Docker</category>
      <category>도커</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1427</guid>
      <comments>https://sharingtime.tistory.com/1427#entry1427comment</comments>
      <pubDate>Thu, 10 Nov 2022 11:29:34 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Docker 기본 실행 명령어 221108</title>
      <link>https://sharingtime.tistory.com/1426</link>
      <description>&lt;body&gt;&lt;html&gt;&lt;head&gt;&lt;link href=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
&lt;script src=&quot;//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;hljs.initHighlightingOnLoad();&lt;/script&gt;&lt;/head&gt;&lt;/html&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;342f488b-944c-4d15-b8e8-85fbbb553137&quot;&gt;&lt;header&gt;&lt;div class=&quot;page-header-icon undefined&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;/header&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;061a7063-47f0-46d3-9844-a9eb831b3462&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;Today I Learned 요약 (30회차)&lt;/strong&gt;&lt;/mark&gt;
- Docker 명령어를 통해 컨테이너를 생성하고 실행, 종료할 수 있다.&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;78da3315-3b52-4a4b-942d-4f54148fc845&quot;&gt;docker 컨테이너 생성 및 정지, 삭제 명령어&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;25ee2ea2-6528-4e48-bfe3-13c033b93e18&quot;&gt;Docker에서 가장 기본 명령어인 run, ps, rm을 아래와 같이 실행할 수 있다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6dac207d-dde6-45c0-ad33-db795c7ef37e&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Docker에서 컨테이너를 실행하는 경우 run 명령어를 통해 아래와 같이 실행할 수 있다. 예제는 기존에 만들어져있는 httpd 이미지를 가져오는 것으로 한다. 여기서 —name은 컨테이너 이름 지정을 뜻하고 -d는 백그라운드 실행을 의미한다&lt;pre class=&quot;code Bash&quot; id=&quot;e278b316-a747-4768-9169-ec23c1a18b2d&quot;&gt;&lt;code&gt;docker run --name apa000ex1 -d httpd

Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
e9995326b091: Pull complete
ee55ccd48c8f: Pull complete
bc66ebea7efe: Pull complete
5d0f831d3c0b: Pull complete
e559e5380898: Pull complete
Digest: sha256:5fa96551b61359de5dfb7fd8c9e97e4153232eb520a8e883e2f47fc80dbfc33e
Status: Downloaded newer image for httpd:latest
926b9dd856b3030ccf29d88a24bdc2e7cedc4d4a8392312d662b11865c568a1e&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0ec4278c-53e2-4d47-a9d9-7a2504274917&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Docker ps 명령어를 통해 생성된 컨테이너를 확인할 수 있고 -a를 쓸 경우 현재 비실행 중인 컨테이너도 모두 확인할 수 있다.&lt;pre class=&quot;code Bash&quot; id=&quot;4df2e2ee-24c0-4902-a83c-a2ed28ed1abe&quot;&gt;&lt;code&gt;docker ps -a
CONTAINER ID   IMAGE  COMMAND                  CREATED              STATUS                    PORTS                              NAMES
926b9dd856b3   httpd  &quot;httpd-foreground&quot;       About a minute ago   Up About a minute         80/tcp                             apa000ex1&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;9e0be281-c40d-4a18-9c30-eeec25166848&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;컨테이너를 중지할 경우 stop 명령어를 사용하면 된다.&lt;pre class=&quot;code Bash&quot; id=&quot;c3d00254-f26d-42ca-b3e7-de3a1d7e5912&quot;&gt;&lt;code&gt;docker stop apa000ex1
apa000ex1&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e161aab0-50be-4e57-968c-614ca4f47bec&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;컨테이너를 삭제할 경우 rm 명령어를 사용하면 된다.&lt;pre class=&quot;code Bash&quot; id=&quot;716f41ea-e7e3-4d90-b5c2-aef3836f75f3&quot;&gt;&lt;code&gt;	docker rm apa000ex1
apa000ex1&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;b0db13e6-dfb8-4b73-a6f9-6183a7833bfd&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;42335fca-807b-4078-8ef8-f9f0d8e121e3&quot;/&gt;&lt;p class=&quot;&quot; id=&quot;997a60af-d6f4-4ae7-9ed8-bb5a7c909ab0&quot;&gt;&lt;a href=&quot;https://note.espriter.net/tag/docker&quot;&gt;&lt;strong&gt;docker&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; 관련 리서치한 것:&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;40b34bd1-abdd-48c6-9e7f-ed66d6d87013&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.daleseo.com/docker-run/&quot;&gt;&lt;strong&gt;docker run 커맨드 사용법&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;html&gt;&lt;body&gt;&lt;br/&gt;&lt;p class=&quot;&quot;&gt;Uploaded by &lt;mark class=&quot;highlight-orange&quot;&gt;&lt;a href=&quot;https://github.com/jmjeon94/N2T&quot;&gt;N2T&lt;/a&gt;&lt;/mark&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>CLOUD</category>
      <category>Docker</category>
      <category>도커</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1426</guid>
      <comments>https://sharingtime.tistory.com/1426#entry1426comment</comments>
      <pubDate>Tue, 8 Nov 2022 16:36:08 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 자료 포락 분석 관련 자료 메모 221104</title>
      <link>https://sharingtime.tistory.com/1425</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (29회차)&lt;/b&gt;&lt;br /&gt;- 여러 투입 요소 및 성과에 대한 분석을 할 수 있는 자료 포락 분석(DEA)라는 모형이 있다&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;자료 포락 분석 관련 자료 메모&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 완전히 이해하진 못했지만 기록하지 않으면 다 까먹을 듯 해서 메모해둠. 요약에 적었다시피 DEA 모형은 여러 투입 요소에 대한 성과 분석을 하기 위해 사용되는 방법론으로서 아래와 같은 특징을 가진다. 아직 온전히 이해한 상태는 아니라 틀린 게 있다면 댓글 달아주시면 수정하겠음...ㅜ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 여러 투입요소와 산출(성과) 요소에 대해 다룰 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 투입 대비 산출에 대한 상호 연관성에 대해 가정을 필요로 하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기능적으로 유사한 활동을 하는 조직(DMU)들이 서로 간에 비교 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 투입과 산출 요소들이 다른 측정 단위를 가질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 투입과 산출 요소들이 다른 측정 단위를 가질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 리서치 내역에 찾아놓은 메모들을 정리. 추후 방법론을 이해하고 실제로 테스트해볼 기회가 있으면 좋을 듯&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/dea&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#자료포락분석&lt;/span&gt;&lt;/a&gt; 관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.expertchoice.co.kr/manual/dea_brief.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;성과평가와 DEA(Data Envelopment Analysis)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=loststars512&amp;amp;logNo=220188433212&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DEA(Data&amp;nbsp;Envelopment&amp;nbsp;Analysis)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://kanggc.iptime.org/other/misc/dea-bai.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공공부문 효율성 측정 방법의 이해 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DATA</category>
      <category>DEA</category>
      <category>자료포락분석</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1425</guid>
      <comments>https://sharingtime.tistory.com/1425#entry1425comment</comments>
      <pubDate>Fri, 4 Nov 2022 22:44:06 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS CLI s3 sync를 사용하여 파일 전송하기 221028</title>
      <link>https://sharingtime.tistory.com/1424</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (28회차)&lt;/b&gt;&lt;br /&gt;- AWS CLI의 sync를 통해 여러개의 파일을 전송할 수 있다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS CLI s3 sync를 사용하여 파일 전송하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 아침 출근하면서 사수에게서 데이터 파이프라인에 문제가 생겼다는 얘기를 들었다. 원인 자체는 간단히 필드가 밀려서 데이터가 들어오고 있던 상황. 결과론적으론 간단하지만 그걸 찾기 위해 로그를 찍어가며 찾아가는 과정에 시간이 소요되었다. 그간 Appsflyer 데이터 적재한다고 본업(?)에 손을 못대고 있었는데 다시끔 포커스를 맞출 필요가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 확인 과정에서 AWS CLI에서 s3 sync를 쓸 수 있는 것을 알게 되었다. 지난번 &lt;a href=&quot;https://note.espriter.net/1423&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;포스팅&lt;/a&gt;에서 CP를 사용하는 걸 올린 적이 있는데 --recursive 까지 하면서 여러개의 파일이나 폴더를 전송하기엔 s3 sync가 훨씬 편한 것 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1666958541188&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws s3 sync {s3://경로} {./로컬경로}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 AWS CLI가 설치되고, Credential 설정이 완료되었음을 전제로 한다. 그리고 말 그대로 해당 경로의 sync를 맞추는 형식이라 다른 파일과 섞이지 않게 주의하자. 만약 로컬 경로에서 s3에 올리고 싶으면 저 경로를 서로 바꿔주면 동작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#AWS&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;sync - AWS CLI&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CLOUD</category>
      <category>aws</category>
      <category>awscli</category>
      <category>CLI</category>
      <category>s3</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1424</guid>
      <comments>https://sharingtime.tistory.com/1424#entry1424comment</comments>
      <pubDate>Fri, 28 Oct 2022 21:04:43 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS redshift에 Copy 명령어로 csv 데이터 적재 시 csv 내에 json이 포함되어 있을 때 고려해야 할 데이터 변환 파라미터 종류 221026</title>
      <link>https://sharingtime.tistory.com/1423</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (27회차)&lt;/b&gt;&lt;br /&gt;- redshift에 csv 파일을 Copy 쿼리로 적재할 때 json이 있을 경우 아래 파라미터를 고려할 필요 있음&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS redshift에 Copy 명령어로 csv 데이터 적재 시 csv 내에 json이 포함되어 있을 때 고려해야 할 데이터 변환 파라미터 종류&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;s3에 올라간 csv를 기반으로 Redshift에 적재할 때 csv 내에 json 데이터가 포함되어 있고, 그것을 단일 칼럼 내에 로드하고 싶을 때 고려해야 할 데이터 변환 파라미터다. 아직 하나하나가 어떻게 동작하는지는 정확하게 이해하지 못해서 추후 다시 정리가 필요함.&lt;/p&gt;
&lt;pre id=&quot;code_1666770966833&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CSV -- CSV 명시
IGNOREHEADER 1 -- 지정 row number를 무시
DELIMITER ',' -- 구분자
EMPTYASNULL -- 비어있는 varchar나 char를 null로 로드
BLANKSASNULL -- 공백 문자로만 구성된 빈 필드를 Null로 로드
TRUNCATECOLUMNS -- 열 데이터를 varcahr로 자름
TRIMBLANKS -- varchar 문자열에서 후행 공백 문자 제거
GZIP -- Gzip 파일임을 명시
DATEFORMAT 'auto' -- dateforamt은 자동
TIMEFORMAT 'auto' -- timeformat은 자동
ACCEPTINVCHARS -- 잘못된 UTF-8 문자가 포함되어도 varchar열에 데이터 로드
FILLRECORD -- 인접한 열들이 레코드에 누락되었을 때도 NULL로 데이터 로드 허용&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#AWS&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/copy-parameters-data-conversion.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;데이터 변환 파라미터&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/t_Loading-data-from-S3.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Amazon&amp;nbsp;S3에서&amp;nbsp;데이터&amp;nbsp;로드&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/67989943/redshift-copy-from-csv-file-with-json-field-into-super-column&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Redshift&amp;nbsp;COPY&amp;nbsp;from&amp;nbsp;CSV&amp;nbsp;file&amp;nbsp;with&amp;nbsp;JSON&amp;nbsp;field&amp;nbsp;into&amp;nbsp;SUPER&amp;nbsp;column&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CLOUD</category>
      <category>aws</category>
      <category>Copy</category>
      <category>data</category>
      <category>dataengineer</category>
      <category>query</category>
      <category>Redshift</category>
      <category>SQL</category>
      <category>데이터</category>
      <category>데이터엔지니어</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1423</guid>
      <comments>https://sharingtime.tistory.com/1423#entry1423comment</comments>
      <pubDate>Wed, 26 Oct 2022 17:00:50 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS Redshift에서 block이 걸려서 쿼리가 지연될 때 확인하고 강제 종료하는 방법 221017</title>
      <link>https://sharingtime.tistory.com/1421</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (26회차)&lt;/b&gt;&lt;br /&gt;- Redshift에서는 세션 보호를 위해 특정 쿼리 동작 중에 추가 쿼리 동작을 잠글 수 있다.&lt;br /&gt;- 쿼리를 통해 잠금 처리된 쿼리를 확인하고 종료시켜 롤백할 수 있다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS Redshift에서 block이 걸려서 쿼리가 지연될 때 확인하고 종료하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redshift에서 풀스캔 쿼리가 아닌데 이유 없이 돌고 있을 경우 잠금(block) 처리된 것을 의심할 수 있다. 보통은 block을 유발한 쿼리가 완료되면 block이 풀리고 후속 쿼리가 실행이 되지만 데이터 전처리 도중 다른 쿼리가 동작하여 block이 발생할 경우 시간에 쫓기게 될 수 있다. 그럴 때 확인 방법 및 종료, 쿼리 확인 방법에 대해 정리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;redshift 문서에서 정의하는 쿼리 잠금의 종류는 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;AccessExclusiveLock&lt;/b&gt; : UNLOAD,&amp;nbsp;SELECT,&amp;nbsp;UPDATE&amp;nbsp;또는&amp;nbsp;DELETE&amp;nbsp;작업&amp;nbsp;중에&amp;nbsp;획득&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;AccessShareLock&lt;/b&gt; : UNLOAD, SELECT, UPDATE 또는 DELETE 작업 중에 획득&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;ShareRowExclusiveLock&lt;/b&gt; : COPY,&amp;nbsp;INSERT,&amp;nbsp;UPDATE&amp;nbsp;또는&amp;nbsp;DELETE&amp;nbsp;작업&amp;nbsp;중에&amp;nbsp;획득&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;block 상태를 확인하기 위해서는 Redhisft에서 아래 쿼리를 입력하여 blocking_pid를 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1666015105945&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select a.txn_owner, a.txn_db, a.xid, a.pid, a.txn_start, a.lock_mode, a.relation as table_id,nvl(trim(c.&quot;name&quot;),d.relname) as tablename, a.granted,b.pid as blocking_pid ,datediff(s,a.txn_start,getdate())/86400||' days '||datediff(s,a.txn_start,getdate())%86400/3600||' hrs '||datediff(s,a.txn_start,getdate())%3600/60||' mins '||datediff(s,a.txn_start,getdate())%60||' secs' as txn_duration
from svv_transactions a 
left join (select pid,relation,granted from pg_locks group by 1,2,3) b 
on a.relation=b.relation and a.granted='f' and b.granted='t' 
left join (select * from stv_tbl_perm where slice=0) c 
on a.relation=c.id 
left join pg_class d on a.relation=d.oid
where  a.relation is not null;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당되는 pid를 확인했으면 아래 쿼리로 해당 프로세스를 강제로 종료할 수 있다. 아래 쿼리가 실행되면 동작중인 쿼리의 트랜잭션은 롤백된다.&lt;/p&gt;
&lt;pre id=&quot;code_1666015283335&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select pg_terminate_backend({PID});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 PID의 쿼리를 확인하고 싶다면 아래 쿼리를 입력하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1666015350220&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select query, trim(querytxt) as sqlquery, *
from stl_query where pid = {PID}
order by query desc;&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#aws&lt;/span&gt;&lt;/a&gt; 관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/ko/premiumsupport/knowledge-center/prevent-locks-blocking-queries-redshift/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Amazon Redshift에서 잠금을 감지하고 해제하려면 어떻게 해야 합니까?&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CLOUD</category>
      <category>aws</category>
      <category>query</category>
      <category>Redshift</category>
      <category>SQL</category>
      <category>쿼리</category>
      <category>클라우드</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1421</guid>
      <comments>https://sharingtime.tistory.com/1421#entry1421comment</comments>
      <pubDate>Mon, 17 Oct 2022 23:04:15 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Crontab.guru - Cron 표현식 테스트 해볼 수 있는 사이트 221006</title>
      <link>https://sharingtime.tistory.com/1420</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (25회차)&lt;/b&gt;&lt;br /&gt;- Crontab.guru를 사용해서 내가 사용할 cron 표현식이 맞는지 테스트해볼 수 있다.&lt;br /&gt;- 보통 다 맞지만 AWS의 경우는 연도 값이 하나 더 들어간다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Crontab.guru - Cron 표현식 테스트 해볼 수 있는 사이트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 예전부터 알고 있었던 사이트이지만 기록차원에서 남겨놓겠음. 링크부터 알고 싶은 사람은 아래 링크를 클릭&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://crontab.guru/#*/5_*_*_*_*&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;crontab&amp;nbsp;guru&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cron 표현식이란 스케줄을 정의할 때 사용할 수 있는 표현식이며 기본적으로 * * * * * 와 같이 5개의 필드로 이뤄진다. 왼쪽부터 차례로 얘기하면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번째 : 분(minutes)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번째 : 시간(hour)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3번째 : 일(days)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4번째 : 월(month)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5번째 : 요일(monday, tuesday)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 이렇게 5가지로 구성되어 있고, AWS Event Bridge에서 쓰는 Cron은 연도(year) 값이 하나 더 들어가서 6가지로 구성되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-10-06 오후 6.49.24.png&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;745&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/catefT/btrNWo0ZSx5/a57duXlHovVePOlAZ9cld1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/catefT/btrNWo0ZSx5/a57duXlHovVePOlAZ9cld1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/catefT/btrNWo0ZSx5/a57duXlHovVePOlAZ9cld1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcatefT%2FbtrNWo0ZSx5%2Fa57duXlHovVePOlAZ9cld1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1135&quot; height=&quot;745&quot; data-filename=&quot;스크린샷 2022-10-06 오후 6.49.24.png&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;745&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이트 자체는 위와 같이 구성되어있고, 가운데 Cron 표현식에 키보드로 테스트 하고자 하는 표현식을 집어넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cron 에 익숙한 사람들은 상관없겠지만 처음 접할 때는 개념적으로 헷갈릴 때가 많다. 그럴때 cron 표현식을 테스트 해보고 문법적으로 틀린 게 없는지 확인하고 싶을 때 crontab guru가 유용하다. 기본 예시도 보여주기 때문에 여러모로 감을 익히기엔 도움이 많이 된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/cron&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#cron&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/eventbridge/latest/userguide/eb-create-rule-schedule.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Amazon 만들기 EventBridge 일정에 따라 실행되는 규칙&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zamezzz.tistory.com/197&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[Cron] 크론(cron) 표현식 정리&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>cron</category>
      <category>crontab</category>
      <category>Linux</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1420</guid>
      <comments>https://sharingtime.tistory.com/1420#entry1420comment</comments>
      <pubDate>Thu, 6 Oct 2022 18:50:43 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS Athena에서 쿼리 진행 상태 확인하기</title>
      <link>https://sharingtime.tistory.com/1419</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (24회차)&lt;/b&gt;&lt;br /&gt;- boto3에선 Athena 쿼리 상태를 확인하는 batch_get_query_execution가 존재&lt;br /&gt;- 해당 기능을 사용해서 Athena가 쿼리를 돌고 있는지 상태를 확인할 수 있다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;boto3를 사용해서 Athena 쿼리 실행 상태 확인하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python 기반의 AWS SDK인 boto3를 사용해서 Athena 쿼리를 실행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 boto3로 Athena 쿼리를 실행할 경우 async로 돌아가기 때문에 쿼리를 날렸다고 바로 결과를 확인할 수 있는 게 아니다. 그럴 때 사용하기 위한 batch_get_query_execution가 boto3에 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;query 실행했을 때의 ExecutionID를 알고 있다면 아래와 같이 batch_get_query_execution에 넣어서 status 값을 확인할 수 있다. 여러가지 정보가 return 되지만 아래 코드 기준으로만 간다면 status 값 QUEUED / RUNNING / SUCCEEDED / FAILED / CANCELLED 중 하나가 return 되게 된다. 이를 확인하여 쿼리 실행 후 결과를 다시 확인하기까지 while 같은 걸 사용해서 대기를 걸어놓을수도 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시의 QueryExecutionIds는 An array of query execution IDs. 즉, array로 여러 값을 넣어서 조회도 가능하다. 최대 50개까지 조회가 가능한 듯 하다.&lt;/p&gt;
&lt;pre id=&quot;code_1664971239593&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import boto3

athena = boto3.client('athena',
                   aws_access_key_id='API_KEY',
                   aws_secret_access_key='SECRET_KEY',
                   region_name='REGION'
                   )

response = athena.batch_get_query_execution(QueryExecutionIds=['QueryExecutionIds'])
status = response['QueryExecutions'][0]['Status']['State']

print(status)&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/athena&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#athena&lt;/span&gt;&lt;/a&gt; 관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena.html#Athena.Client.batch_get_query_execution&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Boto3 Docs - Athena&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CLOUD</category>
      <category>Athena</category>
      <category>aws</category>
      <category>query</category>
      <category>데이터</category>
      <category>쿼리</category>
      <category>테이블</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1419</guid>
      <comments>https://sharingtime.tistory.com/1419#entry1419comment</comments>
      <pubDate>Wed, 5 Oct 2022 21:09:19 +0900</pubDate>
    </item>
    <item>
      <title>KPT에 대해 221004</title>
      <link>https://sharingtime.tistory.com/1418</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (23회차)&lt;/b&gt;&lt;br /&gt;- KPT를 통해 회고를 좀 더 견고하게 수행할 수 있다.&lt;br /&gt;- 개인 관점에서도 KPT를 통해 회고 구조화는 가능한 것 같다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;KPT에 대해&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 회사에서 부서 단위 '기술 공유' 세션이 있었고 내 발표도 있었는데 기술 공유 그 자체보다는 그간 작업해왔던 Appsflyer 데이터 파이프라인 구축 회고 같은 느낌이라 마무리를 어떻게 할까 하다가 KPT가 떠올라서 KPT에 대해 짧게 적어보고자 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-10-04 오후 4.42.56.png&quot; data-origin-width=&quot;2032&quot; data-origin-height=&quot;1002&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SnnkJ/btrNIKv9BzD/GMEzNFBUgZt0yFO8riVSDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SnnkJ/btrNIKv9BzD/GMEzNFBUgZt0yFO8riVSDk/img.png&quot; data-alt=&quot;KPT 보드 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SnnkJ/btrNIKv9BzD/GMEzNFBUgZt0yFO8riVSDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSnnkJ%2FbtrNIKv9BzD%2FGMEzNFBUgZt0yFO8riVSDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2032&quot; height=&quot;1002&quot; data-filename=&quot;스크린샷 2022-10-04 오후 4.42.56.png&quot; data-origin-width=&quot;2032&quot; data-origin-height=&quot;1002&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;KPT 보드 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KPT는 Keep, Problem, Try의 3가지의 관점에서 회고를 진행한다는 뜻으로 KPT라 불린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 회고라는 것은 각자 하는 일이 나눠진, 즉 분업화가 되어 있을 때 유효하다. 보통 사람들은 자기 일에 대해서만 관심을 가지지, 다른 사람의 업무나 프로젝트 전체의 흐름에 대해서는 관심을 쉽게 가지지 않기 때문이다. 이런 상황일 때 KPT는 나눠진 분업 속에서 Keep 할 것과 Problem을 확인하고, Try를 통해 같이 공유한다는 점에서 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 모여 있는 자리에서 Keep과 Problem에 대해 회고하고, Try에 대안을 작성 한뒤 투표나 의사결정을 통해 2~3개의 핵심 액션 아이템을 선정한 뒤 행동으로 즉시 옮길 것을 같이 약속하고 KPT를 종료하는 것이 주 흐름이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;눈치가 빠르다면 KPT가 여러 사람이 모여있을 때 해야 가장 효율성 있다는 점을 깨달았을 것이다. 다만 개인 레벨에서도 그렇게 나쁘진 않은게(특히 PPT 화면 상) 카테고리가 분리되어 있으면 청중들의 집중도를 높일 수 있다는 관점에서 나쁘지 않은 선택인 것 같다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/kpt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#kpt&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.designsori.com/zero/1157702&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;프로덕트 매니저의 애자일 회고 방법론 - KPT 실전편&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brunch.co.kr/@jinha0802/35&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;KPT 회고란 무엇인가?&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>MIND</category>
      <category>KPT</category>
      <category>미팅</category>
      <category>회고</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1418</guid>
      <comments>https://sharingtime.tistory.com/1418#entry1418comment</comments>
      <pubDate>Tue, 4 Oct 2022 17:07:34 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 휴대폰에서 외부 접근 IP를 확인할 수 없는 이유인 LSN에 대해 221003</title>
      <link>https://sharingtime.tistory.com/1417</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (22회차)&lt;/b&gt;&lt;br /&gt;- 휴대폰에서는 LSN이라 불리는 거대 NAT 때문에 공유기에 할당된 외부 IP 같은 공인 IP를 확인할 수 없다.&lt;br /&gt;- VPN 터널링을 통해 뚫을 수는 있지만 속도 손실을 꽤나 감안해야 함.&lt;br /&gt;- 네트워크 전공이 아니라 틀릴 수 있습니다. 감안해주세요.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;휴대폰에서 외부 접근 IP를 확인할 수 없는 이유인 LSN에 대해&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 LSN 자체는 'Large Scale NAT'의 약자이다. 무슨 상황인가 하니 집에서 인터넷이나 IPTV를 잘 쓰지 않아서 유선 인터넷을 해지하고 LTE 휴대폰 핫스팟으로만 버티던 시절이 있었다. 하지만 IT 쪽 사람이다 보니까 핫스팟 상태에서도 공유기 물리고 할 거 라즈베리파이 같은 걸 연결해서 사용해보고 싶은 생각이 계속 들어왔다. 그래서 행복회로를 돌리면서 핫스팟에 공유기를 물리고 공유기 DDNS 설정을 했는데.. 내부에선 접속이 잘되는데 외부에서는 접속이 안된다 ㅋㅋㅋ 이 상황을 이해하기 위해 거의 2주 동안 삽질한 결과 아래와 같은 정리를 할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 휴대폰이 있고, 기지국이 있고, 코어 네트워크(실질 인터넷)가 순서대로 연결된다고 가정했을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 기지국에서 고정(유동)IP를 받아다가 휴대폰에다가 IP를 할당해주는 방식이 아니었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 기지국과 코어 네트워크 사이에 LSN('Large Scale NAT')라는 거대한 레벨의 공유기가 코어 네트워크의 IP를 받은 뒤 다시 사설 IP를 휴대폰들에게 뿌리는 식으로 구성이 되어 있던 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 그러니 일반 휴대폰 입장에서는 사설 IP만을 받아서 접속하기 때문에 외부에서 접근하기 위한 IP를 알수가 없는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. LSN 도입 취지는 공인 IP 수량 확보가 1번이고, 나 같이 외부에서 접근하는 애들을 차단하기 위한 목적이 2번인 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여튼 그래서 정상적인 방법으론 LTE 네트워크에 외부에서 접근이 불가능하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 지속적으로 빡쳐서 찾아본 결과 VPN 터널링을 구성하면 접근이 가능하다고 해서 Wireguard 를 통해서 VPN을 구성하고 접속해보니 외부에서도 접근이 가능했으나, VPN 단계까지 더 추가가 되니 속도가 못쓸 정도가 되어서 사실상 의미가 없는 수준이 되어버림.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론은 유선 인터넷을 다시 집에 설치하게 되었다...&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/lsn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#LSN&lt;/span&gt;&lt;/a&gt; 관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=netmaniascom&amp;amp;logNo=80197729536&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[Network Protocol] NAT (Network Address Translation) 소개 (RFC 3022/2663)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>LSN</category>
      <category>LTE</category>
      <category>네트워크</category>
      <category>무선통신</category>
      <category>코어망</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1417</guid>
      <comments>https://sharingtime.tistory.com/1417#entry1417comment</comments>
      <pubDate>Mon, 3 Oct 2022 11:51:44 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Appsflyer 로데이터 API 호출 제한 횟수 이해하기 220930</title>
      <link>https://sharingtime.tistory.com/1416</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (21회차)&lt;/b&gt;&lt;br /&gt;- Appsflyer의 API 호출 횟수 제한은 종류별로 상이하다&lt;br /&gt;- Appsflyer의 API 호출 허용 횟수는 꽤 적은 편이다&lt;br /&gt;- 다만 request 할 때 기간을 명시해서 보낼수 있어서 보완은 가능&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Appsflyer 로데이터 API 호출 제한 횟수 이해하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그간 개발이나 데이터 분석하면서 API는 죄다 총량 2000회, 15000회 이런 식인줄 알았는데 Appsflyer API는 항목 별로 좀 더 세분화가 되어 있고 호출 횟수 또한 상대적으로 적은 편이다. 물론 API request 를 날릴 때 from - to 날짜를 적시해서 보낼 수 있기 때문에 1번 요청할 때 기간을 오래 잡을 수는 있지만 이것도 100만 row 제한이 있어서 무한한 옵션이 아니다. 어쨌든 나로서는 리포트 로데이터에 관심이 있기 때문에 리포트 API에 대한 요약을 하려고 함.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-30 오후 4.56.13.png&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcvj4Y/btrNuVp8KDW/YKJj8sBIcyYB0KuKg2ltl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcvj4Y/btrNuVp8KDW/YKJj8sBIcyYB0KuKg2ltl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcvj4Y/btrNuVp8KDW/YKJj8sBIcyYB0KuKg2ltl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcvj4Y%2FbtrNuVp8KDW%2FYKJj8sBIcyYB0KuKg2ltl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1554&quot; height=&quot;954&quot; data-filename=&quot;스크린샷 2022-09-30 오후 4.56.13.png&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;954&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 별로 할당량이 다른데 '앱 수준' 안드로이드 앱A이다, ios앱이다. 안드로이드 앱B 이다. 이렇게 App 단위로 할당되는 호출 제한량이고, 계정 수준 할당량은 앞서의 '앱 수준' 할당량을 포괄하여 계정 레벨에서의 할당량을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 인앱 이벤트의 경우 '앱' 단위로는 하루에 12회 호출할 수 있고, 계정 합쳐서 누적 60회까지 호출할 수 있다. 즉, 오가닉 인앱 이벤트 12회, 논오가닉 인앱 이벤트 12회해서 합쳐서 24회면 60회를 초과하지 않았으니까 API 호출량이 36회 남았다고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 어트리뷰션은 앱 단위로 하루 24회이고, 계정 단위는 구독에 따라 달라지는데 설명상 디폴트는 120회로 되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 오전 09시(UTC+9) 에 API 호출 제한이 초기화되니까 이 점도 주의가 필요하다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/appsflyer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#appsflyer&lt;/span&gt;&lt;/a&gt; 관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://support.appsflyer.com/hc/ko/articles/207034366-%EB%A6%AC%ED%8F%AC%ED%8A%B8-%EC%83%9D%EC%84%B1-%ED%95%A0%EB%8B%B9%EB%9F%89-%EB%B9%84%EC%9C%A8-%EC%A0%9C%ED%95%9C-&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;리포트 생성 할당량(비율 제한)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DATA</category>
      <category>API</category>
      <category>Appsflyer</category>
      <category>ETL</category>
      <category>데이터</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1416</guid>
      <comments>https://sharingtime.tistory.com/1416#entry1416comment</comments>
      <pubDate>Fri, 30 Sep 2022 17:10:16 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Appsflyer의 리어트리뷰션과 리인게이지먼트에 대해 220929</title>
      <link>https://sharingtime.tistory.com/1415</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (20회차)&lt;/b&gt;&lt;br /&gt;- 모바일 어트리뷰션 관점에서 리어트리뷰션과 리인게이지먼트로 분기&lt;br /&gt;- 리인게이지먼트는 사용자의 디바이스에 App이 유지되고 있을 경우, 인앱 활동을 확인&lt;br /&gt;- 리어트리뷰션은 사용자의 디바이스에 App이 없을 경우, 재다운로드를 유도&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Appsflyer의 리어트리뷰션과 리인게이지먼트에 대해&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 관련 작업으로 계속 고통을 받고 있는 Appsflyer의 사용자 여정(user journey) 중 리어트리뷰션(re-attribution)과 리인게이지먼트(re-engagement) 부분에 대해 정리.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 App을 실행한 전적이 있을 경우, 그 이후에 사용자가 앱을 열도록 유도하는 광고(미디어) 소스를 클릭하고 App을 여는 과정을 리인게이지먼트(re-engagement)라고 부르고, 전적이 있으나 사용자 장치에서 더 이상 App을 발견할 수 없을 때는 설치를 유도함으로서 리어트리뷰션(re-attribution)이 부여된다. 사실 아래 이미지만 봐도 이해는 쉽게할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1632328a3e6e81.png&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brTnT9/btrNprCVhS7/A3jl9VuBrVdtV1mnPaMphk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brTnT9/btrNprCVhS7/A3jl9VuBrVdtV1mnPaMphk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brTnT9/btrNprCVhS7/A3jl9VuBrVdtV1mnPaMphk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrTnT9%2FbtrNprCVhS7%2FA3jl9VuBrVdtV1mnPaMphk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;754&quot; height=&quot;332&quot; data-filename=&quot;1632328a3e6e81.png&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아주 정확하진 않으나 대략 아래와 같이 설명할 수 있을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Re-engagement&lt;/b&gt; : 사용자 휴대폰에 App이 깔린 상태에서 App 광고를 보고, 다시 App을 실행하여 활동하는 여정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Re-attribution&lt;/b&gt; : 사용자 휴대폰에 App이 깔린 줄 알았으나 App 광고를 보는 시점에 App이 휴대폰에 없을 경우, 재다운로드를 유도하는 여정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/appsflyer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#appsflyer&lt;/span&gt;&lt;/a&gt; 관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://support.appsflyer.com/hc/ko/articles/207033786&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;리타겟팅 어트리뷰션 가이드&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DATA</category>
      <category>Appsflyer</category>
      <category>리어트리뷰션</category>
      <category>리인게이지먼트</category>
      <category>앱스플라이어</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1415</guid>
      <comments>https://sharingtime.tistory.com/1415#entry1415comment</comments>
      <pubDate>Thu, 29 Sep 2022 22:44:31 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Python에서 Ping 체크하기 220928</title>
      <link>https://sharingtime.tistory.com/1414</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (19회차)&lt;/b&gt;&lt;br /&gt;- Python에서 ping3를 사용해서 특정 서버에 ping을 날릴 수 있다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Python에서 Ping 체크하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 문제로 NAS가 죽어버리는 일이 생겼는데, 언제 사건이 발생했는지 알 방법이 없어서 외부에서 지속적으로 NAS 주소에 ping을 넣어서 상태를 검출하는 방법을 찾다가 ping3 라는 걸 알게 됨. 방법도 어렵지 않음.&lt;/p&gt;
&lt;pre id=&quot;code_1664369174850&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from ping3 import ping
path = &quot;google.com&quot;
response = ping(path)

if response == False:
    print(False)
else:
    print(True)&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/ping&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#ping&lt;/span&gt;&lt;/a&gt; 관련 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://pydole.tistory.com/entry/python%EC%9D%98-ping3-%EB%AA%A8%EB%93%88%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-ICMP-check&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[Python] check ICMP using ping3 module. (파이썬을 이용한 ping 체크)&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.delftstack.com/howto/python/python-ping/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Python&amp;nbsp;Ping&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>Ping</category>
      <category>ping3</category>
      <category>Python</category>
      <category>파이썬</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1414</guid>
      <comments>https://sharingtime.tistory.com/1414#entry1414comment</comments>
      <pubDate>Wed, 28 Sep 2022 21:48:11 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS Athena에서 Json 값 추출 220927</title>
      <link>https://sharingtime.tistory.com/1413</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (18회차)&lt;/b&gt;&lt;br /&gt;- AWS Athena에 json 형태로 저장된 값에서 데이터를 추출할 수 있다&lt;br /&gt;- 사용함수는 json_extract 함수를 사용하면 가능&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS Athena에서 Json 값 추출&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 Json 형태로 값이 저장되어 있을 경우, Json을 parsing 해서 써야 하는데 AWS Athena의 경우 json_extract 함수를 통해서 key 기준 값을 추출할 수 있도록 하고 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1664287347674&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH dataset AS (
  SELECT '{&quot;name&quot;: &quot;Smith&quot;,
           &quot;org&quot;: &quot;Tech&quot;,
           &quot;projects&quot;: [{&quot;name&quot;:&quot;project1&quot;, &quot;completed&quot;:false},
           {&quot;name&quot;:&quot;project2&quot;, &quot;completed&quot;:true}]}'
    AS blob
)
SELECT
  json_extract(blob, '$.name') AS name,
  json_extract(blob, '$.projects') AS projects
FROM dataset&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 예제를 그대로 가지고 와봤는데 $.key 값 형태로 추출을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 DB 형태의 경우 아래처럼 쿼리를 작성해볼 수 있다. event_json 칼럼의 name 값과 content 값을 추출하는 예시이다&lt;/p&gt;
&lt;pre id=&quot;code_1664287472892&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select
date_value
, json_extract(event_json, '$.name')
, json_extract_scalar(event_json, '$.content')
from database.json_inserted
where createdat_month &amp;gt;= '2022-08'
limit 1000
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#aws&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/extracting-data-from-JSON.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;JSON에서 데이터 추출&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CLOUD</category>
      <category>Athena</category>
      <category>aws</category>
      <category>json</category>
      <category>json_extract</category>
      <category>SQL</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1413</guid>
      <comments>https://sharingtime.tistory.com/1413#entry1413comment</comments>
      <pubDate>Tue, 27 Sep 2022 23:05:49 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 리눅스 하위 디렉토리를 포함한 특정 확장자 파일 삭제 220926</title>
      <link>https://sharingtime.tistory.com/1412</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (17회차)&lt;/b&gt;&lt;br /&gt;- 리눅스에서 find와 -exec를 사용하여 하위 디렉토리 파일을 삭제할 수 있다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스 하위 디렉토리를 포함한 특정 확장자 파일 삭제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리나 다른 파일들은 그대로 둔 상태에서 특정 확장자 파일을 지우려고 할 때 사용 가능한 방법. 윈도우에서는 와일드 카드를 써서 검색해서 GUI 상에서 지울수 있지만 리눅스는 보통 CUI에서 사용함으로 아래 명령어를 쓰면 괜찮을 듯 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find로 파일을 찾고 -exec / rm을 통해 해당 파일을 삭제하는 원리로 동작한다.&lt;/p&gt;
&lt;pre id=&quot;code_1664195340002&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 여기서는 tmp 확장자를 가진 파일 일괄 삭제
find . -name '*.tmp' -exec rm {} \;&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/linux&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#linux&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.comcbt.com/xe/comtip/1977273&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;linux 하위폴더 포함 특정 확장자 파일 삭제&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>Linux</category>
      <category>리눅스</category>
      <category>삭제</category>
      <category>파일삭제</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1412</guid>
      <comments>https://sharingtime.tistory.com/1412#entry1412comment</comments>
      <pubDate>Mon, 26 Sep 2022 21:30:42 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 우분투 Swap(가상 메모리) 용량 늘이기 220923</title>
      <link>https://sharingtime.tistory.com/1411</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (16회차)&lt;/b&gt;&lt;br /&gt;- 리눅스(우분투) Swap 메모리를 늘림으로서 메모리 부족에 임시로 대응 가능&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 Swap(가상 메모리) 용량 늘이기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 서버로 쓰고 있는 셀러론 노트북에 Docker 기반 airflow를 돌리고 있는데 메모리가 부족한지, 원격 ssh 접속 유지하면서 도커를 실행하면 메모리 부족으로 빽이 나는 경우가 있어서 이럴 때 임시로 대응할 수 있는 swap 메모리 늘리기 방법을 기록해두려고 함. 이상적으로는 물리 메모리를 늘리는 게 좋지만 임시로 대응할 땐 유효함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1663902850535&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 원하는 swap 파일 크기를 지정(여기서는 4G로 작성)
sudo fallocate -l 4G /swapfile

# Swap 파일에 사용자가 편집할 수 있도록 권한 부여
sudo chmod 600 /swapfile

# 해당 파일에 mkswap 명령어로 swap 생성
sudo mkswap /swapfile

# swap 파일 활성화
sudo swapon /swapfile

# nano 에디터로 아래 경로에 들어가서 /swapfile에 대한 정의 추가
sudo nano /etc/fstab
/swapfile swap swap defaults 0 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/linux&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#linux&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://iter.kr/%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%8A%A4%EC%99%91-%ED%8C%8C%EC%9D%BC-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%9A%A9%EB%9F%89/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;우분투 스왑 파일 만들어 메모리 용량 2배 늘리기&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>Linux</category>
      <category>swap</category>
      <category>ubuntu</category>
      <category>리눅스</category>
      <category>스왑</category>
      <category>우분투</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1411</guid>
      <comments>https://sharingtime.tistory.com/1411#entry1411comment</comments>
      <pubDate>Fri, 23 Sep 2022 12:14:48 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Appsflyer Pull API 엔드포인트 목록 220922-5</title>
      <link>https://sharingtime.tistory.com/1410</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (15회차)&lt;/b&gt;&lt;br /&gt;- appsflyer의 로데이터 목록은 크게 5가지&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Appsflyer Pull API 엔드포인트 목록&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Appsflyer에도 데이터를 다운받을 수 있게 API를 제공하고 있는데 대시보드 상의 표현과는 조금 다른 로데이터(rawdata) 형식이여서 목록을 적어놓고 추후 제대로 정리해볼까 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Raw data non organic report (GET)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;논오가닉. 즉 광고 미디어를 터치 혹은 클릭해서 앱(app)을 설치 내역 및 앱 내 활동 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Raw data organic report(GET)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오가닉. 즉 순수한 의도로 앱(app)을 설치 내역 및 앱 내 활동 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ad Revenue raw data Attributed (GET)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;광고 미디어 소스별 성과 현황 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Protect360 fraud Installs (GET)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;부정 설치 사용자들을 차단한 내용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Install postbacks (GET)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 앱을 설치 완료하였을 때, 설치 정보를 광고 미디어사에 Postback 하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/appsflyer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#appsflyer&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.appsflyer.com/hc/reference/get_-app-id-installs-report-v5-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;Appsflyer RAW DATA PULL API&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DATA</category>
      <category>API</category>
      <category>Appsflyer</category>
      <category>앱스플라이어</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1410</guid>
      <comments>https://sharingtime.tistory.com/1410#entry1410comment</comments>
      <pubDate>Thu, 22 Sep 2022 17:53:02 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 리눅스에서 enable 된 서비스 목록을 확인하고 싶을 때 명령어 220922-1</title>
      <link>https://sharingtime.tistory.com/1406</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (11회차)&lt;/b&gt;&lt;br /&gt;- 리눅스에서 enable 된 서비스 목록을 확인하고 싶을 때 사용 가능한 명령어&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 enable 된 서비스 목록을 확인하고 싶을 때 명령어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 보통 서비스를 재부팅할 때도 쓰기 위해서 enable 할 때가 많은데 간혹 어떤 걸 enable 로 시켰는지 기억이 안 날 때가 있다. 그럴 때 사용할 수 있는 명령어인데... 사실 모든 리스트가 다 출력되기 때문에 웬만하면 자기가 관리하는 건 기억해두는 게 좋을 듯 하다..&lt;/p&gt;
&lt;pre id=&quot;code_1663829492965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;systemctl list-unit-files | grep enabled&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/linux&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#linux&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666;&quot;&gt;How to list all enabled services from systemctl?&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>Linux</category>
      <category>systemctl</category>
      <category>리눅스</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1406</guid>
      <comments>https://sharingtime.tistory.com/1406#entry1406comment</comments>
      <pubDate>Thu, 22 Sep 2022 15:53:12 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Postgresql에서 현재 날짜 추출하기 220922</title>
      <link>https://sharingtime.tistory.com/1405</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (10회차)&lt;/b&gt;&lt;br /&gt;- Postgresql에서 현재 날짜를 추출하고 응용할 수 있다.&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Postgresql에서 현재 날짜 추출하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Postgresql에서는 now()를 통해 시스템 날짜를 추출할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1663810512934&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select now();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혹 Timezone 문제가 있을 수 있다면 아래처럼 타임존과 시간 포맷을 지정해서 출력할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1663810582004&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select (to_char(now() at time zone 'Asia/Seoul', 'YYYY-MM-DD'));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 가지고 짝수일 홀수일을 구하고 싶다면 아래와 같이 응용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1663810615938&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select CASE WHEN cast(to_char(now() at time zone 'Asia/Seoul', 'DD') as int) %2=0 THEN '짝수일' ELSE '홀수일' END AS EvenOdd;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/sql&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#SQL&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://learnsql.com/cookbook/how-to-get-the-current-date-in-postgresql/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;How to Get the Current Date in PostgreSQL&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://note.espriter.net/1074&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;SQL&amp;nbsp;명령어&amp;nbsp;정리&amp;nbsp;#1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DATA</category>
      <category>PostgreSQL</category>
      <category>SQL</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1405</guid>
      <comments>https://sharingtime.tistory.com/1405#entry1405comment</comments>
      <pubDate>Thu, 22 Sep 2022 10:38:57 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS cli를 사용해서 s3 파일 일괄 다운받기 220921</title>
      <link>https://sharingtime.tistory.com/1404</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (9회차)&lt;/b&gt;&lt;br /&gt;- AWS CLI를 사용해서 s3 데이터를 일괄 다운 받을 수 있다&lt;br /&gt;- 명령어는 aws cp를 사용하면 됨&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS cli를 사용해서 s3 파일 일괄 다운받기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS s3에 있는 데이터를 다운 받고 싶을 때 웹 화면에서는 폴더 단위로 일괄 다운로드를 지원하지 않는다. 그래서 개별로 하나하나 들어가서 다운을 받아야 하는데 이럴 경우엔 AWS CLI를 쓰는 게 편리함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AWS 홈페이지&lt;/a&gt;에서 CLI를 다운받고 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 터미널(명령 프롬프트)를 열고 aws configure를 입력하여 설정값 입력&lt;/p&gt;
&lt;pre id=&quot;code_1663717346497&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]: 
Default region name [None]: 
Default output format [None]:&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. aws s3 cp {s3 경로} {다운받을 로컬 경로} --recursive 를 통해서 파일 다운로드, 단일 파일 다운로드 시에는 recursive가 필요없지만, 폴더 전체를 다운받으려면 recursive 설정이 필요함.&lt;/p&gt;
&lt;pre id=&quot;code_1663717451725&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws s3 cp my-local-folder s3://my-s3-bucket/ --recursive&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#AWS&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.learnaws.org/2022/03/01/aws-s3-cp-recursive/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;How&amp;nbsp;to&amp;nbsp;copy&amp;nbsp;files&amp;nbsp;recursively&amp;nbsp;using&amp;nbsp;AWS&amp;nbsp;S3&amp;nbsp;cp?&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://133hyun.tistory.com/55&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[S3]S3&amp;nbsp;버킷&amp;nbsp;폴더&amp;nbsp;다운로드하기&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CLOUD</category>
      <category>aws</category>
      <category>CLI</category>
      <category>cp</category>
      <category>File</category>
      <category>s3</category>
      <category>버킷</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1404</guid>
      <comments>https://sharingtime.tistory.com/1404#entry1404comment</comments>
      <pubDate>Wed, 21 Sep 2022 08:46:03 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] python에서 dataframe를 깔끔하게 Print 출력시키기 220920-3</title>
      <link>https://sharingtime.tistory.com/1403</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (8회차)&lt;/b&gt;&lt;br /&gt;- tabulate를 이용해 Dataframe을 깔끔하게 print 할 수 있다&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;python에서 dataframe를 깔끔하게 Print 출력시키기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;python에서 dataframe을 print 출력하면 줄 간격 등이 맞지 않아 알아보기 힘들게 출력이 된다. 그때 도움이 되는 것이 tabulate다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1663644005874&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from tabulate import tabulate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;설치후 아래와 같이 그냥 print가 아닌 tabulate를 걸어주고 출력하면 예쁘게 출력되는 것을 볼 수 있다. 템플릿도 사용할 수 있으니 참고.&amp;quot;}&quot; data-sheets-userformat=&quot;{&amp;quot;2&amp;quot;:705,&amp;quot;3&amp;quot;:{&amp;quot;1&amp;quot;:0},&amp;quot;9&amp;quot;:1,&amp;quot;10&amp;quot;:1,&amp;quot;12&amp;quot;:0}&quot;&gt;설치후 아래와 같이 그냥 print가 아닌 tabulate를 걸어주고 출력하면 예쁘게 출력되는 것을 볼 수 있다. 템플릿도 사용할 수 있으니 참고.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1663644064879&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; from tabulate import tabulate

&amp;gt;&amp;gt;&amp;gt; table = [[&quot;Sun&quot;,696000,1989100000],[&quot;Earth&quot;,6371,5973.6],
...          [&quot;Moon&quot;,1737,73.5],[&quot;Mars&quot;,3390,641.85]]
&amp;gt;&amp;gt;&amp;gt; print(tabulate(table))
-----  ------  -------------
Sun    696000     1.9891e+09
Earth    6371  5973.6
Moon     1737    73.5
Mars     3390   641.85
-----  ------  -------------&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/tabulate&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#tabulate&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://pypi.org/project/tabulate/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tabulate&amp;nbsp;0.8.10&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>dataframe</category>
      <category>print</category>
      <category>Python</category>
      <category>tabulate</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1403</guid>
      <comments>https://sharingtime.tistory.com/1403#entry1403comment</comments>
      <pubDate>Tue, 20 Sep 2022 12:26:38 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Grafana CLI를 사용한 관리자 비밀번호 초기화 220920-2</title>
      <link>https://sharingtime.tistory.com/1402</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (7회차)&lt;/b&gt;&lt;br /&gt;- Grafana cli 를 통해서 관리자 비밀번호 초기화가 가능&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Grafana CLI를 사용한 관리자 비밀번호 초기화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grafana 비밀번호를 까먹었을 경우, 아래와 같이 linux 상에서 grafana cli를 사용하여 초기화가 가능&lt;/p&gt;
&lt;pre id=&quot;code_1663643649053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grafana-cli admin reset-admin-password [new password]&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/grafana&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#Grafana&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://sh-safer.tistory.com/109&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[Grafana] admin 계정 패스워드 초기화&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>grafana</category>
      <category>그라파나</category>
      <category>시각화</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1402</guid>
      <comments>https://sharingtime.tistory.com/1402#entry1402comment</comments>
      <pubDate>Tue, 20 Sep 2022 12:15:53 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] Docker로 wireguard VPN 서버 실행하기 220920-1</title>
      <link>https://sharingtime.tistory.com/1401</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (6회차)&lt;/b&gt;&lt;br /&gt;- Docker(도커)를 사용해서 wireguard vpn 서버를 구축할 수 있다&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Docker로 wireguard VPN 서버 실행하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VPN 서버인 Wireguard를 도커에서 구현하기 위한 참고 문서는 배틀필드를 돌리기 위해 오라클 클라우드를 사용해서 VM을 구성하고, 거기에 도커 - Wireguard를 돌리기 위한 방법을 수행하였으나 나 같은 경우는 장난감으로 돌리고 있는 우분투 서버가 있기 때문에 명령어 부분만 정리. 필요하신 분들은 아래 리서치 내역을 참고하면 될 듯.&lt;/p&gt;
&lt;pre id=&quot;code_1663643113612&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# apt update 하기
sudo apt-get update;sudo apt-get -y upgrade;sudo apt-get -y dist-upgrade;

# 도커 준비
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $(whoami)

# 도커 run (ip와 비밀번호는 각자 취향대로..)
docker run -d --name=wg-easy -e WG_HOST=1.2.3.4 -e PASSWORD=&quot;1q2w3e4r!&quot; -v ~/.wg-easy:/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=&quot;net.ipv4.conf.all.src_valid_mark=1&quot; --sysctl=&quot;net.ipv4.ip_forward=1&quot; --restart unless-stopped weejewel/wg-easy

# 도커 도는지 확인
docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 도커가 실행되는지 확인한 후 아래와 같이 접속하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http://[공용&amp;nbsp;IP&amp;nbsp;주소]:51821&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/vpn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;#VPN&lt;/span&gt;&lt;/a&gt;&amp;nbsp;관련 작성 및 리서치 내역:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://gall.dcinside.com/mgallery/board/view/?id=baf2042&amp;amp;no=75170&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[공략/팁] [VPN] 3. 인스턴스 접속 및 wg-easy 설치 및 설정&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CLOUD</category>
      <category>Docker</category>
      <category>VPN</category>
      <category>Wireguard</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1401</guid>
      <comments>https://sharingtime.tistory.com/1401#entry1401comment</comments>
      <pubDate>Tue, 20 Sep 2022 12:07:12 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] AWS Athena에서 기존 파티션 drop하고, 신규 파티션 생성 220920</title>
      <link>https://sharingtime.tistory.com/1400</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (5회차)&lt;/b&gt;&lt;br /&gt;- AWS Athena에서 파티션이 잘못 생성되었을 경우 alter table을 사용해서 기존 파티션을 삭제하고, 새로운 파티션 생성 가능&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS Athena에서 기존 파티션 drop하고, 신규 파티션 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Athena에서 실수로 파티션을 잘못 생성한 경우(s3 경로를 잘못 입력했다던가 하는 이유로) 기존 파티션을 삭제하고, 신규 파티션을 생성할 수 있음.&lt;/p&gt;
&lt;pre id=&quot;code_1663638113953&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 기존 파티션 삭제 
ALTER TABLE {테이블명}
DROP IF EXISTS PARTITION ({파티션 키} = {파티션 값});
-- 파티션 키 대체
ALTER table {테이블명} ADD IF NOT EXISTS
PARTITION ({파티션 키} = {파티션 값}) LOCATION {s3 경로 값};

-- 예제 쿼리
ALTER TABLE database.table_name
DROP IF EXISTS PARTITION (partition_key = '2022-09-03');

ALTER table database.table_name ADD IF NOT EXISTS
PARTITION (partition_key = '2022-09') LOCATION 's3://data/2022/09/03';&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#aws&lt;/a&gt; 관련 작성했던 것:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://note.espriter.net/1393&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k 와 같은 에러가 발생했을 때&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://note.espriter.net/1392&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AWS&amp;nbsp;Athena&amp;nbsp;쿼리&amp;nbsp;실행&amp;nbsp;시&amp;nbsp;일부&amp;nbsp;쿼리에서&amp;nbsp;Limit&amp;nbsp;무시하는&amp;nbsp;현상에&amp;nbsp;대해&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/aws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#aws&lt;/a&gt; 관련 리서치한 것:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/alter-table-drop-partition.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ALTER&amp;nbsp;TABLE&amp;nbsp;DROP&amp;nbsp;PARTITION&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CLOUD</category>
      <category>Athena</category>
      <category>aws</category>
      <category>Database</category>
      <category>SQL</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1400</guid>
      <comments>https://sharingtime.tistory.com/1400#entry1400comment</comments>
      <pubDate>Tue, 20 Sep 2022 10:48:54 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 리눅스에서 log 없이 백그라운드 프로세스 실행 20220919</title>
      <link>https://sharingtime.tistory.com/1399</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (4회차)&lt;/b&gt;&lt;br /&gt;- nohub을 쓰면 백그라운드 실행 가능&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스에서 log 없이 백그라운드 프로세스 실행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 리눅스에서 sh 등을 실행하면 터미널이 열려 있을 동안에만 프로세스가 실행된다. 하지만 백그라운드에서 상시 돌아가게 만들려면 nohup 명령어를 사용해서 백그라운드에서 실행시킬 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1663600956892&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nohup example.sh 1&amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만일 백그라운드 프로세스를 중지하고 싶다면, ps -ef | grep 프로세스 명을 사용하고, kill 명령어로 중지하면 된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;#nohup 관련 리서치한 것:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://subji.github.io/posts/2020/04/12/nohupwithoutlog&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;nohup&amp;nbsp;명령어&amp;nbsp;.log&amp;nbsp;파일없이&amp;nbsp;실행&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DEV</category>
      <category>nohup</category>
      <category>프로세스</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1399</guid>
      <comments>https://sharingtime.tistory.com/1399#entry1399comment</comments>
      <pubDate>Tue, 20 Sep 2022 00:24:49 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] RTL-SDR 서버 구축을 위한 자료 리서치 220915</title>
      <link>https://sharingtime.tistory.com/1397</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (2회차)&lt;/b&gt;&lt;br /&gt;- RTL_TCP를 사용해서 RTL-SDR을 원격으로 제어할 수 있음&lt;br /&gt;- Git Repo에서 구성 가능&lt;br /&gt;- 외부 접근을 허용하려면 rtl_tcp -a 0.0.0.0 으로 실행해야 함&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;RTL-SDR 서버 구축을 위한 자료 리서치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RTL-SDR USB 수신기와 안테나를 가지고 놀던 중 안테나를 들고다닐 필요 없이, 고정 장소에 설치해두고 원격으로 조작할 수 있는 방법에 대해 찾게됨. 다른 RTL-SDR 커뮤니티에서 원격으로 주파수를 제어하는 것도 있었으니 기술적으로는 가능하단 얘기.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아본 결과 &lt;a href=&quot;https://github.com/c4software/raspberry-rtlsdr-server&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;rtl_sdr_server&lt;/a&gt; 라는 Repo가 git에 있는 것을 확인. 별로 어렵진 않으나 원격지에서 접속하려면 예시처럼 그냥 실행하는 것이 아닌 아래처럼 Listening 주소를 지정해줄 필요가 있음.&lt;/p&gt;
&lt;pre id=&quot;code_1663145628610&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rtl_sdr -a 0.0.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rtl_tcp를 통해서 접근하려면 SDR 수신 프로그램 중에서 지원하는 걸 찾아야 하는데, windows에서는 airspy를 썼고, mac에서는 sdr++를 사용하여 접근 테스트함. 아래 리서치 중에 지원 소프트웨어 목록이 있으니 그걸 참고해서 실행하면 될 듯함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;#rtl_sdr 관련 리서치한 것:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://it.gwangtori.com/30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;SDR을&amp;nbsp;컴퓨터에&amp;nbsp;연결해서&amp;nbsp;라디오를&amp;nbsp;들어보자!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.rtl-sdr.com/big-list-rtl-sdr-supported-software/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;THE&amp;nbsp;BIG&amp;nbsp;LIST&amp;nbsp;OF&amp;nbsp;RTL-SDR&amp;nbsp;SUPPORTED&amp;nbsp;SOFTWARE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/c4software/raspberry-rtlsdr-server&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Raspberry&amp;nbsp;Pi&amp;nbsp;rtl-sdr&amp;nbsp;server&amp;nbsp;setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://minimonk.net/11169&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;rtl-sdr&amp;nbsp;rpi&amp;nbsp;server&amp;nbsp;설치&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>RTL</category>
      <category>rtl_sdr</category>
      <category>SDR</category>
      <category>라디오</category>
      <category>무전</category>
      <category>서버</category>
      <category>수신기</category>
      <category>원격</category>
      <category>전파</category>
      <category>주파수</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1397</guid>
      <comments>https://sharingtime.tistory.com/1397#entry1397comment</comments>
      <pubDate>Thu, 15 Sep 2022 09:56:11 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 라즈비안 한글 폰트 설치하기 220914</title>
      <link>https://sharingtime.tistory.com/1396</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  &lt;b&gt;Today I Learned 요약 (1회차)&lt;/b&gt;&lt;br /&gt;- 라즈비안은 한글을 지원하지 않음&lt;br /&gt;- apt install을 통해 나눔고딕 폰트를 설치해야 함&lt;/blockquote&gt;
&lt;aside&gt;&lt;/aside&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;라즈비안에 한글 폰트 설치하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라즈비안(raspbian) 운영체제는 한글이 사전 설치되어 있지 않기 때문에 인터넷으로 네이버를 들어간다던가 하면 에러가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 명령어를 순차적으로 입력하고 재부팅을 누르면 이후 부터는 한글이 정상 출력되는 것을 확인할 수 있다. 다만 한글 출력과 한글 입력은 별개이기 때문에 한글이 입력되지는 않는다는 것에 주의할 필요가 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1663142276174&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# APT 패키지 업데이트
sudo apt update
sudo apt upgrade

# 나눔고딕 설치
sudo apt install fonts-nanum
sudo apt install fonts-nanum-extra

# 재부팅
sudo reboot&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://note.espriter.net/tag/%EB%9D%BC%EC%A6%88%EB%B9%84%EC%95%88&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;#라즈비안&lt;/a&gt; 관련 리서치한 것:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a title=&quot;라즈베리파이 : 설치 후 한글 폰트 설치 및 한글 입력기 설정 방법&quot; href=&quot;https://rpie.tistory.com/1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;라즈베리파이&amp;nbsp;:&amp;nbsp;설치&amp;nbsp;후&amp;nbsp;한글&amp;nbsp;폰트&amp;nbsp;설치&amp;nbsp;및&amp;nbsp;한글&amp;nbsp;입력기&amp;nbsp;설정&amp;nbsp;방법&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>Raspberry</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1396</guid>
      <comments>https://sharingtime.tistory.com/1396#entry1396comment</comments>
      <pubDate>Wed, 14 Sep 2022 18:10:17 +0900</pubDate>
    </item>
    <item>
      <title>OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k 와 같은 에러가 발생했을 때</title>
      <link>https://sharingtime.tistory.com/1393</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;lambda를 실행하면서 아래와 같은 로그와 함께 에러가 발생하는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1661147407538&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;OpenBLAS WARNING - could not determine the L2 cache size on this system, assuming 256k&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 경우, 아래처럼 Lambda 구성 - 메모리 용량을 늘려주면 대부분 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-08-22 오후 2.48.52.png&quot; data-origin-width=&quot;3302&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfLuuN/btrKgtc6gCC/WMK9hWExpzeEJdmk0JEnb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfLuuN/btrKgtc6gCC/WMK9hWExpzeEJdmk0JEnb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfLuuN/btrKgtc6gCC/WMK9hWExpzeEJdmk0JEnb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfLuuN%2FbtrKgtc6gCC%2FWMK9hWExpzeEJdmk0JEnb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3302&quot; height=&quot;740&quot; data-filename=&quot;스크린샷 2022-08-22 오후 2.48.52.png&quot; data-origin-width=&quot;3302&quot; data-origin-height=&quot;740&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>CLOUD</category>
      <category>aws</category>
      <category>lambda</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1393</guid>
      <comments>https://sharingtime.tistory.com/1393#entry1393comment</comments>
      <pubDate>Tue, 23 Aug 2022 15:51:51 +0900</pubDate>
    </item>
    <item>
      <title>AWS Athena 쿼리 실행 시 일부 쿼리에서 Limit 무시하는 현상에 대해</title>
      <link>https://sharingtime.tistory.com/1392</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1623859920.png&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2VrCa/btrJ8H9z1JU/osB6Vi1Gm47dB4lNuAbxEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2VrCa/btrJ8H9z1JU/osB6Vi1Gm47dB4lNuAbxEK/img.png&quot; data-alt=&quot;AWS Athena&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2VrCa/btrJ8H9z1JU/osB6Vi1Gm47dB4lNuAbxEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2VrCa%2FbtrJ8H9z1JU%2FosB6Vi1Gm47dB4lNuAbxEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;200&quot; data-filename=&quot;1623859920.png&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS Athena&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Athena에서 쿼리를 실행할 때 쿼리에 Limit을 추가할 때 limit을 무시하고 쿼리가 출력되거나 의도하지 않은 값이 리턴되는 경우가 있어서 찾아본 결과. 아래와 같은 답변이 보여서 공유합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예컨대 Athena는 쿼리 실행 시, 쿼리 동작을 계획할 동안 파티션된 파일을 목록화(list) 하는데 이 시점에서 파일의 Row 개수를 정확히 알지 못하기 때문에 쿼리를 실행해서 관련 된 모든 데이터를 읽은 다음 10개 째의 Row가 출력되는 시점에 작업을 중단하는 방식을 취하고 있는 듯 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Limit 형태보다는 where 조건으로 Athena가 쿼리해야 될 대상을 명확하게 하는 게 좀 더 효율적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Athena plans a query and then executes it. During planning it lists the partitions and all the files in those partitions. However, it does not know anything about the files, how many records they contain, etc.&lt;br /&gt;When you say&amp;nbsp;LIMIT 10&amp;nbsp;you're telling Athena you want at most 10 records in the result, and since you don't have any grouping or ordering you want 10 arbitrary records.&lt;br /&gt;However, during the planning phase Athena can't know which partitions have files in them, and how many of those files it will need to read to find 10 records. Without listing the partition locations it can't know they're not all empty, and without reading the files it can't know they're not all empty too.&lt;br /&gt;Therefore Athena first has to get the list of partitions, then list each partition's location on S3, even if you say you only want 10 arbitrary records.&lt;br /&gt;In this case there are so many partitions that Athena short-circuits and says that you probably didn't mean to run this kind of query. If the table had fewer partitions Athena would execute the query and each worker would read as little as possible to return 10 records and then stop &amp;ndash;&amp;nbsp;but each worker would produce 10 records, because the worker can't assume that other workers would return any records. Finally the coordinator will pick the 10 records out of all the results form all workers to return as the final result.&lt;br /&gt;Athena는 쿼리를 계획한 다음 실행합니다. 계획하는 동안 파티션과 해당 파티션의 모든 파일을 나열합니다. 그러나 파일, 파일에 포함된 레코드 수 등에 대해서는 알지 못합니다.&lt;br /&gt;'LIMIT 10'이라고 말하면 Athena에 결과에 최대 10개의 레코드가 포함되기를 원하고 그룹화 또는 정렬이 없기 때문에 임의의 레코드 10개를 원한다고 말하는 것입니다.&lt;br /&gt;그러나 계획 단계에서 Athena는 파일이 있는 파티션과 10개의 레코드를 찾기 위해 읽어야 하는 파일의 수를 알 수 없습니다. 파티션 위치를 나열하지 않고 모두 비어 있지 않다는 것을 알 수 없으며 파일을 읽지 않고는 모두 비어 있지 않다는 것을 알 수 없습니다.&lt;br /&gt;따라서 Athena는 10개의 임의 레코드만 원한다고 해도 먼저 파티션 목록을 가져온 다음 S3에 각 파티션의 위치를 나열해야 합니다.&lt;br /&gt;이 경우 파티션이 너무 많아서 Athena는 단락을 하고 이러한 종류의 쿼리를 실행할 의도가 없었다고 말합니다. 테이블에 파티션이 더 적은 경우 Athena는 쿼리를 실행하고 각 작업자는 가능한 한 적게 읽고 10개의 레코드를 반환한 다음 중지합니다. 그러나 작업자는 다른 작업자가 어떤 레코드도 반환할 것이라고 가정할 수 없기 때문에 각 작업자는 10개의 레코드를 생성합니다. . 마지막으로 코디네이터는 모든 작업자의 모든 결과에서 10개의 레코드를 선택하여 최종 결과로 반환합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ref.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/70216615/athena-ignore-limit-in-some-queries&quot;&gt;Athena ignore LIMIT in some queries&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/select.html&quot;&gt;SELECT&lt;/a&gt;&lt;/p&gt;</description>
      <category>CLOUD</category>
      <category>aws</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1392</guid>
      <comments>https://sharingtime.tistory.com/1392#entry1392comment</comments>
      <pubDate>Sun, 21 Aug 2022 17:57:31 +0900</pubDate>
    </item>
    <item>
      <title>AWS lambda에서 계층 추가 시 &amp;lsquo;Layers consume more than the available size of 262144000 bytes&amp;rsquo; 오류가 뜰 경우 대처 방안</title>
      <link>https://sharingtime.tistory.com/1391</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;aws-athena-logo-ED06CEA8A8-seeklogo.com.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yYhT2/btrJ6PAfzxD/IHKmJ47dUcOI2JUvLyQFfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yYhT2/btrJ6PAfzxD/IHKmJ47dUcOI2JUvLyQFfK/img.png&quot; data-alt=&quot;AWS Athena&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yYhT2/btrJ6PAfzxD/IHKmJ47dUcOI2JUvLyQFfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyYhT2%2FbtrJ6PAfzxD%2FIHKmJ47dUcOI2JUvLyQFfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;124&quot; height=&quot;124&quot; data-filename=&quot;aws-athena-logo-ED06CEA8A8-seeklogo.com.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS Athena&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS Athena에서 python 함수를 실행할 때 pandas 같은 기본 미지원 패키지를 추가하기 위해 계층(layer)를 추가할 때가 있는데 아래와 같이 메시지가 뜰 때가 있습니다.&lt;/p&gt;
&lt;aside&gt;  Layers consume more than the available size of 262144000 bytes&lt;/aside&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인은 말 그대로 계층 한계 용량 (약 262mb) 보다 많은 계층 용량을 적용하기 위해 발생합니다. 이럴 경우 아래 3가지 정도 대응 방안이 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계층에 추가된 패키지 중 불필요하고, 용량 많이 잡아먹는 python 패키지를 처음부터 제외하기&lt;/li&gt;
&lt;li&gt;Python 버전 여러 개에 대응하도록 설정되어있다면 Lambda에서 실제 사용하는 python 버전만 사용&lt;/li&gt;
&lt;li&gt;기존에 이미 추가된 Layer 중 불필요한 layer가 있는지 조회해서 삭제하기&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 같은 경우 2번 항목으로, lambda에서 실제 사용하는 python 버전에 맞게 패키지를 구성하니 불필요한 용량이 줄어들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p.s&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lambda 용량 한계는 250mb지만 임시 스토리지 용량은 10gb 까지 사용 가능하도록 변경되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ref:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kdinner.tistory.com/102&quot;&gt;Node.js - AWS Lambda 용량 줄이기(Layer를 사용하자)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/62775629/why-is-there-a-size-difference-when-using-the-aws-lambda-layers-vs-aws-sam-deplo&quot;&gt;Why is there a size difference when using the AWS Lambda layers vs AWS SAM deployment package&lt;/a&gt;&lt;/p&gt;</description>
      <category>CLOUD</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1391</guid>
      <comments>https://sharingtime.tistory.com/1391#entry1391comment</comments>
      <pubDate>Fri, 19 Aug 2022 16:13:18 +0900</pubDate>
    </item>
    <item>
      <title>소니 WF-1000XM3 이어폰 배터리 교체 후기</title>
      <link>https://sharingtime.tistory.com/1378</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제의 시작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소니의 이어폰 WF-1000XM3를 사용하고 있었는데 배터리가 30~40분 정도로 줄어들었습니다. 여기까지는 그럴 수 있죠. 문제는 유료 A/S를 받아보려고 소니 A/S 센터에 연락을 해보니 부품 교체가 아니라 리퍼만 되어서 교체할 경우 사실상 새로 사는 게 이득일 정도의 비용이 발생하는 겁니다. 그래서 찾아보니까 맨 아래 참고 링크처럼 교체하셨던 분이 계시더라구요. 그래서 용기를 얻고 저도 한번 야매로 수리해보기로 했습니다. 결론부터 말하면 충전 확인 LED 1개를 제물로 바치고 성공했습니다. 그래서 저처럼 배터리가 노후화 된 분들이 참고하실만한 글입니다. 다만 양면 테이프 붙어있는 부분이 2개나 되어서 잘못하면 그냥 이어폰 날려먹을 수 도 있습니다. 본 글을 읽고 신중히 판단하시기 바랍니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;준비물 구매&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;준비물은 당연히 이어폰 본체는 필요하고, 그 외에 필요한 게 아래의 3가지 입니다. 본글 맨 아래에 구매 링크가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오프닝 픽은 이어폰 뚜껑을 따기 위한 거고, 배터리는 교체용, 다이소 미니 드라이버는 내부의 십자 나사를 빼기 위한 용도입니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오프닝 픽&lt;/li&gt;
&lt;li&gt;CP1254 배터리 2개 (알리익스프레스 구매인데 현재는 더 이상 판매하지 않아서 검색 글로 대체합니다)&lt;/li&gt;
&lt;li&gt;다이소 미니 드라이버 세트&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이렇게 준비를 합니다. (드라이버는 카메라에 안 찍혔네요...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;KakaoTalk_20211107_161335091.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFTi6k/btrj2VNXHlQ/zgSpivLdQ2963IE7f3r6eK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFTi6k/btrj2VNXHlQ/zgSpivLdQ2963IE7f3r6eK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFTi6k/btrj2VNXHlQ/zgSpivLdQ2963IE7f3r6eK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFTi6k%2Fbtrj2VNXHlQ%2FzgSpivLdQ2963IE7f3r6eK%2Fimg.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;KakaoTalk_20211107_161335091.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오프닝 픽으로 이어폰 뚜껑을 따봅시다. 측면에서부터 살살 열어가면서 돌리다 보면 따입니다. 깊숙히 넣지 않고 주변부를 딴다는 생각으로 진행해주세요. 깊숙히 넣으면 내부가 손상됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1280&quot; data-filename=&quot;KakaoTalk_20211107_161335091_02.jpg&quot; width=&quot;393&quot; height=&quot;698&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHm8c/btrj3ivqfL8/TV9s87abrc5sFdKekYKKLK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHm8c/btrj3ivqfL8/TV9s87abrc5sFdKekYKKLK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHm8c/btrj3ivqfL8/TV9s87abrc5sFdKekYKKLK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHm8c%2Fbtrj3ivqfL8%2FTV9s87abrc5sFdKekYKKLK%2Fimg.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1280&quot; data-filename=&quot;KakaoTalk_20211107_161335091_02.jpg&quot; width=&quot;393&quot; height=&quot;698&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뚜껑을 따면 아래와 같은 모습입니다. 뚜껑 쪽의 검정색 동그라미 스펀지 같은게 크게 손상되지 않아야 합니다. 어느 한쪽엔 온전히 붙어야 하는데 크게 손상되면 향후 이어폰 터치가 제대로 되지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;573&quot; data-filename=&quot;1j.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5T0K6/btrj4WkQnAb/KMjsFxk4QiFLkWKf2YQiH1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5T0K6/btrj4WkQnAb/KMjsFxk4QiFLkWKf2YQiH1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5T0K6/btrj4WkQnAb/KMjsFxk4QiFLkWKf2YQiH1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5T0K6%2Fbtrj4WkQnAb%2FKMjsFxk4QiFLkWKf2YQiH1%2Fimg.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;573&quot; data-filename=&quot;1j.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그리고 이어폰 내부에 보면 아래와 같이 2개의 나사가 고정되어 있습니다. 그것을 드라이버로 살살 풀어줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;629&quot; data-filename=&quot;Untitled.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5khqV/btrj4oIHQ55/O50OewxlEjLsf9CGh4oFsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5khqV/btrj4oIHQ55/O50OewxlEjLsf9CGh4oFsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5khqV/btrj4oIHQ55/O50OewxlEjLsf9CGh4oFsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5khqV%2Fbtrj4oIHQ55%2FO50OewxlEjLsf9CGh4oFsK%2Fimg.png&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;629&quot; data-filename=&quot;Untitled.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;나사를 분리하고 살살 들어보면(혹은 1자 드라이버로 살살 들어올려보면 아래와 같이 조개 열리듯 분리가 되는데요. 배터리와 아래 전극이 양면 테이프로 붙어 있습니다. 이 부분을 살살 들어서 분리를 해줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;696&quot; data-filename=&quot;Untitled 1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VIXEx/btrj3h4p2OC/wJBpAAabR8YQNCcHpOWUd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VIXEx/btrj3h4p2OC/wJBpAAabR8YQNCcHpOWUd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VIXEx/btrj3h4p2OC/wJBpAAabR8YQNCcHpOWUd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVIXEx%2Fbtrj3h4p2OC%2FwJBpAAabR8YQNCcHpOWUd0%2Fimg.png&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;696&quot; data-filename=&quot;Untitled 1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그러면 아래와 같이 분리되는 데 전극을 분리해서 새로 구매한 배터리로 교체해줍니다. +- 잘 맞춰서 끼우시기 바랍니다. 안 그러면 쇼트나서 홀라당 날려 먹습니다. 그리고 전극 쪽에 구멍이랑 부품이랑 딱 맞게 물려주시기 바랍니다. 안 그러면 제대로 충전이 안되는 경우가 있더라구요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;551&quot; data-filename=&quot;Untitled 2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pom4e/btrj3hpKT40/Jpv4lPpKf2Xd5DPHMkcM01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pom4e/btrj3hpKT40/Jpv4lPpKf2Xd5DPHMkcM01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pom4e/btrj3hpKT40/Jpv4lPpKf2Xd5DPHMkcM01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPom4e%2Fbtrj3hpKT40%2FJpv4lPpKf2Xd5DPHMkcM01%2Fimg.png&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;551&quot; data-filename=&quot;Untitled 2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그리고 역순으로 다시 조립해서 충전기에 넣고 5분여 정도 충전을 시켜보고 이어폰을 뽑아서 정상적으로 사용이 되면 교체에 성공한 것입니다!!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 1개가 작동을 안해서 망했나 이러면서 배터리 다시 끼워서 해봤는데 결론은 방전때문에 생긴 이슈였습니다. 충전기에 넣어서 일단 빨간불이 들어오면 지켜보시다가 테스트해보시기 바랍니다. 저는 LED 1개 날려먹은 것치곤 멀쩡하게 끝나서 다행이라고 생각했습니다 ㅎㅎ 손 기술 좋은 와이프에게 엄청난 감사를 드립니다... ( _ _ )&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고 링크&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다른 분의 배터리 교체 후기&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.naver.com/andyinsight/222286458581&quot;&gt;중년 아빠의 세상도 아름다워야 한다. : 네이버 블로그&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;해외의 배터리 교체 후기&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gearbest.com/blog/how-to/how-to-replace-sony-wf-1000xm3-tws-earbuds-battery-12483&quot;&gt;How to Replace SONY WF-1000XM3 TWS Earbuds Battery?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;오프닝 픽 구매 링크&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://smartstore.naver.com/partscanner/products/5215297009?NaPm=ct%3Dkvoxq5xi%7Cci%3Dcheckout%7Ctr%3Dppc%7Ctrx%3D%7Chk%3Da315a80ec4c9c1bb439f58ef1828335bb10c02d8&quot;&gt;아이픽스잇 오프닝 픽 1개 아이폰 맥북 아이패드 갤럭시 다용도 수리공구 iFixit : 파트스캐너&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CP1254 배터리 검색 링크&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ko.aliexpress.com/af/cp1254.html?d=y&amp;amp;origin=n&amp;amp;SearchText=cp1254&amp;amp;catId=0&amp;amp;initiative_id=SB_20211106235113&quot;&gt;cp1254 - AliExpress 에서 cp1254 구매하고 무료로 배송받자 version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;다이소 미니 드라이버 소개&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.naver.com/hstory05/222358191421&quot;&gt;quecn : 네이버 블로그&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DEV</category>
      <category>hardware</category>
      <category>Sony</category>
      <category>WF-1000XM3</category>
      <category>교체</category>
      <category>배터리</category>
      <category>이어폰</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1378</guid>
      <comments>https://sharingtime.tistory.com/1378#entry1378comment</comments>
      <pubDate>Sun, 7 Nov 2021 17:10:04 +0900</pubDate>
    </item>
    <item>
      <title>PowerToys 수정이나 삭제, 업데이트가 안 될 경우 대처</title>
      <link>https://sharingtime.tistory.com/1377</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;513&quot; data-filename=&quot;6fa0e600-b17f-11ea-9360-1f79417d8a69.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EdjCp/btrjqoB7WcL/UDwxnHFyKfrWUksaX9ftlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EdjCp/btrjqoB7WcL/UDwxnHFyKfrWUksaX9ftlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EdjCp/btrjqoB7WcL/UDwxnHFyKfrWUksaX9ftlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEdjCp%2FbtrjqoB7WcL%2FUDwxnHFyKfrWUksaX9ftlk%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;513&quot; data-filename=&quot;6fa0e600-b17f-11ea-9360-1f79417d8a69.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PowerToys를 사용하고 있다가 설치나 업데이트가 안 될 경우가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재까지 유력한 경우는 Temp 폴더에 보관 중이던 powertoys 설치 파일은 디스크 정리나 다른 프로그램이 지워버렸을 경우에 발생하는 듯 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관련 이슈를 첨부합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/PowerToys/issues/6317&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/microsoft/PowerToys/issues/6317&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1635729532742&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;0.20.1 auto-updater to 0.21.1 asks for PowerToysBootstrappedInstaller-0.20.1.0.msi &amp;middot; Issue #6317 &amp;middot; microsoft/PowerToys&quot; data-og-description=&quot;0.20.1 auto-updater to 0.21.1 asks for PowerToysBootstrappedInstaller-0.20.1.0.msi ℹ Computer information PowerToys version: 0.20.1.0 (while updating to 0.21.1.0) PowerToy Utility: Installer Runnin...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoft/PowerToys/issues/6317&quot; data-og-url=&quot;https://github.com/microsoft/PowerToys/issues/6317&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/by4khy/hyMa06vi8i/vU8yef6vJ9pU09BW7XvxGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/PowerToys/issues/6317&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoft/PowerToys/issues/6317&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/by4khy/hyMa06vi8i/vU8yef6vJ9pU09BW7XvxGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;0.20.1 auto-updater to 0.21.1 asks for PowerToysBootstrappedInstaller-0.20.1.0.msi &amp;middot; Issue #6317 &amp;middot; microsoft/PowerToys&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;0.20.1 auto-updater to 0.21.1 asks for PowerToysBootstrappedInstaller-0.20.1.0.msi ℹ Computer information PowerToys version: 0.20.1.0 (while updating to 0.21.1.0) PowerToy Utility: Installer Runnin...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재로서는 삭제되었을 경우 방법이 없고 아래 MS의 삭제 트러블슈터를 다운받아서 Powertoys를 명시해주고 제거를 눌러주면 PowerToys가 강제로 삭제됩니다. 그 뒤에 새로운 powertoys 복구를 진행하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/topic/fix-problems-that-block-programs-from-being-installed-or-removed-cca7d1b6-65a9-3d98-426b-e9f927e1eb4d&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://support.microsoft.com/en-us/topic/fix-problems-that-block-programs-from-being-installed-or-removed-cca7d1b6-65a9-3d98-426b-e9f927e1eb4d&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1635729554840&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Fix problems that block programs from being installed or removed&quot; data-og-description=&quot;A subscription to make the most of your time&quot; data-og-host=&quot;support.microsoft.com&quot; data-og-source-url=&quot;https://support.microsoft.com/en-us/topic/fix-problems-that-block-programs-from-being-installed-or-removed-cca7d1b6-65a9-3d98-426b-e9f927e1eb4d&quot; data-og-url=&quot;https://support.microsoft.com/en-us/topic/fix-problems-that-block-programs-from-being-installed-or-removed-cca7d1b6-65a9-3d98-426b-e9f927e1eb4d&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/topic/fix-problems-that-block-programs-from-being-installed-or-removed-cca7d1b6-65a9-3d98-426b-e9f927e1eb4d&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://support.microsoft.com/en-us/topic/fix-problems-that-block-programs-from-being-installed-or-removed-cca7d1b6-65a9-3d98-426b-e9f927e1eb4d&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Fix problems that block programs from being installed or removed&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A subscription to make the most of your time&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;support.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DEV</category>
      <category>powertoys</category>
      <category>windows</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1377</guid>
      <comments>https://sharingtime.tistory.com/1377#entry1377comment</comments>
      <pubDate>Mon, 1 Nov 2021 18:20:15 +0900</pubDate>
    </item>
    <item>
      <title>SQLD 2과목 2장 정리</title>
      <link>https://sharingtime.tistory.com/1376</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;/p&gt;
&lt;article id=&quot;16372280-3651-41fe-ae8a-c3c65a906022&quot; class=&quot;page sans Notion_P&quot;&gt;
&lt;div class=&quot;page-body&quot;&gt;
&lt;h2 id=&quot;c13edabb-5856-487a-9604-8dcd12433586&quot; class=&quot;block-color-blue_background&quot; data-ke-size=&quot;size26&quot;&gt;Contents&lt;/h2&gt;
&lt;h2 id=&quot;d4526048-319f-4383-89bc-254aa633c562&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 1절 - 서브 쿼리&lt;/h2&gt;
&lt;ol id=&quot;b196509d-3e89-4499-bf03-51a8e890eaa5&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브쿼리란?
&lt;ul id=&quot;dcc7d9e8-d75a-47c5-b532-b89f2facca7c&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 SQL문 안에 포함되어 있는 또다른 SQL문을 의미한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;60f3d641-7ef6-4334-ba08-5af38d8dbecb&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브쿼리 사용 시 주의 사항
&lt;ul id=&quot;aafc21ea-6fc2-4bb8-ba08-8d82798db9ad&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브 쿼리는 괄호로 감싸서 기술&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;963cd3c1-e352-4509-8e9c-2c3db44d84c9&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브 쿼리는 단일행(single row) 또는 복수 행(multiple row) 비교 연산자와 함께 사용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;ea078664-e7d5-4fcf-bed4-7cb46343ba51&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단일행 비교 연산자는 서브쿼리 결과가 반드시 1건 이하여야 하고, 복수행 비교 연산자는 서브 쿼리의 결과 건수와 무관&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;34372509-dbdb-4eb3-9cd9-7f35eefffec7&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중첩 서브 쿼리 및 스칼라 서브 쿼리에서는 order by를 사용하지 못한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;245c0ced-9b16-4d0c-9501-21ffb6253739&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브 쿼리의 분류
&lt;ul id=&quot;2279a8a1-a5b5-455c-aa39-392374272be3&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동작 방식에 따른 서브쿼리 분류&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;258&quot; data-filename=&quot;Untitled 0.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m4YkR/btq9EhdLMyX/pck1mRHwd0eJBb9YklLdF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m4YkR/btq9EhdLMyX/pck1mRHwd0eJBb9YklLdF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m4YkR/btq9EhdLMyX/pck1mRHwd0eJBb9YklLdF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm4YkR%2Fbtq9EhdLMyX%2Fpck1mRHwd0eJBb9YklLdF1%2Fimg.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;258&quot; data-filename=&quot;Untitled 0.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;8b68dafc-0984-49aa-980d-cbf01a5ee7af&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반환 데이터 형태에 따른 서브쿼리 분류&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;376&quot; data-filename=&quot;Untitled 1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbFHWD/btq9wgH7naI/NaiP4vZeLFf0znKmIAdIR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbFHWD/btq9wgH7naI/NaiP4vZeLFf0znKmIAdIR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbFHWD/btq9wgH7naI/NaiP4vZeLFf0znKmIAdIR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbFHWD%2Fbtq9wgH7naI%2FNaiP4vZeLFf0znKmIAdIR0%2Fimg.png&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;376&quot; data-filename=&quot;Untitled 1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;ad60b6e6-1509-45c8-ab3b-d7d950a8eac7&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단일 행 서브쿼리
&lt;ul id=&quot;6d50d963-3b2a-44df-ae62-122fdc82b94f&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브쿼리가 단일행 비교 연산자(=, &amp;gt;, &amp;lt;, &amp;lt;&amp;gt; 등)과 함께 사용할 때는 서브쿼리 결과 건수가 반드시 1건 이하여야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;aa314a07-49e0-459c-9064-7795196863ab&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만일 2건 이상을 반환하려면 SQL문은 실행시간 오류 발생 (아래 예시 기준, 김남일의 동명이인이 있다면 오류가 발생)&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;497&quot; data-filename=&quot;Untitled 2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OAJsy/btq9yMM6An6/aunoh76heiocBBqHIMpPs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OAJsy/btq9yMM6An6/aunoh76heiocBBqHIMpPs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OAJsy/btq9yMM6An6/aunoh76heiocBBqHIMpPs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOAJsy%2Fbtq9yMM6An6%2Faunoh76heiocBBqHIMpPs0%2Fimg.png&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;497&quot; data-filename=&quot;Untitled 2.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;b7b83e6b-4552-43d8-8e57-bf6d976bdd38&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 행 서브쿼리
&lt;ul id=&quot;bd5c9b98-2ebf-470c-b60b-d0e91b9baf75&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브 쿼리의 결과가 2건 이상 반환될 수 있다면, 반드시 다중 행 비교 연산자(IN, ALL, ANY, SOME)과 함께 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;9602241e-fda3-463f-991a-47c3a7ffe552&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 행 비교 연산자는 아래와 같음.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;331&quot; data-filename=&quot;Untitled 3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PvJLq/btq9BZSugTE/niW2SB9sZ3jGbRH3C2PNG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PvJLq/btq9BZSugTE/niW2SB9sZ3jGbRH3C2PNG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PvJLq/btq9BZSugTE/niW2SB9sZ3jGbRH3C2PNG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPvJLq%2Fbtq9BZSugTE%2FniW2SB9sZ3jGbRH3C2PNG1%2Fimg.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;331&quot; data-filename=&quot;Untitled 3.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;482&quot; data-filename=&quot;Untitled 4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3mLLm/btq9AIpUuzt/dokJOf5IxS1kgvdk3cR8dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3mLLm/btq9AIpUuzt/dokJOf5IxS1kgvdk3cR8dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3mLLm/btq9AIpUuzt/dokJOf5IxS1kgvdk3cR8dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3mLLm%2Fbtq9AIpUuzt%2FdokJOf5IxS1kgvdk3cR8dk%2Fimg.png&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;482&quot; data-filename=&quot;Untitled 4.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;ef88a656-88bf-434f-be13-a11dddbd15cf&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 칼럼 서브 쿼리
&lt;ul id=&quot;1e62bc33-0c52-424d-8996-806b9b51353b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 컬럼 서브쿼리는 서브 쿼리의 결과로 여러개의 칼럼이 반환돼 메인 쿼리의 조건과 동시에 비교하는 것을 의미. SQL Server에서는 미지원&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;8d89ba2e-508d-4ee3-b140-efb9816a883e&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예로 소속팀 별 키가 가장 작은 사람들의 정보를 출력하고자 할 때 아래와 같이 작성 가능&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;709&quot; data-filename=&quot;Untitled 5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcbHns/btq9yMTRska/xZpxrQmVEgpmte2QFyRrMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcbHns/btq9yMTRska/xZpxrQmVEgpmte2QFyRrMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcbHns/btq9yMTRska/xZpxrQmVEgpmte2QFyRrMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcbHns%2Fbtq9yMTRska%2FxZpxrQmVEgpmte2QFyRrMK%2Fimg.png&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;709&quot; data-filename=&quot;Untitled 5.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;d293c9e9-e248-47da-9988-5e79c6672c23&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;7&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연관 서브 쿼리
&lt;ul id=&quot;dc8b8cef-d56d-4ade-9aca-84684e5756ec&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연관 서브 쿼리는 서브 쿼리 내에 메인 쿼리 칼럼이 사용된 서브 쿼리.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;819ed57e-7718-46e5-bcca-ec46e0981cea&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들어 선수 자신이 속한 팀의 평균키보다 작은 선수들의 정보를 출력하는 SQL문을 아래와 같이 작성 가능&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;757&quot; data-filename=&quot;Untitled 6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDT19/btq9ynNy6G4/1SXEUQfKBxPBPuSGWC1331/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDT19/btq9ynNy6G4/1SXEUQfKBxPBPuSGWC1331/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDT19/btq9ynNy6G4/1SXEUQfKBxPBPuSGWC1331/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDT19%2Fbtq9ynNy6G4%2F1SXEUQfKBxPBPuSGWC1331%2Fimg.png&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;757&quot; data-filename=&quot;Untitled 6.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;6e661e43-e84a-4904-8e94-62d42e42f338&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그 밖의 위치에서 사용하는 서브 쿼리
&lt;ul id=&quot;ea1ab358-40ec-41da-aa98-3aeb7de0956a&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SELECT 절에 서브 쿼리 사용&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;223&quot; data-filename=&quot;Untitled 7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwG3LN/btq9ynfJXLh/FaGFhaokKsyxS2khFcp6rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwG3LN/btq9ynfJXLh/FaGFhaokKsyxS2khFcp6rK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwG3LN/btq9ynfJXLh/FaGFhaokKsyxS2khFcp6rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwG3LN%2Fbtq9ynfJXLh%2FFaGFhaokKsyxS2khFcp6rK%2Fimg.png&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;223&quot; data-filename=&quot;Untitled 7.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;167c051e-6633-4606-b549-b6be75e7d169&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FROM 절에서 서브 쿼리&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;256&quot; data-filename=&quot;Untitled 8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GbAVz/btq9zFAa6WP/C1gzFk6PDHtUKYaHdiiAz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GbAVz/btq9zFAa6WP/C1gzFk6PDHtUKYaHdiiAz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GbAVz/btq9zFAa6WP/C1gzFk6PDHtUKYaHdiiAz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGbAVz%2Fbtq9zFAa6WP%2FC1gzFk6PDHtUKYaHdiiAz0%2Fimg.png&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;256&quot; data-filename=&quot;Untitled 8.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;5b0dfb03-930b-49d4-b7b0-4a424845a304&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HAVING 절에서 서브 쿼리 사용&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;335&quot; data-filename=&quot;Untitled 9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmvZ5O/btq9yNSL5LX/5KelFXKpipHr71UGJkK4x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmvZ5O/btq9yNSL5LX/5KelFXKpipHr71UGJkK4x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmvZ5O/btq9yNSL5LX/5KelFXKpipHr71UGJkK4x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmvZ5O%2Fbtq9yNSL5LX%2F5KelFXKpipHr71UGJkK4x0%2Fimg.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;335&quot; data-filename=&quot;Untitled 9.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;figure id=&quot;990194b6-513c-4b7f-a20f-98e27dc2f1bb&quot; class=&quot;image&quot;&gt;&lt;a href=&quot;SQLD%202%E1%84%80%E1%85%AA%E1%84%86%E1%85%A9%E1%86%A8%202%E1%84%8C%E1%85%A1%E1%86%BC%20%E1%84%8C%E1%85%A5%E1%86%BC%E1%84%85%E1%85%B5%201e448f3aa7984f01abcdb37e94f4cc88/Untitled%209.png&quot;&gt;&quot;/&amp;gt; &lt;/a&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;ef7fc452-dcfe-42a2-8997-46372dc448e5&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;9&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뷰
&lt;ul id=&quot;26309c47-5d74-40de-a3c5-8350093e6499&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블은 실제로 데이터를 가진 반면 뷰는 실제 데이터를 가지고 있지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;ca25a429-a6b3-4a73-9410-636adf32a161&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다만 뷰 정의(View Definition)만을 가지고 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;b416992b-7bc3-4ee0-8381-e52e286e8125&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뷰의 장점은 아래와 같음.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;281&quot; data-filename=&quot;Untitled 10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RhNAv/btq9ymBaI8T/KDMnVIwtIeqH2fmRPIBYe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RhNAv/btq9ymBaI8T/KDMnVIwtIeqH2fmRPIBYe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RhNAv/btq9ymBaI8T/KDMnVIwtIeqH2fmRPIBYe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRhNAv%2Fbtq9ymBaI8T%2FKDMnVIwtIeqH2fmRPIBYe0%2Fimg.png&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;281&quot; data-filename=&quot;Untitled 10.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;300f8bbb-1bf5-4bde-a283-9fb7fba88779&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뷰의 생성은 아래와 같이 CREATE VIEW로 생성 가능&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;217&quot; data-filename=&quot;Untitled 11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0ugAF/btq9wfvIKbn/KDrkKT7cm37WQQFS8FyA6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0ugAF/btq9wfvIKbn/KDrkKT7cm37WQQFS8FyA6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0ugAF/btq9wfvIKbn/KDrkKT7cm37WQQFS8FyA6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0ugAF%2Fbtq9wfvIKbn%2FKDrkKT7cm37WQQFS8FyA6K%2Fimg.png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;217&quot; data-filename=&quot;Untitled 11.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;b60b9828-ceb4-40b9-ab00-4acb9e4c5014&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뷰를 사용할 경우 DBMS가 내부적으로 SQL문을 다시 재작성&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;6b81d152-02cf-401d-98d8-2e03562f2ade&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뷰를 삭제하기 위해선 DROP VIEW를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;e9ae2ebb-67fc-4b0b-bdec-82b179672d85&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 2절 - 집합 연산자&lt;/h2&gt;
&lt;ol id=&quot;a018188b-23e8-45a5-8ebd-702495799f7a&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정의
&lt;ul id=&quot;e7ec5848-af33-414b-8642-2041b67d3e09&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2개 이상의 테이블에서 조인을 사용하지 않고 연관 데이터를 조회하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;2ddfe4a3-305e-4bb2-8b7f-dc0bb070386f&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조인은 조인 조건을 사용해 여러 테이블의 행과 행을 연결하는 반면 집합 연산자는 여러개의 결과 집한 간의 연산을 통해 결합하는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;b941bb2d-55f4-4879-94eb-25534abc2a40&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 2개 이상의 질의 결과를 하나의 결과로 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;9596b965-64cc-40bf-a733-419e38cf9f7b&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;집합연산자 종류&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;336&quot; data-filename=&quot;Untitled 12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MGhBn/btq9EgMHgrb/TTrftyM4rC1q6kMfvNTX20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MGhBn/btq9EgMHgrb/TTrftyM4rC1q6kMfvNTX20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MGhBn/btq9EgMHgrb/TTrftyM4rC1q6kMfvNTX20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMGhBn%2Fbtq9EgMHgrb%2FTTrftyM4rC1q6kMfvNTX20%2Fimg.png&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;336&quot; data-filename=&quot;Untitled 12.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;788&quot; data-filename=&quot;Untitled 13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4h6vK/btq9wfJhHdm/hEXAILQVKGkJMz2PoWNhN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4h6vK/btq9wfJhHdm/hEXAILQVKGkJMz2PoWNhN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4h6vK/btq9wfJhHdm/hEXAILQVKGkJMz2PoWNhN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4h6vK%2Fbtq9wfJhHdm%2FhEXAILQVKGkJMz2PoWNhN0%2Fimg.png&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;788&quot; data-filename=&quot;Untitled 13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;b640ce4c-836e-440b-aa3f-8b11061db947&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UNION과 UNION ALL 을 사용했을 때 결과가 달라짐
&lt;ul id=&quot;4582b4a1-6afc-4c0a-b923-6f47eda52755&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UNION은 중복값을 제외 / UNION ALL은 전체 표기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;03816670-ffdc-45a9-b7d1-fedc796c00f3&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 3절 - 그룹 함수&lt;/h2&gt;
&lt;ol id=&quot;13f3b6a9-efc4-4ee8-b646-bfb6787c8e72&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 함수 종류
&lt;ol id=&quot;33a3993b-92cb-467f-afb3-9c74175a480b&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AGGREGATE FUNCTION
&lt;ul id=&quot;f897e58d-b7f4-4307-b2eb-9ddbaf948d81&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;COUNT, SUM, AVG, MAX, MIN 등의 집계함수 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;914accf0-4455-425a-a729-7d0c69a2cf6d&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUP FUNCTION
&lt;ul id=&quot;649ab5f8-a341-4195-9113-a53eb7991f37&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결산 개념의 업무가 있을 경우, 여러개의 테이블을 1개로 묶기 위해 GROUPING 함수와 CASE 함수를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;258f8f03-adf1-4e9f-b522-ffad8ac5c49b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROLLUP, CUBE, GROUPING SETS 함수가 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;e3b8d952-d812-418e-af17-cdd094fbf7b4&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WINDOW FUNCTION
&lt;ul id=&quot;445a1daf-39c5-4f9f-8a2c-37506cc99882&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분석함수 내지 순위 함수로도 알려진 윈도우 함수는 데이터 웨어하우스에서 발전한 기능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;568a93fd-dd83-4dfb-9840-a85fb3d56605&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROLL UP 함수
&lt;ul id=&quot;63b1eff3-e377-4efd-9256-3b99bd7fc385&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적인 GROUP BY SQL 문장에 사용 가능&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;174&quot; data-filename=&quot;Untitled 14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3o8V9/btq9C9N2wqX/oD8rE6at1jiOUUUGuMgyQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3o8V9/btq9C9N2wqX/oD8rE6at1jiOUUUGuMgyQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3o8V9/btq9C9N2wqX/oD8rE6at1jiOUUUGuMgyQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3o8V9%2Fbtq9C9N2wqX%2FoD8rE6at1jiOUUUGuMgyQ0%2Fimg.png&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;174&quot; data-filename=&quot;Untitled 14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;1d43d315-ac8d-49c5-a154-fa47ef7617d0&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CUBE 함수
&lt;ul id=&quot;e44301b5-ddc7-4ced-b5db-1a913a3d3b12&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROLLUP에서는 가능한 SubTotal만을 생성하지만 CUBE에서는 결합 가능한 모든 값에 대해 다차원 집계 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;2d8cbb52-8b0c-48b8-8e37-3960446251b1&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가능한 모든 경우의 수에 대해 SUB TOTAL을 생성할 때는 CUBE를 사용하는 것이 바람직하나 부하가 걸리기 때문에 주의 필요&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;243&quot; data-filename=&quot;Untitled 15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNdULN/btq9C98lOZJ/F3nA6nmuE39kH0Vnc8BLD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNdULN/btq9C98lOZJ/F3nA6nmuE39kH0Vnc8BLD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNdULN/btq9C98lOZJ/F3nA6nmuE39kH0Vnc8BLD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNdULN%2Fbtq9C98lOZJ%2FF3nA6nmuE39kH0Vnc8BLD1%2Fimg.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;243&quot; data-filename=&quot;Untitled 15.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;1420da4a-fa40-49a4-97bb-b6249285caf5&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUPING SETS 함수
&lt;ul id=&quot;2ea13b63-2c2a-4e38-b2d1-870a043a333b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUPING SETS 함수를 이용해 GROUP BY를 여러번 반복하지 않고도 원하는 결과 획득 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;a99f2989-f151-452d-93fe-df85eec5c0e3&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUPING SETS에 표시된 인수들에 대해 개별 집계를 구할 수 있으며, 이때 표시된 인수 간에는 계층 구조인 ROLLUP과 달리 평등한 관계이므로 인수의 순서가 바뀌어도 결과는 동일&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;262&quot; data-filename=&quot;Untitled 16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ygqun/btq9AH5BGNA/28JEmcm0AVwxpN7QhwTPP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ygqun/btq9AH5BGNA/28JEmcm0AVwxpN7QhwTPP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ygqun/btq9AH5BGNA/28JEmcm0AVwxpN7QhwTPP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fygqun%2Fbtq9AH5BGNA%2F28JEmcm0AVwxpN7QhwTPP0%2Fimg.png&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;262&quot; data-filename=&quot;Untitled 16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;8225532f-76c3-425d-a344-7ac9183f5330&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 4절 - 윈도우 함수&lt;/h2&gt;
&lt;ol id=&quot;1386ccee-899f-430d-b2d7-5c5fdfe16d84&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;행과 행간의 관계를 쉽게 정의하기 위한 함수&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;ec3af572-e253-49be-811e-c42961547cbc&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도 함수 종류
&lt;ul id=&quot;4b3d02da-7ba7-42a7-81bc-42c38924c1e9&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 내 순위(RANK) 관련 함수 &amp;rarr; RANK, DENSE_RANK, ROW_NUMBER&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;41258151-12a3-4e1e-a9bf-3f306711fa44&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹내 집계(AGGREGATE) 관련 함수 &amp;rarr; SUM, AMX, MIN, AVG, COUNT&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;dde3e559-811e-4f80-92d3-0567c50dcc54&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 내 행 관련 함수 &amp;rarr; FIRST_VALUE, LAST_VALUE, LAG, LEAD&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;babe0f91-3b54-4961-a6f3-5b3317d5d875&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 내 비율 관련 함수 CUME_DIST, PERCENT_RANK_ NTILE, RATIO_TO_REPORT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;8544cff3-f4f6-4e77-8497-91d6b3c01959&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도우 함수에는 OVER 문구가 키워드로 필수 포함&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;289&quot; data-filename=&quot;Untitled 17.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LRkEW/btq9zEuwjbq/MAU5eSFrtCQZklDf8ysitK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LRkEW/btq9zEuwjbq/MAU5eSFrtCQZklDf8ysitK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LRkEW/btq9zEuwjbq/MAU5eSFrtCQZklDf8ysitK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLRkEW%2Fbtq9zEuwjbq%2FMAU5eSFrtCQZklDf8ysitK%2Fimg.png&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;289&quot; data-filename=&quot;Untitled 17.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;e9c97214-dee5-4359-98ac-8fcd7998a0fa&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RANK 함수 &amp;rarr; RANK는 ORDER BY 를 포함한 QUERY문에서 특정 항목에 대한 순위를 구하는 함수다. 이때 특정 범위 내에서 순위를 구할 수도 있고, 전체 데이터에 대한 순위를 구할 수도 있다. 동일한 값에 대해서는 동일한 순위 부여&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;730&quot; data-filename=&quot;Untitled 18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y2Ieb/btq9C8BCSYG/27yZUKgWOWj0LDIux25NXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y2Ieb/btq9C8BCSYG/27yZUKgWOWj0LDIux25NXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y2Ieb/btq9C8BCSYG/27yZUKgWOWj0LDIux25NXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY2Ieb%2Fbtq9C8BCSYG%2F27yZUKgWOWj0LDIux25NXk%2Fimg.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;730&quot; data-filename=&quot;Untitled 18.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;c8f3de45-2acc-413c-9be4-fa2970c07119&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DENSE_RANK 함수 &amp;rarr; DENS_RANK 함수는 RANK와 유사하나 동일한 순위를 하나의 건수로 취급&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;756&quot; data-filename=&quot;Untitled 19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzQMK9/btq9zFGX8bs/0owddADoMlSvPSuxXCx6lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzQMK9/btq9zFGX8bs/0owddADoMlSvPSuxXCx6lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzQMK9/btq9zFGX8bs/0owddADoMlSvPSuxXCx6lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzQMK9%2Fbtq9zFGX8bs%2F0owddADoMlSvPSuxXCx6lk%2Fimg.png&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;756&quot; data-filename=&quot;Untitled 19.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;d103a132-db0b-4e91-a865-252a359559b0&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 집계함수
&lt;ul id=&quot;2bf1f205-fb98-46af-8a57-1fb0bf1f7f5a&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SUM 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;4e66148c-175c-4d58-9bbe-178810092150&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MAX 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;648a2aba-3d40-4cb9-92ab-340b5b310c57&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MIN 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;4b4f58c9-a1bf-4ff8-9293-20bbb212e1cb&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AVG 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;d56787cc-9ab5-46fc-8b07-b062bd731934&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;COUNT 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;6c6bcf65-7db5-458f-9fde-7fc09a3bf3aa&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;7&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FIRST_VALUE 함수 &amp;rarr; FIRST_VALUE 함수를 이용해 파티션 별 윈도우에서 가장 먼저 나온 값을 구한다. SQL SERVER에서는 지원하지 않는다. MIN 함수와 동일한 값을 얻을 수도 있다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;834&quot; data-filename=&quot;Untitled 20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3aNcI/btq9wfoYpEI/j5kiaQzRUVi7k2BpyL0vz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3aNcI/btq9wfoYpEI/j5kiaQzRUVi7k2BpyL0vz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3aNcI/btq9wfoYpEI/j5kiaQzRUVi7k2BpyL0vz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3aNcI%2Fbtq9wfoYpEI%2Fj5kiaQzRUVi7k2BpyL0vz0%2Fimg.png&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;834&quot; data-filename=&quot;Untitled 20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;cf21911d-8f9b-43ba-be4e-abf98c7b7b61&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LAST_VALUE 함수 &amp;rarr; LAST_VALUE 함수를 이용해 파티션 별 윈도우에서 가장 나중에 나온 값을 구한다. MAX와 같은 결과를 얻을 수도 있다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;836&quot; data-filename=&quot;Untitled 21.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crP9HU/btq9ymVoI3E/deahKB6JdwVbIvMDKMbyHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crP9HU/btq9ymVoI3E/deahKB6JdwVbIvMDKMbyHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crP9HU/btq9ymVoI3E/deahKB6JdwVbIvMDKMbyHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrP9HU%2Fbtq9ymVoI3E%2FdeahKB6JdwVbIvMDKMbyHk%2Fimg.png&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;836&quot; data-filename=&quot;Untitled 21.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;bd5080cd-137d-4928-b664-380333ef8234&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;9&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LAG 함수 &amp;rarr; LAG 함수를 이용해 파티션 별 윈도우에서 이전 몇번째의 행의 값을 가져올 수 있다. SQL SERVER에서는 지원하지 않는다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;553&quot; data-filename=&quot;Untitled 22.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btiTVm/btq9DuYILeW/GdgtQQkT3P40JKNDT9rgfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btiTVm/btq9DuYILeW/GdgtQQkT3P40JKNDT9rgfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btiTVm/btq9DuYILeW/GdgtQQkT3P40JKNDT9rgfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtiTVm%2Fbtq9DuYILeW%2FGdgtQQkT3P40JKNDT9rgfk%2Fimg.png&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;553&quot; data-filename=&quot;Untitled 22.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;227ca798-1021-42e1-8bc0-c682028e2683&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;10&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LEAD 함수 &amp;rarr; LEAD 함수를 이용해 파티션 별 윈도우에서 이후 몇번째 행의 값을 가져올 수 있다. SQL SERVER 미지원&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;531&quot; data-filename=&quot;Untitled 23.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z0VJ9/btq9EhLBGJ1/W8RAtoHl4OIHkmyZoa4ZLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z0VJ9/btq9EhLBGJ1/W8RAtoHl4OIHkmyZoa4ZLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z0VJ9/btq9EhLBGJ1/W8RAtoHl4OIHkmyZoa4ZLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ0VJ9%2Fbtq9EhLBGJ1%2FW8RAtoHl4OIHkmyZoa4ZLk%2Fimg.png&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;531&quot; data-filename=&quot;Untitled 23.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;7bdce180-2e98-4e29-8c87-a7dd084b468f&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;11&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 내 비율 함수
&lt;ul id=&quot;435f1466-5e81-4b40-a890-1eb6ae593695&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RATIO_TO_REPOSRT &amp;rarr; 파티션 내 전체 SUM 값에 대한 행별 칼럼 값의 백분율을 소수점을 구할 수 있다. 결과값은 &amp;gt;0 &amp;amp; &amp;le; 1의 범위를 가진다. 전체 RATIO의 합은 1일다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;525&quot; data-filename=&quot;Untitled 24.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DzMiz/btq9AJh4EaL/XHepkg6hqwkI6oZjkjw1dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DzMiz/btq9AJh4EaL/XHepkg6hqwkI6oZjkjw1dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DzMiz/btq9AJh4EaL/XHepkg6hqwkI6oZjkjw1dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDzMiz%2Fbtq9AJh4EaL%2FXHepkg6hqwkI6oZjkjw1dk%2Fimg.png&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;525&quot; data-filename=&quot;Untitled 24.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;223e271c-397a-4b6e-9240-73ec901e8c43&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PERCENT_RANK 함수 &amp;rarr; 파티션 별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 해서 행의 순서 별 백분율을 구한다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;770&quot; data-filename=&quot;Untitled 25.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K8JRi/btq9zEH8dBu/mzoMIAcjYOhfHWsfmk7Ze0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K8JRi/btq9zEH8dBu/mzoMIAcjYOhfHWsfmk7Ze0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K8JRi/btq9zEH8dBu/mzoMIAcjYOhfHWsfmk7Ze0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK8JRi%2Fbtq9zEH8dBu%2FmzoMIAcjYOhfHWsfmk7Ze0%2Fimg.png&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;770&quot; data-filename=&quot;Untitled 25.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;031bf312-7314-4b46-8f58-bd1de15c0551&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CUME_DIST 함수 &amp;rarr; 파티션 별 윈도우의 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율을 산출&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;749&quot; data-filename=&quot;Untitled 26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdLckV/btq9AIQYFVZ/DS77S8kpMSaK9ZkNm61sk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdLckV/btq9AIQYFVZ/DS77S8kpMSaK9ZkNm61sk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdLckV/btq9AIQYFVZ/DS77S8kpMSaK9ZkNm61sk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdLckV%2Fbtq9AIQYFVZ%2FDS77S8kpMSaK9ZkNm61sk1%2Fimg.png&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;749&quot; data-filename=&quot;Untitled 26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;c6a82692-8010-4dc2-b23f-7a25f7cff2b8&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NTILE 함수 &amp;rarr; NTILE 함수를 이용해 파티션 별 전체 건수를 ARGUMENT 값으로 N 등분한 결과를 구할 수 있다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;759&quot; data-filename=&quot;Untitled 27.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwJMN/btq9DvXEapP/kTMZ5QBfjdJQnd0VrQI8l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwJMN/btq9DvXEapP/kTMZ5QBfjdJQnd0VrQI8l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwJMN/btq9DvXEapP/kTMZ5QBfjdJQnd0VrQI8l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwJMN%2Fbtq9DvXEapP%2FkTMZ5QBfjdJQnd0VrQI8l0%2Fimg.png&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;759&quot; data-filename=&quot;Untitled 27.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;afe36525-38aa-478c-8b61-d10e4a2de7ca&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 5절 - TOP N 쿼리&lt;/h2&gt;
&lt;ol id=&quot;57e67691-1955-4184-ae82-5f90d70d7896&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROWNUM 슈도 칼럼
&lt;ul id=&quot;7418fbde-4a7d-44ea-832c-68edf2a944b3&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL 철 ㅣ결과 집합의 각 행에 대해 임시로 부여되는 일련번호다. 테이블이나 집합에서 원하는 만큼 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용한다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;406&quot; data-filename=&quot;Untitled 28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dACNHz/btq9BYMQgeJ/KsM5c2i3uR7HmJ0p4OuI3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dACNHz/btq9BYMQgeJ/KsM5c2i3uR7HmJ0p4OuI3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dACNHz/btq9BYMQgeJ/KsM5c2i3uR7HmJ0p4OuI3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdACNHz%2Fbtq9BYMQgeJ%2FKsM5c2i3uR7HmJ0p4OuI3k%2Fimg.png&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;406&quot; data-filename=&quot;Untitled 28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;52c6e217-4158-4ebd-a44a-e3a4ca2dc445&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TOP 절
&lt;ul id=&quot;26d874eb-0da2-484d-bb09-781a6a38f98d&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TOP 절을 사용해 집합으로 출력되는 행의 수를 제한 가능&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;316&quot; data-filename=&quot;Untitled 29.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKOig6/btq9yNytfYO/OZYPAp5zsAQpDZ5tP9s1TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKOig6/btq9yNytfYO/OZYPAp5zsAQpDZ5tP9s1TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKOig6/btq9yNytfYO/OZYPAp5zsAQpDZ5tP9s1TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKOig6%2Fbtq9yNytfYO%2FOZYPAp5zsAQpDZ5tP9s1TK%2Fimg.png&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;316&quot; data-filename=&quot;Untitled 29.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;b78c6d2c-9343-4fcb-b183-a108abc79849&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROW LIMITING 절
&lt;ul id=&quot;9ecd279c-ebdb-4026-9a53-88337133e0ca&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROW LIMITING 절로 TOP N 쿼리 작성 가능&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;590&quot; data-filename=&quot;Untitled 30.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdN7Dn/btq9AIQYF95/S0L6LcADITxUevzUSKiObk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdN7Dn/btq9AIQYF95/S0L6LcADITxUevzUSKiObk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdN7Dn/btq9AIQYF95/S0L6LcADITxUevzUSKiObk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdN7Dn%2Fbtq9AIQYF95%2FS0L6LcADITxUevzUSKiObk%2Fimg.png&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;590&quot; data-filename=&quot;Untitled 30.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;ee788339-12c2-4661-bfed-7dd5ede2f7d6&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 6절 - 계층형 질의와 셀프 조인&lt;/h2&gt;
&lt;ol id=&quot;f8e7d117-3355-43d3-aeb0-1753349996e4&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정의
&lt;ul id=&quot;db2dab04-0611-4235-8620-76d33745b370&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의를 사용&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;271&quot; data-filename=&quot;Untitled 31.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDWY1D/btq9ymnAJQp/z1APVBGK5iaeiGw6Ip0tkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDWY1D/btq9ymnAJQp/z1APVBGK5iaeiGw6Ip0tkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDWY1D/btq9ymnAJQp/z1APVBGK5iaeiGw6Ip0tkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDWY1D%2Fbtq9ymnAJQp%2Fz1APVBGK5iaeiGw6Ip0tkk%2Fimg.png&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;271&quot; data-filename=&quot;Untitled 31.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;e4b85944-6624-479e-9029-0539ab980c73&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;셀프 조인
&lt;ul id=&quot;dc32f709-05b0-4c2d-9b28-1c863bf4b1d0&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;셀프 조인이랑 동일 테이블 사이의 조인을 의미함. 따라서 FROM 절에 동일 테이블이 2번 이상 타나탐. 동일 테이블 사이의 조인을 사용하면 테이블과 칼럼이 동일하기 때문에 Alias를 사용해야 함&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;191&quot; data-filename=&quot;Untitled 32.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bj4wG/btq9ylWw8VY/jJA1vsSCGVtujpgh9GkaYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bj4wG/btq9ylWw8VY/jJA1vsSCGVtujpgh9GkaYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bj4wG/btq9ylWw8VY/jJA1vsSCGVtujpgh9GkaYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBj4wG%2Fbtq9ylWw8VY%2FjJA1vsSCGVtujpgh9GkaYK%2Fimg.png&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;191&quot; data-filename=&quot;Untitled 32.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;49ec8119-9fe5-4234-8b5a-cfd8476f6cf0&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;0b63cdba-a8e4-4df5-8c0d-9f68df3c3062&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;3. 계층형 질의&lt;/p&gt;
&lt;div class=&quot;indented&quot;&gt;
&lt;ul id=&quot;c6ecbd1b-66c0-47f3-a19e-4dafbe4e6269&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계층형 데이터 조회는 DBMS 벤더와 버전에 따라 다른 방법으로 지원한다. 여기서는 Oracle과 SQL Server 기준으로 설명한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;556526d8-5674-4b43-bbff-adbbcd7e9075&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오라클&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;255&quot; data-filename=&quot;Untitled 33.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brCUD2/btq9BZSuhAS/N6JThkS463WZngl0kek6D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brCUD2/btq9BZSuhAS/N6JThkS463WZngl0kek6D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brCUD2/btq9BZSuhAS/N6JThkS463WZngl0kek6D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrCUD2%2Fbtq9BZSuhAS%2FN6JThkS463WZngl0kek6D1%2Fimg.png&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;255&quot; data-filename=&quot;Untitled 33.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;2a2a96d0-cc57-4a4f-b1aa-c126506b79ad&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL SERVER&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;694&quot; data-filename=&quot;Untitled 34.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZmY5L/btq9DazrOtV/oU64n3fwgS6cvVBslCuodK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZmY5L/btq9DazrOtV/oU64n3fwgS6cvVBslCuodK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZmY5L/btq9DazrOtV/oU64n3fwgS6cvVBslCuodK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZmY5L%2Fbtq9DazrOtV%2FoU64n3fwgS6cvVBslCuodK%2Fimg.png&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;694&quot; data-filename=&quot;Untitled 34.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;f752d4f8-1d4c-419e-bbe6-bfad23605d7e&quot; class=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;dbf0cca8-3d94-402e-92a0-f8cdc780edcc&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 7절 - PIVOT 절과 UNPIVOT 절&lt;/h2&gt;
&lt;ol id=&quot;29e607fd-b38d-467b-af99-88fbd962784d&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개요
&lt;ul id=&quot;8f92d9d5-397f-4c3f-9f9b-c699df68d72b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PIVOT은 회전시킨다는 의미를 가지고 있다. PIVOT 절은 행을 열로 회전시키고, UNPIVOT 절은 열을 행으로 회전시킨다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;57679707-a073-4b8a-97c6-dcac1ca7ce5a&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PIVOT 절
&lt;ul id=&quot;de6e3788-606b-4767-bb0b-1d4d39fe642f&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PIVOT절은 행을 열로 전환&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;626&quot; data-filename=&quot;Untitled 35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIsuDW/btq9C8VV3KM/7ZPOGGdlK26AYtLTadya7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIsuDW/btq9C8VV3KM/7ZPOGGdlK26AYtLTadya7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIsuDW/btq9C8VV3KM/7ZPOGGdlK26AYtLTadya7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIsuDW%2Fbtq9C8VV3KM%2F7ZPOGGdlK26AYtLTadya7k%2Fimg.png&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;626&quot; data-filename=&quot;Untitled 35.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;72465527-dc7b-498d-b6ac-5ed1ae6a993b&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UNPIVOT 절
&lt;ul id=&quot;4be63f0c-8a90-4c6f-a3e8-010cac87d50e&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UNPIVOT 절은 PIVOT 절과 반대로 동작하여 열이 행으로 전환된다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;467&quot; data-filename=&quot;Untitled 36.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OfdzN/btq9C98lO5j/ShIWlDxfIYyblONgywMh00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OfdzN/btq9C98lO5j/ShIWlDxfIYyblONgywMh00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OfdzN/btq9C98lO5j/ShIWlDxfIYyblONgywMh00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOfdzN%2Fbtq9C98lO5j%2FShIWlDxfIYyblONgywMh00%2Fimg.png&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;467&quot; data-filename=&quot;Untitled 36.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;6eabb6f2-0b1f-47db-8332-31f243d24ce0&quot; class=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2장 8절 - 정규 표현식&lt;/h2&gt;
&lt;ol id=&quot;0c288463-be58-4cf2-b38f-d997154f8236&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개요
&lt;ul id=&quot;73ad2898-1112-4b2c-9865-bddf2c9febe1&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규 표현식(regular expression)은 문자열의 규칙을 표현하는 검색 패턴으로 주로 문자열 검색과 치환에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;3cecdf0b-db53-430c-8657-e775e598fe42&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;POSIX 연산자
&lt;ul id=&quot;01c56deb-0e23-4af2-9666-22a464c3eb82&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규 표현식의 POSIX 연산자&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;145&quot; data-filename=&quot;Untitled 37.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7eiPf/btq9xMmy1Y1/43fhKSCKdfSUzdEV7hjkK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7eiPf/btq9xMmy1Y1/43fhKSCKdfSUzdEV7hjkK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7eiPf/btq9xMmy1Y1/43fhKSCKdfSUzdEV7hjkK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7eiPf%2Fbtq9xMmy1Y1%2F43fhKSCKdfSUzdEV7hjkK0%2Fimg.png&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;145&quot; data-filename=&quot;Untitled 37.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol id=&quot;bc7a78f9-132a-4fcd-98d9-578cea01dce9&quot; class=&quot;numbered-list&quot; style=&quot;list-style-type: disc;&quot; start=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규 표현식 조건과 함수
&lt;ul id=&quot;cd4da3ab-382c-4222-9ed6-fe70e6680c5b&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REGEXP_LIKE 조건 &amp;rarr; REGEXP_LIKE 조건은 source_char가 pattern과 일치하면 TRUE를 아닌 경우에는 FALSE를 반환.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;334&quot; data-filename=&quot;Untitled 38.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKwcYv/btq9AJPR3h3/Mi3z2mEUEn7zzz9S8yOKvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKwcYv/btq9AJPR3h3/Mi3z2mEUEn7zzz9S8yOKvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKwcYv/btq9AJPR3h3/Mi3z2mEUEn7zzz9S8yOKvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKwcYv%2Fbtq9AJPR3h3%2FMi3z2mEUEn7zzz9S8yOKvk%2Fimg.png&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;334&quot; data-filename=&quot;Untitled 38.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;949a9307-3b4d-4ae8-9e02-0544c5071457&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REGEXP_REPLACE 함수 &amp;rarr; REGEXP_REPLACE 함수는 source_char에서 일치한 pattern을 replace_string으로 변경한 문자 값을 반환한다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;630&quot; data-filename=&quot;Untitled 39.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW26Pf/btq9wgg7p05/ascHTdwfXYbJ36CdsnhrXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW26Pf/btq9wgg7p05/ascHTdwfXYbJ36CdsnhrXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW26Pf/btq9wgg7p05/ascHTdwfXYbJ36CdsnhrXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW26Pf%2Fbtq9wgg7p05%2FascHTdwfXYbJ36CdsnhrXk%2Fimg.png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;630&quot; data-filename=&quot;Untitled 39.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;6746937b-8aed-4914-9d6d-d91786807481&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REGEXP_SUBSTR 함수 &amp;rarr; REGEXP_SUBSTR 함수는 sourc_char에서 일치한 pattern을 반환한다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;304&quot; data-filename=&quot;Untitled 40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QB7fm/btq9BY0j5s2/OE46WKG68BnAA2FguEYfN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QB7fm/btq9BY0j5s2/OE46WKG68BnAA2FguEYfN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QB7fm/btq9BY0j5s2/OE46WKG68BnAA2FguEYfN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQB7fm%2Fbtq9BY0j5s2%2FOE46WKG68BnAA2FguEYfN0%2Fimg.png&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;304&quot; data-filename=&quot;Untitled 40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul id=&quot;12c58a24-1c50-4044-b4ca-9850c2cdb9d3&quot; class=&quot;bulleted-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REGEXP_IUNSTR 함수 &amp;rarr; soucr_char에서 일치한 patternd의 시작 위치를 정수로 반환한다.&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;657&quot; data-filename=&quot;Untitled 41.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G7Axp/btq9C9UPlE9/hQnMKiFXof1mK1Wpj1XFMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G7Axp/btq9C9UPlE9/hQnMKiFXof1mK1Wpj1XFMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G7Axp/btq9C9UPlE9/hQnMKiFXof1mK1Wpj1XFMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG7Axp%2Fbtq9C9UPlE9%2FhQnMKiFXof1mK1Wpj1XFMK%2Fimg.png&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;657&quot; data-filename=&quot;Untitled 41.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;REGEXP_COUNT 함수 &amp;rarr; REGEXP_COUNT 함수는 source_char에서 일치한 pattern의 개수를 반환&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;316&quot; data-filename=&quot;Untitled 42.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G7gQe/btq9yLUWNxi/SbxbgeV2VZfSDfT0NWfrHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G7gQe/btq9yLUWNxi/SbxbgeV2VZfSDfT0NWfrHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G7gQe/btq9yLUWNxi/SbxbgeV2VZfSDfT0NWfrHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG7gQe%2Fbtq9yLUWNxi%2FSbxbgeV2VZfSDfT0NWfrHk%2Fimg.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;316&quot; data-filename=&quot;Untitled 42.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/article&gt;</description>
      <category>DATA</category>
      <category>SQL</category>
      <category>SQLD</category>
      <category>자격증</category>
      <author>에스프리터</author>
      <guid isPermaLink="true">https://sharingtime.tistory.com/1376</guid>
      <comments>https://sharingtime.tistory.com/1376#entry1376comment</comments>
      <pubDate>Wed, 14 Jul 2021 17:06:03 +0900</pubDate>
    </item>
  </channel>
</rss>