<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코딩 알고리즘</title>
    <link>https://code-algo.tistory.com/</link>
    <description>프로그래밍에 관련된 모든 것</description>
    <language>ko</language>
    <pubDate>Mon, 24 Aug 2026 22:31:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Psalm 23</managingEditor>
    <image>
      <title>코딩 알고리즘</title>
      <url>https://tistory1.daumcdn.net/tistory/4757570/attach/701bfa5db6ce4ed7ad4e1303260adcb5</url>
      <link>https://code-algo.tistory.com</link>
    </image>
    <item>
      <title>[Flutter] 자주쓰는 위젯 정리</title>
      <link>https://code-algo.tistory.com/192</link>
      <description>&lt;h2 class=&quot;code-line&quot; data-line-start=&quot;0&quot; data-line-end=&quot;1&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a id=&quot;1__UI_____0&quot;&gt;&lt;/a&gt;1.&amp;nbsp; UI 골격 및 레이아웃 구성&lt;/h2&gt;
&lt;table class=&quot;table table-striped table-bordered&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;번호&lt;/th&gt;
&lt;th&gt;위젯 이름&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Container&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;스타일, 여백, 색상, 크기 등 거의 다 되는 만능 박스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Padding&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;여백 추가용 래퍼 위젯&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Column&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;VStack (수직 정렬)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Row&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HStack (수평 정렬)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SizedBox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;고정 크기 or Spacer 용도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expanded&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;남는 공간 채우기용 (&lt;code&gt;flex&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Flexible&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Expanded&lt;/code&gt;보다 유연한 버전&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Align&lt;/code&gt; / &lt;code&gt;Center&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;위치 정렬 용도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Stack&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ZStack (위젯 겹치기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SafeArea&lt;/code&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;pre class=&quot;less&quot;&gt;&lt;code&gt;// 수직 정렬 (VStack)
Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    Text('Hello'),
    SizedBox(height: 16),
    Text('World'),
  ],
)

// 수평 정렬 (HStack)
Row(
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: [
    Icon(Icons.menu),
    Icon(Icons.search),
  ],
)

// Stack (ZStack)
Stack(
  children: [
    Container(color: Colors.blue),
    Positioned(
      top: 20,
      left: 20,
      child: Text('위에 겹쳐지는 요소'),
    ),
  ],
)

// 패딩
Padding(
  padding: const EdgeInsets.all(16.0),
  child: Text('Padding 적용됨'),
)

// 여백 / Spacer
SizedBox(height: 20),

&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;Container(
  padding: const EdgeInsets.all(12),
  margin: const EdgeInsets.symmetric(horizontal: 16),
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(16),
    border: Border.all(color: Colors.grey[300]!),
  ),
  child: Text('박스 안에 텍스트'),
)

// 정렬
Align(
  alignment: Alignment.centerRight,
  child: Text('오른쪽 정렬'),
)

&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;// SafeArea: 노치, 상태바 피하기
SafeArea(
  child: Text('안전한 영역'),
)

// MediaQuery: 디바이스 크기 사용
double width = MediaQuery.of(context).size.width;

// LayoutBuilder: 반응형 조건 분기
LayoutBuilder(
  builder: (context, constraints) {
    if (constraints.maxWidth &amp;lt; 600) {
      return Text('모바일 UI');
    } else {
      return Text('태블릿/웹 UI');
    }
  },
)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 class=&quot;code-line&quot; data-line-start=&quot;99&quot; data-line-end=&quot;100&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 class=&quot;code-line&quot; data-line-start=&quot;99&quot; data-line-end=&quot;100&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a id=&quot;_____UI___99&quot;&gt;&lt;/a&gt;2. 텍스트, 입력, 버튼 등 UI 구성 요소&lt;/h2&gt;
&lt;table class=&quot;table table-striped table-bordered&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;번호&lt;/th&gt;
&lt;th&gt;위젯 이름&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Text&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;텍스트 출력의 기본&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TextField&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;사용자 입력 받기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ElevatedButton&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;기본 버튼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TextButton&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;플랫한 텍스트 버튼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OutlinedButton&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;테두리 있는 버튼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Icon&lt;/code&gt; / &lt;code&gt;IconButton&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;아이콘, 아이콘 버튼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Image.asset&lt;/code&gt; / &lt;code&gt;Image.network&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이미지 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ListView&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;스크롤 가능한 리스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ListTile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;리스트 항목 구성용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Form&lt;/code&gt; / &lt;code&gt;FormField&lt;/code&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;pre class=&quot;less&quot;&gt;&lt;code&gt;TextField(
  controller: myController,
  decoration: InputDecoration(
    hintText: '입력하세요',
    border: OutlineInputBorder(),
  ),
)

ElevatedButton(
  onPressed: () =&amp;gt; print('클릭됨'),
  child: Text('버튼'),
)

TextButton(
  onPressed: () {},
  child: Text('텍스트 버튼'),
)

IconButton(
  icon: Icon(Icons.favorite),
  onPressed: () {},
)

