<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Deep Dive</title>
    <link>https://ofglen.tistory.com/</link>
    <description>게시물 티스토리로 이사 중!</description>
    <language>ko</language>
    <pubDate>Sun, 2 Aug 2026 18:32:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Ofglen</managingEditor>
    <item>
      <title>Linux: 리눅스란, 쉘, 프롬포트, 로그인쉘, 터미널, 리눅스 디렉토리 구조</title>
      <link>https://ofglen.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스&amp;nbsp;&lt;/h2&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;커널: OS에서 하드웨어 제어하는 소프트웨어&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;h3 data-ke-size=&quot;size23&quot;&gt;리눅스 종류&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Red Hat: Red Hat Enterprise Linux, CentOs, Fedora&lt;/li&gt;
&lt;li&gt;Debian: Debian GNU/Linux, Ubuntu&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;쉘&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;커널의 인터페이스&lt;/u&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;&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;리눅스 외 OS를 사용할 때 쉘만 이식하면 동일하게 사용 가능&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;쉘 종류&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;sh&lt;/h4&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;bash&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;sh 바탕으로 기능 추가됨&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;h2 data-ke-size=&quot;size26&quot;&gt;프롬포트&lt;/h2&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;&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;일반 사용자: $&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;h3 data-ke-size=&quot;size23&quot;&gt;로그인 쉘&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/bin/bash: 사용자 로그인 후 처음으로 시작되는 쉘 (리눅스 자동 쉘 시작)&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;#!/bin/bash&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#!: 셔뱅(shebang) -&amp;gt; 쉘 지정 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#! &amp;lt;경로&amp;gt; 에 위치한 스크립트 파일 bash로 실행&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;h2 data-ke-size=&quot;size26&quot;&gt;터미널&lt;/h2&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;&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;Windows: PuTTY&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;macOS: terminal&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Linux: GENOME Termonal, Konsole&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;h2 data-ke-size=&quot;size26&quot;&gt;디렉토리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;여러 개의 파일을 담아서 정리하는 것&lt;/u&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리눅스 디렉토리 구조&lt;/h3&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;/bin: Binary. 시스템 관련된 주요 명령어 저장. (mv, cat)&lt;/li&gt;
&lt;li&gt;/dev: 물리적 장치들이 파일화 되어 저장&lt;/li&gt;
&lt;li&gt;/etc: 애플리케이션 환경 설정 파일&lt;/li&gt;
&lt;li&gt;/home: 사용자별 개인용 디렉토리 (사용자 이름이 디렉토리 이름으로 사용)&lt;/li&gt;
&lt;li&gt;/sbin: System-binary. 시스템 관리자용 명령어&amp;nbsp;&lt;/li&gt;
&lt;li&gt;/tmp: 임시 파일. (일반적으로 모든 사용자들에게 열려 있어, 정기적으로 이 디렉토리 안의 파일을 삭제하도록 설정된 배포판도 있으므로 중요한 파일을 /tmp에 보관 지양)&lt;/li&gt;
&lt;li&gt;/usr: 새로 설치한 프로그램 저장. cf. Windows - Program Files 폴더&lt;/li&gt;
&lt;li&gt;/var: 로그, 스풀링 파일(나중 처리) 저장. (메일 서버로 운영하면 메일 저장)&lt;/li&gt;
&lt;li&gt;/boot: 부팅 관련 파일&lt;/li&gt;
&lt;li&gt;/lib: 각종 라이브러리 저장&lt;/li&gt;
&lt;li&gt;/mnt: CD-ROM. 네트워크 파일 시스템 마운트 할 때 사용됨&lt;/li&gt;
&lt;li&gt;/proc: 현재 실행되고 있는 프로세스들을 파일화 되어 저장&lt;/li&gt;
&lt;li&gt;/root: root 계정의 홈 디렉토리&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;</description>
      <category>Computer Science/Computer Science</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/93</guid>
      <comments>https://ofglen.tistory.com/93#entry93comment</comments>
      <pubDate>Mon, 27 Nov 2023 03:00:57 +0900</pubDate>
    </item>
    <item>
      <title>운영체제란? OS 종류, Linux 종류, 커널이란? 프로세스와 쓰레드의 차이점? 쓰레드란?</title>
      <link>https://ofglen.tistory.com/92</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0IhX8/btsASsnu2Xc/GvcUQFlrRBkmkk5e33s3d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0IhX8/btsASsnu2Xc/GvcUQFlrRBkmkk5e33s3d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0IhX8/btsASsnu2Xc/GvcUQFlrRBkmkk5e33s3d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0IhX8%2FbtsASsnu2Xc%2FGvcUQFlrRBkmkk5e33s3d1%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;400&quot; height=&quot;404&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;운영체제&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제(OS, Operating System): 소프트웨어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;사용자에게 인터페이스를 제공하고, 하드웨어 자원을 효율적 관리하는 소프트웨어&lt;/u&gt;&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;&lt;u&gt;컴퓨터 자원 관리와 자원 보호&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 컴퓨터: CPU 등 성능 향상으로 여러 작업을 동시에 처리하는데 이때 응용 프로그램에게 컴퓨터 자원을 할당하고 회수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 하드디스크에 직접 접근해서 데이터 저장을 할 수 없다면 데이터를 덮어 씌워서 데이터를 손실하는 실수 방지 ex. 사용자(손님), 운영체제(웨이터), 하드웨어(레스토랑)&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;하드웨어 인터페이스 제공&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;h3 data-ke-size=&quot;size23&quot;&gt;종류&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MS Window, MS Mac&lt;/li&gt;
