<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>끄적끄적 개발자</title>
    <link>https://qoi11.tistory.com/</link>
    <description>공부 복습 일기</description>
    <language>ko</language>
    <pubDate>Tue, 16 Jun 2026 19:57:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>까마귀!</managingEditor>
    <image>
      <title>끄적끄적 개발자</title>
      <url>https://tistory1.daumcdn.net/tistory/6237142/attach/37ad3dd133084190b84d4fb9b28a5e48</url>
      <link>https://qoi11.tistory.com</link>
    </image>
    <item>
      <title>암호의 역사</title>
      <link>https://qoi11.tistory.com/25</link>
      <description>&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;기밀성, 무결성 &amp;lt;- 암호 기술을 통해 제공 가능
&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;고대암호&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스키테일 암호&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecsbp1/btsMJpkCmHX/CxBFCVg8xmcndyGwEdyNXk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecsbp1/btsMJpkCmHX/CxBFCVg8xmcndyGwEdyNXk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecsbp1/btsMJpkCmHX/CxBFCVg8xmcndyGwEdyNXk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fecsbp1%2FbtsMJpkCmHX%2FCxBFCVg8xmcndyGwEdyNXk%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;351&quot; height=&quot;143&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;143&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;시저암호&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQRSLN/btsMHRJDIyv/kGBulGpz2KAtkkeEE8U2S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQRSLN/btsMHRJDIyv/kGBulGpz2KAtkkeEE8U2S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQRSLN/btsMHRJDIyv/kGBulGpz2KAtkkeEE8U2S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQRSLN%2FbtsMHRJDIyv%2FkGBulGpz2KAtkkeEE8U2S0%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;455&quot; height=&quot;192&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;506&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;li&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;size18&quot;&gt;빈도 분석법&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;알파벳의 26자가 문장에서 통계적으로 비슷한 빈도 수를 가진다는 점에 착안&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;근대암호&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AxNpY/btsMIEpi6Eu/wO23oeF2VgVZ6UjoVeQoqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AxNpY/btsMIEpi6Eu/wO23oeF2VgVZ6UjoVeQoqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AxNpY/btsMIEpi6Eu/wO23oeF2VgVZ6UjoVeQoqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAxNpY%2FbtsMIEpi6Eu%2FwO23oeF2VgVZ6UjoVeQoqK%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;514&quot; height=&quot;358&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;비대칭키 암호 기술 = 공개키 암호&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&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;li&gt;암/복호화 키를 송신자와 수신자 사이 비밀리에 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&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;li&gt;암호와, 복호화: 키스트림과 평문스트림 XOR 연산
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;키스트림을 비밀리에 간직해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&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 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;size18&quot;&gt;DES&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;li&gt;암호화 과정과 복호화 과정이 같음&lt;/li&gt;
&lt;li&gt;16라운드의 반복 구조
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;같은 연산을 16번을 반복&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;전치: 위치를 바꾸는 것&lt;/li&gt;
&lt;li&gt;환자: 글자를 다른 글자로 바꾸는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;암/복호화 과정이 동일&lt;/li&gt;
&lt;li&gt;라운드 함수에 대한 제약이 없다&lt;/li&gt;
&lt;li&gt;DES, SEED 등 대부분의 블록 암호에 혜택&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3중 DES&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DES가 전수공격에 안전하지 않음&lt;/li&gt;
&lt;li&gt;서로 다른 키를 갖는 3개의 연속된 DES 암호화&lt;/li&gt;
&lt;li&gt;인접한 암호는 비슷하지 말아야 한다 복호화가 어렵기 때문&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>보안</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/25</guid>
      <comments>https://qoi11.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 12 Mar 2025 21:59:06 +0900</pubDate>
    </item>
    <item>
      <title>넘파이</title>
      <link>https://qoi11.tistory.com/24</link>
      <description>&lt;h3&gt;리스트와 넘파이&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;리스트는 &lt;strong&gt;다양한 자료형의 데이터를 여러 개 저장&lt;/strong&gt;할 수 있다&lt;/li&gt;