&lt;/code&gt;&lt;/pre&gt;
&lt;h2 class=&quot;code-line&quot; data-line-start=&quot;140&quot; data-line-end=&quot;141&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 class=&quot;code-line&quot; data-line-start=&quot;140&quot; data-line-end=&quot;141&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a id=&quot;3______140&quot;&gt;&lt;/a&gt;3.&amp;nbsp; 스크롤, 반응형 레이아웃 제어&lt;/h2&gt;
&lt;table class=&quot;table table-striped table-bordered&quot; style=&quot;height: 220px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;th style=&quot;height: 20px;&quot;&gt;번호&lt;/th&gt;
&lt;th style=&quot;height: 20px;&quot;&gt;위젯 이름&lt;/th&gt;
&lt;th style=&quot;height: 20px;&quot;&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;21&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;SingleChildScrollView&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Column 등 스크롤 가능하게 감싸기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;22&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;ScrollController&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;스크롤 위치 제어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;23&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;MediaQuery&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;디바이스 화면 정보 가져오기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;24&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;LayoutBuilder&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;부모 사이즈에 따른 조건부 UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;25&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;Wrap&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;자동 줄바꿈 가능한 Row&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;26&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;Visibility&lt;/code&gt; / &lt;code&gt;Offstage&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;조건부 렌더링/숨김 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;27&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;AnimatedContainer&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;부드러운 레이아웃 변화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;28&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;GestureDetector&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;클릭/스와이프 등 사용자 제스처 감지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;29&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;Navigator&lt;/code&gt; / &lt;code&gt;MaterialPageRoute&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;페이지 이동, 라우팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;30&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;code&gt;Scaffold&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;앱 기본 구조 (AppBar, body, FAB 등)&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;pre class=&quot;less&quot;&gt;&lt;code&gt;// 수직 스크롤 리스트
ListView(
  children: [
    ListTile(title: Text('항목 1')),
    ListTile(title: Text('항목 2')),
  ],
)

// 빌더 방식
ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) {
    return ListTile(
      title: Text(items[index]),
    );
  },
)

// SingleChildScrollView
SingleChildScrollView(
  child: Column(
    children: [ ... ],
  ),
)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;// Navigator: 페이지 이동
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) =&amp;gt; const DetailPage()),
);

// 상태변경
setState(() {
  count++;
});
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;lisp&quot;&gt;&lt;code&gt;Scaffold(
  appBar: AppBar(title: Text('My App')),
  body: Center(child: Text('내용')),
  floatingActionButton: FloatingActionButton(
    onPressed: () {},
    child: Icon(Icons.add),
  ),
)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 class=&quot;code-line&quot; data-line-start=&quot;205&quot; data-line-end=&quot;206&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 class=&quot;code-line&quot; data-line-start=&quot;205&quot; data-line-end=&quot;206&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a id=&quot;4_____205&quot;&gt;&lt;/a&gt;4.&amp;nbsp; 상태/비동기/애니메이션 관련&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li class=&quot;has-line-data&quot; data-line-start=&quot;207&quot; data-line-end=&quot;208&quot;&gt;&lt;code&gt;StatefulWidget&lt;/code&gt; / &lt;code&gt;StatelessWidget&lt;/code&gt;&lt;/li&gt;
&lt;li class=&quot;has-line-data&quot; data-line-start=&quot;208&quot; data-line-end=&quot;209&quot;&gt;&lt;code&gt;FutureBuilder&lt;/code&gt;, &lt;code&gt;StreamBuilder&lt;/code&gt;&lt;/li&gt;
&lt;li class=&quot;has-line-data&quot; data-line-start=&quot;209&quot; data-line-end=&quot;210&quot;&gt;&lt;code&gt;Hero&lt;/code&gt;, &lt;code&gt;AnimatedSwitcher&lt;/code&gt;&lt;/li&gt;
&lt;li class=&quot;has-line-data&quot; data-line-start=&quot;210&quot; data-line-end=&quot;211&quot;&gt;&lt;code&gt;Theme&lt;/code&gt;, &lt;code&gt;ThemeData&lt;/code&gt;&lt;/li&gt;
&lt;li class=&quot;has-line-data&quot; data-line-start=&quot;211&quot; data-line-end=&quot;213&quot;&gt;상태관리: &lt;code&gt;Provider&lt;/code&gt;, &lt;code&gt;Riverpod&lt;/code&gt;, &lt;code&gt;Bloc&lt;/code&gt;, &lt;code&gt;GetX&lt;/code&gt; 등&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>모바일/플러터</category>
      <category>dart언어</category>
      <category>FLUTTER</category>
      <category>flutterui</category>
      <category>flutter강의</category>
      <category>flutter레이아웃</category>
      <category>flutter위젯</category>
      <category>UIUX디자인</category>
      <category>모바일앱개발</category>
      <category>앱개발입문</category>
      <category>크로스플랫폼</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/192</guid>
      <comments>https://code-algo.tistory.com/192#entry192comment</comments>
      <pubDate>Sat, 12 Jul 2025 10:03:19 +0900</pubDate>
    </item>
    <item>
      <title>[데이터베이스] MariaDB - JOIN</title>
      <link>https://code-algo.tistory.com/191</link>
      <description>&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;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;일반적으로 부모 테이블의 기본 키와 자식 타입의 외래 키를 JOIN 조건으로 사용해서 부모 테이블과 자식 테이블을 옆으로 붙인다.&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;USING (컬럼명) : 두 테이블에서 같은 이름의 컬럼으로 조인할 때 간단하게 사용&lt;/li&gt;
