<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>life-architecture.velog</title>
        <link>https://velog.io/</link>
        <description>글을 쓰는 개발자</description>
        <lastBuildDate>Thu, 25 Apr 2024 13:05:22 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>life-architecture.velog</title>
            <url>https://velog.velcdn.com/images/dev-0eum/profile/aa82d6b1-f186-4707-897f-b76147148e29/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. life-architecture.velog. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev-0eum" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[정보보호병 24년 2회차 - (3)]]></title>
            <link>https://velog.io/@dev-0eum/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B3%91-24%EB%85%84-2%ED%9A%8C%EC%B0%A8-3</link>
            <guid>https://velog.io/@dev-0eum/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B3%91-24%EB%85%84-2%ED%9A%8C%EC%B0%A8-3</guid>
            <pubDate>Thu, 25 Apr 2024 13:05:22 GMT</pubDate>
            <description><![CDATA[<h2 id="종합-점수">종합 점수</h2>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/dccc5254-aa33-41e6-9ccb-1187bc323379/image.png" alt=""></p>
<p>20번 &gt;&gt; 11번</p>
<p>1차에선 기능사 + 컴공2년 수료로 후순위었다.
하지만 개인적인 생각으론 필기 시험을 잘 보았기에 점수가 꽤나 올랐다고 생각한다.</p>
<p>필자는 이전 포스팅에서도 말했다시피, 1차 합격 발표가 나기도 전부터 약 한 달 간 정보보안기사 공부를 시작했다.
이후에 게시할 포스팅에서도 말하겠지만 실제 필기 시험과 크게 연관된 내용은 몇개 없었다.</p>
<p>다만 배경지식이 늘었기에 잘 유추할 수 있었던 것 같다.
때문에 보안 쪽 지식이 없는 희망자는 최대한 빨리 공부하는 것을 추천한다.</p>
<hr>
<h2 id="꿈-이야기">꿈 이야기</h2>
<p>자다깨다를 반복해서 3번의 꿈을 꾸었는데, 전부 떨어지는 꿈이어서 불안했다.
-&gt; 꿈은 현실과 반대라고 했던가 붙었다.</p>
<hr>
<h2 id="면접-당일-tip">면접 당일 Tip</h2>
<h3 id="주의사항-시간">주의사항: 시간</h3>
<p>다른 블로그에서 흔히 볼 수 있듯이 병무청에 약 2시간정도 일찍 오는 것을 추천한다.
2층에서 필기시험 (20분) + 3층에서 면접이 진행된다.</p>
<p>이때 면접 순서는 선착순으로 진행되는데, 인원 당 약 7~10분 정도 소요된다.
그렇다면 면접 응시번호가 10번이어도 약 1시간 뒤에 면접을 보게된다.
(* 다른 블로그에서 본 바와는 다르게 &quot;한 면접실&quot;에서 기술, 인성 면접이 시행된다.)</p>
<p>1번 &gt;&gt; 13시 50분 면접실 입장
2번 &gt;&gt; 14시 입장
...
10번 &gt;&gt; 15시 입장</p>
<blockquote>
<p>즉, 순번이 밀려날수록 대기 시간이 길어진다는 것이다.</p>
</blockquote>
<p>필자는 수도권에서 ktx를 타고 오느라 약 11시 30분에 도착했다.
그 결과...
<img src="https://velog.velcdn.com/images/dev-0eum/post/ad0d7fa8-f291-46f8-8d86-27579b101c7f/image.jpeg" alt="">
생각보다 대기시간이 길어지면 긴장도 줄어들지만, 동시에 너무 지친다.
미리 가서 뽑아두고 식사를 하거나 면접 준비를 하는 것이 좋을 듯하다.</p>
<blockquote>
<p>때문에 필자는 11시에 도착하여 번호를 뽑는 것을 추천한다.
개인적인 생각으론 5~10번 정도가 가장 좋은 것 같다.</p>
</blockquote>
<hr>
<h3 id="주의사항-장소">주의사항: 장소</h3>
<p>필자는 멀리서 온 이유도 있지만, 한 번에 면접 장소를 찾지 못해서 순번이 밀린 것 같다.
11시 ~ 11시반 경에 가장 많은 지원자들이 순번표를 뽑으러 온다.
(한 순간에 대기시간이 30여분...이 증가한다)</p>
<p>요점은 (응시 장소는 마다 다를 수 있으니 유의할 것.)</p>
<blockquote>
<p><em><strong>대전충남지방병무청</strong></em> 이 아닌 <em><strong>병역판정검사장</strong></em> 으로 들어가야한다.
그리고 <em><strong>모병면접장</strong></em> 이라고 쓰여있는 <em><strong>안쪽 골목</strong></em> 으로 들어간다.
<em><strong>2층</strong></em> 에 책상이 있는 공실이 있을텐데 안에 번호표 뽑는 기기가 있다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/fe6634c4-a7c0-42d7-afa0-67434e2c01bd/image.jpeg" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/83943888-1653-4678-a62d-1e302f915df9/image.jpeg" alt=""></p>
<hr>
<h2 id="필기-시험">필기 시험</h2>
<p>필자가 정보보안기사에서 공부한 내용이 <em>직접적으로</em> 도움된 것은 약 4개이다.
하지만 공부함으로써 다른 문제들도 유추하여 맞출 수 있었다.</p>
<p>다음은 시험에서 나온 요소 및 필자가 선택한 답안이다.</p>
<ul>
<li>DRM -&gt; 괄호 안에 약어가 설명되어 있었음</li>
<li>RDP -&gt; 프로토콜을 고르는 문제 -&gt; 유일하게 P(rotocol)로 끝남</li>
<li>IDM -&gt; 괄호 안에 약어가 설명되어 있었음</li>
<li>Oauth -&gt; 모바일 관련 인증 방식 -&gt; 가장 낯익은 선지</li>
<li>오버플로 권장함수</li>
<li>웹 방화벽 형태(종류)</li>
<li>Windows 비인가자 통제 - 윈도우 디펜더?</li>
<li>SSO</li>
<li>랜섬웨어 아닌 프로그램</li>
<li>보안 기법 (XSS, CSRF 등)</li>
</ul>
<hr>
<h2 id="면접-질문">면접 질문</h2>
<p>(착석 후 소개)
00지부 0번 XXX입니다.</p>
<h3 id="q1">Q1</h3>
<h4 id="지원하게된-동기는">지원하게된 동기는?</h4>
<p>연초에 앱웹 배포하다가 디도스 이슈로 공부했습니다. 
그러다가 보안에 관심 갖게 되었고, 선배의 추천으로 알게되었으며, 내가 아는 지식으로 군에 기여하고자 지원했습니다.</p>
<h3 id="q2">Q2</h3>
<h4 id="ids-ips-차이점은">Ids ips 차이점은?</h4>
<p>외부로 부터의 침입을 탐지한다는 점은 같고, 이후 즉각 대처를 하는지의 유무에 따라 나뉩니다.</p>
<h3 id="q3">Q3</h3>
<h4 id="그-선배는-여기가-어떻다고-얘기하던가">그 선배는 여기가 어떻다고 얘기하던가?</h4>
<p>추천해준 선배는 여길 복무하지 않았으나, 저에게 맞는 직무라고 추천해줬습니다.</p>
<h3 id="q4">Q4</h3>
<h4 id="사람-간의-갈등이-불가피한데-어떻게-할-것인가">사람 간의 갈등이 불가피한데 어떻게 할 것인가?</h4>
<p>제 가치관과 연결지어 말씀드릴 수 있을 것 같습니다. 
이 직무로 복무하게 되면 저에겐 군인이라는 신분이자 역할이 부여됩니다.
인간으로서는 실망하고 화도 나겠지만, 군인으로서 참거나 묵묵히 수행할 것입니다.</p>
<h3 id="q5">Q5</h3>
<h4 id="보호병이-되면-여러-업무들을-하게-될-건데-포부를-말해봐라">보호병이 되면 여러 업무들을 하게 될 건데, 포부를 말해봐라.</h4>
<p>말씀드리기 앞서 이 반지의 가격이 얼마라고 생각하시는지 여쭈어도 괜찮겠습니까?</p>
<h4 id="그렇게-묻는가-하니-일반적이지-않을거-같네-값을-매길-수-없는-가치가-있나">그렇게 묻는가 하니 일반적이지 않을거 같네. 값을 매길 수 없는 가치가 있나?</h4>
<p>예 그렇습니다. 
이는 제가 평소 기부를 통해 받은 반지입니다. 
이는 저의 내적 동기에서 비롯된 행위라고 말씀드릴 수 있습니다.
그리고 앞서 말씀드린 바와 같이 정보보호 측면에서 내적 동기가 충분합니다. 
때문에 이 직무에서 성실히 임할 수 있다고 말씀드릴 수 있겠습니다.</p>
<hr>
<h2 id="면접이-끝나고">면접이 끝나고</h2>
<p>대전에 왔으면 성심당을 가야죠!
도보로 약 10분 소요되니 시간되시면 다녀오면 좋을 것 같습니다.</p>
<blockquote>
<p>Tip
합격자는 약 7만원의 여비를 병무청에서 주는 것으로 알고 있습니다.
필자 또한 합격 이틀 전에 수령했습니다.
이를 고려하여 성심당에서 빵을 더 구매해도 괜찮을 것 같습니다!!</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/c951d7cb-f831-4b95-8cd0-f69f9387e0c6/image.jpeg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[정보보호병 24년 2회차 - (2)]]></title>
            <link>https://velog.io/@dev-0eum/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B3%91-24%EB%85%84-2%ED%9A%8C%EC%B0%A8-2</link>
            <guid>https://velog.io/@dev-0eum/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B3%91-24%EB%85%84-2%ED%9A%8C%EC%B0%A8-2</guid>
            <pubDate>Wed, 27 Mar 2024 02:53:05 GMT</pubDate>
            <description><![CDATA[<h1 id="정보보호병-2차-면접-준비">정보보호병 2차 면접 준비</h1>
<ul>
<li>기술 면접은 정보보안 기사 및 실습을 토대로 준비했습니다.</li>
<li>인성 면접은 국가 안보관을 기반해 준비했습니다.</li>
</ul>
<h2 id="핵심-용어">핵심 용어</h2>
<h4 id="syn-flooding">SYN Flooding</h4>
<h4 id="pkipublic-key-infrastructure의-raregistration-authority">PKI(Public Key Infrastructure)의 RA(Registration Authority)</h4>
<blockquote>
<p>공개키 암호 방식을 바탕으로 공인인증서를 통해 인증받는 구조를 PKI라고 한다.
이 구조에서 RA가 CA에게 인증서 발급을 요청한다.</p>
</blockquote>
<h4 id="xss">XSS</h4>
<blockquote>
<p>실행가능한 스크립트를 재전송하는 기법
= 세션갈취</p>
</blockquote>
<h4 id="csrf-공격">CSRF 공격</h4>
<blockquote>
<p>사용자의 권한을 탈취하여 웹사이트를 요청하는 기법
= 서버,클라 신뢰관계를 이용</p>
</blockquote>
<h4 id="리눅스-로그">리눅스 로그</h4>
<blockquote>
</blockquote>
<h4 id="포트스캐닝">포트스캐닝</h4>
<blockquote>
<p>해당 포트가 Open 되어있는지 확인하는 기법</p>
</blockquote>
<h4 id="블랙리스트-vs-화이트리스트">블랙리스트 vs 화이트리스트</h4>
<blockquote>
<p>각각 접근 허용하지 않는 것과 허용하는 시스템이나 네트워크 목록을 의미</p>
</blockquote>
<hr>
<h3 id="다른-블로그에-있던-문제들">다른 블로그에 있던 문제들</h3>
<h4 id="파일-시스템">파일 시스템</h4>
<blockquote>
</blockquote>
<ol>
<li>FAT
1) FAT16
2) FAT32
3) NTFS: 파일, 디렉터리 및 메타 정보까지 파일 형태로 관리 / 암호화 압축 지원 / 가변 클러스터</li>
<li>EXT
1) EXT: 2GB
2) EXT2: 2GB
3) EXT3: 저널링 기능(추적 기능)
4) EXT4: 16GB</li>
<li>UFS
1) 슈퍼블록
2) I-node 테이블</li>
<li>BIOS: 공유폴더</li>
<li>레지스트리: OS에 필요한 정보를 저장 및 관리하기 위한 계층형 DB</li>
<li></li>
</ol>
<h4 id="리눅스-권한">리눅스 권한</h4>
<h4 id="운체-명령어">운체 명령어</h4>
<h4 id="바이러스">바이러스</h4>
<blockquote>
</blockquote>
<p>1세대 원시형: 고정된 크기 / 램 상주
2세대 암호화: 암호화 / 방식 일정
3세대 은폐형: 다른 exe 기생 / 백신 속임
4세대 갑옷형: 암호 많이
5세대 매크로: 매크로
<img src="https://velog.velcdn.com/images/dev-0eum/post/538e24da-0cf7-48f9-945a-c680d1bca47e/image.png" alt=""></p>
<h4 id="트로이목마">트로이목마</h4>
<h4 id="ddos">DDoS</h4>
<h4 id="scaning">Scaning</h4>
<h4 id="spoofing">Spoofing</h4>
<h4 id="ids">IDS</h4>
<h4 id="ftp-서버-공격">FTP 서버 공격</h4>
<h4 id="drm">DRM</h4>
<h4 id="네트워크-명령어">네트워크 명령어</h4>
<blockquote>
</blockquote>
<p>tcpdump: 
ping: ICMP 메시지 질답
netstat: TCP 상태정보 확인
traceroute: 
ipconfig: MAC 주소</p>
<h4 id="스크린드-서브넷-구조">스크린드 서브넷 구조</h4>
<h4 id="네트워크-운용장비">네트워크 운용장비</h4>
<blockquote>
</blockquote>
<p>리피터: 먼 거리까지 데이터 전송 / 세그먼트 전송
스위치 허브: 
라우터: 충돌 도메인을 분리 / 
게이트웨이: 한 네트워크에서 다른 네트워크로 이동하려면 거쳐가야하는 기기
VLAN: 
더미 허브: 
RAID: </p>
<h4 id="물리적-접근-통제에-관하여-틀린-것은">물리적 접근 통제에 관하여 틀린 것은?</h4>
<p>(학습주제 : 물리적 접근 통제)</p>
<h4 id="리눅스-파일-시스템-관리-설명에-대해-틀린-것은">리눅스 파일 시스템 관리 설명에 대해 틀린 것은?</h4>
<p>(학습주제 : SUID, SGID, 리눅스 파일 관리)</p>
<h4 id="ssl에-대한-설명이-틀린-것은">SSL에 대한 설명이 틀린 것은?</h4>
<p>(학습주제 : SSL)</p>
<h4 id="세션키를-공개키를-이용하여-공유했을-때-이와-같은-키분배-방식은-무엇인가">세션키를 공개키를 이용하여 공유했을 때 이와 같은 키분배 방식은 무엇인가?</h4>
<p>(학습주제 : 공개키, 키분배 방식 종류)</p>
<h4 id="스팸-메일-블랙리스트와-관련되지-않은-것은">스팸 메일 블랙리스트와 관련되지 않은 것은?</h4>
<p>(학습주제 : 스팸 메일 블랙리스트, SPF, RBL, sanitizer)</p>
<h4 id="포트-번호가-틀린-것은-시험에서는-21-22-23-25번-출제되었습니다">포트 번호가 틀린 것은? (시험에서는 21, 22, 23, 25번 출제되었습니다.)</h4>
<p>(학습주제 : 리눅스 포트 번호, SNTP SMTP 포트 번호 확실하게)</p>
<h4 id="ipv6-특징으로-틀린-것은">IPv6 특징으로 틀린 것은?</h4>
<p>(학습주제 : IPv6, IPv4 둘의 특징 비교)</p>
<h4 id="sql-injection의-경우-어떤-방화벽으로-방어가-가능한가">SQL Injection의 경우 어떤 방화벽으로 방어가 가능한가?</h4>
<p>(학습주제: 방화벽 종류)</p>
<h4 id="ids-대응-순서로-올바른-것은-순서-고르기-ㄱ-ㄴ-ㄷ-ㄹ">IDS 대응 순서로 올바른 것은? (순서 고르기 ㄱ-ㄴ-ㄷ-ㄹ)</h4>
<p>(학습주제: IDS, IPS 대응 순서)</p>
<h4 id="리눅스-pid-1번은-무엇인가">리눅스 PID 1번은 무엇인가?</h4>
<p>(학습주제 : 리눅스 프로세스, PID)</p>
<hr>
<h2 id="예상-기술-면접질문">예상 &quot;기술&quot; 면접질문</h2>
<h3 id="q1">Q1</h3>
<h4 id="알고-있는-보안-장비는-무엇인가">알고 있는 보안 장비는 무엇인가?</h4>
<blockquote>
<p>방화벽, IDS, IPS에 대해 알고 있다.
.
방화벽은 전송계층, 네트워크 계층을 검사합니다. 즉 패킷의 헤더 만으로 진입/출 가능 여부를 판단합니다.
반면에 IDS/IPS는 그 이상, 응용계층까지 (패킷 내부) 검사할 수 있습니다. 
다만 이는 방화벽에 비해 더 많은 시간을 소모해, 보다 덜 원활할 수 있는 한계를 지닙니다.</p>
</blockquote>
<p>IDS와 IPS는 침입에 대한 보안 장비임에는 공통적이나, 탐지 후 대응 여부에 따라 나뉩니다.
IDS는 탐지와 함께 알리는 것을 중점으로, IPS는 탐지 후 조치를 취하는 보안 장비라고 생각할 수 있습니다.
.
그리고 실제로 프로젝트를 AWS로 배포한 적이 있는데, 방화벽의 인바운드와 아웃바운드를 직접 설정해본 경험이 있습니다.</p>
<blockquote>
<p>요즘은 블로그에서 하도 많이 보고 와서 방화벽 IDS/IPS로 끝나지 않는다.
.
코로나 시기 재택근무 환경에 대해 궁금했었습니다.
재택근무에 익숙한 VPN이 필요하다는 기사를 접했고, 원리에 관심이 생겨 공부해봤었습니다.</p>
</blockquote>
<p>회사 혹은 기관마다 고유의 보안 정책이 있을 것입니다. 이를 PN(Private Network) 라고 합니다.
내부에 있는 각 PC는 회사 대역의 IP를 할당 받아있을 것입니다.
재택근무는 개인의 PC인 외부 기기입니다. 이는 고유의 IP를 가지고 있습니다.
회사의 서버는 오직 LAN 통신 즉, 같은 대역에 있는 IP와만 송수신합니다.</p>
<blockquote>
</blockquote>
<p>VPN 어플리케이션을 통해 회사에게 인증을 받으면 회사 대역의 IP 해당하는 가상의 IP를 할당받습니다.
이 과정을 터널링이라고 합니다.</p>
<blockquote>
</blockquote>
<p>그렇다면 송수신 과정에서 개인 PC는 SG(Secure Gateway)까지 터널링하고, SG가 대신 회사 서버와 데이터를 주고받습니다.
이러한 과정을 통해 VPN을 설치한 개인 PC가 회사의 Virtual한 PC라고 인식할 수 있게 확장하는 것이라고 설명할 수 있습니다.
(이외 Virtual NIC, 커널 단계에서의 작동 등 설명)</p>
<p>+) VPN 개념 참고
<a href="https://www.youtube.com/watch?v=Q0EgiHhw-E4&amp;t=221s">https://www.youtube.com/watch?v=Q0EgiHhw-E4&amp;t=221s</a></p>
<p>+) 네트워크 운용기기
<a href="https://sw-ko.tistory.com/95">https://sw-ko.tistory.com/95</a></p>
<h3 id="q2">Q2</h3>
<h4 id="정보보호쪽으로-어떤-경험이-있는가">정보보호쪽으로 어떤 경험이 있는가?</h4>
<blockquote>
<p>필자는 2개의 동아리에 속해있다. 
보안 학술동아리와 보드 중앙동아리이다.
올해 초, 보드동아리에서 어플리케이션을 제작한 경험이 있다. 
이때 Netlify를 이용해 배포를 했는데, 최근 DDoS 공격으로 인한 과금 이슈를 보았다.
보안동아리에서 CTF 문제도 풀어보고, 스터디를 진행했던 경험을 기반하여 이를 사전차단 해보고자 시도했다. </p>
</blockquote>
<p>필자가 택한 조치는 다음 두가지이다.
하나는 라이브러리를 사용해 요청 속도를 제어하는 미들웨어는 추가한 것이고,
다른 하나는 개발자와 임원진의 IP를 화이트리스트로 등록한 것이다.</p>
<h3 id="q3">Q3</h3>
<h4 id="정보보호병이-하는-일은-무엇인지-아는가">정보보호병이 하는 일은 무엇인지 아는가?</h4>
<blockquote>
<p> 기본적으로 컴퓨터 정보보호관련 임무를 수행합니다. 
보안관제, 침해사고 대응, 모니터링 등의 업무를 예로 들 수 있습니다.</p>
</blockquote>
<h3 id="q4">Q4</h3>
<h4 id="하고있는-프로젝트나-공부가-있는가">하고있는 프로젝트나 공부가 있는가?</h4>
<blockquote>
<p>최근까지 보드 동아리에서 어플리케이션 제작에 참여했습니다.
+) 위에 보안 이야기하면 좋을듯</p>
</blockquote>
<h3 id="q5">Q5</h3>
<h4 id="알고있는-최근-보안-이슈가-있는가">알고있는 최근 보안 이슈가 있는가?</h4>
<blockquote>
<p>Netlify를 이용해 배포를 했는데, 최근 DDoS 공격으로 인한 과금 이슈를 보았다.</p>
</blockquote>
<h3 id="q6">Q6</h3>
<h4 id="무슨-업무를-하였는가">무슨 업무를 하였는가?</h4>
<blockquote>
<p>보안동아리에서 스터디한 지식을 바탕으로 보드 동아리 어플리케이션 제작에서 보안 취약점을 대비하려고 노력했다.
Netlify에서 배포하였는데, 최근 이슈인 서버리스를 노린 DDoS 공격으로 인해...</p>
</blockquote>
<h3 id="q7">Q7</h3>
<h4 id="ipv4와-ipv6의-차이를-설명할-수-있는가">IPv4와 IPv6의 차이를 설명할 수 있는가?</h4>
<blockquote>
<p>IPv4는 32비트로 주소를 나타내고, IPv6는 128비트를 이용합니다.</p>
</blockquote>
<h3 id="q8">Q8</h3>
<h4 id="최근-군에-ipcctv가-많이-설치되고-있는데-ipcctv를-통해-들어오는-공격을-어떻게-탐지해야-하는가">최근 군에 IPCCTV가 많이 설치되고 있는데 IPCCTV를 통해 들어오는 공격을 어떻게 탐지해야 하는가?</h4>
<blockquote>
<p>IP CCTV가 정확히 어떤 장비인진 모릅니다. 하지만 이름만 들었을 때에는 고유의 IP를 가지고 있는 CCTV라고 생각이 듭니다. 따라서 IP CCTV를 통해 공격이 들어온다면 네트워크 단에서 IP 패킷을 분석하고, 로그 분석이 필요할 것이라고 생각합니다. </p>
</blockquote>
<h3 id="q9">Q9</h3>
<h4 id="ipcctv로-탈취할-수-있는-정보는-무엇이-있는가">IPCCTV로 탈취할 수 있는 정보는 무엇이 있는가?</h4>
<blockquote>
<p>CCTV로 보이는 군의 실시간 상황과 정보, 나아가 군 내부에 서버 내용 역시 탈취 당할 가능성이 있습니다.</p>
</blockquote>
<h3 id="q10">Q10</h3>
<h4 id="서버---네트워크---클라이언트가-있을-때-각-구간에-어떤-보안-시스템을-설계할-수-있을까">서버 - 네트워크 - 클라이언트가 있을 때 각 구간에 어떤 보안 시스템을 설계할 수 있을까?</h4>
<blockquote>
</blockquote>
<hr>
<h2 id="예상-인성-면접질문">예상 &quot;인성&quot; 면접질문</h2>
<h3 id="q1-1">Q1</h3>
<h4 id="왜-지원하였는가">왜 지원하였는가?</h4>
<blockquote>
<p>국방의 의무는 대한민국 국민이라면 꼭 져야하는 의무입니다.
제가 가진 장점을 살려서 국방에 기여하고 싶은 마음에 지원했습니다.</p>
</blockquote>
<h3 id="q2-1">Q2</h3>
<h4 id="상관의-부당한-지시에-대해서는-어떻게-할-것인가">상관의 부당한 지시에 대해서는 어떻게 할 것인가?</h4>
<blockquote>
<p>저의 역할은 군인입니다.
군인은 군법 하에 통제되어야 하며, 상관의 지시는 군법에 따라 상명하복 해야합니다.</p>
</blockquote>
<p>하지만 상관의 지시가 군의 안정성을 해치고, 윤리적인 문제를 일으킬 소지가 있다면 보다 상관에게 보고하여 문제를 해결할 것입니다.</p>
<h3 id="q3-1">Q3</h3>
<h4 id="군대는-왜-존재한다고-생각하는가">군대는 왜 존재한다고 생각하는가?</h4>
<blockquote>
<p>돈을 벌려면 돈이 필요하고, 행복하려면 행복할 줄 알아야합니다.
이는 모순되지만 인생의 진리라고 생각합니다.</p>
</blockquote>
<p>국가의 평화를 위해선 국방력이 필요하다고 생각합니다.
그 국방력을 유지하기 위해 군대가 존재한다고 생각합니다.</p>
<h3 id="q4-1">Q4</h3>
<h4 id="그룹-구성원-간의-마찰-시-어떻게-할-것인가">그룹 구성원 간의 마찰 시 어떻게 할 것인가?</h4>
<blockquote>
<p>계급에 따라 상이할 것 같습니다.
동기나 후임일 경우엔 객관적으로 상황을 설명하고, 감정적인 위로를 건낼 것 같습니다.
간부나 선임일 경우엔 감정을 추스르고 명령에 따르려고 노력할 것 같습니다.
+) 이는 단순한 위계에 따른 수동적인 행동이 아니라, 군대 조직의 안정성을 위해서임을 강조</p>
</blockquote>
<h3 id="q5-1">Q5</h3>
<h4 id="우리나라의-적은-누구인가">우리나라의 적은 누구인가?</h4>
<blockquote>
<p>오래되었지만 우리는 현재 휴전 상황을 겪고 있습니다.
전쟁은 국가의 안보를 위협하는 것으로 가장 최우선으로 경계해야하는 대상입니다.
때문에 휴전국인 북한이 주적이며, 항시 경계하고 있어야할 대상입니다.</p>
</blockquote>
<h3 id="q6-1">Q6</h3>
<h4 id="마지막으로-하고-싶은-말이-있는가">마지막으로 하고 싶은 말이 있는가?</h4>
<blockquote>
<p>어처피 떨어지더라도 다시 지원할 생각이다. 
가능한 빨리 뽑아주시면 감사하겠다.</p>
</blockquote>
<h3 id="q7-1">Q7</h3>
<h4 id="정보보호병이-밤샘-교대근무을-하는데-괜찮은가">정보보호병이 밤샘 교대근무을 하는데 괜찮은가?</h4>
<blockquote>
<p>사회에서도 목적이 있으면 밤새는 행위가 힘들지 않았습니다.
저 하나의 고됨이 여러 국민의 안전한 밤을 호위할 수 있다면, 힘들더라도 충분히 버틸 수 있습니다.</p>
</blockquote>
<h3 id="q8-1">Q8</h3>
<h4 id="625-전쟁이-어떻게-일어났는지-아는가">6.25 전쟁이 어떻게 일어났는지 아는가?</h4>
<blockquote>
<p>일제강점기 이후, 정치적인 이념이 맞지 않아 두 나라로 분단하게 되었습니다.
그리곤 1950년 6월 25일 새벽, 북한의 남침으로 전쟁이 시작된 것으로 알고 있습니다.</p>
</blockquote>
<h4 id="q9-1">Q9</h4>
<h4 id="가족관계가-어떻게-되는지-그중에-가장-친한-사람은-누구인지">가족관계가 어떻게 되는지 그중에 가장 친한 사람은 누구인지</h4>
<blockquote>
</blockquote>
<hr>
<p>질문 중 몇가지는 다른 블로그를 참고하였고, 답변의 필자의 발언임을 밝힙니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[정보보호병 24년 2회차 - (1)]]></title>
            <link>https://velog.io/@dev-0eum/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B3%91-2%EC%B0%A8-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84</link>
            <guid>https://velog.io/@dev-0eum/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EB%B3%91-2%EC%B0%A8-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84</guid>
            <pubDate>Wed, 27 Mar 2024 02:41:15 GMT</pubDate>
            <description><![CDATA[<h1 id="정보보호병-1차-합격">정보보호병 1차 합격</h1>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/32c8379e-85e9-42d8-b468-2af22a8d600a/image.jpeg" alt=""></p>
<hr>
<h2 id="배경-공군---전자계산">배경 (공군 - 전자계산)</h2>
<h3 id="1차-서류-준비">1차 서류 준비</h3>
<p>공군 전자계산병 지원을 위해 약 6개월간 준비했다.
필자가 준비한 스펙은 다음과 같다.</p>
<p>2학년 수료, 헌혈 8회, 정보처리기능사, 다자녀, 토익,
심지어 군적성 검사를 통해 얻은 가산점까지 취득해 전자계산병에 지원했다.</p>
<p>하지만 3,4,5월 지원해 끝내 전부 떨어졌다.
들은 바로는 24년 3월부터 전자계산병 지원에 전공제한이 풀려서 점수가 급격히 높아진 것 같다고...
+) 3~5월 전자계산 병 모집 인원은 20명 내외였다...</p>
<p>P.S. 23년도 4차 정보처리기능사를 취득해서 3월엔 SQLD로만 점수가 들어갔다.
정보처리기능사 - 40점 배점
SQLD - 30점 배점
3월 이전 공군 입영을 희망하는 독자라면 미리 취득해두는 것을 추천한다.</p>
<h3 id="1차-불합격">1차 불합격</h3>
<p>매월 1~2 점 차이로 불합격했다... :(
<img src="https://velog.velcdn.com/images/dev-0eum/post/3c099e47-0b0f-4e61-9fde-dd0a4989e1c0/image.png" alt=""></p>
<hr>
<h2 id="육군-특기병-정보보호병">육군 특기병 (정보보호병)</h2>
<h3 id="배경">배경</h3>
<p>원래 5월 정보보호병으로 지원하고자 했지만, 작년과 달리 올해는 6월에 모집했다.
올해 공군이 6월 모집이 없기도 하고, 이미 공군 전산병으로 복무 중인 대학 친구의 말을 들었더니 생각이 바뀌었다.</p>
<p>보직명은 전산병이나 실제 CS 지식을 활용할 기회보단 잡무가 많다는 것을 듣곤 다음 지원 땐 그냥 통전이나 운전병을 넣을 계획이다.</p>
<h3 id="전문연구요원">전문연구요원</h3>
<p>또한 필자는 대학원에 갈 생각이었기에, <em><strong>전문연구요원</strong></em> 을 지원할 계획이었다.
하지만 정부의 R&amp;D 예산 삭감, 매년 증가하는 랩실 경쟁률 등 다양한 리스크가 존재해 결국 입대를 결심했다.</p>
<p>필자는 다음과 같은 생각을 거쳐 결심했다.
(R&amp;D 삭감 -&gt; 프로젝트의 부재 -&gt; 연구경험 및 월급 부족 가능성 -&gt; 전문연 리스크)</p>
<h3 id="1차합격">1차합격</h3>
<p>서류에 합격하면 다음과 같이, 병무청에서 축하(?)의 메시지가 온다.
2차 면접 일시와 장소에 대한 설명이 부가되어 있다.</p>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/4d16d4a0-af48-43a3-836d-8b4ee563f936/image.jpeg" alt=""></p>
<h4 id="경쟁률">경쟁률</h4>
<p>필자가 엄청난 걸 준비해서 붙었다고 생각할 필요 없을 것 같다.
24년 6월 입영 정보보호병 관련 모집은 아래 사진을 참고할 수 있다.</p>
<p>총 26명 뽑지만 48명의 지원으로 경쟁률이 1.8 : 1에  그쳤다.
그리고 1차 서류는 2배수 선발한다.
즉, 모두 1차는 통과한다는 것을 의미한다.</p>
<p>*그래서 마음 편히 지원하자마자 2차 면접을 준비하기 시작했다.</p>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/60bd37f9-27fe-4d2a-979b-9a20ed5dd8bc/image.png" alt=""></p>
<h4 id="1차-세부배점-내역">1차 세부배점 내역</h4>
<p>1차 서류에서 부여 받은 순위는 20위이다.
아마 이번 선발부터 정보처리기능사 배점이(16점 --&gt; 10점) 인하하여 낮은 점수를 받은 것 같다.
이를 보완하기 위해 1달 전부터 2차를 준비한 것이 심적인 안정감을 부여한 것 같다.</p>
<p>필자처럼 <em><strong>컴퓨터공학</strong></em> 을 전공하여 <em><strong>간접학과</strong></em> 에 속하는 독자들은 미리 2차를 준비하는 것이 좋을 듯하다.
<img src="https://velog.velcdn.com/images/dev-0eum/post/a69bd71d-225b-41ad-9ca1-14d684e1a65d/image.png" alt=""></p>
<hr>
<h2 id="tip---중복지원">TIP - 중복지원</h2>
<p>위에서 볼 수 있다시피 4월4일 2차 면접이 실시된다.
군지원을 해본 독자라면 알겠지만, 7월 입영은 3월 말~4월 초에 지원 받는다.
24년 7월 입영의 접수 마감일은 4월4일 14시이다.</p>
<p>아래 사진을 보면 알 수 있듯이, 전자계산 모집 인원은 총 78명으로 충분히 합격할 수 있을 것이라고 예상한다.
하지만 현재 나는 <strong><em>정보보호병 최종 선발 중</em></strong> 인 상태이기 때문에 공군 지원이 불가능하다. (이는 병무청 전문특기병 지원 제한 요건에 명시되어 있다.)</p>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/b4f5bff8-7566-4376-aa80-f754d20befb0/image.png" alt=""></p>
<p>하지만 입영 확정 + 입대 전 상황에서 지원이 가능한 것으로 알고 있다.
다시 해야한다면 공군을 붙여둔 상태에서 정보보호병을 신청할 것 같다.</p>
<pre><code>*자세한 사항은 병무청을 참고하길 바란다.</code></pre><h2 id="결심">결심</h2>
<p>때문에 필자는 고민해야했다.
필자의 목표가 MLOps을 운영해 플랫폼을 만드는 것이기에, 정보보호병에서의 활동이 도움이 될 수 있을 것이라고 생각했다.
이를 비롯한 종합적인 고민 끝에, 필자는 정보보호병 2차 면접 응시에 도전하기로 했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CA] Ch6. Processor]]></title>
            <link>https://velog.io/@dev-0eum/CA-Ch6.-Processor</link>
            <guid>https://velog.io/@dev-0eum/CA-Ch6.-Processor</guid>
            <pubDate>Tue, 19 Dec 2023 06:00:10 GMT</pubDate>
            <description><![CDATA[<h1 id="reminder">Reminder</h1>
<blockquote>
</blockquote>
<ol>
<li>Fetch &gt; lw from memory addr in PC to IR</li>
<li>Decode &gt; </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Automata] Ch12. Limits of Algorithmic Computation]]></title>
            <link>https://velog.io/@dev-0eum/Automata-Ch12.-Limits-of-Algorithmic-Computation</link>
            <guid>https://velog.io/@dev-0eum/Automata-Ch12.-Limits-of-Algorithmic-Computation</guid>
            <pubDate>Mon, 18 Dec 2023 16:41:40 GMT</pubDate>
            <description><![CDATA[<h2 id="halting-problem">Halting Problem</h2>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/d4035b29-9aa3-448a-b0c6-5219a90ec7ee/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Automata] Ch11. A Hierarchy of
Formal Languages and
Automata]]></title>
            <link>https://velog.io/@dev-0eum/Automata-Ch11.-A-Hierarchy-ofFormal-Languages-andAutomata</link>
            <guid>https://velog.io/@dev-0eum/Automata-Ch11.-A-Hierarchy-ofFormal-Languages-andAutomata</guid>
            <pubDate>Mon, 18 Dec 2023 16:40:10 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dev-0eum/post/b5650d40-1a7a-4671-99b5-d37edaf5992b/image.png" alt=""></p>
