<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>pairpilot.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Mon, 14 Nov 2022 07:49:52 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>pairpilot.log</title>
            <url>https://velog.velcdn.com/images/kimjh18_idt/profile/00bcb753-f76f-4a7f-954e-5ce1a6c54f38/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. pairpilot.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kimjh18_idt" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Re] 프로젝트 협업 게시판]]></title>
            <link>https://velog.io/@kimjh18_idt/Re-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%98%91%EC%97%85-%EA%B2%8C%EC%8B%9C%ED%8C%90</link>
            <guid>https://velog.io/@kimjh18_idt/Re-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%98%91%EC%97%85-%EA%B2%8C%EC%8B%9C%ED%8C%90</guid>
            <pubDate>Mon, 14 Nov 2022 07:49:52 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<p>주어진 상황과 경험들을 재구성하고 종합할 수 있는 시스템 구현해야겠음. 금방 또 잊기 전에</p>
<h1 id="배경">배경</h1>
<p>되돌아 보니까, 당연히 예상대로 된 게 없고 아쉬운 게 있음
그렇다고 지금까지 경험들과 주어진 상황을 잊어버리면 안타까움.
앞으로 더해야할 것도 있고</p>
<p>최대한 내가 가진 것들을 종합할 구심점을 나름대로 찾고자함. 가능하면 앞으로 경험할 상황들에도 유용한 형태로</p>
<p>그러다 보니, 게시판 서비스를 프로젝트 관리 게시판으로 커스텀하면 좋을 듯함.</p>
<h2 id="프로젝트-협업-게시판">프로젝트 협업 게시판</h2>
<p>축구 게시판, 야구 게시판, ...
=&gt; Data Modeling, Database Managing, Web Application(공통), Infrastructure 등의 프로젝트 관리 하위 주제들로 변형하고</p>
<p>축구 게시판의 게시글1,2,3,...
=&gt; Data Modeling 게시판의 article-1,2,3</p>
<p>으로 생각하면 기술적으로야 같은 게시판이여도, 나한테는 의미있는 관리 시스템이 될듯</p>
<p>한편, 과정은 컨플루언스에 앞으로 기록</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[설계] 데이터 모델링]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%84%A4%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%84%A4%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81</guid>
            <pubDate>Fri, 28 Oct 2022 01:42:51 GMT</pubDate>
            <description><![CDATA[<h1 id="개요">개요</h1>
<ul>
<li><strong>데이터베이스를 위한</strong> 개념 데이터 모델링</li>
<li><strong>데이터베이스의</strong>&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp논리 데이터 모델링</li>
<li><strong>데이터베이스에 의한</strong> 물리 데이터 모델링</li>
</ul>
<p>데이터 모델링은 <strong>데이터베이스에 기록하기 위한 데이터 우선순위 결정 과정</strong>. 그리고 주 기록 대상은 <strong>비즈니스 또는 상대방에게 소중한 것</strong></p>
<p><strong>데이터베이스</strong>는 도서관처럼 1명의 개인이 쓰기에는 충분하나, 여럿이 사용하면 언제나 공간이 부족하고, 뒤죽박죽. 우선 100GB정도의 데이터베이스를 상정하고 생각하겠음.</p>
<p> 매번 그렇듯이, <strong>비즈니스</strong>는 혼자 하는 게 아니라 여럿이 하거나 서로 상이한 자료를 바탕으로 하는 것, 그러면 <strong>직관적인 그림으로 협업</strong>. 대표적으로 <strong>Entity Relationship Diagram(ERD)</strong></p>
<h2 id="데이터베이스를-위한-개념-데이터">데이터베이스를 위한 개념 데이터</h2>
<p>데이터베이스는 좁으니까, 중요하고 의미있는 데이터(= 핵심적인 개념데이터)만 추출해서 담아야함</p>
<h3 id="erd의-시작-자료-속-핵심을-찾자">ERD의 시작: 자료 속 핵심을 찾자</h3>
<h4 id="자료-요약하기">자료 요약하기</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/87175cfc-80c3-483e-bd56-44b7d4aa3b53/image.png" alt=""></p>
<p>이런 작업은 순수하게 사람 머리속에서 개념적으로 작동한다고 생각중. &#39;개념적&#39;이라는 단어 참 편리하다</p>
<h4 id="요약에서-erd-만들기">요약에서 ERD 만들기</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/8249c611-9a54-43b2-a5c5-c1a8813b2805/image.png" alt=""></p>
<p>Entity도 단위로서 우선 수용. 보다 정확히는 <strong>데이터베이스에 중요한 것만 기록하기 위한 생각의 단위</strong>. </p>
<h3 id="데이터-표준화">데이터 표준화</h3>
<p>감자탕을 시켰는데, 고기가 나와서 감자가 안나와도 넘어갔지만, 사실 감자탕의 감자가 potato가 아닌건 꽤 신기했던듯, </p>
<p>이렇듯 데이터에다가 이름 정할때 동음이의어가 있으면 명확히 해주고, 공유해야 혼란 최소화
협업의 1단계는 용어와 의미의 통일</p>
<p><a href="https://docs.google.com/spreadsheets/d/1dpklaKbLDONch0-LXxSMJC6ja6mbJ0I0ZqS6EAr8d9Q/edit?usp=sharing">데이터 표준화 문서 구글 docs(미완)</a></p>
<h2 id="데이터베이스의-논리-데이터-연상과-연결-데이터">데이터베이스의 논리 데이터: 연상과 연결 데이터</h2>
<p>관계(=연상하고 연결하기)를 짓다</p>
<ol>
<li>이미 두 눈에 보이는 엔터티 간에 연결을 짓다
<strong>2. 눈에 보이는 엔터티로부터 눈에 안보이는 엔터티를 연상하고 연결하다</strong></li>
</ol>
<p>근데 내가 경험해보지 못한 영역에 대해서 눈에 안보이는 걸 연상한다는 건 불가능한듯, 사장님이 도와줘야함. </p>
<h3 id="erd-눈에-안보이는-것">ERD 눈에 안보이는 것</h3>
<p>주어진 자료에는 사실 <strong>요구사항관리시스템</strong>으로 명시되어있으나, 내 개인적인 사고 흐름 속에서 나는 <strong>프로젝트관리시스템</strong>이 보다 포괄적인 표현이라고 나도 모르게 생각했음</p>
<p>그래서 눈에 보이지는 않지만, 제안요청서라는 엔터티를 연상하고 프로젝트 엔터티와 연결함</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4f421ffd-d37f-484d-9131-32b17206c33c/image.png" alt=""></p>
<p>하지만 앞서 말했듯이, 데이터베이스는 노트북 HDD처럼 유한한 물리적 공간(나는 100GB 상정)을 가짐. 분명 제안요청서는 필요한 정보이지만, 이미 word나 한글로 제공된다고 할 때, 이를 추가적으로 재가공해서 데이터베이스에 담을 만큼 최우선 순위인지는 현재 나의 역량으로는 가늠이 안됨.</p>
<p>모든 고객사가 제안요청서를 어떻게 보내는지는 몰라도, 거기에 관심있는 수주사는 제안요청서를 반드시 저장해놓을 테니, 파일서버가 됬든 하다못해 서랍장이든 저장위치 칼럼 추가하면 해결될듯</p>
<h3 id="관계-짓기와-primary-key">관계 짓기와 Primary key</h3>
<p>데이터베이스에서는 관계는 primary key 설정으로 실현한다고 생각중.</p>
<p>관계 짓기를 A -&gt; B 로 연결 짓는 것으로 생각중
A를 대표할 수 있는 A의 primary key를 B에서 Foreign key로 설정함으로서
A의 중요 속성을 B가 가지게 되었으니, 구체적인 Query를 통해 A는 B를 찾아갈 수 있고,
B도 A를 찾아갈수 있게 되니까?</p>
<p>한편 primary key는 일반적으론 index 기능을 가지는데, index의 value가 변환을 거쳐 최종적으로 원통 좌표계 상의 벡터로 표현되고, 이에 따라 물리적으로 실재하는 HDD의 head를 향해 디스크를 회전시키걸로 생각하는 중. 그러면 여기서부터 물리단계로 넘어가는 느낌.</p>
<p>SSD는 심신안정을 위해 패스</p>
<h3 id="정규화">정규화</h3>
<p>원래 위와같은 데이터 모델링과 별개로 시작되었으나, 매번 그렇듯이 비교대조하기 보단 같이 쓰는게 좋은듯 정규화에서 pk를 엄밀히 정하고 검증하는 과정으로 생각하는 중이니까, 우선 여기다가 배치함</p>
<h2 id="데이터베이스에-의한-물리-데이터">데이터베이스에 의한 물리 데이터</h2>
<p>Database server = DBMS + database(HDD로 존재하다고 가정) 라고 생각할 때,</p>
<p>논리 데이터가 HDD에 0,1로 기록되면, 존재하는 물리 데이터가 된다고 생각 중.</p>
<p>(논리 데이터를 담는 단위가 엔터티, 물리 데이터를 담는 단위가 테이블로 우선 생각 중)</p>
<p>한편, 
일단 DBMS는 도서관장, database는 도서관 정도로 우선 이해</p>
<h3 id="dbms가-기록하는-방식">DBMS가 기록하는 방식</h3>
<p>사람이 기억을 어떻게 저장하는지는 모르겠지만, 아무래도 사람이랑 다른 것 같음.</p>
<p>아주 원시적인 DBMS를 가정할 때, 구획이나 순서없이 마치 C array처럼 들어오는대로 순서대로 기록. 이런 방식이 <strong>데이터가 들어오는 것(Input)</strong> 요청에 대해선 효과적이나</p>
<p>나중에 <strong>원하는 데이터를 찾는 것(Output)</strong>에 대해선 맨 처음 입력 데이터부터 원하는 게 나올때까지 접근하고 확인하고 아니면 넘어가고의 작업을 수행해야함. 마치 C에서 for문과 if문으로 array 조회하는 과정으로 생각 중</p>
<p>하지만 oracle DBMS, postgresql DBMS의 경우, 전문전문가들이 이러한 <strong>데이터베이스의 I/O</strong> 사이의 균형을 찾기 위해 훨씬 치밀하고 세련된 구조와 방식으로 작동하는 것으로 앎.</p>
<p><a href="https://www.geeksforgeeks.org/postgresql-system-architecture/">PostgresSQL database Architecture</a></p>
<p><a href="https://www.oracle.com/webfolder/technetwork/tutorials/architecture-diagrams/18/technical-architecture/database-technical-architecture.html">Oracle database Arachitecture</a></p>
<p>이러한 주어진 구조에 악영향을 미치는 어떤걸 찾고 찾아서 테이블을 기록하지만 않는다면, 전문전문가들에게 도움받는 형태일듯</p>
<h3 id="데이터타입">데이터타입</h3>
<p>데이터베이스 DBMS(가령, postgresSQL, Oracle)는 물리적으로 실재하는 HDD, SSD에 저장할때, 문법적으로 한글이나 알파벳을 기계어인 0,1로 전환</p>
<p>DBMS 종류마다 이 기계어를 0,1 전환할 때 방식이 조금 다를듯</p>
<p><a href="https://velog.io/@moorekwon/PostgreSQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85">postgresql data type</a></p>
<p><a href="https://coding-factory.tistory.com/416">oracle data type</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[gitops] argoCD]]></title>
            <link>https://velog.io/@kimjh18_idt/gitops-argoCD</link>
            <guid>https://velog.io/@kimjh18_idt/gitops-argoCD</guid>
            <pubDate>Tue, 18 Oct 2022 07:34:55 GMT</pubDate>
            <description><![CDATA[<h1 id="argocd">argoCD</h1>
<p>gitops의 구현체</p>
<p>kubernetes 진입하는대로</p>
<p><a href="https://coffeewhale.com/kubernetes/gitops/argocd/2020/02/10/gitops-argocd/">https://coffeewhale.com/kubernetes/gitops/argocd/2020/02/10/gitops-argocd/</a></p>
<p>통해서 gitops 실현</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Cloud] vpc ec2 kubectl]]></title>
            <link>https://velog.io/@kimjh18_idt/Cloud-vpc-ec2-kubectl</link>
            <guid>https://velog.io/@kimjh18_idt/Cloud-vpc-ec2-kubectl</guid>
            <pubDate>Tue, 18 Oct 2022 05:28:58 GMT</pubDate>
            <description><![CDATA[<p>aws 의 경우, 처음 가입할때, 자동으로 vpc, subnet, router, gateway 등의 기본 설정이 되어있기에 바로 ec2로 ssh로 접속이 가능</p>
<p>하지만, aws상에서 새로운 서비스를 제공하기 위해서는 새로운 vpc, subnet, router, gateway 등을 마치 데이터센터 짓듯이 새로 생성해야한다.</p>
<p>이와관련된 <a href="https://mozi.tistory.com/m/604">기본 vpc 생성법</a> 참고</p>
<p>ecs ecr을 통한 배포 자동화 개념 습득</p>
<p><a href="https://velog.io/@hax0r/AWS-ECSECR-%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%B0%B0%ED%8F%AC">https://velog.io/@hax0r/AWS-ECSECR-%EC%9D%84-%ED%86%B5%ED%95%9C-%EC%84%9C%EB%B9%84%EC%8A%A4-%EB%B0%B0%ED%8F%AC</a></p>
<p>aws network
<a href="https://hyeyeon13.tistory.com/20">https://hyeyeon13.tistory.com/20</a></p>
<h3 id="ec2-install-kubectl">ec2 install kubectl</h3>
<p><a href="https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html">https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html</a></p>
<h3 id="ec2-install-eksctl">ec2 install eksctl</h3>
<p><a href="https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eksctl.html">https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eksctl.html</a></p>
<h3 id="docker-image-of-springmvc-by-dockerfile-gradle-maven">docker image of springMVC by Dockerfile, gradle, maven</h3>
<p>현재까지 자료가 spring boot로 되어있어, springMVC를 우선 boot로 전환</p>
<h3 id="springmvc--springboot">springMVC -springBoot</h3>
<p><a href="https://velog.io/@hellonayeon/springmvc-vs-springboot">https://velog.io/@hellonayeon/springmvc-vs-springboot</a></p>
<h4 id="gradle-springboot-에서-dockerfile-만들기">gradle-springboot 에서 dockerfile 만들기</h4>
<p><a href="https://iseunghan.tistory.com/m/421">https://iseunghan.tistory.com/m/421</a></p>
<p>중간에 무슨일이 일어나면 감당이 안되므로, 우선있는그대로 할까했지만,</p>
<p>현재 나는 mvn이 친숙하므로 maven</p>
<p><a href="https://warpgate3.tistory.com/entry/Build-Docker-Image-with-Maven-java">https://warpgate3.tistory.com/entry/Build-Docker-Image-with-Maven-java</a></p>
<p>역시 이미 해본사람 존재, 다만 아리송한 게 아직 많음</p>
<h4 id="일단-이클립스에서-maven-빌드">일단 이클립스에서 maven 빌드</h4>
<p><a href="http://itpsolver.com/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-maven-%EC%9C%BC%EB%A1%9C-jar-%ED%8C%8C%EC%9D%BC-%EB%A7%90%EC%95%84%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0/">http://itpsolver.com/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4-maven-%EC%9C%BC%EB%A1%9C-jar-%ED%8C%8C%EC%9D%BC-%EB%A7%90%EC%95%84%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0/</a></p>
<p>간단하게 바로 되긴하는데, maven과 관련된 다양한 폴더들이 target 하위에 생김</p>
<p>아마도 이걸 해결하려면 이클립스를 통해서 maven을 접근하기보다</p>
<p>이클립스와 별개로 maven을 깔아서 빌드해야할듯</p>
<p>원래 maven, framework 등이 따로 존재하던 건데 이클립스라는 편집기로 쉽게 접근하는 거였던 거니 그런가 보다함</p>
<h4 id="이클립스-settings-file-설정">이클립스 .settings file 설정</h4>
<p><a href="https://mine-it-record.tistory.com/m/160">https://mine-it-record.tistory.com/m/160</a></p>
<h4 id="dockerfile">dockerfile</h4>
<p><a href="https://umanking.github.io/2021/07/11/spring-boot-docker-starter/">https://umanking.github.io/2021/07/11/spring-boot-docker-starter/</a>
<a href="https://thalals.tistory.com/m/240">https://thalals.tistory.com/m/240</a></p>
<h4 id="maven">maven</h4>
<p><a href="https://warpgate3.tistory.com/entry/Build-Docker-Image-with-Maven-java">https://warpgate3.tistory.com/entry/Build-Docker-Image-with-Maven-java</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Docker] Container and deployment]]></title>
            <link>https://velog.io/@kimjh18_idt/Docker-Docker-Desktop</link>
            <guid>https://velog.io/@kimjh18_idt/Docker-Docker-Desktop</guid>
            <pubDate>Mon, 17 Oct 2022 23:42:53 GMT</pubDate>
            <description><![CDATA[<h1 id="docker-desktop-for-windows10">Docker Desktop for Windows10</h1>
<p><a href="https://cdlee479.tistory.com/m/9">Container와 Container Image 기본 개념 그리고 Docker Desktop 설치법</a>에 따라서 우선 설치까지 완료</p>
<ul>
<li>Dockerfile is code file of Docker Container Image which will be builded</li>
<li>Docker Container Image(이하 container image)는 Container의 설계도</li>
<li>Docker Container(이하 container)는 설계도에 따라 구현된 결과물</li>
<li>Docker Desktop은 <strong>Powershell을 중심으로</strong> Windows 10에서 Docker를 효과적으로 다루기 위한 도구</li>
</ul>
<p>Docker Desktop 
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/d3d199e0-21a4-4e2b-af44-ce178a83f0ce/image.png" alt=""></p>
<h1 id="dockerlabs-tutorial">DockerLabs Tutorial</h1>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/90fb50d0-e5ad-481f-bb76-3b5eaf6fd0ad/image.png" alt=""></p>
<p><code>docker run -d -p 80:80 docker/getting-started</code></p>
<p>를 Windows 10의 powershell에서 container를 실행하면, container image가 없을 시 자동으로 container image를 다운로드해주고, container로 구현하여 실행까지 해준다.</p>
<p>-p 80:80 옵션에 따라서</p>
<p>내 노트북이 자기 자신을 지칭할 때 쓰는 ip인 127.0.0.1의 80번 포트와</p>
<p>Container가 자기 자신을 지칭할 때 쓰는 ip의 127.0.0.1의 80번 포트를 포트포워딩 시켜준다.</p>
<p>127.0.0.1은 사람들끼리 대화할 때 사용하는 &#39;나 , 너&#39; 중 나에 대응하는 개념으로 생각 중. 그러니까 노트북 입장에서의 스스로를 &#39;나&#39;라고 지칭할 수 있고, 컨테이너 입장에서도 스스로를 &#39;나&#39; 라고 지칭가능</p>
<p>이러한 포트포워딩에 따라, 내 노트북에서 127.0.0.1:80로 들어가면 DockerLabs의 Tutorial이 뜬다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/037efb18-ba8c-4e56-8b54-5b699f53c05d/image.png" alt=""></p>
<p>위와 같이 직접 배포한 컨테이너에 기본 탑재된 튜토리얼 내용은 <a href="https://docs.docker.com/get-started/02_our_app/">공식 사이트</a>에서도 제공한다</p>
<h2 id="dockerfile">Dockerfile</h2>
<h3 id="pre-result">pre-result</h3>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/ff012ab3-f17a-4195-92c6-f4f64b1a3d8f/image.png" alt=""></p>
<p>신기하게도 blabla.dockerfile 이나 blabla.Dockerfile 이 아니었다.</p>
<p>확장자가 없다.</p>
<h3 id="progress">progress</h3>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/c0848fef-5214-4526-89f8-e8fe43d52ff2/image.png" alt=""></p>
<p>Getting our App 에서 javascript 기반 앱 프로젝트의 소스코드를 제공</p>
<p>프로젝트 구조는</p>
<p>app
-spec
-src
-package.json
-yarn.lock</p>
<p><strong>Building the App&#39;s Container Image</strong> 에서 앞선 프로젝트 폴더 내부에 Dockerfile 생성</p>
<p>app
-spec
-src
-package.json
-yarn.lock
-Dockerfile</p>
<p>Dockerfile은</p>
<pre><code>FROM node:12-alpine
# Adding build tools to make yarn install work on Apple silicon / arm64 machines
RUN apk add --no-cache python2 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD [&quot;node&quot;, &quot;src/index.js&quot;]</code></pre><p><strong>Starting an App Container</strong>에서</p>
<p><code>docker build -t todolist-container-image01 .</code>
명령어로 빌드
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/4e8fffe5-bccc-49a4-8b25-3b9488a613f8/image.png" alt=""></p>
<p>그러면 container image 가 생성, 참고로 build는 알파벳으로 적힌 소스코드를 01010..기계로  변환하는 명령어로 이해중</p>
<p>그리고 이걸 최초 tutorial container를 실행켰던 것과같이</p>
<p><code>docker run -d -p 3000:3000 todolist-container-image01</code></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/6c1a1536-e10f-44bb-add0-b8d158381c8c/image.png" alt=""></p>
<p>자바 프로젝트를 container image로 만드는 과정도 이와 같을 것으로 예상</p>
<h2 id="push-container-for-sharing">Push Container for Sharing</h2>
<p>github와 같은 dockerhub을 통해 내가 만든 container를 공유할 수 있다.</p>
<p>다만, github는 프로젝트 소스코드 레벨에서 공유한다면, dockerhub은 이러한 프로젝트를 빌드해서 바로 배포할 수 있는 container 레벨로 공유</p>
<p>virtualbox 보다 공유에 있어 효과적인 부분.</p>
<h3 id="dockerhub-전송-준비">dockerhub 전송 준비</h3>
<p>dockerhub으로 전송하기 위해선 docker tag라는 명령어로 dockerhub의 설정에 맞게 이미지명 </p>
<p>앞에 
<code>[목표로 하는 dockerhub 계정명]/[]</code>
를 붙여야 한다.</p>
<p>github에서 repository에 push 할때는 다른 추가적인 설정이다.</p>
<p><code>docker tag [내가 dockerhub으로 보내고 싶은 이미지의 로컬 repository명]:latest [내 dockerhub 계정명]/[우선은 앞에꺼 반복]:latest</code></p>
<p><code>docker tag todolist-container-image01:latest devsacti/todolist-container-image01:lastest</code>
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/01d0d647-3a6b-443b-8324-126cc26948ad/image.png" alt=""></p>
<p>그러면 github 격인 dockerhub에 해당 레포지토리가 바로 생기고 </p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/490c3fe2-c79c-4a43-b0ec-6a42bfdc0085/image.png" alt=""></p>
<p>그 안에 container가 쌓인다.</p>
<h1 id="docker-and-aws">Docker and AWS</h1>
<h2 id="pull-container">Pull Container</h2>
<p>위에서 push 한 컨테이너를 aws ec2에서 pull 하여 바로 배포해보겠다.</p>
<h3 id="ec2-and-docker">ec2 and docker</h3>
<p><a href="https://velog.io/@kimjh18_idt/Linux-aws-linux-%EC%97%B0%EA%B2%B0%EA%B3%BC-%EC%8B%9C%EC%9E%91">ssh로 ec2 접속하는 법</a> 참고하여 ssh 접속</p>
<p>당연히 docker 명령어가 존재하지않는다. </p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/574e309d-d473-46c6-bfa5-ef6c91c42fa4/image.png" alt=""></p>
<p>이에 따라서 Windows 10에서와 같이 <a href="https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-install-docker">aws linux ec2에 docker 환경을 설치</a>할 수 있다. 그러면 windows 10에서 powershell로 docker 명령어를 수행했던 것처럼 가능</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/741a0ce7-918f-4a9a-8758-5f5e43ef080c/image.png" alt=""></p>
<p>내가 접속한 서버에 docker image가 없었지만</p>
<p>docker pull을 통해서 dockerhub에서 다운로드 받은 다음.</p>
<p>docker images 가 성공적으로 다운로드된걸 조회하고</p>
<p>동일하게 3000으로 run</p>
<p>그러면 이에 따라 ps가 잡히고, 우측 크롬을 통해서 해당 앱이 배포된걸 확인</p>
<p>* 참고로 13.209.40.100 는 원래 노출되면 안되나, ec2를 껐다키면 새로 할당되는 것을 알고, 보안그룹을 재설정할것이이게 노출</p>
<p>보안그룹의 경우 별도로 다뤄야하는데, 얼추 port 열고닫고 명령어를 보다 손쉽게 제어하게 해주는 개념으로 일단 마무리</p>
<p>한편, dockerhub에 대응하여</p>
<p>aws에는 Amazon Elastic Container Registry 가 있어보임. </p>
<h3 id=""></h3>
<h2 id="-1">.</h2>
<p><a href="https://kodekloud.com/courses/docker-for-the-absolute-beginner/">Docker Tutorial</a>
+ 
+
을 보고 정리한 내용</p>
<p>virtualbox와 같은 Virtualization Software</p>
<p>다만, 다루는 단위가 VM이 아닌, Container</p>
<p>우선 inch와 cm같은 느낌을 이해 중</p>
<h1 id="추가">추가</h1>
<h2 id="vm-and-container">VM and Container</h2>
<p>VM는 용량을 축소했을뿐 컴퓨터 구성과 완전히 똑같은 것으로 우선 이해</p>
<p>VM of VirtualBox
= HW + OS + Libraries + Dependencies
; 내 노트북 + CentOS7 + jdk + tomcat
= Web Application Server</p>
<p>* 참고로 jdk가 library에 속하는지, tomcat이 Dependencies인지 모름, 왜냐하면 참고한 자료에서 구체화한걸 아직보지 못해서, 일단 구색은 맞춰봄</p>
<p>다만, 컨테이너는 완전히 다른 목표를 가지고 새로운 단위로 느껴짐</p>
<p>inch 와 cm의 관계로 우선 이해, 서로 물리적으로 공통점을 찾을라면 찾겠지만, 전환하려고하면 아주 긴 소수점만 나오는 관계, 그러니까 있는그대로 수용</p>
<p>Container of Docker Desktop
= HW + OS kernel + Libraries + Dependency
; 내 노트북 + linux + jdk + tomcat
= web application Container</p>
<h3 id="os와-os-kernel의-차이">OS와 OS Kernel의 차이</h3>
<p><a href="https://5equal0.tistory.com/m/entry/Linux-Kernel-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B5%AC%EC%A1%B0">https://5equal0.tistory.com/m/entry/Linux-Kernel-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B5%AC%EC%A1%B0</a></p>
<p>CentOS, Ubuntu와 같은 사례를 포괄하는 집합으로서의 Linux는 OS</p>
<p>그러나</p>
<p>kernel로서의 Linux는 OS kernel</p>
<p>근데, 이렇게 명목적으로 구분해도 코드 까서 몇행부터 몇행까지 OS이고 OS kernel인지 구분하려고하면 안될거같음. 느낌상 그러니까 패스</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[gitops] 분할 정복]]></title>
            <link>https://velog.io/@kimjh18_idt/gitops-%EB%B6%84%ED%95%A0-%EC%A0%95%EB%B3%B5-sx7jbhyd</link>
            <guid>https://velog.io/@kimjh18_idt/gitops-%EB%B6%84%ED%95%A0-%EC%A0%95%EB%B3%B5-sx7jbhyd</guid>
            <pubDate>Sun, 16 Oct 2022 13:01:47 GMT</pubDate>
            <description><![CDATA[<h1 id="intro">Intro</h1>
<p>지금껏 내가 다른 사람들과 github를 사용해서</p>
<p>각자 맡은 기능을 동시에 함께 개발했던 것들도 넓은 의미의 분할 정복 같음.</p>
<p>부분 문제들을 혼자서 풀어야 <a href="https://namu.wiki/w/%EB%B6%84%ED%95%A0%20%EC%A0%95%EB%B3%B5%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98">분할 정복</a>이다 라는 말은 없으니까</p>
<p>그리고, 이번에 여러 가지 영역을 혼자서 진행해보면서, 혼자서는 제어하기 힘든, 예상치 못한 일이 매우 많았음. 앞으로도 그럴듯</p>
<p>그렇다면, 기존에 산개되어있던 문제들을 종합문제의 하위 부분문제들로 보이게 해주는 gitops에 대한 경험과 이해를 시도. 하다보면 늘것지</p>
<h1 id="gitops">GitOps</h1>
<p> 레드햇 감사. rpm 때도 감사</p>
<p><a href="https://www.redhat.com/ko/topics/devops/what-is-gitops">감사한 레드햇 설명</a>을 보니, 엄청 정성스레 적어주었다는 느낌을 우선 받았음. 열심히 볼 예정.</p>
<p>그나마 친숙한 단어들은 쿠버네티스와 클라우드 네이티브 애플리케이션</p>
<p><a href="https://www.redhat.com/ko/topics/containers/what-is-kubernetes">쿠버네티스 설명</a>을 보니까, 컨테이너, 클라우드 등이 보임 이것들부터 친해져야겠음</p>
<h3 id="쿠버네티스">쿠버네티스</h3>
<p><a href="https://always-try.tistory.com/m/71">https://always-try.tistory.com/m/71</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ISSUE] 웹 개발/인프라 환경 세팅]]></title>
            <link>https://velog.io/@kimjh18_idt/ISSUE-%EC%9B%B9-%EA%B0%9C%EB%B0%9C%EC%9D%B8%ED%94%84%EB%9D%BC-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85</link>
            <guid>https://velog.io/@kimjh18_idt/ISSUE-%EC%9B%B9-%EA%B0%9C%EB%B0%9C%EC%9D%B8%ED%94%84%EB%9D%BC-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85</guid>
            <pubDate>Sun, 16 Oct 2022 13:00:42 GMT</pubDate>
            <description><![CDATA[<h1 id="주제">주제</h1>
<p>Spring Framework를 활용한 게시판 웹 어플리케이션 개발 프로젝트</p>
<h1 id="상황">상황</h1>
<p>part1 프레임워크 관련</p>
<ul>
<li>XML 구성 SpringFramework</li>
<li>Java 구성 SpringFramework</li>
<li>Java 구성 Spring Boot
     
part2 인프라 관련</li>
<li>빌드 된 app을 Tomcat 9.x 에서 서비스</li>
<li>Apache Http 서버로 서비스 노출</li>
</ul>
<p>* 상위 2 요소는 중복가능</p>
<p>part3 기타 요소</p>
<ul>
<li>데이터 처리는 Mybatis</li>
<li>DB 는 PostgreSQL</li>
<li>MSA로 개선을 염두에 두고 모놀리식으로 개발할 것</li>
<li>서버 환경은 선택</li>
</ul>
<p>part4 산출물</p>
<ul>
<li>요구사항 정의서(유스 케이스)</li>
<li>클래스 다어그램</li>
<li>시퀀스 다이언그램</li>
<li>ERD</li>
<li>UI 기획서</li>
</ul>
<p>* 할 수 있고, 필수적인 것부터</p>
<h1 id="접근과-목표">접근과 목표</h1>
<h2 id="접근과-목표1--우선-공통-환경을-구현하자">접근과 목표1 : 우선 공통 환경을 구현하자</h2>
<ul>
<li>Docs related with requirement, design</li>
<li>Package for developer</li>
<li>Infra for deployment</li>
</ul>
<p>각 part별로 전문담당자가 대체로 존재할 만큼, 다양한 영역.</p>
<p>하다보면 되것지만, 기한 내 할려면 ,나 혼자 다할 생각보단, 현업, 개발자 등 다수의 관계자들에게 <strong>공통된 환경을 구현해서 빠르고 효과적으로 협업할 수 있게 구축</strong></p>
<p>이때 인프라는 여러명의 관계자가 같이 고민은 해도, 각자 서버를 설정하지는 않음. 그래서 구글 독스같은 협업 환경과는 거리가 먼듯</p>
<p>그러나, <strong>인프라는 모두의 작업물이 종합되어 배포되는 공통환경</strong>인듯. 그러니까 머릿속으로나마 인식할 수 있게 전달하면 좋것지.</p>
<h1 id="배운-점">배운 점</h1>
<h2 id="분할-정복과-협업">분할 정복과 협업</h2>
<p>여러 가지 영역과 예상하지 못한 일들의 연속 속에서 자연스럽게 무기력해지고 악순환의 고리가 형성되었음.</p>
<p>그렇지만 분할하고 분할해서 나는 못하더라도, 다른 사람이 참여할 수 있게 만들면서 끝은 보인듯</p>
<h2 id="미완성도-경험">미완성도 경험</h2>
<p>언제나 완성하면 좋겠지만, 한 사이클 동안 하고자 했던 것은 못했음. 그래도 느리지만 천천히 계속 다듬어갈 예정</p>
<h2 id="우선-있는그대로-그-다음-분석">우선 있는그대로, 그 다음 분석</h2>
<p><code>지금 구현하는 리눅스 쉘 명령어 cat은 뭐의 약자일까요?</code>
<code>명령어 만든 사람이 고양이(cat) 좋아해서 그렇게 했을 수도 있어요. java처럼요. 마침 yum(Yellow dog Updater, Modified)에 dog도 있으니까. 검색해볼게요</code></p>
<p>운영체제 수업 때도 그랬지만, 일단은 받아들이면 그 다음이 있는듯. </p>
<p>하지만, 처음에 redhat centos, aws ec2, ubuntu 등등 알아야할 게 많아서 심술이 났고 받아들이길 거부했음.</p>
<p>근데 보다 보니까, 처음보는 사람한테 중구난방인 단어들은 대체로, 서로 모르는 사람들이 서로를 위해 무료로 공개한 것들임.</p>
<p>누가 밥사주는 것도 아닌데, 무료로 공개하고 유지보수되는 것들, redhat centos, yum 등,을 생각하면 감사부터 해야겠구나 함. 그래야 내가 덜 힘들기도 하고</p>
<p><a href="https://raidho.tistory.com/m/7">C언어로 Linux cat 구현 예시</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백엔드] Impl of code structure]]></title>
            <link>https://velog.io/@kimjh18_idt/%EB%B0%B1%EC%97%94%EB%93%9C-Impl-of-code-structure</link>
            <guid>https://velog.io/@kimjh18_idt/%EB%B0%B1%EC%97%94%EB%93%9C-Impl-of-code-structure</guid>
            <pubDate>Wed, 05 Oct 2022 05:46:45 GMT</pubDate>
            <description><![CDATA[<p>인프라가 다 완성된건 아닌데, 인프라가 내 생각대로 굴러가는지 테스트할 최소 war를 만들기</p>
<p>기존 로컬환경에서 framework 파트에서 만든 뼈대를 바탕으로 세부코드 구현</p>
<h1 id="게시글-페이징">게시글 페이징</h1>
<p>포스트그레 기반 페이징을 해야함.</p>
<p>화면은 최소한으로 부트스트랩 활용하려고 했는데,</p>
<p>test 통해서 화면없이 이클립스 console 로 기능 테스트 부터</p>
<p>화면까지 만들다가 에러뜨면 그것도 무기력해짐. 백엔드 자잘하게 수정할때마다 건드려야할 영역도 하나 추가되는 셈이고</p>
<p>특히 entity, dto 변수명 바꾸는데 엄청나게 강한 거부감이 개인적으로 생김.</p>
<p>더 나은 건데도 말이지, 틀려도 되는 데 말이지, 고치면 되는데</p>
<h2 id="페이징-쿼리-만들기">페이징 쿼리 만들기</h2>
<h3 id="샘플-데이터-넣기">샘플 데이터 넣기</h3>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/051957d0-80f2-467d-99c6-321c9687c1cd/image.png" alt=""></p>
<p>로컬 포스트그레 SQL에 페이징 기능을 체크할 데이터를 넣는다.</p>
<p>dbeaver 기존 행 복사 기능으로 페이징을 테스트할 수 있게 총 22행 넣음. 100 ~ 121</p>
<p>참고로 수동으로 넣는 것이기 때문에, 기존 시퀀스랑 충돌안나게 100번부터 시작함</p>
<h3 id="쿼리-페이징-작성">쿼리 페이징 작성</h3>
<p><a href="https://dejavuhyo.github.io/posts/pagination-in-postgresql/">https://dejavuhyo.github.io/posts/pagination-in-postgresql/</a></p>
<p>1페이지당 5개의 글</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4faae706-d7fa-4f8b-a66e-13950fb15d7a/image.png" alt=""></p>
<p>0번 페이지 쿼리</p>
<pre><code>select * from article
order by article_id
limit 5
offset 0 * 5;</code></pre><p>1번 페이지 쿼리</p>
<pre><code>select * from article
order by article_id
limit 5
offset 1 * 5;</code></pre><p>2번 페이지 쿼리</p>
<pre><code>select * from article
order by article_id
limit 5
offset 2 * 5;</code></pre><p>10 , 5 , 0
= 2 * 5 , 1 * 5 , 0 * 5
= (3-1) * 5, (2-1) * 5 , (1-1) * 5</p>
<p>어느 새 익숙해져서 그렇지 10이 10이지, 이걸 5의 배수, 나아가 0번째부터 세는 컴퓨터 방식을 사람 방식으로 바꾸기 위해 </p>
<p>2를 3에서 1 뺀수로 다르게 생각한다는 건 흥미롭지만 신기하다.</p>
<p>나야 그냥 감사</p>
<p>최종 추상화</p>
<pre><code>select * from article
order by article_id
limit [1페이지당 보여주고 싶은 게시글 수]
offset [사람이 화면상에서 클릭한 페이지 번호 - 1] * 5;</code></pre><p>추가로 *는 성능차원에서 나중에 칼럼으로 구체화해야함</p>
<p>offset과 limit 공식가이드
<a href="https://www.postgresql.org/docs/12/queries-limit.html">https://www.postgresql.org/docs/12/queries-limit.html</a></p>
<p>한편, postgresql이 offset 지원해줘서 이렇게 쉽게 되는거지, 이거없으면 개인적으로 5시간 써도 페이징 쿼리 못짰음. dbms를 바꾸면 된다.</p>
<h4 id="dbeaver-자동-sql-활용">dbeaver 자동 sql 활용</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/7749f4c9-5eaf-4407-b554-d9b4b0d1d6b5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/efe300bd-7d34-4b74-9761-9f4880a9c9f2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/01dafb12-719c-49b9-9f88-724bbd7b51d1/image.png" alt=""></p>
<p>아쉽게도 oracle sql developer 와 같은 자동 조인 쿼리 생성은 아직 못찾음, 근데 이것만해도 손가락 수명 잘 지킬듯</p>
<p>이제는 이걸 java app에서 작동시켜야함, 그러기 위해서</p>
<p>limit은 constant 이되 여러 개발자가 같이 쓸수있게 해야 하고</p>
<p>offset을 constant value로 처리한 것을 variable로 처리해야서 사용자 입력을 받아야함</p>
<h2 id="백엔드-구현">백엔드 구현</h2>
<h3 id="java---mybatis">java - mybatis</h3>
<h4 id="java-시간의-경우--article-entity-and-dto">java 시간의 경우 : Article Entity and DTO</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/0a025e26-96c8-4c8c-9ee2-ad83c0c97966/image.png" alt=""></p>
<p>create_date, last_update가 서로 길이가 달라서 따로 따로 타입을 지정해주면 효율적인듯한데,</p>
<p>우선,  java time 의 LocalDate , LocalDateTime 활용</p>
<p><a href="https://footprint-of-nawin.tistory.com/67">https://footprint-of-nawin.tistory.com/67</a></p>
<p>예전에는 Date 썼는데</p>
<p><a href="https://seeminglyjs.tistory.com/197">https://seeminglyjs.tistory.com/197</a></p>
<p>java 시간 관련 타입이 꽤 골치 아픈 이슈가 있었던 거 같아서 jpa 공부하면서 타입 구체화해야할듯</p>
<p>java.util.Date , java.sql.Date가 서로 다르다
<a href="https://hashcode.co.kr/questions/2038/javautildate%EB%A5%BC-javasqldate%EB%A1%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%B0%94%EA%BE%B8%EB%82%98%EC%9A%94">https://hashcode.co.kr/questions/2038/javautildate%EB%A5%BC-javasqldate%EB%A1%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%B0%94%EA%BE%B8%EB%82%98%EC%9A%94</a></p>
<h4 id="mybatis-mapper-설정">mybatis mapper 설정</h4>
<ol>
<li>@Select 어노테이션 활용
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/d04524b9-9d4b-4392-850d-2a283c13f1bb/image.png" alt=""></li>
</ol>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/d29ac9f7-99b2-42cb-9159-0b19305bab2a/image.png" alt=""></p>
<p>단순한 쿼리들의 경우 이게 더 편함, 지금은 페이징 구현이 언제 될지 모르니까 이걸로 할 예정</p>
<p>다만 복잡한 쿼리의 경우, 쿼리만 봐도 멘탈 나가는 사이즈가 되기 때문에 별도로 쿼리 빼는 방식이 xml
조금 더 설정해야함</p>
<p>그리고 마이바티스에서 제공하는 selectkey 쓸려면 xml 방식이 필수일듯?</p>
<ol start="2">
<li>xml 방식</li>
</ol>
<p>참고자료
<a href="https://github.com/devsacti/eveadam_blog/blob/main/src/main/resources/com/eveadam/blog/mapper/article/ArticleMapper.xml">https://github.com/devsacti/eveadam_blog/blob/main/src/main/resources/com/eveadam/blog/mapper/article/ArticleMapper.xml</a></p>
<p><a href="https://joonpyo-hong.tistory.com/entry/Spring-Context-initialization-failed-%EC%98%A4%EB%A5%98">이클립스 개발의 시작과 끝 : clean 하세요</a></p>
<h1 id="게시판">게시판</h1>
<h1 id="추가">추가</h1>
<h2 id="android-and-stream">Android and stream</h2>
<p><a href="https://developer.android.com/reference/java/util/stream/Stream">https://developer.android.com/reference/java/util/stream/Stream</a></p>
<p>수치는 모르는데, 안드로이드에서 쓰이는 스트림 많이 쓰면 성능상 좋다고한듯</p>
<p>gradle도 맛보고</p>
<p>근데 생각보다 웹앱과 모바일 앱 사이의 거리가 멀어서, 우선 뒤로</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[인프라] Virtualization Software]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Virtual-Machine-SW</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Virtual-Machine-SW</guid>
            <pubDate>Thu, 29 Sep 2022 23:36:31 GMT</pubDate>
            <description><![CDATA[<h1 id="virtualization-software">Virtualization Software</h1>
<ul>
<li><a href="https://namu.wiki/w/VirtualBox">VirtualBox</a></li>
<li><a href="https://namu.wiki/w/VMware">VMware</a></li>
</ul>
<p>가상머신을 생성하고 관련된 환경설정을 지원한다. 개인은 무료이다. 그리고 cmd 하나하나 치면서 하나씩 뚫릴때 재미있긴 함. 오밀조밀한 맛이 있음.</p>
<p>다만, 나의 경우, <a href="https://hand-over.tistory.com/18">adapter 문제</a>를 경험했고, 재현불가한 과정들을 거쳐, 최종적으로 실험한 내 개인노트북은 virtualbox 바로가기를 클릭해도 아무것도 안켜진다.</p>
<p>이로 인한 불쾌함과 조바심은 아래 과정에서 드러난다.</p>
<p>한편, 5일 뒤 윈도우 자동업데이트와 함께, 다시 켜진다. 고칠려고 노력하지 않은 게 고쳐졌다. 감사하자.</p>
<h2 id="인프라-설정-시-유의사항">인프라 설정 시 유의사항</h2>
<h3 id="심신안정부터">심신안정부터</h3>
<p>영단어 라틴어 배경까지 거슬러 올라가면, 그 안에 나름 연관성 있듯이, 설정할때 접하는 수많은 고유명사와 개념들에도 뜻이 있고 뿌리가 있겠다만,</p>
<p>근데, 그래서 내가 어디에 있는 무슨 버튼 누르고, 어떤 명령어 쳐야되는지 알 수가 없음. 마음의 평화 필요. 쉽지는 않지만</p>
<h3 id="좋은-습관">좋은 습관</h3>
<ul>
<li>실험환경과 작업환경의 분리</li>
<li>무한 백업하기</li>
</ul>
<p>+ 버그의 해결보단 <a href="https://wnw1005.tistory.com/224">새로 생성</a></p>
<p>앞선 adapter 문제를 해결하며 <a href="https://www.google.com/search?q=windows+10+virtualbox+%EC%95%88%EC%BC%9C%EC%A7%90&amp;oq=windows+10+virtualbox+%EC%95%88%EC%BC%9C%EC%A7%90&amp;aqs=chrome..69i57j0i15i30.7946j0j4&amp;sourceid=chrome&amp;ie=UTF-8">Windows 10 최근 업데이트랑 충돌 사례</a>, <a href="https://www.google.com/search?q=virtualbox+com+%EA%B0%9C%EC%B2%B4%EB%A5%BC+%EC%96%BB%EC%9D%84+%EC%88%98+%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4&amp;ei=StU0Y7blNPTW2roP47emaA&amp;oq=virtualbox+com+&amp;gs_lcp=Cgxnd3Mtd2l6LXNlcnAQARgAMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgQIABAeMgQIABAeMgQIABAeMgQIABAeOgoIABBHENYEELADSgQIQRgASgQIRhgAUHVYdWCnBWgBcAF4AIABjAGIAYwBkgEDMC4xmAEAoAEByAEKwAEB&amp;sclient=gws-wiz-serp">virtualbox 실행안되는 사례</a>들을 바탕으로 문제를 해결하고자 했지만</p>
<p> 중간에 평정심을 잃고, &#39;되는 게 당연하지&#39;하면서 검색한 것들을 바로 적용하다보니, 과정도 잘 기록하지 못하고 3시간이 지났다. 그리고 하다하다 안되서 <a href="https://ko.101-help.com/9013878cd4-virtualbox-vmeun-windows-10eseo-yeolrigeona-sijagdoeji-anhseubnida/">모르는 것</a>도 해봤음. 내 손으로 했으니 내 잘못이라고 하면 그러려니 하지만, </p>
<p> <a href="https://www.google.com/search?q=virtualbox+%EC%82%AD%EC%A0%9C%EC%95%88%EB%90%A8&amp;oq=virtualbox+%EC%82%AD%EC%A0%9C%EC%95%88%EB%90%A8&amp;aqs=chrome..69i57j0i512l4j0i5i30j69i61l2.3367j0j4&amp;sourceid=chrome&amp;ie=UTF-8">설명들</a> 보면서 레지스트리까지 지우고, 다시 또 탐색기로 virtualbox 들어간거 다 지우고, User아래 .virtualbox도 지우고, 다시 깔아도 원복하는데 실패했다.</p>
<p>그래도,
갈려나간 시간을 보며 얻은 건, 처음부터 작업환경을 분리하고, 평소 백업을 충실히 해야한다는 것을 상기함. 추후 cloud에서도 동일 적용</p>
<h1 id="목표">목표</h1>
<p>목표 인프라는 3 tier architecture의 온프레미스 인프라 구성</p>
<h2 id="3-tier-architecure">3 tier architecure</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f5a90c4b-83e7-427e-b3c6-aad846f0d1a5/image.png" alt=""></p>
<p>(Example)</p>
<ol>
<li>크롬 브라우저로 은행사이트에 접속해서 둘러보다가 대출 요청</li>
<li>은행서버는 대출요청을 한도나 금융정책 따라 처리, 그리고 결과 데이터를 DB에 전송</li>
<li>은행 DB 서버는 결과 데이터를 저장</li>
</ol>
<p>전체 작업 흐름을 위 3단계로 분할하여 이에 따라 설계도 세분화한것으로 일단 이해. </p>
<p>처음부터 이런 구조로 배운 나에겐 &#39;이게 왜 아키텍처지?&#39; 했지만, <a href="https://medium.com/@gacheruevans0/2-tier-vs-3-tier-architecture-26db56fe7e9c">자료</a>를 보면서 생각난건데, 엄청 예전에 web browser라는 게 없이, 연구실이나 회사에서 바로 DB 접근하던 시절(2-tier architecutre)과 비교하면 좀 더 새롭게 다가옴</p>
<p>참고로, 위 구조는 화면과 백엔드 서버를 1명이 다 개발하면, 개발자에겐 체감상 2티어</p>
<p><a href="https://docs.aws.amazon.com/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/three-tier-architecture-overview.html">aws and 3-tier</a></p>
<p><a href="https://www.ibm.com/cloud/learn/three-tier-architecture">ibm and 3-tier</a></p>
<h1 id="virtual-machine">Virtual Machine</h1>
<h2 id="overview">Overview</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/457f2b88-585a-4adc-b1a3-cad5408deb20/image.png" alt=""></p>
<p>가상머신은 linux 등의 OS를 올릴 수 있다. linux의 CentOS 계열의 경우, <a href="https://phoenixnap.com/kb/rpm-vs-yum">rpm , yum</a> 등의 명령어가 제공된다.</p>
<p>yum으로 wget을 까는 예제들을 볼 때, rpm, yum 다음으로 wget이란 명령어(유틸리티)가 생긴듯하다.</p>
<p><strong>제약</strong></p>
<ol>
<li>centos의 yum, ubuntu의 apt-get 사용X</li>
</ol>
<p>=&gt; <a href="https://superuser.com/questions/476195/how-can-i-install-software-in-linux-with-no-yum-and-no-wget">추가설명 : no yum, no wget</a>까지 고려하면 설치파일을 scp로 보내야할듯</p>
<p><strong>!! yum이 우선 !!</strong></p>
<p>yum으로 바로 다운로드되면 좋고, 안되더라도, yum으로 다운로드 받아서 폐쇄망에 전송한 뒤 작업하면 잠을 충분히 잘 수 있다.</p>
<h2 id="centos-7">CentOS 7</h2>
<p>CentOS7 = { Network, file system, ... }</p>
<p>노트북에 삼성, lg 있듯이 Linux도 centOS, Ubuntu 등등 있는데, 24년에 무료지원이 끝나는 CentOS 7 버전들이 새로운 걸로 전환될 거 생각하면,  제일 요긴할듯해서 일단 CentOS7</p>
<p>CentOS-7-x86_64-Minimal-2009.iso <a href="https://www.centos.org/download/">goto download</a></p>
<h3 id="install">Install</h3>
<p><a href="https://xxsiyoung.tistory.com/2">Virtual Box and CentOS7</a> 설명에 따라 설정 완료</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/943216f5-4c37-4c3c-9249-3ab50649cd02/image.png" alt=""></p>
<p>미리 좀 보자면,</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/fa32beeb-809f-458e-803f-35ddafd34b83/image.png" alt=""></p>
<p>yum을 help를 통해 검색해보니까, 누군가가 여전히 관리하고 있다는 게 왠지 신기했음</p>
<h3 id="firewall-and-network">Firewall and Network</h3>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/8f4d4c9c-1ae6-45c5-8fe2-58ef38ee9324/image.png" alt=""></p>
<p>나에게 네트워크는 노드 간의 연결이다. 네트워크 도식에선 이런 연결을 수학의 선분으로 간략히 표현하지만, 나한테는 너무 함축적이다. 어느새 익숙해져서 Port와 IP가 그려지긴하는데, 처음에는 뭔말인지 몰랐음</p>
<p> <strong>Firewall은 고속도로 톨케이드</strong>,Port는 고속도로 톨케이트의 1개 입구, IP는 여러 차선을 가진 고속도로의 시작부분로 생각중. 그러면 1개의 고속도로에 여러개의 차선이 있고, 나름 그 차선마다 의미를 부여할 수 있을듯.</p>
<p>한편, 연결과 별개로
각 노드는 보다 구체적인 역할을 통해 추가적인 새 이름을 부여받는다고 이해 중.
보다 자세한 건 <a href="https://en.wikipedia.org/wiki/Network_topology">wiki 네트워크 토폴로지</a></p>
<p>근데, 실제 고속도로를 건설한다고할때, 고속도로가 건설되고 그 위에 톨게이트가 건설되지 않을까? 하지만 지금은 전체적인 관점이 아닌, 노드라는 부분요소에서 바라보는 거니까 일단 패스</p>
<h4 id="firewall-of-centos">Firewall of CentOS</h4>
<p>방화벽 설정에서 차선의 입구와 같은 port를 열어둔다. 이때, 도로의 1차선은 버스만 지나갈수있듯이, 주요 port들, 22,80, 8080,은 관습적으로 역할이 정해져 있다. 22는 보안 통신, 80은 웹서버 통신, 8080은 워즈 통신이 주이다. 난 이 관습을 따를거다. 효과적이니까</p>
<p> 이러한 주요 port들을 연다. 그러면 CentOS 7 관점에서, (주로) 작업노트북을 향해 차선들의 입구를 연다고 생각하는 중.</p>
<pre><code>firewall-cmd --add-port=22/tcp --zone=public --permanent

firewall-cmd --add-port=80/tcp --zone=public --permanent

firewall-cmd --add-port=8080/tcp --zone=public --permanent
</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/b653d714-b45d-477e-9555-6f280c06c768/image.png" alt=""></p>
<p>* 나는 이미 열어놓은 차선를 또 열라고하니까 Warning이 뜨는데, 중요한건 success</p>
<p>다만, 아직 한쪽 도로 입구만 있을 뿐, 도로가 생긴 건 아니라고 생각할 수 있다. 상대편에서도 도로 입구를 만들고, 무엇보다 중간에서 이를 연결해주는 도로(차선들)이 필요. IP 도로를 만들자</p>
<h2 id="network">Network</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/d8f3949b-59ba-4613-bbc4-c9a0ef485c11/image.png" alt=""></p>
<p>참고로, virtualbox 의 화면에서는 <a href="https://kor.go-travels.com/59697-what-is-an-ethernet-card-817547-4677910#menu-3">이더넷 어댑터</a>라는 표현을 쓰고, HW 관점으로는 라우터나 wifi 공유기랑 다르다.</p>
<p>하지만 나한테는 유사함. 그래서 <strong>Router-like</strong> adapter
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/8964497b-6a97-4865-824a-3fc38564e9c5/image.png" alt=""></p>
<h3 id="ip-assignment">IP assignment</h3>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/472e819d-7df6-44ca-b14c-bbfc0c2822ee/image.png" alt=""></p>
<p>centos7깔때 네트워크 열어서 위와 같이 바로 뜨는 듯함.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f7973bdb-a979-4504-95d0-d35c8273ad0c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/c7ecb08c-9312-4c70-a7bc-167b287d6f2f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/9308e13c-256d-4c81-b310-0177f8eec2c8/image.png" alt=""></p>
<h4 id="ipport">[IP]:[Port]</h4>
<p>was나 db 설정이 끝나면 위에서 할당하고 열어둔 ip:port로 접속가능</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4d70f5f4-3c1f-4177-925f-b57c4dea5b98/image.png" alt=""></p>
<h2 id="centos--application-server">CentOS =&gt; Application Server</h2>
<p>CentOS에 추가적인 설정을 통해 Application Server로 구체화한다.</p>
<h3 id="ssh">SSH</h3>
<p>안전하게 설정된 22번 포트로 통신하는 것으로 일단 정리
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/6e4cc795-3af7-4018-adee-ce852bdb02e8/image.png" alt=""></p>
<p>SSH가 되면 안전하게 파일을 전송하는 SCP 통신도 된다.</p>
<h3 id="scp">SCP</h3>
<pre><code>scp [option] [file or directory] [username]@[target_ip]:[target_path]</code></pre><pre><code>scp testfile.txt root@192.168.56.1:/home/root</code></pre><p><a href="https://cheershennah.tistory.com/198">scp</a> 또한 22번 도로와 같은 22번 포트로 통신한다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/e8ec398f-13b5-408e-8cfa-b725f1abfa1f/image.png" alt=""></p>
<p>인터넷에 직접 연결된 Windows10 에서 필요한 tomcat을 다운받아 1차적으로는 외부와 단절된 CentOS7으로 scp전송한다. rpm, yum, wget없이 고립된 운영체제가 유일한 통로를 통해 자료를 받는 방법으로 이해중</p>
<p>근데 대다수의 자료는 모두 yum으로 jdk 설치와 설정을 한번에 하고, 별개로 scp로 전송하는 글은 10년 전에 1개 찾았다. 그래서 부득히 yum 자료들을 매우 많이 짜깁기함.</p>
<h3 id="jdk">JDK</h3>
<p>설정과 밀접한 리눅스의 CentOS 디렉토리를 말하면</p>
<ul>
<li>/etc/profile</li>
<li>/usr/bin</li>
<li>/home/root/*</li>
</ul>
<p>/etc/profile은 윈도우에서 jdk 설정할때, JAVA_HOME, Path 들 설정하는 자료에 대응</p>
<p>/usr/bin은 운영체제가 가용 명령어를 모아두는 디렉토리, 여기에 명령어 설정이 안되어 있으면, cmmand not found가 뜬다.</p>
<p>/home/root 하위 디렉토리 및 파일들은 내가 만든 디렉토리 파일들로 설정이 편하게 할려고 이리 함. 보안적인 부분은 추후 aws에서 해볼듯</p>
<p><strong>참고로</strong>
설정은 옆집 김치찌개 조리법처럼, 만든사람이 생각한대로 하면 된다. 똑같은 결과를 얻고자 할수록 선택지는 정해진다고 생각. 아래 내용은 이러한 조리법</p>
<p><a href="https://blog.miyam.net/190">yum install jdk</a>을 하면 아래 install과 centos의 jdk 인식 2가지 설정을 한번에 해준다. <a href="https://yoogomja.tistory.com/entry/CentOS-VirtualBox%EC%83%81%EC%97%90%EC%84%9C-SSH-FTP-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-JDK-%EC%84%A4%EC%B9%98?category=694035">rpm도 그런듯</a>. rpm은 1995년도 이후 CentOS면 들어가있을듯하다. 유용할듯</p>
<hr>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/a23df06b-906a-4d23-8cc4-111825646972/image.png" alt=""></p>
<p><a href="https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html">download site</a></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/652f0699-ca06-497b-85aa-0176d4356d2c/image.png" alt=""></p>
<p>파란색 버전의 jdk로 압축해제하면, 뜬금없이 아래와같은 <a href="https://nine01223.tistory.com/123">안내</a>가 뜸</p>
<pre><code>[root@localhost bin]# ./javac
-bash: ./javac: cannot execute binary file</code></pre><p>지금보면 저 ARM이 아마도 intel이 아닌 arm버전을 말하는 듯? 하는데, <a href="https://nine01223.tistory.com/116">64bit OS에 64bit</a>를 제대로 넣는데? 왜그러지이이이이이이이이이이이이?하면서</p>
<p>centos, jdk, install로 조합한 검색 열심히 해봤자, 나오는 건 지겹도록 본 yum 명령어를 통한 설치 및 자동 config 였음. 그리고 수동설치라고 해도 yum으로 wget하는 게 나옴. 그게 일반적인 가본가하다가, 그냥 왠지 arm이 뒤늦게 보이고, 딴걸로 설치했더니 
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/847c58db-4c71-4e79-ae20-293175f5a033/image.png" alt=""></p>
<p>내가 아는 게 뜸. 넘쳐나는 약자에 대해서 무신경했었으니, 그럴 수 있지. 이제부터는 윈도우에서 했던 거와 같이 JAVA_HOME 등 OS가 java  명령어를 자기 일부로 받아들이게 설정 시작</p>
<hr>
<p><strong>JAVA_HOME 설정하면 끝날 줄 알았는데 아니었네</strong></p>
<p><a href="https://youn12.tistory.com/27">JAVA_HOME 설정하는 법</a> 따라서 JAVA_HOME했고,</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/d8d0688e-f1f0-429f-9781-f1fa40d24f88/image.png" alt=""></p>
<p>echo $JAVA_HOME하면 정상적으로 뜨는데, 윈도우때와 달리, <strong>운영체제 차원에서</strong> java 명령어를 인식 못함</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/29e944a7-999d-4e24-878e-050a2188d574/image.png" alt=""></p>
<p>결과적으로 /usr/bin 하위에 소프트링크를 걸어야겠다라고는 생각함. 근데, 윈도우사용자로서 경험한 것 내에서 해야할일을 생각하고 찾은글을 따라 했는데</p>
<p>현재까지 수동설치글은 못찾고, 모두 다 yum install jdk 글이라 이런 부분을 인지못함. 그렇네. 10년 전에 scp로 파일 후 guest로의 다운로드가 가능하다라는 글 1개에서 여기까지 온거면 그럴 수 있지.</p>
<hr>
<p><strong>이렇게 많은 명령어들을 어떻게 다 소프트링크 걸지?</strong></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/fe828cf1-6cfb-49cb-80dc-6bae7720ace9/image.png" alt=""></p>
<p>yum으로 설치했다는 글에서 JAVA_HOME 설정하는 글 보면, </p>
<p>/usr/bin/java 가 소프트링크로 자동배치된 /usr/lib/jvm/[해당버전 jdk]/java</p>
<p>연결되어있어서, 이때 /usr/lib/jvm/[해당버전 jdk]를 JAVA_HOME으로 설정하고 끝남.</p>
<p>즉, 명령어별로 소프트 링크 거는 건 자동화함. 근데 나는 yum을 안써서 그게 안됨.</p>
<p>당장 눈에 보이는 java, javac에다가 소프트링크 1개씩 걸수는 있지. 근데 그건 코딩하는 사람 사고 방식은 아닌듯? 자동화를 위해선 쉘스크립트를 짜야할듯?</p>
<p>근데, 막연히 떼어두었는데, rpm 쓰면 해줄거 같음. <a href="https://dololak.tistory.com/312">rpm 우선 tar의 centos 커스텀으로 이해</a>
쉘스크립트는 방향이 아닌듯, 로그인은 커녕 게시글전체 조회도 시간내불가할듯</p>
<hr>
<p><a href="">설명</a>에 따라 rpm으로 압축해제하니, 소프트링크까지 자동으로 걸어준듯함.</p>
<pre><code>rpm -ivh jdk-11.0.16_linux-x64_bin.rpm</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/436be195-dccf-4324-b632-4c93e2ba520d/image.png" alt=""></p>
<p>이제는 역으로 설정된 소프트링크를 바탕으로 JAVA_HOME 변경</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/fbbf5cc2-2062-4b0d-a2b9-310be9f0fb20/image.png" alt=""></p>
<p>한편, yum으로 설치하면 /usr/lib/jvm 하위에 jdk가 배치되는듯. yum 쓸때는 이것만 알아두면 될듯</p>
<p>이쯤에서 확인하는 <a href="https://change-words.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-rpm-yum">rpm and yum</a></p>
<p>rpm은 지금 본것처럼 내 작업노트북과의 통신만 이루어질뿐, 외부 망을 직접 타진 않음.</p>
<h3 id="tomcat">Tomcat</h3>
<p><a href="https://velog.io/@qudalsrnt3x/CentOS-Tomcat-8-%EC%84%A4%EC%B9%98">CentOS 7 tomcat 설치</a> 따라 진행, catalina는 안함. 안해도 되긴하는데, 세부적인건 나중에 aws</p>
<p>참고로, 설치 당시 최신인 9.0.65 version 설치했는데, 그새 9.0.67 나옴. <a href="https://chobopark.tistory.com/187">톰캣 이전 버전 다운로드 방법</a> 참고해서 <a href="https://suzxc2468.tistory.com/166">리눅스 맞춤 tar 압축파일</a> 받는다.</p>
<p><img src="https://velog.velcdn.com/images/pairpilot/post/bd39b45e-9358-41bd-b9cc-554063b14c9c/image.png" alt=""></p>
<p>톰캣이 구동할려면 JAVA_HOME이 필요. 아마 기본적으로 이 경로를 찾아가게 세팅되있을듯, 윈도우에서도 톰캣안쓰는 java application 돌릴때도 왜 꼭 JAVA_HOME이라고 명명할까했는데, 이러한 곳에서 넘어온것인듯</p>
<p><img src="https://velog.velcdn.com/images/pairpilot/post/50389c9a-f9b1-435d-a771-845875bc0feb/image.png" alt=""></p>
<p>./ 이라는 건 윈도우에서 파일 더블클릭해서 호출하는 것</p>
<p>startup.sh 해서 Tomcat started 확인</p>
<p>curl은 ip:port 로 응답 요청 하는 걸로 아는데, 왠지 get 일듯</p>
<p>127.0.0.1 는 한국어에 &#39;나와 너&#39; 중 나에 대응하는 ip로 이해</p>
<p>컴퓨터들의 ip로 너(상대) 컴퓨터를 찾는데, 그러면 나를 찾는 ip도 있을법 하니까</p>
<p>그래서 8080 port에서 제공하는 html 을 response 로 받는것, </p>
<p>나는 누구?
=&gt; response ( html )</p>
<p>스스로에게 묻고 답하는 게 웃기긴함, 그리고 127.0.0.1 보다 직관적인 이름으로 localhost라는 또다른 이름을 주었다고 생각중</p>
<p><code>curl 127.0.0.1:8080 = curl localhost:8080</code></p>
<hr>
<p>상단 port와 ip 설정을 통해 Windows 10에서도 접속가능 재확인</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/518465d0-e5d0-49b9-8bec-f626a46af7d8/image.png" alt=""></p>
<h2 id="centos--db-server">CentOS =&gt; DB Server</h2>
<p><a href="https://sidepower.tistory.com/511">virtualbox instance 복제</a>를 통해서 기존 CentOS 설정을 그대로 가진 새로운 인스턴스를 생성, 실제로 복사한 인스턴스는 게스트 IP가 원본과 당연히 같다.</p>
<p>아직 게스트 간 통신을 할 것은 아니므로, 냅둔다. 조금 유의할 부분은 guest ip가 동일하므로, 두 인스턴스를 동시에 실행시키지 않는다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/a53e08fb-c86d-422d-9990-1ac230a12144/image.png" alt=""></p>
<p>(web + was) server와 달리, db는 폐쇄망을 가정.이에 따라 rpm을 통한 설정이 비교적 중요</p>
<p>근데 왜 이렇게 예시들에 yum을 활용한 db 설치가 1번째로 소개되나 생각하면 정말 최초 인프라 구축시에는 열어놔서 그런가?
일단 패스</p>
<h3 id="yum과-rpm-종합활용">yum과 rpm 종합활용</h3>
<p>폐쇄망을 전제할때, yum을 직접은 못쓰나, <a href="https://letitkang.tistory.com/262">설명</a>과 같이 인터넷을 접근해도 무방한 곳에서 yum으로 rpm 패키지를 다운로드 받은 후, 폐쇄망에 접근하여 이 rpm들을 순서대로 압축해제하는 방법이 존재하고 아주 효과적</p>
<p>왜냐하면 하단 &#39;rpm만 사용하면 안되는 사례&#39;에서 볼 수 있듯이, rpm을 활용한 설치 시, 고질적인 의존성 문제가 있음. 경우에 따라서는 개인 DBA가 해결불가능할수 있음</p>
<p>우선 공식사이트 경로를 통해 핵심 rpm 파일 확보
그리고 이와 버전연동이 잘 되어있을 rpm들을 인터넷이 되는 서버에서 yum --download를 통해서 별도로 확보하고 전송</p>
<p>개인적으로 2시간동안 돌고돈 의존성 문제가 폐쇄망 내에서도 4줄로 효과적으로 해결됨</p>
<h4 id="yum-chocolately-homebrew">yum, Chocolately, homebrew</h4>
<h3 id="설치">설치</h3>
<pre><code>rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
</code></pre><p>한 다음 쑥쑥 설치된다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/afc24a3a-b004-4164-b351-dd332eefd783/image.png" alt=""></p>
<p>/usr/pgsql-12/bin 에서</p>
<pre><code>postgres -D /usr/local/pgsql/data</code></pre><p>도 가능하나, 매번 그렇듯 이러한 manually의 어려움과 실수가능성을 아시는 분들이 아래와같은 <a href="https://m.blog.naver.com/colt357/220908573277">service</a>라는 단위로 제어가능하게 해주심 감사감사</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f7215341-e764-4884-8d3a-16aa0b0e0e25/image.png" alt=""></p>
<p><a href="https://junb51.tistory.com/9">service, systemctl</a></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/76f739ba-2f17-4e65-a3d8-dda3e156e873/image.png" alt=""></p>
<pre><code>sudo -u postgres psql
</code></pre><p>리눅스상에 자동 등록된 postgres user로 psql이라는 명령어를 실행</p>
<p>postgresSQL에 접속됨</p>
<p>참고자료
<a href="https://projooni.tistory.com/entry/CentOS-7%EC%97%90%EC%84%9C-PostgreSQL-13-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-Offline">https://projooni.tistory.com/entry/CentOS-7%EC%97%90%EC%84%9C-PostgreSQL-13-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-Offline</a></p>
<hr>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/1628cf4f-4c2a-4e0f-b4d3-143bf236399c/image.png" alt=""></p>
<p>windows 10의 dbeaver로 접속</p>
<h3 id="rpm만-사용하면-안되는-사례">rpm만 사용하면 안되는 사례</h3>
<hr>
<p>12.11 도 희망일뿐, 근본적으로 다른 접근 필요</p>
<p>적극활용</p>
<hr>
<p>[Postgresql] Postgresql13 rpm으로 설치
<a href="https://hgko1207.github.io/2020/09/10/postgresql-1/">https://hgko1207.github.io/2020/09/10/postgresql-1/</a></p>
<p><a href="https://reason1241.tistory.com/42">https://reason1241.tistory.com/42</a></p>
<p><a href="https://www.c-sharpcorner.com/article/postgresql-installation-and-uninstallation/">https://www.c-sharpcorner.com/article/postgresql-installation-and-uninstallation/</a></p>
<p>=&gt; lib이랑 client 먼저 rpm 인스톨하면, contrib이나 server는 무관한듯</p>
<p>postgreSQL 다운로드</p>
<p><a href="https://www.postgresql.org/download/linux/redhat/">https://www.postgresql.org/download/linux/redhat/</a></p>
<p><a href="https://yum.postgresql.org/rpmchart/">https://yum.postgresql.org/rpmchart/</a></p>
<p><a href="https://yum.postgresql.org/12/redhat/rhel-7-x86_64/repoview/postgresqldbserver12.group.html">https://yum.postgresql.org/12/redhat/rhel-7-x86_64/repoview/postgresqldbserver12.group.html</a></p>
<pre><code>scp -r postgresql12-12.12-1PGDG.rhel7.x86_64.rpm root@192.168.56.1:/home/root/postgresql

scp -r postgresql12-contrib-12.12-1PGDG.rhel7.x86_64.rpm root@192.168.56.1:/home/root/postgresql

scp -r postgresql12-libs-12.12-1PGDG.rhel7.x86_64.rpm root@192.168.56.1:/home/root/postgresql

scp -r postgresql12-server-12.12-1PGDG.rhel7.x86_64.rpm root@192.168.56.1:/home/root/postgresql</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/1f49137a-62b1-42b7-9ffa-767411aa4b28/image.png" alt=""></p>
<pre><code>sudo rpm -ivh postgresql12-libs-12.12-1PGDG.rhel7.x86_64.rpm
sudo rpm -ivh postgresql12-12.12-1PGDG.rhel7.x86_64.rpm
sudo rpm -ivh postgresql12-server-12.12-1PGDG.rhel7.x86_64.rpm
sudo rpm -ivh postgresql12-contrib-12.12-1PGDG.rhel7.x86_64.rpm
</code></pre><p>-ivh : 패키치 설치, verbose 자세한 정보 출력, print hash marks: 설치 진행 상황을 # 문자를 이용하여 출력한다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/d3004bcf-6daa-41e3-ad7b-8646d9074311/image.png" alt=""></p>
<p>위와같이 공식 사이트에서 제공하는 rpm을 다운받아 설치하려고 하나, error가 뜬다. 이는 rpm 명령어의 고질적인 의존성 문제이다. 더불어 관련된 rpm 패키지가 모두 있더라도, 그 설치 순서에 따라서 설치가 되기도 안되기도 한다.</p>
<p>지금은 4개라서 어떻게든 추가 작업을 통해 대응가능하지만, 실무에서 10여개 이상의 rpm을 상대해야하는 상황이라면 아래와같은 방법을 혼용할 수 있다.</p>
<p>rpm과 yum 응용
<a href="https://letitkang.tistory.com/262">https://letitkang.tistory.com/262</a></p>
<p><a href="https://centos.pkgs.org/7/centos-x86_64/libicu-50.2-4.el7_7.x86_64.rpm.html">https://centos.pkgs.org/7/centos-x86_64/libicu-50.2-4.el7_7.x86_64.rpm.html</a></p>
<pre><code>scp -r libicu-50.2-4.el7_7.x86_64.rpm root@192.168.56.1:/home/root/postgresql

sudo rpm -ivh libicu-50.2-4.el7_7.x86_64.rpm</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/a4adcf34-3431-4d4b-ba22-8d14d0f07cec/image.png" alt=""></p>
<p><a href="https://pkgs.org/download/libperl.so()(64bit)">https://pkgs.org/download/libperl.so()(64bit)</a></p>
<pre><code>scp -r perl-libs-5.16.3-297.el7.x86_64.rpm root@192.168.56.1:/home/root/postgresql

sudo rpm -ivh perl-libs-5.16.3-297.el7.x86_64.rpm
</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/95a83456-58dd-447a-998f-85cb6ac644cf/image.png" alt=""></p>
<p><a href="https://centos.pkgs.org/7/centos-x86_64/perl-5.16.3-297.el7.x86_64.rpm.html">https://centos.pkgs.org/7/centos-x86_64/perl-5.16.3-297.el7.x86_64.rpm.html</a></p>
<pre><code>scp -r perl-5.16.3-297.el7.x86_64.rpm root@192.168.56.1:/home/root/postgresql

sudo rpm -ivh perl-5.16.3-297.el7.x86_64.rpm</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/a3063fc8-9e58-4e6f-bc0c-298917de5d41/image.png" alt=""></p>
<p>1개 남아서 방심했는데, 그냥 안되는 일 하고 있구나 하면서 계속해야함</p>
<p>하나씩 에러뜨는대로 설치하면 되는 게 아닌 게, 두 rpm이 서로 필요하면서 또 언제까지 새로운 의존 rpm을 설치해야할 지 모름.</p>
<p>이에 따라 버전을 12.11 로 우선 시도</p>
<pre><code>rpm -qa | grep postgre
rpm -e [rpm 패키지명]</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/94b53438-9e43-4532-a4a4-fc9ebc969145/image.png" alt=""></p>
<p>삭제도 역순으로 해야한다. 이거까지하면 rpm으로 의존성을 관리한다는 것 무게를 다시한번 느낄 수 있다. 다른 사람이 해놓은 것이라면 더더욱 이후사람은 제어불능에 빠지기 쉽다.</p>
<h2 id="임시">임시</h2>
<h3 id="nat--port-forwarding">NAT  Port Forwarding</h3>
<p>__ 보다 대등한 관점에서__ Windows 10 과 CentOS 7 그리고 네트워크 요소를 도식화함. Windows가 VirtualBox 를 품고 있다라고 표현하려고 노력함</p>
<p><a href="https://storytown.tistory.com/14">port forwarding 설명</a>에 따르면, 흔히 집에 있는 wifi 공유기 생각하면 좋을 듯하다. 그리고 이 공유기를 중심으로 네트워크망 구축 시작</p>
<p>(CentOS7의 ip와 port)를 (작업노트북 virtualbox용 ip와 port)를 우선 확인하고</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/11ce2863-5d4e-4789-99c9-6e170f0226f7/image.png" alt=""></p>
<p>이제는 상대가 묻고 답하게 설정하기 위해선 앞선 virtualbox port fowarding을 추가 설정해야햠</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/6f724735-6228-421f-aa66-9a6ee1ab7b7a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/d7e78bec-61b7-47f0-ac04-8a98ecc43d1d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4ed196a0-ebfa-4f48-a7ee-700fdaf63443/image.png" alt=""></p>
<p>CentOs7 가상머신을 선택하고, 이것의 &#39;설정&#39;, 네트워크, NAT 확인, 2개를 연결, 임시 공유기의 포트포워딩 세팅한다고 생각 중</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/b677d55c-5986-4273-b8a4-88d8c3289bbd/image.png" alt=""></p>
<p><strong>!! CentOS7이 &#39;실행중&#39; 일 때  !!</strong></p>
<pre><code>ssh root@192.168.56.1 -p 22</code></pre><p>로 접근가능하다</p>
<p>한편, 여기서 192.168.blabla에는 또 <a href="https://velog.io/@hidaehyunlee/%EA%B3%B5%EC%9D%B8Public-%EC%82%AC%EC%84%A4Private-IP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90">이야기; 사설ip, 공인 ip</a>가 숨어있다.</p>
<p>ssh가 된다면 scp도 된다.</p>
<hr>
<p>virtualbox guest 간 통신을 위해 다른 관점의 ip 설정부터</p>
<p><a href="https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=wwwkasa&amp;logNo=221559500032">https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=wwwkasa&amp;logNo=221559500032</a></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/de100b01-ed77-4d1b-9309-b4f3107290ee/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/9ce6117c-f7ac-4562-89da-c00a823b0d87/image.png" alt=""></p>
<p>새로운 enp0s8이 생김, 내가 기존에 쓰던거는 enp0s3 와 별개이고, 어제 삽질한 게 enp0s3에는 세부설정이 enp08에 비해 없어서 그런듯?, 역시 하나 되는거 생기니까, 줄줄이 떠오름</p>
<p>어제 몇시간 갈려나간 문제가 한텀쉬고 왔더니 한방에 됨. 애당초 자료가 없는 환경이 아니라지만, 되기를 바라면서 했던 설정들
이 안되고, 자칫 설정하나 잘못했다가 어디까지 되돌아가야하나 하는 조바심과 불안감이 작용을 해서 그런듯, 원래그런거지이이이 기계도 아니고</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/ae8a591d-2ea4-4df9-b0b7-74633e81e7f3/image.png" alt=""></p>
<p>한편 정확히는 어제 시도한 포트포워딩은 여전히 안되네, 내 로컬 ip의 5432로 접속하면 이게 NAT에 의해 10.0.2.15:5432로 전환되서 db에 붙는 게 당연하다고 생각했고, 내가 다른 데서 잘못했다고 생각했는데, 나중에 돌아와서 상황파악 다시해야겠다.</p>
<p>ssh로 접근할때는 이렇듯 내 ip:22으로 붙으면 NAT되고, 10.0.2.15:22로 가게 설정해서 작업이 됬는데, 말이지</p>
<hr>
<p>windows 10 에서 virtualbox 의 ec2에 port forwarding을 통해서 접근했듯이, Windows10에서 포트포워딩을 경유해서 dbeaver가 virtualbox postgresql에 붙기를 기대했음</p>
<p>dbeaver가 192.168.56.1:5432로 들어가서 10.0.2.15:5432 로 전환되서 붙는 생각을 했고,</p>
<p>관련 .conf 다 설정했는데, 안됨</p>
<p>안되니까, 또 아 되야 하는데... 아 되야하는 데 하면서 빙글빙글 3시간정도 돌음. 그 시간에 딴 거 했으면 하나는 끝냈을텐데 설정잡는 건 역시 지능보단 심신안정인듯</p>
<p>일단 포트포워딩말고, virtualbox guest간 통신 설정잡고 다시 돌아와야지이이이이</p>
<hr>
<p>외부접근
!! 방화벽이랑 설정파일 둘다 !!
<a href="https://devkingdom.tistory.com/267">https://devkingdom.tistory.com/267</a></p>
<p>포스트그레 방화벽
<a href="https://tobepro.tistory.com/8">https://tobepro.tistory.com/8</a></p>
<p><a href="https://tbmaster.tistory.com/89">https://tbmaster.tistory.com/89</a></p>
<p>postgreSQL - 추가 방화벽 설정 관련 자료
<a href="https://wylee-developer.tistory.com/24">https://wylee-developer.tistory.com/24</a></p>
<p>posrgreSQL - 외부접근 시 방화벽을 통한 설정이 권장 된다?
<a href="https://rastalion.me/centos-7-%EC%97%90%EC%84%9C-%EB%B0%A9%ED%99%94%EB%B2%BD%EC%97%90-postgresql-%EB%A6%AC%EC%8A%A4%EB%84%88-%ED%8F%AC%ED%8A%B8-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0/">https://rastalion.me/centos-7-%EC%97%90%EC%84%9C-%EB%B0%A9%ED%99%94%EB%B2%BD%EC%97%90-postgresql-%EB%A6%AC%EC%8A%A4%EB%84%88-%ED%8F%AC%ED%8A%B8-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0/</a></p>
<p>.bash_profile 이 뭘까
포스트그레 11 센트오에스 에 설치 ; 영문모를 .bash_profile, 방화벽 설정참고
<a href="https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=geartec82&amp;logNo=221455688560">https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=geartec82&amp;logNo=221455688560</a></p>
<p>db remote access
PostgreSQL remote access</p>
<p><a href="https://cloud.google.com/community/tutorials/setting-up-postgres">https://cloud.google.com/community/tutorials/setting-up-postgres</a></p>
<p><a href="https://dev-j.tistory.com/20">https://dev-j.tistory.com/20</a></p>
<p>3-tier-architecture
<a href="https://jaws-coding.tistory.com/9">https://jaws-coding.tistory.com/9</a></p>
<p>virtualbox 네트워크망
<a href="https://yjshin.tistory.com/entry/%EB%B2%84%EC%B6%94%EC%96%BC-%EB%B0%95%EC%8A%A4-VirtualBox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0">https://yjshin.tistory.com/entry/%EB%B2%84%EC%B6%94%EC%96%BC-%EB%B0%95%EC%8A%A4-VirtualBox-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</a></p>
<p>온프레미스 클라우드
<a href="https://www.microsoft.com/ko-kr/microsoft-365/business-insights-ideas/resources/cloud-storage-vs-on-premises-servers">https://www.microsoft.com/ko-kr/microsoft-365/business-insights-ideas/resources/cloud-storage-vs-on-premises-servers</a></p>
<p>#
[리눅스마스터2급 관련 지식, 좋음]
<a href="https://velog.io/@layssingcar/%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-Protocol-TCPIP">https://velog.io/@layssingcar/%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-Protocol-TCPIP</a></p>
<p><a href="https://blog.dalso.org/linux/14393">ipconfig, netstat 깔기, ubuntu</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[인프라] Cloud]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Cloud-xsco0ngn</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Cloud-xsco0ngn</guid>
            <pubDate>Thu, 29 Sep 2022 23:12:42 GMT</pubDate>
            <description><![CDATA[<h1 id="cloud">Cloud</h1>
<ul>
<li>AWS</li>
<li>GCP</li>
<li>Azure</li>
<li>OCI ( Oracle Cloud Infrastructure )</li>
</ul>
<h2 id="aws">AWS</h2>
<p>IAM</p>
<h3 id="db">DB</h3>
<p><a href="https://it-eldorado.tistory.com/115">https://it-eldorado.tistory.com/115</a></p>
<ul>
<li>encoding 
utf8에서 이모지 있는 utf8로 변경하는 거 차차</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/fd6ce7e7-955b-40eb-837d-806a4c064a33/image.png" alt=""></p>
<p>12.12에 제일 가까워보이는 12.11 로</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/384d4fe8-54ca-4e8b-9115-e65d3a46829d/image.png" alt=""></p>
<p>몇분 기다리면, 이렇듯 데이터베이스 리스트에 사용가능이 뜬다. 참고로 예전에 있던 건 지웠다.</p>
<p>새삼스럽지만, 클릭 3번이내로 DB가 만들어진다는 건 감사한일이네</p>
<p>dbeaver - postgresql 연결</p>
<p><a href="https://8iggy.tistory.com/71">https://8iggy.tistory.com/71</a></p>
<p>!! 아 port 5432가 아니라, 평소 ec2 접속할때처럼 22 열어두었다가 삽질함 !!</p>
<p>그리고 <a href="https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html">공식가이드</a>와 어느새 pgadmin4 ui 변경됨</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/2bc780a3-1a0f-4e18-9538-8ebdb6f0855d/image.png" alt=""></p>
<h2 id="vpc">vpc</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f845f1a8-2271-400a-a47f-1826a0680b90/image.png" alt=""></p>
<p>* VPC ID는 자동생성되고, Name는 내가 사후기입한 부분</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/1e493e2f-5b5d-44ba-a604-b6250429ca67/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/b107e1e8-7ac2-48c3-807e-65805b53261d/image.png" alt=""></p>
<h2 id="subnet">subnet</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/b0449750-2044-4b8a-b34a-2c3a29fd9d8b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/2c1d36c0-cbfc-4814-9040-62bdfb1d2ba5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/8fbf56ee-0307-487a-b5a6-466e2a055788/image.png" alt=""></p>
<p>기입값에 따라 vpc 생성 완료, 여기서 서브넷 ID 클릭</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/194f9b9c-b777-41c9-a2a5-f1b3f41adba1/image.png" alt=""></p>
<p>여기서 공인 IPv4 생성인데, 아직 몰것음</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/b620ef44-00aa-454e-a810-5479fd9e0d97/image.png" alt=""></p>
<p>소유자 번호 아깐 가리고, 지금은 안가렸는데, id는 괜찮은듯해서</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/1fd76bf0-0bab-4c69-b956-0165788f573c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/10767cab-70cb-45d9-ad50-f6367db0a5b3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/5875511b-50d8-4afa-9a70-1cfca5760121/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/0a583177-a9d9-4d1b-8e8e-d1af4716d8f5/image.png" alt=""></p>
<p>아래와 같이 자동으로 라우팅 테이블 생성</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4b3c311d-990f-4059-a637-09718f660175/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/c051f0c9-393b-4dea-b155-108c4703fb19/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4ed02e13-78f4-4217-be68-3f2cd5ee0c30/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/bec897fd-ef0a-4f76-8d47-27f89dfc4877/image.png" alt=""></p>
<p>다시 vpc 생성하되, 아래와같이 vpc 등(vpc and more)</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/07d4faf5-9c34-4835-be16-06d90f75840d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/65147371-e4e5-485a-bbdb-47dc304e7565/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/05ebcba7-a60b-42c6-a5f0-e3e3a2354bb6/image.png" alt=""></p>
<p>열심히 무언가 한다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4fe78081-7a2a-4d63-b113-44bcbfad6604/image.png" alt=""></p>
<p>새로 생겼다. 뒤에 -vpc가 거슬려서 추가로 <strong>name은 my-vpc-02로 정정함</strong></p>
<h1 id="추가">추가</h1>
<h3 id="aws-ec2-jdk-node-설치">aws ec2 jdk, node 설치</h3>
<p>aws ec2 jdk 설치
<a href="https://mchch.tistory.com/223">https://mchch.tistory.com/223</a></p>
<p>aws ec2 node 설치
<a href="https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html">https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html</a></p>
<h2 id="추가-1">추가</h2>
<p>scp ec2
<a href="https://dev.classmethod.jp/articles/use-scp-upload-scp/">https://dev.classmethod.jp/articles/use-scp-upload-scp/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[인프라] Virtual Infrastructure]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Virtual-Environment</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Virtual-Environment</guid>
            <pubDate>Wed, 28 Sep 2022 23:13:11 GMT</pubDate>
            <description><![CDATA[<h1 id="virtual-infrastructure">Virtual Infrastructure</h1>
<ul>
<li>Cloud<ul>
<li>aws, gcp, azure, oci</li>
</ul>
</li>
<li>virtualization software<ul>
<li><a href="https://www.virtualbox.org/wiki/Virtualization">virtualbox</a>, vmware</li>
</ul>
</li>
</ul>
<h2 id="cloud">Cloud</h2>
<ul>
<li>AWS</li>
<li>GCP</li>
<li>Azure</li>
<li>OCI(Oracle Cloud Infra)</li>
</ul>
<h3 id="features">Features</h3>
<ul>
<li>public cloud 구축과 제어를 위한 가상 머신(서버), 가상 데이터베이스, 네트워크 등의 가상자원과 제어 서비스를 제공</li>
</ul>
<p>cloud는 결과적으로 유료인 만큼, 수많은 설정과 이에 따른 에러 발생가능성을 전문전문가들이 해결해줌. 그리고 부분무료인 것들을 통해 이런 이점을 활용가능</p>
<h2 id="virtualization-software">Virtualization Software</h2>
<ul>
<li>Oracle VirtualBox</li>
<li>VMware</li>
</ul>
<h3 id="features-1">Features</h3>
<ul>
<li><strong>public cloud 구축 경험와 함께 한다면,</strong> 온프레미스 구축 과정을 간접적으로 가늠할 수 있다.</li>
<li>가상 머신 생성을 지원한다.</li>
</ul>
<p>물론 이것도 virtual로서 이성적으론 physical과 상반되는 개념이나, 개발자의 오감을 기준으로 Cloud Infra에 비하면 <strong>물리적인 내 노트북 HW를 기반으로 한다는 점에서 온프레미스 구축과정에 보다 근사하다고 생각,</strong></p>
<p>실제로 화끈하게 집에다가 물리서버 설치한 경우 아니면, 개발자의 오감을 기준으로 하면 물리서버의 물리는 상상(the Imaginary one)임. 물리서버 호스팅업체 통해서 물리서버 대여해도 눈에 보이진 않음.</p>
<p>지금보니까 physical의 반댓말이 virtual이라고 해도되는건가?라면서 나름 단어들의 관계를 생각해봤는데, 그냥 고유명사로 받아들이자. 쉐도우 복싱하기 싫음.</p>
<h1 id="practices">Practices</h1>
<p><a href="https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Cloud-xsco0ngn">goto myExperience : public cloud infra</a></p>
<p><a href="https://velog.io/@kimjh18_idt/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%98%EA%B2%BD-Virtual-Machine-SW">goto myExperience : on-premise-oriented</a></p>
<p><strong>!! 기본적인 시스템 환경 설정의 경우 !!</strong></p>
<p>설정은 옆집 김치찌개 조리법처럼, 만든사람이 생각한대로 해야 한다. 똑같은 결과를 얻고자 할수록 선택지는 한정된다고 생각. </p>
<p>위의 내용들은 이러한 정해진 조리법에 대한 내용들로서, 깊은 생각보단 
<code>&#39;옆집에서 그렇구나&#39;</code></p>
<p>하면서 해야 체력소모가 덜하다. 특히나 virtualbox의 윈도우업데이트 이슈는 많은 잠을 요구한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[설계-2] ERD&UI 내가 해도 되나?]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%84%A4%EA%B3%84-2-ERD-UI-%EB%82%B4%EA%B0%80-%ED%95%B4%EB%8F%84-%EB%90%98%EB%82%98</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%84%A4%EA%B3%84-2-ERD-UI-%EB%82%B4%EA%B0%80-%ED%95%B4%EB%8F%84-%EB%90%98%EB%82%98</guid>
            <pubDate>Wed, 28 Sep 2022 00:47:34 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<ol>
<li>ERD, UI 설계 예시를 학습한다.</li>
<li>ERD, UI 설계 도구를 활용한다.</li>
</ol>
<p>나에게 있어 설계란,
<code>개발을 요청하는 사람들이 자신의 생각을 효과적으로 정리할수 있게 해주는 틀</code></p>
<p>erd , ui 전반도 혼자할 건 아닌듯, 해봤자 
<code>내가 원하던 건 이게 아니었다</code>
라고 하도하도 많이많이많이 해서 agile 나왔것지.</p>
<h2 id="erd">ERD</h2>
<p>Entity Relationship Diagram, 우선 &#39;논리 스키마&#39;로 이해</p>
<h3 id="개념-논리물리-스키마-설계">개념, 논리&amp;물리 스키마 설계</h3>
<p><a href="https://en.wikipedia.org/wiki/Data_modeling#Conceptual,_logical_and_physical_schemas">wiki Data Modeling : Conceptual, logical and physical schemas</a> 참고</p>
<ul>
<li>개념 설계 : 조감도</li>
<li>논리 설계 : 평면도</li>
<li>물리 설계 : 치수재기</li>
</ul>
<p>개념 설계는 학교 조감도에서 크게 학교본관, 학교별관, 농구장, 축구장 등의 구성요소들을 표시하듯이 대상과 구성요소를 정의하는 것으로 우선 이해</p>
<p>논리 설계는 위와 같은 구성요소별 구체적인 속성값, 학교본관의 강의실, 교무실 등,들을 정의하는 단계로 이해</p>
<p>물리 설계는 강의실 설계도에 대응하여 특정 치수의 책상과 의자를 배치하듯이,특정 DBMS 업체별 아키텍처 특징이나 문법에 따라, tablespace 등을 고려하여 DDL을 작성하는 것으로 우선 이해</p>
<p>개념설계부터 하면 좋을 듯한데, 상대가 없으므로 논리&amp;물리로 바로감</p>
<h4 id="erd-설계--논리물리-설계">ERD 설계 : 논리&amp;물리 설계</h4>
<p>ERD 전문 툴의 경우, 사용하고자 하는 DBMS 종류를 설정하면 논리 설계에 대해 자동으로 물리설계가 지원됨. (<strong>Entity =&gt; Table</strong>)</p>
<p>가령, Entity Relationship Diagram을 작성하면 이에 대응하는 Table DDL을 자동 설계 및 작성해줌
draw.io도 ERD를 지원하나, 자동으로 DDL을 생성해주는 ERD 전문툴을 쓰면 효과적이다.</p>
<h3 id="erd-and-da5">ERD and DA#5</h3>
<p>이번의 경우 <strong>DA#5</strong>가 주어짐, 인터넷 자료가 충분하지 않으므로 반드시 가이드를 사용할 것</p>
<ul>
<li><a href="https://www.en-core.com/board/download">툴 다운로드</a> 시 문의 필요</li>
<li><a href="https://usermanual.wiki/Document/da5modelermanual.204080740/view">가이드</a></li>
</ul>
<p><strong>!! 유의 !!</strong>
가이드에 따르면 Barker 표기법이 기본값이고 관계선은 IE로 바꾸어도 Entity 형태는 여전히 Barker notation을 따라 끝이 둥굴다.</p>
<p> 그러나 참고하고자 하는 <a href="https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/">PostgreSQL Sample DataBase ERD</a>의 경우, IE 표기법이므로을 엄격히 지키는 것으로 보인다. 내 수준엔 혼용보단 부득히 하게 일관되게 Barker를 사용한다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/edea12cb-2590-40c4-8edd-1d9de313d879/image.png" alt="">
* 화면창을 살펴보면 옵션이라는 탭이 여러곳에 존재한다. 운좋게 빨리 찾았다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/dbb3ff79-c32a-43f1-88bd-bfc52c75ad5a/image.png" alt=""></p>
<p> 한편, <a href="https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model">wikipedia Entity–relationship model 챕터</a>에서 barker, IE(Crow&#39;s foot notation) 외 여러 표기법(notation)에 대해서 소개한다.</p>
<h4 id="실습">실습</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/79d6b456-c7cd-4600-9e2e-408d528f3abe/image.png" alt=""></p>
<p>* 최소의 ERD부터 시작, 그리고 제약조건 잘안지킴, 좀 DA#5랑 친해져야 겠다.</p>
<p><strong>처음에는 1개의 article이 여러개의 board에 분류가능하고, board는 여러개의 article을 가지는 다대다</strong>로 접근했다. 그러나 이는 1개의 사건(plot)이 여러개의 Story로 분기가능한 상황에 보다 밀접할듯</p>
<p>사용자는 게시글을 작성하고, 주어진 board에 해당 article을 분류한다고 접근했다. board를 소유하기 보단</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/0fbf0e2b-12ba-4db9-b591-81c8f149ec54/image.png" alt=""></p>
<p> 자동 스크립트 생성 기능 확인, db 연결해서 바로 넣고 싶은데, 설정 상 예측불가한 시행착오 보단, <a href="https://www.postgresql.org/docs/current/datatype.html">postgreSQL 자료형</a> 등 손수 기입 결정</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/acd182c3-0bb9-406d-b252-953b992f28cc/image.png" alt=""></p>
<p>최적최적화된 자료형 설정이 DA의 주요한 관심사가 아닐까 하지만 나의 현 역량과 상황 상, 이러한 세부사항은 추후 db 연결과 자동 생성 시 반영</p>
<p>참고로, 
postgreSQL sampledata의 ddl문을 보면 file 테이블의 film_id는 integer, 이를 사용하는 film_category의 film_id는 smallint이다.</p>
<p>모든 category가 쓰이지 않고, 일부만 쓰이는 데 초점을 맞추어 이렇게 자료형을 선언했으리라 생각한다.</p>
<h4 id="자동-생성-스크립트의-커스텀">자동 생성 스크립트의 커스텀</h4>
<p>아마도 안정성을 위해 시작과 끝에 모두 테이블 drop이 존재한다. 이를 지워야한다.</p>
<p>그리고 자동생성 스크립트에서 일부 구문은 중간에 에러로 떠서 멈추게 된다. drop 이더라도, 작동하게 if exist가 자동 생성안되서 그런듯하다. 다른 전문ERD 툴로 자동생성했을때와 성능차이를 볼 필요가 있다. </p>
<p>postgreSQL의 스키마 관련해서 user란 테이블이 postgreSQL 기본 테이블이름 중 하나라 publc.user로 만들어야 했다! 다른 article, board는 무관했음. 조금 껄끄럽지만, spring security의 user 객체명을 우선하여 지속사용</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/27f5f254-50f2-4d82-90f9-a96f5f167e9c/image.png" alt=""></p>
<h4 id="ms-odbc-and-postgres">ms odbc and postgres</h4>
<p>sql server 대신 postgresql
<a href="https://www.ibm.com/docs/ko/rational-build-forge/7.1.2?topic=setup-odbc-data-source-microsoft-sql-server">https://www.ibm.com/docs/ko/rational-build-forge/7.1.2?topic=setup-odbc-data-source-microsoft-sql-server</a></p>
<p><a href="https://www.postgresql.org/ftp/odbc/versions/msi/">https://www.postgresql.org/ftp/odbc/versions/msi/</a></p>
<h3 id="dbeaver-and-dml">DBeaver and DML</h3>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/fe243adb-3250-44a0-9cdc-ee7fe0b999b8/image.png" alt=""></p>
<p>dbeaver를 활용한 DML 생성 및 제어 시 보다 편리하게 자동스크립트를 활용가능했다.</p>
<p>엑셀 사용할 줄아는 사람이면 SQL문법 DB별로 몰라도 소통가능할듯</p>
<p>찾아보면, 조인 자동스크립트도 있을듯</p>
<h3 id="web-erd툴무료">WEB ERD툴(무료)</h3>
<p> DA#5가 GUI &amp; 한글 기반으로 클릭해보면서 해볼 건 많다. 친해지고 싶다. </p>
<p> 근데 개별 옵션값 설정(Barker =&gt; IE) 시 예상치 못한 문제(Entity 모양은 여전히 Barker인 경우) 등에 대해서 대응할 인터넷 예시를 못찾았다.</p>
<p>이에 따라 평소 알던 WEB ERD 추가, 그리고 무료는 많이 알수록 좋으니까</p>
<p><a href="https://gitmind.com/er-diagram-tool.html">무료 ERD툴 예시들</a> 중 web 기반은 대체로 협업기능을 추가로 제공하여 누락을 최소화하기 좋다. QuickDBD의 경우, 자동 DDL 기능도 지원하는 것을 확인하였다.</p>
<h2 id="ui">UI</h2>
<p>UID로 이해</p>
<p>완전 나한테 딱 필요한 자료
<a href="https://brunch.co.kr/@supernova9/195">https://brunch.co.kr/@supernova9/195</a></p>
<p>내 역량과 상황 상 추후 역으로 작성하면서 학습예정</p>
<p>툴은 피그마 부터 ppt 보다 나은 게 있것지, 대체로 공유잘되고, 상시업데이트일듯</p>
<p><a href="https://www.samsungsds.com/kr/insights/figma.html">https://www.samsungsds.com/kr/insights/figma.html</a></p>
<h1 id="추가">추가</h1>
<p>Jira Database Schema - <a href="https://developer.atlassian.com/server/jira/platform/database-schema/">goto</a></p>
<p>erd 이렇게 보여줘도 되는듯. 혼자 생각할때, erd도 대외비밀 아닌가했는데, 크랙커가 저 스키마를 사용가능할 정도로 침입했다는 것 자체가 파괴일듯, </p>
<p>나같으면 겨우 db에다가 select할게 아니라 들키기 전까지 한두개 심어둘듯</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[설계-1] UML 내가 해도 되나?]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%84%A4%EA%B3%84%EA%B0%9C%EB%B0%9C-%EC%A2%80-%EC%89%BD%EA%B2%8C-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B3%A0-%EC%8B%B6%EB%8B%A4</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%84%A4%EA%B3%84%EA%B0%9C%EB%B0%9C-%EC%A2%80-%EC%89%BD%EA%B2%8C-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B3%A0-%EC%8B%B6%EB%8B%A4</guid>
            <pubDate>Thu, 22 Sep 2022 23:28:19 GMT</pubDate>
            <description><![CDATA[<h1 id="목표와-배경">목표와 배경</h1>
<ol>
<li>UML의 usecase, class, sequence diagram 예시를 학습한다.</li>
<li>draw.io 활용능력을 키운다.</li>
</ol>
<p>나에게 있어 설계란,
<code>개발을 요청하는 사람들이 자신의 생각을 효과적으로 정리할수 있게 해주는 틀</code>
로 우선 정리</p>
<p> 게시판과 같이 기능 당 CRUD 가 1대1로 대응하는 세부적인 영역의 경우, 개발자는 큰 고민없이 바로 시작가능함.</p>
<p> 하지만, 이보다 더 복잡한 비즈니스 룰에 따르는 기능이라면 고객(또는 담당자)은 자신이 원하는 비즈니스의 영역과 구분을 한번에 말하기 힘들고, 중첩된 영역에 대해선 혼자서 말하기 어려움</p>
<p>즉, UML이라는 건 1명의 담당자와 1명의 개발자가 소통하기 위한 도구보단, <strong>서로 다른 업무 혹은 서로 중첩되는 업무를 담당하는 수십명의 담당자들과 한 명의 개발자가 문제를 정의하고 소통하기 위한 도구에 가깝다고 생각.</strong></p>
<h1 id="설계">설계</h1>
<p><del>(TO ME) 내가 개발하고 싶은 걸 다른 사람도 이해하고, 적용할 수 있게 전달하는 방법</del></p>
<p><del>- 최소한 누락은 없어야</del>
<del>- 가능하면 개발을 좀 빠르게 진행하는데 도움</del></p>
<p>(TO ME) 나에게 개발을 요청하는 사람들이 자신의 생각을 효과적으로 정리할수 있게 해주는 도구</p>
<ul>
<li>누락이 없기 위해서는, 설계 기간 동안 언제나 접근가능하고, 수정가능해야함. 문제가 없다면 상시 공유해도됨</li>
<li>개발지식은 지양하고 당사자가 UML에 필수적으로 참여해야함</li>
</ul>
<p><a href="https://en.wikipedia.org/wiki/Unified_Modeling_Language">wikipedia&#39;s Design chapter</a>에 의하면, </p>
<p><code>UML offers a way to visualize a system&#39;s architectural blueprints in a diagram</code></p>
<p>여기서 system이니 blueprints니 하는 것들은 여러 당사자들의, 수많은 업무(job)와 프로세스, 그리고 절차들의 합으로서 한번에 나오는 게 아니라고 판단. 이러한 접근과 설계 <a href="https://moongom.tistory.com/m/entry/Spring-%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B02-%EC%9C%A0%EC%8A%A4%EC%BC%80%EC%9D%B4%EC%8A%A4-%EC%A0%95%EC%9D%98%EC%84%9C">UML 예시</a>를 바탕으로 기본 경험을 습득</p>
<p><strong>신기하게도,</strong>
처음에는 온전히 개발자의 영역이라고 생각하고 접근하고, &#39;한번에&#39; 누락도 없어야하고, 개발에 직접적으로 도움이 되는 &#39;무언가&#39;를 완성하려고 하니까 손도 못댐. </p>
<p>그리고 하는 것 없이 시간은 시간대로 들고, 막연했음, 확신이 없고, 붕뜬 느낌. 근데 원래 그래왔던 거 같음. 처음의 접근을 바꿨으면 됬지.</p>
<h2 id="uml">UML</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/824049a0-8250-4a7c-ae45-6cccc7b51597/image.png" alt=""></p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Unified_Modeling_Language">wikipedia&#39;s UML</a> = Unified Modeling Language</li>
<li><a href="https://en.wikipedia.org/wiki/Modeling_language">wikipedia의 modeling lanaguage overview</a>에 의하면, modeling language = {graphical , textual}이고, UML도 해당</li>
</ul>
<h3 id="selected-uml">Selected UML</h3>
<ul>
<li>Behavior<ul>
<li>Usecase Diagram</li>
<li>Sequence Diagram</li>
</ul>
</li>
<li>Structure<ul>
<li>Class Diagram</li>
</ul>
</li>
</ul>
<p>한편,
개인적으로 하도 영어문법을 많이 배워서 그런가, language하면 grammer로서 textual만 강하게 떠오름. 회화중심으로 배웠으면 language라는 것에 손짓,몸짓 등 눈으로 보이는 것들도 좀더 쉽게 떠올랐을 것 같음</p>
<p>한국어로 &#39;배운 걸 너의 언어로 표현하라&#39;라고 하면 나는 마인드 맵같은 그림부터 그렸을듯함. 편하니까, 그리고 나만 편한 게 아니니까 UML은 코드가 아닌듯</p>
<h2 id="usecase-diagram">Usecase Diagram</h2>
<p>(TO ME) 시각적 요구사항 정의서</p>
<p>일반적으로 엑셀의 글자형태로 제공되는 <a href="https://moongom.tistory.com/m/entry/Spring-%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B01-%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD-%EC%A0%95%EC%9D%98%EC%84%9C-1">요구사항 정의서</a>에 대응하여 diagram으로 표현하는 방식이라고 이해. 이에따라 명세적 요구사항 정의서부터 시작</p>
<h3 id="requirement-specification">Requirement Specification</h3>
<p>요구사항 정의서, 요구사항 기술서, 명세서와 동급으로 일단 이해</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/91a13a3c-34a9-4199-b47c-473095411980/image.png" alt=""></p>
<ul>
<li><a href="https://docs.google.com/spreadsheets/d/13wLg7qpLXaPMTVaVwOJPn4UnPSGMu28OL1o7SlNLMPk/edit?usp=sharing">goto google docs</a></li>
<li>참고 예시들 : <a href="https://medium.com/@dnjswbf/%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD-%EC%A0%95%EC%9D%98%EC%84%9C-%EA%B8%B0%EC%88%A0%EC%84%9C-%EB%AA%85%EC%84%B8%EC%84%9C-b8d47599ab64">RS 예시1</a>, <a href="https://velog.io/@juyeon/%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD-%EC%A0%95%EC%9D%98%EC%84%9C-%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94-%EB%B2%95">RS 예시2</a>, <a href="https://moongom.tistory.com/m/entry/Spring-%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B01-%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD-%EC%A0%95%EC%9D%98%EC%84%9C-1">RS 예시3</a></li>
</ul>
<h4 id="기능적비기능적-요구사항">기능적/비기능적 요구사항</h4>
<ul>
<li>Functional Requirements(FR)</li>
<li>Non-Functional Requirements(NFR)</li>
</ul>
<p><a href="https://ee-22-joo.tistory.com/2">설명</a>에 따라, FR은 메소드로 구현되어 결과를 리턴하는 기능. NFR의 경우 대체로, 그 회사 비즈니스 룰에 의해 제약되는 조건으로 우선 이해, 가령 반도체회사 제조 공정에서만 요구되는 특정 최소값이라든지</p>
<h3 id="usecase-list-and-diagram">Usecase List and Diagram</h3>
<p> 상단 요구사항을 <a href="https://docs.google.com/document/d/1twsR_Wn7EFJb8agJXJhq-j6jRsSZtD-XramUTNJid1c/edit?usp=sharing">유즈케이스 목록</a>로 상세화</p>
<p> 추가로, Diagram</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/a34c96fd-2358-49cf-bf22-085dfcbc07a2/image.png" alt=""></p>
<ul>
<li>지속 수정을 고려하여 Actor와 usecase 사이 선은 생략</li>
<li>현재는 단일 게시판으로서 &#39;게시판 선택(접근)&#39;의 경우 기본값으로 자동 지정되므로 임의로 점선 표시</li>
<li>특정 게시판을 접근했을 때, 해당 게시판의 화면 내에서 게시글이 모두 조회되고, 등록/검색 가능하다고 전제</li>
<li>게시글상세 화면에서 수정과 삭제버튼을 배치할 것이므로, 상세 조회 아래 수정/삭제</li>
<li><a href="https://drawio-app.com/uml-use-case-diagrams-with-draw-io/">draw.io and usecase diagram</a>와 <a href="https://draw-io.en.softonic.com/download">draw.io desktop</a> 활용</li>
<li>참고 예시 : <a href="https://moongom.tistory.com/m/entry/Spring-%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B02-%EC%9C%A0%EC%8A%A4%EC%BC%80%EC%9D%B4%EC%8A%A4-%EC%A0%95%EC%9D%98%EC%84%9C">usecase 예시1</a>, <a href="https://poleved.tistory.com/114">usecase 예시2</a></li>
</ul>
<h2 id="class-diagram">Class Diagram</h2>
<p>(나중에 인텔리제이 플러그인으로 그릴예정)</p>
<ul>
<li>현재는 상속 안보임, User와 Member 해서 회원쪽에 sns 로그인관련 상속이 생길수는 있을 것 같지만, 지금은 관련없는듯</li>
<li>메소드명은 jpa 메소드명들 우선순위로 할듯, 다만 지금 맵퍼라서 계속 바꿔나갈예정</li>
</ul>
<p><a href="https://drawio-app.com/uml-class-diagrams-in-draw-io/">draw.io and class diagram</a> 참고는 해둠</p>
<p>현재 이클립스의 경우 관련 uml 플러그인활용(<a href="https://devsp.tistory.com/26">object aid</a>을 위해선 추가 설정이 필요함. 추후 인텔리제이에서 관련 플러그인 활용으로 대체)</p>
<h2 id="sequence-diagram">Sequence Diagram</h2>
<p>(나중에 인텔리제이 플러그인으로 그릴예정)</p>
<p><a href="https://drawio-app.com/create-uml-sequence-diagrams-in-draw-io/">draw.io and sequence diagram</a> 우선 활용</p>
<p>현재 이클립스의 경우 관련 uml 플러그인활용(<a href="https://devsp.tistory.com/26">object aid</a>을 위해선 추가 설정이 필요함. 추후 인텔리제이에서 관련 플러그인 활용으로 대체)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[웹 개발 환경-2] Database : postgreSQL]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-2-postgreSQL</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-2-postgreSQL</guid>
            <pubDate>Wed, 21 Sep 2022 04:19:31 GMT</pubDate>
            <description><![CDATA[<h1 id="postgresql">postgreSQL</h1>
<p><a href="https://dora-guide.com/postgresql-install/">설명</a>에 따라 다운로드 및 설치</p>
<p>설치 중 옵션값 변경 시 스스로 제어할 수 있는 옵션이 아니라면, 반드시 기본값대로 설치할 것</p>
<p>설명에 따르면, 
port ; 5432
root user : postgres
root user password : 본인 기입 값
locale : korea</p>
<p>참고로, 나는</p>
<p>user : com
password : puter
locale : US</p>
<p>이다.</p>
<p>*password는 설명하다가 어짜피 보여지기에 적어둠. 명령어 parameter 값이구나 하게</p>
<h2 id="postgresql-sample-data">PostgreSQL sample Data</h2>
<p>postgreSQL에서 공식적으로 제공하는 기본 테이블과 데이터를 넣는다.</p>
<p><a href="https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/">설명</a> 속 <a href="https://www.postgresqltutorial.com/postgresql-getting-started/load-postgresql-sample-database/">root user 기준 데이터 넣기</a>에 따라 Data를 넣는다.</p>
<p><a href="https://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip">Download link of sample data</a>을 다운로드 받으면 zip 형태인데 풀면 guide에서 요구하는 tar이다.</p>
<p><strong>gui 인 pgAdmin4으로</strong> load 하는 걸 강력히 강력히 추천한다. 이 또한 기본 제공 툴이다.</p>
<h2 id="client-tool">Client Tool</h2>
<p>db 접근해서 data를 제어하는 도구. 다른 예시로는 oracle sql developer</p>
<h3 id="dbeaver">dbeaver</h3>
<p><a href="https://www.sfdccode.com/95">설명</a>과 postgreSQL port, root user, password 기본값에 따라서 연결</p>
<p>대체로 더 많은 것들이 gui로 표현되서 클릭해보면서 배울 수 있다.</p>
<h4 id="dbeaver---postgresql-연결">dbeaver - postgreSQL 연결</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/cb689955-ed0d-4a51-bf8b-f645394b0336/image.png" alt=""></p>
<h3 id="pgadmin4">pgAdmin4</h3>
<p>postgreSQL 기본값으로 깔면 주는 툴, tutorial 등에서 사용해서 잠깐 겸함. 근데 dbeaver만큼 여러 DBMS를 지원할 지는 몰겠음</p>
<h2 id="persistence">Persistence</h2>
<p><a href="https://bryantson.medium.com/it-%EC%97%90%EC%84%9C-persistent-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4-bab1e7f8bbe">설명</a>에 의하면, Persistence (Architecture)란 데이터를 특정 DBMS에 종속되기 보단, data를 저장하는 방식인듯. 이 방법에는 여러 가지 기준이 있는데, 대표적으론 저장기간인듯. 휘발성/비휘발성 이런거</p>
<p>이런 점에서 persistence 관련 api, framework는 우선 노트북껐다켜도 보존해야할 중요데이터를 어디에 어떻게 저장할지를 도와주는 도구로 일단 마무리.</p>
<h4 id="persistence-api--framework-">Persistence API ? framework ?</h4>
<p>java persistence api - <a href="https://velog.io/@modsiw/JPAJava-Persistence-API%EC%9D%98-%EA%B0%9C%EB%85%90">goto</a></p>
<p>persistence framework - <a href="https://happyer16.tistory.com/entry/Persistence-Framework%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC-%EC%9E%A5%EB%8B%A8%EC%A0%90">goto</a></p>
<p>각자 잘 냅두고, 난 persistence 영역이라 일단 퉁친다. 거기에 난 mybatis니까 framework</p>
<h3 id="mybatis-framework">mybatis framework</h3>
<p><a href="http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&amp;ejkGb=KOR&amp;barcode=9791189184018&amp;orderClick=SPY">구멍가게 코딩단의 스프링 도서 기준</a></p>
<h4 id="p90--overview-of-mybatis">p90 : overview of mybatis</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f58d26a2-e7e0-4db4-84ec-9b7aac036959/image.png" alt=""></p>
<p>나는 <a href="https://mybatis.org/spring/ko/getting-started.html">공식문서</a>를 보고 양자택일인 줄 알았는데... 그림과 같이 서로 보완 되는 것으로서 같이 써야 한다. </p>
<p>2개를 모두 써야한다는 걸 알고, 공식문서의 소개 부분을 읽으니까, 호환성이라는 게 이제야 보인다. 다만, 시작하기 스텝의 필요조건 mybatis-spring 2.0.7 을 쓰기 위한 최소 3.5 이상의 mybatis dependency는 예시에 보이지 않는다.</p>
<p>나는 이걸 보고 착각 mybatis-spring 2.0.7 의존성만 추가해서 문제가 있었다. 그럴수있지. 기계도 아니고. 한글번역해준거에 감사</p>
<p><a href="https://pangtrue.tistory.com/141">추가 : mybatis and mybatis-spring 설명</a></p>
<h4 id="p90--mybatis-and-spring-legacy-prj">p90 : mybatis and spring legacy prj</h4>
<ul>
<li>spring-jdbc</li>
<li>spring-tx</li>
<li>mybatis</li>
<li>mybatis-spring</li>
</ul>
<p>4가지의 디펜던시가 <strong>필수적으로</strong> 필요하다고 한다. <a href="https://soulno.tistory.com/26">2가지만 넣고 되는 글</a>도 있는데...내가 안되서 패스, 그리고 tx도 써야하고</p>
<h4 id="pomxml-에-dependency-추가">pom.xml 에 dependency 추가</h4>
<p><a href="https://mvnrepository.com/">https://mvnrepository.com/</a> 이라는 사이트, 다른말로 <strong>Central 사이트, central repository 등등</strong>에서</p>
<p>무료로 dependency를 제공한다. 상기 디펜던시를 검색하고, 마냥 최신버전이 아닌, 다른 디펜던시들과 호환되는 디펜던시를 써야한다.</p>
<p>가령, 가장 최신 버전의 spring-tx를 썼을때, 임의 선택한 mybatis dependency 는 최신 버전의 spring-tx를 아직 지원안할수도 있다. 여러 종류의 호환성은 디펜던시별로 설명된다. </p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/83372324-5523-4c26-9c86-362b55118d4c/image.png" alt=""></p>
<p><a href="https://mvnrepository.com/artifact/org.springframework/spring-jdbc/5.3.22">goto</a></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/64c85e0a-6246-4bbc-bd80-e07c759c19d5/image.png" alt=""></p>
<p>vscode로 눈을 소중히</p>
<h4 id="p91--root-contextxml-and-sqlsessionfactory">p91 : root-context.xml and SQLSessionFactory</h4>
<p> DB connection 관련 객체를 spring은 bean으로 바로 제공한다. Spring Framework가 아니었더라면, 수많은 class들을 손수 코딩하고 또 @Bean 등의 어노테이션으로 빈등록해야한다. 이러다가 손가락 나가는 거인듯</p>
<p>나는 root-context.xml에서 명시하여 호출만 하면 된다.</p>
<p>SQLSessionFactory: SQLSession 모음 bean, 아마 oop의 factory 패턴이 적용되어 bean으로 등록될듯 </p>
<p>우선 root-context namespaces 에서 mybatis-spring 추가, xml file 상에서 namespace라는 개념을 쓰던 게 C++로 전달된건가 하고 일단 넘어감.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/be994872-c15a-4baf-814b-d78135fdbd26/image.png" alt=""></p>
<p>SqlSessionFactoryBean 추가
<img src="https://velog.velcdn.com/images/kimjh18_idt/post/0cda3e41-ba04-4c70-ae4b-ce16356b7382/image.png" alt=""></p>
<p>한편, 이러한 SqlSessionFactory 가 <strong>효과적인 connection pool로, 그리고 특정 DB, user(com)이 port 5432의 postgresql로</strong> 접근하도록 설정하는 설정 부분이 밑줄 그은 부분들이다 ; 빨간줄, 검정줄</p>
<p><strong>!! 여기서 bean id는 datasource라고 하고, ref는 dataSource라고 해가지고 1시간 날림 !!</strong> 
근데, 내가 이것들 다 손수 코딩했으면 최소 1일 날림</p>
<p>참고로, 나는 psql을 통해 com이라는 유저를 생성하였고, 그래서 root user인 postgres가 아니다.</p>
<h4 id="결과--junit을-통한-테이블-조회">결과 : junit을 통한 테이블 조회</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/e825b116-bbd7-420d-be1d-917179e306d2/image.png" alt=""></p>
<p>추가적으로 관련 디펜던시 추가 설정해서 rest controller를 만들어서도 조회가능하다. jsp 화면 안만들어도 되서 편하다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/28c48dc0-af06-48a0-b14c-416c6ce57b16/image.png" alt=""></p>
<p>json, xml 리턴 시 필요한 디펜던시</p>
<p><a href="https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.13.3">https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.13.3</a></p>
<ul>
<li><p><a href="https://mybatis.org/mybatis-3/sqlmap-xml.html">how to utilzie functions of mybatis</a></p>
</li>
<li><p>hikari 더 자세한 내용들; 옵션값, 깃허브
<a href="https://minkwon4.tistory.com/208">https://minkwon4.tistory.com/208</a>
<a href="https://github.com/brettwooldridge/HikariCP">https://github.com/brettwooldridge/HikariCP</a></p>
</li>
</ul>
<h2 id="추가--data-load-by-psql">추가 : data load by psql</h2>
<p>Legacy prj나 이로부터 빌드된 앱이 db에 접근하기 위해서는 url, username, password 생성이 필요하다.</p>
<p><a href="https://www.postgresql.org/docs/8.0/sql-createuser.html">공식 문서</a>를 따라 데이터와 유저, com, 를 생성하고 필요정보를 수집해보자</p>
<p><a href="https://ssunws.tistory.com/20">example : postgresql user crud</a></p>
<pre><code>CREATE USER miriam WITH PASSWORD &#39;jw8s0F4&#39; VALID UNTIL &#39;2005-01-01&#39;;</code></pre><pre><code>CREATE USER com WITH PASSWORD &#39;puter&#39; VALID UNTIL &#39;2023-09-20&#39;;</code></pre><p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/40fdc660-21e4-4b64-9c75-1252b50b2b43/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/99f2a7d4-cf67-4c12-9d43-c8ba4f3d6961/image.png" alt=""></p>
<p>난 언제쯤 오타를 안낼까, 내면 수정하면 되지</p>
<p><a href="https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/">dummy data 설명/출처</a> 보단, 우선 <a href="https://www.geeksforgeeks.org/postgresql-loading-a-database/">정리본</a>을 추천</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/18310bbf-025f-4e2e-a46a-38787e8e14d5/image.png" alt=""></p>
<p>chcp65001 해도 한글이 깨지나 했는데, 해외 sample data에 한글이 없을듯?</p>
<p>오히려 한글이 아닌 무언가가 한글로 잘못 표기되다가 생기는 거 같음.</p>
<p>db 까보면 테이블이랑 데이터는 들어가있음. 어쩌면 내가 처음 개인 블로그에서 다운받은 dvdrental.tar가 다소 손상된 상태일 수 있다 정도 생각, 공식사이트 dvdrental.tar로 시도</p>
<p>그리고 다음부터는 심신의 안정을 위해 pgadmin이라는 gui 툴을 쓰자. 주는 데 써야지</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/377e1eec-2b54-4580-a3f8-91c8c085ba38/image.png" alt=""></p>
<p>유저 생성하고, 이 유저로 접근할 데이터를 세팅했다.</p>
<p><a href="https://www.postgresql.org/docs/12/index.html">추가 : postgreSQL 12 공식 문서</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[웹 개발 환경-1] IDE & Framework]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-2-Eclipse</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-2-Eclipse</guid>
            <pubDate>Wed, 21 Sep 2022 04:19:16 GMT</pubDate>
            <description><![CDATA[<h1 id="ide--framework">IDE &amp; Framework</h1>
<ul>
<li>IDE = Integrated Development Environment ; eclipse</li>
<li>Framework ; spring, spring boot</li>
</ul>
<p>돌아다니다보면, framework vs api vs libraries set 해서 서로 비교해서 판정하는 게 있긴한데, 방향성이 유사해도 개발자가 서로 합의해서 만든것도 아니고, 각자 발전해온 걸 그냥 교집합과 차집합이 있겠지 하고 마무리.</p>
<p>그리고, 나는 세상 모든 framework를 비교대조하기 보다, <a href="https://spring.io/why-spring">spring framework</a>에서 소개하는 이것으로 framework를 부분 이해 하겠음. 하다보면 좀 늘것지</p>
<h2 id="ide와-plugin-호환성">IDE와 plugin 호환성</h2>
<ul>
<li>eclipse</li>
<li>spring tool suite(STS)</li>
<li>Intellij</li>
</ul>
<p> 최신 IDE일수록 이전 플러그인들과 호환되지 않는 경향이 있다. 만약 지금까지 나온 모든 플러그인 및 관련 jar를 들고있다면 IDE 자체 용량만 수십기가에 이를 것이다.</p>
<p> 가령, 22년 9월 기준, STS 4.16.0 은 spring legacy prj를 생성하기 위해 설정을 했지만 플러그인을 깔아도 무수히 많은 에러가 뜬다. 추가적인 수동 설치나 조정이 필요한 것으로 보인다.</p>
<h2 id="prerequisite">Prerequisite</h2>
<ul>
<li>JDK</li>
<li>WAS</li>
</ul>
<p>IDE의 java 프로젝트를 서버에서 구동하려면 jdk와 was가 사전에 설치되고, 이클립스 상에서 설정되야한다.</p>
<h3 id="jdk-11">JDK 11</h3>
<ul>
<li><p><a href="https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html">jdk 11 설치</a></p>
</li>
<li><p><a href="https://mimah.tistory.com/entry/Java-JDK-11-%EB%B2%84%EC%A0%84-%EC%84%A4%EC%B9%98-%EB%B0%8F-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95">Windows 환경변수 설정</a></p>
</li>
</ul>
<h3 id="was">WAS</h3>
<p>web application server</p>
<h4 id="tomcat">Tomcat</h4>
<ul>
<li>9.0.65 버전 - <a href="https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65-windows-x64.zip">download Windows-x64</a></li>
</ul>
<p>참고로, boot에서는 아에 내장 시킴, 이게 답이다.</p>
<p><a href="https://www.iotworks.co.kr/xe/index.php?mid=Server&amp;document_srl=59397">Windows OS에서 tomcat 구동</a>에 따르면, 리눅스 OS에서 tomcat 구동해서 초기화면 봤을때의 감격을 Windows OS에서도 맛볼 수 있다. 물론 이 부분은 이클립스를 통해 제어하는 게 더 효과적이다.</p>
<h4 id="undertow">undertow</h4>
<p>web server인 apache가 nginx로 바뀌어 간다면, tomcat 다음은 뭘까해서 찾아봄.
<a href="https://enowy.tistory.com/22">tomcat과 undertow 설명</a></p>
<h2 id="ide-and-plugins">IDE and plugins</h2>
<p>STS4, eclipse 2022-09, eclipse 2022-03 이클립스 순으로 spring Legacy Project 생성하는 과정을 설명</p>
<p>참고로, Intellij가 가장 쉽고 빠르게 Spring Legacy Project 를 생성할 수 있을 것으로 보인다. Intellij로 생성 시 생성되는 applicationContext.xml, dispatcher-servlet.xml 는 root-context.xml, servlet-context.xml 대응하는 것으로 보인다. - <a href="https://readinggeneral.tistory.com/entry/Spring-Study-Group-Spring-Legacy-Project-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0-IntelliJ-IDEA">goto</a></p>
<p><strong>software 설치 시 유의사항 : 된다면 ZIP으로 다운받자. exe말고</strong></p>
<p> <del>.exe파일로 설치하면 Users/User 폴더 하위에 영문모를 .p2, .</del> 같은 폴더나 파일들이 잔뜩 쌓인다. 제어도 안되고</p>
<p> zip으로 받아서 반디집으로 압축해제하는 것도 클릭 수 차이 없다. 다운로드는 지원하는 한 .zip이나 .jar가 권장</p>
<h3 id="sts--spring-tool-suite-4">STS : spring-tool-suite-4</h3>
<p>이클립스에 이러저러한 플러그인들 왠만한건 다 깔아준 IDE, 심신안정에 매우 좋음. STS 4.16.0 의 경우, Spring Boot Project가 기본이다.</p>
<p><a href="https://gocoder.tistory.com/2444">추가 : 내 sts의 버전과 뼈대 eclipse 버전 확인하는법</a></p>
<h4 id="sts-설치-spring-legacy-설정">STS 설치, spring legacy 설정</h4>
<p><a href="https://oingdaddy.tistory.com/294">sts 설치</a></p>
<p><a href="https://kimcoder.tistory.com/233">Legacy prj 세팅</a></p>
<p> 위와 링크를 따라 세팅 시, 나의 경우, 디펜던시 Missing 에러문이 뜬다. 또한, 최근 글에서 나와 동일한 <a href="https://okky.kr/articles/1251738">사례</a>가 검색된다.</p>
<p> Missing 된다는 것 관련 jar를 추가하라는 상단 댓글에 따라 진행해도해당 jar의 3.7을 요구하는데, <a href="https://www.eclipse.org/mylyn/downloads/">공식사이트</a>에 나오는건 3.25이라 해결되지 않는다.</p>
<p><a href="https://wildwolf.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8B%A4%EC%9A%B4%EB%B0%9B%EA%B3%A0-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0">추가적으로 링크</a>를 따라서 add-on 설치 외 다른 jar나 자료를 다운받았지만 <strong>나는 안됬다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/46fc5a90-0fa7-4751-9a69-9d9ace315d72/image.png" alt=""></p>
<p> 여전히 추가 설정해야할 에러들이 많이 보인다. <strong>왜냐하면 STS 4.16.0은 legacy prj를 지원하는 Spring Tools Add-on for Sprint Tools 4 와 호환되지 않기 때문이라고 볼 수 있다.</strong> </p>
<p>물론 과거의 글들을 보면, 아주 손쉽게 Spring Tools Add-on for Sprint Tools 4만 다운로드 받으면 legacy prj 생성이 가능해지는 것으로 보이나, STS 4.16.0 이전 버전을 사용했을 것으로 예상된다. <a href="https://github.com/spring-projects/sts4/wiki/Previous-Versions">goto previous versions</a></p>
<p> 위 에러들 하나씩 상대하다보면 끝은 있겠지만, 처음부터 spring legacy prj에 맞을 만한 이클립스와 플러그인을 사용하는 게 낫다.</p>
<h3 id="2022-09-eclipse">2022-09 eclipse</h3>
<p>22년 9월 기준 가장 최신 IDE이다. <a href="https://www.eclipse.org/downloads/packages/">download</a></p>
<h4 id="project-create">Project create</h4>
<p>이클립스 상에서 spring plugin 설치 안 할 시, File =&gt; New =&gt; Other... 해서 나오는 프로젝트 생성 위자드에 스프링이 안뜨지 않는다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/d49dc0ff-b235-4908-9647-146b758a148c/image.png" alt=""></p>
<p>그래서 아래와 같은 최신 spring plugin을 설치</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4e00f4a2-8477-462e-954a-a82d424a62a3/image.PNG" alt=""></p>
<p>위 plugin 과 이미지의 &#39;Spring Tools 3 Add-On for Spring Tools 4 3.9.22.RELEASE를 깔아도,<a href="https://kimcoder.tistory.com/233">다른 글</a>과 달리, restart하면 spring legacy prj는 뜨지 않는다. 사실 STS 4와 동일해졌을 뿐이다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/27248ca4-b8bf-4a08-9088-0d14f5c3366c/image.png" alt=""></p>
<p> 위와같은, 이클립스 2022-09 에서의 설치 에러 로그 살펴보면, 이클립스가 접근하는 서버에서 이클립스 버전 2022-09의 디렉토리에서는 해당 플러그인을 maintained 되지 않는 것으로 보인다.</p>
<p> 이클립스 플러그인 파일서버가 있다면, 버전별로 플러그인들을 따로 저장하고 제공하지 않나 싶다.</p>
<p>이를 통해 이클립스 버전에 따라 호환되는 플러그인이 있다 정도로 정리할 수 있다. 이러한 맥락에서 spring legacy prj보다 과거의 dynamic web 등의 prj는 더 지난 이클립스를 써야 할 것으로 예상한다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f80a4f5c-3fbb-4bb6-b918-cfa49288377c/image.png" alt=""></p>
<p>이제보니까 pluglin 설명에 설명은 되있으나, 설명서 다읽고 노트북 쓰는 사람없다는 점에서 그렇구나 하고 지나간다.</p>
<p>구체적인 버전은 more info 클릭해야 보이는구만, 다음부터는 클릭할듯</p>
<h3 id="2022-03-eclipse">2022-03 eclipse</h3>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/65365954-ef68-4a81-8ab3-369e68fca9bf/image.png" alt=""></p>
<p> 앞선 plugin 설명에 2022-03까지 지원된다고 되어있으므로, 2022-03 version으로 설치. 그래도 반년전 정도꺼 까지 지원된다는 게 대단한듯, 무료인 거 생각하면 할수록 eclipse는 위대한 듯, 한편 spring legacy prj가 생각보다 오래 전에 만들어진 거 같음.</p>
<p><strong>하지만</strong>
역시 쉽게 되는 게 없음. 아래 2개의 플러그인이 앞선 경우와 달리 잘 깔리나, prj 생성 wizard에 spring legacy가 안뜬다. update를 해야한다. </p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/1dd117c5-e1e8-4e86-9ae2-2c60c50b134a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/4e8878eb-2121-4ce1-a366-06d82c341f5a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/e15f317b-75a9-4c22-8ae9-f48aac872695/image.png" alt=""></p>
<p> 여기 까지 딱 12시간 걸렸다. sts, eclipse 2022-09에서 진전은 있지만 끝이 없는 에러의 굴레에서 시간을 너무 썼다.</p>
<p><strong>하지만</strong>
이것도 아직 끝이 아니다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/7df9bef4-dcc3-4c36-bfc6-2d62d37dcb53/image.png" alt=""></p>
<p><a href="https://bohemichan.tistory.com/24">설명</a>에 따르면 2022-03이면 jdk 11 version 써야 해서 그런듯 하다.</p>
<p>그리고 추가로 eclipse.exe와 동일한 디렉토리의 .ini를 <a href="https://devpad.tistory.com/61">설명</a>에 따라 .ini 파일 바꿔야함</p>
<p>근데 이런걸 도대체 어떻게 아는거고, 어떻게 공부한담, 만든 사람이 어디다가 올려놨겄지? 링크 남겨줬으면 좋겠다</p>
<h4 id="임시결과">임시결과</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/141ae137-59a2-4930-a90d-950de1a1efad/image.png" alt=""></p>
<p>spring legacy prj 속 home.jsp. 자동생성 시 최소 값이 home.jsp이다.</p>
<p>사실 index라는 단어의 한글 해석 1순위가 목차라는 점에서 요즘과 같이 다채로운 화면구성에 어색한 표현이라고 매번 느낌.</p>
<p>반가운 home 화면 가운데 ? 가 있음. 이건 친숙한 인코딩 설정문제임</p>
<h4 id="workspace-encoding">workspace encoding</h4>
<p><a href="https://angelplayer.tistory.com/165">설명</a>에 따라 workspace 수준에서 jsp 포함 인코딩을 설정한다.</p>
<p> 일케 한 다음 prj 수준에서 인코딩 불맛 보려고 encoding 임의로 바꾼거 아니면 그대로 따라감</p>
<h4 id="config-jdk-of-project">Config JDK of Project</h4>
<p><a href="https://diaryofgreen.tistory.com/28">설명</a>에 따라, Project 수준에서 prj facet에서 추가 설정해야함</p>
<h4 id="결과">결과</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/7af2e546-e555-4262-8295-39c901cb7d8c/image.png" alt=""></p>
<h4 id="lombok-of-eclipse-2022-03">lombok of eclipse 2022-03</h4>
<p><a href="https://hajoung56.tistory.com/13">설명</a>에 따라, 롬복은 spring plugin과 같은 급이다. 실제로 인텔리제이에서는 플러그인 형태로 제공한듯하다. 그러나 이클립스는 무료니까 따로 연결해야한다.</p>
<p>이로서 이클립스에서 모두에게 제공하는 spring Legacy 프로젝트 생성과 설정이 마무리 되었고, 다음부터 보다 프레임워크 관점에서 맞춤 시작</p>
<h2 id="framework">Framework</h2>
<p>spring, spring boot, django 등 여기서 지원하는 기능들과 목표들, 그 모든 것. 쓰다보면 공통점도 있고, 차이점도 있것지, 나는 그 경계 뒤지기보단 우선 적재적소</p>
<h3 id="spring-framework">Spring Framework</h3>
<p><img src="https://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/_images/RequestLifecycle.png" alt=""></p>
<ul>
<li><a href="https://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html">spring MVC</a></li>
<li><a href="https://spring.io/web-applications">spring and web app</a></li>
<li><a href="https://spring.io/guides">spring boot framework tutorial</a> </li>
</ul>
<p>튜토리얼의 경우, 인코딩같은 세부세팅 잠시제쳐두고, 최신 버전인 boot를 통해 개괄적으로 spring framework 기본 개념 단어들 리마인드하기 좋음. 처음하는 사람들에겐 완전 비추</p>
<h4 id="version">version</h4>
<p><a href="https://lipcoder.tistory.com/492">설명</a>에 따라, GetMapping 등의 어노테이션 사용을 위해 pom.xml 에서</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/557c61a3-5304-4f37-a6a4-17e6cb1039a1/image.png" alt=""></p>
<p>&lt;org.springframework-version&gt; 을 기본 3점대에서 4.3.18.RELEASE로 설정. 221007기준 5점대 존재.</p>
<p><a href="https://spring.io/projects/spring-framework">spring.io ; spring framework</a></p>
<h3 id="best-code-structure">Best code structure</h3>
<p>서비스 변동성이 작고, 작기를 희망한다면 by layer
서비스 변동성이 크기를 희망한다면 by feautre</p>
<h4 id="code-structure">code structure</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/3a721c07-b3da-425d-8d55-f99a8fad608c/image.png" alt=""></p>
<p> 상단 보라색 네모들, controller, service, repository들로 package 구조(code들이 들어가고 배치될 곳)를 설정 영역이 <strong><a href="https://www.geeksforgeeks.org/spring-boot-code-structure/">code structure</a></strong>라는 영역으로 칭하는 것 같다. </p>
<p>이러한 참고 글들의 출처의 출처를 거슬러 어디 공식 사이트가 나오면 좋겠지만, 충분하다고 생각하여 패스</p>
<p>그리고,
spring.io라는 스프링 프레임워크 공식사이트를 돌아본 결과, 아직까지는 spring framework 레벨에서 code structure를 정의하지 않아보인다.</p>
<p><a href="https://www.geeksforgeeks.org/spring-boot-code-structure/">설명</a>에 의하면
<code>There is no specific layout or code structure for Spring Boot Projects. However, there are some best practices followed by developers that will help us too.</code></p>
<p>이고, 2개의 code structure가 제시된다.</p>
<ul>
<li>code structure by feature</li>
<li>code structure by layer</li>
</ul>
<h4 id="code-structure-by-feature">code structure by feature</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/ae1879ca-92a8-4992-8308-aea92d3609e0/image.png" alt=""></p>
<p>domain을 <strong>1순위로</strong> 패키지를 구조화해서 코드들을 배치하는 것으로 이해하기 좋다. 참고로 그렇다고 controller, service, repository가 사라진 건 아니다.</p>
<h4 id="code-structure-by-layer">code structure by layer</h4>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f5cdae23-2864-48bb-8e5e-bc94e058f06c/image.png" alt=""></p>
<p>명시적인 controller, service, repository를 <strong>1순위</strong>로 패키지를 구조화해서 코드를 배치하는 것으로 이해할수 있고, 대체로 기존 프로젝트들의 code structure가 이를 준수하는 것으로 알고 있다.</p>
<p>그리고 나는 그동안,</p>
<p>spring framework is spring MVC of MVC
spring MVC is controller, service, repository
spring framework is controller, service, repository</p>
<p>이라고 여겨왔기에 다른 걸 상상하기가 어렵고, 비교할 게 없으니 이로 인한 문제도 불가피하다고 생각해왔다.</p>
<p>설명에 의하면 by layer는, 내가 몸소 경험해봤듯이, </p>
<p><code>Though the above structure looks feasible and easy to locate classes by a layer. It has few disadvantages when compared to Structure by Feature.</code></p>
<ul>
<li>Features or Modules cannot be shipped separately.</li>
<li>Hard to locate a class pertaining to a certain feature.</li>
<li>Code Refactoring on a certain feature is difficult since the feature classes located in every layer.</li>
<li>It causes merge conflicts among developers using GitHub, BitBucket, etc. for Collaboration.</li>
</ul>
<p>이러한 단점이 부각되고, </p>
<p>by feature는</p>
<ul>
<li>Find a class to be modified is easy.</li>
<li>By deleting a particular sub-package, all the classes related to a certain feature can be deleted.</li>
<li>Testing and Refactoring is easy.</li>
<li>Features can be shipped separately.</li>
</ul>
<p>이렇다고한다. </p>
<p>하지만, 프로젝트가 정말작고, 처음배우는 사람이 있으면, 위 by layer의 장점인 feasible(실행하기좋은), easy to locate 이득이 단점을 상회한다고 생각한다. 당장 위 spring MVC 도식과 연결지어 이해하고 검색하기 더 좋다고 생각한다.</p>
<h4 id="mychoice">MyChoice</h4>
<p>이번 프로젝트의 경우, code structure는 계속 키울것이므로 by feature</p>
<p>이 부분은 gradle, boot로 바꿔도 동일할듯, java code일뿐이라</p>
<p>크게 3가지의 features; user, article, board (게시판 관련)에 따라서 code structure 설정 및 해당 클래스 추가</p>
<p>그리고, <a href="https://coder-in-war.tistory.com/entry/Spring-12-DAO-DTO-Entity%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%ED%8C%A8%ED%82%A4%EC%A7%80%EC%9D%98-%EC%A0%84%EC%B2%B4-%EA%B5%AC%EC%A1%B0">dto and entity 관련 글</a>, <a href="https://velog.io/@langoustine/Entity-%EB%A7%90%EA%B3%A0-DTO%EB%A5%BC-%EC%93%B0%EB%9D%BC%EA%B3%A0">dto entity 분리해야하는 이유</a> 참고하여 dto, entity 구분</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/5846b7a2-3c44-416d-b0c8-ce6af23778ba/image.png" alt=""></p>
<h3 id="junit">Junit</h3>
<ul>
<li>화면 안만들고 기능체크가능</li>
<li>멘탈 파괴 방지</li>
</ul>
<p>바로 위 사진에서 볼 수 있듯이, src/test/java라는 디렉토리가 기본값이다. 이를 사용하기 위한 추가설정이 아래와 같이 필요하다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/e94a6a60-d557-4c18-b99d-dd46c8d022e3/image.png" alt=""></p>
<p>최근 eclipse의 경우, Libraries path에 ModulePath, ClassPath 가 존재, 예전 버전일 수록 구분안했다. <a href="https://whitekeyboard.tistory.com/849">설명</a> 참고는 하고, 우선 &#39;친숙한&#39; classpath에 junit library를 배치하였다.</p>
<p><a href="https://goodteacher.tistory.com/410">설명</a>에 따라 <strong>처음에 junit dependency가 있지만 추가로 spring-test 더 넣어야한다.</strong> 참고로, vscode로 조회하면 눈이 매우 편하고, vscode를 통해 수정과 저장 후, eclipse에서 파일 다시 열면 충돌도 없고 매우 편한다. 프론트와 파일조회는 역시 vscode다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/3d53905a-cc74-46a2-a37b-b283399c985c/image.png" alt=""></p>
<p><strong>초기값 세팅으로는 junit test 에서 sl4j의 log가 콘솔에서 출력되지 않게 세팅되어있었다. 아래 같이 info로 수준을 맞춘다.</strong></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/805bd038-f6ae-418f-8eee-16d290ba75de/image.png" alt=""></p>
<p><a href="https://stackoverflow.com/questions/7745885/log4j-logging-hierarchy-order">log level</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[웹 개발 환경] Spring Legacy Dev Package]]></title>
            <link>https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-eclipse</link>
            <guid>https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-eclipse</guid>
            <pubDate>Mon, 19 Sep 2022 07:31:50 GMT</pubDate>
            <description><![CDATA[<h1 id="overview">Overview</h1>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/0c68ec8a-d262-4d9d-8bfc-d4c973c43844/image.png" alt=""></p>
<h2 id="application-server">Application Server</h2>
<ol>
<li><p>IDE : eclipse </p>
</li>
<li><p>1 version : <strong>2022-03</strong></p>
</li>
<li><p>2 plugins</p>
</li>
<li><p>2.1 Spring Tools 3 (Standalone Edition) <strong>3.9.14 RELEASE</strong></p>
</li>
<li><p>2.2 Spring Tools 3 Add-On for Spring Tools 4 <strong>3.9.22.RELEASE</strong></p>
</li>
<li><p>3 Project </p>
</li>
<li><p>3.1 Spring Legacy Project and SpringMVC Template
* eclipse 2022-03 ; Spring Tool 3와 호환되는 마지막 버전(22년 9월 기준)</p>
</li>
<li><p>Framework : springframework</p>
</li>
<li><p>1 version : <strong>4.3.18.RELEASE</strong></p>
</li>
<li><p>2 Build Tool : Maven</p>
</li>
<li><p>Web Application Server(WAS) : tomcat</p>
</li>
<li><p>1 version : <strong>9.0.65</strong></p>
</li>
<li><p>Develoment kit : JDK</p>
</li>
<li><p>1 version : <strong>openJDK 11</strong></p>
</li>
</ol>
<p>* local</p>
<h2 id="database-server">Database Server</h2>
<ol>
<li><p>Database : PostgreSQL </p>
</li>
<li><p>1 version : <strong>12.12, compiled by Visual C++ build 1914, 64-bit</strong></p>
</li>
<li><p>client tool : dbeaver <strong>22.2.0</strong> , pgadmin4</p>
</li>
<li><p>persistence framework : mybatis <strong>3.5.6</strong></p>
</li>
</ol>
<p>* local</p>
<h2 id="os">OS</h2>
<ol>
<li>version : <strong>Windows 10 desktop</strong></li>
</ol>
<h1 id="package-structure">Package Structure</h1>
<p>C:
├── sample-package
│-----├── eclipse-2022-03
│-----└── package-worksapce
│------------└── <a href="https://github.com/PairPilot/LegacyMVC">LegacyMVC</a>
│------------└── Servers</p>
<p>* package-workspace 하위 Servers는 eclipse에서 tomcat 등록하면 생김</p>
<p>(나의 현재 tomcat 위치)</p>
<p>C:
├ Softwares
│---ㄴ apache-tomcat-9.0.65</p>
<p>* User 폴더 하위 배치는 피했지만, 앞으론 Softwares 보다 세분화할 필요를 느낌.</p>
<h2 id="explanation">Explanation</h2>
<ul>
<li><p><a href="https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-2-Eclipse">IDE &amp; Framework : Eclipse &amp; Spring</a></p>
</li>
<li><p><a href="https://velog.io/@kimjh18_idt/%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-2-postgreSQL">Database : PostgreSQL 12.12</a></p>
</li>
</ul>
<p>위 설명 속에서 WAS, JDK, DB 다른 구성요소들이 sample-package가 <strong>&#39;전제 한대로 또는 기본값대로&#39;</strong> 설정이 되야 세팅된 IDE와 lombock 등 세부 설정값들을 통째로 사용가능하다.</p>
<p>물론, free sample 로서 자잘한 warning이나 내가 인지하지 못한 전제의 개입으로 작동안할 수도 있다.</p>
<h1 id="download">Download</h1>
<p><a href="https://drive.google.com/drive/folders/12jTyTOAhrxdp6oN6n0gMMtQ6M-1KDbwY">public google drive</a></p>
<h2 id="the-additional">the additional</h2>
<ol>
<li>JDK 11 - <a href="https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html#license-lightbox">link</a></li>
<li>Tomcat 9.0.65 - <a href="https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65-windows-x64.zip">link</a></li>
<li>PostgreSQL - <a href="https://dora-guide.com/postgresql-install/">link</a></li>
<li>DBeaver - <a href="https://dbeaver.io/download/">link</a></li>
</ol>
<p>상단 내역은 ,필요 시 회원가입을 하여, 각자 다운받아야한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[검색/독서]WEB HTTP]]></title>
            <link>https://velog.io/@kimjh18_idt/%EB%8F%85%EC%84%9CWEB-HTTP-The-Definitive-Guide</link>
            <guid>https://velog.io/@kimjh18_idt/%EB%8F%85%EC%84%9CWEB-HTTP-The-Definitive-Guide</guid>
            <pubDate>Sun, 18 Sep 2022 23:23:35 GMT</pubDate>
            <description><![CDATA[<h1 id="매일-쓰는-http">매일 쓰는 HTTP</h1>
<p><code>https://www.google.com</code>
<code>http://localhost:8080/home.jsp</code></p>
<p>* https 는 http 파생형</p>
<p>매일 쓰고 있던 거고, 쓰는데 문제없으면 계속 쓰면 됨. </p>
<p>근데 나는 http로 Web service 만들다가 보안뚫림. 천천히 봐둘려고</p>
<h2 id="chrome과-http">Chrome과 HTTP</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/f5a9224f-6094-4b14-bfb2-08f98a4d475c/image.png" alt=""></p>
<p>google 감사</p>
<p>매일 쓴다는데 보여야 좀 공부하지</p>
<p><a href="https://velog.io/@910/%EC%9B%B9-%ED%95%B4%ED%82%B9%EC%9D%84-%EB%8F%84%EC%99%80%EC%A3%BC%EB%8A%94-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%84%EA%B5%ACDevtools-%EC%82%AC%EC%9A%A9%EB%B2%95-w4072171">https://velog.io/@910/%EC%9B%B9-%ED%95%B4%ED%82%B9%EC%9D%84-%EB%8F%84%EC%99%80%EC%A3%BC%EB%8A%94-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%84%EA%B5%ACDevtools-%EC%82%AC%EC%9A%A9%EB%B2%95-w4072171</a></p>
<p>가볍게 찍고 다음은 피들러</p>
<h2 id="피들러-fiddler">피들러 Fiddler</h2>
<p>http, https 에 딱 맞은 관련 도구, Chrome devtool 보다 효과적으로 예상, </p>
<p><a href="https://pyoungt.tistory.com/m/35">https://pyoungt.tistory.com/m/35</a></p>
<h3 id="web-http-guide">WEB HTTP guide</h3>
<p>the essence of HTTP : ~ is in understanding how the Web works and how to apply that knowledge to we programming and administration.</p>
<p>=&gt;</p>
<p>osi 7계층별로 영단어마냥 암기하고 잊어버린 것들 중 하나가 http인데, 더 이야기가 있는듯, 그리고 그러겠거니 하지만, boot 에서 django로 grpc 통신해본적이 없음. 할 때 도움될듯</p>
<p>우선 친숙한 pdf 43페이지 ; HTTP Messages , 307 페이지 ; Secure HTTP(HTTPS) 부터 시작</p>
<p>chapter.part.section</p>
<p>=&gt; 3.1.1</p>
<h1 id="3-http-messages">3. HTTP Messages</h1>
<ul>
<li>How Messages flow ; 3.1</li>
<li>The Three parts of HTTP messages(start line, headers, and entity body) ; 3.2 </li>
<li>The differences between request and response messages ; 3.2</li>
<li>The Various methods that request messages support ; 3.3 ~</li>
<li>The Various status code</li>
<li>What the various HTTP headers do</li>
</ul>
<h2 id="31-the-flow-of-messages">3.1 The Flow of Messages</h2>
<h4 id="keywords">keywords</h4>
<p>HTTP msg = blocks of data = meta block + other block, proxies(?, 맨날 듣는 거에 비해 사실 느낌만 앎)
HTTP application 
(Inbound, OutBound, upstream, down stream) ; 인바운드 아웃바운드 업무 말은 들었는데, 여기서 나온거인듯?</p>
<h3 id="311-messages-commute-inbound-to-the-origin-server">3.1.1 Messages Commute Inbound to the Origin Server</h3>
<h3 id="312-message-flow-downstream">3.1.2 Message Flow Downstream</h3>
<h2 id="32-the-parts-of-a-message">3.2 The Parts of a Message</h2>
<h3 id="320-message-syntax">3.2.0 Message Syntax</h3>
<ul>
<li>3.2.1 start line</li>
<li>3.2.2 headers</li>
<li>3.2.3 body 
비교적 자주 보던 것들, 크롬데브툴스 감사</li>
</ul>
<h3 id="321-start-lines">3.2.1 Start Lines</h3>
<p>the first line of request and response messages
; methods, status codes, reason phrases, version numbers ...</p>
<h4 id="request-line">Request line</h4>
<h4 id="response-line">Response line</h4>
<h4 id="methods">Methods</h4>
<ul>
<li>the method begins the start line of requests, telling the server what to do</li>
</ul>
<h5 id="examples">Examples</h5>
<p><strong>get</strong>, head, <strong>post, put</strong>, trace, options, <strong>delete</strong></p>
<p>??? put 대신 patch 많이 쓰는데, 언급이 안됨, 비교적 최근 추가된건가</p>
<p>한편, 과거에는 put 이 톰캣이랑 같이 어떤 용량 제한이 있어서, 용량 넘어가면 안된다고 한듯, 불가피하게 post 썼다고 한듯, 하는 김에 delete도 post로 퉁치고 </p>
<p>생각해보니까 타임리프에서도 form 태그에서 put, delete 쓸려면 application.properties에 설정 추가해야했음. 기본값이 get, post만 지원함</p>
<p>근데, 그러면 기본값에 충실하면, get, post 외는 js로 처리하라는건가? 이렇게 일부만 form 태그 쓸거면 그냥 js로 ajax통신을 기본으로 해서 get,post, put, delete 하면 안되나? form 태그는 너무 제한적인 느낌</p>
<h4 id="status-codes">Status codes</h4>
<h5 id="examples-1">Examples</h5>
<ul>
<li>200 : OK</li>
<li>401 : unauthorized ; 스프링 부트 시큐리티 , csrf랑 연관</li>
<li>404 : Not Found ; 스프링 부트 시큐리티 쓰면 쉽게 리다이렉트 가능했던듯</li>
</ul>
<h3 id="322-headers">3.2.2 Headers</h3>
<p>additional information to request and response messages , name : value
; Content-length : 19</p>
<h3 id="323-entity-bodies--body">3.2.3 Entity Bodies : Body</h3>
<ul>
<li>third part of http msg</li>
<li>optional ; get http msg는 body가 없음</li>
</ul>
<h2 id="33-methods">3.3 Methods</h2>
<p>start lines 의 일부</p>
<h3 id="330-safe-methods">3.3.0 Safe Methods</h3>
<p>get , head : safe methods that ensures that by those methods, no changes occur at server that get those msg method</p>
<p>멱등성인가 그거 말하는듯, 멱등성 말 개어렵네, 딱 잊어먹기 좋음, safety 정도로 우선기억</p>
<h3 id="331-get">3.3.1 GET</h3>
<p>(실습 예정)</p>
<h4 id="332-head">3.3.2 HEAD</h4>
<p>GET 전에 start lines, Header 만 먼저 받아서 원하는 게 있나 없나 체크용이라는데, 현재에 이르러서 내가 자주 못본거 보면 그냥 GET해서 response에 status 404 뜨면 예외처리하는 방식으로 대체되지 않았나함</p>
<h3 id="333-put">3.3.3 PUT</h3>
<p>the inverse of the way that GET reads documents from a server</p>
<p>라는 표현으로 볼때, 왜 PUT은 보낼 때 아규먼트 싸그리다 보내야 하나 느낌은 오지만, 결과적으로 현재는 일부 아규먼트만 보내도 되는 PATCH가 우세한다. 나는 hidden tag로 하긴했는데, 해본거고</p>
<h3 id="334-post">3.3.4 POST</h3>
<h4 id="335-trace">3.3.5 TRACE</h4>
<p>중간에 firewaslls , proxies, gateways, or other applications 같은 걸 거쳐갈때 request가 변형될 가능성이 높고</p>
<p>&#39;The TRACE method allows clients to see how its request looks when it finally makes it to the server&#39;</p>
<p>라고는 하는데, 역시 안써보니까, 이 후 설명이 모르겠음. CGI 언급되는거보면 어쩌면 현재 API 방식 아닐지도</p>
<h4 id="336-options">3.3.6 OPTIONS</h4>
<p>이것도 실습하면서 볼듯, </p>
<h3 id="337-delete">3.3.7 DELETE</h3>
<h4 id="338-extension-methods">3.3.8 Extension Methods</h4>
<p>LOCK, MKCOL, COPY, MOVE ; 부트에서 지원하면 해보고 아니면 말고</p>
<h2 id="34-status-codes">3.4 Status Codes</h2>
<p>start lines 의 일부</p>
<p>지금 껏 이거 따라서 client 딴에서 js 등으로 예외처리한듯</p>
<p>좀더 시각적인 자료
<a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Status">https://developer.mozilla.org/ko/docs/Web/HTTP/Status</a></p>
<h2 id="35-detail-of-headers">3.5 (Detail of) Headers</h2>
<p>Header 의 상세 설명</p>
<h2 id="for-more-information">For more Information</h2>
<p>순서상 body 나오면 좋겠는데 아님</p>
<h1 id="secure-http">Secure HTTP</h1>
<p>내 톰캣이 다시 털리지 않기 위해</p>
<h2 id="140-making-http-safe">14.0 Making HTTP Safe</h2>
<p>authentication ; 신분증 줘봐 client server간
Integiry ; data 교환해도됨
Encryption ; eavesdropping 예방, 훔쳐듣기 예방
Efficiency, Ubiquity, blabla</p>
<p>아는 단어 우선</p>
<h3 id="1401-https">14.0.1 HTTPS</h3>
<p>더 좋은 시각자료
<a href="https://blog.eleven-labs.com/en/understanding-ssltls-part-1/">https://blog.eleven-labs.com/en/understanding-ssltls-part-1/</a></p>
<h2 id="141-digital-cryptography">14.1 Digital Cryptography</h2>
<p>Cyphers ; algorthims, 또는 일대일 함수, 이것의 결과는 cyphertext</p>
<p>Keys ; 암호화하고 복호화할때 쓰이는 행렬 정도 떠오름, 대칭 비대칭있고, 퍼블릭 있는데, 최종적으론 비대칭 &amp;&amp; 퍼블릭이었나</p>
<p>signatures ; checksum, 까먹음, ascii에서 1bit 쓴다고한게 이거였나
certificates ; 공인인증서, </p>
<p>내가 한국에서 정발된 정품윈도우를 사면 알아서 딸려있기 때문에 체감하기 힘들다고 했던 거가 certificate인지 key인 기억안남, 하다보면 만나것지</p>
<p>여기는 좀 자세히 읽어야긋다.</p>
<h1 id="임시">임시</h1>
<ul>
<li><p>cloud front 에서 http/2 설정해서 통신가능
<a href="https://evan-moon.github.io/2019/06/13/http2-with-aws/">https://evan-moon.github.io/2019/06/13/http2-with-aws/</a>
=&gt; boot gRPC 통신으로 구현 가능</p>
</li>
<li><p>? gRPC
<a href="https://docs.microsoft.com/ko-kr/aspnet/core/grpc/comparison?view=aspnetcore-6.0">https://docs.microsoft.com/ko-kr/aspnet/core/grpc/comparison?view=aspnetcore-6.0</a></p>
</li>
<li><p>http/3 도 한다고는 함
<a href="https://aws.amazon.com/ko/blogs/korea/new-http-3-support-for-amazon-cloudfront/">https://aws.amazon.com/ko/blogs/korea/new-http-3-support-for-amazon-cloudfront/</a></p>
</li>
</ul>
<ul>
<li>유닉스, 리눅스, 윈도우
유닉스는 virtualbox
리눅스는 aws linux2, oracle linux(파일서버 만들어서 내 자료공유 편하게 될라나)
윈도우는 노트북</li>
</ul>
<ul>
<li>시간관리랑 운동 ; 하다보면 되것지, 인강듣는 시간 배치</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[ISSUE] 한글포함 파일명 인코딩 판별]]></title>
            <link>https://velog.io/@kimjh18_idt/%EA%B3%BC%EC%A0%9C-%EB%A6%AC%EB%88%85%EC%8A%A4%EB%A1%9C-%ED%95%9C%EA%B8%80-%ED%8C%8C%EC%9D%BC-%EC%A0%84%EC%86%A1</link>
            <guid>https://velog.io/@kimjh18_idt/%EA%B3%BC%EC%A0%9C-%EB%A6%AC%EB%88%85%EC%8A%A4%EB%A1%9C-%ED%95%9C%EA%B8%80-%ED%8C%8C%EC%9D%BC-%EC%A0%84%EC%86%A1</guid>
            <pubDate>Wed, 14 Sep 2022 00:01:35 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<p>UTF-8 인코딩 Linux 운영체제에 EUC-KR 인코딩 한글포함 파일과 UTF-8 인코딩 한글포함 파일을 몇 개 만들고 프로그램을 작성하여 각 파일명이 한글을 포함하는지 여부와 포함한다면 인코딩이 UTF-8 또는 EUC-KR 인지 판별하는 프로그램 코딩</p>
<p>+a
유니코드와 UTF-8 그리고 EUC-KR,
리눅스 파일시스템 파일명 인코딩 방식,
자바 코드, 자바스크립트에서 한글 인코딩 방식</p>
<h1 id="접근과-해석">접근과 해석</h1>
<h2 id="접근과-해석1--실습-시스템-환경을-중심으로">접근과 해석1 : 실습 시스템 환경을 중심으로</h2>
<p> 실험을 위해 Windows10 과 <a href="https://velog.io/@kimjh18_idt/Linux-aws-linux-%EC%97%B0%EA%B2%B0%EA%B3%BC-%EC%8B%9C%EC%9E%91">AWS Linux 2</a>을 실습 시스템 환경으로 설정할 시, Windows에서 Linux로 파일전송을 하더라도 파일이름의 한글이 깨지지 않는다.</p>
<p> Windows 도 NTFS 3.1의 MFT 파일 저장 방식을 이래로, 메타데이터인 파일의 이름의 경우 utf-8가 보장되고, 점진적인 업데이트를 통해 메모장의 내용과 같은 파일 내용 또한 UTF-8이 기본값이다.</p>
<p> 물론, <strong>한국</strong> Windows의 인코딩은 경우, 한글의 기계어 전환을 위해 사용되어온 CP949 인코딩 방식이 여전히 핵심적인 부분을 차지 하나, 최소화되간다고 이해가능하다.</p>
<p> 이러한 흐름 속에서, <a href="https://velog.io/@kimjh18_idt/Linux-Encoding-for-Korean">윈도우 사용자가 임의로 인코딩을 변경하여 파일을 리눅스로 서버로 전송한 경우에 대한 해결방안</a> 도출이 우선된다. </p>
<p> 이는 <a href="https://velog.io/@kimjh18_idt/Linux-shell-script">리눅스 쉘스크립트 문법</a>과 <a href="https://velog.io/@kimjh18_idt/Encoding-%EC%9D%B8%EC%BD%94%EB%94%A9-%EC%97%AD%EC%82%AC">한글 인코딩 개념</a>에 대한 이해를 바탕으로 한글 파일 이름에 대해서 특정 명령어들를 실행시키는 것으로 귀결된다. </p>
<p><strong>하지만 이러한 해결책은 이전 사례들을 포괄하지 못한다.</strong></p>
<h2 id="접근과-해석2--근본-시스템-환경을-중심으로">접근과 해석2 : 근본 시스템 환경을 중심으로</h2>
<p> &#39;리눅스 한글 깨짐&#39;으로 구글링하면, Windows and Linux 통신 간에 파일 이름의 한글이 깨지는 현상이 있다.</p>
<p> 현재 나의 개발환경에서는 재현불가능한 에러이다. 하지만, 기존 시스템은 내가 결정하는 게 아니다. <strong>주어지는 것이다.</strong> 그러므로 이러한 사례들을 포괄할 수 있는 접근과 해결책 도출이 타당하다.</p>
<h4 id="해결책1--linux-상에서의-조회와-인코딩-변경">해결책1 : Linux 상에서의 조회와 인코딩 변경</h4>
<p> 깨진 파일명에 대해서는 cat, rm 등의 명령어가 작동하지 않는다.
자연스럽게 리눅스 상에서 할수있는 건 매우 제한된다. 그래도 파이썬 스크립트를 통해서 이런저런 시도를 해볼 수 있을 것으로 생각되나, </p>
<p>이러면 인코딩, 파일시스템, 자바와 자바스크립트 인코딩 개념들과이 근본적인 부분으로 다다르지 못한다.</p>
<h4 id="해결책2--windows-에서의-전처리">해결책2 : Windows 에서의 전처리</h4>
<p>기존 윈도우에서 보낼때부터 utf-8 인코딩을 <strong>확실히</strong> 보장하여 보내는 것이다.</p>
<p>물론, <a href="https://velog.io/@kimjh18_idt/Encoding-%EC%9D%BC%EB%8B%A8-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C">윈도우 파일 시스템의 문서</a>와 UTF-8로의 점진적인 업데이트에 의하면, 충분히 UTF-8이 보장된 상태로 선뜻 이해할 수 있다.</p>
<p>하지만, 문서와 달리, 현실 속에서는 <a href="https://velog.io/@kimjh18_idt/Encoding-%EC%96%B4%EC%A9%8C%EB%A9%B4-%ED%8C%8C%EC%9D%BC%EA%B9%A8%EC%A7%84%EA%B1%B4-%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%83%93%EC%9D%B4-%EC%95%84%EB%8B%90%EC%A7%80%EB%8F%84">EUC-KR 인코딩 회귀</a>, <a href="https://velog.io/@kimjh18_idt/Encoding-%EB%93%9C%EB%94%94%EC%96%B4-%ED%95%9C%EA%B8%80%EB%AA%85-%ED%8C%8C%EC%9D%BC-%EA%B9%A8%EC%A7%90-%EB%B0%9C%EA%B2%AC">쉘 명령어 버전과 호환성의 문제</a>, 윈도우 운영체제 크랙 버전 사용 시 업데이트 불가 문제 등 비정량적인 요소들이 인코딩 문제에 개입한다. 이에 따라 윈도우 운영체제 상에서의 UTF-8 인코딩은 생각보다 현저히 낮게 보장된다.</p>
<p>이에 따라, 윈도우 운영체제만이라도 UTF-8 인코딩을 확실히 보장해주는 해결책이 필요하다.</p>
<p>=&gt; cp 65001, 아윤 노션 적극 참고</p>
<h1 id="배운-점">배운 점</h1>
<ul>
<li><p>bash shell의 명령어 유틸리티의 버그들을 아윤 자료가 없었으면 인지도 못했음, 근본적인 지식이 문제 해결에 필수적인 경우를 습득</p>
</li>
<li><p>인터넷 자료는 실용적으로 당장의 문제를 해결할지도 모르지만, 가령 인코딩 에러 시 EUC-KR로 인코딩을 역행, 잠시 문제를 미룰뿐임</p>
</li>
<li><p>혼자 했으면, 이상함을 느끼기까지 못해도 2주는 걸렸을 것 같지만, 다른 관점의 자료덕에 한번에 느낌, 내 일 해준 느낌 감사</p>
</li>
</ul>
<h1 id="관련">관련</h1>
<p><a href="https://velog.io/@kimjh18_idt/Encoding-Win-to-Linux-%EC%A0%91%EA%B7%BC%EA%B3%BC%EC%A0%95">Win-to-Linux 접근 수단들</a></p>
<p><a href="https://velog.io/@kimjh18_idt/Encoding-%EB%93%9C%EB%94%94%EC%96%B4-%ED%95%9C%EA%B8%80%EB%AA%85-%ED%8C%8C%EC%9D%BC-%EA%B9%A8%EC%A7%90-%EB%B0%9C%EA%B2%AC">파일 이름에 한글이 있을 때 깨지는 사례1</a></p>
<h1 id="추가--컴파일과-인코딩">추가 : 컴파일과 인코딩</h1>
<p>java 파일의 인코딩은 운영체제가 파일을 저장할때, 운영체제에 설정된 기본 인코딩으로 저장된다. </p>
<p> 가령, 메모장의 기본 인코딩이 UTF-8인 Windows10의 경우, 메모장으로 Hello.java 파일 생성 및 저장 시, UTF-8로 저장되고, UTF-8로 조회해야 깨지지 않는다.</p>
<p> 다만, 메모장의 기본 인코딩이 UTF-8인 Windows10이여도 cmd나 powershell 등 쉘의 인코딩은 cp949이다. 같은 운영체제에서 메모장은 UTF-8, 쉘의 인코딩은 cp949로 서로 다르다. <strong>(cp949, UTF-8의 혼용)</strong></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/b9c18fdb-b4b9-4441-a6af-621ba8942a76/image.jpg" alt="">
(나.txt 는 사전에 UTF-8로 인코딩된 파일이다.)</p>
<p> 환장하겠는건, 내 윈도우 노트북에서 cmd는 chcp 65001이 바로되는데, powershell은 안된다. 맥북 사야겠다.</p>
<h2 id="컴파일러의-인코딩은-운영체제-따라서">컴파일러의 인코딩은 운영체제 따라서.</h2>
<p> JAVA 컴파일러의 인코딩 방식도 운영체제에 따라 기본값이 변동하는 것으로 보인다.<strong>,Windows is cp949, Linux is UTF-8,</strong></p>
<p> 동일한 자바파일을 윈도우상에서 컴파일 시도할때, UTF-8로 저장된 자바 파일임에도, cp949로 조회하여 컴파일에 실패한다. 하지만, 동일한 파일을 리눅스로 전송하면 별도의 문제없이 조회하여 컴파일된다.(컴파일러 버전은 동일)</p>
<p>javascript 파일의 인코딩 또한 js파일 저장 시 편집기의 인코딩 설정대로 파일이 기계어로 저장되고, 이와같은 인코딩을 선택한 쉘이나 편집기로 보냐에 따라 파일이 제대로 읽힌다.(UTF-8은 UTF-8, cp949는 cp949로)</p>
<p>다만, node의 자바스크립트 엔진을 사용한다면, 윈도우에서든, 리눅스에서든 운영체제와 별개로 컴파일 시 한글 깨짐 현상은 없다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Encoding] 한글명 파일 깨짐 발견]]></title>
            <link>https://velog.io/@kimjh18_idt/Encoding-%EB%93%9C%EB%94%94%EC%96%B4-%ED%95%9C%EA%B8%80%EB%AA%85-%ED%8C%8C%EC%9D%BC-%EA%B9%A8%EC%A7%90-%EB%B0%9C%EA%B2%AC</link>
            <guid>https://velog.io/@kimjh18_idt/Encoding-%EB%93%9C%EB%94%94%EC%96%B4-%ED%95%9C%EA%B8%80%EB%AA%85-%ED%8C%8C%EC%9D%BC-%EA%B9%A8%EC%A7%90-%EB%B0%9C%EA%B2%AC</guid>
            <pubDate>Tue, 13 Sep 2022 15:53:37 GMT</pubDate>
            <description><![CDATA[<h2 id="사례1">사례1</h2>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/c2533069-ab81-44f6-9d69-16a1f522faf7/image.png" alt=""></p>
<p><strong>내 윈도우 노트북</strong>에서 git bash shell로 같은 문제 알집을 보면 한글명이 깨지는 게 보인다. 그리고 액면가로는 역시나 명령어가 안먹는다.</p>
<p>물론, 정확히는 <strong>리눅스 서버 상에서</strong> 발생하는 경우는 아니지만,
이러한 단서들로부터 추론할때, 과거의 인코딩 문제를 가진 파일들의 한글 이름이 깨졌고, 이에 따라 처음부터 utf-8로 보내야 했을 것이다.</p>
<h4 id="분석">분석</h4>
<p>비록, 윈도우 OS 상에서의 사례지만, 리눅스 서버와 같이 Bash Shell을 사용한다는 점에 집중하여 문제를 분석해봤다.</p>
<p>우선 locale을 통해 현재 인코딩을 확인해보았다. 참고로 git bash shell의 경우 쉘 창을 우클릭하면 Options 항목의 text에서 인코딩을 바꿀 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/6d6ec4f1-2247-454c-a846-e3281d15c2d1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/de665e54-6912-4ab2-bd95-bc147041f0a2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/836b33c6-3845-4c4e-ad74-ef22e8ecc893/image.png" alt=""></p>
<p>현재 eucKR로 쉘의 인코딩을 변경 해도,
UTF-8로 저장된 파일 이름들이  ls 하면 정상적으로 조회된다. ??? 이 아니라</p>
<p>운영체제의 인코딩이 문제가 아니라, 명령어(one of shell&#39;s utilities)마다의 무언가가 문제일 수도 있다고 우선 정리.</p>
<p>한편,
내 개인 윈도우 노트북으로 gitbash 상에서 UTF-8로 인코딩된 파일들에 대해, 인코딩을 eucKR로 변경하고 조회해도</p>
<p><img src="https://velog.velcdn.com/images/kimjh18_idt/post/8eacebfb-beb5-4207-8784-815e48107637/image.png" alt=""></p>
<pre><code>file -i *</code></pre><p>하면 한글명이 하나도 안깨진다.</p>
<p>어쩌면 git 다운로드 시, 접근하는 미러 사이트들의 파일들이 들쭉날쭉할지도 모른다고 추가적으로 생각하는 중이다.</p>
<p>그리고 리눅스 운영체제 실험상황같이 Bash Shell이라는 공통점에 집중하였지만,
근본적으로 윈도우 운영체제에서의 실험으로서 실험 조건이 불명확하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Encoding] Shell & the Relate]]></title>
            <link>https://velog.io/@kimjh18_idt/Encoding-Win-to-Linux-%EC%A0%91%EA%B7%BC%EA%B3%BC%EC%A0%95</link>
            <guid>https://velog.io/@kimjh18_idt/Encoding-Win-to-Linux-%EC%A0%91%EA%B7%BC%EA%B3%BC%EC%A0%95</guid>
            <pubDate>Tue, 13 Sep 2022 12:54:55 GMT</pubDate>
            <description><![CDATA[<h1 id="어떻게-리눅스-서버에-접근하지">어떻게 리눅스 서버에 접근하지?</h1>
<p>대표적으로 Shell을 통해 scp를 통해 리눅스 서버의 <strong>커널</strong>에 접근하고 서버를 제어한다.</p>
<p> 하지만, filezilla와 같은 관련 툴은 서버 접근과 제어 중에서도 <strong>파일 전송</strong>이라는 특수 목적을 집중하여 서버에 접근하고 제어한다. puTTy의 경우 key를 보다 손쉽게 설정한 접근을 도와준다.</p>
<p>그러나 이러한 연결 수단들(이하 임의로 Shell &amp; the Relate) 또한 인코딩 설정 부문이 있고, Filezilla의 경우 UTF-8이 기본값이거나 지원가능하다.</p>
<p>Windows &lt;= Shell &amp; the Relate =&gt; Linux (Kernal)</p>
<h1 id="참고자료">참고자료</h1>
<ul>
<li><p>Powershell vs FileZilla , 비교대조로 빠르게 이해
<a href="https://www.saashub.com/compare-powershell-vs-filezilla?ref=compare">https://www.saashub.com/compare-powershell-vs-filezilla?ref=compare</a></p>
</li>
<li><p>Powershell Encoding Config
<a href="https://docs.microsoft.com/ko-kr/powershell/module/microsoft.powershell.core/about/about_character_encoding?view=powershell-7.2">https://docs.microsoft.com/ko-kr/powershell/module/microsoft.powershell.core/about/about_character_encoding?view=powershell-7.2</a></p>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>