&lt;li&gt;넘파이는 각각의 자료형 요소가 같아야 한다&lt;/li&gt;
&lt;li&gt;리스트보다 넘파이의 배열이 훨씬 빠르다&lt;ul&gt;
&lt;li&gt;강력한 브로드캐스팅 기능 때문에 &lt;/li&gt;
&lt;li&gt;따라서 데이터 과학자들은 기본 리스트 대신 넘파이 선호&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;넘파이는 다차원 배열이다 &lt;/li&gt;
&lt;li&gt;파이써 리스트는 더하면 리스트가 합해지고, 넘파이는 각 리스트들의 값이 더해진다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>인공지능</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/24</guid>
      <comments>https://qoi11.tistory.com/24#entry24comment</comments>
      <pubDate>Tue, 11 Mar 2025 20:42:49 +0900</pubDate>
    </item>
    <item>
      <title>Docker Compose</title>
      <link>https://qoi11.tistory.com/23</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker Compose란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 개의 Docker Container들을 하나의 서비스로 정의하고 구성해 &lt;u&gt;하나의 묶음으로 관리할 수 있게&lt;/u&gt; 도와주는 툴&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;여러 개의 컨테이너들을 관리하기 좋다.&lt;/li&gt;
&lt;li&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;compose.yml&lt;/p&gt;
&lt;pre id=&quot;code_1724725352550&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  my-db(서비스 이름: 이름은 마음대로 지정해 쓰면 됨):
    image: mysql(기본 이미지)
    environment:(환경 설정)
      MYSQL_ROOT_PASSWORD: pwd1234
    volumes:(도커 볼륨 경로 설정)
      - ./mysql_data:/var/lib/mysql
    ports:(포트 설정)
      - 3306:3306&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;compose.yml은 아래 명령어와 같음&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;docker run --name myDB -e MYSQL_ROOT_PASSWORD=pwd1234 -d -v /home/min/mysql_data:/var/lib/mysql -p 3306:3306 mysql&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker compose 실행&lt;/p&gt;
&lt;pre id=&quot;code_1724725394904&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose up&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;docker compose 실행 종료&lt;/p&gt;
&lt;pre id=&quot;code_1724725488468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose down&lt;/code&gt;&lt;/pre&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;docker compose를 실행 종료 시킬때 compose 컨테이너 모두 삭제됨&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;docker compose로 실행되는 컨테이너를 보고 싶을때&lt;/p&gt;
&lt;pre id=&quot;code_1724725611342&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;두 대 이상의 컨테이너를 docker compose로 띄울때&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;compose.yml&lt;/p&gt;
&lt;pre id=&quot;code_1724725739582&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  my-db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: pwd1234
    volumes:
      - ./mysql_data:/var/lib/mysql
    ports:
      - 3306:3306
  my-cache-server:
    image: redis
    ports:
      - 6379:6379&lt;/code&gt;&lt;/pre&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;서비스 이름들 아래 해당 이미지를 띄워 명령어를 적기&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Docker</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/23</guid>
      <comments>https://qoi11.tistory.com/23#entry23comment</comments>
      <pubDate>Tue, 27 Aug 2024 11:52:26 +0900</pubDate>
    </item>
    <item>
      <title>Dockerfile</title>
      <link>https://qoi11.tistory.com/22</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;Dockerfile이란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;docker이미지를 만들어주는 파일&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dockerfile 실행 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1723468501973&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build -t [원하는 이미지 이름] .(경로)&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;from: 베이스 이미지를 생성, 특정 초기 이미지 위에 추가적인 셋팅을 할 수 있음&amp;nbsp; &amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;from [이미지명]:[태그명]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;copy: 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너에 전달&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&amp;nbsp;copy [복사할 경로] [복사되는 경로]&lt;/li&gt;