&lt;li&gt;android, mac ios&lt;/li&gt;
&lt;li&gt;unix (linux)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;리눅스 종류&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redhat, Debian 계열로 나뉨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot; data-indent-level=&quot;1&quot;&gt;
&lt;li&gt;Redhat : Redhat, CentOS, Oracle, Rocky, Fedora&lt;/li&gt;
&lt;li&gt;Debian : Ubuntu, Mint, Kali&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;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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;커널&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OS의 핵심 구성 요소&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;h3 data-ke-size=&quot;size23&quot;&gt;목적&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt; 응용 프로그램과 하드웨어를 제어. 하드웨어에 자원에 직접 접근해서 자원을 프로그램에 전달하고 프로그램이 작동하도록 관리&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&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;write(): 사용자 명령을 하드웨어에게 전달 write()&lt;/li&gt;
&lt;li&gt;read(): 사용자에게 실행 결과를 보여줌&lt;/li&gt;
&lt;/ul&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;쉘&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정의&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;목적&lt;/h3&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로세스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;실행 중인 프로그램 단위&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영체제: 프로그램(코드) 메모리에 가져옴 -&amp;gt; 프로세스 제어 블록 생성 -&amp;gt; 메모리 확보 -&amp;gt; 프로세스 큐에 삽입 -&amp;gt; CPU 전달 및 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot;&gt;쓰레드&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여러 개의 프로세스를 모아서 CPU에 전달해서 한꺼번에 배치 작업(일괄 작업) 하는 단위&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 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot;&gt;프로세스와 쓰레드 차이점&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot;&gt;프로세스, 스레드가 동작하려면 메모리 동작이 필요하다. 커널이 메모리 상에 확보함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot;&gt;크기: 프로세스 &amp;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;/li&gt;
&lt;li&gt;스레드: 강한 연결, 프로세스 안에 존재. 메모리 공간을 공유 (다른 스레드에 이상이 있으면 영향 받음) &lt;span style=&quot;color: #006dd7;&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot;&gt;프로세서 아키텍처&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;컴퓨터의 중앙 처리 장치인 CPU의 내부 동작과 구조를 정의하는 명세서&lt;/span&gt;&lt;/span&gt;&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;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot;&gt;종류&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x86:&amp;nbsp; Intell이 개발해서 8086 마이크로아키텍처 기반. 개인 컴퓨터와 서버에서 주로 사용. Windows, Linux, MacOS 등 다양한 운영체제에서 지원&lt;/li&gt;
&lt;li&gt;ARM: 저전력 임베디드 시스템과 스마트폰에서 주로 사용. 에너지 효율성이 뛰어나고 다양한 크기와 형태로 제공. 서버와 클라우드 환경에서 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science/Operating System</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/92</guid>
      <comments>https://ofglen.tistory.com/92#entry92comment</comments>
      <pubDate>Mon, 27 Nov 2023 00:30:22 +0900</pubDate>
    </item>
    <item>
      <title>AWS</title>
      <link>https://ofglen.tistory.com/91</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;AWS란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS는 아마존 웹 서비스로 데이터베이스 및 서비스를 오픈 API 형태로 개방한 퍼블릭 클라우드 서비스를 제공한다.&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;h3 data-ke-size=&quot;size23&quot;&gt;AWS의 대표 컴퓨팅 서비스&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2(Elastic Compute Cloud): 아마존의 시스템 자원을 임대해주는 서비스로 다양한 사양의 가상화 서버를 선택하여 사용한 만큼 비용을 지불한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S3(Simple Storage Service): 외장 디스크를 구매하지 않고 인터넷으로 이용할 수 있는 클라우드 상에서 데이터를 저장하고 사용한 만큼 돈을 지불하는 서비스&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;h3 data-ke-size=&quot;size23&quot;&gt;Auto Scaling&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scale-out: 수평으로 가상의 서버가 여러 개로 늘어나는 것&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Amazon Lightsail&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon Workspace: 사내 PC를 통해 가상화로 구성해서 클라우드 업무환경을 구축한다.&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;h4 data-ke-size=&quot;size20&quot;&gt;네트워킹 서비스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon Route 53: DNS 서비스. 도메인을 구입하고 서버와 연결해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon VPC: 회사 보안 정책 상 기본 보안 네트워크가 아니라 별도의 사설망을 사용해야 할 때 VPC를 만들어서 생성한다. (예: 외부 접근을 제어해야 하는 DB를 VPC를 설정한다.) 인터넷 게이트웨이를 사용하여 연결한다.&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;Amazon Direct Connect: 기존 온프레미스 인프라와 AWS를 연결해서 낮은 지연으로 데이터를 공유한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon ELB(Elastic Load Balancer): L4 Load Balancer 역할을 한다.&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;h4 data-ke-size=&quot;size20&quot;&gt;스토리지 서비스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon S3: 사용자가 접근하는 빈도에 따라서 용량과 가격이 달라진다. (범용성) 객체 스토리지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon S3 Glacier&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon EBS: 블록 스토리지로 일정한&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon Storage Gateway&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon Snowball&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;</description>
      <category>Cloud/AWS</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/91</guid>
      <comments>https://ofglen.tistory.com/91#entry91comment</comments>
      <pubDate>Tue, 18 Jul 2023 13:28:06 +0900</pubDate>
    </item>
    <item>
      <title>0. 프로젝트 초기 설정 : 컨벤션 규칙 지키기</title>
      <link>https://ofglen.tistory.com/90</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;코딩 컨벤션&lt;/h3&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Checkstyle&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;Java 언어를 사용하여 웹 프로젝트를 개발하기 위해 초기 설정으로 구글 코딩 컨벤션을 Code Style Formatter로 설정하고 Checkstyle을 적용하는 과정을 정리했다.&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;p style=&quot;color: #333333; text-align: start;&quot; 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 contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 네이버 컨벤션 다운받기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 깃허브 주소에서 naver-intellij-formatter.xml 파일을 다운 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-intellij-formatter.xml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-intellij-formatter.xml&lt;/a&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;Settings &amp;gt; Code Style - Schema 설정 &amp;gt; Import Schema &amp;gt; IntelliJ IDEA code Style XML을 선택하고, C 드라이브 아래에 다운 받은 naver&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-intellij-formatter.xml&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;파일을 선택하여 지정한다.&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-origin-width=&quot;1128&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blqZkV/btsnLbxvsPn/L8akrMdBVPwWRi6ngnWYdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blqZkV/btsnLbxvsPn/L8akrMdBVPwWRi6ngnWYdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blqZkV/btsnLbxvsPn/L8akrMdBVPwWRi6ngnWYdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblqZkV%2FbtsnLbxvsPn%2FL8akrMdBVPwWRi6ngnWYdK%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;1128&quot; height=&quot;893&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;893&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;&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;2. Java Tabs and Indents 설정&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;Settings &amp;gt; Code Style &amp;gt; Java&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Google&amp;nbsp;Style은&amp;nbsp;Tab&amp;nbsp;size,&amp;nbsp;Indent&amp;nbsp;=&amp;nbsp;2로&amp;nbsp;설정되어&amp;nbsp;있으므로&amp;nbsp;4로&amp;nbsp;수정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 네이버 컨벤션 규칙을 사용해서 다시 2, 2, 4로 변경했다.&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-origin-width=&quot;1128&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sy1NP/btsnOgedgWt/ekCAJgShem2KUhEbZtwyK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sy1NP/btsnOgedgWt/ekCAJgShem2KUhEbZtwyK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sy1NP/btsnOgedgWt/ekCAJgShem2KUhEbZtwyK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsy1NP%2FbtsnOgedgWt%2FekCAJgShem2KUhEbZtwyK1%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;1128&quot; height=&quot;893&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;893&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;3. Checkstyle 적용하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;naver-checkstyle-rules.xml과 naver-checkstyle-suppressions.xml를 다운로드 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-checkstyle-rules.xml&quot;&gt;https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-checkstyle-rules.xml&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-checkstyle-suppressions.xml&quot;&gt;https://github.com/naver/hackday-conventions-java/blob/master/rule-config/naver-checkstyle-suppressions.xml&lt;/a&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;Settings &amp;gt; Plugins &amp;gt; CHECKStyle을 검색하고 설치 후 IntelliJ를 재부팅한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd1sjr/btsnFaUeun6/YuMtO1jXadFG0r8X2hbKzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd1sjr/btsnFaUeun6/YuMtO1jXadFG0r8X2hbKzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd1sjr/btsnFaUeun6/YuMtO1jXadFG0r8X2hbKzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd1sjr%2FbtsnFaUeun6%2FYuMtO1jXadFG0r8X2hbKzK%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;1128&quot; height=&quot;893&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;893&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 Tools &amp;gt; Checkstyle&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scan Scope: All sources (including&amp;nbsp; tests)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Treat Checkstyle errors as warnings 체크박스를 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Description: Naver Checkstype Rules로 지정한다. (권장)&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-origin-width=&quot;1128&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eMyXmn/btsnF7WWniT/6e1ofbzFYjUlpDWjegu52k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eMyXmn/btsnF7WWniT/6e1ofbzFYjUlpDWjegu52k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eMyXmn/btsnF7WWniT/6e1ofbzFYjUlpDWjegu52k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeMyXmn%2FbtsnF7WWniT%2F6e1ofbzFYjUlpDWjegu52k%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;1128&quot; height=&quot;893&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;893&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Use a Local checkstyle File &amp;gt; Browse &amp;gt; naver-checkstyle-rules.xml 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQjVfn/btsnLbRNMw0/D2FPfkhtdtwzF5BcoSxaOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQjVfn/btsnLbRNMw0/D2FPfkhtdtwzF5BcoSxaOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQjVfn/btsnLbRNMw0/D2FPfkhtdtwzF5BcoSxaOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQjVfn%2FbtsnLbRNMw0%2FD2FPfkhtdtwzF5BcoSxaOK%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;553&quot; height=&quot;572&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;572&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;suppressionFile 프로퍼티 값으로 naver-checkstyle-suppressions.xml을 입력한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdVpFx/btsnEkC15s5/o6vyIx5SlKAMcmtF5ONe7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdVpFx/btsnEkC15s5/o6vyIx5SlKAMcmtF5ONe7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdVpFx/btsnEkC15s5/o6vyIx5SlKAMcmtF5ONe7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdVpFx%2FbtsnEkC15s5%2Fo6vyIx5SlKAMcmtF5ONe7k%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;553&quot; height=&quot;572&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;572&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;&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;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;4. 저장 시 코딩 컨벤션 자동 적용 설정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정창에서 save를 검색한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Actions on Save &amp;gt; Reformat code, Optimize import 체크박스를 선택한다.&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-origin-width=&quot;1128&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nKJXw/btsnHRziQdt/QJ1SJ39SDWJc1sFuKLmHI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nKJXw/btsnHRziQdt/QJ1SJ39SDWJc1sFuKLmHI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nKJXw/btsnHRziQdt/QJ1SJ39SDWJc1sFuKLmHI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnKJXw%2FbtsnHRziQdt%2FQJ1SJ39SDWJc1sFuKLmHI0%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;1128&quot; height=&quot;893&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;893&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;&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>프로젝트</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/90</guid>
      <comments>https://ofglen.tistory.com/90#entry90comment</comments>
      <pubDate>Sun, 16 Jul 2023 18:42:07 +0900</pubDate>
    </item>
    <item>
      <title>네트워크 토폴리지와 네트워크의 분류</title>
      <link>https://ofglen.tistory.com/88</link>
      <description>&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;네트워크: 노드(node)와 링크(link)가 서로 연결되어 있는 집합체
