<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Dev ing</title>
    <link>https://hanpark.tistory.com/</link>
    <description>카일의 개발노트</description>
    <language>ko</language>
    <pubDate>Wed, 6 May 2026 22:04:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>카일</managingEditor>
    <image>
      <title>Dev ing</title>
      <url>https://tistory1.daumcdn.net/tistory/4648511/attach/0d403c921fc6416eac72827877a75607</url>
      <link>https://hanpark.tistory.com</link>
    </image>
    <item>
      <title>[Java] Stream api 정리</title>
      <link>https://hanpark.tistory.com/58</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;정리가 매우 잘 되어 있는 글을 찾았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;thx.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://futurecreator.github.io/2018/08/26/java-8-streams/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://futurecreator.github.io/2018/08/26/java-8-streams/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1663394362444&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Java 스트림 Stream (1) 총정리&quot; data-og-description=&quot;이번 포스트에서는 Java 8의 스트림(Stream)을 살펴봅니다. 총 두 개의 포스트로, 기본적인 내용을 총정리하는 이번 포스트와 좀 더 고급 내용을 다루는 다음 포스트로 나뉘어져 있습니다. Java 스트&quot; data-og-host=&quot;futurecreator.github.io&quot; data-og-source-url=&quot;https://futurecreator.github.io/2018/08/26/java-8-streams/&quot; data-og-url=&quot;https://futurecreator.github.io/2018/08/26/java-8-streams/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://futurecreator.github.io/2018/08/26/java-8-streams/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://futurecreator.github.io/2018/08/26/java-8-streams/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Java 스트림 Stream (1) 총정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 포스트에서는 Java 8의 스트림(Stream)을 살펴봅니다. 총 두 개의 포스트로, 기본적인 내용을 총정리하는 이번 포스트와 좀 더 고급 내용을 다루는 다음 포스트로 나뉘어져 있습니다. Java 스트&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;futurecreator.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Spring</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/58</guid>
      <comments>https://hanpark.tistory.com/58#entry58comment</comments>
      <pubDate>Sat, 17 Sep 2022 14:59:25 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] gradle 정리</title>
      <link>https://hanpark.tistory.com/57</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Language&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Groovy ( default )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Kotlin&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;File&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;gradlew&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 or OSX 용 실행 쉘 스크립트 파일 =&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1662512996543&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./gradlew :서브프로젝트:build&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;gradlew.bat&lt;/b&gt;&lt;/li&gt;
&lt;/ul&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;settings.gradle&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 구성 정보 파일 &amp;gt; 모노레포에서 멀티프로젝트 구성 시, 하위 프로젝트 구성을 설정&lt;/p&gt;
&lt;pre id=&quot;code_1662513089566&quot; class=&quot;cmake&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rootProject.name = 'root-project'
include 'sub-project-1'
include 'sub-project-2'
include 'sub-project-3'
...&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;build.gradle&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 라이브러리 의존성, 플러그인 등을 설정하는 빌드 스크립트 파일로 Node에서 package.json / golang에서 go.mod의 기능을 수행함&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;gradle &amp;gt; wrapper &amp;gt; gradle-wrapper.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 스크립트 파일을 jar로 압축한 파일&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;gradle &amp;gt; wrapper &amp;gt; gradle-wrapper.properties&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gradlew wrapper의 설정 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Syntax&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- plugin : 플러그인 추가&lt;/p&gt;
&lt;pre id=&quot;code_1662513998704&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apply plugin: 'java'
apply plugin: 'org.springframework.boot'