&lt;li&gt;컨테이너 디렉터리로 복사할때 끝에 '/'를 붙여줘야함&lt;/li&gt;
&lt;li&gt;.txt로 끝나는 모든 파일을 복사하고 싶으면 *.txt [컨테이너 경로] 로 쓰면 됨&amp;nbsp;&lt;/li&gt;
&lt;li&gt;.dockerignore 파일을 생성해서 &lt;u&gt;특정 파일의 복사를 무시&lt;/u&gt;할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;entrypoint: 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;entrypoint [명령어...]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;run: 이미지 생성 과정에서 명령어를 실행시켜야 할 때 사용한다&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;run [명령문...]&amp;nbsp; &amp;nbsp; &amp;nbsp;ex) run npm install&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;workdir: 작업 디렉토리 지정
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;workdir [작업 디렉토리로 사용할 절대 경로]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;expose: 컨테이너 내부에서 어떤 포트에 프로그램이 실행되는지 문서화하는 작업&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Docker</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/22</guid>
      <comments>https://qoi11.tistory.com/22#entry22comment</comments>
      <pubDate>Mon, 12 Aug 2024 22:54:59 +0900</pubDate>
    </item>
    <item>
      <title>도커 볼륨</title>
      <link>https://qoi11.tistory.com/21</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;도커 볼륨: 도커 컨테이너에서 데이터를 영속적으로 저장하는 방법&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker run -v [호스트 컴퓨터 절대경로]: [컨테이너 디렉토리 절대경로] [이미지명]:[태그명]&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;mysql 예시&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723464188979&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -e MYSQL_ROOT_PASSWORD=내가 정한 비밀번호 -v 원하는 디렉토리경로/새 디렉토리 폴더:/var/lib/mysql mysql -d -p 3306:3306 mysql&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;에러가 났을때&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1723464210361&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo lsof -i:3306&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;span style=&quot;color: #ee2323;&quot;&gt;command가 나온다면&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1723464257594&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo kill [pid]&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;blockquote data-ke-style=&quot;style2&quot;&gt;한번 정한 비밀번호는 &lt;b&gt;볼륨에 저장되어 있기 때문에&lt;/b&gt; 바뀌지 않음&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;호스트 컴퓨터에 절대 경로에는 디렉토리가 없거나 디렉토리에 어떠한 파일도 있지 말아야 함 &lt;br /&gt;안 그럼 도커 볼륨이 생성되지 않음&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;도커 컨테이너 이미지와 볼륨&amp;nbsp; 디렉토리는 서로 내용이 공유됨&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Docker</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/21</guid>
      <comments>https://qoi11.tistory.com/21#entry21comment</comments>
      <pubDate>Mon, 12 Aug 2024 22:06:43 +0900</pubDate>
    </item>
    <item>
      <title>도커 기본 명령어들-2</title>
      <link>https://qoi11.tistory.com/20</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;pre id=&quot;code_1723463232130&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker logs 컨테이너 이름&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;pre id=&quot;code_1723463369621&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docekr logs -f 컨테이너 이름&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;pre id=&quot;code_1723463525853&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it 컨테이너아이디 bash&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;</description>
      <category>Docker</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/20</guid>
      <comments>https://qoi11.tistory.com/20#entry20comment</comments>
      <pubDate>Mon, 12 Aug 2024 20:54:19 +0900</pubDate>
    </item>
    <item>
      <title>docker 기본 명령어들</title>
      <link>https://qoi11.tistory.com/19</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커 이미지&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;dockerhub: 도커 커뮤니티로 도커를 공유할 수 있다&lt;/span&gt;&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;&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;size18&quot;&gt;도커 이미지 받는 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1720604896882&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull 이미지이름:태그이름&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;&lt;b&gt;이때&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&lt;b&gt;태그란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;태그 이름을 안 쓰면 최신 버전의 이미지로 다운 받을 수 있음!&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;도커 이미지 확인하는 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1720605274800&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image ls&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;pre id=&quot;code_1720605494801&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image rm 이미지아이디or이미지이름&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;pre id=&quot;code_1720605487417&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker image rm -f 이미지아이디or이미지이름&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;pre id=&quot;code_1720605550283&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image rm $(docker images -q)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커 컨테이너&lt;/h3&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;pre id=&quot;code_1720605686641&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker create 이미지이름&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;pre id=&quot;code_1720605727045&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker ps -a&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;pre id=&quot;code_1720605835131&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker start 컨테이너아이디&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;pre id=&quot;code_1720605765141&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;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;pre id=&quot;code_1720606093317&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop 컨테이너아이디&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;pre id=&quot;code_1720606128923&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker kill 컨테이너아이디&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;pre id=&quot;code_1720606022132&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker rm 컨테이너아이디&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;pre id=&quot;code_1720606178295&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker rm -f 컨테이너이름&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;pre id=&quot;code_1720606610344&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker rm $(docker ps -qa)&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;pre id=&quot;code_1720606337034&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run --name 이름 -d -p 호스트 포트:컨테이너 포트 이미지이름[:태그명]&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;</description>
      <category>Docker</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/19</guid>
      <comments>https://qoi11.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 10 Jul 2024 19:16:57 +0900</pubDate>
    </item>
    <item>
      <title>docker 흐름</title>
      <link>https://qoi11.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 이미지 다운로드&lt;/p&gt;