&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;/li&gt;
&lt;li&gt;처리량: 링크를 통해 전달되는 단위 시간당 데이터양을 말한다. 단위는 bps(bits per second)를 사용한다. (초당 수신되는 비트 수라는 의미이다)&lt;/li&gt;
&lt;li&gt;지연시간: 요청이 처리되는 시간을 말하며 메시지가 두 장치 사이를 왕복하는 데 걸린 시간이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;대역폭&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;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 토폴리지(Network Topology): 상호 간에 정보를 교환할 수 있도록 하는 노드와 링크들의 배치 형태를 말한다.
&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;버스 토폴로지: 중앙 통신 회선 하나에 여러 개의 노드가 연결되어 공유하는 네트워크 구성을 말하며 근거리 통신망(LAN)에서 사용한다.&lt;/li&gt;
&lt;li&gt;스타 토폴로지: 중앙에 있는 노드에 모두 연결된 네트워크 구성을 말한다.&lt;/li&gt;
&lt;li&gt;링형 토폴로지: 각각의 노드가 양 옆의 두 노드와 연결하여 고리처럼 연속되게 통신을 하는 망 구성 방식이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메시 토폴로지:&lt;/b&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;병목현상이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;병목현상(bottleneck)&lt;/span&gt;:&lt;/b&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;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크의 분류는 규모와 호스트 사이의 연결 거리를 기준으로 LAN, MAN, WAN으로 분류한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LAN(Local Area Network): 근거리 통신망을 의미하며 전송 속도가 빠르고 혼잡하지 않다.&lt;/li&gt;
&lt;li&gt;MAN(Metropolitan Area Network): 대도시 지역 네트워크를 연결한다.&lt;/li&gt;
&lt;li&gt;WAN(Wide Area Network): 광역 네트워크를 의미하며 국가 이상의 넓은 영역을 연결하며 전송 속도가 낮고 혼잡하다.&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;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>Computer Science/Network</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/88</guid>
      <comments>https://ofglen.tistory.com/88#entry88comment</comments>
      <pubDate>Fri, 14 Jul 2023 11:48:08 +0900</pubDate>
    </item>
    <item>
      <title>  디자인 패턴 : 싱글톤 패턴, 팩토리 패턴, 어댑터 패턴, MVC 패턴</title>
      <link>https://ofglen.tistory.com/87</link>
      <description>&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;/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;h3 data-ke-size=&quot;size23&quot;&gt;싱글톤 패턴&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;싱글톤 패턴: 하나의 클래스의 오직 하나의 인스턴스만 가지는 패턴이다. 데이터베이스 연결 모듈에 많이 사용한다. 이를 통해 DB 연결에 대한 인스턴스 생성 비용을 절감할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단점: TDD
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TDD를 할 때 단위 테스트를 수행하는데, 단위 테스트는 테스트가 서로 독립적이어야 하고 테스트를 어떤 순서로든 실행할 수 있어야 한다. 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 독립적인 인스턴스를 만들기 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;유의: 싱글톤 패턴은 모듈 간의 결합을 강하게 만든다. 의존성 주입을 통해 모듈 간의 결합을 느슨하게 만들어서 해결한다. (decoupling)&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;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;h3 data-ke-size=&quot;size23&quot;&gt;팩토리 패턴&lt;/h3&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;객체 생성 로직이 분리되어 있기 때문에 코드 리팩토링 시 한 곳만 고치면 되므로 유지 보수성이 증가한다.&lt;/li&gt;
&lt;/ul&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;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;h3 data-ke-size=&quot;size23&quot;&gt;어댑터 패턴&lt;/h3&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MVC 패턴&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zUtja/btsnvFAaQIU/uBcQAacd9PNnisXjU4qdck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zUtja/btsnvFAaQIU/uBcQAacd9PNnisXjU4qdck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zUtja/btsnvFAaQIU/uBcQAacd9PNnisXjU4qdck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzUtja%2FbtsnvFAaQIU%2FuBcQAacd9PNnisXjU4qdck%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;856&quot; height=&quot;414&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;414&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;MVC 패턴: Model, View, Controller로 이루어진 디자인 패턴이다. 애플리케이션의 구성 요소를 세 가지 역할로 구분해서 개발 프로세서 각각의 구성 요소에만 집중해서 개발할 수 있다.
&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;/li&gt;
&lt;li&gt;&lt;b&gt;Model:&lt;/b&gt; 애플리케이션의 데이터이터인 데이터베이스와 자원을 다루는 클래스다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;View:&lt;/b&gt; 사용자가 볼 수 있는 화면이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Controller&lt;/b&gt;: Models와 Views를 이어주는 다리 역할을 하며 메인 로직을 담당한다. Models이나 Views의 response를 받으면 각각의 구성 요소에 전달한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;View에서 데이터를 생성 또는 수정하면 Controller를 통해 Model을 생성하거나 갱신한다.&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;&lt;span style=&quot;background-color: #dddddd;&quot;&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;background-color: #dddddd;&quot;&gt;라이브러리&lt;/span&gt;: &lt;b&gt;소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 자원의 모임.&lt;/b&gt; 즉 특정 기능을 가진 코드, 함수들의 집합이다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd;&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;
&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;h2 data-ke-size=&quot;size26&quot;&gt;참조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;면접을 위한 CS 전공지식 노트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cocoon1787.tistory.com/745&quot;&gt;[개발상식] 프레임워크(Framework) 와 라이브러리(Library)의 차이&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://readystory.tistory.com/114&quot;&gt;디자인 패턴(Design Pattern)이란?&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS6705039023&quot;&gt;[Design pattern] 디자인 패턴의 정의와 장점&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jusungpark.tistory.com/14&quot;&gt;디자인패턴 - 팩토리 패턴 (factory pattern)&lt;/a&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Science</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/87</guid>
      <comments>https://ofglen.tistory.com/87#entry87comment</comments>
      <pubDate>Fri, 14 Jul 2023 11:45:48 +0900</pubDate>
    </item>
    <item>
      <title>쿠버네티스 객체의 종류 : deployment, service, configmap, secret, replicaset</title>
      <link>https://ofglen.tistory.com/86</link>
      <description>&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Deployment (배포): 여러 개의 Pod를 생성하고 관리하는 객체, 애플리케이션의 스케일링과 롤링 업데이트들을 관리한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Service (서비스): 네트워크 경로를 Pod 집합에 노출시키는 추상화 객체로, 여러 Pod에 대한 로드 밸런싱과 서비스 디스커버리를 제공한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;yamlCopy code
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80 # 포트 설정
      targetPort: 80