//혹은
plugins {
	id 'java'
    id 'org.springframework.boot'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- repositories : 오픈 소스 라이브러리를 호스팅하는 저장소 ( mavenCentral(), jCenter(), google() 등 )&lt;/p&gt;
&lt;pre id=&quot;code_1662514049532&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 프로젝트의 모든 종속성에 대한 레포지토리
repositories {
    mavenCentral()
    maven {
        url 'https://repo.spring.io/libs-milestone'
    }
}

// 빌드스크립트의 디펜던시의 종속성에 대한 레포지토리
buildscript {
    repositories {
        jcenter()
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- ext : 변수 선언&lt;/p&gt;
&lt;pre id=&quot;code_1662514245639&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ext {
    springBootVersion = '1.5.22.RELEASE'
    springVersion = '4.3.25.RELEASE'
}

//아래와 같이 변수를 가져올 수 있다
...
dependencies {
    classpath 'org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion'
    classpath 'org.springframework:springloaded:1.2.0.RELEASE'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;compile&lt;/b&gt; vs &lt;b&gt;implementation&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A &amp;lt;- B &amp;lt;- C 처럼, B와 C가 모두 A 모듈을 의존하고 있을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;compile&lt;/b&gt;: A 수정 시 B와 C 모두 다시 빌드됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;implementation&lt;/b&gt;: A를 직접 의존하는 B만 다시 빌드됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;compile: 연결된 API 모두 프로젝트에 의해 노출됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;implementation: 노출되지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 퍼포먼스적으로 implementation이 훨씬 유리하고, compile은 deperecated됨(gradle 3.0 이후부터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Spring</category>
      <category>Gradle</category>
      <category>Spring</category>
      <category>spring boot</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/57</guid>
      <comments>https://hanpark.tistory.com/57#entry57comment</comments>
      <pubDate>Wed, 7 Sep 2022 10:37:17 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 특정 DB에 유저 생성 및 권한 부여</title>
      <link>https://hanpark.tistory.com/56</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mysql.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MOdQ5/btrw9N8JCYB/vw2wklylDkRPKJGk4Bc3Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MOdQ5/btrw9N8JCYB/vw2wklylDkRPKJGk4Bc3Bk/img.png&quot; data-alt=&quot;MySQL&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MOdQ5/btrw9N8JCYB/vw2wklylDkRPKJGk4Bc3Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMOdQ5%2Fbtrw9N8JCYB%2Fvw2wklylDkRPKJGk4Bc3Bk%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;3000&quot; height=&quot;2000&quot; data-filename=&quot;mysql.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MySQL&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;MySQL에서 db생성 및 해당 db에 권한 부여&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1648086317602&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//초기 mysql 접속
mysql -u root -p&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기에 생성시, root계정과 root계정으로 설정한 비밀번호를 입력하고 들어간다.&lt;/p&gt;
&lt;pre id=&quot;code_1648086545684&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//db생성
create database [db이름] default character set utf8;
//유저 생성
create user [유저이름]@['localhost': 로컬호스트에서만 접속 가능, '%': 외부 접속 가능] identified by [비밀번호];
//특정 db에 모든 권한 부여
grant all privileges on [db이름].* to [유저이름]@[접속가능패턴] identified by [비밀번호];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Etc</category>
      <category>MySQL</category>
      <category>mysql 권한부여</category>
      <category>MySQL 비밀번호</category>
      <category>mysql 유저</category>
      <category>mysql 유저 생성</category>
      <category>MySQL 유저생성</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/56</guid>
      <comments>https://hanpark.tistory.com/56#entry56comment</comments>
      <pubDate>Thu, 24 Mar 2022 10:49:30 +0900</pubDate>
    </item>
    <item>
      <title>[Java] @Entity 객체의 값 수정 시 자동 DB 갱신?</title>
      <link>https://hanpark.tistory.com/55</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;@Entity와 트랜잭션&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JPA를 통해 테이블과 매핑된 엔티티 객체를 repository에서 불러와 값을 수정하는 메소드에 @Transactional 어노테이션이 부터있다면(@setter, 혹은 그 외의 메소드 등을 이용하는 등) 마지막에 respository.save()를 하지 않아도 자동으로 테이블에 반영된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 JPA가 엔티티의 값이 수정되었을 때 트랜잭션을 커밋한다면 자동으로 데이터베이스에 반영해주기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, @Transactional 어노테이션이 붙은 메소드 내에서 @Entity 객체의 값이 수정된다면 메소드가 정상적으로 작동된 이후 트랜잭션이 커밋되기 때문에 db에 수정 내역이 반영된다.&lt;/p&gt;</description>
      <category>Dev/Spring</category>
      <category>@Entity</category>
      <category>@Transactional</category>
      <category>JPA</category>
      <category>엔티티</category>
      <category>트랜잭션</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/55</guid>
      <comments>https://hanpark.tistory.com/55#entry55comment</comments>
      <pubDate>Thu, 3 Mar 2022 10:27:33 +0900</pubDate>
    </item>
    <item>
      <title>[Raspberry pi] Ubuntu server 설치 - 모니터, 마우스, 키보드 필요 없음</title>
      <link>https://hanpark.tistory.com/54</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;ubuntu 설치 배경&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라즈비안을 버리고 우분투를 설치했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유는 docker를 좀 더 잘 활용하기 위해서..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라즈비안에서는 이미지가 안 맞아 pull이 불가한 경우가 종종 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;ubuntu 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 우분투 이미지를 다운로드 받는다. 나는 docker용으로 쓸 것이기 때문에, ubuntu desktop이 아닌 &lt;b&gt;ubuntu server&lt;/b&gt;를 설치했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ubuntu server는 desktop에 비해 PC로서의 기능은 적지만, 더 가볍고 서버용으로 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 링크에서 우분투 이미지를 다운로드 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ubuntu.com/download/raspberry-pi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ubuntu.com/download/raspberry-pi&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644389456693&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 Ubuntu on a Raspberry Pi | Ubuntu&quot; data-og-description=&quot;Ubuntu is an open-source operating system for cross platform development, there's no better place to get started than with Ubuntu on a Raspberry Pi.&quot; data-og-host=&quot;ubuntu.com&quot; data-og-source-url=&quot;https://ubuntu.com/download/raspberry-pi&quot; data-og-url=&quot;https://ubuntu.com/download/raspberry-pi&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c3KjIZ/hyNmA6hTvR/0tNtWVliXspbuvHMWNG9fk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/d5vJhJ/hyNlqc8Eyl/4F0bgrvZaI3fS7IrsSeRMk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://ubuntu.com/download/raspberry-pi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ubuntu.com/download/raspberry-pi&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c3KjIZ/hyNmA6hTvR/0tNtWVliXspbuvHMWNG9fk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/d5vJhJ/hyNlqc8Eyl/4F0bgrvZaI3fS7IrsSeRMk/img.jpg?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;Install Ubuntu on a Raspberry Pi | Ubuntu&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu is an open-source operating system for cross platform development, there's no better place to get started than with Ubuntu on a Raspberry Pi.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ubuntu.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;우분투 이미지를 굽기 위해 &lt;b&gt;balenaEtcher&lt;/b&gt;를 사용한다. 위의 링크에서 제안한 이미지 굽는 방법보다 훨씬 더 빠르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.balena.io/etcher/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.balena.io/etcher/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644388774631&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;balena - The complete IoT fleet management platform&quot; data-og-description=&quot;Infrastructure and tools to develop, deploy, and manage connected devices at scale. Your first ten devices are always free.&quot; data-og-host=&quot;www.balena.io&quot; data-og-source-url=&quot;https://www.balena.io/etcher/&quot; data-og-url=&quot;https://www.balena.io&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bPa6dF/hyNlkRuTNv/vkfkRfpxsf6pXJMS4gGDL0/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/lLeaS/hyNlpeeWcr/sxqsIMRNzvIfkzQwAIk4CK/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256&quot;&gt;&lt;a href=&quot;https://www.balena.io/etcher/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.balena.io/etcher/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bPa6dF/hyNlkRuTNv/vkfkRfpxsf6pXJMS4gGDL0/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256,https://scrap.kakaocdn.net/dn/lLeaS/hyNlpeeWcr/sxqsIMRNzvIfkzQwAIk4CK/img.png?width=256&amp;amp;height=256&amp;amp;face=0_0_256_256');&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;balena - The complete IoT fleet management platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Infrastructure and tools to develop, deploy, and manage connected devices at scale. Your first ten devices are always free.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.balena.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;ubuntu 접속&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ubuntu는 기본적으로 ssh가 설정되어 있기 때문에, 네트워크에 라즈베리파이가 연결되어 있다면 라즈비안과 달리&lt;b&gt; 모니터 및 키보드, 마우스를 이용해 설정할 필요 없이 바로 ssh 접속이 가능&lt;/b&gt;하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인은 유선랜이기때문에, 네트워크 설정을 진행하진 않았지만 무선랜을 사용한다면 네트워크를 설정해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 설정 방법은 구글에 잘 나와있으니 참고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh 접속 아이디 및 패스워드는 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;username : ubuntu&lt;/b&gt;&lt;br /&gt;&lt;b&gt;password : ubuntu&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Etc</category>
      <category>raspberrypi ubuntu</category>
      <category>라즈베리파이 우분투</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/54</guid>
      <comments>https://hanpark.tistory.com/54#entry54comment</comments>
      <pubDate>Wed, 9 Feb 2022 15:50:17 +0900</pubDate>
    </item>
    <item>
      <title>[MongoDB] Authentication 인증 추가</title>
      <link>https://hanpark.tistory.com/53</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mongodb.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M053e/btrsUbeP3D4/RIgG7YnPf3ljOkHAW15YqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M053e/btrsUbeP3D4/RIgG7YnPf3ljOkHAW15YqK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M053e/btrsUbeP3D4/RIgG7YnPf3ljOkHAW15YqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM053e%2FbtrsUbeP3D4%2FRIgG7YnPf3ljOkHAW15YqK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;541&quot; height=&quot;541&quot; data-filename=&quot;mongodb.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Authentication의 필요성&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안을 위해.. Remote DB에 접속할 때 해킹을 막기 위함이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 mongo는 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;admin&lt;/b&gt;&lt;/span&gt;이라는 db가 존재하는데, 여기에 사용자를 추가하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1644329508116&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt; use admin
&amp;gt; db.createUser({
	user: '[유저이름]',
    pwd: '[패스워드]',
    roles: ['[...관련 롤]'],
 })&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할은 아래의 링크를 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.mongodb.com/manual/reference/built-in-roles/#database-administration-roles&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.mongodb.com/manual/reference/built-in-roles/#database-administration-roles&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644329520524&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;Built-In Roles &amp;mdash; MongoDB Manual&quot; data-og-description=&quot;Docs Home &amp;rarr; MongoDB ManualMongoDB grants access to data and commands through role-based authorization and provides built-in roles that provide the different levels of access commonly needed in a database system. You can additionally create user-defined r&quot; data-og-host=&quot;docs.mongodb.com&quot; data-og-source-url=&quot;https://docs.mongodb.com/manual/reference/built-in-roles/#database-administration-roles&quot; data-og-url=&quot;https://docs.mongodb.com/manual/reference/built-in-roles/#database-administration-roles&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d8WaUu/hyNlmBuTeN/FBEJo3pcx5rgjkhGmwhdbk/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601,https://scrap.kakaocdn.net/dn/gmDtJ/hyNmGkO7ln/MPokKcB7nc1XcCVQDInbLK/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601&quot;&gt;&lt;a href=&quot;https://docs.mongodb.com/manual/reference/built-in-roles/#database-administration-roles&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.mongodb.com/manual/reference/built-in-roles/#database-administration-roles&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d8WaUu/hyNlmBuTeN/FBEJo3pcx5rgjkhGmwhdbk/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601,https://scrap.kakaocdn.net/dn/gmDtJ/hyNmGkO7ln/MPokKcB7nc1XcCVQDInbLK/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601');&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;Built-In Roles &amp;mdash; MongoDB Manual&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docs Home &amp;rarr; MongoDB ManualMongoDB grants access to data and commands through role-based authorization and provides built-in roles that provide the different levels of access commonly needed in a database system. You can additionally create user-defined r&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.mongodb.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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Mongo Auth 설정&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;auth를 적용하기 위해, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;/etc/mongod.conf&lt;/b&gt;&lt;/span&gt;를 아래와 같이 수정해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1644329569542&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
security:
    authorization: enabled
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;유저 인증으로 접속하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. mongo shell에서 인증하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644329658815&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mongo
&amp;gt; use admin
&amp;gt; db.auth('[유저이름]', '[패스워드]')
&amp;gt; 1 //성공&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 접속할때 바로 인증&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644329768294&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mongo -u [유저이름] -p [비밀번호] --authenticationDatabase admin
mongo &quot;mongodb://[유저이름]:[비밀번호]@[호스트]:[포트]/&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://planbs.tistory.com/entry/MongoDB-%EC%9D%B8%EC%A6%9Dauthorization-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://planbs.tistory.com/entry/MongoDB-%EC%9D%B8%EC%A6%9Dauthorization-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644330644985&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MongoDB] 인증(authorization) 추가하기&quot; data-og-description=&quot;일반적인 RDB의 경우, 설치와 동시에 root 비밀번호를 생성하고 즉시 인증 체계를 생성합니다. 그러나 mongod 커맨드를 입력하여 켤 수 있는 MongoDB Server는 기본적으로 보안 모델이 없이 실행됩니다. &quot; data-og-host=&quot;planbs.tistory.com&quot; data-og-source-url=&quot;https://planbs.tistory.com/entry/MongoDB-%EC%9D%B8%EC%A6%9Dauthorization-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://planbs.tistory.com/entry/MongoDB-%EC%9D%B8%EC%A6%9Dauthorization-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ctUC3T/hyNlhAcTxi/ScxkOKo18JljKGSABrDNvK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/2qcFK/hyNmLGqRK8/Li5q9L7Fqvlc4jqAgrpx51/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://planbs.tistory.com/entry/MongoDB-%EC%9D%B8%EC%A6%9Dauthorization-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://planbs.tistory.com/entry/MongoDB-%EC%9D%B8%EC%A6%9Dauthorization-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ctUC3T/hyNlhAcTxi/ScxkOKo18JljKGSABrDNvK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/2qcFK/hyNmLGqRK8/Li5q9L7Fqvlc4jqAgrpx51/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;[MongoDB] 인증(authorization) 추가하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;일반적인 RDB의 경우, 설치와 동시에 root 비밀번호를 생성하고 즉시 인증 체계를 생성합니다. 그러나 mongod 커맨드를 입력하여 켤 수 있는 MongoDB Server는 기본적으로 보안 모델이 없이 실행됩니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;planbs.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Etc</category>
      <category>mongo auth</category>
      <category>mongo authentication</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/53</guid>
      <comments>https://hanpark.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 8 Feb 2022 23:30:56 +0900</pubDate>
    </item>
    <item>
      <title>[Docker DB]Docker에서 Postgres, MongoDB, Redis 구동하기</title>
      <link>https://hanpark.tistory.com/52</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Postgres&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;postgresql_icon.png&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wqX01/btrsLS9iy9P/q7trLKvfCq64ML4CkzpccK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wqX01/btrsLS9iy9P/q7trLKvfCq64ML4CkzpccK/img.png&quot; data-alt=&quot;psql&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wqX01/btrsLS9iy9P/q7trLKvfCq64ML4CkzpccK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwqX01%2FbtrsLS9iy9P%2Fq7trLKvfCq64ML4CkzpccK%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;259&quot; height=&quot;195&quot; data-filename=&quot;postgresql_icon.png&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;psql&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644328601283&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//이미지를 먼저 pull 받는다, 태그가 없으면 latest가 기본
docker pull postgres

//docker 컨테이너를 실행한다
docker run --name [컨테이너 이름] -p [컨테이너 외부에서 접근할 포트]:5432 -e POSTGRES_PASSWORD=[슈퍼유저 비밀번호] -d postgres&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--name : 컨테이너 이름 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-p : 도커 컨테이너에 접속할 포트 설정, 뒤에 붙은 포트는 이미지가 실행 될 포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-d : 백그라운드에서 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-e : 컨테이너의 환경 변수, image마다 다르다. postgres는 반드시 POSTGRES_PASSWORD 값이 필요함, 이것은 슈퍼유저 비밀번호를 설정하게 된다.&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The PostgreSQL image uses several environment variables which are easy to miss. The only variable required is&lt;span&gt;&amp;nbsp;&lt;/span&gt;POSTGRES_PASSWORD, the rest are optional.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Warning&lt;/b&gt;: the Docker specific variables will only have an effect if you start the container with a data directory that is empty; any pre-existing database will be left untouched on container startup.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;POSTGRES_PASSWORD&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;This environment variable is required for you to use the PostgreSQL image. It must not be empty or undefined. This environment variable sets the superuser password for PostgreSQL. The default superuser is defined by the&lt;span&gt;&amp;nbsp;&lt;/span&gt;POSTGRES_USER&lt;span&gt;&amp;nbsp;&lt;/span&gt;environment variable.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note 1:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;The PostgreSQL image sets up&lt;span&gt;&amp;nbsp;&lt;/span&gt;trust&lt;span&gt;&amp;nbsp;&lt;/span&gt;authentication locally so you may notice a password is not required when connecting from&lt;span&gt;&amp;nbsp;&lt;/span&gt;localhost&lt;span&gt;&amp;nbsp;&lt;/span&gt;(inside the same container). However, a password will be required if connecting from a different host/container.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Note 2:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;This variable defines the superuser password in the PostgreSQL instance, as set by the&lt;span&gt;&amp;nbsp;&lt;/span&gt;initdb&lt;span&gt;&amp;nbsp;&lt;/span&gt;script during initial container startup. It has no effect on the&lt;span&gt;&amp;nbsp;&lt;/span&gt;PGPASSWORD&lt;span&gt;&amp;nbsp;&lt;/span&gt;environment variable that may be used by the&lt;span&gt;&amp;nbsp;&lt;/span&gt;psql&lt;span&gt;&amp;nbsp;&lt;/span&gt;client at runtime, as described at&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/libpq-envars.html&quot;&gt;https://www.postgresql.org/docs/current/libpq-envars.html&lt;/a&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;PGPASSWORD, if used, will be specified as a separate environment variable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 되어있으니 참고, 더 많은 환경 변수 설정은 아래의 링크를 타고 들어가면 확인 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hub.docker.com/_/postgres&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hub.docker.com/_/postgres&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644328720980&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;Postgres - Official Image | Docker Hub&quot; data-og-description=&quot;We and third parties use cookies or similar technologies (&amp;quot;Cookies&amp;quot;) as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy &quot; data-og-host=&quot;hub.docker.com&quot; data-og-source-url=&quot;https://hub.docker.com/_/postgres&quot; data-og-url=&quot;https://hub.docker.com/_/postgres&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://hub.docker.com/_/postgres&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hub.docker.com/_/postgres&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Postgres - Official Image | Docker Hub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;We and third parties use cookies or similar technologies (&quot;Cookies&quot;) as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;MongoDB&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mongodb.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE6CSr/btrsH9jgF9p/QcFu4ydrxLEjKxURtSlCm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE6CSr/btrsH9jgF9p/QcFu4ydrxLEjKxURtSlCm0/img.jpg&quot; data-alt=&quot;mongo&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE6CSr/btrsH9jgF9p/QcFu4ydrxLEjKxURtSlCm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE6CSr%2FbtrsH9jgF9p%2FQcFu4ydrxLEjKxURtSlCm0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;361&quot; height=&quot;361&quot; data-filename=&quot;mongodb.jpg&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mongo&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644328872385&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//mongo 이미지를 받아온다. 여기서는 4버전을 받아와보도록 한다. 태그 생략되면 latest
docker pull mongo:4

//docker container 실행
docker run --name [컨테이너 이름] -p [컨테이너에 접속할 포트]:27017 -d mongo:4&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Redis&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;redis.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1TR1O/btrsTcZoiHL/vFnbxKZBTUTmZjKmUFkO6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1TR1O/btrsTcZoiHL/vFnbxKZBTUTmZjKmUFkO6K/img.png&quot; data-alt=&quot;redis&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1TR1O/btrsTcZoiHL/vFnbxKZBTUTmZjKmUFkO6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1TR1O%2FbtrsTcZoiHL%2FvFnbxKZBTUTmZjKmUFkO6K%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;329&quot; height=&quot;219&quot; data-filename=&quot;redis.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;redis&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644328939225&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//redis 이미지를 pull
docker pull redis

//docker container 생성
docker run --name [컨테이너 이름] -p [컨테이너 접속 포트]:6379 -d redis&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;공통&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 컨테이너 목록 확인&lt;/p&gt;
&lt;pre id=&quot;code_1644328999904&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//실행중인 목록
docker ps

//전체 목록
docker ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 컨테이너 접속&lt;/p&gt;
&lt;pre id=&quot;code_1644328986964&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker exec -it [컨테이너 이름 | 컨테이너 아이디]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 컨테이너 정지 / 실행&lt;/p&gt;
&lt;pre id=&quot;code_1644329053731&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker start [컨테이너 이름 | 컨테이너 아이디]
docker stop [컨테이너 이름 | 컨테이너 아이디]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 컨테이너 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1644329074327&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker rm [컨테이너 이름 | 컨테이너 아이디]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 이미지 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1644329093757&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image rm [이미지 이름]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://judo0179.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://judo0179.tistory.com/96&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644329119264&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Docker Postgresql 설치 및 셋팅하기&quot; data-og-description=&quot;리눅스 컨테이너 즉 docker는 프로세스 형태로 자원을 격리하여 사용하기 때문에 컨테이너가 삭제되면 기존에 저장되었던 데이터는 사라진다. 이를 예방하기 위해서 docker volume을 사용하거나 로&quot; data-og-host=&quot;judo0179.tistory.com&quot; data-og-source-url=&quot;https://judo0179.tistory.com/96&quot; data-og-url=&quot;https://judo0179.tistory.com/96&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bvUOu5/hyNlcZWNGg/UNKiKXQKJYbPJCOTW9y1fk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dS8ZA5/hyNmCpcm3V/7CztlAzVoWnjLPVxqSSjzK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/kdwgW/hyNmJ2UOrR/wrvpjpKt3yJQBZZhBUSjj1/img.jpg?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://judo0179.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://judo0179.tistory.com/96&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bvUOu5/hyNlcZWNGg/UNKiKXQKJYbPJCOTW9y1fk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dS8ZA5/hyNmCpcm3V/7CztlAzVoWnjLPVxqSSjzK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/kdwgW/hyNmJ2UOrR/wrvpjpKt3yJQBZZhBUSjj1/img.jpg?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&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 Postgresql 설치 및 셋팅하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 컨테이너 즉 docker는 프로세스 형태로 자원을 격리하여 사용하기 때문에 컨테이너가 삭제되면 기존에 저장되었던 데이터는 사라진다. 이를 예방하기 위해서 docker volume을 사용하거나 로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;judo0179.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://poiemaweb.com/docker-mongodb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://poiemaweb.com/docker-mongodb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644329140049&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를 사용하여 MongoDB 설치하고 접속하기 | PoiemaWeb&quot; data-og-description=&quot; &quot; data-og-host=&quot;poiemaweb.com&quot; data-og-source-url=&quot;https://poiemaweb.com/docker-mongodb&quot; data-og-url=&quot;https://poiemaweb.com/docker-mongodb&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXZOC2/hyNmL7vjsb/RkQXgEUEsbKCrm5uIBHWMk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/I6WbX/hyNmLl77ZW/NFO5tVYEFGrLmlrLFxAPBK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://poiemaweb.com/docker-mongodb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://poiemaweb.com/docker-mongodb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXZOC2/hyNmL7vjsb/RkQXgEUEsbKCrm5uIBHWMk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/I6WbX/hyNmLl77ZW/NFO5tVYEFGrLmlrLFxAPBK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&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를 사용하여 MongoDB 설치하고 접속하기 | PoiemaWeb&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;poiemaweb.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Etc</category>
      <category>docker mongo</category>
      <category>docker postgres</category>
      <category>docker psql</category>
      <category>docker redis</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/52</guid>
      <comments>https://hanpark.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 8 Feb 2022 23:06:04 +0900</pubDate>
    </item>
    <item>
      <title>[protoc 세팅] MAC protoc-gen-go 설정</title>
      <link>https://hanpark.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;protobuf 설치하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 golang이 설치되어있어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gRPC + golang을 이용하기 위해 proto파일을 컴파일하는 protoc-gen-go를 설정해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;protoc-gen-go를 설치해야하는데, 2가지를 설치해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 설치해야 할 것은 protobuf 패키지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2가지 방법 중 하나로 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 공식 홈페이지에서 다운로드 받기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644282421763&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Release Protocol Buffers v3.19.4 &amp;middot; protocolbuffers/protobuf&quot; data-og-description=&quot;Python Make libprotobuf symbols local on OSX to fix issue #9395 (#9435) Ruby Fixed a data loss bug that could occur when the number of optional fields in a message is an exact multiple of 32. (#...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4&quot; data-og-url=&quot;https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cbK1mN/hyNlhfrFAA/AfxvjKKM6t34blKLq5NXyK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cbK1mN/hyNlhfrFAA/AfxvjKKM6t34blKLq5NXyK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Release Protocol Buffers v3.19.4 &amp;middot; protocolbuffers/protobuf&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Python Make libprotobuf symbols local on OSX to fix issue #9395 (#9435) Ruby Fixed a data loss bug that could occur when the number of optional fields in a message is an exact multiple of 32. (#...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. brew 이용하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644282449780&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install protoc-gen-go
brew install protoc-gen-go-grpc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 brew를 이용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;proto-gen-go 설치하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;go install을 이용해 아래의 패키지를 다운로드 받는다.&lt;/p&gt;
&lt;pre id=&quot;code_1644282500281&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go install google.golang.org/protobuf/cmd/protoc-gen-go@latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;protoc 이용하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같은 형태로 .proto파일을 변환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Makefile을 이용하면 편함&lt;/p&gt;
&lt;pre id=&quot;code_1644310677253&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PROTOC = protoc -I=. \
	--go_out . --go_opt paths=source_relative \
	--go-grpc_out . --go-grpc_opt paths=source_relative $(프로토파일 경로)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers.google.com/protocol-buffers/docs/gotutorial&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developers.google.com/protocol-buffers/docs/gotutorial&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644310706829&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;Protocol Buffer Basics: Go &amp;nbsp;|&amp;nbsp; Protocol Buffers &amp;nbsp;|&amp;nbsp; Google Developers&quot; data-og-description=&quot;Protocol Buffer Basics: Go This tutorial provides a basic Go programmer's introduction to working with protocol buffers, using the proto3 version of the protocol buffers language. By walking through creating a simple example application, it shows you how t&quot; data-og-host=&quot;developers.google.com&quot; data-og-source-url=&quot;https://developers.google.com/protocol-buffers/docs/gotutorial&quot; data-og-url=&quot;https://developers.google.com/protocol-buffers/docs/gotutorial&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/y3NzY/hyNlfoIukc/RR4AzKrx0h3pPweeZKqe30/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://developers.google.com/protocol-buffers/docs/gotutorial&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.google.com/protocol-buffers/docs/gotutorial&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/y3NzY/hyNlfoIukc/RR4AzKrx0h3pPweeZKqe30/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;Protocol Buffer Basics: Go &amp;nbsp;|&amp;nbsp; Protocol Buffers &amp;nbsp;|&amp;nbsp; Google Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Protocol Buffer Basics: Go This tutorial provides a basic Go programmer's introduction to working with protocol buffers, using the proto3 version of the protocol buffers language. By walking through creating a simple example application, it shows you how t&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Golang</category>
      <category>go</category>
      <category>go grpc</category>
      <category>golang</category>
      <category>gRPC</category>
      <category>grpc protoc</category>
      <category>PROTO</category>
      <category>protoc</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/51</guid>
      <comments>https://hanpark.tistory.com/51#entry51comment</comments>
      <pubDate>Tue, 8 Feb 2022 17:58:50 +0900</pubDate>
    </item>
    <item>
      <title>[Golang + gRPC] gRPC를 사용하기 위해 필요한 패키지 정리</title>
      <link>https://hanpark.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* 기본적인 gRPC&lt;/p&gt;
&lt;pre id=&quot;code_1643971054611&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go get google.golang.org/grpc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* gRPC 요청 테스트를 위해(grpcurl, bloomrpc 등) 모든 gRPC를 등록하기 위한 리플렉션&lt;/p&gt;
&lt;pre id=&quot;code_1643971180049&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;google.golang.org/grpc/reflection&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* gRPC 요청에서 처리할 미들웨어 (캐싱, 유저 인증 등의 인터셉터)&lt;/p&gt;
&lt;pre id=&quot;code_1643971293359&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;go get github.com/grpc-ecosystem/go-grpc-middleware			
go get github.com/grpc-ecosystem/go-grpc-middleware/auth 	
go get github.com/grpc-ecosystem/go-grpc-middleware/loggin/logus	
go get github.com/grpc-ecosystem/go-grpc-middleware/recovery&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 각 순서대로 미들웨어, 유저 인증 관련, logging 관련, recovery(panic 발생했을 때 서버가 죽지 않게 복원해줌) 관련 미들웨어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 내용은 아래 링크를 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/grpc-ecosystem/go-grpc-middleware&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/grpc-ecosystem/go-grpc-middleware&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643971580991&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - grpc-ecosystem/go-grpc-middleware: Golang gRPC Middlewares: interceptor chaining, auth, logging, retries and more.&quot; data-og-description=&quot;Golang gRPC Middlewares: interceptor chaining, auth, logging, retries and more. - GitHub - grpc-ecosystem/go-grpc-middleware: Golang gRPC Middlewares: interceptor chaining, auth, logging, retries a...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/grpc-ecosystem/go-grpc-middleware&quot; data-og-url=&quot;https://github.com/grpc-ecosystem/go-grpc-middleware&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QhGo0/hyNjQOImvM/Q6Zpc9SczsMc8J3xCgHXYk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/grpc-ecosystem/go-grpc-middleware&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/grpc-ecosystem/go-grpc-middleware&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/QhGo0/hyNjQOImvM/Q6Zpc9SczsMc8J3xCgHXYk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - grpc-ecosystem/go-grpc-middleware: Golang gRPC Middlewares: interceptor chaining, auth, logging, retries and more.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Golang gRPC Middlewares: interceptor chaining, auth, logging, retries and more. - GitHub - grpc-ecosystem/go-grpc-middleware: Golang gRPC Middlewares: interceptor chaining, auth, logging, retries a...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; middleware는 unary, streaming 모두 따로 등록을 해줘야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt;간단한 middleware 사용법&lt;/p&gt;
&lt;pre id=&quot;code_1643971353282&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package router

import (
	&quot;context&quot;
	&quot;log&quot;
	&quot;net&quot;

	&quot;github.com/sirupsen/logrus&quot;

	grpc_middleware &quot;github.com/grpc-ecosystem/go-grpc-middleware&quot;
	grpc_auth &quot;github.com/grpc-ecosystem/go-grpc-middleware/auth&quot;
	grpc_logrus &quot;github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus&quot;
	grpc_recovery &quot;github.com/grpc-ecosystem/go-grpc-middleware/recovery&quot;

	&quot;google.golang.org/grpc&quot;
	&quot;google.golang.org/grpc/reflection&quot;
)

const (
	port = &quot;:9000&quot;
)

//유저 인증 JWT 토큰 Interceptor : token값을 decode하여 memId를 전달
func authInterceptor(ctx context.Context) (context.Context, error) {

	token, _ := grpc_auth.AuthFromMD(ctx, &quot;bearer&quot;)
	if len(token) == 0 {
		newCtx := context.WithValue(ctx, &quot;memId&quot;, &quot;&quot;)
		return newCtx, nil
	}

	memId, err := jwtUtil.ValidateToken(token)

	newCtx := context.WithValue(ctx, &quot;memId&quot;, memId)
	return newCtx, err
}

//cache를 위한 custom unary interceptor
func customCacheUnaryInterceptor() grpc.UnaryServerInterceptor {
	return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
		//handler를 통해 service가 처리된다!!
        res, err := handler(ctx, req)
		return res, err
	}
}

//cache custom streaming interceptor
func customCacheStreamInterceptor() grpc.StreamServerInterceptor {
	return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
		return handler(srv, ss)
	}
}

func SetupRouter() {
	lis, err := net.Listen(&quot;tcp&quot;, port)
	if err != nil {
		log.Fatalln(&quot;Failed to Listen :&quot;, err)
	}

	//log를 확인하기 위한 logrus
	logrus.ErrorKey = &quot;grpc.error&quot;
	logrusEntry := logrus.NewEntry(logrus.StandardLogger())

	s := grpc.NewServer(
		//unary server interceptor middleware
		grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer(
			//auth interceptor
			grpc_auth.UnaryServerInterceptor(authInterceptor),

			//logging interceptor
			grpc_logrus.UnaryServerInterceptor(logrusEntry),

			//recovery interceptor : panic 발생해도 프로그램 종료 안됨
			grpc_recovery.UnaryServerInterceptor(),

			//cache interceptor : custom
			customCacheUnaryInterceptor(),
		)),

		//streaming server interceptor middleware
		grpc.StreamInterceptor(grpc_middleware.ChainStreamServer(
			//auth_interceptor
			grpc_auth.StreamServerInterceptor(authInterceptor),

			//loggin_interceptor
			grpc_logrus.StreamServerInterceptor(logrusEntry),

			//recovery interceptor
			grpc_recovery.StreamServerInterceptor(),

			//cache interceptor : custom
			customCacheStreamInterceptor(),
		)),
	)
    
	reflection.Register(s)

	log.Printf(&quot;Start gRPC Server on %s server&quot;, port)
	if err := s.Serve(lis); err != nil {
		log.Fatalln(&quot;Failed to Open gRPC Server :&quot;, err)
	}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Dev/Golang</category>
      <category>go+grpc</category>
      <category>golang</category>
      <category>gRPC</category>
      <category>grpc middleware</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/50</guid>
      <comments>https://hanpark.tistory.com/50#entry50comment</comments>
      <pubDate>Fri, 4 Feb 2022 19:45:05 +0900</pubDate>
    </item>
    <item>
      <title>[MacOS 기본 설정] 기본적인 개발 환경 설정</title>
      <link>https://hanpark.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지속적인 업데이트 예정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 맥북 및 맥을 살 때마다 잊지 않고 설정 할 개발 환경들 정리..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;History&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2022.01.26 : 첫 작성 시작&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2022.02.08 : Java 설치 관련 수정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2022.02.17 : Golang 설치 관련&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;기본&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HomeBrew : 다양한 패키지 전부 HomeBrew로 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://brew.sh/index_ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://brew.sh/index_ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643190813641&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/index_ko&quot; data-og-url=&quot;https://brew.sh/index_ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oCrGw/hyNdlWbCKP/tmYvhNxa3VbcgfKPwp13WK/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560,https://scrap.kakaocdn.net/dn/eGyrQ/hyNdlWbCNB/QUiC9oFBY7857FHsVaIFk1/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560&quot;&gt;&lt;a href=&quot;https://brew.sh/index_ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://brew.sh/index_ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oCrGw/hyNdlWbCKP/tmYvhNxa3VbcgfKPwp13WK/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560,https://scrap.kakaocdn.net/dn/eGyrQ/hyNdlWbCNB/QUiC9oFBY7857FHsVaIFk1/img.png?width=1200&amp;amp;height=560&amp;amp;face=0_0_1200_560');&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Node : npm 등..&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nodejs.org/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://nodejs.org/en/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643190827188&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;Node.js&quot; data-og-description=&quot;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&quot; data-og-host=&quot;nodejs.org&quot; data-og-source-url=&quot;https://nodejs.org/en/&quot; data-og-url=&quot;https://nodejs.org/en/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yh7IM/hyNdl9sGZo/gWDpA4MTnDTJEMVs2mk6m0/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256,https://scrap.kakaocdn.net/dn/cGnqC5/hyNddKmZlD/XygEAtuo5weKe5gCahXXyk/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256&quot;&gt;&lt;a href=&quot;https://nodejs.org/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nodejs.org/en/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yh7IM/hyNdl9sGZo/gWDpA4MTnDTJEMVs2mk6m0/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256,https://scrap.kakaocdn.net/dn/cGnqC5/hyNddKmZlD/XygEAtuo5weKe5gCahXXyk/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256');&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;Node.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nodejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NVM : Node Version Manager&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/nvm-sh/nvm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/nvm-sh/nvm&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643191441817&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions&quot; data-og-description=&quot;Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active nod...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/nvm-sh/nvm&quot; data-og-url=&quot;https://github.com/nvm-sh/nvm&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1aEJ3/hyNdoyGvHn/UuoDxs5HOKrpuXlLSa1Aok/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/nvm-sh/nvm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/nvm-sh/nvm&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1aEJ3/hyNdoyGvHn/UuoDxs5HOKrpuXlLSa1Aok/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active nod...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JAVA(22.02.08 수정) : &lt;s&gt;버전 확인해서 필요한 버전으로 설치하기&lt;/s&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.oracle.com/java/technologies/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.oracle.com/java/technologies/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;brew를 이용하기&lt;/p&gt;
&lt;pre id=&quot;code_1644328288492&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew update
brew tap adoptopenjdk/openjdk
brew install [원하는 버전]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후,&lt;b&gt; bash shell을 사용한다면 ~/.bash_profile 을, zsh shell을 사용한다면 ~/.zshrc를 수정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레퍼런스가 아래에 잘 나와있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://llighter.github.io/install-java-on-mac/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://llighter.github.io/install-java-on-mac/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644328355930&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;맥에서 Brew로 자바 설치하기(feat. 자바버전 바꾸기)&quot; data-og-description=&quot; &quot; data-og-host=&quot;llighter.github.io&quot; data-og-source-url=&quot;https://llighter.github.io/install-java-on-mac/&quot; data-og-url=&quot;https://llighter.github.io/install-java-on-mac/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AbLJE/hyNlfWGEvZ/7B8vChAyWyId8TbvBBhB60/img.jpg?width=4000&amp;amp;height=5000&amp;amp;face=0_0_4000_5000,https://scrap.kakaocdn.net/dn/bldCHa/hyNldxLhFE/OTfn7G7rdmeYeFjiogajVk/img.jpg?width=4000&amp;amp;height=5000&amp;amp;face=0_0_4000_5000&quot;&gt;&lt;a href=&quot;https://llighter.github.io/install-java-on-mac/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://llighter.github.io/install-java-on-mac/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AbLJE/hyNlfWGEvZ/7B8vChAyWyId8TbvBBhB60/img.jpg?width=4000&amp;amp;height=5000&amp;amp;face=0_0_4000_5000,https://scrap.kakaocdn.net/dn/bldCHa/hyNldxLhFE/OTfn7G7rdmeYeFjiogajVk/img.jpg?width=4000&amp;amp;height=5000&amp;amp;face=0_0_4000_5000');&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;맥에서 Brew로 자바 설치하기(feat. 자바버전 바꾸기)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;llighter.github.io&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Git : 깃&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://git-scm.com/downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://git-scm.com/downloads&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643191099271&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;Git - Downloads&quot; data-og-description=&quot;Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp&quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/downloads&quot; data-og-url=&quot;https://git-scm.com/downloads&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://git-scm.com/downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/downloads&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Git - Downloads&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;git-scm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Notion : 협업 관리 툴&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/ko-kr/product?utm_source=google&amp;amp;utm_campaign=10805039169&amp;amp;utm_medium=104440699897&amp;amp;utm_content=455555244437&amp;amp;utm_term=notion&amp;amp;targetid=kwd-312974742&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gbh6XmFj1wRzKnJ-SUCo9e612gUwOqVpEH3ZAY5L7bpRYVDmBp7jtwaApIrEALw_wcB&quot;&gt;https://www.notion.so/ko-kr/product?utm_source=google&amp;amp;utm_campaign=10805039169&amp;amp;utm_medium=104440699897&amp;amp;utm_content=455555244437&amp;amp;utm_term=notion&amp;amp;targetid=kwd-312974742&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gbh6XmFj1wRzKnJ-SUCo9e612gUwOqVpEH3ZAY5L7bpRYVDmBp7jtwaApIrEALw_wcB&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1643191427428&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;Notion &amp;ndash; 메모, 작업, 위키, 데이터베이스를 위한 올인원 워크스페이스&quot; data-og-description=&quot;매일 쓰는 여러 업무용 앱을 하나로 합친 새로운 도구. 당신과 당신의 팀을 위한 올인원 워크스페이스예요.&quot; data-og-host=&quot;www.notion.so&quot; data-og-source-url=&quot;https://www.notion.so/ko-kr/product?utm_source=google&amp;amp;utm_campaign=10805039169&amp;amp;utm_medium=104440699897&amp;amp;utm_content=455555244437&amp;amp;utm_term=notion&amp;amp;targetid=kwd-312974742&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gbh6XmFj1wRzKnJ-SUCo9e612gUwOqVpEH3ZAY5L7bpRYVDmBp7jtwaApIrEALw_wcB&quot; data-og-url=&quot;https://www.notion.so/ko-kr/product&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dZeaCx/hyNdgUWZNH/CCX43olBJzWygBQjPDP7V1/img.png?width=1200&amp;amp;height=630&amp;amp;face=907_290_1002_395,https://scrap.kakaocdn.net/dn/c08d9d/hyNdoZLh7T/gpUyTrEasD0NMW96KdmDB1/img.png?width=1200&amp;amp;height=630&amp;amp;face=907_290_1002_395&quot;&gt;&lt;a href=&quot;https://www.notion.so/ko-kr/product?utm_source=google&amp;amp;utm_campaign=10805039169&amp;amp;utm_medium=104440699897&amp;amp;utm_content=455555244437&amp;amp;utm_term=notion&amp;amp;targetid=kwd-312974742&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gbh6XmFj1wRzKnJ-SUCo9e612gUwOqVpEH3ZAY5L7bpRYVDmBp7jtwaApIrEALw_wcB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/ko-kr/product?utm_source=google&amp;amp;utm_campaign=10805039169&amp;amp;utm_medium=104440699897&amp;amp;utm_content=455555244437&amp;amp;utm_term=notion&amp;amp;targetid=kwd-312974742&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gbh6XmFj1wRzKnJ-SUCo9e612gUwOqVpEH3ZAY5L7bpRYVDmBp7jtwaApIrEALw_wcB&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dZeaCx/hyNdgUWZNH/CCX43olBJzWygBQjPDP7V1/img.png?width=1200&amp;amp;height=630&amp;amp;face=907_290_1002_395,https://scrap.kakaocdn.net/dn/c08d9d/hyNdoZLh7T/gpUyTrEasD0NMW96KdmDB1/img.png?width=1200&amp;amp;height=630&amp;amp;face=907_290_1002_395');&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;Notion &amp;ndash; 메모, 작업, 위키, 데이터베이스를 위한 올인원 워크스페이스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매일 쓰는 여러 업무용 앱을 하나로 합친 새로운 도구. 당신과 당신의 팀을 위한 올인원 워크스페이스예요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.notion.so&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Chrome&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.google.co.kr/chrome/?brand=FHFK&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gb29xye8B-j7x66H7gcDD6VSeohOLrGpa30ynr1AMZIHvW0Lw9orAoaAi-xEALw_wcB&amp;amp;gclsrc=aw.ds&quot;&gt;https://www.google.co.kr/chrome/?brand=FHFK&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gb29xye8B-j7x66H7gcDD6VSeohOLrGpa30ynr1AMZIHvW0Lw9orAoaAi-xEALw_wcB&amp;amp;gclsrc=aw.ds&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1643191917640&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;Chrome 웹브라우저&quot; data-og-description=&quot;더욱 스마트해진 Google로 더 간편하고 안전하고 빠르게.&quot; data-og-host=&quot;www.google.com&quot; data-og-source-url=&quot;https://www.google.co.kr/chrome/?brand=FHFK&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gb29xye8B-j7x66H7gcDD6VSeohOLrGpa30ynr1AMZIHvW0Lw9orAoaAi-xEALw_wcB&amp;amp;gclsrc=aw.ds&quot; data-og-url=&quot;https://www.google.com/intl/ko_ALL/chrome/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.google.co.kr/chrome/?brand=FHFK&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gb29xye8B-j7x66H7gcDD6VSeohOLrGpa30ynr1AMZIHvW0Lw9orAoaAi-xEALw_wcB&amp;amp;gclsrc=aw.ds&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.google.co.kr/chrome/?brand=FHFK&amp;amp;gclid=Cj0KCQiA_8OPBhDtARIsAKQu0gb29xye8B-j7x66H7gcDD6VSeohOLrGpa30ynr1AMZIHvW0Lw9orAoaAi-xEALw_wcB&amp;amp;gclsrc=aw.ds&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Chrome 웹브라우저&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;더욱 스마트해진 Google로 더 간편하고 안전하고 빠르게.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.google.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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;프론트&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;React : 웹&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1643191803194&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g create-react-app&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;React Native CLI : 하이브리드 앱&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1643191819000&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g @react-native-community/cli&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;백엔드&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Golang : 언어&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://go.dev/dl/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://go.dev/dl/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645024855030&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;Downloads - The Go Programming Language&quot; data-og-description=&quot;Downloads After downloading a binary release suitable for your system, please follow the installation instructions. If you are building from source, follow the source installation instructions. See the release history for more information about Go releases&quot; data-og-host=&quot;go.dev&quot; data-og-source-url=&quot;https://go.dev/dl/&quot; data-og-url=&quot;https://go.dev/dl/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://go.dev/dl/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://go.dev/dl/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Downloads - The Go Programming Language&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Downloads After downloading a binary release suitable for your system, please follow the installation instructions. If you are building from source, follow the source installation instructions. See the release history for more information about Go releases&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;go.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추후에 protoc등을 이용하기 위해, 그리고 라이브러리 등을 사용하는데 문제가 없도록 환경 변수를 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;golang 설치 후 goroot 등을 굳이 건드리지 않아도, 아래와 같이 환경 변수만 설정해주면 go mod를 사용하는데 문제는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;~/.zshrc 혹은 ~/.bash_profile에 아래와 같이 환경변수를 설정해준다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1645025075540&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;IDE&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;XCode : iOS 및 Mac 빌드, Swift&lt;/li&gt;
&lt;li&gt;VSC : Golang, JavaScript, TypeScript, Python, SSH, Debug, React, React-Native, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://code.visualstudio.com&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643190914542&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;Visual Studio Code - Code Editing. Redefined&quot; data-og-description=&quot;Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.&amp;nbsp; Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.&quot; data-og-host=&quot;code.visualstudio.com&quot; data-og-source-url=&quot;https://code.visualstudio.com&quot; data-og-url=&quot;https://code.visualstudio.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oFnD0/hyNdgAEU0U/aljqgxblrnDsN2AUQdsyz1/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://code.visualstudio.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oFnD0/hyNdgAEU0U/aljqgxblrnDsN2AUQdsyz1/img.png?width=1012&amp;amp;height=506&amp;amp;face=0_0_1012_506');&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;Visual Studio Code - Code Editing. Redefined&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.&amp;nbsp; Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;code.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IntelliJ : Java, Spring, Spring Boot, ...&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.jetbrains.com/ko-kr/idea/download/#section=mac&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.jetbrains.com/ko-kr/idea/download/#section=mac&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643190927899&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;다운로드 IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.jetbrains.com&quot; data-og-source-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/#section=mac&quot; data-og-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/#section=mac&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.jetbrains.com/ko-kr/idea/download/#section=mac&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/#section=mac&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;다운로드 IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.jetbrains.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Postman : HTTP api Test (REST api Test)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.postman.com/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.postman.com/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643190950927&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;Download Postman | Get Started for Free&quot; data-og-description=&quot;Try Postman for free! Join 17 million developers who rely on Postman, the collaboration platform for API development. Create better APIs&amp;mdash;faster.&quot; data-og-host=&quot;www.postman.com&quot; data-og-source-url=&quot;https://www.postman.com/downloads/&quot; data-og-url=&quot;https://www.postman.com/downloads/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/KPPe6/hyNdgObD2q/Ey1J3qioTTMAkqOIzZDvQk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/kY9ib/hyNdiysHEn/09NFgs2sx5KXG76cg7MiJK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.postman.com/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.postman.com/downloads/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/KPPe6/hyNdgObD2q/Ey1J3qioTTMAkqOIzZDvQk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/kY9ib/hyNdiysHEn/09NFgs2sx5KXG76cg7MiJK/img.jpg?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;Download Postman | Get Started for Free&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Try Postman for free! Join 17 million developers who rely on Postman, the collaboration platform for API development. Create better APIs&amp;mdash;faster.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.postman.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BloomRPC : gRPC Test(RPC Test)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/bloomrpc/bloomrpc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/bloomrpc/bloomrpc&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643190971067&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - bloomrpc/bloomrpc: GUI Client for GRPC Services&quot; data-og-description=&quot;GUI Client for GRPC Services. Contribute to bloomrpc/bloomrpc development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/bloomrpc/bloomrpc&quot; data-og-url=&quot;https://github.com/bloomrpc/bloomrpc&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xa0J2/hyNdfBK7rC/jVrKG9AkK68gvWCF1USziK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/bloomrpc/bloomrpc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/bloomrpc/bloomrpc&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xa0J2/hyNdfBK7rC/jVrKG9AkK68gvWCF1USziK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - bloomrpc/bloomrpc: GUI Client for GRPC Services&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;GUI Client for GRPC Services. Contribute to bloomrpc/bloomrpc development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DBeaver : DB Manage Tool (for SQL)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dbeaver.io/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dbeaver.io/download/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643190999472&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;Download | DBeaver Community&quot; data-og-description=&quot;Download Tested and verified for MS Windows, Linux and Mac OS X. Install: Windows installer &amp;ndash; run installer executable. It will automatically upgrade version (if needed). MacOS DMG &amp;ndash; just run it and drag-n-drop DBeaver into Applications. Debian package&quot; data-og-host=&quot;dbeaver.io&quot; data-og-source-url=&quot;https://dbeaver.io/download/&quot; data-og-url=&quot;https://dbeaver.io/download/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dbeaver.io/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dbeaver.io/download/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Download | DBeaver Community&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download Tested and verified for MS Windows, Linux and Mac OS X. Install: Windows installer &amp;ndash; run installer executable. It will automatically upgrade version (if needed). MacOS DMG &amp;ndash; just run it and drag-n-drop DBeaver into Applications. Debian package&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dbeaver.io&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&amp;nbsp;DB - 컨테이너로 관리하기&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MongoDB : NOSQL&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.mongodb.com/manual/reference/program/mongod/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.mongodb.com/manual/reference/program/mongod/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643191230577&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;mongod &amp;mdash; MongoDB Manual&quot; data-og-description=&quot;Docs Home &amp;rarr; MongoDB Manualmongod is the primary daemon process for the MongoDB system. It handles data requests, manages data access, and performs background management operations.This document provides a complete overview of all command line options for&quot; data-og-host=&quot;docs.mongodb.com&quot; data-og-source-url=&quot;https://docs.mongodb.com/manual/reference/program/mongod/&quot; data-og-url=&quot;https://docs.mongodb.com/manual/reference/program/mongod/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2hImG/hyNdoZLpaE/iY4jVPAootZGK17CB2J46K/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601,https://scrap.kakaocdn.net/dn/dA1OAj/hyNdgtSEQn/dwdMRPvIjMtbYrDy2bI82k/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601&quot;&gt;&lt;a href=&quot;https://docs.mongodb.com/manual/reference/program/mongod/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.mongodb.com/manual/reference/program/mongod/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2hImG/hyNdoZLpaE/iY4jVPAootZGK17CB2J46K/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601,https://scrap.kakaocdn.net/dn/dA1OAj/hyNdgtSEQn/dwdMRPvIjMtbYrDy2bI82k/img.png?width=1200&amp;amp;height=601&amp;amp;face=0_0_1200_601');&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;mongod &amp;mdash; MongoDB Manual&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docs Home &amp;rarr; MongoDB Manualmongod is the primary daemon process for the MongoDB system. It handles data requests, manages data access, and performs background management operations.This document provides a complete overview of all command line options for&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.mongodb.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1644328162874&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull mongo&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Redis : NOSQL(For Cache, Log, ...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://redis.io&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://redis.io&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643191247780&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;Redis&quot; data-og-description=&quot;Try it Ready for a test drive? Check this interactive tutorial that will walk you through the most important features of Redis. Download it Redis 6.2.6 is the latest stable version. Interested in release candidates or unstable versions? Check the downloads&quot; data-og-host=&quot;redis.io&quot; data-og-source-url=&quot;https://redis.io&quot; data-og-url=&quot;https://redis.io&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://redis.io&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://redis.io&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Redis&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Try it Ready for a test drive? Check this interactive tutorial that will walk you through the most important features of Redis. Download it Redis 6.2.6 is the latest stable version. Interested in release candidates or unstable versions? Check the downloads&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;redis.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1644328193288&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull redis&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PostgreSQL (or Extra SQL)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1644328203490&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull postgres&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;컨테이너&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1643191342522&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install --cask docker&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Note</category>
      <category>Mac 개발환경 정리</category>
      <author>카일</author>
      <guid isPermaLink="true">https://hanpark.tistory.com/49</guid>
      <comments>https://hanpark.tistory.com/49#entry49comment</comments>
      <pubDate>Wed, 26 Jan 2022 19:12:49 +0900</pubDate>
    </item>
  </channel>
</rss>