<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>k_k_s__h.log</title>
        <link>https://velog.io/</link>
        <description>안녕하세요</description>
        <lastBuildDate>Tue, 07 Nov 2023 12:03:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>k_k_s__h.log</title>
            <url>https://velog.velcdn.com/images/k_k_s__h/profile/5a050998-fca9-46be-a177-ce60f8737002/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. k_k_s__h.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/k_k_s__h" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[JAVA]객체지향언어]]></title>
            <link>https://velog.io/@k_k_s__h/JAVA%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%96%B8%EC%96%B4</link>
            <guid>https://velog.io/@k_k_s__h/JAVA%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%96%B8%EC%96%B4</guid>
            <pubDate>Tue, 07 Nov 2023 12:03:24 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/a10e9f1f-20be-4ab0-9a06-8d3419501722/image.png" alt=""></p>
<p>객체지향이란
기본개념은 실제 세계는 사물로 이루어져 있으며,발생하는 모든 사건들은 사물간의 상호작용이다 상속,캡슐화,추상화 개념을 중심으로 점차 구체적으로 발전되었으며 객체지향의 주요특징은 </p>
<h2 id="1코드의-재사용성이-높다">**1.코드의 재사용성이 높다</h2>
<blockquote>
<p>-새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할수있다 **</p>
</blockquote>
<h2 id="2코드의-관리가-용이하다">2코드의 관리가 용이하다</h2>
<blockquote>
<p>-코드간의 관게를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다</p>
</blockquote>
<h2 id="3신뢰성이-높은-프로그래밍을-가능하게-한다">3.신뢰성이 높은 프로그래밍을 가능하게 한다</h2>
<blockquote>
<p>-제어자의 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며,
코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다</p>
</blockquote>
<p>객체지향의 가장 큰 장점은 코드의 재사용이 높고 유지보수가 용이하다 것이다 이러한 객체지향언어의 장점은 프로그램의 개발과 윶보수에 드는 시간과 비용을 획기적으로 개선하였다
앞으로 상속,다형성과 같은 객체지향개념을 학습할 때 재사용성과 유지보수 그리고 중복된 코드의 제거, 이 세가지 관점에서 보면 쉽게 이해할 수 있다 </p>
<h2 id="클래스와-객체">클래스와 객체</h2>
<p>클래스와 객체의 정의와 용도</p>
<blockquote>
<p>클래스의 정의 클래스란 객체를 정의해 놓은 것이다
클래스의 용도 클래스는 객체를 생성하는데 사용된다</p>
</blockquote>
<blockquote>
<p>객체의 정의 실제로 존재하는 것, 사물 또는 개념
객체의 용도 객체가 가지고 있는 기능과 속성에 따라 다름</p>
</blockquote>
<blockquote>
<p>유형의 객체 책상,의자,자동차,TV와 같은 사물
무형의 객체 수학공식,프로그램 에러와 같은 논리와 개념</p>
</blockquote>
<p>예시)우리가 TV를 보기 위해서는,TV(객체)가 필요한 것이지 TV설계도(클래스)가 필요한 것은 아니며, TV설게도(클래스)는단지 TV라는 제품(객체)을 만드는 데만 사용될 뿐이다 
그리고 TV설계도를 통해 TV가 만들어진 후에야 사용할 수 있다 프로그래밍에서는 먼저 클래스를 작성한 다음 클래스로부터 객체를 생성하여 사용한다</p>
<h2 id="객체와-인스턴스">객체와 인스턴스</h2>
<blockquote>
<p>클래스 -&gt;&gt; 인스턴스화 -&gt;인스턴스(객체)
예를 들면 책상은 인스턴스다 라고 하기 보다는 책상은 객체다 라는 쪽이 책상은 책상의 클래스의 객체이다 라고 하기 보다는 책상은 책상 클래스의 인스턴스다 라고 하는것이 자연스럽다 </p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA]for문]]></title>
            <link>https://velog.io/@k_k_s__h/JAVAfor%EB%AC%B8</link>
            <guid>https://velog.io/@k_k_s__h/JAVAfor%EB%AC%B8</guid>
            <pubDate>Tue, 07 Nov 2023 11:20:54 GMT</pubDate>
            <description><![CDATA[<p>반복문 = 어떤 작업이 반복적ㅇ로 수행되도록 할 때 사용되며,반복문의 종류로눈 for 문 과 while문 그리고 while문의 변형인 do-while문이 있다 
for문이나 while문에 속한 문장은 조건에 따라 한 번도 수행되지 않을 수 있지만 do - while문에 속한 문장은 무조건 최소한 한 번은 수행될 것이 보장된다 
반복문은 주어진 조건을 만족하는 동안 주어진 문장들을 반복적으로 수행하므로 조건식을 초함하며,if문과 마찬가지로 조건식의 결과가 true이면 참이고,false면 거짓으로 간주된다</p>
<p>for(int i =; i&lt;5;i++){
system.out.println(&quot;i can do it&quot;)
}
for 문의 구조와 수행순서
for(초기화; 조건식; 증감식){
//조건식이 참일 때 수행될 문장들을 적는다
}
for문 작동원리
1.초기화가 먼저 수행되고 -&gt;2.조건식-&gt;3.수행될 문장 -&gt;4.증감식의 순서로 반복 됩니다 그러다가 조건식이 거짓이 되면 .for문 전체를 빠져나가게 됩니다</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/2782a8d2-e80c-4137-a354-904184ed865e/image.png" alt=""></p>
<p>1부터 10까지의 합을 구하는 에제
<img src="https://velog.velcdn.com/images/k_k_s__h/post/bc99eea5-35f1-4361-9798-82fa58e01fd0/image.png" alt=""></p>
<p>1<del>10 까지 증가 시키는 동시에 10</del>1 까지 감소 시키면서 출력합니다
<img src="https://velog.velcdn.com/images/k_k_s__h/post/80ee8ece-f778-4e37-8bf5-f341436a8112/image.png" alt=""></p>
<h3 id="중첩for문">중첩for문</h3>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/6892d159-a829-4a68-b867-3c58a3cffb64/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/87811079-5c0e-408f-b1fa-e0d07a6f265d/image.png" alt="">
<img src="https://velog.velcdn.com/images/k_k_s__h/post/f841c099-0971-4bc2-bc8d-238a70e71500/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 조건문]]></title>
            <link>https://velog.io/@k_k_s__h/JAVA-%EC%A1%B0%EA%B1%B4%EB%AC%B8</link>
            <guid>https://velog.io/@k_k_s__h/JAVA-%EC%A1%B0%EA%B1%B4%EB%AC%B8</guid>
            <pubDate>Tue, 07 Nov 2023 10:34:58 GMT</pubDate>
            <description><![CDATA[<p>조건문 -조건에 따라 다른 문장이 수행되도록 하고, 반복문은 특정 문장들을 반복해서 수행한다 </p>
<p>1-조건문 -if .switch
조건문과 if문과 switch문, 두 가지가 있으며 주로 if 문이 많이 사용된다 
if 문보다 switch문이 효율적이지만,switch문은 if문보다 제약이 많다 </p>
<p>if문-
if(조건식){
    //조건식이 참(true) 일 뗴 수행될 문장들을 적는다
    }
    <img src="https://velog.velcdn.com/images/k_k_s__h/post/7f9da4ff-c82d-40d4-ab92-e7b7dc373f09/image.png" alt=""></p>
<h2 id="if-else문">if-else문</h2>
<p> if문의 변형인 if-else문의 구조는 다음과 같습니다 if 문에 else블럭 이 추가 되었다 else 의 뜻이 그 밖의 다른 이므로 조건식의 결과가 참이 아닐때 즉 거짓일 때 else 블럭의 문장을 수행
 if(조건식){
 조건식이 참(true)일떄 수행될 문장들
 }else{
 조건식이 거짓(false)일 떄 수행될 문장들을 적는다
 }
 <img src="https://velog.velcdn.com/images/k_k_s__h/post/82070ef2-1cce-4e95-bbd8-cafde2980db4/image.png" alt=""></p>
<h2 id="if-else-if-문">if-else if 문</h2>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/db958e82-d3f0-4223-b54d-b219ab3cab2e/image.png" alt="">
1.결과가 참인 조건식을 만날 때까지 첫 번째 조건식부터 순서대로 평가
2.참인 조선식을 만나면,해당 블럭{}의 문장들 수행
3.if-else if문 전체를 빠져나온다
<img src="https://velog.velcdn.com/images/k_k_s__h/post/b4a33deb-863d-4110-8bf5-17718a96bfe1/image.png" alt=""></p>
<p>중첩 if문
if(조건식1){
//조건식 1의 연산결과가 true일때 수행될 문장들을 적는다.
if(조건식2){
//조건식1과조건식2가 모두 true일 때 수행될 문장들
}else {
//조건식1이 true이고,조건식2가 false일 때 수행되는 문장들
}
}else{
//조건식1이 false일 때 수행되는 문장들 
}<img src="https://velog.velcdn.com/images/k_k_s__h/post/e93615d3-8cc8-4650-87f2-732a02c7bafe/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JAVA#변수-2]]></title>
            <link>https://velog.io/@k_k_s__h/JAVA%EB%B3%80%EC%88%98-2</link>
            <guid>https://velog.io/@k_k_s__h/JAVA%EB%B3%80%EC%88%98-2</guid>
            <pubDate>Tue, 07 Nov 2023 08:58:29 GMT</pubDate>
            <description><![CDATA[<p>변수의 타입 
우리가 주로 사용하는 값(data)의 종류(type)는 크게 문자와 숫자로 나눌 수 있고, 숫자는 다시 정수와 실수로 나눈다</p>
<p>값
-문자=&#39;a&#39;,&#39;1&#39;,&quot;abc&quot;
-숫자 -정수 = 123,0,-100
    -실수 = 3.14,-3.0
    자료형 에는 문자형(char), 정수형(byte,short,int,long),
                실수형(float,double) 등이 있다 변수를 선언할 때는 저장하려는 값의 특성을 고려 하여 가장 알맞은 자료형을 변수의 타입으로 선택</p>
<blockquote>
<p> 자료형은 크게 &#39;기본형&#39;과 &#39;참조형&#39; 두 가지로 나눈다 
                기본형 변수는 실제 값을 저장하는 반면,참조형 변수는 어떤 값이 저장되어 있는 주소 를 값으로 갖는다 </p>
</blockquote>
<h2 id="기본형-논리형문자형정수형실수형">기본형-논리형,문자형,정수형,실수형</h2>
<p>계산을 위한 실제 값을 저장한다
<img src="https://velog.velcdn.com/images/k_k_s__h/post/17a74a44-cd43-4285-93e1-ee266628ff6e/image.png" alt=""></p>
<p>boolean은 true와 false 두 가지 값만 표현할 수 있으면 되므로 가장 작은 크기인 1byte
char은 자바에서 유니코드를 사용하므로 2byte
byte는 크기가 1byte라서 byte
int (4byte)를 기준으로 짧아서 short(2 byte), 길어서 long (8byte),(short &lt;-&gt;long)
float는 실수 값을 부동소수점 방식으로 저장하기 떄문에 float
double은 float보다 두 배의 크기 *8byte)를 갖기 때문에 double</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JAVA#변수-1]]></title>
            <link>https://velog.io/@k_k_s__h/JAVA%EB%B3%80%EC%88%98-1</link>
            <guid>https://velog.io/@k_k_s__h/JAVA%EB%B3%80%EC%88%98-1</guid>
            <pubDate>Tue, 07 Nov 2023 08:38:22 GMT</pubDate>
            <description><![CDATA[<p>변수(variable)란
프로그래밍 능력 중의 하나가 바로 값(data)을 잘 다루는 것 입니다 
값을 저장하는 공간인 변수 (메모리상의 공간을 의미) 이 공간에 저장된 값은 변경될수 있기 때문에 &quot;변수&quot;</p>
<blockquote>
<p><strong>변수란, 단 하나의 값을 저장할 수 있는 메모리 공간</strong></p>
</blockquote>
<p>하나의 변수에 단 하나의 값만 저장할 수 있으므로, 새로운 값을 저장하면 기존의 값은 사라진다.</p>
<p>변수의 선언과 초기화
변수를 사용하려면 먼저 변수를 선언 해야 하는데 , 변수의 선언방법은</p>
<p>(변수 타입) (변수이름) ; = int age (age=14 ) 숫자로 들어 오기 떄문에 변수 타입은 int 만약 문자로 들어 온다면 String으로 변수 타입을 적어 주면된다 </p>
<p>변수의 초기화
변수를 선언한 이후부터는 변수를 사용할 수 있으나 그 전에 반드시 변수를 &#39;초기화&#39; 해야 한다 메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장된&#39;알 수없는 값(쓰레기값, garbage value) 가 남아있을 수 있기 때문이다
변수에 값을 저장할 때는 대입 연산자 &quot;=&quot;를 이용한다 수학 에서는 양변의 값이 같다는 뜻이지만, 자바에서는 오른족 값을 왼쪽(변수)에 저장하라는 뜻이다 그래서 대입연산자의 왼족에는 반드시 변수가 와야 한다 </p>
<p>int age = 25 //변수 age를 선언하고 25로 초기화 한다</p>
<blockquote>
<p>변수의 초기화란, 변수를 사용하기 전에 처음으로 값을 저장하는 것</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/f61d95ba-08e6-4afb-9fc2-6b1e346fbf1d/image.png" alt=""></p>
<p>두 변수의 값 교환하기 
다음과 같이 x,y가 잇을 때 , 두 변수에 담긴 값을 서로 바꾸려면 어떻게 해야 할까?
int x =10;
int y =20;</p>
<p>단순하게 변수 x의 값을y에 저장하고,y의 값을 x에 저장하면 될 것 같지만 그렇게 해서는 원하는 결과를 얻을 수 없다
1.변수 y에 저장된 값을 변수 x에 저장
x=y;에 저장된 값을 변수 x에 저장
x=y;
<img src="https://velog.velcdn.com/images/k_k_s__h/post/33de270a-1899-475d-a8c8-8514d55b40a3/image.png" alt=""></p>
<p>변수의 명명 규칙
1.대소문자가 구분되며 길이에 제한이 없다
True와 true는 서로 다른 것으로 간주
2.예약어를 사용해서는 안 된다
true는 예약어라서 사용할 수 없지만 True는 가능하다
3.숫자로 시작해서는 안 된다
top 10은 허용하지만 7up은 허용되지 않는다
4.특수문자는 &#39;_&#39;와 $ 만을 허용한다
-$harp은 허용되지만,S#arp은 허용되지 않는다</p>
<p>자바 권장 규칙
1.클래스 이름의 첫 글자는 항상 대문자로 한다
-변수와 매서드의 이름의 첫 글자는 항상 소문자로 한다
2.여러 단어를 이루어진 이름은 다언의 첫 글자를 대문자로 한다.
-lastlndexOf. stringBuffer
3.상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 &#39;_&#39;로 구분한다 
-PI. MAX_number</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] #1]]></title>
            <link>https://velog.io/@k_k_s__h/JAVA-1</link>
            <guid>https://velog.io/@k_k_s__h/JAVA-1</guid>
            <pubDate>Tue, 07 Nov 2023 07:51:10 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/22551fd4-987a-4077-905d-4d5e87201a6a/image.png" alt=""></p>
<p>자바?
자바의 가장 중요한 특징은 운영체제 에 독립적이라는 것입니다 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능 하기 때문 입니다, 운영체제에 따라 프로그램을 전혀 변경하지 않고도 실행이 가능합니다
또한 객체지향개념과 기존의 다른 프로그래밍언어, 특히 C++의 장점을 채택하는 동시에 잘 사용되지 않는 부분을 과감히 제외심으로써 비교적 쉽고 이해하기 쉬운 간결한 표현이 합니다 </p>
<p>자바 특징</p>
<ol>
<li>운영체제에 독립적이다</li>
<li>객체지향 언어 이다( OOP중의 하나로 상속,캡슐화,다향성 이 잘 적용된 순수한 객체지향 언어 이다 </li>
<li>비교적 배우기 쉽다</li>
<li>자동 메모리 관리</li>
</ol>
<p>자바에서 자주 발생하는 에러와 해결</p>
<blockquote>
<p>1.Cannot find symbol또는 cannot resolve symbol
지정된 변수나 메서드를 찾을 수 없다는 뜻 선언되지 않은 변수나 메서드를 사용하거나,변수 또는 메서드의 이름을 잘못 사용한 경우
+자바에서는 대소문자 구분을 하기 때문에 철자 뿐 만아니라 대소문자의 일치여부도 꼼꼼하게 확인</p>
</blockquote>
<blockquote>
<p>2.;세미클론이 필요한 곳에 없다는 뜻 자바의 모든 문장의 끝에는 ;을 붙여주어야 하는데 가끔 잊고 실수 한적이 있다 </p>
</blockquote>
<blockquote>
<p>3.Exception in thread &quot;main&quot; java.lang.NoSuchMethoodError:main
Main 메서드를 찾을 수 없다 는 뜻인데 실제로 main 메서드가 존재하지 않아서 메서드이 선언부 public static void main(String[]args)에 오타가 존재 하는 경우 발생 한다 </p>
</blockquote>
<blockquote>
<p>4.Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError:Hello
Hello라는 클래스를 찾을 수 없다는 뜻입니다 클래스 Hell의 철자 대소문자를 확인해보고 이상이 없으면 클래스 파일 생성되었는지 확인한다</p>
</blockquote>
<blockquote>
<p>5.ilegal start of expression 
직역하면 문장 의 앞부분이 문법에 맞지 않는다는 의미인데 간단히 말해서 문장에 문법적 오류가 있다는 뜻입니다 괄호 if문 for문 등에 문법적 오류가 있을 때 public 이나 static과 같은 키워드를 잘 못 사용한 경우에도 발생 문법적으로 옮은지 확인 해야 합니다 </p>
</blockquote>
<p>6.class.interfac.or enum expected<br>이 메시지의 의므는 키워드 class interface 또는 enum이 없다 이지만 보통 괄호 { 또는 } 의 개수 가 일치 하지 않는 경우에 발생합니다 열린괄호 {와 닫힌 괄호}의 개수가 같은지 확인</p>
<h3 id="에러-발생-해결--프로세스"><strong>에러 발생 해결  프로세스</strong></h3>
<blockquote>
<p>1.에러 메시지를 잘 읽고 해당 부분의 코드를 살펴 본다
이상이 없으면 해당 코드의 주위도 함께 살펴본다</p>
</blockquote>
<blockquote>
<p>2.그래도 이상이 없으면 에러 메시지를 잊어버리고 기본적인 부분을 재확인한다
대부분의 에러는 사소한 것인 경우가 많다</p>
</blockquote>
<blockquote>
<p>3.의심이 가는 부분을 주석처리하거나 따로 떼어내서 테스트 한다</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 데이터 모델링]]></title>
            <link>https://velog.io/@k_k_s__h/SQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81</link>
            <guid>https://velog.io/@k_k_s__h/SQL-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81</guid>
            <pubDate>Mon, 06 Nov 2023 17:13:37 GMT</pubDate>
            <description><![CDATA[<ol>
<li>성능 데이터 모델링 개요
1) 성능 데이터 모델링
데이터베이스 성능 향상을 목적으로, 설계 단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것</li>
</ol>
<p>2) 성능 데이터 모델링 고려사항
데이터 모델링을 할때 정규화를 정확하게 수행한다. (분산효과)
데이터베이스 용량 산정을 수행한다. [테이블 (엔티티) 데이터 집중 파악]
데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
(테이블, 속성, 관계에 대한 포괄적인 반 정규화)
이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행한다.
(우수한 컬럼순위 지정)
성능 관점에서 데이터 모델을 검증한다.</p>
<p>3) *트랜잭션 유형 파악
*CRUD 매트릭스를 보고 파악, 객체지향 모델링을 적용한다면 시퀀스 다이어그램을 이용
입력, 수정, 삭제, 조회에 따라 테이블 데이터 추리 유추
SQL문 조인관계 테이블에서 데이터 조회의 컬럼 파악에 따른 성능고려</p>
<p>✔️ CRUD 매트릭스란?
2차원 형태의 표로서, 행에는 프로세스를, 열에는 테이블을, 행과 열이 만나는 위치에는 프로세스가 테이블에 발생시키는 변화를 표시하는 업무 프로세스와 데이터 간 상관 분석표이다.</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/df7ead22-2fe3-451d-ad61-33e1e8796e12/image.png" alt=""></p>
<ol start="2">
<li>정규화와 성능
데이터 중복(이상현상)을 최소화 하기 위해 릴레이션을 분해하는 과정
제 1정규형 ~ 제 6정규형, BCNF가 있지만 대체적으로 실무에서는 대체로 1~3 정규화까지의 과정을 거친다.
정규화는 논리적 설계 단계에서 수행
정규형의 차수가 높아질수록 데이터 중복이 줄어 이상현상이 발생하지 않는 릴레이션이 됨
즉, 정규형의 차수가 높아질수록 제약조건이 높다.
✔️ 이상현상 ?
불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 할 때 발생할 수 있는 부작용</li>
</ol>
<p>1) 정규화 수행과 성능
조회 성능 : 처리 조건에 따라 향상될 수 있고 아닐 수 있다.
입력, 수정, 삭제 성능 : 성능이 향상 된다.</p>
<p>2) 정규화
(1) 제 1정규화 (1NF) : 종속 속성 제거, 일반 속성 대상
릴레이션에 속한 모든 속성의 도메인이 원자값으로만 구성되어 있어야 한다.
즉, 모든 속성은 반드시 하나의 값만 가져야 한다.</p>
<p>테이블(Relation)이 제 1정규형을 만족했다는 것은 아래 세 가지 조건를 만족했다는 것을 의미한다.</p>
<p>어떤 Relation에 속한 모든 Domain이 원자값(atomic value)만으로 되어 있다.
모든 attribute에 반복되는 그룹(repeating group)이 나타나지 않는다.
기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.</p>
<p>예시 1. 다중값을 가진다 (1번 사항 위배)</p>
<p>비정규화 테이블
고객아이디, 이름은 복합 기본키 (기본키 : {고객아이디, 이름})
<img src="https://velog.velcdn.com/images/k_k_s__h/post/c7964422-5628-4ff6-b1da-b3ab08d76a9b/image.png" alt=""></p>
<p>예시 2. 반복 그룹을 가진다 (2번사항 위배)</p>
<p>비정규화 테이블</p>
<ul>
<li>고객아이디, 이름은 복합 기본키 (기본키 : {고객아이디, 이름})
<img src="https://velog.velcdn.com/images/k_k_s__h/post/141b18e4-65da-450d-ab12-d850b85d93c4/image.png" alt=""></li>
</ul>
<p>🌱 제 1 정규화
단, 기본키가 유일하지 않다는 것을 알 수 있다. 
따라서 3번 조건을 만족하기 위해서 아래와 같이 테이블을 나누어 디자인 하는 것이 좋다. 
(예시가 전화번호 테이블이기 때문에 실 업무에서는 더 생각해 볼 필요가 있음)
정규화 테이블 (1정규화)
<img src="https://velog.velcdn.com/images/k_k_s__h/post/7177f99b-476d-4796-85d9-2d17ae46efab/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/12853cd9-419d-444d-960c-8fefaa6b9ffa/image.png" alt=""></p>
<p>위 테이블은 고객정보 테이블과 고객 전화번호 테이블이 1 : N 관계를 형성하는 것을 알 수 있다.</p>
<p>(2) 제 2정규화 (2NF) : 부분적 함수종속 제거, 복합식별자만 대상
테이블의 모든 컬럼이 완전함수적 종속을 만족한다.
즉, 모든 속성은 반드시 모든 기본키에 종속되어야 한다.
(기본키 일부에만 종속 되어서는 안됨)
주문 테이블</p>
<ul>
<li>주문번호, 상품코드는 복합 기본키이다. (기본키 : {주문번호, 상품코드})</li>
<li>상품명은 상품코드에만 종속된다. (상품코드 : 결정자, 상품명 : 종속자)</li>
<li>즉, 상품코드는 상품명을 결정하고 상품코드는 상품명에 종속된다 할 수 있다. (상품코드 → 상품명)</li>
<li>‘부분함수 종속성’
<img src="https://velog.velcdn.com/images/k_k_s__h/post/2f587066-f3e7-49dc-b467-13ce18d51682/image.png" alt=""></li>
</ul>
<p>위 주문 테이블은 이상현상이 발생한다.</p>
<p>입력이상 : 주문이 발생하지 않으면 상품명이 입력 불가
수정이상 : 상품명이 변경될 경우 해당되는 주문 ROW UPDATE 필요
삭제이상 : 상품 삭제시 주문까지 삭제
🌱 제 2 정규화
주문과 관계없이 상품의 데이터입력, 수정, 삭제가 가능하다.
따라서 현재 테이블의 핵심 주제와 상관없는 컬럼을 제거하면 된다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/5cbbd97b-5680-4eff-8a5f-386b1b000c1a/image.png" alt=""></p>
<p>(3) 제 3정규화 (3NF) : 이행함수 종속성 제거
기본키가 아닌 모든 속성간에는 서로 종속될 수 없다.</p>
<p>테이블(Relation)이 제 3정규형을 만족한다는 것은 아래 두 가지 조건을 만족하는 것을 의미한다.</p>
<p>테이블이 제 2정규형을 만족해야한다.
테이블 내의 모든 속성이 기본키에만 의존해야하며, 다른 후보키에 의존하지 않는다.
즉, 이행적 함수종속은 기능적 종속으로 X⟶ Y 이고 Y⟶ Z 에 의해서 X⟶ Z (X가 Z를 결정한다) 가 되는 것이다.</p>
<p>상품 테이블</p>
<ul>
<li>상품코드는 유일한 기본키이다. (기본키 : 상품코드)</li>
<li>제공업체는 상품코드에 종속되지 않고 상품명(후보키)에 종속된다.</li>
<li>데이터 이상 현상 발생 가능!
<img src="https://velog.velcdn.com/images/k_k_s__h/post/0465c37f-dc08-4bfe-8b1c-e54d153d5584/image.png" alt=""></li>
</ul>
<p>🌱 제 3 정규화
제공업체는 주문번호(기본키)와 상관이 없는 컬럼이기 때문에 제거하면된다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/52c72fa8-b6b8-4fe8-bb62-514684ffdeaf/image.png" alt=""></p>
<p>(4) BCNF 정규화 : 결정자가 후보키가 아닌 함수 종속성 제거 → BCNF를 만족한다.
릴레이션의 함수 종속관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다.</p>
<p>결정자가 후보키가 아니고 종속자가 기본키의 부분집합인 속성을 분해
BCNF 정규형인 모든 릴레이션은 제 3정규형에 속한다. 그 역은 성립되지 않는다.</p>
<p>주문테이블
<img src="https://velog.velcdn.com/images/k_k_s__h/post/21ffa5e6-65f5-4237-b01c-d1fec597b20e/image.png" alt=""></p>
<p>제공업체가 상품을 제공하겠다고 결정해야 주문번호가 일어난다.
만약 주문이 일어났는데 제공업체가 상품을 제공하지 않는다면 주문을 받을 수가 없다.
즉, 제공업체도 후보키가 되어야한다. (결정자가 후보키가 아닌 속성 분리)</p>
<p>🌱 BCNF
<img src="https://velog.velcdn.com/images/k_k_s__h/post/72ecbaad-ccc8-425e-ae52-c179d8475983/image.png" alt=""></p>
<p>따라서 상품테이블이 먼저 결정이된 후 주문테이블이 생성될 수 있게 만들어 주는 구조를 BCNF라고한다.</p>
<p>(5) 제 4정규화 (4NF) : 다중값 종속성을 제거한다
하나의 결정자가 다른속성에서 여러 종속자를 결정할 때 다치종속 이라고한다.</p>
<p>한 릴레이션에서 1:N, 1:N 두 개 이상으로 다치종속이 구성되어 있을때 이상현상이 발생한다.
중심이 되는 속성을 기준으로 릴레이션을 분리해줘야한다.</p>
<p>개발자 테이블
<img src="https://velog.velcdn.com/images/k_k_s__h/post/8fdfca88-ae14-4de0-92d4-8c3de5be4c5f/image.png" alt=""></p>
<p>🌱 제 4정규화
개발자마다 자격증 값들이 여러개 존재하고, 개발자마다 언어 값들이 여러개 존재하는 경우 다치 종속 관계라고 한다.
이러한 경우 개발자, 자격증 / 개발자, 언어 테이블로 분리하여 관리하며 다치종속 관계를 제거하기 때문에 4차 정규화를 만족한다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/279d607d-f425-41c5-aa30-50b5b78aa01d/image.png" alt=""></p>
<p>(6) 제 5정규화 (5NF) : 조인 종속성을 제거한다
릴레이션을 셋으로 분해 하여야만 조인을 통해서 원본 조회가 가능하다.</p>
<p>4차정규화 테이블에 대해 조인연산을 수행하면 4차 정규화 수행전 데이터와 다르게 되는 문제인 조인 종속이 발생한다.</p>
<p>4차 정규화 테이블
<img src="https://velog.velcdn.com/images/k_k_s__h/post/e9db6517-ca4d-46b9-beff-5430e44f60cc/image.png" alt=""></p>
<p>🌱 제 5정규화
조인 종속 관계를 제거하기 위해서는 모든 속성 관계인 개발자,자격증 / 개발자, 언어 / 자격증, 언어 관계에 대한 테이블을 만들어 줌으로써 조인을 했을때 정확히 원래의 데이터로 복원할 수 있게 한다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/d3a636fc-cf1a-410c-a9bc-6730d1e13d05/image.png" alt=""></p>
<ol start="3">
<li>반정규화 (De-Normalization)와 성능</li>
</ol>
<ul>
<li>중복 데이터를 데이터베이스에 추가하여 데이터 검색에 필요한 조인 수를 줄여 성능을 향상시키는 프로세스</li>
<li>정규화된 엔티티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법</li>
<li>비정규화, 역정규화라고 불린다.</li>
<li>조회 성능 향상 - 중복성의 원리를 활용하여 데이터 조회시 성능을 향상시키는 역할을 할 수 있음.
(테이블의 중복성,  컬럼의 중복성, 관계의 중복성)
(1) 반정규화 절차
반정규화 대상조사</li>
</ul>
<p>범위처리빈도수 조사
대량의 범위처리 조사
통계성 프로세스 조사(통계성 테이블생성)
테이블 조인 개수</p>
<p>다른 방법유도 검토</p>
<p>뷰테이블
클러스터링 적용(조회중심- 인덱스로 안될경우)
인덱스의 조정
파티셔닝 기법 적용
응용 애플리케이션
반정규화 적용(기법)</p>
<p>(2) 반정규화 적용(기법)</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/9e0f4db8-558e-4b3d-a96c-38c3bd609158/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/27273ae0-55f1-49bf-a623-46b5f9074972/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/ba6175ff-6046-4623-a09b-b07a002d5d53/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/7bb1d5d2-4135-465a-a61f-57568dc09e09/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/32fc33ed-38d0-49b2-a2ee-3916aef6b7d3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/15c21f7d-884b-417f-9f17-ef64e8b76ebd/image.png" alt=""></p>
<p>profile</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JAVA [디자인 패턴]]]></title>
            <link>https://velog.io/@k_k_s__h/JAVA-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4</link>
            <guid>https://velog.io/@k_k_s__h/JAVA-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4</guid>
            <pubDate>Mon, 06 Nov 2023 17:05:31 GMT</pubDate>
            <description><![CDATA[<p>디자인패턴이란?
자주 사용하는 설계 패턴을 정형화 해서 이를 유형별로 나누어 가장 최적의 방법으로 개발을 할 수 있도록 정해둔 설계 패턴
알고리즘과 유사하나, 명확하게 정답이 있는 형태는 아니며 프로젝트 상황에 맞추어 적용 가능하다.
Gof 디자인 패턴
소프트웨어 설계에는 기존 경험이 매우 중요하다. 그러나 모든 사람들이 다양한 경험을 가지고 있을 수 없는데, 이러한 지식을 공유하기 위해 나온것이 GOF(Gang of Four) 의 디자인 패턴이다.</p>
<p>객체 지향 개념에 따른 설계 중 재사용 할 경우 유용한 설계를 디자인 패턴으로 정리 해 둔 것
Gof 의 디자인 패턴은 총 23개이다.
디자인 패턴의 장점</p>
<p>1) 개발자(설계자) 간 원활한 소통
2) 소프트웨어 구조 파악 용이
3) 재사용을 통한 개발 시간 단축
4) 설계 변경 요청에 대한 유연한 대처</p>
<p>디자인 패턴의 단점</p>
<p>1) 객체지향 설계 / 구현
2) 초기 투자 비용 부담</p>
<p>디자인 패턴의 종류</p>
<ol>
<li>생성패턴
객체를 생성하는것과 관련된 패턴
객체의 생성과 변경이 전체 시스템의 미치는 영향을 최소화하고 코드의 유연성 높여줌</li>
</ol>
<ul>
<li>Factory Method</li>
<li>Singleton </li>
<li>Prototype</li>
<li>Builder</li>
<li>Abstract Factory</li>
<li>Chaining</li>
</ul>
<p>1) Singleton Pattern
어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용</p>
<p>주로 서로 자원을 공유할 때 사용 (ex, 프린터)
TCP Socket 통신에서 서버와 연결된 connect 객체에 주로사용</p>
<ol start="2">
<li>구조패턴
프로그램내의 자료구조, 인터페이스구조 등 프로그램 구조를 설계 하는데 활용되는 패턴
클래스, 객체들의 구성을 통해 더 큰 구조를 만들 수 있게 함
큰 규모의 시스템에서 많은 클래스들이 의존성을 갖게 되는데 이러한 복잡한 구조를 개발하기 쉽게 만들어주고 유지보수 하기 쉽게 만들어줌</li>
</ol>
<ul>
<li>Adapter</li>
<li>Composite</li>
<li>Bridge</li>
<li>Decorator</li>
<li>Facade</li>
<li>Flyweight</li>
<li>Proxy </li>
</ul>
<p>1) Adapter Pattern
호환성이 없는 기존클래스의 인터페이스를 변환하여 재사용 할 수 있도록 함
(ex, 110v → 220v 변환기)</p>
<p>SOLID중에서 개방 폐쇄 원칙 (OCP)를 따른다.</p>
<p>2) Proxy Pattern
Proxy는 대리인이라는 뜻으로 뭔가를 대신해서 처리하는것
Proxy Class를 통해 대신 전달하는 형태로 설계, 실제 Client는 Proxy로 부터 결과를 받는다.
Cashe 기능으로 활용 가능하다.</p>
<p>SOLID 중에서 계방 폐쇄 원칙 (OCP)과 의존 역전 원칙 (DIP)를 따른다.</p>
<p>3) Decorator Pattern
기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀때 사용
확장이 필요한 경우 상속의 대안으로도 확용한다.</p>
<p>SOLID 중에서 계방 폐쇄 원칙 (OCP)과 의존 역전 원칙 (DIP)를 따른다.</p>
<p>4) Facade Pattern
Facade = 건물의 앞, 정면
여러개의 객체와 실제 사용하는 서브객체 사이의 복잡한 의존관계가 있을때
중간에 facade라는 객체를 두고 여기서 제공하는 interface만을 활용해 기능 사용하는 방식
facade는 자신이 가지고 있는 각 클래스의 기능을 명확히 알아야 한다.</p>
<ol start="3">
<li>행위패턴
반복적으로 사용되는 객체들의 상호작용을 패턴화 한것
클래스, 객체들이 상호작용하는 방법과 책임을 분산하는 방법 제공
행위패턴은 행위와 관련된 패턴 사용하여 독립적으로 일 처리하고자 할때 사용</li>
</ol>
<ul>
<li>Template Method</li>
<li>Interpreter</li>
<li>Iterator</li>
<li>Observer</li>
<li>Strategy</li>
<li>Visitor</li>
<li>Chain of responsibility</li>
<li>Command</li>
<li>Mediator</li>
<li>State</li>
<li>Memento </li>
</ul>
<p>1) Observer Pattern
변화가 일어났을 때 미리 등록된 다른 클래스에 통보 해주는 패턴 구현
event listener에서 해당 패턴을 사용</p>
<p>2) Strategy Pattern
전략패턴, 객체지향의 꽃
유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여 유연하게 확장하는 패턴</p>
<p>SOLID 중에서 계방 폐쇄 원칙 (OCP)과 의존 역전 원칙 (DIP)를 따른다.
전략 메서드를 가진 전략객체 (Normal Strategy, Base64 Strategy)
전략 객체를 사용하는 컨텍스트 (Encoder)
전략 객체를 생성해 컨텍스트에 주입하는 클라이언트</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Project#2/회원가입 구현 해보기]]></title>
            <link>https://velog.io/@k_k_s__h/Project%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EA%B5%AC%ED%98%84-%ED%95%B4%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@k_k_s__h/Project%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EA%B5%AC%ED%98%84-%ED%95%B4%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Sat, 04 Nov 2023 16:27:48 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>인력관리 서비스에서 회원가입 Work Flow 정리 해봤습니다