&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;3. ConfigMap (구성 맵): 애플리케이션에 필요한 구성 데이터를 저장하는 객체로, 환경 변수, 설정 파일 등을 관리한다. YAML 파일에 키-값 쌍으로 구성 데이터를 정의한다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  database_url: &quot;localhost:5432&quot;
  api_key: &quot;my-api-key&quot;
&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;4. Secret (비밀 정보): 애플리케이션에서 사용되는 민감한 정보(예: 비밀번호, 토큰)를 안전하게 저장하는 객체로, 데이터를 Base64로 인코딩하여 저장한다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: dXNlcm5hbWUx
  password: cGFzc3dvcmQx
&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;p data-ke-size=&quot;size16&quot;&gt;5. ReplicaSet: Pod의 복제본 수를 유지하고 관리하는 객체&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
&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>DevOps/Kubernetes</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/86</guid>
      <comments>https://ofglen.tistory.com/86#entry86comment</comments>
      <pubDate>Fri, 14 Jul 2023 11:34:13 +0900</pubDate>
    </item>
    <item>
      <title>파드(Pod)와 YAML 파일</title>
      <link>https://ofglen.tistory.com/85</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Pod란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pod: Kubernetes 모델의 기본 구성요소로, 배포 가능한 가장 작은 Kubernetes 객체다. 가장 작은 Kubernetes 객체는 컨테이너라고 생각하셨던 분들 말이죠. 하지만 그렇지 않다.&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;h3 data-ke-size=&quot;size23&quot;&gt;.YAML 파일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kubernetes Pod 객체를 생성하기 위한 YAML 구성 파일로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pod: Kubernetes 생태계에서 가장 작고 가장 간단한 단위로, 클러스터에서 실행 중인 단일 프로세스 인스턴스다.&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 class=&quot;dts&quot;&gt;&lt;code&gt;apiVersion: v1