&lt;li&gt;ON 테이블A.컬럼 = 테이블B.컬럼 : 컬럼 이름이 다르거나, 좀 더 복잡한 조건이 필요할 때 사용&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;글 목록 (순서, 갯수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=1.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;글 한개 보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=2.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;글쓰기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=3.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;외래키 추가 및 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=4.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 5.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;수정과 삭제는 작성자 여부를 반드시 권한체크를 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=5.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 6.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;글 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=6.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 7.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;글 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=7.blog.sql&quot;&gt;&lt;/script&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;(Inner) Join 순서는 상관없다.&lt;/li&gt;
&lt;li&gt;자식 테이블에 부모 테이블을 붙인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Left 조인은 왼쪽 테이블이 기준입니다. 자식 테이블이 왼쪽이고, 오른쪽이 부모테이블이라면 그냥 조인과 같습니다.&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;LEFT 조인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=8.blog.sql&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=9.blog.txt&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Employees 데이터베이스 예제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=10.blog.url&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;부서목록 (부서번호순)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=11.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;전체 사원 목록 (사원번호순, 페이지당 25개씩)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=12.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;전체 사원 목록 검색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=13.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 5.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;부서 상세정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=14.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 6.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;부서의 사원근무 이력 (근무시작일, 사번순)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=15.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 7.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;사원 상세정보&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=16.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 8.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;사원의 부서 근무 이력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=17.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 9.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;사원의 연봉이력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=18.blog.sql&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 10.&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;3개 테이블 조인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a054d926b6e556f969d43ae1c3c532fd.js?file=19.blog.sql&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터베이스/MySQL</category>
      <category>db조인</category>
      <category>ForeignKey</category>
      <category>innerjoin</category>
      <category>leftjoin</category>
      <category>mariadb</category>
      <category>primarykey</category>
      <category>sql 기초</category>
      <category>sql 학습</category>
      <category>SQL조인</category>
      <category>관계형데이터베이스</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/191</guid>
      <comments>https://code-algo.tistory.com/191#entry191comment</comments>
      <pubDate>Fri, 4 Jul 2025 13:38:50 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 도커 컨테이너 및 이미지 삭제 완벽 가이드</title>
      <link>https://code-algo.tistory.com/190</link>
      <description>&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker를 사용하면서 불필요한 컨테이너와 이미지가 쌓이면 용량 부족 문제가 발생할 수 있습니다. 이 글에서는 Docker의 컨테이너와 이미지를 안전하게 삭제 및 정리하는 방법을 정리했습니다.&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;1. 컨테이너 삭제하기&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;특정 컨테이너 삭제 컨테이너 이름이나 ID를 사용하여 특정 컨테이너를 중지하고 삭제합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog1.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;다음은 예시입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog2.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;종료된 컨테이너 조회하기 종료된 상태의 컨테이너만 조회할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog3.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;종료된 컨테이너 일괄 삭제 (안전) 종료된 컨테이너를 안전하게 한 번에 삭제할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog4.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 5.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;확인 없이 즉시 삭제하려면 다음과 같은 명령을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog5.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 6.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;prune을 사용하지 않고 동일한 작업을 수행하는 명령어는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog6.bash&quot;&gt;&lt;/script&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;모든 컨테이너(실행 중 포함) 삭제하기 모든 컨테이너를 삭제할 때는 반드시 실행 중인 컨테이너를 먼저 중지해야 합니다. 주의: 운영 중인 컨테이너가 있을 경우 서비스가 중단될 수 있으니, 실행 중인 컨테이너 삭제 전 반드시 확인하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog7.bash&quot;&gt;&lt;/script&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. Docker 이미지 삭제하기&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;특정 이미지 삭제 이미지 ID 또는 이름을 사용하여 이미지를 삭제합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog8.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;다음은 예시입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog9.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;사용되지 않는 모든 이미지 일괄 삭제 (prune) 컨테이너에서 사용되지 않는 이미지(태그가 없거나 컨테이너에 연결되지 않은 이미지)를 모두 삭제합니다. 주의: 사용하지 않는 이미지라 할지라도 중요한 이미지가 삭제될 수 있으므로 반드시 확인 후 실행하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog10.bash&quot;&gt;&lt;/script&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. 컨테이너 종료 시 자동 삭제하기 (--rm 옵션)&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;Docker 컨테이너를 실행할 때 --rm 옵션을 주면, 컨테이너가 중지될 때 자동으로 삭제됩니다. 테스트 용도 등 임시 컨테이너에 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog11.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;다음은 예시입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/8dac78560dc3d4be6b67fa9d60848afa.js?file=blog12.bash&quot;&gt;&lt;/script&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>
      <category>docker</category>
      <category>dockercleanup</category>
      <category>dockertips</category>
      <category>개발팁</category>
      <category>도커</category>
      <category>도커활용법</category>
      <category>이미지삭제</category>
      <category>이미지정리</category>
      <category>컨테이너삭제</category>
      <category>컨테이너정리</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/190</guid>
      <comments>https://code-algo.tistory.com/190#entry190comment</comments>
      <pubDate>Tue, 18 Mar 2025 07:58:39 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 몽고 MongoDB 설정</title>
      <link>https://code-algo.tistory.com/189</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mongo.png&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yom0n/btsMNqKftvS/ak0kzTyORfr4Clfd9xuaRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yom0n/btsMNqKftvS/ak0kzTyORfr4Clfd9xuaRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yom0n/btsMNqKftvS/ak0kzTyORfr4Clfd9xuaRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYom0n%2FbtsMNqKftvS%2Fak0kzTyORfr4Clfd9xuaRk%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;1120&quot; height=&quot;309&quot; data-filename=&quot;mongo.png&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;309&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;Docker를 활용하여 MongoDB, 백엔드, 프론트엔드 환경을 구성하는 방법을 정리했습니다.&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;MongoDB 설정&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;MongoDB는 별도로 포트를 열어줄 필요 없이 --network 설정만으로 컨테이너를 실행할 수 있습니다.&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; MONGO_INITDB_ROOT_USERNAME&lt;/b&gt;: MongoDB의 루트 사용자 이름&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MONGO_INITDB_ROOT_PASSWORD&lt;/b&gt;: MongoDB의 루트 사용자 비밀번호&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-v data:/data/db&lt;/b&gt;: 데이터 저장을 위한 볼륨 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/d56d530cc9a44a1c039560b6afbd4c57.js?file=blog1.bash&quot;&gt;&lt;/script&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;MongoDB에 보안 연결을 설정할 때는 다음과 같은 연결 문자열을 사용합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/d56d530cc9a44a1c039560b6afbd4c57.js?file=blog2.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;만약 문제가 발생한다면 MongoDB의 볼륨 연결을 확인하고, 기존 볼륨을 제거한 후 다시 실행합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/d56d530cc9a44a1c039560b6afbd4c57.js?file=blog3.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;백엔드 컨테이너 실행 시 별도의 포트(80:80)를 열어주고, MongoDB와 연결하기 위해 --network 옵션을 추가합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/d56d530cc9a44a1c039560b6afbd4c57.js?file=blog4.bash&quot;&gt;&lt;/script&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 5.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;프론트엔드는 브라우저에서 실행되기 때문에 --network 설정이 동작하지 않습니다. 대신 3000 포트를 열어 백엔드(80 포트)와 연결합니다. 이 설정을 통해 프론트엔드와 백엔드가 정상적으로 연결될 수 있습니다. MongoDB를 포함한 전체 서비스가 원활하게 실행되는지 확인하려면 Docker 로그를 체크하는 것도 좋은 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/d56d530cc9a44a1c039560b6afbd4c57.js?file=blog5.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 6.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;이와 같은 방법으로 Docker 환경에서 MongoDB, 백엔드, 프론트엔드를 손쉽게 구성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/d56d530cc9a44a1c039560b6afbd4c57.js?file=blog6.bash&quot;&gt;&lt;/script&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>
      <category>backend</category>
      <category>containerization</category>
      <category>database</category>
      <category>Deployment</category>
      <category>DevOps</category>
      <category>docker</category>
      <category>frontend</category>
      <category>FullStack</category>
      <category>MongoDB</category>
      <category>webdevelopment</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/189</guid>
      <comments>https://code-algo.tistory.com/189#entry189comment</comments>
      <pubDate>Mon, 17 Mar 2025 08:04:50 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 맥에 Homebrew 로 도커 설치하기</title>
      <link>https://code-algo.tistory.com/188</link>
      <description>&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 쓰던&amp;nbsp; 애플실리콘에서는 문제없이 잘되던 도커 설치가 인텔 맥에서는 정상동작하지 않아 다른 방법을 찾던 중 brew 로 설치하는 방법이 있어서 소개합니다. --cask 옵션은 Homebrew Cask를 사용하여 GUI 애플리케이션 및 바이너리 소프트웨어를 설치할 때 사용하는 옵션입니다.&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;brew install : 터미널에서 실행되는 도구 (git, node, python...)&lt;/li&gt;
&lt;li&gt;brew install --cask : GUI 앱이나 바이너리 패키지 (docer, google-chrome, slack...)&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; brew 명령어로&amp;nbsp;&lt;/span&gt;&lt;span&gt;도커를 설치합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/912c9669b8267df49033abc8e9d7784c.js?file=blog1.bash&quot;&gt;&lt;/script&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-11 오후 11.02.08.png&quot; data-origin-width=&quot;2052&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT28V2/btsMHQbSNQW/y1oBQ77TywhSY7ZkMsJal0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT28V2/btsMHQbSNQW/y1oBQ77TywhSY7ZkMsJal0/img.png&quot; data-alt=&quot;버전 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT28V2/btsMHQbSNQW/y1oBQ77TywhSY7ZkMsJal0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT28V2%2FbtsMHQbSNQW%2Fy1oBQ77TywhSY7ZkMsJal0%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;2052&quot; height=&quot;900&quot; data-filename=&quot;스크린샷 2025-03-11 오후 11.02.08.png&quot; data-origin-width=&quot;2052&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;버전 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;도커 버전을 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/912c9669b8267df49033abc8e9d7784c.js?file=blog2.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;/b&gt;&lt;span&gt;도커 컴포즈 버전도 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/912c9669b8267df49033abc8e9d7784c.js?file=blog3.bash&quot;&gt;&lt;/script&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;/b&gt;&lt;span&gt;테스트를 위해 간단한 이미지를&amp;nbsp; 받아서 실행해봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/912c9669b8267df49033abc8e9d7784c.js?file=blog4.bash&quot;&gt;&lt;/script&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>
      <category>DevOps</category>
      <category>docker</category>
      <category>docker설치</category>
      <category>homebrew</category>
      <category>it테크</category>
      <category>MacOS</category>
      <category>개발환경</category>
      <category>맥OS</category>
      <category>맥북개발</category>
      <category>소프트웨어개발</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/188</guid>
      <comments>https://code-algo.tistory.com/188#entry188comment</comments>
      <pubDate>Tue, 11 Mar 2025 23:06:42 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 도커 볼륨 바인드 마운트 생성과 삭제</title>
      <link>https://code-algo.tistory.com/187</link>
      <description>&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;익명&amp;nbsp;볼륨(Anonymous&amp;nbsp;Volume)&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;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog1.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;명시적 볼륨 (Managed&amp;nbsp;Volume)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 자체적으로 관리하는 볼륨으로&amp;nbsp; 컨테이너가 삭제되더라도 데이터가 유지되는 특징이 있습니다. 때문에 컨테이너끼리 쉽게 공유가 가능합니다. 운영 환경에서 데이터의 영속성을 원한다면 명시적 볼륨을 사용합니다. 또한 익명의 볼륨과 달리 DockerFile 에서 생성이 불가능합니다. -v 옵션으로만 생성이 가능하고 특정 컨테이너와 연결되어 있지 않습니다. 때문에 컨테이너 간의 공유가 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog2.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;바인드&amp;nbsp;마운트(Bind&amp;nbsp;Mount)&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;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog3.bash&quot;&gt;&lt;/script&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;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;마운트 방식&lt;/td&gt;
&lt;td&gt;경로&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;&lt;span&gt;&lt;b&gt;명시적 볼륨&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;/var/lib/docker/volumes/&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;O (컨테이너 삭제 후에도 유지)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;직접 접근 어려움&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;운영 환경, 데이터 공유&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;익명 볼륨&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;/var/lib/docker/volumes/&amp;lt;random-id&amp;gt;/&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;O (컨테이너 삭제 시 유지, 하지만 관리 어려움)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;불가&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;임시 데이터 저장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;바인드 마운트&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;호스트의 특정 디렉토리 (&lt;span&gt;/host/path&lt;/span&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;O (컨테이너 삭제와 무관)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;가능&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;개발 환경, 로컬 테스트&lt;/span&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;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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;도커 볼륨 관련 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog4.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;도커&amp;nbsp; 볼륨 조회 - 볼륨은 도커에 의해 관리됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog5.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;도커 볼륨 생성에 관련된 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog6.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;도커 볼륨 생성하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog7.bash&quot;&gt;&lt;/script&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;span style=&quot;color: #ee2323;&quot;&gt;▼ 5.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;도커 볼륨 검사 - 마운트&amp;nbsp;포인트&amp;nbsp;(Mountpoint)는&amp;nbsp;실제&amp;nbsp;물리적&amp;nbsp;위치가&amp;nbsp;아니라&amp;nbsp;가상&amp;nbsp;머신&amp;nbsp;내부에&amp;nbsp;있는&amp;nbsp;위치입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog8.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 6.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;도커 볼륨 삭제 - 사용중인 볼륨은 중지(stop)한 뒤에 제거할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog9.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 7.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;사용하지 않는 모든 볼륨 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/6a5951f80bcc267d2dbee35995b64a1f.js?file=blog10.bash&quot;&gt;&lt;/script&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;마운트&amp;nbsp;사용시&amp;nbsp;주의할&amp;nbsp;점&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;절대 경로를 사용하는 바인드 마운트는 Dockerfile 을 생성할 때 `COPY . .` 명령을 사용하지 않아도 `/app` 위치의 전체를 마운트 한다면 아무런 문제 없이 동작할 것입니다. 하지만 프로덕션 앱을 배포할 때는 절대 경로를 사용할 것도 아니고 바인드 마운트 하는 이유도 의미가 없기 때문에 `COPY . .` 를 통해 스냅샷을 복하해야 합니다.&lt;/p&gt;</description>
      <category>운영체제/도커</category>
      <category>DevOps</category>
      <category>dockervolume</category>
      <category>데이터영속성</category>
      <category>도커</category>
      <category>도커볼륨</category>
      <category>명시적볼륨</category>
      <category>바인드마운트</category>
      <category>서버운영</category>
      <category>익명볼륨</category>
      <category>컨테이너</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/187</guid>
      <comments>https://code-algo.tistory.com/187#entry187comment</comments>
      <pubDate>Mon, 10 Mar 2025 21:54:09 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 도커 이미지 푸시하기</title>
      <link>https://code-algo.tistory.com/186</link>
      <description>&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커로 이미지를 푸시하려면 hub.docker.com 에서 할 수 있습니다. Private 레포지토리는 1개로 제한되어 있고 Public 레포지토리는 개수의 제한은 없지만 빌드 자동화가 불가능하며 Pull 에 대한 제한이 있을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hub.docker.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741411936185&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Docker Hub Container Image Library | App Containerization&quot; data-og-description=&quot;Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.&quot; data-og-host=&quot;hub.docker.com&quot; data-og-source-url=&quot;https://hub.docker.com/&quot; data-og-url=&quot;https://hub.docker.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ADFzG/hyYm4i4FWQ/LePCyqDdhT12aab4oWILf1/img.png?width=3372&amp;amp;height=1896&amp;amp;face=0_0_3372_1896,https://scrap.kakaocdn.net/dn/o3dRN/hyYqOr8pjf/4bQh2hEE1250Xi3B7nRcc0/img.png?width=2560&amp;amp;height=1030&amp;amp;face=0_0_2560_1030,https://scrap.kakaocdn.net/dn/sI4Xc/hyYqczX4wm/CBMuWCqzNBRAZAg9YlLAt0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hub.docker.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ADFzG/hyYm4i4FWQ/LePCyqDdhT12aab4oWILf1/img.png?width=3372&amp;amp;height=1896&amp;amp;face=0_0_3372_1896,https://scrap.kakaocdn.net/dn/o3dRN/hyYqOr8pjf/4bQh2hEE1250Xi3B7nRcc0/img.png?width=2560&amp;amp;height=1030&amp;amp;face=0_0_2560_1030,https://scrap.kakaocdn.net/dn/sI4Xc/hyYqczX4wm/CBMuWCqzNBRAZAg9YlLAt0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Docker Hub Container Image Library | App Containerization&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hub.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 로그인을 한뒤에 Repositories 탭을 누르고 Create a repository 버튼을 눌러 새로운 레포지토리를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blog1.png&quot; data-origin-width=&quot;2460&quot; data-origin-height=&quot;1486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8mYOP/btsMEybGKyI/wXhG7yfTKcaqAFiptKeyKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8mYOP/btsMEybGKyI/wXhG7yfTKcaqAFiptKeyKk/img.png&quot; data-alt=&quot;docker hub&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8mYOP/btsMEybGKyI/wXhG7yfTKcaqAFiptKeyKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8mYOP%2FbtsMEybGKyI%2FwXhG7yfTKcaqAFiptKeyKk%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;2460&quot; height=&quot;1486&quot; data-filename=&quot;blog1.png&quot; data-origin-width=&quot;2460&quot; data-origin-height=&quot;1486&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker hub&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 레포지토리 이름을 만들고 create 버튼을 눌러 새로운 레포지토리를 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blog2.png&quot; data-origin-width=&quot;2460&quot; data-origin-height=&quot;1305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oawgk/btsMElp5adA/rg0csuF8lUKmhKcYMcmSu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oawgk/btsMElp5adA/rg0csuF8lUKmhKcYMcmSu0/img.png&quot; data-alt=&quot;docker - create repository&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oawgk/btsMElp5adA/rg0csuF8lUKmhKcYMcmSu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foawgk%2FbtsMElp5adA%2Frg0csuF8lUKmhKcYMcmSu0%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;2460&quot; height=&quot;1305&quot; data-filename=&quot;blog2.png&quot; data-origin-width=&quot;2460&quot; data-origin-height=&quot;1305&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker - create repository&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&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;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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; docker 를 이용해서 소스코드를 빌드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/0c2f778fa3e2e98076220c4fa95d31bf.js?file=blog1.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 빌드한 Docker 이미지를 새로운 이름으로 태그합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/0c2f778fa3e2e98076220c4fa95d31bf.js?file=blog2.bash&quot;&gt;&lt;/script&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 5.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; Push를 하기 위해서 로그인 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/0c2f778fa3e2e98076220c4fa95d31bf.js?file=blog3.bash&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-08 오후 2.29.01.png&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cget1y/btsMFeQ948e/SO2ew5TZmawAU2HyZh3tu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cget1y/btsMFeQ948e/SO2ew5TZmawAU2HyZh3tu1/img.png&quot; data-alt=&quot;docker login&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cget1y/btsMFeQ948e/SO2ew5TZmawAU2HyZh3tu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcget1y%2FbtsMFeQ948e%2FSO2ew5TZmawAU2HyZh3tu1%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;1954&quot; height=&quot;1308&quot; data-filename=&quot;스크린샷 2025-03-08 오후 2.29.01.png&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1308&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker login&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style7&quot; data-ke-type=&quot;horizontalRule&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-08 오후 2.27.54.png&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mXJhv/btsMEMU8JDd/twkLAEJtksArYMDvgHDkok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mXJhv/btsMEMU8JDd/twkLAEJtksArYMDvgHDkok/img.png&quot; data-alt=&quot;docker login -confirm&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mXJhv/btsMEMU8JDd/twkLAEJtksArYMDvgHDkok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmXJhv%2FbtsMEMU8JDd%2FtwkLAEJtksArYMDvgHDkok%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;2310&quot; height=&quot;1628&quot; data-filename=&quot;스크린샷 2025-03-08 오후 2.27.54.png&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker login -confirm&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style7&quot; data-ke-type=&quot;horizontalRule&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 6.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 로그인이 되었다면 push 명령어로 이미지를 업로드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/0c2f778fa3e2e98076220c4fa95d31bf.js?file=blog4.bash&quot;&gt;&lt;/script&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 7.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 이미지가 잘 올라갔는지 manifest inspect 명령을 이용해서 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/0c2f778fa3e2e98076220c4fa95d31bf.js?file=blog5.bash&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/0c2f778fa3e2e98076220c4fa95d31bf.js?file=blog6.json&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 9.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 테스트로 pull 명령어를 이용해서 이미지를 가져옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/0c2f778fa3e2e98076220c4fa95d31bf.js?file=blog7.bash&quot;&gt;&lt;/script&gt;</description>
      <category>운영체제/도커</category>
      <category>backend</category>
      <category>Cloud</category>
      <category>coding</category>
      <category>Container</category>
      <category>DevOps</category>
      <category>docker</category>
      <category>dockerhub</category>
      <category>dockertag</category>
      <category>Programming</category>
      <category>softwaredevelopment</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/186</guid>
      <comments>https://code-algo.tistory.com/186#entry186comment</comments>
      <pubDate>Sat, 8 Mar 2025 15:05:12 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] 터미널에서 스위프트 패키지 라이브러리 만들기</title>
      <link>https://code-algo.tistory.com/185</link>
      <description>&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;터미널에서 Swift 패키지 만드는 방법&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1. &lt;/span&gt;&lt;/b&gt;새로운 디렉터리를 만들고 해당 디렉터리로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog1.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;Swift 패키지 생성를 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog3.bash&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-07 오후 12.28.56.png&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y3xjp/btsMExo3atL/24ivWzBHVMyhfNaw1WCFvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y3xjp/btsMExo3atL/24ivWzBHVMyhfNaw1WCFvK/img.png&quot; data-alt=&quot;package 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y3xjp/btsMExo3atL/24ivWzBHVMyhfNaw1WCFvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy3xjp%2FbtsMExo3atL%2F24ivWzBHVMyhfNaw1WCFvK%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;1054&quot; height=&quot;688&quot; data-filename=&quot;스크린샷 2025-03-07 오후 12.28.56.png&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;package 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;--name &amp;lt;이름&amp;gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;패키지 이름 지정&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;swift package init --name MyLibrary&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;--type &amp;lt;유형&amp;gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;패키지 유형 지정&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;swift package init --type library&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;--platforms &amp;lt;플랫폼&amp;gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;지원할 플랫폼 지정&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;swift package init --platforms iOS&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;--package-path &amp;lt;경로&amp;gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;패키지를 특정 경로에 생성&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;swift package init --package-path ./MyLibrary&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: #333333; text-align: start;&quot; 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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;open 명령어를 이용해서 Xcode 를 실행해 프로젝트를 열 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog2.bash&quot;&gt;&lt;/script&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;테스트 명령을 통해 테스트를 실행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog4.bash&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-07 오후 12.29.11.png&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xVQ9n/btsMB4btZ5h/cUHt6Tot5OfU92VzCvAF4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xVQ9n/btsMB4btZ5h/cUHt6Tot5OfU92VzCvAF4k/img.png&quot; data-alt=&quot;swift test&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xVQ9n/btsMB4btZ5h/cUHt6Tot5OfU92VzCvAF4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxVQ9n%2FbtsMB4btZ5h%2FcUHt6Tot5OfU92VzCvAF4k%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;1054&quot; height=&quot;688&quot; data-filename=&quot;스크린샷 2025-03-07 오후 12.29.11.png&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;swift test&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;build 명령을 통해서 디버그 및 릴리즈 모드로 빌드가 가능합니다. (옵션이 없으면 디버그 모드) 또한 ./build 폴더에 서 직접 실행도 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog5.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;run 명령을 통해 직접 실행도 가능합니다. 여러개의 실행 타깃이 있다면 직접 타깃의 이름을 입력해서 실행도 가능합니다. (A, B)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog6.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 7.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;@main 함수를 만들어서 실행 가능한 타깃을 Package.swift 에 명시합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog7.swift&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-07 오후 12.33.03.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkDJqH/btsMEYG7Cyz/Opu1K13m2QpAhOQXHPtHC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkDJqH/btsMEYG7Cyz/Opu1K13m2QpAhOQXHPtHC1/img.png&quot; data-alt=&quot;spm&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkDJqH/btsMEYG7Cyz/Opu1K13m2QpAhOQXHPtHC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkDJqH%2FbtsMEYG7Cyz%2FOpu1K13m2QpAhOQXHPtHC1%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;1400&quot; height=&quot;900&quot; data-filename=&quot;스크린샷 2025-03-07 오후 12.33.03.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;spm&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 8.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;생성할 때 타입을 executable 로 생성할 수도 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/4c25e4f914074dbae33186f62bf158ba.js?file=blog8.bash&quot;&gt;&lt;/script&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>
      <category>Opensource</category>
      <category>Programming</category>
      <category>SPM</category>
      <category>Swift</category>
      <category>swiftpackage</category>
      <category>Xcode</category>
      <category>개발</category>
      <category>라이브러리</category>
      <category>아이폰</category>
      <category>프레임워크</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/185</guid>
      <comments>https://code-algo.tistory.com/185#entry185comment</comments>
      <pubDate>Fri, 7 Mar 2025 16:58:07 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] Amazon EC2 도커 설치 (Docker)</title>
      <link>https://code-algo.tistory.com/184</link>
      <description>&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WS에서 제공하는 기본 Amazon Linux AMI(Amazon Linux 2, Amazon Linux 2023)는 CentOS/RHEL 기반이며&amp;nbsp;Amazon Linux AMI에는 Docker가 기본 설치되어 있지 않아서&lt;span&gt;&amp;nbsp;yum 을 이용해 설치하고 service 를 이용해 실행해야 합니다.&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-filename=&quot;스크린샷 2025-03-06 오전 10.55.10.png&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pUCDe/btsMA4o49Og/Z9VNf4g6DAb0e7jKda2D41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pUCDe/btsMA4o49Og/Z9VNf4g6DAb0e7jKda2D41/img.png&quot; data-alt=&quot;Amazon Web Service - EC2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pUCDe/btsMA4o49Og/Z9VNf4g6DAb0e7jKda2D41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpUCDe%2FbtsMA4o49Og%2FZ9VNf4g6DAb0e7jKda2D41%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;1194&quot; height=&quot;603&quot; data-filename=&quot;스크린샷 2025-03-06 오전 10.55.10.png&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Amazon Web Service - EC2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;/b&gt;&lt;span&gt; yum 을 이용해 업데이트를 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a9bb8a0fd0015e7fce9936b69c2ba02d.js?file=blog1.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;yum 을 이용해 docker 를 설치합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a9bb8a0fd0015e7fce9936b69c2ba02d.js?file=blog2.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;docker 버전을 확인합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a9bb8a0fd0015e7fce9936b69c2ba02d.js?file=blog3.bash&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-06 오전 10.44.05.png&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlLLLG/btsMCshVRjG/xQ99CobAeiiBERn44Cs5mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlLLLG/btsMCshVRjG/xQ99CobAeiiBERn44Cs5mK/img.png&quot; data-alt=&quot;docker -v&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlLLLG/btsMCshVRjG/xQ99CobAeiiBERn44Cs5mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlLLLG%2FbtsMCshVRjG%2FxQ99CobAeiiBERn44Cs5mK%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;1194&quot; height=&quot;603&quot; data-filename=&quot;스크린샷 2025-03-06 오전 10.44.05.png&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker -v&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&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;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;span style=&quot;color: #ee2323;&quot;&gt;▼ 4.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;Docker 서비스를 실행합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a9bb8a0fd0015e7fce9936b69c2ba02d.js?file=blog4.bash&quot;&gt;&lt;/script&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;SUDU 그룹 추가 및 테스트&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 1.&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;EC2 인스턴스에서 Docker를 실행하려면 ec2-user가 docker 그룹에 속해야 합니다. 변경 사항을 적용하려면 로그아웃 후 다시 로그인해야 합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a9bb8a0fd0015e7fce9936b69c2ba02d.js?file=blog5.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼ 2.&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;테스트를 위해 hello-world 이미지를 실행합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/a9bb8a0fd0015e7fce9936b69c2ba02d.js?file=blog6.bash&quot;&gt;&lt;/script&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;Install Docker Engine&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;a href=&quot;https://docs.docker.com/engine/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.docker.com/engine/install/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741225333526&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Install&quot; data-og-description=&quot;Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.&quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/engine/install/&quot; data-og-url=&quot;https://docs.docker.com/engine/install/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eb6Efm/hyYm9ROSXE/cUGx6Q7QkSIgTmg6a63cT1/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.docker.com/engine/install/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eb6Efm/hyYm9ROSXE/cUGx6Q7QkSIgTmg6a63cT1/img.jpg?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Install&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>운영체제/아마존 웹 서비스</category>
      <category>AWS</category>
      <category>cloudcomputing</category>
      <category>containerization</category>
      <category>DevOps</category>
      <category>docker</category>
      <category>dockerCompose</category>
      <category>dockersetup</category>
      <category>EC2</category>
      <category>linuxserver</category>
      <category>systemd</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/184</guid>
      <comments>https://code-algo.tistory.com/184#entry184comment</comments>
      <pubDate>Thu, 6 Mar 2025 10:57:08 +0900</pubDate>
    </item>
    <item>
      <title>[Tuist] mise 설치 및 버전 관리</title>
      <link>https://code-algo.tistory.com/183</link>
      <description>&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Mise&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mise&lt;/b&gt;는 개발 환경 관리를 위한 툴로 여러 프로그래밍 언어와 도구의 버전 관리를 깔끔하게 할 수 있습니다. Tuist 를 설치하려면 homebrew 로 직접 설치가 가능하지만 mise 로 설치하는 것을 권장하고 있습니다. 계속 Tuist 의 버전이 바뀌기도 하고 관리 차원에서 mise 를 사용하면 수월하게 버전 컨트롤이 가능합니다. node 기반의 nvm 과 같은 것도 관리할 수 있으니 편리할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-05 오후 5.10.28.png&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;1954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUm3Ba/btsMCprItp4/Mg42sqBpT2xHDg7NMsPiBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUm3Ba/btsMCprItp4/Mg42sqBpT2xHDg7NMsPiBK/img.png&quot; data-alt=&quot;mise 로 설치한 Tuist&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUm3Ba/btsMCprItp4/Mg42sqBpT2xHDg7NMsPiBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUm3Ba%2FbtsMCprItp4%2FMg42sqBpT2xHDg7NMsPiBK%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;2080&quot; height=&quot;1954&quot; data-filename=&quot;스크린샷 2025-03-05 오후 5.10.28.png&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;1954&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mise 로 설치한 Tuist&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Tuist 관련 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; homebrew 를 설치하지 않았다면 우선 terminal 에서 다음 코드를 입력해 homebrew 를 설치합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://brew.sh/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://brew.sh/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741160801316&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Homebrew&quot; data-og-description=&quot;The Missing Package Manager for macOS (or Linux).&quot; data-og-host=&quot;brew.sh&quot; data-og-source-url=&quot;https://brew.sh/&quot; data-og-url=&quot;https://brew.sh/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjSilX/hyYm4CGn5y/UDvXytDcUFWoI2ieaA7Ge1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/rwLPK/hyYm3w06ag/R43DVqioq6HPqdDK3hEc0k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://brew.sh/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://brew.sh/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjSilX/hyYm4CGn5y/UDvXytDcUFWoI2ieaA7Ge1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/rwLPK/hyYm3w06ag/R43DVqioq6HPqdDK3hEc0k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Homebrew&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Missing Package Manager for macOS (or Linux).&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;brew.sh&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog1.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; homebrew 를 설치할 수 있다면 homebrew 를 업데이트 한후에 mise 를 설치합니다. mise는 개발환경을 관리하는 도구로 다양한 툴의 버전 관리를 쉽게 할 수 있도록 돕는 매니저입니다. (Rust 기반)&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog2.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; mise 를 통해 tuist 를 설치합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog3.bash&quot;&gt;&lt;/script&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;PATH 추가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 설치 목록을 확인하기 위해서 터미널에서 list 명령을 사용합니다. tuist 가 설치되어 있다면 다음과 같이 나옵니다. 현재 저는 4.43.2 버전이 설치되어 있네요.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog4.bash&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-05 오후 5.12.35.png&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P5hVg/btsMBDEaVNV/H8ftYpJIZNXrnyWBGQcp00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P5hVg/btsMBDEaVNV/H8ftYpJIZNXrnyWBGQcp00/img.png&quot; data-alt=&quot;mise list&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P5hVg/btsMBDEaVNV/H8ftYpJIZNXrnyWBGQcp00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP5hVg%2FbtsMBDEaVNV%2FH8ftYpJIZNXrnyWBGQcp00%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;2080&quot; height=&quot;798&quot; data-filename=&quot;스크린샷 2025-03-05 오후 5.12.35.png&quot; data-origin-width=&quot;2080&quot; data-origin-height=&quot;798&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mise list&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 설치 경로 확인을 위해서 다음 명령을 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog5.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; .zshrc 에 PATH 를 추가합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog6.bash&quot;&gt;&lt;/script&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; tuist 버전확인&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog7.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 새로운 버전으로 tuist 설치하거나 추가할 때 사용합니다. 그밖에 uninstall 과 같은 명령을 사용해 제거도 가능합니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog8.bash&quot;&gt;&lt;/script&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;▼&lt;span&gt;&amp;nbsp;&lt;/span&gt;3.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; Tuist 버전 관리를 위해 use 명령을 쓰고 -g 옵션으로 글로벌 설정을 할 수 있습니다.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/comcxx11/7b9db81949e177dde25881062ec8a3ba.js?file=blog9.bash&quot;&gt;&lt;/script&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>오픈소스/Tuist</category>
      <category>mise tuist</category>
      <category>mise 설치</category>
      <category>mise 플러그인</category>
      <category>swift 개발 생산성</category>
      <category>swift 프로젝트 관리</category>
      <category>tuist xcode</category>
      <category>tuist 설치</category>
      <category>tuist 시작하기</category>
      <category>Xcode 프로젝트 생성</category>
      <category>버전 관리 툴</category>
      <author>Psalm 23</author>
      <guid isPermaLink="true">https://code-algo.tistory.com/183</guid>
      <comments>https://code-algo.tistory.com/183#entry183comment</comments>
      <pubDate>Wed, 5 Mar 2025 17:17:23 +0900</pubDate>
    </item>
  </channel>
</rss>