1.Vo 폴더에 EmployeeVo.java 파일에 객체를 먼저 생성합니다
2.Controller 폴더에서 EmployeeController.java에서 객체에해당하는 데이터를 처리로직과 호출 매서드 함수를 만들어줍니다 
3.DAO 폴더에서 EmployeeDao파일 에서 Mapper할 매소드를 정의
4.mybatits/mapper Employee.xml 파일을 만들어 실직적으로 데이터 처리 해주는 SQL쿼리문을 작성합니다
5.마무리로 view단에서 controller에서 데이터처리한 결과를 뷰에 전달</p>
</blockquote>
<h2 id="employeevo-객체를-생성-합니다">EmployeeVo 객체를 생성 합니다</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/42e8c947-de71-408f-a848-6fc0143c7eb0/image.png" alt="">
@Getter와 @Setter 어노테이션을 사용하면 자동으로 getter와 setter 메서드가 생성됩니다. 이렇게 하면 코드를 더 간결하고 가독성이 더 좋게 만듬</p>
</blockquote>
<blockquote>
<p>1.@Getter 어노테이션은 클래스의 필드에 대한 getter 메서드를 생성
2.@Setter 어노테이션은 setter 메서드를 생성
이렇게 자동으로 getter와 setter 메서드를 생성하면 필드에 접근하거나 값을 설정하는 데 필요한 반복적인 작업을 줄일 수 있습니다.</p>
</blockquote>
<h2 id="employeecontroller-객체와관련된-데이터를-처리하는-호출-매서드-함수-작성">EmployeeController 객체와관련된 데이터를 처리하는 호출 매서드 함수 작성</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/e1405761-ec1b-427e-b227-93f445c590ba/image.png" alt="">
HttpServletRequest
1.사용하면 요청 관련 정보에 액세스할 수 있으며, 
2.요청 매개변수, 헤더 및 요청 방식 (예: GET 또는 POST)과 같은 정보에 접근할 수 있습니다</p>
</blockquote>
<blockquote>
<p>HttpSessions는 
1사용자의 세션을 나타내며 세션별 데이터를 저장. 
2.세션은 사용자 관련 정보를 유지하기 위해 사용. 
3.사용자 세션 동안 사용자 세부 정보를 기억하는 것이 가능하며 페이지 간 이동할 때 사용. 
4.사용자 인증 및 사용자 권한분기에 사용</p>
</blockquote>
<h2 id="employeedao는-controller에서-만든-함수를-mapper-활용하여-crud-작업-수행">EmployeeDao는 Controller에서 만든 함수를 Mapper 활용하여 CRUD 작업 수행</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/a62e4220-4583-47c9-ba0e-d76cf4d0cafa/image.png" alt="">
EmployeeController 클래스에서 insertEmployee 메서드를 호출하여 직원 정보를 데이터베이스에 저장할 때, 이 메서드를 EmployeeDao에서 정의합니다
insertEmployee 메서드는 EmployeeVo 객체를 매개변수로 받아서 데이터베이스에 삽입 작업을 수행</p>
</blockquote>
<h2 id="employeexml에서는-실직적으로-employee데이터에대한-crud-sql쿼리-작성">employee.xml에서는 실직적으로 Employee데이터에대한 CRUD SQL쿼리 작성</h2>
<p>(여기서 EmployeeDao에서 정의한 메소드를 매핑합니다)</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/1ec10517-a280-43dc-bb6c-682466adebb8/image.png" alt="">
Controller에서 insertEmployee 메서드를 호출하면 이 쿼리가 실행되어 데이터베이스에 직원 정보가 저장됩니다
MyBatis를 사용하여 데이터베이스에 삽입 작업을 수행하기 위한 SQL 쿼리</p>
</blockquote>
<h3 id="webappweb-infviewsemployee_insert_formjsp">webapp/WEB-INF/views/employee_insert_form.jsp</h3>
<p>Controller 처리한 데이터 return views에서 데이터 시각화</p>
<h2 id="폼form-데이터-유효성-검사">폼(form) 데이터 유효성 검사</h2>
<blockquote>
<p><img src="blob:https://velog.io/29f7ae30-dc37-4d2b-92e1-a7065c681feb" alt="업로드중.."></p>
</blockquote>
<blockquote>
<p>폼(form) 데이터를 유효성 검사하고, 입력된 정보가 일치하는 경우에는 &quot;insert.do&quot;로 데이터를 서버로 전송하는 함수</p>
</blockquote>
<h2 id="직원-회원가입을-위한-폼">직원 회원가입을 위한 폼</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/cda56dd5-587a-4aa4-91f5-6903a1d318ca/image.png" alt="">
폼에서 사용자가 입력한 데이터를 서버 측에서 처리하고,처리된 데이터를 시각화하기 위해 JSP(JavaServer Pages)를 사용 JSP를 사용하므로서 페이지 안에서 동적 웹 페이지를 생성</p>
</blockquote>
<h2 id="아이디-중복-여부를-확인">아이디 중복 여부를 확인</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/a953bdff-84c3-4b59-b8f2-b3f15e80ea0d/image.png" alt="">
AJAX비동기통신을 사용해서 데이터베이스에 중복된 E_ID 가 있는지 확인 하는 로직 ,정규 표현식 (regExp)을 사용하여 입력된 e_id가 영문(소문자) 4~10자리로 이루어진 것인지를 검사</p>
</blockquote>
<h2 id="비밀번호가-조건을-충족하는지-확인">비밀번호가 조건을 충족하는지 확인</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/9622c064-627e-47b4-ab91-00b6bf9d43ec/image.png" alt="">
정규 표현식 (regExp1)을 사용하여 입력된 비밀번호가 조건을 충족하는지 확인합니다
최소 6자 이상
영문 (대소문자) 및 숫자를 혼합하여 6~12자리</p>
</blockquote>
<h2 id="비밀번호와-비밀번호-확인">비밀번호와 비밀번호 확인</h2>
<blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/89a27222-3742-4c14-aec0-a00431e60f97/image.png" alt="">
사용자에게 두 비밀번호가 일치하는지 여부를 알려주는 로직</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring 프로젝트 GCP (Google Cloud Platform) 서버 배포]]></title>
            <link>https://velog.io/@k_k_s__h/Spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-GCP-Google-Cloud-Platform-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC-0gx9lauk</link>
            <guid>https://velog.io/@k_k_s__h/Spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-GCP-Google-Cloud-Platform-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC-0gx9lauk</guid>
            <pubDate>Sat, 04 Nov 2023 11:52:28 GMT</pubDate>
            <description><![CDATA[<p>JAR인스턴스 배포를 하게 되면 생기는 에로 404</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring 프로젝트 GCP (Google Cloud Platform) 서버 배포]]></title>
            <link>https://velog.io/@k_k_s__h/Spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-GCP-Google-Cloud-Platform-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC</link>
            <guid>https://velog.io/@k_k_s__h/Spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-GCP-Google-Cloud-Platform-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC</guid>
            <pubDate>Sat, 04 Nov 2023 11:51:49 GMT</pubDate>
            <description><![CDATA[<ol>
<li>개요
Spring boot project 를 클라우드로 배포하는 과정을 정리함</li>
</ol>
<ol start="2">
<li>VM 인스턴스 생성
1) google cloud 가입
아래의 클라우드 사이트 계정 가입 한다.
처음 가입 시 $300 크레딧 제공
<img src="https://velog.velcdn.com/images/k_k_s__h/post/ec52923b-ad5b-4d7e-9ac8-d4c2fa365ea9/image.png" alt=""></li>
</ol>
<p><a href="https://cloud.google.com/">https://cloud.google.com/</a></p>
<p>2) 프로젝트 만들기 (VM 인스턴스 생성)
GCP는 프로젝트 단위로 리소스/서비스를 관리 함
즉, 프로젝트 생성 후에 프로젝트 내에서 VM 인스턴스를 생성/사용하는 방식이다.</p>
<p>(1) 이름
원하는 인스턴스 이름 사용</p>
<p>(2) 리전
서버의 물리적 위치, 한국 서비스라면 서울로 선택 하면 된다.</p>
<p>(3) 시리즈
머신 구성 선택,
나는 E2, e2-micro 또는 e2-small 정도 사용한다.
가격과 성능에 따라 선택 하면 된다. (추후 업그레이드 가능)</p>
<p>(4) 부팅 디스크
원하는 운영체제 선택,
나는 Ubuntu , 22.0.4 버전 선택 했다.</p>
<p>(5) ID 및 API 액세스
액세스 범위 - 모든 Cloud API 대한 전체 액세스 허용 선택
방화벽 - &quot;HTTP&quot;, &quot;HTTPS&quot; 트래픽 모두 선택</p>
<p>(4) 만들기
하단의 만들기 선택 후 1분 안쪽으로 기다리면 인스턴스가 생성된다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/7d441145-471c-47f9-9888-ab26e5d289de/image.png" alt=""></p>
<p>외부 IP : 외부 브라우저 등을 통해 접근 가능한 주소
SSH : 버튼을 클릭하면 해당 인스턴스의 웹 콘솔로 접근 할 수 있다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/39e2e385-2581-45dd-9f93-1a318c3f61d3/image.png" alt=""></p>
<ol start="3">
<li>배포 작업
Spring boot project가 있다는 가정 하에 시작한다.</li>
</ol>
<p>1) root 계정 비번 설정 및 이동
sudo passwd
sudo su</p>
<p>2) Java 설치
모든 기존 패키지가 최신 상태인지 확인
sudo apt update</p>
<p>사용가능한 목록 찾기
sudo apt-cache search openjdk</p>
<p>OpenJDK11 - JRE, JDK 설치</p>
<p>sudo apt-get install openjdk-11-jre
sudo apt-get install openjdk-11-jdk</p>
<p>자바 버전이 확인 되면 설치가 완료 된 것!
java --version</p>
<p>root@instance-1:/home/abcd# java --version
openjdk 17.0.4 2022-07-19
OpenJDK Runtime Environment (build 17.0.4+8-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 17.0.4+8-Ubuntu-120.04, mixed mode, sharing
3) Spring project .jar 파일 만들기
JAR(Java Archive)
JAVA 어플리케이션 동작 할 수 있도록 한 자바 프로젝트 압축 파일</p>
<p>STS4 , Maven 로 jar 파일 만들기</p>
<blockquote>
<p>프로젝트 디렉토리로 이동한 후
mvn clean package</p>
</blockquote>
<p>빌드된 빌드파일은 해당 프로젝트 폴더 내의 build &gt; libs 에 있다.</p>
<p>4) 로컬 pc에서 원격 VM 에 이동 (.jar 파일)</p>
<p>VS Code 활용
가장 쉽게 접하는 VS Code IDE를 이용해 이동 시킬 수 있다.
Extensions 에서 Remote - SSH 설치 하면 하단에 Remote Explore 가 보여진다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/a6794e4e-7f85-411c-b1a1-8282d218c460/image.png" alt=""></p>
<p>Remote Explorer 에서 SSH Targets을 선택 후 Add New 클릭</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/c09540e3-fb52-443f-8d82-17d46c419da3/image.png" alt=""></p>
<p>ssh 계정이름@외부ip(연결할 ip) 입력 및 톱니바퀴모양 클릭 후 config 파일 수정</p>
<p>Host : 원하는 이름
HostName : VM 외부 IP
User : VM User nm
IdentifyFile : 키 파일 경로</p>
<p>연결시도 후 연결 성공 ~!</p>
<p>.jar 파일 이동</p>
<p>EXPLORER 이동 후 상단 바의 File &gt; OpenFolder 클릭하면 아래와 같이 경로를 설정할 수 있다.
경로 설정 후 원하는 폴더에 .jar 파일을 이동 시킨다.</p>
<p>console 창을 열고 실행 명령어를 입력하면 배포가 완료된다.</p>
<h1 id="백그라운드-jar-파일-배포">백그라운드 .jar 파일 배포</h1>
<p>nohup java -jar [jar파일명].jar
nohup java -jar ilaapi-0.0.1-SNAPSHOT.jar</p>
<p>nohup.out 을 클릭해서 보면 서버가 올라간 것을 알 수 있다~!</p>
<p>5) 브라우저 실행</p>
<ol start="4">
<li>url 연결 오류시 참고 사항 (외부 접속 포트 설정)
나는 스프링부트 프로젝트 서버를 9090을 사용하고 있었는데 </li>
</ol>
<p>클라우드 VM 사용할때 무조건 Port를 열어줘야 사용이 가능하다.</p>
<p>VPC 네트워크 &gt; 방화벽 &gt; 방화벽 규칙만들기 아래와 같이 설정 후 저장을 누른다!</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/bbc67f69-a43f-4eb0-b97c-37d381e6d4cf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/ad6df75d-249e-4514-a2c1-07493715f9b5/image.png" alt=""></p>
<p>끝!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 데이터 모델링]]></title>
            <link>https://velog.io/@k_k_s__h/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%94%94%EC%9E%90%EC%9D%B8-%EC%98%81%EC%86%8D%EC%84%B1</link>
            <guid>https://velog.io/@k_k_s__h/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%94%94%EC%9E%90%EC%9D%B8-%EC%98%81%EC%86%8D%EC%84%B1</guid>
            <pubDate>Sat, 04 Nov 2023 11:49:29 GMT</pubDate>
            <description><![CDATA[<ol>
<li>데이터 모델링의 이해
1) 모델링 정의
정의 : 복잡한 현실세계를 일정한 표기법에 의해 표현하는 일</li>
</ol>
<p>특징 :</p>
<ol>
<li>추상화 : 일정한 형식 에 맞춰 표현함</li>
<li>단순화 : 제한된 표기법이나 언어로 표현함</li>
<li>명확성 : 이해가 쉽게 표현함</li>
</ol>
<p>관점</p>
<ol>
<li>데이터 관점 : 업무와 데이터 및 데이터 사이의 관계</li>
<li>프로세스 관점 : 진행되고 있거나 진행 되어야 하는 업무</li>
<li>상관 관점 : 데이터에 대한 업무 처리 방식의 영향
2) 데이터 모델링 3요소
정의 : 정보 시스템 구축을 위한 데이터 관점의 업무 분석 기법
개체 : 업무가 관여하는 어떤 것 (Things)
속성 : 어떤 것이 가지는 성격 (Attribute)
관계 : 업무가 관여하는 어떤 것 간의 관계 (Relationships)
3) 데이터 모델링 3단계
개념적 모델링 : 엔터티와 속성을 도출하고 ERD를 작성함
논리적 모델링 : 식별자를 도출하고 속성과 관계 등을 정의함
물리적 모델링 : DB 구축, 성능 및 보안 등 물리적인 성격 고려</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[라우팅 테이블(Routing table)]]></title>
            <link>https://velog.io/@k_k_s__h/%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94Routing-table</link>
            <guid>https://velog.io/@k_k_s__h/%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%85%8C%EC%9D%B4%EB%B8%94Routing-table</guid>
            <pubDate>Sat, 04 Nov 2023 11:04:08 GMT</pubDate>
            <description><![CDATA[<p>라우팅 테이블(Routing table)</p>
<blockquote>
<p>라우팅 테이블(영어: routing table)은 컴퓨터 네트워크에서 목적지 주소를 목적지에 도달하기 위한 네트워크 노선으로 변환시키는 목적으로 사용된다.  각 라우터의 라우팅 테이블은 모든 목적지 정보에 대해 해당 목적지에 도달하기 위해서 거쳐야 할 다음 라우터의 정보를 가지고 있다.</p>
</blockquote>
<p>라우팅 테이블(Routing table)이란 네트워크상의 특정 목적지까지의 거리와 가는 방법등을 명시하고 있는 테이블입니다.</p>
<p>라우터는 어떤 목적지를 찾아갈때 이 라우팅 테이블을 보고 찾아가게 됩니다. 쉽게 말하면 라우터가 여러 가지 정보를 종합해서 얻어낸 네트워크에 대한 지도를 라우팅 테이블이라고 합니다.</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/66129c5e-7f6b-4b9a-b8b6-28ea813a4cce/image.png" alt=""></p>
<p>즉 라우팅 테이블이란 라우터가 어떤 경로를 찾을 때 사용하는 것이고, 이것은 사용하는 라우터의 프로토콜에 따라 달라지며, 또 라우터는 항상 최적의 경로를 찾아 이것을 라우팅 테이블에 유지 하고 있습니다</p>
<p>AS, 그리고 내부용과 외부용 라우팅 프로토콜</p>
<h3 id="asautonomous-system">AS(Autonomous System)</h3>
<p>+하나의 네트워크 관리자에 의해서 관리되는 라우터들의 집단</p>
<p>+라우터를 AS 그룹으로 묶는 이유는 라우터가 가지는 정보를 효율적으로 관리하고
인터넷 서비스를 좀 더 간편하게 제공하기 위함</p>
<p>+AS 안에 잇는 라우터들은 자신의 AS에 속해 있는 라우터에 대한 정보만 알고 있으면 됨</p>
<p>+AS 밖으로 나갈 때에는 문지기 라우터(ASBR)에게 정보를 물어봐서 밖으로 나감</p>
<p>+라우터들은 인터넷에 접속하더라도 전 세계의 모든 네트워크에 대한 정보를 다 가지고 있을 필요가 없고,
자신이 속한 AS에 대한 정보만 가지면 됨</p>
<h3 id="as-내부에서-사용하는-라우팅-프로토콜">AS 내부에서 사용하는 라우팅 프로토콜</h3>
<p>Interior Routing Protocol 또는 Interior Gateway Protocol(IGP)
ex) RIP, IGRP, EIGRP 등</p>
<h3 id="as-외부에서-서로-라우팅-정보를-주고-받기-위해-사용하는-프로토콜">AS 외부에서 서로 라우팅 정보를 주고 받기 위해 사용하는 프로토콜</h3>
<p>Exterior Routing Protocol 또는 Exterior Gateway Protocol(EGP)
ex) EGP, BGP 등</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/859930d0-9853-4091-8bd5-83f54e7883b0/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <link>https://velog.io/@k_k_s__h/ipoa16ji</link>
            <guid>https://velog.io/@k_k_s__h/ipoa16ji</guid>
            <pubDate>Sat, 04 Nov 2023 10:55:45 GMT</pubDate>
            <description><![CDATA[<p>라우팅(Routing)</p>
<blockquote>
<p>라우팅은 특정 네트워크에서 다른 네트워크로 가기 위한 최적의 경로를 선택하여 패킷을 전달한다.
네트워크 계층(Rayer 3계층)에서 수행된다.</p>
</blockquote>
<p>정적 라우팅 (Static Routing)
<strong>정적 라우팅은 라우팅 테이블에 관리자가 직접 수동으로 추가하는 방법
네트워크가 변경될때마다 관련되어 있는 라우터의 라우팅 테이블을 수동으로 수정하는 방법
보통 네트워크 규모가 아주 작을때나 구성한 후에 변경될 일이 별로 없을 경우 사용한다.
아래의 그림에서 라우터 Q의 라우팅 테이블에 설정된것처럼 관리자가 수동으로 라우팅을 설정해야한다.</strong></p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/93542c2e-93aa-44f0-92cf-a25d84b4679b/image.png" alt=""></p>
<p>동적 라우팅 (Dynamic Routing)
**동적 라우팅은 라우팅 테이블에서 경로의 현재 상태에 따라 경로를 동적으로 설정한다.
동적 라우팅은 라우팅 프로토콜을 사용하여 최적의 경로를 검색하며,
대표적인 예로는 *RIP 와 *OSPF 가 있다.</p>
<blockquote>
<p>라우팅 프로토콜에 따라 다르지만 연결되어 있는 라우터끼리 라우팅 테이블을 주기적으로 공유한다**</p>
</blockquote>
<ul>
<li><strong>RIP(Routing Infomation Protocol)</strong></li>
</ul>
<p>: 동적 라우팅 프로토콜 중 하나로 Distance Vector 라우팅 방식으로 거리의 방향을 기준으로 패킷을 전달하는 방식</p>
<p>: AS(Autonomous System) 내부를 구성하는 내부용 라우팅 프로토콜(IGP, Interior Gateway Protocol)이다.</p>
<p>: 경로를 설정하는 기준은 거리(Hop, 홉) 개수로서 최대 15개 까지만 허용한다.</p>
<p>: 디폴트 라우팅 업데이트 주기는 30초이며, 업데이트 시 경로 이상이나 새로 생긴 경로 등의 정보를 갱신한다.</p>
<p>장점</p>
<p>: 소규모 네트워크 상에서 효율적이다.</p>
<p>: 구성이 간단하다.</p>
<p>단점</p>
<p>: 거리(Hop, 홉)가 16 이상이면 네트워크를 찾지 못하므로 대규모 네트워크에선 한계가 있다.</p>
<ul>
<li><strong>OSPF(Open Shortest Path First)</strong></li>
</ul>
<p>: 링크 상태를 확인하여 최단 경로를 찾는 알고리즘을 통해 최단 경로를 바탕으로 패킷을 전달하는 라우팅 프로토콜</p>
<p>: AS(Autonomous System) 내부를 구성하는 내부용 라우팅 프로토콜(IGP, Interior Gateway Protocol)이다.</p>
<blockquote>
<p>: 최단경로 선택 라우팅 알고리즘을 사용한다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[라우팅 프로토콜과 라우티드 프로토콜]]></title>
            <link>https://velog.io/@k_k_s__h/%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EA%B3%BC-%EB%9D%BC%EC%9A%B0%ED%8B%B0%EB%93%9C-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</link>
            <guid>https://velog.io/@k_k_s__h/%EB%9D%BC%EC%9A%B0%ED%8C%85-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EA%B3%BC-%EB%9D%BC%EC%9A%B0%ED%8B%B0%EB%93%9C-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</guid>
            <pubDate>Sat, 04 Nov 2023 10:50:42 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/a6700edf-99a8-435c-bd55-40766d811dab/image.png" alt=""></p>
<p>라우팅 프로토콜과 라우티드 프로토콜</p>
<blockquote>
<p><strong>-라우팅 프로토콜이 라우팅하는 프로토콜
-다른 네트워크로 가기 위해 사용되는 프로토콜
+말그대로,라우팅을 당하는,즉 라우터가 라우팅을 해주는 고객을 뜻한다
즉,라우터는 자동차를 타고 여행을 떠나는 승객이라고 생각하면 됩니다
-라우티드 프로토콜은 고객으로서 라우터라는 자동차를 타고 다른 네트워크로 여행을 떠나는 것입니다
-종류 
+TCP/IP
+IPX
+Appletalk</strong></p>
</blockquote>
<p>라우팅 프로토콜 
라우터간에 라우팅 정보의 교환 및 라우팅 테이블의 유지관리를 동적으로 수행하는 프로토콜
쉽게 이야기하면 라우터라는 자동차를 안전하고 빠르게 운전하는 운전 기사라고 볼 수 있다 즉,라우터에 설면서 라우티드 프로토콜에게 목적지까지 가장 좋은 길을 갈 수 있게 해주는 역할이다</p>
<blockquote>
<p><strong>라우팅 알고리즘 이라고도 한다.라우팅 알고리즘은 자신의 라우팅 테이블을 가지고 있고 자기가 찾아갈 경로에 대한 정보를 이곳에 기억</strong>
종류
+RIP
+IGRP
+OSPF
+ELGRP</p>
</blockquote>
<p>+필수 기능 및 요소 
라우팅 수행 프로세스
+라우팅 정보를 주고받기 위한 프로세스
+최적 경로 계산 및 이를 라우팅 테이블에 기록하는 프로세스
+토폴로지 변활ㄹ 감지하고 일르 자동으로 학습 반영하는 프로세스</p>
<p>라우팅 테이블의 갱신 관리
+최적 경로 결정을 위한 알고리즘 및 프로세를 적용</p>
<p>라우팅 알고리즘 
+최적 경로 산출을 하여가며 라우팅 테이블으 ㅣ 갱신,유지관리</p>
<p>라우팅 프로토콜 메세지
+라우팅 정보를 라우터들 간에 운반,전달 , 교환 등 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[라우터와네트워크]]></title>
            <link>https://velog.io/@k_k_s__h/%EB%9D%BC%EC%9A%B0%ED%84%B0%EC%99%80%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@k_k_s__h/%EB%9D%BC%EC%9A%B0%ED%84%B0%EC%99%80%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Sat, 04 Nov 2023 10:44:56 GMT</pubDate>
            <description><![CDATA[<p>라우터 : 지능을 가진 경로 배정기</p>
<p>라우터 제조회사에 따라 명령어가 무수히 많고 다 안다는것은 불가능하다.
중요한 것은 네트워크에 대한 개념이다. 즉 네트워크의 IP 주소에 대한 이해, 서브넷 마스크에 대한 이해, 라우팅에 대한 이해 등입니다.</p>
<p>라우터는 무슨일을 할까?</p>
<blockquote>
<p>라우터는 경로 결정 과 스위칭 을 합니다.</p>
</blockquote>
<p>라우터는 경로 결정과 스위칭을 하는 장비인데, 가장 좋은 경로를 결정하기 위해서 라우팅 알고리즘을 사용하고 이런 라우팅 알고리즘은 라우팅 테이블을 만들어서 관리</p>
<p>라우터는 어떻게 생긴 녀석일까?</p>
<blockquote>
<p>cisco 라우터 장비 라인업
Cisco 2500 Router (가장 많이 보급됬지만 너무 오래되서 단종됨) 단독형</p>
</blockquote>
<p>__**Cisco ISR G2 Router (Cisco 1900/Cisco 2900/Cisco 3900)
ISR : 라우터에 여러가지 서비스 기능추가 보안,음성지원, 무선등
G2 : 2세대</p>
<p>ASR Router 시리즈 : 주로 대형 SP(서비스 프로바이더) 네트워크나 대기업용 라우터
강력한 보안기능과 다양한 서비스를 제공</p>
<p>Cisco 7600 시리즈 : 주로 기업이나 학교, 관공서등의 전산센터에 설치 대형 라우터, 모듈형</p>
<p>Cisco CRS-1 Rotuer : 나온 것중에 가장 큰 라우터, 한 대가 1.2테라바이트의 속도를 낼 수 있다.
CRS-3 1보다 3배의 속도 4.8테라 바이트
대형 인터넷 포탈에서 사용, SKT, KT</p>
<p>물론 지금 2018년 다양한 장비군이 나왔겠지만 일단 이정도 알아두자.</p>
<p>라우터 인터페이스
이더넷 포트 : Type TP, AUI 2가지 방식이 있다. AUI 포트에서 UTP 케이블 연결시 AUI-to-TP 트랜시버(MAU) 필요함</p>
<p>시리얼 포트 : WAN 구간 연결 (전용선) DSU 또는 CSU 장비와 연결, 케이블은 V.35
라우터 중에 DSU/CSU 내장형 있다. 하지만 다른 장비와 호환성 문제로 후니는 선호하지 않는단다.</p>
<p>라우티드 프로토콜 : TCP/IP, IPX, AppleTalk 등
라우팅 프로토콜 : RIP, IGRP, OSPF, EIGRP 등</p>
<p>라우팅 프로토콜은 2가지로 나뉜다.
스태틱 라우팅 프로토콜 : 관리자가 경로를 설정한다. 라우터가 부담이 적다. 쉽다.
다이내믹 라우팅 프로토콜 : 프로토콜이 알아서 경로를 설정한다. 라우터에 부담이 간다. 어렵다</p>
<p>라우팅 테이블 : 라우터가 어떤 경로를 찾을 때 사용하는 것이고, 이것은 라우터의 프로토콜에 따라 달라지며, 또 라우터는 항상 최적의 경로를 찾아 이것을 라우팅테이블에 유지하고 있다.</p>
<p>AS(Autonomous System) : 하나의 네트워크 관리자에 의해 관리되는 라우터들의 집단 or 하나의 관리 전략으로 구성된 라우터 집단 or 회사나 기업 또는 단체의 라우터 집단</p>
<p>ASBR(Autonomous System Boundary Router) : AS경계에 있는 라우터
: 자신의 AS와 인접해 있는 다른 AS에 대한 정보를 가지고 있으면서 자기 AS에서 밖으로 나가는 라우터나 외부 AS에서 자기 AS쪽으로 들어오는 라우터에게 정보를 제공하는 역할</p>
<p>이 AS 시스템 덕분에 라우터들은 인터넷에 접속하더라도 전 세계의 모든 네트워크에 대한 정보를 다 가지고 있을 필요가 없고 단지 자신이 속한 AS에 대한 정보만 가지면 됩니다.</p>
<p>IGP or IRP : AS 내부용 라우팅 프로토콜 RIP, IGRP, OSPF, EIGRP
EGP or ERP : AS 외부에서 서로 라우팅 정보를 주고받기 위한 프로토콜 EGP, BGP</p>
<blockquote>
<p>**라우터 구성 방법 5가지</p>
</blockquote>
<ol>
<li>터미널 에뮬레이션 프로그램을 이용한 콘솔 전송</li>
<li>TFTP 서버</li>
<li>텔넷 접속 ( 가상 터미널)</li>
<li>네트워크 관리 시스템 ( NMS )</li>
<li>AUX 포트를 통한 모뎀접속**</li>
</ol>
<p>라우팅 프로토콜과 라우티드 프로토콜
-라우팅 프로토콜이 라우팅하는 프로토콜
-다른 네트워크로 가기 위해 사용되는 프로토콜
+말그대로,라우팅을 당하는,즉 라우터가 라우팅을 해주는 고객을 뜻한다
즉,라우터는 자동차를 타고 여행을 떠나는 승객이라고 생각하면 됩니다
-라우티드 프로토콜은 고객으로서 라우터라는 자동차를 타고 다른 네트워크로 여행을 떠나는 것입니다
-종류 
+TCP/IP
+IPX
+Appletalk</p>
<p>라우팅 프로토콜 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[데지그 네이티드 포트를 선정하기 위한 절차]]></title>
            <link>https://velog.io/@k_k_s__h/%EB%8D%B0%EC%A7%80%EA%B7%B8-%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%93%9C-%ED%8F%AC%ED%8A%B8%EB%A5%BC-%EC%84%A0%EC%A0%95%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%A0%88%EC%B0%A8</link>
            <guid>https://velog.io/@k_k_s__h/%EB%8D%B0%EC%A7%80%EA%B7%B8-%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%93%9C-%ED%8F%AC%ED%8A%B8%EB%A5%BC-%EC%84%A0%EC%A0%95%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%A0%88%EC%B0%A8</guid>
            <pubDate>Sat, 04 Nov 2023 10:29:14 GMT</pubDate>
            <description><![CDATA[<p>1.누가 더 작은 Root BID 가졌는지?</p>
<ol start="2">
<li><p>누가 루트브리지까지 더 작은 Path Cost를 가졌는지?</p>
</li>
<li><p>누가 더 작은 BID(Sender BID)를 가졌는지?</p>
</li>
<li><p>누구의 포트 ID가 더 낮은지?</p>
</li>
</ol>
<blockquote>
<p><strong>세그먼트1: 모든 스위치의 Root BID는 같으므로 기준을 사용할 수 없고, 스위치 A의 E0포트 Root Path Cost가 0으로 스위치 B의 E0포트 Root Path Cost 19보다 낮으므로 스위치 A의 E0 포트가 데지그 네이티드 포트가 됩니다.</strong></p>
</blockquote>
<blockquote>
<p><strong>세그먼트2: 세그먼트 1과 비슷합니다. A의 E1포트가 데지그 네이티드 포트가 됩니다. ( 루트브릿지의 모든 포트는 Path Cost가 0이므로 데지그 네이티드 포트가 됩니다 )</strong></p>
</blockquote>
<blockquote>
<p><strong>세그먼트3: Root BID가 같고 Root Path Cost가 같습니다. 이때에는 Sender BID로 비교합니다. 스위치 B와 스위치 C의 BID를 비교하면 32768.2222.2222.2222 &lt; 32768.3333.3333.3333 이므로 스위치B의 E1포트가 데지그 네이티드 포트가 됩니다. 여기서는 Sender BID까지 비교했지만 여기서도 동일할 시 포트까지 비교하여 데지그 네이티드 포트를 선정합니다.</strong></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/dffed3dc-ce15-4586-b590-9bddd5a09095/image.png" alt=""></p>
<p>**최종적으로 스패닝트리를 구성하기 위한 네트워크구성은 위와 같습니다.</p>
<blockquote>
<p>스패닝트리에서는 포트의 상태에 따라 데이터를 송, 수신하고 연결을 재구성 합니다.**</p>
</blockquote>
<p>스패닝 트리 프로토콜 포트의 5가지 상태 변화</p>
<blockquote>
<p><strong>텍스트</strong>Disabled: 포트가 고장났거나, 포트를 shut down시킨 상황 (데이터 전송 불가, 맥 어드레스 Learning 불가, BPDU 송수신 불가)
Blocking: 스위치를 맨 처음 켜거나 Disabled시킨 포트를 다시 살린 상황, (데이터 전송 불가, 맥 어드레스 Learning 불가, BPDU 송수신 가능)
Listening: Blocking 상태의 스위치 포트가 루트 포트나 데지그네이티드 포트로 선정된 상황, 만약 경쟁에서 밀리면 Listening에서 Blocking으로 변경됨. (데이터 전송 불가, 맥 어드레스 Learning 불가, BPDU 송수신 가능)
Learning: Listening 상태의 스위치 포트가 포워딩 딜레이 default 시간인 15초를 유지하면, Learning 로 넘어가 맥 어드레스 Learning을 수행하고 맥 어드레스 테이블을 만듭니다. (데이터 전송 불가, 맥 어드레스 Learning 가능, BPDU 송수신 불가)
Forwarding: 스위치 포트가 러닝 상태에서 다른 상태로 넘어가지 않고 포워딩 딜레이 15초를 버티면 Forwarding으로 변경됨. (데이터 전송 가능, 맥 어드레스 Learning 가능, BPDU 송수신 불가)</p>
</blockquote>
<p>위의 상태변화를 그림으로 나타내면 아래와 같습니다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/d2c59eb5-76f5-4f8a-be04-beeef56eed20/image.png" alt=""></p>
<p>지금까지 알아본 내용을 토대로 네트워크에 스패닝 트리를 적용 
<img src="https://velog.velcdn.com/images/k_k_s__h/post/6fed7ce1-b0ac-4254-99cb-3cd79217f8e7/image.png" alt=""></p>
<p>위의 그림의 경우 데지그네이티드 포트로 선정되지 않은 세그먼트 3경우 연결이 끊어 지게 됩니다. 세그먼트3 Blocking 상태, 세그먼트 1,2는 Forwarding상태
<img src="https://velog.velcdn.com/images/k_k_s__h/post/fc635312-fa50-4aa4-9c82-c313d59c5e1d/image.png" alt=""></p>
<p>스위치간의 구성이 이루어지게 되면 Non 루트 브릿지 (스위치B, 스위치C)는 2초마다 들어오는 루트브릿지의 패킷을 받고 루트브릿지까지의 길이 살아있다는것을 알게 됩니다. 이때 만약 루트브릿지의 패킷이 지정된 시간 동안 받지 못한다면 중간경로에 이상이 있다고 판단하고 스위치간의 구성을 재편성하는 모드로 들어가게 됩니다.</p>
<p>세그먼트2를 끊으면 어떻게 될까요?</p>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/890d33e2-ceb9-494a-9e8d-e0521b7249b6/image.png" alt="">
2초마다 들어오는 패킷이 없기때문에 문제를 일으킬까요? 아닙니다. 스위치에는 Max Age(20초)가 있어 이때까지 패킷을 기다린 후 스패닝 트리 변경을 시작합니다. 스위치 C의 E0는 패킷받기를 포기하고 스위치B가 데지그네이티드 포트를 이용해 스위치 C에서 BPDU를 보내고 스위치C는 E1(Blocking상태)을 통해 BPDU를 받습니다. 스위치는 E1을 Root Port로 지정하고 리스닝, 러닝(15초 대기)을거쳐 포워딩상태(15초 대기)로 변경합니다. 변경된 스패닝 트리의 최종 그림은 아래와 같습니다.
<img src="https://velog.velcdn.com/images/k_k_s__h/post/35a3cb75-8f60-40aa-a379-161f28221460/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[스위치와 스패닝 트리]]></title>
            <link>https://velog.io/@k_k_s__h/%EC%8A%A4%EC%9C%84%EC%B9%98%EC%99%80-%EC%8A%A4%ED%8C%A8%EB%8B%9D-%ED%8A%B8%EB%A6%AC</link>
            <guid>https://velog.io/@k_k_s__h/%EC%8A%A4%EC%9C%84%EC%B9%98%EC%99%80-%EC%8A%A4%ED%8C%A8%EB%8B%9D-%ED%8A%B8%EB%A6%AC</guid>
            <pubDate>Sat, 04 Nov 2023 10:21:22 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>스패닝 트리 알고리즘의 개념을 공부 해보겠습니다 </p>
</blockquote>
<p>스패닝 트리 알고리즘이란? 
스위치나 브리지에서 발생하는 루핑 을 막아주기 위한 프로토콜입니다
즉 스위치나 브리지 구성에서 출발지부터 목적지까지의 경로가 2개 이상 존재할 때 1개의 경로만을 남겨두고 나머지는 모두 끊어두었다가,사용하던 경로에 문제가 발생하면 그때 끊어두었던 경로를 하나씩 살린다고 설명드렸습니다</p>
<p>그럼 STP 동작원리 를 공부 해보겠습니다</p>
<p>스패닝 트리 프로토콜을 이해하기 위해서는 먼저 2가지 개념을 이해하실 필요가 있습니다 </p>
<p>첫 번째 브리지 이고 , 두번째 Path Cost라는 겁니다</p>
<p>스패닝트리는 스위치나 브릿지에서 발생하는 루핑을 막아주기 위한 프로토콜입니다.</p>
<p>스패닝트리를 이해하기 위해서는 1. Bridge ID, 2. Path Cost에 대해서 알아야 합니다.</p>
<p>**브리지 ID 란 </p>
<blockquote>
<p>브리지나 스위치들이 통신 할 때 서로를 확인하기 위해 하나씩 가지고 있는 번호입니다 Bridge ID는 아래와 같은 규칙으로 구성되어 있습니다.**</p>
</blockquote>
<p>자, 그럼 브리지 ID는 어떻게 만들까 어떤 규칙 같은 것이 있습니다
<img src="https://velog.velcdn.com/images/k_k_s__h/post/0e3006a9-03c5-48b9-862b-def1ccc9d118/image.png" alt=""></p>
<p>브리지 ID는 16비트의 브리지 우선순위 와 48비트의 맥 어드레스로 만들어집니다 맨 앞에 Bridge Priority 와 48비트의 맥 어드레스로 만들어 집니다 맨 앞에 Bridge Priority가 오고 그 뒤에 먼저 MAC Address 가 오는 것이 바로 Bridge Id 입니다</p>
<p>먼저 앞쪽에 있는 브리지 우선순위 16비트로 만들어지기 때문에 올 수 있는 수는 0부터 2 -1 까지가 됩니다</p>
<p>따라서 Bridge Priority  에 올 수 있는 수는 0~65535 까지가 됩니다 그런데 Bridge Priority 는 디폴트로 그 중간에 해당하는 값인 32768을 사용합니다 즉 아무런 구성도 하지 않은 스위치나 브리지에서 Bridge Priority는 32768 입니다</p>
<p>Path Cost 란?</p>
<blockquote>
</blockquote>
<p>Path=길, Cost=비용 즉 ‘길을 갈때 드는 비용’ 로 각 스위치가 얼마나 빠른 링크로 연결되어있는지 알아내기 위한 값입니다.</p>
<p>ex) 두개의 스위치가 10Mbps로 연결되어있을때 (스패닝트리를 정의하는 표준화 기구 IEEE 802.1D 에서는 Cost 값을 계산할때 1,000Mbps를 두 장비 사이의 링크 대역폭으로 나눈 값을 사용)</p>
<p>1,000/10 = 100</p>
<p>따라서 Path Cost가 100이 됩니다.</p>
<p>Path Cost는 링크의 속도(대역폭)가 빠르면 빠를수록 더 작은 값이 됩니다.</p>
<blockquote>
<p>하지만 여기서 문제가 발생합니다. 더 빠른 링크의 속도가 나오게 되면 Path Cost를 소수점으로 나타내게 되는데요. IEEE에서는 이러한 현상을 방지하기 위해 각 속도마다 Path Cost 값을 정의 했습니다.</p>
</blockquote>
<blockquote>
<p>스패닝 트리를 갖는 네트워크에는 규칙이 있습니다.
네트워크당 하나의 루트 브리지(Root Bridge)를 갖는다.
루트 브릿지가 아닌 나머지 모든 브리지는(Non Root Bridge)는 무조건 하나의 루트포트(Root Port)를 갖는다.
세그먼트(Segment)당 하나의 데지그네이티드 포트(Designated Port)를 갖는다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/a0ff4895-28fc-4f1e-9a2e-7088f6623ecc/image.png" alt=""></p>
<blockquote>
<p>위에서 말한 규칙 외에도 세부적으로 스패닝 트리에서 루트브릿지, 루트포트, 데지그네이티드 포트를 결정하기 위한 규칙에 대해서 알아보도록 하겠습니다.</p>
</blockquote>
<p>누가 더 작은 Root BID 가졌는지?
누가 루트브리지까지 더 작은 Path Cost를 가졌는지?
누가 더 작은 BID(Sender BID)를 가졌는지?
누구의 포트 ID가 더 낮은지?</p>
<blockquote>
<p>서로 전달하기 위해 알아두어야 할것이 또! 있습니다. 바로 BPDU(Bridge Protocol Data Unit)인데요. BPDU는 Root BID, Root Path Cost, Sender BID, Port ID등이 실려 있습니다. 각 스위치(라우터도 마찬가지)는 BPDU를 통해 스패닝트리의 정보를 주고 받습니다. 위에 말한 4가지의 규칙은 어떤 BPDU가 가장 좋은 BPDU인가를 결정하는 기준이기도 합니다</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/44228630-0f38-4139-b764-515452fe8760/image.png" alt="">
루트 브릿지 선정이 끝나면 각 스위치에서 Root BID는 위와 같은 결과를 가집니다.</p>
<p>루트 포트 선정</p>
<p>루트포트는 루트브릿지에 가장 가까운 포트를 말합니다. 가장 가깝다는 기준은 무엇일까요? Path Cost가 가장 적게 드는 포트입니다.</p>
<blockquote>
<p>마지막으로 스패닝 트리 프로토콜에서 루트포트나 데지그네이티드 포트가 아닌 나머지 모든 포트는 다 막아버린다는 사살입니다 즉 루트포트와 데지그네이티드 포트를 뽑는 목적은 어떤 포트를 살릴지 결정합니다</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Algorithm Study ]]></title>
            <link>https://velog.io/@k_k_s__h/Algorithm-Study</link>
            <guid>https://velog.io/@k_k_s__h/Algorithm-Study</guid>
            <pubDate>Tue, 31 Oct 2023 17:15:06 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/k_k_s__h/post/db547c82-f8a1-42a5-999a-115c2b809126/image.png" alt=""></p>