**kind: Pod** **# 고유한 객체 이름**
**metadata**: **# Pod 속성 정의**
  **name:** nginx 
	uid: 4dd474fn-f389-11f8-b38c-42010a8009z7 # 객체 고유식별자 할당
  labels:
    app: nginx 
spec:
  containers:
    - name: nginx
      image: nginx:latest # 최신 버전의 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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;apiVersion:&lt;/b&gt; : 사용 중인 Kubernetes API의 버전을 지정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;kind:&lt;/b&gt;: 객체를 정의&lt;/li&gt;
&lt;li&gt;&lt;b&gt;metadata&lt;/b&gt;: Pod에 대한 메타데이터 정보를 포함한다. Ex) Pod의 이름 및 레이블
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;name: n&lt;/b&gt;: Pod의 이름을 지정&lt;/li&gt;
&lt;li&gt;uid: unix unique id라고 하며, 클러스터 라이프 사이클에 생성된 모든 객체는 쿠버네티스에서 자동으로 생성되는 고유한 UID를 가지고 객체를 식별하는 데 사용한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;labels&lt;/b&gt;: Pod에 레이블(키-값 쌍)을 첨부하여 그룹화하고 필터링하는 데 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;app: nginx&lt;/b&gt;: 키가 &quot;app&quot;이고 값이 &quot;nginx&quot;인 레이블을 Pod에 할당. 이 레이블은 나중에 Pod를 선택하거나 필터링하는 데 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;spec&lt;/b&gt;: Pod의 원하는 상태를 정의
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;containers&lt;/b&gt;: Pod 내에서 실행되는 컨테이너 객체의 배열
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;name: nginx&lt;/b&gt;: 컨테이너의 이름을 지정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;image: nginx:latest&lt;/b&gt;: 실행할 컨테이너 이미지를 지정. 이 경우, &quot;latest&quot; 태그가 있는 &quot;nginx&quot; 이미지를 사용합니다. 이미지는 컨테이너 레지스트리(예: Docker Hub)에서 가져온 것이며 Nginx 웹 서버를 실행하기 위한 필요한 파일과 구성이 포함된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구성 파일을 사용하여 Kubernetes 클러스터에 kubectl apply 명령을 사용하여 Pod를 배포할 수 있습니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;YAML 파일의 버전 제어 사용&lt;/h3&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-origin-width=&quot;658&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ern9JW/btsnzF6qd5A/VTl1c5pCXpPXr0IjJuGZMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ern9JW/btsnzF6qd5A/VTl1c5pCXpPXr0IjJuGZMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ern9JW/btsnzF6qd5A/VTl1c5pCXpPXr0IjJuGZMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fern9JW%2FbtsnzF6qd5A%2FVTl1c5pCXpPXr0IjJuGZMk%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;658&quot; height=&quot;249&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fbf3db;&quot; data-token-index=&quot;0&quot;&gt;YAML&lt;/span&gt;&lt;span style=&quot;background-color: #fbf3db;&quot; data-token-index=&quot;1&quot;&gt; 파일 &lt;/span&gt;&lt;span style=&quot;background-color: #fbf3db;&quot; data-token-index=&quot;2&quot;&gt;버전 관리&lt;/span&gt;&lt;span style=&quot;background-color: #fbf3db;&quot; data-token-index=&quot;3&quot;&gt; 하는 이유&lt;/span&gt;: 변경 이력을 &lt;span data-token-index=&quot;5&quot;&gt;추적&lt;/span&gt;하고 이슈 발생 시 &lt;span data-token-index=&quot;7&quot;&gt;롤백&lt;/span&gt; 및 &lt;span data-token-index=&quot;9&quot;&gt;복구&lt;/span&gt;를 하기 위해 Git에 버전 관리한다.&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;h3 data-ke-size=&quot;size23&quot;&gt;UUID 생성하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체를 식별하기 위해서 클라우드 상에서 UUID를 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsm15p/btsnwlH3Xjh/l2nE1wu0TGm7MUWAkVMe9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsm15p/btsnwlH3Xjh/l2nE1wu0TGm7MUWAkVMe9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsm15p/btsnwlH3Xjh/l2nE1wu0TGm7MUWAkVMe9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsm15p%2FbtsnwlH3Xjh%2Fl2nE1wu0TGm7MUWAkVMe9k%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;622&quot; height=&quot;143&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;143&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;&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;</description>
      <category>DevOps/Kubernetes</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/85</guid>
      <comments>https://ofglen.tistory.com/85#entry85comment</comments>
      <pubDate>Fri, 14 Jul 2023 11:32:40 +0900</pubDate>
    </item>
    <item>
      <title>[Git] Branch : Git으로 협업하기, Git 커밋 관리, Git Bash 명령어 정리</title>
      <link>https://ofglen.tistory.com/84</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Branch: Git으로 협업하기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Branch: 시간순으로 최신 커밋을 &amp;lsquo;master&amp;rsquo; 브런치가 가리킨다. master 브랜치를 기준으로 새 브랜치를 생성한다.&lt;/li&gt;