&lt;pre id=&quot;code_1720595903147&quot; class=&quot;ebnf&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker pull nginx&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;&lt;br /&gt;2. 다운로드 된 이미지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1720595912603&quot; class=&quot;mel&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker image ls&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;3. 이미지를 컨테이너에 올려 Nginx 서버 실행&lt;/p&gt;
&lt;pre id=&quot;code_1720595965816&quot; class=&quot;angelscript&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;docker run --name webserver -d -p 80:80 nginx&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;4. 도커가 잘 실행되는 지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1720597021006&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;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;localhost:80이 잘 실행됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIhzWf/btsIt5kmnw1/FonxhH2Jks41kK7LqQCKq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIhzWf/btsIt5kmnw1/FonxhH2Jks41kK7LqQCKq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIhzWf/btsIt5kmnw1/FonxhH2Jks41kK7LqQCKq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIhzWf%2FbtsIt5kmnw1%2FFonxhH2Jks41kK7LqQCKq1%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;672&quot; height=&quot;287&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&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;5. docker 중단&lt;/p&gt;
&lt;pre id=&quot;code_1720596572051&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop webserver(지은 이름)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Docker</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/18</guid>
      <comments>https://qoi11.tistory.com/18#entry18comment</comments>
      <pubDate>Wed, 10 Jul 2024 16:29:43 +0900</pubDate>
    </item>
    <item>
      <title>도커 기본 개념</title>
      <link>https://qoi11.tistory.com/17</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;도커를 왜 공부하나&lt;/h2&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;이식성&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;: 프로그램 설치 환경이 제각각 달라도 쉽게 설치할 수 있다&lt;/blockquote&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;u&gt;프로그램 간의 충돌&lt;/u&gt;이 일어나지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;속도&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 개발 및 배포 속도를 빠르게 할 수 있음(2배)&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;도커란?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;컨테이너&lt;/u&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;를 사용하여 각각의 프로그램을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;분리된 환경&lt;/u&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;에서 실행 및 관리할 수 있는 툴&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;컨테이너란?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미지를 실행시킴. 컴퓨터 내에 있는 소프트웨어와 하드웨어를 갖춘 작은 컴퓨터로 독립적이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;이미지란?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컨테이너를 실행시키기 위한 파일과 설정. 쉽게 설명하면 닌텐도 칩&lt;/p&gt;</description>
      <category>Docker</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/17</guid>
      <comments>https://qoi11.tistory.com/17#entry17comment</comments>
      <pubDate>Tue, 9 Jul 2024 14:29:43 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 페이징처리 구현 연습</title>
      <link>https://qoi11.tistory.com/16</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;data.sql로 대량의 데이터를 만든다음 목록을 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #080808;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;ArticleController.java&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #080808;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;//목록
