<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>개발자는 언제나 에러 뒤 흐림</title>
        <link>https://velog.io/</link>
        <description>소다맛의 기술 블로그입니다.</description>
        <lastBuildDate>Tue, 23 Aug 2022 06:42:11 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>개발자는 언제나 에러 뒤 흐림</title>
            <url>https://images.velog.io/images/soda_flavour/profile/132fa233-2d01-437a-92e0-991ab05288b3/social.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 개발자는 언제나 에러 뒤 흐림. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/soda_flavour" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[docker-compose+ rabbitmq]]></title>
            <link>https://velog.io/@soda_flavour/docker-compose-rabbitmq</link>
            <guid>https://velog.io/@soda_flavour/docker-compose-rabbitmq</guid>
            <pubDate>Tue, 23 Aug 2022 06:42:11 GMT</pubDate>
            <description><![CDATA[<p>이글은 오라클클라우드에 docker와 docker-compose가 설치되어 있는것을 전제로 한다.</p>
<p>설치방법은 아래의 링크를 참고하면 된다.
<a href="https://velog.io/@soda_flavour/Oracle-cloud-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-mac-%ED%84%B0%EB%AF%B8%EB%84%90-%EC%A0%91%EC%86%8D">Oracle cloud 인스턴스 생성 </a>
<a href="https://velog.io/@soda_flavour/CentOS-Docker-Docker-compose">CentOS 7 + Docker + Docker-compose</a></p>
<hr>
<h2 id="1rabbitmq-설치">1.RabbitMQ 설치</h2>
<p>centos 접속 후 rabbitmq에 대한 정보를 저장할 폴더를 만들도록 한다.</p>
<pre><code>$ sudo mkdir project
$ cd project
$ sudo mkdir rabbitmq
$ cd rabbitmq
$ pwd

/project/rabbitmq
</code></pre><hr>
<p>먼저 여기에 도커파일을 먼저 생성한다.
도커 파일에는 rabbitmq의 mqtt, stomp, rabbitmq_federation_management 가 추가되어 있다.</p>
<pre><code>$ sudo vi Dockerfile

#내용 시작
FROM rabbitmq:3-management
RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp
#내용 끝

:wq #저장</code></pre><hr>
<p>같은 폴더에 docker-compose.yml 파일을 생성해준다</p>
<ul>
<li>build 에서는 생성한 도커 파일을 사용하게 한다.</li>
<li>볼륨을 지정하여 mq가 재시작 되더라도 유지 될 수 있도록 한다.</li>
<li>rabbitmq가 사용하는 포트를 모두 열어 두었다. (필요한것만 열어도 된다.)</li>
</ul>
<pre><code>version: &quot;2.6&quot;
services:
  rabbitmq:
    build: .
    container_name: rabbitmq-master
    volumes:
      - /project/rabbitmq:/var/lib/rabbitmq/
    ports:
      - &quot;15672:15672&quot;
      - &quot;5671:5671&quot;
      - &quot;5672:5672&quot;
      - &quot;61613:61613&quot;
      - &quot;61614:61614&quot;
      - &quot;4369:4369&quot;
      - &quot;25672:25672&quot;
      - &quot;1883:1883&quot;
      - &quot;8883:8883&quot;
    environment:
      RABBITMQ_DEFAULT_USER: &quot;admin&quot;
      RABBITMQ_DEFAULT_PASS: &quot;rkskekfkakqktk&quot;</code></pre><hr>
<p>해당 폴더 위치에서 docker compose 를 실행하면 rabbitmq 가 실행된다.</p>
<pre><code>docker compose up -d</code></pre><hr>
<h2 id="2rabbitmq-관리자-접속텍스트">2.RabbitMQ 관리자 접속텍스트</h2>
<ul>
<li>오라클 클라우드 기준 관리자 접속은 브라우저에서 
http://공인아이피:15672 로 접속하면 가능하다.<ul>
<li>다만 15672의 포트를 외부에서도 접속할 수 있게 열어주어야한다.</li>
<li>마찬가지로 위에 docker-compose.yml파일에 작성된 포트도 모두 열어주도록 한다.</li>
</ul>
</li>
</ul>
<p> <img src="https://velog.velcdn.com/images/soda_flavour/post/f1182a83-28ab-4e9d-867f-d3f3660c221a/image.png" alt=""></p>
<hr>
<ul>
<li>rabbitmq의 접속정보는 위에 environment에 작성한 아이디와 패스워드이다.
<img src="https://velog.velcdn.com/images/soda_flavour/post/81cf9a9a-5c4a-4782-be6d-c3b0a505f333/image.png" alt=""></li>
</ul>
<hr>
<ul>
<li>접속됨을 확인한다.
<img src="https://velog.velcdn.com/images/soda_flavour/post/d858af92-5062-4b13-b461-a1134c5b0cb2/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[CentOS 7 + Docker + Docker-compose]]></title>
            <link>https://velog.io/@soda_flavour/CentOS-Docker-Docker-compose</link>
            <guid>https://velog.io/@soda_flavour/CentOS-Docker-Docker-compose</guid>
            <pubDate>Mon, 22 Aug 2022 08:39:37 GMT</pubDate>
            <description><![CDATA[<p>무료 오라클 서버에 설치하자 한다면 이 링크를 먼저 진행해주세요</p>
<p><a href="https://velog.io/@soda_flavour/Oracle-cloud-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-mac-%ED%84%B0%EB%AF%B8%EB%84%90-%EC%A0%91%EC%86%8D">Oracle cloud 인스턴스 생성</a></p>
<hr>
<p>먼저 yum 패키지 업데이트부터 진행한다.</p>
<pre><code>sudo yum -y update</code></pre><p>사실 CentOS에 Docker 설치는 공식 홈페이지에가면 자세하기 나와있음으로 
아래의 내용은 이 진행을 따라해 보는것이다(공홈으로 가세요~!!)</p>
<blockquote>
<p><a href="https://docs.docker.com/engine/install/centos/">https://docs.docker.com/engine/install/centos/</a></p>
</blockquote>
<hr>
<p>혹시 모르는 오래된 버전들을 삭제해줍니다.</p>
<pre><code> $ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine</code></pre><hr>
<p>패키지 매니저 관련 유틸들도 업데이트 합니다.</p>
<pre><code>$ sudo yum install -y yum-utils</code></pre><hr>
<p>도커 레포 추가해줍니다.</p>
<pre><code>$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo</code></pre><hr>
<p>도커를 설치합니다. </p>
<pre><code>$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin  -y</code></pre><hr>
<p>도커를 실행하고 데몬등록을 진행합니다.</p>
<pre><code>$ systemctl start docker
$ systemctl enable docker</code></pre><hr>
<pre><code>$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at 
unix:///var/run/docker.sock: Get &quot;http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json&quot;: 
dial unix /var/run/docker.sock: connect: permission denied</code></pre><p>에러가 나오면 해당 유저를 도커 그룹에 추가해주어야 한다</p>
<pre><code>sudo usermod -aG docker $USER</code></pre><p>이후 세션을 닫고 다시 열어준 후(커맨드창 다시 열기) 도커 명령어를 실행하면 동작한다.</p>
<pre><code>docker --version
docker ps
</code></pre><hr>
<p>Docker compose 는 위에서 이미 설치 되었습니다.</p>
<pre><code>$ docker compose version
Docker Compose version v2.6.0</code></pre><blockquote>
<p><a href="https://docs.docker.com/engine/install/centos/">https://docs.docker.com/engine/install/centos/</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Oracle cloud 인스턴스 생성 + mac 터미널 접속]]></title>
            <link>https://velog.io/@soda_flavour/Oracle-cloud-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-mac-%ED%84%B0%EB%AF%B8%EB%84%90-%EC%A0%91%EC%86%8D</link>
            <guid>https://velog.io/@soda_flavour/Oracle-cloud-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1-mac-%ED%84%B0%EB%AF%B8%EB%84%90-%EC%A0%91%EC%86%8D</guid>
            <pubDate>Mon, 22 Aug 2022 05:18:32 GMT</pubDate>
            <description><![CDATA[<p>오라클 클라우드(이하 오클)가입은 일단 패스하도록 하고 인스턴스 생성부터 알아보자</p>
<h2 id="1-오클-인스턴스-생성">1. 오클 인스턴스 생성</h2>
<p>메인화면에서 Create a VM instance를 찾아 클릭한다
<img src="https://velog.velcdn.com/images/soda_flavour/post/c86bdb57-e4f7-4804-9aab-39ef7932302a/image.png" alt=""></p>
<hr>
<p>내용을 입력하자 궁극적으로 RabbitMQ도 설치를 할것임으로 queue라는 이름을 쓰기로 했다.
<img src="https://velog.velcdn.com/images/soda_flavour/post/6f994aeb-701c-42ac-bdae-46edbe94172b/image.png" alt=""></p>
<hr>
<p>중간에 이미지를 선택하여 변경할 수 있다.
기본값으로 오라클 리눅스가 선택되어있는데 CentOS 7으로 변경했다.</p>
<p><img src="https://velog.velcdn.com/images/soda_flavour/post/cf659d20-5265-4e27-9b07-9a87aae2ddc8/image.png" alt=""></p>
<hr>
<p>Add SSH keys 항목을보면 save버튼이 두개 있는데, 두개 다 다운받아 저장하여 관리하도록 하자.
<img src="https://velog.velcdn.com/images/soda_flavour/post/8d3deed1-25cf-4478-9561-4c6442cb8179/image.png" alt=""></p>
<hr>
<p>생성을 클릭~!</p>
<hr>
<p>컴퓨트 &gt; 인스턴스를 찾아가면 생성되고있음을 볼 수 있다(두개는 삭제중... )
<img src="https://velog.velcdn.com/images/soda_flavour/post/171818fd-c72c-4a27-9733-ec548ba79fe1/image.png" alt=""></p>
<hr>
<p>mac 터미널에서 오클 인스턴스에 접속해보겠다.</p>
<p>먼저 아까 다운받은 키파일일 사용해야 한다.</p>
<p>터미널을 열고 해당 키파일이 존재하는 폴더로 이동한후</p>
<pre><code>ssh -i ./키파일이름 opc@공인아이피</code></pre><p>를 입력하자
공인아이피 및 아이디는 아까전 생성 인스턴스를 클릭하면 상세정보가 나오는데 거기서 확인할 수 있다
<img src="https://velog.velcdn.com/images/soda_flavour/post/b319a2c5-9d88-473a-95d7-e90af2263347/image.png" alt=""></p>
<hr>
<p>그러면 당연하게도 에러가 나온다</p>
<pre><code>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for &#39;./ssh-key-2022-08-22.key&#39; are too open.</code></pre><p>키파일 퍼미션으로 인한 에러이다 
해당 키파일의 퍼미션을 변경해준다.</p>
<pre><code> chmod 400 ./키파일이름</code></pre><p>다시 접속해본다
그러면 해당 인스턴스로 접속이 됨을 확인할 수 있다.</p>
<pre><code>[opc@queue ~]$ </code></pre><p>만약 접속이 되지 않고 멈춘듯한 느낌이 든다면, 서브넷 설정에 22번 포트가 열리지 않았을 수 있다.
인스턴스 상세 화면에서 Subnet 항목을 클릭해준다.</p>
<p><img src="https://velog.velcdn.com/images/soda_flavour/post/fda412eb-d0de-4f6f-bbec-a97d34c952d6/image.png" alt=""></p>
<p>그리고 세큐리티 리스트에 있는 디폴트 세큐리티를 클릭한다.
<img src="https://velog.velcdn.com/images/soda_flavour/post/116208d7-2786-4b8e-b855-dd630da8fd74/image.png" alt=""></p>
<p>Ingress Rules에 22번 포트가 없다면 추가 해주어야 한다.</p>
<p>프로토콜을 클릭하면 아래는 알아서 채워진다. CIDR은 전체로 하기위해 이미지처럼 입력해준다.
<img src="https://velog.velcdn.com/images/soda_flavour/post/7f668f2b-6ac0-46f4-82f9-355828609cfd/image.png" alt=""></p>
<p>생성후 접속하면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[m1 mac에 docker-compose 로 kafka 설치]]></title>
            <link>https://velog.io/@soda_flavour/m1-mac%EC%97%90-docker-compose-%EB%A1%9C-kafka-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@soda_flavour/m1-mac%EC%97%90-docker-compose-%EB%A1%9C-kafka-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Thu, 18 Aug 2022 01:37:48 GMT</pubDate>
            <description><![CDATA[<p>m1맥은 arm64 이기 때문에 kafka 설치시 arm64를 지원하는 이미지로 사용해야한다. 여러가지 삽질 후에 글을 남긴다</p>
<h2 id="1-zookeeper--kafka">1. zookeeper + kafka</h2>
<pre><code>$ git clone https://github.com/wurstmeister/kafka-docker
$ cd kafka-docker
$ vi docker-compose.yml

#내용의 시작
version: &#39;3&#39;

services:
  zookeeper:
    image: zookeeper
    ports:
      - &quot;2181:2181&quot;

  kafka:
    build: .
    ports:
      - &quot;9092:9092&quot;
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
#내용의 끝

:wq # 저장하기

$ docker-compose up</code></pre><blockquote>
<p>참고
<a href="https://blog.advenoh.pe.kr/cloud/%EB%A1%9C%EC%BB%AC%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Kafka-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-with-AKHQ/">https://blog.advenoh.pe.kr/cloud/%EB%A1%9C%EC%BB%AC%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-Kafka-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-with-AKHQ/</a>
<a href="https://github.com/wurstmeister/kafka-docker/issues/647">https://github.com/wurstmeister/kafka-docker/issues/647</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[flutter]  get version is 9.0 to 14.0.99. ~에러]]></title>
            <link>https://velog.io/@soda_flavour/flutter-get-version-is-9.0-to-14.0.99.-%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@soda_flavour/flutter-get-version-is-9.0-to-14.0.99.-%EC%97%90%EB%9F%AC</guid>
            <pubDate>Wed, 21 Oct 2020 06:07:50 GMT</pubDate>
            <description><![CDATA[<h1 id="에러내용">에러내용</h1>
<p><img src="https://images.velog.io/images/soda_flavour/post/2d58705e-26ef-4a88-9f48-66bad0c412a2/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-10-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.37.05.png" alt=""></p>
<p>아이폰 시뮬레이터로 동작시에 해당 에러가 나오면서 동작이 안되는 것이다.</p>
<h1 id="해결">해결</h1>
<h2 id="타켓버전-수정">타켓버전 수정</h2>
<p>우선 프로젝트의 xcode로 <strong>Runner.xcworkspace</strong>을 열어 프로젝트 러너의 iOS Deployment Target 의 버전을 경고의 최소 버전인 9.0으로 바꾸어 주었다.</p>
<p><img src="https://images.velog.io/images/soda_flavour/post/868ebe18-297f-4087-9258-07cdd6ae1390/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-10-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.39.24.png" alt=""></p>
<h2 id="에러-확인">에러 확인</h2>
<p>하지만 여전히 같은 내용를 보이며 실행이 되지 않는데, 이는 dart 코드 내의 코드에 에러가 있는것이다. 
하지만 vsCode 상에서는 에러를 알려주지 않는다.;;</p>
<h3 id="이를-확인하기-위해서는-xcode-내에서-런을-시키면-에러를-확인할-수-있다">이를 확인하기 위해서는 Xcode 내에서 런을 시키면 에러를 확인할 수 있다.</h3>
<p><img src="https://images.velog.io/images/soda_flavour/post/ff6c4df7-e514-40a1-a0c3-a34f3b0464b4/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-10-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.44.14.png" alt=""></p>
<p>에러를 확인하니  flutter_form_builder 라이브러리에 문제가 있는것 같다. 
따라서 라이브러리의 버전을 최신버전인 3.14.0 으로 바꾸어줬다.</p>
<p>하지만 이번에는 여전히 에러....</p>
<p><img src="https://images.velog.io/images/soda_flavour/post/43b992a0-a18f-4f44-b920-83a20abea438/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-10-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%202.46.47.png" alt=""></p>
<p>이번에도 에러를 확인해보니 autovalidate라는 파라미터가 존재하지 않는다는 에러이다.
라이브러리가 업데이트되면서 파라미터명이 바뀜을 확인했다. </p>
<p>수정하고 런하면 문제 없이 동작~!</p>
<h1 id="끝으로">끝으로</h1>
<p> vscode상에서 에러를 알려줘야 할것 같은데 에러인듯하다.. 
 파라미터 에러는 버전을 업데이트하고 vscode clean 재시작을 해도 바로 알려주는듯 하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[아파치 2, SSL, Socket.io 설정하기]]></title>
            <link>https://velog.io/@soda_flavour/%EC%95%84%ED%8C%8C%EC%B9%98-2-SSL-Socket.io-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@soda_flavour/%EC%95%84%ED%8C%8C%EC%B9%98-2-SSL-Socket.io-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 21 Sep 2020 06:09:50 GMT</pubDate>
            <description><![CDATA[<h2 id="intro">intro</h2>
<p>아파치2에서 ssl 적용상태에서 socket.io를 적용하는 방법이다.</p>
<h2 id="풀코드">풀코드</h2>
<pre><code>&lt;VirtualHost *:80&gt;
  ServerName &quot;############&quot;
  ServerAdmin webmaster@localhost
  DocumentRoot &quot;############&quot;
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost&gt;

&lt;VirtualHost *:443&gt;
  ServerName &quot;############&quot;
  ServerAlias &quot;############&quot;
  ServerAdmin contact@example.com
  DocumentRoot &quot;############&quot;

  ProxyRequests Off
  SSLProxyEngine on

  ProxyPreserveHost On
  AllowEncodedSlashes NoDecode

  &lt;Proxy *&gt;
    Order deny,allow
    Allow from all
  &lt;/proxy&gt;


  SSLEngine on
  SSLProxyVerify none
  SSLProxyCheckPeerCN off
  SSLProxyCheckPeerName off
  SSLProxyCheckPeerExpire off

  SSLCertificateFile &quot;############&quot;
  SSLCertificateKeyFile &quot;############&quot;
  SSLCertificateChainFile &quot;############&quot;


  ProxyPass / http://127.0.0.1:3000/ nocanon
  ProxyPassReverse / http://127.0.0.1:3000/
  Alias /수정 /var/www/html/수정


  RewriteEngine On
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://localhost:3000/$1 [P,L]

  ProxyPass        /socket.io http://localhost:3000/socket.io
  ProxyPassReverse /socket.io http://localhost:3000/socket.io

  RequestHeader set X-Forwarded-Proto &quot;https&quot;
  RequestHeader set X-Forwarded-Port &quot;443&quot;

  ErrorLog ${APACHE_LOG_DIR}/example-error.log
  CustomLog ${APACHE_LOG_DIR}/example-access.log combined
&lt;/VirtualHost&gt;

</code></pre><h2 id="내용">내용</h2>
<p>&quot;############&quot; 부분을 수정해서 사용하면 된다.
nodeJS가 동작하는 내부포트 3000으로 프록시를 해준다.
URL에 socket.io, 쿼리 스트링에 transport=websocket을 달고 오는 요청을 3000번으로 연결해준다.</p>
<h2 id="체크-사항">체크 사항</h2>
<p>** 1. socket.io.js 경로 파일이 접속되는지 확인한다.
2. 프론트 js의 소켓 연결단에서 try catch 로 연결여부를 확인해본다.**</p>
]]></description>
        </item>
    </channel>
</rss>