&lt;li&gt;HEAD: 과거/최신 브랜치(커밋)를 넘나들 수 있다&lt;/li&gt;
&lt;li&gt;merge: [master] 브랜치에 n개의 버전의 합집합을 구하는 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Merge Commit(병합 커밋): 새로운 커밋&lt;/li&gt;
&lt;li&gt;Fast-forward(빨리 감기): 기존 커밋과 같아서 이동만 하면 되어서 빨리 감기라고 한다&lt;/li&gt;
&lt;li&gt;Conflict(충돌): 충돌이 난 부분을 확인하고 무엇을 남길지 수동으로 선택&lt;/li&gt;
&lt;li&gt;Pull Request: 협력자에게 병합 요청 메시지를 보내는 것&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;의의&lt;/td&gt;
&lt;td&gt;장점&lt;/td&gt;
&lt;td&gt;단점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;branch&lt;/td&gt;
&lt;td&gt;하나의 원본저장소에서 분기를 나눈다&lt;/td&gt;
&lt;td&gt;하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다&lt;/td&gt;
&lt;td&gt;다수의 브랜치를 만들면 관리하기 어렵다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fork&lt;/td&gt;
&lt;td&gt;여러 원격저장소를 만들어서 분기를 나눈다&lt;/td&gt;
&lt;td&gt;원본저장소에 영향을 미치지 않고 마음껏 코드를 수정할 수 있다&lt;/td&gt;
&lt;td&gt;원본저장소의 이력을 보려면 따로 주소를 추가해야한다&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h2 data-ke-size=&quot;size26&quot;&gt;Git Bash&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Git 커밋 관리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;fork: 남의 원본저장소를 복사해서 내 계정의의 GitHub에 원격저장소로 복사해 오는 명령어&lt;/li&gt;
&lt;li&gt;clone: 원격저장소를 소스트리를 통해 로컬저장소로 가져온다&lt;/li&gt;
&lt;li&gt;pull request: 원격저장소에서 원본 저장소로 풀 리퀘스트를 보낸다&lt;/li&gt;
&lt;li&gt;merge: 풀 리퀘스트를 승인하고 병합한다&lt;/li&gt;
&lt;li&gt;rebase: 묵은 커밋을 새 커밋으로 이력을 조작한다&lt;/li&gt;
&lt;li&gt;amend: 마지막 커밋 수정하기&lt;/li&gt;
&lt;li&gt;cherry-pick: 원하는 커밋만 떼서 현재 브랜치에 붙인다&lt;/li&gt;
&lt;li&gt;reset: 옛날 커밋으로 브랜치를 되돌린다&lt;/li&gt;
&lt;li&gt;revert: 커밋의 변경사항을 명시적으로 되돌린다&lt;/li&gt;
&lt;li&gt;stash: 변경사항을 잠시 따로 저장한다&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;h3 data-ke-size=&quot;size23&quot;&gt;Git Bash 명령어 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;pwd: 현재 폴더 위치 확인&lt;/li&gt;
&lt;li&gt;ls -a : 현재 폴더 파일 목록 확인 (-a 옵션: 숨김 파일도 리스트업)&lt;/li&gt;
&lt;li&gt;cd: 홈(root) 폴더로 이동. 홈 폴더는 ㅅ용자 이름과 폴더명이 같고 내 문서 폴더의 상위 폴더&lt;/li&gt;
&lt;li&gt;cd &amp;lt;폴더 이름&amp;gt;: 특정 위치의 디렉토리로 이동&lt;/li&gt;
&lt;li&gt;cd ../ : 현재 폴더의 상위 폴더로 이동&lt;/li&gt;
&lt;li&gt;mkdir &amp;lt;새폴더이동&amp;gt;: 현재 폴더 아래에 새로운 폴더 생성&lt;/li&gt;
&lt;li&gt;echo &amp;ldquo;Hello Git&amp;rdquo;: 메아리라는 뜻. 화면에 &amp;ldquo;&amp;rdquo; 안의 문자열을 표시한다&lt;/li&gt;
&lt;li&gt;git status: Git 워킹트리의 상태를 보는 ㅁ여령어&lt;/li&gt;
&lt;li&gt;git config: git 옵션 설정을 보거나 값을 변경할 수 있다&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Git 저장소 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;clean&quot;&gt;&lt;code&gt;$ git init # Git 저장소 생성
ls -a # 파일 목록 확인 -&amp;gt; [.git] 숨김 폴더
git status # 워킹 트리 상태 확인
&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;h2 data-ke-size=&quot;size26&quot;&gt;Git 용어 정리&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;워킹 트리(=워킹 디렉토리=작업 디렉터리 = 작업 폴더): 사용자가 작업 결과물을 저장하는 곳. 작업폴더에서 [.git] 로컬 저장소를 뺀 나머지 부분을 워킹트리라고 한다.&lt;/li&gt;
&lt;li&gt;로컬 저장소:&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; git init&lt;/span&gt;&lt;/b&gt; 명령어로 생성되는 [.git] 폴더&lt;/li&gt;
&lt;li&gt;원격 저장소: 로컬 저장소를 업로드하는 곳 (GitHub Repository)&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;join은 동일 회원 아이디로 가입 보냈을 때 에러 뜨고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;login은 응답코드, 토큰 발급 뜨고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;post는 전송 했을 때 body가 그냥 빈 공백이에요&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;</description>
      <category>Git</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/84</guid>
      <comments>https://ofglen.tistory.com/84#entry84comment</comments>
      <pubDate>Fri, 14 Jul 2023 11:20:10 +0900</pubDate>
    </item>
    <item>
      <title>docker ps, iconfig</title>
      <link>https://ofglen.tistory.com/83</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;docker ps&lt;/h3&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;&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;docker ps 명령어 출력 목록&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CONTAKINER ID: 컨테이너에게 자동으로 할당되는 고유 ID&lt;/li&gt;
