<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>lkhyun-0.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 11 Nov 2025 08:59:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>lkhyun-0.log</title>
            <url>https://velog.velcdn.com/images/lkhyun-0/profile/a18a9bee-5c5e-467c-baa3-8c7f6ca3747d/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. lkhyun-0.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/lkhyun-0" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[리눅스]]></title>
            <link>https://velog.io/@lkhyun-0/%EB%A6%AC%EB%88%85%EC%8A%A4-o3a859kv</link>
            <guid>https://velog.io/@lkhyun-0/%EB%A6%AC%EB%88%85%EC%8A%A4-o3a859kv</guid>
            <pubDate>Tue, 11 Nov 2025 08:59:15 GMT</pubDate>
            <description><![CDATA[<p>drwxr-xr-x</p>
<p>-rw-r--r--</p>
<p>리눅스 파일 디렉터리 권한 표시</p>
<p>총 10 자리 각각의 의미</p>
<p>1번째 : 파일 타입</p>
<ul>
<li>일반파일(-)</li>
<li>폴더 (d)</li>
<li>링크 (l) : 바로가기 파일 정도</li>
<li>블록 디바이스(b) : 하드디스크, usb 등 블록단위로 입출력?</li>
<li>문자 디바이스(c) : 키보드, 마우스, 터미널 등 문자 단위 입출력</li>
<li>파이프 (p) : 프로세스 간 통신용 특수 파일</li>
<li>소켓(s) : 네트워크 통신에 쓰이는 파일</li>
</ul>
<p>2~4 소유자권한 rwz
r : read 읽기권한
w : write 쓰기권한
x : exe 실행권한</p>
<ul>
<li>: 없음 해당 권한 없음</li>
</ul>
<p>5~7 번째 의미 그룹권한</p>
<p>8~10 번째 : 기타 사용자 권한</p>
<hr>
<p>chmod
change mode 접근권한변경 명령어</p>
<p>chmod u(권한을 변경할 대상 소유자, 그룹, 기타사용자)+w(부여할 권한 읽기 쓰기 실행하기 rwx) note.txt (대상 디렉터리 파일명.확장자)</p>
<p>권한 대상 
u - 소유자
g - 그룹 사용자
o - 기타 사용자
a - 모두 all</p>
<hr>
<p>grep 명령어
특정 파일에서 지정한 문자열이나 정규표현식 등을 포함한(내가 찾고싶어하는) 행을 출력해주는 명령어</p>
<p>tail, ls 등 다양한 명령어와 조합하여 응용되는 경우가 많다</p>
<p>잘 다룰줄 알아야 하는 리눅스 명령어 중 하나</p>
<p>문자열로 찾기</p>
<pre><code>    grep [옵션][패턴][파일명]
    // 문자열 찾기
    grep &#39;찾을 문자(열)&#39; 파일명
    // 여러파일에서 같은 문자열 찾기
    grep &#39;찾을 문자(열)&#39; 파일명1 파일명2
    // 현재 디렉토리 내에 있는 모든 파일에서 문자열 찾기
    grep &#39;찾을 문자(열)&#39; *
    // 특정 확장자를 가진 파일에서 문자열 찾기
    grep &#39;찾을 문자(열)&#39; *.확장자(log,bat 등)
</code></pre><p>정규표현식으로 찾기</p>
<pre><code># 특정 파일에서 문자열이 포함된 행을 찾는다.
grep &#39;^[ab]&#39; 파일명 

# 특정 파일에서 a로 시작하는 모든 단어를 찾는다.
grep &#39;^a&#39; 파일명 

# 특정 파일에서 a로 시작하고 z로 끝나는 5자리 단어를 찾는다.
grep &#39;a...z&#39; 파일명 

# 특정 파일에서 a,b,c로 시작하는 단어를 모두 찾는다.
grep [a-c] 파일명

# 특정 파일에서 apple 또는 Apple로 시작하는 단어를 모두 찾는다.
grep [aA]pple 파일명 

# 특정 파일에서 a나 b로 시작되는 모든 행을 찾는다.
grep &#39;^[ab]&#39; 파일명 

# 특정 파일에서 apple로 시작되고 0나 9의 숫자로 끝나로 시작되는 모든 행을 찾는다.
grep &#39;apple&#39;[0-9] 파일명</code></pre><p>리눅스 너무 많으니 
서버 업로드/서버 재기동 할 때 자주쓰는 명령어 위주로 ~</p>
<p>grep 명령어 익히기</p>
<p>cd, ls, ls -l 기본 파일 명령어는 스킵</p>
<hr>
<p>ps -ef | grep 찾을문자열 |grep -v grep</p>
<ul>
<li>ps &gt; process status : 현재 실행중인 모든 프로세스의 목록을 보여준다</li>
<li>ef 는 옵션 e : 모든사용자(every) f : 자세한 (full-fomat) 정보표시(UID,PID,PPID등)</li>
</ul>
<p>*파이프 |
파이프는 앞의 출력 결과를 뒤 명령어의 입력으로 전달하는 기능.....</p>
<p>grep은 텍스트에서 특정 문자열을 포함한 줄 찾기 기능</p>
<p>합쳐보면
ps -ef | grep linux
-&gt; 실행중인 모든 프로세스 중에서 linux 가 포함된 줄만 출력한다.
라는 의미</p>
<p>| grep -v grep
-&gt; -v(invert 반전)</p>
<p>grep -v grep 
-&gt; grep  들어간 줄 빼고 출력
라는 의미</p>
<p>파이프는 연결의 의미 조건을 붙이는 정도?
실행중인 프로세스 상세출력 + 리눅스만 걸러서 출력 + grep 은 빼고 출력 
-&gt; 이런 의미</p>
<hr>
<p>nohup /home/user_mdw/MDServer/microsoft-jdk-17/bin/java -Dfile.encoding=UTF-8 -jar run.jar 1&gt; /dev/null 2&gt;&amp;1 &amp;</p>
<p>nohup : no hang up 세션이 끊어져도 종료되지 않도록 실행한다.
터미널을 닫거나, SSH가 끊겨도 종료되지 않도록 하는 명령어
-&gt; 터미널에 의존하지 않고 계속 실행해
라는 의미</p>
<p>/java : 실행할 명령어 전체</p>
<p>Dfile.encoding=UTF-8 : 
 -D : 자바 시스템 프로퍼티 지정옵션</p>
<ul>
<li>file.encoding=UTF-8 : 인코딩을 UTF-8로 지정하겠다 &gt; 자바프로그램이 한글과 같은 문자를 처리할 때 깨지지 않도록 설정해주는 것 </li>
</ul>
<p>-jar run.jar : run.jar 파일을 실행하라(스프링에서 컴파일 되어 있는 파일)</p>
<p>1&gt; /dev/null : 표준 출력을 버리는 리다이렉션?</p>
<p>1&gt; : 표준출력 이라는 의미(일반메시지)
/dev/null : 블랙홀? 아무곳에도 기록되지 않는다</p>
<p>2&gt;&amp;1 : 표준 출력과 표준에러 메시지를 합치겠다는 의미</p>
<h3 id="-백그라운드-실행">&amp; : 백그라운드 실행</h3>
<blockquote>
<p>명령을 실행하되 터미널을 점유하지 않는다
즉시 프롬프트로 돌아올 수 있다
즉 터미널 실행 후 터미널을 닫고 다른 작업을 할 수 있다는 의미!</p>
</blockquote>
<h3 id="nohup과--의-차이">nohup과 &amp; 의 차이</h3>
<blockquote>
<p>no hang up(끊지마!) : 터미널이 닫혀도 죽지 않는다.
&amp; : 백그라운드 실행을 통해 터미널을 점유하지 않는다.
둘다 계속 실행 이라는 점에서 공통점이 있지만 사용하는 이유와 동작 방식이 다르다.
nohup 은 터미널 종료(로그아웃) 후에도 유지
리눅스에서 프로세스는 부모프로세스(현재 터미널)에 종속되어 있음
그 터미널을 닫거나 SSH 접속을 끊으면 SIGHUP(hangup시그널)이 전달되어서 자식 프로세스도 모두 죽는다.
근데 nohup으로 실행을 하면 저 hangup시그널을 무시하기 떄문에 터미널이 닫혀도 프로세는 죽지 않는다
&amp; 지금의 터미널을 점유하지 않도록 한다. 
프로세스 실행 후 그 터미널을 바로 사용할 수 있다. 
단순히 이 명령을 백그라운드에서 실행해 라는 의미
이 터미널을 점유하지 않고 바로 다음 명령어 다음 프로세스를 실행할 수 있도록 한다.
둘중에 하나만 사용하면 ? 
nohup 만 사용 &gt; 터미널을 닫아도 실행되지만 실행 터미널을 점유하고 있는 상태
&amp;만 사용 &gt; 터미널을 점유하고 있지 않아서 다른 프로세스 등 사용할 수 있지만 터미널을 닫으면 프로세스는 종료
터미널 점유 &gt; 이득
터미널 종료해도 프로세스 죽지 않음
두가지 모두 가져가기 위해 nohup과 &amp;조합으로 사용
변형 명령어 
nohup java -jar run.jar &gt; app.log 2&gt;&amp;1 &amp; : 로그파일에 로그만 남긴다.
nohup java -jar run.jar 1&gt;/dev/null 2&gt;error.log &amp; : 에러로그 파일에 에러만 남긴다.</p>
</blockquote>
<p>su - root
현재 사용자에서 root 계정으로 전환하라
이후 비밀번호 입력해야함</p>
<p>systemctl status postgresql-17</p>
<ul>
<li>systemctl 리눅스의 서비스 관리 명령</li>
<li>status 상태 확인</li>
<li>postgresql-17 포스트그리 17버전</li>
<li><blockquote>
<p>포스트그리 17 버전의 현재 상태를 확인하라
출력 결과</p>
</blockquote>
</li>
<li>Active: active (running) 실행 중</li>
<li>Active: inactive (dead) 중지됨</li>
<li>failed 오류로 종료됨</li>
</ul>
<p>exit
root 계정에서 이전 사용자로 돌아간다</p>
<p>./stop</p>
<p>./ 현재 디렉터리 라는 뜻 ~</p>
<p>정리하고 추가하기</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[C# 함수]]></title>
            <link>https://velog.io/@lkhyun-0/C-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@lkhyun-0/C-%ED%95%A8%EC%88%98</guid>
            <pubDate>Mon, 10 Nov 2025 07:34:17 GMT</pubDate>
            <description><![CDATA[<h3 id="1-함수-사용-이유">1. 함수 사용 이유</h3>
<ul>
<li>코드의 재사용을 위함
  중복사용, 재사용 가능성이 높을때 함수로 만들어 재활용하기 위함</li>
</ul>
<p>형태:</p>
<pre><code>int addsumnumber(int a, int b)
{
    int c = a+b;
    return c;
}

// int 반환타입
// addsumnumber 함수명
// int a, int b 매개변수(파라미터)
// return c; 반환값 반환값이 없을경우 void 로 선언해줘야함
![](https://velog.velcdn.com/images/lkhyun-0/post/4b07b808-8b9b-4513-87bd-898dadef3abf/image.png)

</code></pre><h3 id="2-객체지향프로그래밍">2. 객체지향프로그래밍</h3>
<p><em>그놈에 객지프;;</em></p>
<p>다형성, 캡슐화, 추상화, 상속 등의 특징이 있음</p>
<p>붕어빵 틀이나, 자동차 설계도, 클래스 등...</p>
<h3 id="2-1-클래스생성">2-1. 클래스생성</h3>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/3c92ac38-d8bf-40d4-924e-d8d09da534cc/image.png" alt=""></p>
<h3 id="2-2-캡슐화">2-2. 캡슐화</h3>
<ul>
<li>캡슐화의 목적은 데이터 은닉에 있다.
민감한 데이터를 private로 감추어서 public의 setter또는 getter메소드로만 private로 감춘 데이터에 접근하거나, 변경 할 수 있다.
따라서 이러한private변수에 read-only(읽기전용) 또는 write-onlty(변경만 가능)한 선택접 접근을 제어할 수 있게된다.
public보다 보안성이 증가되며 멤버변수와 함수를 더 좋게 제어 할 수 있게된다.</li>
</ul>
<h3 id="2-3-상속">2-3. 상속</h3>
<ul>
<li>기존 클래스(부모)의 기능을 새로운 클래스(자식)가 물려받아 사용하는 것
목적은 부모코드의 재사용과 자식기능의 확장에 있다.</li>
</ul>
<pre><code>class Animal
{
    public virtual void Sound()
    {
        Console.WriteLine(&quot;어떤 소리든 냅니다.&quot;);
    }
}

class Dog : Animal
{
    public override void Sound()
    {
        Console.WriteLine(&quot;멍멍!&quot;);
    }
}

class Cat : Animal
{
    public override void Sound()
    {
        Console.WriteLine(&quot;야옹~&quot;);
    }
}
</code></pre><p>Animal 클래스 &gt; 부모
Dog Cat 클래스 &gt; 자식</p>
<p>Dog Cat 클래스는 Animal 클래스에 접근할 수 있음
&#39;private 접근제어 변수 제외&#39;</p>
<p>상속 키워드 정리</p>
<p>: 상속선언 = class 자식 : 부모
base = 부모클래스 접근
virtual = 부모가 오버라이딩 허용
override = 자식이 부모의 메서드 재정의 
sealed =  더이상 상속할 수 없도록 막는다.
abstract = 상속 전용 추상 클래스 정의</p>
<p>이제 콘솔프로그램으로 뭐라도 만들어보기</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[C# 기초(1)]]></title>
            <link>https://velog.io/@lkhyun-0/C-%EA%B8%B0%EC%B4%881</link>
            <guid>https://velog.io/@lkhyun-0/C-%EA%B8%B0%EC%B4%881</guid>
            <pubDate>Mon, 10 Nov 2025 07:06:31 GMT</pubDate>
            <description><![CDATA[<p>Tool : Visual Studio 
콘솔앱 만들기 </p>
<p>새로운 언어를 익혀볼까 공부시작</p>
<hr>
<p>실행용 프로젝트 생성</p>
<pre><code>using System;//System네임스페이스사용.
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1//네임스페이스선언.
//공간 선언을 통해 중복되는 이름을 피할 수 있다. EX)ConsoleApp1.Apple클래스 ConsoleApp2.Apple클래스
{
    //class는 하나의 객체를 표현한다. 
    //Ex)자동차(class car)가있으면 자동차의 구성요소(맴버변수)와 행동적인요소(method)를 가질 수 있다.
    class Car
    {
        private string handle = &quot;AMODEL&quot;;

        public void carRun()
        {
            Console.WriteLine(&quot;자동차를 움직인다.&quot;);
        }
    }

    //class Program은 C#에서 프로그램의 가장 첫번째 실행되는 Main메소드를 포함하는 용도로 주로 사용한다.
    class Program
    {
        //프로그램의 주시작점.
        static void Main(string[] args)
        {
            //System네임스페이스의 Console클래스의 WriteLine메소드 호출
            System.Console.WriteLine(&quot;Syste을 이용한 호출&quot;);
            Console.WriteLine(&quot;Hello World!&quot;);
        }
    }
}</code></pre><hr>
<h3 id="1-데이터-타입">1. 데이터 타입</h3>
<p>C# 의 데이터 타입은 크게 4가지 
정수
sbyte 부호 있는 8비트 정수
byte 부호 없는 8비트 정수
short 부호 있는 16비트 정수
ushort 부호 없는 16비트 정수
int 부호 있는 32비트 정수
uint 부호 없는 32비트 정수
long 부호 있는 64비트 정수
ulong 부호 없는 64비트 정수</p>
<p>실수 정확한 수의 표현 x 근사치를 표현한다.
float 32바이트
double 64바이트
decimal 128바이트
문자(열) 
char 유니코드 16비트(2바이트)
string 유니코드 16비트 조합(1,073,741,823 문자의 나열)</p>
<p>불린
bool 8비트(1바이트) 참거짓</p>
<hr>
<h3 id="2-변수">2. 변수</h3>
<h3 id="2-1-변수-선언할-때">2-1. 변수 선언할 때</h3>
<p>&quot;데이터타입&quot; &quot;변수명&quot;;
int a;</p>
<h3 id="2-2-변수-선언-및-초기화">2-2. 변수 선언 및 초기화</h3>
<p>int a = 10;
string b = &quot;문자열&quot;;</p>
<h3 id="2-3-변수-선언--형변환-예제-코드-작성해보기">2-3. 변수 선언 + 형변환 예제 코드 작성해보기</h3>
<pre><code>static void main(string[] args){
// 형변환 하기 string - &gt;int
    string a = &quot;532&quot;;
    int b = 0;

    b =Int32.Parse(a);
    //기본 int 는 Int32사용
    //Int64 저장할 수 있는 숫자범위의 차이

    Console.WriteLine(&quot;문자를 숫자로 출력&quot; + b);
    // 기대 값 523
    //현재 b는 숫자 523

// 형변환 하기 int - &gt; string
    string c = &quot;&quot;;
    c = b.ToString();

    Console.WriteLine(&quot;숫자를 문자로 출력&quot; + c)
    // 기대값 &quot;523&quot;
   }</code></pre><hr>
<h3 id="3-연산자">3. 연산자</h3>
<h3 id="3-1-연산자-종류1-피연산자를-abc의-변수로-가정">3-1. 연산자 종류(1) 피연산자를 a,b,c의 변수로 가정</h3>
<ul>
<li>단항 : 연산에 필요한 항이 한개 <blockquote>
<p>   +a 단항 플러스 : a 값을 그대로 변화 없음
-a 단항마이너스 : a 부호를 반대로
++a 전위증가 : 출력 또는 사용 전에 a값을 +1 하고 사용
a++ 후위증가 : 출력 또는 사용 후 a값을 +1한다
--a 전위감소 : 출력 또는 사용 전 a값을 -1 하고 사용
a-- 후위감소 : 출력 또는 사용 후 a값을 -1한다.
!a 논리부정 : a가 참인 경우 거짓으로 거짓인 경우 참으로 논리를 반전한다.</p>
</blockquote>
</li>
</ul>
<ul>
<li>이항 : 연산에 필요한 항이 두개<blockquote>
<p>a=b-c : 대입
a 에 b-c 값을 넣는다.
a-=b : 빼기 대입 a=a-b
a+=b : 더하기 대입 a=a+b
a<em>=b : 곱하기 대입 a=a</em>b</p>
</blockquote>
</li>
</ul>
<ul>
<li>삼항 : 조건식에 따라 A또는 B 중 하나의 결과 반환
피연산자를 a,b,c의 변수로 가정<blockquote>
<p>조건식 ? A : B</p>
</blockquote>
</li>
</ul>
<h3 id="3-2-연산자-예제코드">3-2. 연산자 예제코드</h3>
<pre><code>static void Main(string[] args) {
    int num1 = 1;
    int num2 = 4;

    Console.WriteLine(num1++); //1
    Console.WriteLine(num1); //2

    Console.WriteLine(++num1);//3
    Console.WriteLine(num1);//3

    int num3 = num1 &gt; num2 ? 3:5;
                //3        4    5
    Console.WriteLine(&quot;num3은?&quot;+num3);
    //num3은? 5

}</code></pre><h3 id="3-2-산술연산자">3-2. 산술연산자</h3>
<p>사칙연산 </p>
<blockquote>
<p>+-*/%</p>
</blockquote>
<h3 id="3-3-복합-대입-연산자">3-3. 복합 대입 연산자</h3>
<blockquote>
<p>+=
-=
*=
/=
%=
|=
^=
&lt;&lt;= &gt;&gt;=</p>
</blockquote>
<pre><code>ex)
 int num1 =1;

 num1+=3;
 // num1 = num1+3 과 같은 의미 4
 num1-=2;
 //num1=num1-2 오 ㅏ같은 의미 2</code></pre><h3 id="3-4-비교-연산자--값의-비교">3-4. 비교 연산자 : 값의 비교</h3>
<p>==, !=, &gt;, &lt;, &gt;=, &lt;=</p>
<h3 id="3-5-조건-연산자-조건식의-결과가-참-거짓에-따라-결과를-준다">3-5. 조건 연산자 조건식의 결과가 참 거짓에 따라 결과를 준다.</h3>
<pre><code> int a = 5;

 a = (a&gt;10) ? 1 : 0 ;
     //조건식    참:거짓;
 a =0;

  // 보통 숫자 1은 true 0은 false -1은 오류상태로 많이들 사용한다고 한다.</code></pre><h3 id="3-6-논리-연산자">3-6. 논리 연산자</h3>
<p>! not : 논리부정 - 참은 거짓으로 거짓은 참으로 출력
&amp;&amp; and : 논리곱 - 둘다참이어야 참 출력
|| or : 논리합 - 둘중에 하나라도 참이면 참 출력</p>
<h3 id="3-7-비트-연산자--비트연산에서는-10진수가-아닌-이진수로-계산">3-7. 비트 연산자 : 비트연산에서는 10진수가 아닌 이진수로 계산</h3>
<blockquote>
<p>&amp; 두 비트 모두 1인 경우메나 1
| 두 비트중 하나면 1이여도 1
^ 두 비트중 하나만 1이고 다른 하나가 0일 때 계산결과1, 1^1 또는 0^0은 계산결과 0
*비트연산자는 그림에 효과를 주거나 전자 또는 전기 시스템의 회로구성이 논리적 AND 게이트 등 하드웨어적인 요소가 논리연산으로 계산하기 때문에 시스템 프로그램 개발등 특수 환경에 주로 사용한다고 한다..
&lt;&lt; 왼쪽 시프트 : 비트를 왼쪽으로 이동시키고 오른쪽 빈칸은 0으로 채운다
&quot;&gt;&gt;&quot; 오른쪽 시프트 : 비트를 오른쪽으로 이동시키고 왼쪽 빈칸은 부호비트로 채운다 </p>
</blockquote>
<p>어려우니까 
예시... 그래도 어려워요,,</p>
<pre><code>왼쪽 시프트
int a = 3;      // 3 = 0000 0011 (2진수)
int b = a &lt;&lt; 1; // 왼쪽으로 1비트 이동 → 0000 0110
Console.WriteLine(b); // 출력: 6

//간단 설명 왼쪽으로 한칸이동 = 2배
//왼쪽으로 n칸 이동 = 2ⁿ 배

오른쪽 시프트
int a = 8;      // 8 = 0000 1000
int b = a &gt;&gt; 1; // 오른쪽으로 1비트 이동 → 0000 0100
Console.WriteLine(b); // 출력: 4

// 오른쪽으로 한칸 이동하면 = 1/2배
// 오른쪽으로 n칸 이동 = 2ⁿ으로 나눈 것과 같음</code></pre><hr>
<h3 id="4-배열">4. 배열</h3>
<p>동일한 타입의 값이 많을 때 많은 변수를 선언하는 것 대신 많은 변수를 하나의 변수에 저장하고 사용 가능하게 해준다.</p>
<h3 id="4-1-기본-배열---문자-숫자-배열">4-1. 기본 배열 - 문자 숫자 배열</h3>
<pre><code>    string[] cars = new string[10];
    string[] food = {&quot;사과&quot;, &quot;바나나&quot;, &quot;파인애플&quot;, &quot;수박&quot;};

    int[] myNum = {10, 20, 30, 40, 50};

    // 배열 접근방법
    food[0];    // &quot;사과&quot;
    food[1];    // &quot;바나나&quot;
    food[3];    // &quot;수박&quot;

    myNum[0];    // 10
    myNum[2];    // 30
    myNum[3];    // 40

    // 배열요소 변경하기 

    food[0] = &quot;귤&quot;;
    //출력하면 ?
    food[0];    // &quot;귤&quot;

    // 배열의 길이 얻기
    food.Lenght; //4</code></pre><h3 id="4-2-2차원-배열">4-2. 2차원 배열</h3>
<pre><code>
    // 2차원 배열 선언과 초기화
    // 2차원 배열은 열의 크기가 동인해야한다.
    // 오류 예제
   // int[,] myNums = {{1,2,3,4},{5,6,7}}; 0번째는 4, 1번째는 3 &gt;&gt; 이렇게 되면 오류
   // int[,] myNums = {{1,2,3,4},{5,6,7,8}}; 0번쨰와 1번째를 4자리로 맞춰줘야함

   int[,] myNums = {{1,2,3,4},{5,6,7,8}};

   int var = myNums[0,2];


 // 배열을 두고 보자면
 //                0열        1열        2열        3열
 // 0행        1        2         3*         4
 // 1행         5        6         7         8

 // 0행의 2열 = 3 이라는 뜻 !!!!!
 // 대부분 1차원 배열 사용 2차원은 가끔 3차원은 종종 4차원은 거의 사용을 안한다고 한다..
 // 나같아도 안해;;</code></pre><h3 id="4-3-가변배열">4-3. 가변배열</h3>
<pre><code>    //추가할 1차원배열크기 필수로입력.
            int[][] myNums2 = new int[4][]; //4행짜리 가변배열 생성
            myNums2[0] = new int[2] { 1, 2};
            myNums2[1] = new int[3] { 3, 4, 5 };
            myNums2[2] = new int[4] { 6, 7, 8, 9 };
            myNums2[3] = new int[2];

            //int var2 = myNums2[0,1];
            int var2 = myNums2[0][1];
            Console.WriteLine(&quot;var2는?&quot; + var2);

            //시각화 하자면 
            //myNums2 ─┬──&gt; [1, 2]
              //         ├──&gt; [3, 4, 5]
              //         ├──&gt; [6, 7, 8, 9]
              //         └──&gt; [0, 0]

            myNums2[0][1];
            // 이건 0행의 1열 값을 의미 
            =2&#39;
</code></pre><hr>
<h3 id="5-조건문">5. 조건문</h3>
<p>연산자를 활용하여 비교를 통해 참 또는 거짓의 값을 얻을 수 있다.
참 거짓을 통해 코드를 선택적으로 실행할 수 있음</p>
<h3 id="5-1-조건문의-종류">5-1. 조건문의 종류</h3>
<p>if문(if, else, else if), switch 문</p>
<p>if 문은 거의 자바와 동일</p>
<h3 id="5-2-switch-문-많은-코드중-하나를-선택해서-실행하게-됨">5-2. switch 문 많은 코드중 하나를 선택해서 실행하게 됨</h3>
<pre><code>static void Main(string[] args) {

    // 기본구조
    switch (변수) // 비교할 값
    {
      case 값1:
          // 실행 코드1
          break; // 일치하면 브레이크로 스위치 조건문에서 빠져나온다.

      case 값2:
          // 실행 코드2
          break;

      default:
          // 어떤 case에도 해당하지 않을 때 실행
          break;
  }

  // 예시
  int day = 3;

  switch (day)
  {
      case 1:
          Console.WriteLine(&quot;월요일&quot;);
          break;
      case 2:
          Console.WriteLine(&quot;화요일&quot;);
          break;
      case 3:
          Console.WriteLine(&quot;수요일&quot;);
          break; //&gt;&gt; 여기서 나오겠지
      case 4:
          Console.WriteLine(&quot;목요일&quot;);
          break;
      default:
          Console.WriteLine(&quot;주말&quot;);
          break;
  }
}</code></pre><hr>
<h3 id="6-반복문">6. 반복문</h3>
<h3 id="6-1-종류">6-1. 종류</h3>
<ul>
<li>while, do&amp;while, for, for&amp;each</li>
</ul>
<h3 id="6-2-while">6-2. while</h3>
<ul>
<li>조건이 참일 경우 중괄호 안의 코드가 무한히 실행<pre><code>while(조건) {
실행식
}</code></pre>예제<pre><code>  static void Main(string[]args){
      int i =0;
      while(i&lt;6) {
          Console.WriteLine(i);
          i++;
          // 기대값 
          //0
          //1
          //2
          //3
          //4
          //5
      }
  }</code></pre><h3 id="6-3-dowhile">6-3. do&amp;while</h3>
</li>
<li>무조건 한번은 실행한다. 2번재 실행부터 조건체크<pre><code></code></pre></li>
</ul>
<p>do{} // 이건 무조건 실행
while(조건) {</p>
<p>}// 체크 후 실행</p>
<pre><code>### 6-3. for
- 몇번이나 반복할지 정확하게 알고 있는 경우 사용</code></pre><p>  for(int i=0; i&lt;6; i++){
  Console.WriteLine(i);
  }
  for(for문 코드라인 진입과 동시에 한번만 실행될 코드;반복할 조건;중괄호안의 코드가 실행되고 매번 실행될 코드){
  반복할 코드
  }</p>
<pre><code>### 6-3. for&amp;each

- 배열, ArrayList에 저장된 모든 값을 사용하여 반복한다.
</code></pre><p>static void Main(string[] args){</p>
<pre><code>string[] strs = {&quot;바나나&quot;, &quot;사과&quot;, &quot;파인애플&quot;, &quot;망고&quot;};

  foreach(string i in strs) {
  //문자열 i 안에 strs 를 하나씩 담겠다
      Console.WriteLine(i); // 하나씩 출력하겠다
      // 바나나
      // 사과
     // 파인애플
     // 망고
  }
}</code></pre><pre><code>
---

### 7. 예외처리
try catch finally 등 자바와 유사

---

다음 포스팅에 함수 작성하기</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[RANDOM.VALUE/STRING 랜덤 구하기 - 문자 랜덤]]></title>
            <link>https://velog.io/@lkhyun-0/RANDOM.VALUESTRING-%EB%9E%9C%EB%8D%A4-%EA%B5%AC%ED%95%98%EA%B8%B0-%EB%AC%B8%EC%9E%90-%EB%9E%9C%EB%8D%A4</link>
            <guid>https://velog.io/@lkhyun-0/RANDOM.VALUESTRING-%EB%9E%9C%EB%8D%A4-%EA%B5%AC%ED%95%98%EA%B8%B0-%EB%AC%B8%EC%9E%90-%EB%9E%9C%EB%8D%A4</guid>
            <pubDate>Fri, 13 Jun 2025 04:15:40 GMT</pubDate>
            <description><![CDATA[<p>[10] RANDOM.VALUE/STRING 랜덤 구하기</p>
<p>--VALUE
SELECT CEIL(DBMS_RANDOM.VALUE(1000, 10000)) rand 
FROM DUAL
CONNECT BY LEVEL &lt;= 10;</p>
<p>--STRING
WITH TT AS(
    SELECT DBMS_RANDOM.STRING(&#39;U&#39;,  10) rand FROM DUAL  -- 대문자   VSBSMPRSWU
    UNION ALL
    SELECT DBMS_RANDOM.STRING(&#39;L&#39;,  10) rand  FROM DUAL -- 소문자   myhhapzbgg
    UNION ALL
    SELECT DBMS_RANDOM.STRING(&#39;A&#39;,  10) rand  FROM DUAL -- 영문자   SdObPAOuSw
    UNION ALL
    SELECT DBMS_RANDOM.STRING(&#39;X&#39;,  10) rand FROM DUAL  -- 영숫자   ZYRA0IV2WH
    UNION ALL
    SELECT DBMS_RANDOM.STRING(&#39;P&#39;,  10) rand FROM DUAL  -- 문자혼합 Yf^I,p&quot;JR; 
)
SELECT * FROM TT;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[테이블 정의서 쿼리]]></title>
            <link>https://velog.io/@lkhyun-0/%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%A0%95%EC%9D%98%EC%84%9C-%EC%BF%BC%EB%A6%AC</link>
            <guid>https://velog.io/@lkhyun-0/%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%A0%95%EC%9D%98%EC%84%9C-%EC%BF%BC%EB%A6%AC</guid>
            <pubDate>Fri, 13 Jun 2025 04:14:41 GMT</pubDate>
            <description><![CDATA[<p>[8] DB 테이블 정의서 쿼리</p>
<p>SELECT TT.* ,
       C1.DATA_DEFAULT
  FROM (SELECT A1.TABLE_COMMENTS ,
               A1.TABLE_NAME ,
               A1.COLUMN_ID ,
               A1.COLUMN_NAME ,
               A1.COLUMN_COMMENTS ,
               (
                                       CASE
                                         WHEN B1.CONSTRAINT_TYPE = &#39;P&#39; THEN &#39;Y&#39;
                                       END) PK_FLAG ,
               NVL(A1.NULL_FLAG, &#39;N&#39;) AS NULL_FLAG ,
               A1.DATA_TYPE|| (
                                       CASE A1.DATA_TYPE
                                         WHEN &#39;NUMBER&#39; THEN &#39;(&#39;||TO_CHAR(A1.DATA_LENGTH)||&#39;,&#39;||TO_CHAR(A1.DATA_PRECISION)||&#39;)&#39;
                                         WHEN &#39;DATE&#39; THEN &#39; &#39;
                                         ELSE &#39;(&#39;||A1.DATA_LENGTH||&#39;)&#39;
                                       END) DATA_TYPE
          FROM (SELECT B.COMMENTS TABLE_COMMENTS ,
                       A.TABLE_NAME TABLE_NAME ,
                       C.COMMENTS COLUMN_COMMENTS ,
                       A.COLUMN_NAME COLUMN_NAME ,
                       (
                                                       CASE A.NULLABLE
                                                         WHEN &#39;Y&#39; THEN &#39;Y&#39;
                                                       END) NULL_FLAG ,
                       A.DATA_TYPE DATA_TYPE ,
                       A.DATA_LENGTH ,
                       A.COLUMN_ID AS COLUMN_ID ,
                       A.DATA_PRECISION
                  FROM USER_TAB_COLUMNS A ,
                       USER_TAB_COMMENTS B ,
                       USER_COL_COMMENTS C
                 WHERE (A.TABLE_NAME = B.TABLE_NAME)
                   AND (A.TABLE_NAME = C.TABLE_NAME
                           AND A.COLUMN_NAME = C.COLUMN_NAME)
                   AND B.TABLE_TYPE = &#39;TABLE&#39; ) A1 ,
               (SELECT A.TABLE_NAME ,
                       A.COLUMN_NAME ,
                       B.CONSTRAINT_TYPE
                  FROM USER_CONS_COLUMNS A,
                       USER_CONSTRAINTS B
                 WHERE (A.CONSTRAINT_NAME = B.CONSTRAINT_NAME)
                   AND B.CONSTRAINT_TYPE IN (&#39;P&#39;,
                               &#39;R&#39;) ) B1
         WHERE A1.TABLE_NAME = B1.TABLE_NAME(+)
           AND A1.COLUMN_NAME = B1.COLUMN_NAME(+) 
           --AND A1.TABLE_NAME LIKE &#39;AC_BANK%&#39;
           ) TT ,</p>
<pre><code>   COLS C1</code></pre><p> WHERE TT.TABLE_NAME = C1.TABLE_NAME
   AND TT.COLUMN_NAME = C1.COLUMN_NAME
 ORDER BY TT.TABLE_NAME, TT.COLUMN_ID;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PL/SQL 문법]]></title>
            <link>https://velog.io/@lkhyun-0/PLSQL-%EB%AC%B8%EB%B2%95</link>
            <guid>https://velog.io/@lkhyun-0/PLSQL-%EB%AC%B8%EB%B2%95</guid>
            <pubDate>Fri, 13 Jun 2025 04:14:11 GMT</pubDate>
            <description><![CDATA[<p>[7] PL/SQL 문법</p>
<p>-- @@ if 문
if       <del>~</del> then            --시작
begin                --블록 가능
end;</p>
<p>elsif     ~~  then        -- else의 &#39;e&#39;가 빠짐
end if;</p>
<p>-- @@ case 문</p>
<p>case when <del>~ then
case when ~</del> then
else
end</p>
<p>end case;   --이건 쿼리문 외 조건 사용시..? </p>
<p>-- @@ while 문</p>
<p>while 조건 loop</p>
<p>end loop;</p>
<p>-- @@ loop 문</p>
<p>loop ~~
EXIT WHEN v_cnt &gt; 110;   --루프문 빠져나가기 조건.
end loop;</p>
<p>-- @@ for 문 </p>
<p>ex) for i in reverse 1..10 loop</p>
<p>-- i는 자동으로 생성되는 변수 이므로 선언할 필요 없음
-- reverse 옵션을 사용할 경우 1씩 감소, reverse를 사용해도 최소값, 최대값의 순서로 적용.
-- in 안에 꼭 최소값..최대값 형태로 사용해야 되는 것은 아님</p>
<p>for ~~ loop</p>
<p>end loop;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머지문 중요 !!**]]></title>
            <link>https://velog.io/@lkhyun-0/%EB%A8%B8%EC%A7%80%EB%AC%B8-%EC%A4%91%EC%9A%94</link>
            <guid>https://velog.io/@lkhyun-0/%EB%A8%B8%EC%A7%80%EB%AC%B8-%EC%A4%91%EC%9A%94</guid>
            <pubDate>Fri, 13 Jun 2025 04:13:28 GMT</pubDate>
            <description><![CDATA[<p>[6] MERGE INTO - 한번에 INSERT, UPDATE</p>
<ul>
<li>특정 조건의 데이터가 존재하면 해당값 update, 없는 경우 새로 데이터를 insert 해줌.</li>
</ul>
<pre><code>MERGE INTO table_name alias                          -- UPDATE, INSERT, DELETE 할 테이블
         USING (table | view | subquery) alias           -- 비교대상 테이블 (하나의 테이블만 이용한다면 DUAL 활용)
            ON (join condition)                          -- WHERE절에 조건 쓰듯이

          WHEN MATCHED THEN                              -- ON 이하의 조건에 해당하는 데이터가 있는 경우 
               UPDATE SET col1 = val1[, ...]            -- UPDATE 실행
               DELETE WHERE (m.deptno = 20)             -- DELETE 실행

          WHEN NOT MATCHED THEN                          -- ON 이하의 조건에 해당하는 데이터가 없는 경우
               INSERT (column lists) VALUES (values);   -- INSERT 실행</code></pre><p>!주의 : 오라클 9버전 이상에서 사용가능, 
        10G부터 DELETE문 사용가능,
        트리거 발생안함,
        조건절 사용 컬럼은 업데이트 불가.(조건은 키만)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[삭제문]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%82%AD%EC%A0%9C%EB%AC%B8</link>
            <guid>https://velog.io/@lkhyun-0/%EC%82%AD%EC%A0%9C%EB%AC%B8</guid>
            <pubDate>Fri, 13 Jun 2025 04:13:08 GMT</pubDate>
            <description><![CDATA[<p>[5] DELETE 문</p>
<p>1) DELETE 삭제</p>
<pre><code>DELETE FROM USERS WHERE EMAIL=&#39;GUEST3&#39;;</code></pre><ul>
<li>데이터만 삭제 되며 테이블 용량은 줄어 들지 않는다. 또한 삭제후 잘못 삭제한 것을 되돌릴 수 있음</li>
<li>TABLE이나 CLUSTER에 행이 많으면 행이 삭제될 때마다 많은 SYSTEM 자원이 소모 됨</li>
<li>Commit이전에는 Rollback이 가능</li>
<li>롤백정보를 기록 하므로 Truncate에 비해서 느림</li>
<li>전체 또는 일부만 삭제 가능</li>
<li>삭제 행수를 반환</li>
<li>데이터를 모두 Delete해도 사용했던 Storage는 Release 처리 되지 않음</li>
</ul>
<p>2) TRUNCATE 삭제 (테이블의 모든 로우를 제거 Truncate Table)</p>
<pre><code>TRUNCATE TABLE USERS;</code></pre><ul>
<li>테이블을 최초 생성된 초기상태로 만듬</li>
<li>용량이 줄어들고, 인덱스 등도 모두 삭제</li>
<li>Rollback 불가능</li>
<li>무조건 전체 삭제만 가능</li>
<li>삭제 행수를 반환 하지 않음</li>
<li>테이블이 사용했던 Storage중 최초 테이블 생성시 할당된 Storage만 남기고 Release 처리</li>
</ul>
<p>3) Drop table (테이블 구조 자체 제거)</p>
<ul>
<li>기존 테이블의 존재를 제한다. (테이블의 정의 자체를 완전히 삭제)</li>
<li>Rollback 불가능</li>
<li>테이블이 사용했던 Storage는 모두 Release 처리</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[수정문]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%88%98%EC%A0%95%EB%AC%B8</link>
            <guid>https://velog.io/@lkhyun-0/%EC%88%98%EC%A0%95%EB%AC%B8</guid>
            <pubDate>Fri, 13 Jun 2025 04:12:42 GMT</pubDate>
            <description><![CDATA[<p>[4] UPDATE 문</p>
<p>1) 기본 업데이트</p>
<pre><code>UPDATE 테이블 SET 필드 = &#39;&#39; WHERE 조건</code></pre><p>2) 다중 업데이트</p>
<pre><code>UPDATE table_name
SET (column_name, column_name, ...) = (value, value, ... ) 
WHERE 조건</code></pre><p>3) SET 절 서브쿼리 업데이트</p>
<pre><code>ex) BONUS 테이블에서 10번 사원의 직책을 PM으로 변경하고, BONUS 를 평균에서 10%인상한 값으로 변경하시오.

UPDATE BONUS_TB
      SET emp_job = &#39;PM’, bonus = (SELECT 1.1 * AVG(bonus) FROM bonuses)
      WHERE eno = 10;</code></pre><p>4) WHERE 절 서브쿼리 업데이트</p>
<pre><code>ex) ORDERS 테이블에서 MYLEE 사원이 받은 주문량을 50개씩 줄이시오.

UPDATE orders
SET qty = qty - 50
WHERE eno IN (SELECT eno
                FROM employee
               WHERE ename =&#39;MYLEE&#39;);</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[오라클 삽입문]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%82%BD%EC%9E%85%EB%AC%B8</link>
            <guid>https://velog.io/@lkhyun-0/%EC%98%A4%EB%9D%BC%ED%81%B4-%EC%82%BD%EC%9E%85%EB%AC%B8</guid>
            <pubDate>Fri, 13 Jun 2025 04:12:22 GMT</pubDate>
            <description><![CDATA[<p>[3] INSERT 문</p>
<p>1) 기본 삽입.</p>
<pre><code>INSERT INTO USERS(USERSNO,EMAIL,PWD,NAME,PNO) VALUES (USER_SEQ.NEXTVAL,&#39;GUEST2&#39;,&#39;1234&#39;,&#39;손님2&#39;,&#39;11111111111&#39;);</code></pre><p>2-1) 원본은 있고 대상 테이블 새로 생성.</p>
<pre><code>SELECT * INTO A_COPY FROM A</code></pre><p>2-2) 특정컬럼만 가져와서 테이블 새로 생성.</p>
<pre><code>SELECT * INTO A_COPY FROM ( SELECT COL1,COL2,COL3.... FROM A ) AS TEMP_TABLE</code></pre><p>3-1) 원본과 대상테이블이 모두 있을 경우</p>
<pre><code>INSERT INTO B SELECT * FROM A</code></pre><p>3-2) 만약 컬럼수가 적을 경우</p>
<pre><code>INSERT INTO B SELECT COL1,COL2,COL3 FROM A</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[오라클 명령어 관련 - 1]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%AA%85%EB%A0%B9%EC%96%B4-%EA%B4%80%EB%A0%A8-1</link>
            <guid>https://velog.io/@lkhyun-0/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%AA%85%EB%A0%B9%EC%96%B4-%EA%B4%80%EB%A0%A8-1</guid>
            <pubDate>Fri, 13 Jun 2025 04:11:53 GMT</pubDate>
            <description><![CDATA[<p>[2] @@ select 기본함수 정리</p>
<ul>
<li><p>||        -- mssql + 와 같음 문자열 붙여쓰기</p>
</li>
<li><p>IS NULL    --널값 체크</p>
</li>
<li><p>SELECT ENAME,COMM,NVL(COMM,0) FROM EMP;//NVL : NULL 값 처리</p>
</li>
</ul>
<p>1) MSSQL에서 LEFT, RIGHT 비교..</p>
<ul>
<li><p>SELECT SUBSTR(&#39;123456789&#39;,-4) AS SHOW FROM DUAL;   -- LEFT 4자리</p>
</li>
<li><p>SELECT SUBSTR(&#39;123456789&#39;,1,3) AS SHOW FROM DUAL;  -- RIGHT 3자리</p>
</li>
<li><p>SELECT SUBSTR(&#39;123456789&#39;, 3) AS SHOW FROM DUAL;   --  3째 자리부터 문자 편집.</p>
</li>
</ul>
<ul>
<li><p>SELECT MIN(FIELD1), MIN(FIELD2) KEEP(DENSE_RANK FIRST ORDER BY FIELD1) AS FIELD2 FROM TABLE1 --최소값 및 행의 다른 필드값</p>
</li>
<li><p>SELECT MAX(FIELD1), MAX(FIELD2) KEEP(DENSE_RANK LAST  ORDER BY FIELD1) AS FIELD2 FROM TABLE11--최대값 및 행의 다른 필드값</p>
</li>
</ul>
<p>2) 순위 반환 함수.</p>
<ul>
<li><p>RANK() OVER (ORDER BY salary DESC)       : 중복 순위 다음은 해당 개수만큼 건너뛰고 반환.</p>
</li>
<li><p>DENSE_RANK() OVER (ORDER BY salary DESC) : 중복 순위 상관없이 순차적으로 반환.</p>
</li>
<li><p>ROW_NUMBER() OVER (ORDER BY salary DESC) : 중복과 관계 없이 무조건 순서대로 반환.</p>
</li>
</ul>
<p>3) top 1  (MSSQL) 오라클 검색</p>
<ul>
<li><p>SELECT MIN(ename) KEEP(DENSE_RANK FIRST ORDER BY hirday desc) from IM_EMP         --일반</p>
</li>
<li><p>SELECT * FROM (SELECT * FROM IM_EMP ORDER BY HIRDAY DESC) WHERE ROWNUM &lt;= 10;     --서브쿼리</p>
</li>
</ul>
<p>4) like 검색</p>
<ul>
<li><p>WHERE ename LIKE &#39;%A%&#39;;    --단일 검색</p>
</li>
<li><p>WHERE REGEXP_LIKE(TEXT, &#39;Word1|Word2|Word3&#39;)  -- 다중 검색 &#39;단어|단어|단어&#39; </p>
</li>
</ul>
<p>5) UNION </p>
<pre><code>SELECT deptno FROM dept
 (UNION, UNION ALL, INTERSECT, MINUS)
SELECT deptno FROM emp;</code></pre><ul>
<li><p>UNION         합집합(중복 제거)</p>
</li>
<li><p>UNOIN ALL     합집합(중복 포함)</p>
</li>
<li><p>INTERSECT    교집합(두 행중 공통된 행만 반환)</p>
</li>
<li><p>MINUS        차집합(두번째 테이블에 존재하지 않는 첫번째 테이블의 행을 반환)</p>
</li>
</ul>
<p>6) 정렬  ORDER BY </p>
<ul>
<li>ASC는 default값이다.(작은 값부터..)    // 내림차순 : DESC;</li>
<li>값이 Null일 때 가장 큰 값이 된다. (ASC일 때...맨 뒤에 붙는다.) </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오라클 데이터타입]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%83%80%EC%9E%85</link>
            <guid>https://velog.io/@lkhyun-0/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%83%80%EC%9E%85</guid>
            <pubDate>Fri, 13 Jun 2025 04:11:19 GMT</pubDate>
            <description><![CDATA[<p>1) 데이터 타입 </p>
<ul>
<li><p>CHAR        고정길이 문자 DATA를 4000BYTE 저장</p>
</li>
<li><p>VARCHAR2    가변길이 문자 DATA를 4000BYTE 저장  </p>
</li>
<li><p>NUMBER    가변길이 숫자값을 -38 ~ +38자리수를 저장, (자릿수/2)+1 ,number(1)는 (1/2)+1 = 1.5 반올림해서 2byte가 됨.</p>
</li>
<li><p>DATE        날짜를 저장</p>
</li>
<li><p>TIMESTAMP    년, 월, 일, 시, 분, 초, mili-second까지 보여준다.</p>
</li>
<li><p>CLOB:     BINARY DATA를 4GB 저장, 문자 대형 객체(Character). Oracle Server는 CLOB과 VARCHAR2 사이에 암시적 변환을 수행.</p>
</li>
<li><p>BLOB:        이진 대형 객체 (Binary). 이미지, 동영상, MP3 등</p>
</li>
<li><p>NCLOB:     내셔널 문자 대형 객체 (National). 오라클에서 정의되는 National Character Set을 따르는 문자.</p>
</li>
<li><p>BFILE:     OS에 저장되는 이진 파일의 이름과 위치를 저장. 읽기 전용 모드로만 액세스 가능.</p>
</li>
</ul>
<p>2) 데이터 타입 변환.</p>
<ul>
<li><p>TO_CHAR(char_field)   숫자나 날짜를 문자열로 변환</p>
</li>
<li><p>TO_DATE(char_field)   문자를 날짜로 변환</p>
</li>
<li><p>TO_NUMBER(char_field) 문자를 숫자로 변환</p>
</li>
<li><p>날짜-&gt; 문자</p>
<p>  SELECT SYSDATE FROM DUAL    --실제 기본 날짜 가져오기
  SELECT TO_CHAR(SYSDATE, &#39;YYYYMMDDHH24MISS&#39;) SYS_DATE24 FROM DUAL    -- 24시로
  SELECT TO_CHAR(SYSDATE, &#39;YYYYMMDDHH12MISS&#39;) SYS_DATE12 FROM DUAL    -- 12시간</p>
</li>
<li><p>문자-&gt; 날짜</p>
<p>  SELECT TO_DATE(&#39;20180401&#39;,&#39;YYYY-MM-DD&#39;) FROM DUAL;</p>
</li>
</ul>
<p>3) DUAL 테이블????</p>
<pre><code>dual테이블은 산술 연산이나 가상 컬럼 등, 값을 한번만 출력하고 싶을 때. </code></pre><p>4) 문자열 byte 크기 조회 쿼리..</p>
<pre><code>select vsize(&#39;길은 내 앞에 놓여있다. :: &#39;) as byteSize from dual;</code></pre><p>5) DB 별 용량 체크 쿼리</p>
<pre><code>SELECT OWNER,SEGMENT_NAME,SEGMENT_TYPE,SUM(BYTES)/1024/1024 AS MB
      FROM DBA_SEGMENTS
     WHERE OWNER = &#39;DH&#39;      --DB
       AND SEGMENT_TYPE = &#39;TABLE&#39;  
     GROUP BY OWNER,SEGMENT_NAME,SEGMENT_TYPE
     ORDER BY MB DESC</code></pre><p>6) 오라클 버전 확인 쿼리</p>
<pre><code>SELECT * FROM v$version WHERE banner LIKE &#39;Oracle%&#39;;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[로컬스토리지란]]></title>
            <link>https://velog.io/@lkhyun-0/%EB%A1%9C%EC%BB%AC%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EB%9E%80</link>
            <guid>https://velog.io/@lkhyun-0/%EB%A1%9C%EC%BB%AC%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80%EB%9E%80</guid>
            <pubDate>Fri, 13 Jun 2025 04:03:40 GMT</pubDate>
            <description><![CDATA[<p><strong><em>로컬 스토리지란</em></strong> </p>
<ul>
<li>만료기간이 존재하지 않으며 페이지를 변경하거나 브라우저를 닫아도 반 영구적으로 유지되는 저장소를 말한다 </li>
<li>사용자가 삭제하지 않는 이상 영구적 저장</li>
<li>이 저장소는 브라우저,도메인 별로 관리가 되기 때문에 크롬 엣지 웨일 파이어폭스 사파리 등 같은 페이지라도 다르게 저장 할 수 있음 </li>
<li>브라우저별로 관리하나 저장 공간은 거의 동일 Internet Explorer 11 (구형) 만 10MB를 저장하고 나머지는 5MB로 동일함 </li>
</ul>
<hr>
<p><strong><em>로컬스토리지 메서드</em></strong></p>
<ol>
<li>setItem(key, value)    키(key)와 값(value)을 기반으로 저장</li>
<li>getItem(key)        (key) 값을 기반으로 값(value)을 불러옴</li>
<li>key(index)            스(index) 값을 기반으로 값(value)을 불러옴</li>
<li>removeItem(key)        (key) 값을 기반으로 해당 로컬 스토리지를 제거</li>
<li>clear()            스토리지들을 초기화</li>
<li>length            스토리지에 저장된 데이터 개수를 반환</li>
</ol>
<hr>
<p><strong>* 특징 *</strong>
key, value는 항상 문자열(string) 다른 타입으로 저장을 하고 싶다면
json으로 변환필요함.</p>
<hr>
<p><strong><em>예시</em></strong>
// 객체 저장
var user = { id: 123, name: &quot;홍길동&quot; };    // json형태 객체 생성 및 데이터 입력
localStorage.setItem(&quot;user&quot;, JSON.stringify(user));    // 로컬스토리지에 user 라는 이름의 키,user의 값을 json 으로 저장하겠다 ~</p>
<p>// 객체 읽기
var data = JSON.parse(localStorage.getItem(&quot;user&quot;));    // 로컬스토리지에 담긴 user를 꺼내서 json형태로 data에 담는다
console.log(data.name); // data 안에 있는 이름이라는 키의 값을 꺼내겠다 ~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[정처기 3과목]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%A0%95%EC%B2%98%EA%B8%B0-3%EA%B3%BC%EB%AA%A9</link>
            <guid>https://velog.io/@lkhyun-0/%EC%A0%95%EC%B2%98%EA%B8%B0-3%EA%B3%BC%EB%AA%A9</guid>
            <pubDate>Sat, 26 Apr 2025 03:12:26 GMT</pubDate>
            <description><![CDATA[<p>키 + 정규화
데이터베이스 
key : 
슈퍼키
후보키
기본키
대체키
외래키</p>
<p>기본키 + 대체키 = 후보키 전체가 나온다 </p>
<p>무결성 = db에 저장된 값과 현실세계의 값이 일치한다는 정황을 의미
개체 
도메인
참조 **
사용자정의</p>
<p>관계 대수
관계해석</p>
<p>정규화 - 이상현상</p>
<p>1정규화 - 도메인의 중복 다중값 제거 (도메인이 원자값)
    학생 테이블에 수강과목 컬럼에 모든 수강과목이 들어가있는 경우 
        +-------------+
학생명   |수학,과학,영어| 
        +-------------+
        +---+
학생명   |수학|
        +---+
        +---+
학생명   |과학|
        +---+
        +---+
학생명  |영어|
        +---+
2정규화 - 한개의 테이블의 기본키가 2개인 상황 </p>
<p>정규화 알기전에 
완전함수 종속 
부분함수 종속
결정자함수 종속 
이행함수 종속 먼저 알기 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바스크립트 예상면접질문]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%98%88%EC%83%81%EB%A9%B4%EC%A0%91%EC%A7%88%EB%AC%B8</link>
            <guid>https://velog.io/@lkhyun-0/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%98%88%EC%83%81%EB%A9%B4%EC%A0%91%EC%A7%88%EB%AC%B8</guid>
            <pubDate>Sun, 16 Mar 2025 07:18:52 GMT</pubDate>
            <description><![CDATA[<p>I. 기초 면접 질문
자바스크립트 언어가 다른 언어와 다른 특징을 3가지 서술하세요.
변수에 대해 설명하고 let, const의 차이점을 서술하세요.
호이스팅 개념에 대해 간략하게 서술하세요.
클로저 개념에 대해 서술하세요.
==과 ===의 차이점을 서술하세요.
자바스크립트의 비동기 처리 방법에 대해 말씀해주세요.
프로토타입에 대해 서술하세요.
this 키워드의 작동 방식에 대해 서술하고 this의 적용 범위에 대해 말씀해 주세요.
스코프에 대해 설명하세요.
콜백지옥에 빠지지 않기 위해 어떻게 해야 하는지 서술하세요.
자바스크립트에서의 엄격모드가 하는 역할을 서술하세요.
심볼 타입에 대해 서술하세요.
웹 워커와 서비스 워커의 장점과 단점에 대해 말해주세요.
데코레이터 패턴에 대해 서술하세요.
var 변수 타입을 지양해야 하는 이유를 말해주세요.
동기와 비동기에 대해 말해주세요.
이벤트 루프에 대해 설명하세요.</p>
<p>II. 답변</p>
<ol>
<li>먼저 동적 타입 시스템을 가지고 있습니다. 이에 따라 number 값이라도 string 타입의 변수에 할당할 수 있습니다. 다음으로 프로토타입 기반의 상속 체계를 제공합니다. 클래스 방식보다 간편하고 유연한 코드를 작성하도록 돕습니다. 마지막으로 비동기 프로그래밍을 지원합니다. ES6의 async/await를 통해 간편하게 작성할 수 있습니다.</li>
</ol>
<ol start="2">
<li>변수는 값을 저장하고 불러오기 위한 요소입니다. let과 const의 차이점은 변수 재할당 여부에 있습니다. let은 재할당이 가능하고 const는 불가능합니다.</li>
</ol>
<ol start="3">
<li>호이스팅은 변수나 함수가 스코프의 상당으로 끌어올려지는 현상을 의미합니다. 즉, 어느 범위에서든 접근이 가능합니다.</li>
</ol>
<ol start="4">
<li>클로저는 내부에 있는 함수가 외부 함수의 컨텍스트에 접근할 수 있는 것을 뜻합니다. 함수가 선언될 때 만들어지며 함수나 변수의 접근 범위를 제한하고 코드를 모듈화 하여 궁극적으로는 메모리 누수를 방지하는 데에도 도움이 됩니다.</li>
</ol>
<ol start="5">
<li>==는 두 값이 동등한 지를 뜻합니다. &quot;1&quot; == 1 은 참이 됩니다. ===는 두 값이 일치한 지를 뜻합니다. &quot;1&quot; === 1는 거짓이 되고 1 === 1은 참이 됩니다. ===는 타입체크를 한다는 점에서 보안 유지에 도움이 됩니다.</li>
</ol>
<ol start="6">
<li>여러 가지 방법이 있지만 대표적으로 프로미스와 async/await가 주로 쓰입니다. </li>
</ol>
<ol start="7">
<li>프로토타입은 상속을 구현하는데 중요한 개념입니다. 모든 객체는 프로토타입을 가지고 있는데, 이 경우 객체 간 상속을 간단하게 구현할 수 있습니다.</li>
</ol>
<ol start="8">
<li>this는 현재 실행 중인 코드에서 객체를 불러오는 데 사용됩니다. 실행 컨텍스트에 따라 동적으로 결정되고, 함수가 어떻게 호출되는지에 따라 달라집니다. 일반적으로 this는 전역 객체를 가르키지만, .call(), .bind() 을 통해 this를 명시적으로 지정할 수 있습니다.</li>
</ol>
<ol start="9">
<li>스코프는 변수와 함수의 유효 범위를 나타냅니다. 한 함수에서 다른 함수의 변수를 참조하지 못하게 방지하는 역할을 합니다.</li>
</ol>
<ol start="10">
<li>비동기 처리 방식을 사용하면 됩니다.</li>
</ol>
<ol start="11">
<li>엄격모드는 의도하지 않은 전역변수를 선언하는 걸 방지하고, eval 함수의 제한을 통해 취약점 공격을 사전에 방어합니다. 엄격모드는 함수의 첫 줄 또는 코드의 첫 줄에 &quot;use strict&quot;;으로 선언할 수 있습니다.</li>
</ol>
<ol start="12">
<li>ES6에서 추가된 개념으로 유일한 식별자와 불변성을 위해 사용됩니다. 객체 속성의 키 값으로 주로 사용됩니다.</li>
</ol>
<ol start="13">
<li>웹 워커와 서비스 워커 모드 백그라운드 동작을 위해 사용됩니다. 오프라인 상태에서도 애플리케이션을 동작할 수 있다는 장점과, 별도의 메시징을 사용하기에 추가적인 코드가 필요하고 보안상 위험이 존재한다는 단점이 존재합니다.</li>
</ol>
<ol start="14">
<li>데코레이터는 추상 클래스와 인터페이스입니다. 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있어 유연한 개발이 가능하도록 합니다.</li>
</ol>
<ol start="15">
<li>var는 전역변수를 오염하고, 재할당이 가능해서 스코프 지정이 불가합니다.</li>
</ol>
<ol start="16">
<li>동기는 말 그대로 순차적으로 실행됩니다. 마찬가지로 비동기는 한 작업이 완료되기를 기다리지 않고 바로 다른 작업을 실행합니다. 주로 파일 읽기나 시간이 오래 걸리는 작업에 쓰입니다.</li>
</ol>
<ol start="17">
<li>이벤트 루프는 자바스크립트의 처리 모델을 구현하는 핵심 구조입니다. 먼저 호출 스택이 비어있는지 확인하고, 비어있으면 이벤트 큐에서 작업을 가져와 호출스택에 추가합니다. 이후 호출 스택이 비워있지 않으면 호출 스택이 비워질 때까지 대기합니다. </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[자동배포]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%9E%90%EB%8F%99%EB%B0%B0%ED%8F%AC</link>
            <guid>https://velog.io/@lkhyun-0/%EC%9E%90%EB%8F%99%EB%B0%B0%ED%8F%AC</guid>
            <pubDate>Mon, 24 Feb 2025 05:18:25 GMT</pubDate>
            <description><![CDATA[<ol>
<li>소스코드 준비</li>
</ol>
<p>iam계정으로 로그인
<img src="https://velog.velcdn.com/images/lkhyun-0/post/b7179bf8-46f5-4260-9c06-c7c8173fa217/image.png" alt=""></p>
<p>깃헙 토큰 새로 받기
<img src="https://velog.velcdn.com/images/lkhyun-0/post/4485a9b9-bb8e-4c1d-bc53-670631ea73a6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/57aeb14a-1448-49f0-87b6-c739e694f50f/image.png" alt=""></p>
<p>인스턴스연결 후 새로 로그인하기
<img src="https://velog.velcdn.com/images/lkhyun-0/post/6943513e-1d9e-4219-8575-c1197d81860f/image.png" alt=""></p>
<p>깃 연결 다시하기</p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/8c392bb0-a664-4d8c-b952-90b949adcd44/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 2일차 11:00]]></title>
            <link>https://velog.io/@lkhyun-0/AWS-2%EC%9D%BC%EC%B0%A8-1100</link>
            <guid>https://velog.io/@lkhyun-0/AWS-2%EC%9D%BC%EC%B0%A8-1100</guid>
            <pubDate>Wed, 19 Feb 2025 02:58:52 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/e74b2fd7-ba6f-428e-8689-55e12dd78257/image.png" alt="">
<img src="https://velog.velcdn.com/images/lkhyun-0/post/23cd5be6-d17d-4447-807c-2a4e81bf572b/image.png" alt="">
<img src="https://velog.velcdn.com/images/lkhyun-0/post/0f448980-c737-424d-b883-03799d822f2b/image.png" alt=""></p>
<p>디렉토리 생성하고 &gt; 그 디렉토리로 들어가기 &gt; 내가 배포할 코드가 있는 깃 레포 계정 클론하기</p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/e299ccce-a8ce-44a5-9fdd-c5a4e64cceae/image.png" alt="">
클론 되었으면 yml파일 있는 곳 까지 타고 들어가기 
시크릿 yml 없으니 vim으로 생성하고 시크릿 키 작성해주기 
vim application-secret.yml
a 누르고
편집기 안에 시크릿 키 작성</p>
<pre><code>custom:
  secret:
    key: &quot;ABC&quot;
  site:
    name: &quot;my site secret&quot;</code></pre><p>esc :wq! 엔터 나오기
나와서 리스트 확인 하고 프로젝트 경로까지 나오기 cd .. cd .. 이렇게  &gt; 도커 빌드 하기 ! 하면 끝 !</p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/93d1e519-9cf9-4b4e-8f6c-4901756f4658/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 2일차 - 10:00]]></title>
            <link>https://velog.io/@lkhyun-0/AWS-2%EC%9D%BC%EC%B0%A8-1000</link>
            <guid>https://velog.io/@lkhyun-0/AWS-2%EC%9D%BC%EC%B0%A8-1000</guid>
            <pubDate>Wed, 19 Feb 2025 02:38:51 GMT</pubDate>
            <description><![CDATA[<p>2월 18일 기준 상태 
aws&gt; Ec2 컴퓨터 한대 빌렸고 그 안에 도커랑 깃이랑 mysql다운로드 받고 비밀번호 변경했음</p>
<p>redis 가 뭔데 ?? 
key value 메모리 데이터베이스 ?? -----------
레디스는 비번이 없음</p>
<hr>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/966d1afe-75d0-4dbf-8aee-8d0afe0a23c0/image.png" alt=""></p>
<p>입력할 ~ 내용 수업페이지에</p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/7525644c-db39-43b5-9497-8ea3474a97ff/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/547393ec-2843-46c6-ad5b-f9dab4a2c398/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/952f22e1-8cd9-4700-9932-3f9e03f07576/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/5c41cb8c-6796-4dd4-b837-772461562785/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/edf307b3-4474-4979-a25c-b037075ac288/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/d2488e7a-c681-49d8-8e80-ee24773eccde/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/b1e7034c-4888-4c96-803d-df04134ae7b7/image.png" alt="">
포워드 아이피는 도커기반 대역폭임</p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/7addeb19-0403-469c-aafc-8d91ef497a27/image.png" alt=""></p>
<p>에디트 클릭 &gt; ssl &gt; request a new ... 클릭하고 한개 빼고 다 켜주기 save.
<img src="https://velog.velcdn.com/images/lkhyun-0/post/92e3c6aa-9a4c-4dd0-96f3-cc7ea8f50a78/image.png" alt=""></p>
<p>도메인 클릭 
<img src="https://velog.velcdn.com/images/lkhyun-0/post/4569407d-cd95-4aa9-bcb4-ed86a094112c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/e0dfaf6e-47a3-4c21-ad4b-5596d03692d6/image.png" alt=""></p>
<p>여기까지 보면성공 !
<img src="https://velog.velcdn.com/images/lkhyun-0/post/7a7b225a-14ca-40f3-89c8-ae99da9256bc/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 추가 정리 필요 !!!!!!]]></title>
            <link>https://velog.io/@lkhyun-0/AWS-kc1ik0l8</link>
            <guid>https://velog.io/@lkhyun-0/AWS-kc1ik0l8</guid>
            <pubDate>Wed, 19 Feb 2025 01:05:30 GMT</pubDate>
            <description><![CDATA[<p>과거 : 
개발자가 서버컴(걍 컴퓨터임)을 샀음 1대에 100~1000만원 정도함 
한달 테스트용으로 사용할 건데 1000만원 쓰는거 너무 비효율적임</p>
<p>근데 aws 는 서버를 대여해줌</p>
<p>fly와 aws 의 차이는 
fly는 배포할 때의 체계가 잡혀있음 
aws는 커스터마이징이 자유롭고 어려움 </p>
<hr>
<p>일단 접속
<a href="https://aws.amazon.com/ko/free/?gclid=CjwKCAiA2cu9BhBhEiwAft6IxKHiyMww0dWx_XupIx26xKNtl2t_3OK1ZP6ntT0WWJ9apL0B8leJ6RoCuJ4QAvD_BwE&amp;trk=fa2d6ba3-df80-4d24-a453-bf30ad163af9&amp;sc_channel=ps&amp;ef_id=CjwKCAiA2cu9BhBhEiwAft6IxKHiyMww0dWx_XupIx26xKNtl2t_3OK1ZP6ntT0WWJ9apL0B8leJ6RoCuJ4QAvD_BwE:G:s&amp;s_kwcid=AL!4422!3!563761819834!e!!g!!aws!15286221779!129400439466&amp;all-free-tier.sort-by=item.additionalFields.SortRank&amp;all-free-tier.sort-order=asc&amp;awsf.Free%20Tier%20Types=*all&amp;awsf.Free%20Tier%20Categories=*all">아마존웹서비스</a>
<img src="https://velog.velcdn.com/images/lkhyun-0/post/3ba9e75e-1672-4e80-a708-80c17229036d/image.png" alt=""></p>
<p>로그인 후 콘솔창 확인 &gt; 모든 서비스 클릭 &gt; IAM 클릭
<img src="https://velog.velcdn.com/images/lkhyun-0/post/9ba242bf-6138-46fe-9f29-1bf779395b39/image.png" alt="">
IAM 대시보드 확인 &gt; 대시보드에 사용자 클릭 
<img src="https://velog.velcdn.com/images/lkhyun-0/post/29002eb9-54db-4449-87d8-ca974705ce3b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/a9ee2f1e-335a-4e56-a680-7497ffad20dc/image.png" alt=""></p>
<hr>
<p>aws는  여러 서비스의 조합</p>
<ul>
<li>IAM: 인증, 인가</li>
<li>EC2: 컴퓨터</li>
<li>VPC : 네트워크</li>
<li>S3</li>
<li>RDS</li>
</ul>
<hr>
<p>사용자 생성 클릭
<img src="https://velog.velcdn.com/images/lkhyun-0/post/1c7eec65-c2dd-473b-81f1-28fc6688c603/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/0de96e88-c12d-4769-98b6-ff91c2144228/image.png" alt="">
<img src="https://velog.velcdn.com/images/lkhyun-0/post/17f4a5cc-831b-4f7a-b119-27b5ce3f0ed6/image.png" alt=""></p>
<p>다 작성하고 다음 클릭</p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/1c3224b6-c7bc-42db-9b8c-889cab4403e7/image.png" alt=""></p>
<p>2번째 체크하고 다음클릭
<img src="https://velog.velcdn.com/images/lkhyun-0/post/59002c11-d904-4093-a313-a02b62f14b3a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/f5392210-0307-4965-bb38-d985d8d94a93/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/4fd48cfe-a170-4101-94a8-6d7746e273b2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/cefdaa29-03ae-4c5f-9659-7f1f796e4334/image.png" alt=""></p>
<p>계정별칭 생성하기 생성하는 이유 &gt; 보안에 도움이 된다
<img src="https://velog.velcdn.com/images/lkhyun-0/post/bde4a0cf-308f-4503-997d-d1707492c3de/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/c3ac0729-0e3d-4cb9-b719-dc0a870e809e/image.png" alt=""></p>
<hr>
<p>엑세스키 만들기
<img src="https://velog.velcdn.com/images/lkhyun-0/post/ab71dcd5-d457-4674-81d0-846553e38bc0/image.png" alt=""></p>
<hr>
<p>깃 설정 &gt; 토큰 발급
<img src="https://velog.velcdn.com/images/lkhyun-0/post/0e7dd63c-fa1c-4a0b-b60b-1063dd535588/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[카카오로그인 API명세]]></title>
            <link>https://velog.io/@lkhyun-0/%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A1%9C%EA%B7%B8%EC%9D%B8-API%EB%AA%85%EC%84%B8</link>
            <guid>https://velog.io/@lkhyun-0/%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A1%9C%EA%B7%B8%EC%9D%B8-API%EB%AA%85%EC%84%B8</guid>
            <pubDate>Mon, 17 Feb 2025 09:27:15 GMT</pubDate>
            <description><![CDATA[<h2 id="1-1-카카오-디벨로퍼스-접속-및-회원가입로그인하기">1-1. 카카오 디벨로퍼스 접속 및 회원가입/로그인하기</h2>
<p><a href="https://developers.kakao.com/">카카오디벨로퍼스 페이지 바로가기</a></p>
<h2 id="1-2-애플리케이션-추가하기">1-2. 애플리케이션 추가하기</h2>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/76c0c252-4e96-40af-b827-294f1cfbc3cc/image.png" alt=""></p>
<h3 id="해당-정보-입력하기">해당 정보 입력하기</h3>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/dff9134a-c275-40cb-b095-f960d23c07c0/image.png" alt=""></p>
<h2 id="1-3-플랫폼-등록하기--웹-클릭">1-3. 플랫폼 등록하기 &gt; 웹 클릭</h2>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/e44bf0aa-490f-420f-936c-ec2fc7b369bf/image.png" alt=""></p>
<h3 id="사이트-도메인-입력해주세요">사이트 도메인 입력해주세요</h3>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/34e817a0-ce9b-4007-a510-deccdd075e45/image.png" alt=""></p>
<h2 id="1-4-카카오-로그인-클릭--카카오-로그인-활성화하기">1-4. 카카오 로그인 클릭 &gt; 카카오 로그인 활성화하기</h2>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/5a674d13-ea25-4834-8032-d18ab8be292a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/e76cf242-fb82-455b-b8a7-b9eef1774d4d/image.png" alt=""></p>
<h2 id="1-5-리다이렉트-url-등록하기">1-5. 리다이렉트 URL 등록하기</h2>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/7b788153-638f-42ad-ae2e-0441258e9684/image.png" alt=""></p>
<h3 id="등록하기-클릭후-원하는-페이지-url-작성해주세요">등록하기 클릭후 원하는 페이지 url 작성해주세요</h3>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/e804cfce-9013-48ce-a28c-19235b03bcdd/image.png" alt=""></p>
<h2 id="1-6-동의항목-설정하기">1-6. 동의항목 설정하기</h2>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/229d2e98-7a71-41c0-a241-9a3e6257bed9/image.png" alt=""></p>
<h3 id="화면과-같이-동의항목-작성-">화면과 같이 동의항목 작성 !</h3>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/c7b5ed99-6e55-4444-bc46-683043d30a5d/image.png" alt="">
<img src="https://velog.velcdn.com/images/lkhyun-0/post/bbd76023-aedc-49d7-a7f8-c38736e8f06d/image.png" alt="">
<img src="https://velog.velcdn.com/images/lkhyun-0/post/815e65e1-02f2-42bb-91d6-ec0c60e6cc32/image.png" alt=""></p>
<h2 id="2-1-앱키-발급">2-1. 앱키 발급</h2>
<h3 id="restapi-키와-javascript키-복사">RESTAPI 키와 javaScript키 복사</h3>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/a0176989-e0ad-44b5-b353-bf937d3d9f43/image.png" alt=""></p>
<h2 id="2-2-시크릿키-발급--카카오로그인--보안-탭-접근">2-2. 시크릿키 발급 &gt; 카카오로그인 &gt; 보안 탭 접근</h2>
<p><img src="https://velog.velcdn.com/images/lkhyun-0/post/61fcb8cf-4ffb-45af-ba42-f7830b161bd8/image.png" alt=""></p>
<h3 id="시크릿키-저장하기">시크릿키 저장하기</h3>
<h2 id="3-프로젝트에-등록하기">3. 프로젝트에 등록하기</h2>
<h3 id="3-1-appilcation-dbyml파일에-추가">3-1. appilcation-DB.yml파일에 추가</h3>
<p>kakao:
  client-id: &quot;발급받은 RESTAPI 키값&quot;
  redirect-uri: &quot;등록하신 리다이렉트 url주소&quot;
  client-secret: &quot;발급받은 시크릿키값&quot;
  token-url: &quot;<a href="https://kauth.kakao.com/oauth/token&quot;">https://kauth.kakao.com/oauth/token&quot;</a> 
  user-info-url: &quot;<a href="https://kapi.kakao.com/v2/user/me&quot;">https://kapi.kakao.com/v2/user/me&quot;</a></p>
<h3 id="3-2-자바스크립트-api키-등록하기">3-2. 자바스크립트 API키 등록하기</h3>
<p>프로젝트 경로 : java/resources/templates/user/signIn.html
해당파일에 
<img src="https://velog.velcdn.com/images/lkhyun-0/post/8d3d50e8-a5ae-49fa-b568-8322effb18ba/image.png" alt=""></p>
<pre><code>    &lt;script&gt;
        // ✅ 여기에 JavaScript 키를 입력
        Kakao.init(&quot;발급받은 자바스크립트 키값&quot;);
    &lt;/script&gt;
</code></pre>]]></description>
        </item>
    </channel>
</rss>