@GetMapping(&quot;/articles&quot;)
public String index(Model model, @PageableDefault(page = 0, size = 5, sort = &quot;id&quot;, direction = Sort.Direction.DESC)Pageable pageable,
                    String searchKeyword){

    Page&amp;lt;article&amp;gt; list = null;
    list = articleService.articleList(pageable);


    int nowPage = list.getPageable().getPageNumber()+1; // or Pageable.getPageNumber() 현재페이지
    int totalPage = list.getTotalPages(); // 총 페이지
    int pageSize = 10; // 한 페이지에 보여질 페이지 수
    int pageGroupSize = 10; // 한 페이지 그룹에 포함될 페이지 수

    int startPage = ((nowPage-1) / pageSize) * pageSize + 1;
    int endPage = Math.min(startPage + pageGroupSize - 1, totalPage);

    model.addAttribute(&quot;article&quot;,list);
    model.addAttribute(&quot;nowPage&quot;, nowPage);
    model.addAttribute(&quot;startPage&quot;, startPage);
    model.addAttribute(&quot;endPage&quot;, endPage);
    model.addAttribute(&quot;txt&quot;,&quot;변하지 않는 문장&quot;);

    return &quot;article/index3&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;pre id=&quot;code_1712300465785&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ArticleService.java&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: #ffffff; color: #080808;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;@Service
public class ArticleService {

    @Autowired
    private articleRepository articleRepository;

    // 게시글 리스트 처리
    public Page&amp;lt;article&amp;gt; articleList(Pageable pageable) {
        return articleRepository.findAll(pageable);
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;pre id=&quot;code_1712300319619&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;index3.html&lt;/code&gt;&lt;/pre&gt;
&lt;div style=&quot;background-color: #ffffff; color: #080808;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;!-- 검색 --&amp;gt;
&amp;lt;form th:action=&quot;@{/articles}&quot; method=&quot;get&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;searchKeyword&quot;&amp;gt;
    &amp;lt;button type=&quot;submit&quot;&amp;gt;검색&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;

&amp;lt;table&amp;gt;
    &amp;lt;span&amp;gt;&amp;lt;a th:href=&quot;@{/new}&quot;&amp;gt;생성&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;thead&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;th scope=&quot;col&quot;&amp;gt;번호&amp;lt;/th&amp;gt;
        &amp;lt;th scope=&quot;col&quot;&amp;gt;제목&amp;lt;/th&amp;gt;
        &amp;lt;th scope=&quot;col&quot;&amp;gt;조회수&amp;lt;/th&amp;gt;
        &amp;lt;th scope=&quot;col&quot;&amp;gt;삭제&amp;lt;/th&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;/thead&amp;gt;
    &amp;lt;tbody&amp;gt;
    &amp;lt;tr th:each=&quot;a : ${article}&quot;&amp;gt;
        &amp;lt;th th:text=&quot;${a.id}&quot;&amp;gt;&amp;lt;/th&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;a th:href=&quot;@{/article/{id}/detail(id=${a.id})}&quot; th:text=&quot;${a.title}&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td th:text=&quot;${a.getView}&quot;&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;a th:href=&quot;@{/article/{id}/delete(id=${a.id})}&quot;&amp;gt;삭제&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;/tbody&amp;gt;

&amp;lt;/table&amp;gt;

&amp;lt;!-- 이전 링크 활성화 비활성화 --&amp;gt;
&amp;lt;a th:if=&quot;${!article.first}&quot; th:href=&quot;@{/articles(page = ${nowPage -2})}&quot;&amp;gt; 이전 &amp;lt;/a&amp;gt;
&amp;lt;a th:if=&quot;${article.first}&quot; th:href=&quot;@{#}&quot;&amp;gt; 이전 &amp;lt;/a&amp;gt;

&amp;lt;!-- 페이지 처리 --&amp;gt;
&amp;lt;th:block th:each=&quot;page : ${#numbers.sequence(startPage, endPage)}&quot;&amp;gt;
    &amp;lt;a th:if=&quot;${page != nowPage}&quot; th:href=&quot;@{/articles(page =  ${page - 1})}&quot; th:text=&quot;${page}&quot;&amp;gt;&amp;lt;/a&amp;gt;
    &amp;lt;strong th:if=&quot;${page == nowPage}&quot; th:text=&quot;${page}&quot; style=&quot;color: red&quot;&amp;gt;&amp;lt;/strong&amp;gt;
&amp;lt;/th:block&amp;gt;

&amp;lt;!-- 다음 링크 활성화 비활성화 --&amp;gt;
&amp;lt;a th:if=&quot;${!article.last}&quot; th:href=&quot;@{/articles(page = ${nowPage})}&quot;&amp;gt;다음 &amp;lt;/a&amp;gt;
&amp;lt;a th:if=&quot;${article.last}&quot; th:href=&quot;@{#}&quot;&amp;gt; 다음 &amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;url에서 페이지가 0이면 page는 1로 표시된다는걸 알았다.&amp;nbsp; 이걸 고려해서 계산해야 한다&lt;/p&gt;</description>
      <category>스프링/게시판 프로젝트</category>
      <author>까마귀!</author>
      <guid isPermaLink="true">https://qoi11.tistory.com/16</guid>
      <comments>https://qoi11.tistory.com/16#entry16comment</comments>
      <pubDate>Fri, 5 Apr 2024 16:13:21 +0900</pubDate>
    </item>
  </channel>
</rss>