&lt;li&gt;IMAGE: 컨테이너를 생성할 때 사용된 이미지&lt;/li&gt;
&lt;li&gt;COMMAND: 컨테이너가 시작될 때 실행될 명령어&lt;/li&gt;
&lt;li&gt;CREATED: 컨테이너가 생성되고 난 뒤 흐른 시간&lt;/li&gt;
&lt;li&gt;STATUS: 컨테이너의 상태. 컨테이너가 실행 중이면 &amp;lsquo;Up&amp;rsquo;, 종료된 상태이면 &amp;lsquo;Exit&amp;rsquo;, 일시 중지된 상태이면 &amp;lsquo;Pause&amp;rsquo;로 표시한다.&lt;/li&gt;
&lt;li&gt;PORTS: 컨테이너가 개방한 포트와 호스트에 연결한 포트를 나열한다&lt;/li&gt;
&lt;li&gt;NAMES: 컨테이너의 고유한 이름. 컨테이너를 생성할 때 &amp;mdash;name 옵션으로 이름을 설정하지 않으면 도커 엔진이 임의로 형용사와 명사를 무작위로 조합해서 이름을 설정한다. docker rename &amp;lt;현재 이름&amp;gt; &amp;lt;변경할 이름&amp;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;h3 data-ke-size=&quot;size23&quot;&gt;iconfig&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너의 네트워크 인터페이스 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무런 설정을 하지 않았다면 컨테이너는 외부에서 접근할 수 없으며 도커가 설치된 호스트에서만 접근할 수 있다. 외부에 컨테이너의 애플리케이션을 노출하기 위해서는 eth0와 IP와 포트를 호스트의 IP에 바인딩해야 한다.&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 class=&quot;angelscript&quot;&gt;&lt;code&gt;컨테이너에 아파치 웹 서버 웹 서버를 설치해서 외부에 노출