<p>example</p>
<h2 id="112-unrestricted-g-context-sensitive-g">11.2 Unrestricted G, Context-sensitive G</h2>
<h3 id="unrestricted-g">Unrestricted G</h3>
<p>LHS의 제한 X
TM = r.e. languages = unrestricted G</p>
<hr>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/00bf9679-faec-4112-8196-19581139401f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Automata] Ch9-10. Turing Machines]]></title>
            <link>https://velog.io/@dev-0eum/Automata-Ch9-10.-Turing-Machines</link>
            <guid>https://velog.io/@dev-0eum/Automata-Ch9-10.-Turing-Machines</guid>
            <pubDate>Mon, 18 Dec 2023 16:36:12 GMT</pubDate>
            <description><![CDATA[<h2 id="hierarchy">Hierarchy</h2>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/c0a83cce-23b6-498f-be51-c82c71707416/image.png" alt=""></p>
<h2 id="basic">Basic</h2>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/042799d1-4bea-4504-b3b2-11aa394e32c6/image.png" alt=""></p>
<h2 id="transducer">Transducer</h2>
<p>다른 Machine처럼 accepter 역할도 하지만, 함수역할의 transducer도 수행</p>
<ul>
<li>Encoding이 필요하다</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/54792ea1-e7aa-443b-ae64-d9d4f0476c86/image.png" alt=""></p>
<hr>
<h2 id="93-turing-thesis">9.3 Turing Thesis</h2>
<p>digital computer가 할 수 있는 일은 TM이 모두 할 수 있다.</p>
<h1 id="ch10-other-models-of-tm">Ch10. Other models of TM</h1>
<ol>
<li>TM with stay</li>
<li>TM with multiple track tape</li>
<li>semi infinite tape</li>
<li>off line machine</li>
<li>2-Dimensional TM</li>
</ol>
<h2 id="104-universal-tm">10.4 Universal TM</h2>
<p>simulate하는 TM
<img src="https://velog.velcdn.com/images/dev-0eum/post/f40406eb-705f-4d38-b15d-f1bfdc035faf/image.png" alt=""></p>
<p>Machine Encoding</p>
<blockquote>
</blockquote>
<ul>
<li>Tape 1
State Encoding</li>
<li>Tape 2
Tape alphabet Encoding</li>
<li>Tape 3
Transition Encoding</li>
</ul>
<p>with enumericable</p>
<h2 id="countable-sets">Countable Sets</h2>
<p>countable = enumeric
proper order도 가능 = 사전식 나열 = numeric</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Automata] Ch8. Properties of CFL]]></title>
            <link>https://velog.io/@dev-0eum/Automata-Ch8.-Properties-of-CFL</link>
            <guid>https://velog.io/@dev-0eum/Automata-Ch8.-Properties-of-CFL</guid>
            <pubDate>Mon, 18 Dec 2023 16:23:31 GMT</pubDate>
            <description><![CDATA[<h2 id="81-pumping-lemma-for-cfl">8.1 Pumping Lemma for CFL</h2>
<ul>
<li>CFL인지 확인하는 증명</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/4af7f122-e0d9-4b53-b5fb-b6a5380b957a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/429718b7-7a18-4d4c-af90-3448831674f0/image.png" alt=""></p>
<h3 id="aplications">Aplications</h3>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/990d0392-7153-4b7a-951c-db6174489a80/image.png" alt=""></p>
<h2 id="82-closure-properties-for-cfls">8.2 Closure Properties for CFLs</h2>
<ul>
<li>Union</li>
<li>Concatenation</li>
<li>Star Closure</li>
</ul>
<p>Not Allowed</p>
<blockquote>
<ol>
<li>Intersection</li>
<li>Complement</li>
</ol>
</blockquote>
<h2 id="85-regular-intersection">8.5 Regular Intersection</h2>
<p>L1 = Context Free
L2 = Regular
L1 intersection L2 = Context Free</p>
<h3 id="aplications-1">Aplications</h3>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/72921609-c05b-46bb-a9a1-a16310b4a959/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/78223190-9a1d-45fe-9211-b4b4b28025fa/image.png" alt=""></p>
<h2 id="deciable-properties-of-cfls">Deciable Properties of CFLs</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Automata] Ch7. PDA]]></title>
            <link>https://velog.io/@dev-0eum/Automata-Ch7.-PDA</link>
            <guid>https://velog.io/@dev-0eum/Automata-Ch7.-PDA</guid>
            <pubDate>Mon, 18 Dec 2023 16:12:26 GMT</pubDate>
            <description><![CDATA[<h1 id="push-down-automata">Push Down Automata</h1>
<h2 id="71-npda">7.1 NPDA</h2>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/c5f8dbfa-738b-4f5c-9783-ba29907e08cb/image.png" alt=""></p>
<ul>
<li>transition</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/5a097109-e83e-4a5b-b1fe-83c0406c30c8/image.png" alt=""></p>
<ul>
<li>Condition for Accept</li>
</ul>
<blockquote>
<ol>
<li>All the input is consumed</li>
<li>The last state is a final state</li>
</ol>
<p>+) do not care stack</p>
</blockquote>
<h2 id="72-pda--cfl">7.2 PDA &amp; CFL</h2>
<h3 id="convert-cfl-to-npdas">Convert CFL to NPDAs</h3>
<ul>
<li>We will convert any context-free grammar G (CFL)</li>
<li>to an NPDA automaton M (NPDA)</li>
</ul>
<blockquote>
</blockquote>
<p>6장에서 설명한 GNF에서 하나의 symbol과 여러개의 Variables
--&gt; G를 읽어나가면서 Symbol의 증가
--&gt; get String (with Stack = progress)</p>
<h2 id="73-dpda">7.3 DPDA</h2>
<p>Not Allowed!!</p>
<blockquote>
</blockquote>
<ol>
<li>같은 input에 여러 state</li>
<li>λ도 읽고 일반 input도 읽기</li>
</ol>
<h3 id="npdas-has-powerful-than-dpdas">NPDAs has powerful than DPDAs</h3>
<p><img src="https://velog.velcdn.com/images/dev-0eum/post/5a68ba78-ff94-4770-be8f-45c886bf6594/image.png" alt=""></p>
<p>L을 체크해보면 중간지점을 찾아야 Reverse String을 내보내는데 State가 확정 불가 == DPDA 불가</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Automata] Ch6. CFL]]></title>
            <link>https://velog.io/@dev-0eum/Automata-Ch6.-CFL</link>
            <guid>https://velog.io/@dev-0eum/Automata-Ch6.-CFL</guid>
            <pubDate>Mon, 18 Dec 2023 15:54:12 GMT</pubDate>
            <description><![CDATA[<h1 id="chapter-6-simplifications-of-cfgs">Chapter 6. Simplifications of CFGs</h1>
<h2 id="61-methods-for-transforming-grammars">6.1 Methods for transforming grammars</h2>
<h3 id="substitution-rule">Substitution Rule</h3>
<ul>
<li>Equivalent Grammar를 만드는데, 한 변수를 제거하는 목적</li>
</ul>
<blockquote>
</blockquote>
<ol>
<li>Removing λ-productions</li>
<li>Removing unit productions</li>
<li>Removing useless productions</li>
</ol>
<p>--&gt; Good for Parsing</p>
<h2 id="62-normal-forms-for-cfgs">6.2 Normal Forms for CFGs</h2>
<ol>
<li><p>Chomsky Normal Form (CNF)</p>
<blockquote>
<p>1) RHS has 2 Variables
2) RHS has a Symbol</p>
</blockquote>
</li>
<li><p>Greinbach Normal Form (GNF)</p>
<blockquote>
<p>1) RHS has a symbol and Variabels_k (k&gt;=0)</p>
</blockquote>
</li>
</ol>
<h2 id="63-membership-algorithm-for-cfg">6.3 Membership algorithm for CFG</h2>
<ul>
<li>CYK Algorithm
<img src="https://velog.velcdn.com/images/dev-0eum/post/b2c8c4c4-f55a-4273-ac32-f3ab8ee71c48/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DB] 알아두면 좋은 SQL Clauses]]></title>
            <link>https://velog.io/@dev-0eum/DB-%EC%95%8C%EC%95%84%EB%91%90%EB%A9%B4-%EC%A2%8B%EC%9D%80-SQL-Clauses</link>
            <guid>https://velog.io/@dev-0eum/DB-%EC%95%8C%EC%95%84%EB%91%90%EB%A9%B4-%EC%A2%8B%EC%9D%80-SQL-Clauses</guid>
            <pubDate>Sun, 17 Dec 2023 12:22:00 GMT</pubDate>
            <description><![CDATA[<h3 id="⚠️-information---reference">⚠️ Information - reference</h3>
<blockquote>
<p>모든 내용은 <a href="https://db-book.com/">https://db-book.com/</a> 의 도서를 참고했음.
본문의 RDB 스키마를 참고할 것.</p>
</blockquote>
<h1 id="basis-of-sql">Basis of SQL</h1>
<h2 id="integrity-constraints">Integrity Constraints</h2>
<blockquote>
<ul>
<li>not null</li>
</ul>
</blockquote>
<ul>
<li>primary key</li>
<li>unique</li>
<li>check</li>
</ul>
<h3 id="not-null">not null</h3>
<pre><code class="language-sql">name varchar(20) not null
budget numeric(12,2) not null</code></pre>
<h3 id="primary-key">primary key</h3>
<pre><code class="language-sql">primary key (course_id, sec_id, semester, year)</code></pre>
<h3 id="unique">unique</h3>
<blockquote>
<p>unique(A_1, A_2, ... , A_n)
: 후보키 설정을 목적으로 하며, 튜플을 구분 가능하게 하는 속성을 의미
Ex. 주민등록번호라는 column을 unique로 설정 가능
+) null 허용</p>
</blockquote>
<h3 id="check">check</h3>
<pre><code class="language-sql">check (semester in (&#39;Fall&#39;, &#39;Winter&#39;, &#39;Spring&#39;, &#39;Summer&#39;)) // semester는 주어진 4개의 단어만 지녀야 함.</code></pre>
<h2 id="referential-integrity-참조-무결성">Referential Integrity (참조 무결성)</h2>
<pre><code class="language-sql">foreign key (dept_name) references department [(dept_name)] // []: Optional</code></pre>
<h3 id="cascading-in-referential-integrity">Cascading in Referential Integrity</h3>
<blockquote>
<h4 id="on-delete--update-option">on {delete | update} [option]</h4>
</blockquote>
<ul>
<li>restrict (default value)
: No change</li>
<li>cascade 
: together</li>
<li>set null 
: fill with null</li>
<li>set default 
: fill with user-defined value</li>
</ul>
<hr>
<h2 id="types">Types</h2>
<h3 id="built-in-data-type">Built-in Data Type</h3>
<h3 id="large-object-type">Large-Object Type</h3>
<h3 id="user-defined-type">User-Defined Type</h3>
<h3 id="domains">Domains</h3>
<hr>
<h1 id="intermediate-sql">Intermediate SQL</h1>
<h2 id="join">JOIN</h2>
<h3 id="danger-of-natural-join">Danger of Natural Join</h3>
<ul>
<li>with <strong>ON</strong> Clause
: where clause에 포함될 수 있는 내용 (predicate)</li>
<li>with <strong>using</strong> Clause
table의 attributes를 사용</li>
</ul>
<h3 id="outer-join">Outer Join</h3>
<h4 id="left-outer-join">left outer join</h4>
<h4 id="full-outer-join">full outer join</h4>
<h3 id="views">Views</h3>
<hr>
<h2 id="authorization">Authorization</h2>
<h3 id="privileges">Privileges</h3>
<blockquote>
</blockquote>
<ul>
<li>Read</li>
<li>Insert</li>
<li>Update</li>
<li>Delete</li>
<li>all</li>
</ul>
<h3 id="grant">Grant</h3>
<ul>
<li>자신이 가지고 있는 권한을 타인에게 부여 가능하다
``` sql</li>
<li><ul>
<li>grand <privilege list> on <relation or view> to <user list>
grant select on department to Amit, Satoshi
```<h3 id="revoke">Revoke</h3>
``` sql</li>
</ul>
</li>
<li><ul>
<li>revoke <privilege list> on <relation or view> from <user list>
revoke select on student from U1, U2, U3<pre><code></code></pre></li>
</ul>
</li>
</ul>
<h3 id="role">Role</h3>
<ul>
<li><p>example</p>
<pre><code class="language-sql">create role instructor;
grant instructor to Amit;</code></pre>
</li>
<li><p>Chain of Roles</p>
<pre><code class="language-sql">• create role dean;
• grant instructor to dean;
• grant dean to Satoshi;</code></pre>
</li>
<li><p>Other Authorization Features
p 4.60</p>
</li>
</ul>
<hr>
<h1 id="advanced-sql">Advanced SQL</h1>
<h3 id="sql-functions">SQL Functions</h3>
<pre><code class="language-sql">create function dept_count (dept_name varchar(20))
    returns integer
    begin
    declare d_count integer;
        select count (*) into d_count
        from instructor
        where instructor.dept_name = dept_name
    return d_count;
end</code></pre>
<h3 id="sql-procedures">SQL Procedures</h3>
<p>프로시저: 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램
(return value가 없는 함수라고 생각하면 좋을듯)</p>
<pre><code class="language-sql">create procedure dept_count_proc (in dept_name varchar(20),
                                  out d_count integer)
begin
  select count(*) into d_count // out에 저장
  from instructor
  where instructor.dept_name = dept_count_proc.dept_name // 해당 프로시저의 param을 . 으로 받아옴
end</code></pre>
<p>⚠️ param 받는 방식 유의</p>
<ul>
<li>Usage<pre><code class="language-sql">declare d_count integer;
call dept_count_proc(&#39;Physics&#39;, d_count);</code></pre>
</li>
</ul>
<h3 id="assertions">Assertions</h3>
<ul>
<li>using check function<pre><code class="language-sql">create assertion credits_earned_constraint check
(not exists (select ID
           from student
           where tot_cred &lt;&gt; (select coalesce(sum(credits),0)
                               from takes natural join course
                               where student.ID = takes.ID and
                                        grade is not null and
                                       grade &lt;&gt; &#39;F&#39;)
             )
)</code></pre>
</li>
</ul>
<h3 id="trigers">Trigers</h3>
<pre><code class="language-sql">create trigger credits_earned after update of takes on (grade) // takes 테이블의 grade 정보가 update되면 실행되는 트리거
referencing new row as nrow // 변경 후 튜플
referencing old row as orow // 변경 전 튜플

for each row // 모든 튜플에 대해서
// 새로 삽입된 학점이 F거나 Null이 아니고, 변경 전 학점이 유효하지 않을 때
when nrow.grade &lt;&gt; &#39;F&#39; and nrow.grade is not null 
    and (orow.grade = &#39;F&#39; or orow.grade is null)

begin atomic
  update student // student 테이블 update
  set tot_cred= tot_cred + // 기존 tot_cred에
       // 학생의 수강 수업ID와 같은 ID에 해당하는 수업의 학점을 뽑아와
       (select credits
      from course
      where course.course_id= nrow.course_id)
  where student.id = nrow.id; // 학번 조회 (학번이 일치할 때)
end; </code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[PL] Ch08. Statement-Level Control Structures]]></title>
            <link>https://velog.io/@dev-0eum/PL-Ch08-Intro</link>
            <guid>https://velog.io/@dev-0eum/PL-Ch08-Intro</guid>
            <pubDate>Sat, 16 Dec 2023 12:05:50 GMT</pubDate>
            <description><![CDATA[<h3 id="08-1-selection-statements">08-1. Selection Statements</h3>
<ul>
<li>Two-way
ㄴ if-else clause</li>
<li>Multiple-way
ㄴ case clause
ㄴ elif (using if)
ㄴ COND</li>
</ul>
<p>COND 부연설명</p>
<pre><code>(COND
    (predicate_1 expression1) 
    ...
    (predicate_n expressionn)
    [(ELSE expressionn+1)] 
)</code></pre><p>첫 #T(true)가 나올 때까지 평가
첫 번째 #T predicate의 expression 출력</p>
<hr>
<h3 id="08-2-iterative-statements">08-2. Iterative Statements</h3>
<h4 id="where-do-program-detect-to-iterate">Where do program detect to iterate?</h4>
<p>pre-dection
&quot;-------------&quot;
|-- program --|
&quot;-------------&quot;
post-dection</p>
<ul>
<li>Counter(계수기) Controlled Loops<pre><code class="language-c">for (int cnt = 0; cnt &lt; 10; cnt++) // cnt가 계수기
  loop body</code></pre>
</li>
<li>Logical-Controlled Loops<pre><code class="language-c">while (control expr) // 여기서 결정 with boolean value
  loop body </code></pre>
</li>
<li>User-Located Loop Control<pre><code class="language-c">break; // loop 전체 out
continue; // 이번 iteration만 out</code></pre>
</li>
<li>Iteration Based on Data Structure<pre><code class="language-c">for (p = root; p == NULL; traverse(p)) // p는 tree의 node를 가리키는 ptr
  loop body</code></pre>
</li>
</ul>
<hr>
<h3 id="08-3-unconditional-branching">08-3. Unconditional Branching</h3>
<p>goto</p>
<hr>
<h3 id="08-4-guarded-commands">08-4. Guarded Commands</h3>
<p>Dijkstra가 제안</p>
<pre><code>if &lt;Boolean expr&gt; -&gt; &lt;statement&gt; 
[] &lt;Boolean expr&gt; -&gt; &lt;statement&gt;
    ...
[] &lt;Boolean expr&gt; -&gt; &lt;statement&gt; 
fi</code></pre><p>모든 expr이 평가된다. 하나라도 #T이면 return true. 
&#39;non-true&#39;만 return false </p>
<ul>
<li>example</li>
</ul>
<pre><code class="language-c">if x &gt;= y -&gt; max := x 
[] y &gt;= x -&gt; max := y 
fi // 같으면 임의의 stmt 출력</code></pre>
<p>위는 다음과 같다.</p>
<pre><code class="language-c">if (x &gt;= y) // 더 큰 값을 출력
    max = x;
else
    max = y;
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[PL] Ch07. Expressions & Assignment Statements - 2]]></title>
            <link>https://velog.io/@dev-0eum/PL-Ch07-2</link>
            <guid>https://velog.io/@dev-0eum/PL-Ch07-2</guid>
            <pubDate>Sat, 16 Dec 2023 12:02:47 GMT</pubDate>
            <description><![CDATA[<h3 id="07-4-relational-and-boolean-expressions">07-4. Relational and Boolean Expressions</h3>
<ul>
<li><p>관계 연산자 (relational operator)
: 두 개의 operands의 value를 비교</p>
</li>
<li><p>관계식 (relational expr)
: Two Operands with an Operator</p>
</li>
<li><blockquote>
<p>values have boolean type each</p>
</blockquote>
</li>
</ul>
<p>[Type] &gt;&gt; Numeric / String / Ordinal(순서)</p>
<ul>
<li>JS &amp; PHP는 특이한 boolean을 갖는다.<pre><code class="language-js">== // with coercion
!= // : String &gt;&gt; Numeric
&quot;7&quot; == 7 // true
</code></pre>
</li>
</ul>
<p>=== // without coercion
!==
&quot;7&quot; === 7 // false</p>
<pre><code>---
### 07-5. Short-Circuit Evaluation
모든 연산을 평가하지 않고 결정되는 평가
예시로 이해하는 게 빠를 것이다
</code></pre><p>(13 * a) * (b / 13 - 1)</p>
<pre><code>a=0 이라면 (b / 13 - 1)은 평가되지 않아도 모든 연산이 평가된다.</code></pre><p>(a &gt;= 0) &amp;&amp; (b &lt; 10)</p>
<pre><code>boolean에서도 동일하다.

---
### 07-6. Assignment Statements
- Conditional Target
``` c
($flag ? $total : $subtotal) = 0</code></pre><ul>
<li><p>Compound Assignment Operator</p>
<pre><code class="language-c">a = a + b
a += b // compound</code></pre>
</li>
<li><p>Unary Assignemnt Operator</p>
<pre><code class="language-c">count++</code></pre>
</li>
<li><p>Assignment Operator as Expr.</p>
<pre><code class="language-c">while((ch = getchar() != EOF) {...}
// ch = getchar()</code></pre>
</li>
<li><p>Multiple Assignments</p>
<pre><code class="language-c">($first, $second, $third) = (20, 30, 40);</code></pre>
</li>
</ul>
<hr>
<h3 id="07-7-mixed-mode-assignment">07-7. Mixed-Mode Assignment</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[PL] Ch07. Expressions & Assignment Statements - 1]]></title>
            <link>https://velog.io/@dev-0eum/PL-Ch07-1</link>
            <guid>https://velog.io/@dev-0eum/PL-Ch07-1</guid>
            <pubDate>Sat, 16 Dec 2023 11:42:40 GMT</pubDate>
            <description><![CDATA[<h3 id="07-1-arithmetic-expr">07-1. Arithmetic Expr</h3>
<h4 id="대부분의-language의-expr은-단항unary이항binary삼항trinary-중-하나">대부분의 Language의 expr은 단항(Unary),이항(Binary),삼항(Trinary) 중 하나.</h4>
<p>Unary - prefix or postfix
: cnt++</p>
<p>Binary - infix
: a + b</p>
<h3 id="연산자-우선순위">&gt; 연산자 우선순위 &lt;</h3>
<h4 id="-associativity-rule">• Associativity Rule</h4>
<p>Base: left to right
except: &quot;**&quot; right to left</p>
<h4 id="-conditional-expr">• Conditional Expr.</h4>
<p>average = (count == 0) ? 0 : sum / count</p>
<p>[Evaluate as following]</p>
<pre><code class="language-c">if (count == 0)
    average = 0
else
    average = sum /count</code></pre>
<h4 id="-operand-evaluate-order">• Operand Evaluate Order</h4>
<p>말 그대로 평가(evaluation)의 순서에 따라 의미가 변화한다.</p>
<ul>
<li>Functional side Effects
: when a function changes a two-way params or a non-local variable.</li>
</ul>
<p>이는 다음과 같은 예시로 쉽게 설명 가능하다.</p>
<ul>
<li>Example<pre><code class="language-c">a = 10;
b = a + fun(a);</code></pre>
이때, fun()이라는 함수가 a를 변화시키는 함수라면 문제가 발생한다.<pre><code class="language-c">int a = 5;
int fun1(int param) {
  a = 17;
  return 3;
}
</code></pre>
</li>
</ul>
<p>void main() {
    a = a + fun1();
}</p>
<pre><code>이렇게 된다면 두 가지 상황이 발생한다.

1) a가 먼저 evaluate
&gt; 8

2) fun1()이 먼저 evaluate
&gt; 20


#### • Referential Transparency
위에서 언급한 문제점과 일맥상통한 문제일 수 있다.
이 개념은 &#39;함수적 부작용(위에서 언급)&#39;과 관련되고 영향을 받는다.

``` c
result1 = (fun(a) + b) / (fun(a) – c); 
temp = fun(a);
result2 = (temp + b) / (temp – c);
</code></pre><p>fun()이 b와 c를 변형시키지 않는다면 result 1과 2는 동일한 값이어야 한다.
만약 부작용이 발생한다면 프로그램의 참조 투명성을 위반한다고 표현한다.</p>
<hr>
<h3 id="07-2-overloaded-operators">07-2 Overloaded Operators</h3>
<p><em>- Loss of compiler error dection</em>
<em>- Loss of readability</em></p>
<p><strong>(still writing now...)</strong></p>
<hr>
<h3 id="07-3-type-conversions">07-3 Type Conversions</h3>
<h4 id="-narrowing--widening-conversion">• Narrowing &amp; Widening Conversion</h4>
<p>ex. Scope
double 
[------------------------]
float
[-------------------]
int
[-------------]</p>
<p><em>- narrowing conversion</em>
위에서 아래로: scope가 줄어듦.
handling 할 수 없는 범위가 있으면 &gt;&gt; 정보 소실 (causes Trouble)</p>
<p><em>- widening conversion</em>
아래에서 위로: scope가 늘어남.
정보 소실의 위험이 없음 &gt;&gt; 안전함.</p>
<h4 id="-mixed-mode-expr">• Mixed Mode expr</h4>
<p>&quot;Cast&quot;
: Coercion
: implicit type conversion
-&gt; Decrease in the [type error detection] ablility of the complier</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[PL] Ch07. Expressions & Assignment Statements - Intro.]]></title>
            <link>https://velog.io/@dev-0eum/PL-Ch07-Intro</link>
            <guid>https://velog.io/@dev-0eum/PL-Ch07-Intro</guid>
            <pubDate>Sat, 16 Dec 2023 10:57:20 GMT</pubDate>
            <description><![CDATA[<h3 id="topics">Topics</h3>
<h4 id="-arithmetic-expr">• Arithmetic Expr</h4>
<h4 id="-overloaded-operators">• Overloaded Operators</h4>
<h4 id="-type-conversions">• Type Conversions</h4>
<h4 id="-relational-and-boolean-expressions">• Relational and Boolean Expressions</h4>
<h4 id="-short-circuit-evaluation">• Short-Circuit Evaluation</h4>
<h4 id="-assignment-statements">• Assignment Statements</h4>
<h4 id="-mixed-mode-assignment">• Mixed-Mode Assignment</h4>
<p>P.S.
[Level of Control Flow]
ch07 - expr 단에서
ch08 - stmt 단에서
ch09 - subprogram 단에서</p>
]]></description>
        </item>
    </channel>
</rss>