<h3 id="반드시-필요한-프로그래밍-지식">반드시 필요한 프로그래밍 지식</h3>
<h3 id="if-else">[if else]</h3>
<p>int is Even(int a){
if(a % 2 == 0) return 1;
else return 0;
}</p>
<h3 id="for">[For]</h3>
<p>같은 처리를 몇 번 반복하는 것은 어떤 프로그램에서나 자주 사용 하고, For 반복문을 사용 합니다
int a(int n){
int sum =0;
for(int i =1; i&lt;n;i++{
sum + = i ;
}
return sum;
}
이 함수는 1부터n 까지의 합계를 리턴 이런 형태로 for 반복문을 작성할 수 있습니다</p>
<h3 id="배열">[배열]</h3>
<p>배열은 반복문과 함께 자주 사용합니다, 배열은 여러 개의 데이터를 한번에 관리할 때 사용 </p>
<p>int a(int[]array)
{
int ret=array[0];
int ret = array[0];
for 9int i =1; i&lt;array.length;i++)
{
if(ref&lt;array[i] ret = array[i];
}
return ret;
}</p>
<blockquote>
<p>문제:int 형의 매개변수 a,b 가 주어질 때 a+b를 리턴하세요
class:AplusBProblem
methood:public int calc(int a , int b)</p>
</blockquote>
<h2 id="java">JAVA</h2>
<p>class AplusBProblem
{
public int calc(int a, int b ){</p>
<p>return a+b;
}</p>
<p>}</p>
<h3 id="정렬">[정렬]</h3>
<p>정렬은 요소를 늘어놓고 적당한 순서도 바꾸는 것뿐입니다. 프로그래밍 언어에서 지원하는 표준 함수를 사용하면 편리함</p>
<h3 id="java-1">JAVA</h3>
<p>IMPORT JAVA.UTIL;</p>
<p>Arrays.sort(array);</p>
<p>[문자열 처리]</p>
<h3 id="java-2">JAVA</h3>
<p><strong>String s. = &quot;abc&quot;;</strong>
//동일판정
<strong>if(s.equals(&quot;abc&quot;) System.out.println(&quot;equals&quot;);</strong>
//문자 하나 추출
<strong>char c = s.charAt(1);//&#39;b&#39;</strong>
//문자열 연결
<strong>s=&quot;def&quot;+s+&quot;ghi&quot;;//&quot;defabcghi&quot;</strong>
//문자열 잘라내기
<strong>s=s.substring(3,3);//&quot;abc&quot;</strong></p>
<p>[연관 배열]
순서대로 데이터를 관리할 때는 배열이 편리 
c++ 라면 map클래스 , java라면 HashMap클래스,클래스 등의 자료 구조가 연관 배열 배열은 인덱스라는 숫자로 요소를 지정하지만 연관 배열은 어떤 자료형을 사용해도 됨
IMPORT JAVA.UTIL;</p>
<p>void countString(String[]s)
{
Map&lt;String,Integer&gt;hm=new HashMap&lt;String,Integer&gt;();
for(int i=0; i &lt;s.length; i ++){
if(!hm.containsKey(s[i]))hm.put(s[i],0);
hm.put(s[i])+1);
}
for(String key :hm.keySet()){
System.out.println(key + &quot;&quot;+hm.get(key));
}
}
JAVA 에서는 HashMap이나 TreeMap을 사용합니다 이러한 클래스를 사용하려면 다음 코드를 입력합니다 
IMPORT JAVA.UTIL;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[IP 주소의 활용]]></title>
            <link>https://velog.io/@k_k_s__h/IP-%EC%A3%BC%EC%86%8C%EC%9D%98-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@k_k_s__h/IP-%EC%A3%BC%EC%86%8C%EC%9D%98-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Tue, 31 Oct 2023 17:06:47 GMT</pubDate>
            <description><![CDATA[<p>IP주소의 활용</p>
]]></description>
        </item>
    </channel>
</rss>