run -p [호스트의 포트]:[컨테이너의 포트]
run -p 7777:80 &amp;lt;- 호스트의 7777 포트를 컨테이너의 80포트에 연결

# 호스트의 IP와 포트를 컨테이너의 IP와 포트로 연결
docker run -it --name mywebserver -p 80:80 ubuntu:14.04
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 호스트와 바인딩된 포트만 확인
docker port &amp;lt;컨테이너 이름&amp;gt;
&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;h3 data-ke-size=&quot;size23&quot;&gt;-e : 컨테이너 내부 환경변수 설정&lt;/h3&gt;
&lt;pre class=&quot;haml&quot;&gt;&lt;code&gt;-e MYSQL_root_PASSWORD=password

# 환경변수 확인
echo

--link: 내부 IP를 알 필요 없이 학상 컨테이너에 별명(alias)로 접근하도록 설정한다.
--link workpressdb: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;&amp;nbsp;&lt;/p&gt;</description>
      <category>DevOps/Docker</category>
      <author>Ofglen</author>
      <guid isPermaLink="true">https://ofglen.tistory.com/83</guid>
      <comments>https://ofglen.tistory.com/83#entry83comment</comments>
      <pubDate>Fri, 14 Jul 2023 11:13:51 +0900</pubDate>
    </item>
  </channel>
</rss>