<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>H-ding.log</title>
        <link>https://velog.io/</link>
        <description>꾸준히 기록하는 딩딩의 개발일지</description>
        <lastBuildDate>Thu, 20 Jan 2022 09:18:57 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>H-ding.log</title>
            <url>https://images.velog.io/images/hyeon_ding/profile/bdcc1258-1213-4f58-b00f-4980ea139d0c/ㅇㅇㅇ.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. H-ding.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyeon_ding" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[PostgreSQL] Local DB연결]]></title>
            <link>https://velog.io/@hyeon_ding/PostgresSQL-Local-DB%EC%97%B0%EA%B2%B0</link>
            <guid>https://velog.io/@hyeon_ding/PostgresSQL-Local-DB%EC%97%B0%EA%B2%B0</guid>
            <pubDate>Thu, 20 Jan 2022 09:18:57 GMT</pubDate>
            <description><![CDATA[<h2 id="💜-계기">💜 계기</h2>
<h4 id="postgresql와-amazon-rds를-연결해-서버를-구축하고-테스팅을-하면서-직접-데이터를-insert하고-delete하는-과정에서-생길-수-있는-문제들을-깨닫게-되었다-추후에-서버를-배포하게-되었을-때-유저들-데이터로-직접-테스팅을-할-수-없기-때문에-postgres-local-db를-구축하고-연결하였다-">PostgreSQL와 Amazon RDS를 연결해 서버를 구축하고 테스팅을 하면서 직접 데이터를 Insert하고 Delete하는 과정에서 생길 수 있는 문제들을 깨닫게 되었다. 추후에 서버를 배포하게 되었을 때 유저들 데이터로 직접 테스팅을 할 수 없기 때문에 Postgres Local DB를 구축하고 연결하였다 .</h4>
<h2 id="💜-과정">💜 과정</h2>
<h3 id="⭐-postgresql-설치하기">⭐ PostgreSQL 설치하기</h3>
<ul>
<li><a href="https://www.postgresql.org/download/">https://www.postgresql.org/download/</a> 링크로 들어가서 본인의 os에 맞게 설치한다.
<img src="https://images.velog.io/images/hyeon_ding/post/7f8f6a13-22ee-4e01-88d1-e20015716f37/image.png" alt=""><h3 id="⭐-postgresql-설치-확인하기">⭐ PostgreSQL 설치 확인하기</h3>
</li>
<li>window에서는 <strong>SQL Shell</strong> (psql)을 사용해서 설치가 되었는지 확인한다. 
<img src="https://images.velog.io/images/hyeon_ding/post/d387227e-663b-433d-b75e-003399deb36e/image.png" alt=""></li>
</ul>
<h3 id="⭐-datagrip-연결하기">⭐ DataGrip 연결하기</h3>
<p><img src="https://images.velog.io/images/hyeon_ding/post/59d0740c-4495-4c08-997c-9bbe7d84e8d1/image.png" alt="">
<img src="https://images.velog.io/images/hyeon_ding/post/f4674aad-b6b8-4214-9b4c-76c4343c769d/image.png" alt=""></p>
<ul>
<li><strong>Name</strong>: 원하는 이름</li>
<li><strong>Host</strong>: localhost</li>
<li><strong>Port</strong>: 5432</li>
<li><strong>User</strong>: postgres</li>
</ul>
<h3 id="⭐-datagrip-data-추출하기">⭐ DataGrip Data 추출하기</h3>
<h4 id="◼-table-구조">◼ Table 구조</h4>
<ul>
<li>Table 구조를 SQL Script로 추출해서 Table 구조를 옮길 수 있다.
<img src="https://images.velog.io/images/hyeon_ding/post/99a1a98f-92e2-4e21-a35a-a077b29f0a65/image.png" alt="">
<img src="https://images.velog.io/images/hyeon_ding/post/ea6093c2-7151-498a-9841-c8df5544967a/image.png" alt=""></li>
</ul>
<h4 id="◼-table-내의-data">◼ Table 내의 Data</h4>
<ul>
<li>Data를 추출하고 싶은 Table을 클릭하여 Export Data to File을 클릭하면 해당 Table의 Data를 SQL문으로 추출하여 Data를 옮길 수 있다.
<img src="https://images.velog.io/images/hyeon_ding/post/4f8aef98-b271-457e-801a-3a001d701fd4/image.png" alt=""></li>
</ul>
<h3 id="⭐-database-연결하기">⭐ Database 연결하기</h3>
<ul>
<li>.env파일에 위에서 연결한 Postgres DB의 정보를 입력한 후 연결하면 현재 DataGrip에 연결한 DB에서 자유롭게 Data확인이 가능하다.</li>
</ul>
<pre><code>DEV_DB_USER=postgres
DEV_DB_HOST=localhost
DEV_DB=postgres
DEV_DB_PASSWORD=password
</code></pre><h2 id="💜-결과">💜 결과</h2>
<p>배포용 서버를 테스팅 서버로 이용하게 되면 배포 후 테스팅을 실제 유저의 정보로 해야되는 문제가 생길 뿐만 아니라 <strong>안전성</strong>에도 문제가 생기게 된다. </p>
<p>로컬 서버를 분리함으로써 Database 구조가 변경될 때 로컬 DB에서 <strong>충분히 안정성을 검사</strong>하고 배포하는 과정을 거칠 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS - ELB(로드밸런서)]]></title>
            <link>https://velog.io/@hyeon_ding/AWS-ELB%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%84%9C</link>
            <guid>https://velog.io/@hyeon_ding/AWS-ELB%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%84%9C</guid>
            <pubDate>Tue, 09 Nov 2021 10:26:21 GMT</pubDate>
            <description><![CDATA[<h2 id="1-elb란-무엇인가">1. ELB란 무엇인가?</h2>
<h3 id="elb는-elastic-load-balancer는-aws의-로드-밸런서-서비스-입니다">ELB는 Elastic Load Balancer는 AWS의 로드 밸런서 서비스 입니다.</h3>
<p>로드밸런서의 주요 기능은 서버 부하 분산, 즉 로드밸런싱으로 특정 서버에 부하가 몰리지 않도록 적절히 분산을 시킵니다.
<img src="https://images.velog.io/images/hyeon_ding/post/3938eb81-207d-4138-882c-7cce37a589e6/ELB%EA%B5%AC%EC%A1%B02.png" alt="">
로드밸런서가 사용자의 접근을 적당한 서버로 보내주는 역할을 합니다.</p>
<h2 id="2-elb의-유형">2. ELB의 유형</h2>
<p><img src="https://images.velog.io/images/hyeon_ding/post/c7967888-9eb9-4312-9090-12b31cb06aed/%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%84%9C%20%EC%9C%A0%ED%98%95.png" alt=""> </p>
<h3 id="1-application-load-balanceralb">1) Application Load Balancer(ALB)</h3>
<blockquote>
<p>Application Layer: 사용자가 UI로 접하는 응용 프로그램과 관련된 계층으로 HTTP, FTP, DHCP, SMTP, DNS등이 있습니다.</p>
</blockquote>
<ul>
<li>OSI 7 Layer의 <strong>7계층</strong>에 해당하는 Application Layer의 특성을 이용하는 로드밸런서</li>
<li>단순 부하분산뿐만 아니라 HTTP의 헤더 정보를 이용해 부하분산을 실시합니다.</li>
</ul>
<h3 id="2-network-load-balancernlb">2) Network Load Balancer(NLB)</h3>
<blockquote>
<p>Transport Layer: 송신자와 수신자의 논리적 연결을 담당하는 부분으로, 신뢰성있는 연결을 유지할 수 있도록 도와줍니다. 즉 endpoint(사용자)간의 연결을 생성하고 데이터를 얼마나 보냈고 받았는지, 제대로 받았는 지등을 확인합니다. TCP와 UDP가 대표적입니다.</p>
</blockquote>
<ul>
<li>OSI 7 Layer의 4계층에 해당하는 Transport Layer의 특성을 이용하는 로드밸런서</li>
<li>TCP와 UDP를 사용하는 요청을 받아들여 부하분산을 실시</li>
</ul>
<h2 id="3-로드밸런싱의-기능">3. 로드밸런싱의 기능</h2>
<h3 id="natnetwork-address-translation">NAT(Network Address Translation)</h3>
<ul>
<li>사설 IP주소를 공인 IP주소로 바꾸는 데 사용하는 통신망의 주소 변조기입니다.<h3 id="tunneling">Tunneling</h3>
</li>
<li>인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 합니다.</li>
<li>데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있습니다.<h3 id="dsrdynamic-source-protocol">DSR(Dynamic Source Protocol)</h3>
</li>
<li>로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP주소가 아닌 클라이언트의 IP주소로 전달해서 네트워크 스위치를 거치지않고 바로 클라이언트를 찾아갑니다.</li>
</ul>
<h2 id="4-서버-확장-방식">4. 서버 확장 방식</h2>
<h3 id="1-scale-up">1) Scale Up</h3>
<ul>
<li>성능이나 용량 증강을 목적으로 하나의 서버에 디스크를 추가하거나 CPU나 메모리를 업그레이드 시키는 것</li>
<li>기존의 하드웨어를 보다 높은 사양으로 업그레이드하는 방식</li>
<li>수직 스케일링(Vertical Scaling) 
<img src="https://images.velog.io/images/hyeon_ding/post/530c7ead-1d73-4a94-9ff9-c40bbce810ec/scale%20up.jpg" alt=""><h3 id="2-scale-out">2) Scale out</h3>
</li>
<li>기존의 서버와 같은 사양 또는 비슷한 사양의 서버 대수를 증가시키는 방법으로 처리 능력을 향상 시키는 것</li>
<li>여러 대의 서버가 분산처리할 수 있도록 요청을 나누어주는 방식</li>
<li>수평 스케일링(Horizontal Scaling)</li>
<li>서버가 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 <strong>로드밸런싱</strong> 필수 동반
<img src="https://images.velog.io/images/hyeon_ding/post/fbbcad78-e020-43d3-bc5b-d1721a790721/scale%20out.jpg" alt=""></li>
</ul>
<h2 id="5-elb-관련-실습">5. ELB 관련 실습</h2>
<h3 id="1-인스턴스-생성">1) 인스턴스 생성</h3>
<p>Ubuntu Server 20.04 LTS (HVM), SSD Volume Type 선택
t2.micro 선택
나머지는 기본 설정 그대로!
<img src="https://images.velog.io/images/hyeon_ding/post/d8043144-99a1-4b4e-a1c2-0cf032ec0e50/image.png" alt=""></p>
<h3 id="2-인스턴스-연결">2) 인스턴스 연결</h3>
<p>해당 인스턴스 마우크 오른쪽 클릭 후 연결 선택 - 다음페이지도 연결 선택
<img src="https://images.velog.io/images/hyeon_ding/post/c83497a5-9a9a-4652-97bc-ed9398eb1d52/image.png" alt="">
<img src="https://images.velog.io/images/hyeon_ding/post/1f02c573-ad1d-4fa4-866b-7ef627c1e8f5/image.png" alt="">
이 화면이 나온다면 연결 성공!</p>
<blockquote>
<p>sudo apt update
sudo apt install apache2 php</p>
</blockquote>
<p>위의 코드 입력 후 잘 연결되었는지 확인을 위해 해당 인스턴스의 퍼블릭 IP주소를 입력해 접속해봅니다.
<strong>Ubuntu Default Page</strong>가 나온다면 연결 성공!</p>
<blockquote>
<p>sudo vim /var/www/html/index.php</p>
</blockquote>
<p>위 코드로 파일을 하나 생성합니다.</p>
<pre><code>&lt;?php
print($_SERVER[&#39;SERVER_ADDR&#39;]);
?&gt;             </code></pre><p>파일(index.php) 안에 위 코드를 입력하면 현재 우리가 실행하고 있는 웹페이지가 어떤 내부 IP를 가지고 있는지를 출력합니다.</p>
<p>해당 인스턴스의 퍼블릭 IP주소/index.php를 입력해서 <strong>인스턴스의 프라이빗 IPv4주소</strong>가 출력되면 연결 성공!</p>
<p>이 인스턴스 하나로 서비스를 하다가 부족하다고 느끼면 로드밸런서를 웹서버 앞에두고 부하를 분산시킬 수 있습니다.
<img src="https://images.velog.io/images/hyeon_ding/post/9703db63-d49a-4918-842b-194c8f58cda5/image.png" alt="">
트래픽들이 들어오게 되면 그 트래픽을 Load Balancer가 모두 받고 각각의 인스턴스로 보내게 됩니다. 
서로 같은 속성을 가지고 있는 인스턴스들을 그룹핑하는 Target Group을 만들고 그들을 Load Balancer에 등록해 Target Group을 대상으로 트래픽을 보내주게 됩니다. </p>
<h3 id="3-대상-그룹-등록">3) 대상 그룹 등록</h3>
<p>메뉴에서 로드 밸런싱 밑에 대상 그룹 클릭
<img src="https://images.velog.io/images/hyeon_ding/post/429e67bc-17cf-418c-8367-bf32e59cb43c/image.png" alt=""></p>
<p>다음 선택 후 해당 인스턴스를 체크하고 <strong>&#39;아래에 보류 중인 것으로 포함&#39;</strong>클릭 후 <strong>&#39;대상 그룹 생성&#39;</strong> 선택하면 해당 인스턴스를 대상 그룹에 등록 완료!</p>
<h3 id="4-대상-그룹-로드밸런서에-연결">4) 대상 그룹 로드밸런서에 연결</h3>
<p>메뉴에서 로드 밸런싱 밑에 대상 로드밸런서 클릭
Application Load Balancer 생성</p>
<ol>
<li>네트워크 매핑 모두 선택</li>
<li>보안 그룹 - 새 보안 그룹 생성 후 선택
<img src="https://images.velog.io/images/hyeon_ding/post/a851bb75-7413-445a-96d2-a3f5a104709e/image.png" alt=""></li>
<li>리스너 및 라우팅 - HTTP / 81(ELB를 위한 방화벽) / TG 선택</li>
<li>로드 밸런서 생성</li>
</ol>
<p>해당 로드 밸런서의 DNS이름:81로 접속하면 <strong>Ubuntu Default Page</strong>가 나옵니다. DNS이름:81/index.php를 입력한 후 <strong>인스턴스의 프라이빗 IPv4주소</strong>가 출력되면 ELB에 인스턴스 연결 완료!</p>
<p>-&gt; 현재는 하나의 인스턴스만 연결된 상태 - 오히려 속도가 느려진다.</p>
<h3 id="5-복수-개의-인스턴스-연결">5) 복수 개의 인스턴스 연결</h3>
<p><img src="https://images.velog.io/images/hyeon_ding/post/413f6cdc-7c30-4f5f-9426-5ca381b96d99/image.png" alt="">
기존 인스턴스의 이미지 생성(이름만 적고 생성 누르기)</p>
<p>메뉴 - 이미지 - AMI를 선택하면 방금 생성한 이미지를 볼 수 있습니다.
해당 이미지 마우스 오른쪽 클릭 후 시작하기 클릭 후 아까 처음 인스턴스 생성과 똑같은 조건의 인스턴스를 생성해줍니다.</p>
<p>로드밸런스에 연결되어있는 대상 그룹 TG에 해당 인스턴스를 추가해줍니다.
<img src="https://images.velog.io/images/hyeon_ding/post/98a1344f-06f9-4401-89ef-cd5a6aec700c/image.png" alt="">
대상 등록을 선택해 방금 생성한 인스턴스를 등록합니다.
=&gt; 인스턴스 2개가 TG라는 그룹을 통해서 ELB에 연결됩니다.</p>
<h3 id="6-elb주소로-접속-후-확인">6) ELB주소로 접속 후 확인</h3>
<p>해당 로드 밸런서의 DNS이름:81/index.php로 접속후 새로고침을 하면 로드밸런서가 들어오는 트래픽을 연결되어 있는 인스턴스들에게 분산하고 있는 것을 볼 수 있습니다.</p>
<p>참고자료
<a href="https://nesoy.github.io/articles/2018-06/Load-Balancer">https://nesoy.github.io/articles/2018-06/Load-Balancer</a>
<a href="https://junghyungil.tistory.com/151">https://junghyungil.tistory.com/151</a>
<a href="https://www.youtube.com/watch?v=s9FHdj6jd_U&amp;t=790s">https://www.youtube.com/watch?v=s9FHdj6jd_U&amp;t=790s</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1. 노드 시작하기]]></title>
            <link>https://velog.io/@hyeon_ding/1.-%EB%85%B8%EB%93%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@hyeon_ding/1.-%EB%85%B8%EB%93%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 12 Mar 2021 06:46:41 GMT</pubDate>
            <description><![CDATA[<h2 id="--이벤트-기반이란">- 이벤트 기반이란?</h2>
<h3 id="이벤트가-발생했을-때-미리-지정해둔-작업을-수행하는-방식">이벤트가 발생했을 때 미리 지정해둔 작업을 수행하는 방식</h3>
<blockquote>
<h4 id="1-이벤트-리스너에-콜백-함수-등록">1. 이벤트 리스너에 콜백 함수 등록</h4>
</blockquote>
<h4 id="2-이벤트-발생-시스템---이벤트-리스너">2. 이벤트 발생 (시스템 -&gt; 이벤트 리스너)</h4>
<h4 id="3-등록된-콜백-함수-호출-이벤트-리스너---시스템">3. 등록된 콜백 함수 호출 (이벤트 리스너 -&gt; 시스템)</h4>
<p>예시)
<img src="https://images.velog.io/images/hyeon_ding/post/fe99318c-cd5a-4d83-8b25-e9674fe59a0d/image.png" alt=""></p>
<p>출력 결과:</p>
<blockquote>
<p>시작
끝
3초 후 실행</p>
</blockquote>
<p>setTimeout : 특정 밀리초이후에 코드를 실행</p>
<ul>
<li><p>이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할, 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복</p>
<ul>
<li>태스크 큐 : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간, </li>
<li>백그라운드 : 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳</li>
</ul>
</li>
</ul>
<p>** run 함수 이동경로**</p>
<ol>
<li>호출 스택에 쌓인다.</li>
<li>setTimeout 실행 시 콜백 run은 백그라운드로 이동한다.</li>
<li>백그라운드에서 3초 후 태스크 큐로 보낸다.</li>
<li>호출 스택 실행이 끝나 비워지면 이벤트 루프가 태스크 큐의 콜백(run)을 호출 스택으로 올린다.</li>
<li>호출 스택에서 비워진다.</li>
<li>이벤트 루프는 태스크 큐에 콜백이 들어올 때까지 대기한다.</li>
</ol>
<h2 id="논블로킹-io">논블로킹 I/O</h2>
<h3 id="논블로킹--이전-작업이-완료될-때까지-멈추지-않고-다음-작업을-수행함">논블로킹 : 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함</h3>
<h3 id="io--input--ouput">I/O : Input / Ouput</h3>
<p><img src="https://images.velog.io/images/hyeon_ding/post/0bde4c5d-dae2-4503-b346-a257215c6f62/image.png" alt="">출력 결과:</p>
<blockquote>
<p>시작
작업 끝
다음 작업</p>
</blockquote>
<p>longTasking 함수가 종료되기 전까지 <strong>console.log(&quot;다음 작업&quot;)</strong>이 호출되지 않는다.</p>
<p><img src="https://images.velog.io/images/hyeon_ding/post/54a46482-2051-449c-9575-60680ee556cf/image.png" alt="">출력 결과:</p>
<blockquote>
<p>시작
다음 작업
작업 끝</p>
</blockquote>
<p>setTimeout(콜백, 0) : 코드를 논블로킹으로 만들기 위해 사용되는 기법 중 하나</p>
<p>밀리초를 0으로 설정했지만 노드에서는 기본적인 지연 시간이 있으므로 바로 실행되지 않는다.</p>
<h2 id="--싱글스레드">- 싱글스레드</h2>
<h3 id="하나의-프로세스에서-하나의-스레드-실행">하나의 프로세스에서 하나의 스레드 실행</h3>
<ul>
<li>싱글 스레드, 블로킹 모델<img src="https://images.velog.io/images/hyeon_ding/post/a42db17d-ea54-4cbd-9f10-e1a68ffafb71/ss.jpg" alt=""></li>
</ul>
<p>점원 한명이 주문을 받아 주방에 넘기고, 주방에서 요리가 나오면 손님에게 서빙을 한다. 그 후 다음 손님의 주문을 받는다.</p>
<ul>
<li>싱글 스레드, 논블로킹 모델
<img src="https://images.velog.io/images/hyeon_ding/post/c92746e9-4723-466f-9706-9558bd451cde/image.png" alt=""><blockquote>
<p>노드가 채택하고 있는 방식</p>
</blockquote>
</li>
</ul>
<p>점원이 한 손님의 주문을 받고, 주방에 주문 내역을 넘긴 뒤 다음 손님의 주문을 받는다. 그 후 주방에서 요리가 완료되면 완료된 순서대로 손님에게 서빙한다.</p>
<h3 id="프로세스와-스레드의-차이">*프로세스와 스레드의 차이</h3>
<p><img src="https://images.velog.io/images/hyeon_ding/post/dd3ade89-ad10-4617-9a1e-7af061190d76/image.png" alt=""></p>
<h4 id="프로세스--운영체제에서-할당하는-작업의-단위">프로세스 : 운영체제에서 할당하는 작업의 단위</h4>
<ul>
<li>노드나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스</li>
<li>프로세스 간에는 메모리 등의 자원을 공유하지 않는다.<h4 id="스레드--프로세스-내에서-실행되는-흐름의-단위">스레드 : 프로세스 내에서 실행되는 흐름의 단위</h4>
</li>
<li>하나의 프로세스는 스레드를 여러 개 가질 수 있다.</li>
<li>스레드들은 부모 프로세스의 자원을 공유한다. (같은 메모리에 접근 가능)</li>
</ul>
<blockquote>
<p>노드는 스레드를 늘리는 대신, 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 <strong>멀티 프로세싱 방식</strong></p>
</blockquote>
<h3 id="멀티스레드와-멀티-프로세싱의-차이">*멀티스레드와 멀티 프로세싱의 차이</h3>
<p>멀티 스레드 : 하나의 프로세스가 여러 개의 작업을 각각 스레드를 이용하여 동시에 작동시킬 수 있다.</p>
<p>멀티 프로세싱 : 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 한다.
<img src="https://images.velog.io/images/hyeon_ding/post/c4126d32-0ac6-424f-b59b-38a7f098b7a4/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TOPCIT 1.2 내용정리]]></title>
            <link>https://velog.io/@hyeon_ding/TOPCIT-1.2-%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hyeon_ding/TOPCIT-1.2-%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 03 Feb 2021 09:34:59 GMT</pubDate>
            <description><![CDATA[<h2 id="12-소프트웨어-재사용">1.2 소프트웨어 재사용</h2>
<h3 id="121-소프트웨어-재사용">1.2.1 소프트웨어 재사용</h3>
<h4 id="가-소프트웨어-재사용-개요">가) 소프트웨어 재사용 개요</h4>
<ol>
<li>소프트웨어 재사용 배경</li>
</ol>
<ul>
<li>소프트웨어 위기로 인한 품질 및 생산성 저하</li>
<li>소프트웨어 품질 확보 노력</li>
</ul>
<ol start="2">
<li>소프트웨어 재사용 정의</li>
</ol>
<ul>
<li>사용 소프트웨어 개발관련 지식을 <strong>표준화</strong>하여 개발 생산성을 높이기 위해 반복적으로 사용하기에 적합하도록 구성하는 방법 </li>
<li>품질을 인정받았던 소프트웨어 전체 또는 일부분을 다시 사용하여 신규 개발되는 소프트웨어의 <strong>신뢰성을 높이고 개발 비용을 감소</strong>시켜주는 방안</li>
</ul>
<ol start="3">
<li>소프트웨어 재사용의 목적<blockquote>
<p>신뢰, 확장, 생산</p>
</blockquote>
</li>
</ol>
<ul>
<li>신뢰성 : 사전 성능 검증됨</li>
<li>확장성 : 검증된 기능 기반으로 upgrade 용이</li>
<li>생산성 : 전체적 개발 프로세스 향상</li>
</ul>
<h4 id="나-소프트웨어-재사용의-대상">나) 소프트웨어 재사용의 대상</h4>
<ul>
<li>일반적인 지식</li>
<li>설계 정보</li>
<li>데이터 정보</li>
<li>프로그램 코드</li>
</ul>
<h4 id="다-소프트웨어-재사용의-원칙">다) 소프트웨어 재사용의 원칙</h4>
<blockquote>
<p>모범하소 자신일</p>
</blockquote>
<ul>
<li>모듈성 : 최소한의 결합도 및 최대한의 응집력 </li>
<li>범용성 : 일반적으로 활용될 수 있는 정도</li>
<li>하드웨어 독립성 : 가능한 실행 하드웨어 기종과 무관해야 함</li>
<li>소프트웨어 독립성 : OS 또는 DBMS와는 무관하게 운영해야 함</li>
<li>자기문서화 : 모듈의 정확한 기능, 인터페이스를 기술</li>
<li>신뢰성 : 품질을 믿고 사용할 수 있어야 함</li>
<li>일반성 :  많은 개발자들에게 공통적으로 필요하고 사용 가능해야 함</li>
</ul>
<p>+)
OS (Operating System) : 운영체제
DBMS (Data Base Management System) : 데이터베이스 관리 시스템</p>
<h4 id="라-실무에서-재사용-구현의-문제점">라) 실무에서 재사용 구현의 문제점</h4>
<ul>
<li>공통으로 사용할 수 있는 소프트웨어 모듈을 발견하기 어려움</li>
<li>소프트웨어 표준화 부족</li>
<li>부품이 개발비가 더 들 수 있음</li>
<li>효과가 오랜 시간 경과 후 나타남</li>
<li>현존한느 소프트웨어 부품에서 재사용 부품의 추출이 비현실적</li>
</ul>
<h4 id="마-소프트웨어-재사용의-장애요인-및-대책">마) 소프트웨어 재사용의 장애요인 및 대책</h4>
<ol>
<li>소프트웨어 재사용의 장애요인</li>
</ol>
<ul>
<li>관리자와 개발 담당자들의 거부 반응</li>
<li>사회적 또는 법적 장애</li>
</ul>
<ol start="2">
<li>소프트웨어 재사용의 장애요인 제거 대책</li>
</ol>
<ul>
<li>기술적 방안 : 재사용 소프트웨어 라이브러리 구축, 개발 방법론 활용</li>
<li>관리, 제도적 방안 : 보상제도의 확립, 조직의 변화</li>
</ul>
<h4 id="바-재사용-적용-시-고려사항">바) 재사용 적용 시 고려사항</h4>
<ul>
<li>생산성 향상이 가능해야 함</li>
<li>재사용 문화 조성을 위한 제도 정착</li>
<li>초기 투자를 통한 재사용 환경 구축</li>
<li>도구의 지원이 있어아 함</li>
<li>지속적인 라이브러리의 개선 및 보강<h4 id="사-소프트웨어-재사용의-효과">사) 소프트웨어 재사용의 효과</h4>
</li>
<li>높은 품질의 소프트웨어 생산을 위한 공유 및 활용효과</li>
<li>시스템 개발에 다한 정보공유</li>
</ul>
<h3 id="122-역공학">1.2.2 역공학</h3>
<h4 id="가-역공학의-정의">가) 역공학의 정의</h4>
<ul>
<li>소프트웨어 공학의 한 분야로 이미 만들어진 시스템을 <strong>역으로 추척</strong>하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일</li>
<li>시스템을 이해하여 수정하는 소프트웨어 <strong>유지보수</strong> 단계에서 수행</li>
<li>소프트웨어 생명주기 마지막 단계에서 얻어지는 포로그램 또는 문서 등을 이용, 초기 단계의 산출물에 해당하는 정보 또는 문서를 만들어내는 일 </li>
</ul>
<p>&lt;역공학의 Input / Output&gt;</p>
<ul>
<li>Input : 원시코드, 작업절차, 라이브러리 등 입출력 형태의 자료 문서</li>
<li>Output : 구조도, 자료 흐름도, 제어 흐름 그래프, 개체 관계도</li>
</ul>
<h4 id="나-역공학이-필요한-이유">나) 역공학이 필요한 이유</h4>
<ul>
<li>가동중인 시스템의 유지보수가 어려운 경우</li>
<li>시스템 효율이 저하된 경우</li>
<li>파일 시스템으로 개발된 업무를 관계형 데이터베이스로 재구축 하려는 경우</li>
<li>기본 메인 프레임을 다운사이징 하는 경우</li>
</ul>
<h4 id="다-역공학의-장점">다) 역공학의 장점</h4>
<ul>
<li>개발된 소프트웨어의 분석을 도와줌</li>
<li>유지보수성 향상</li>
<li>기존 시스템 정보를 Repository에 보관하여 CASE 사용을 용이하게 함</li>
</ul>
<h4 id="라-역공학의-종류">라) 역공학의 종류</h4>
<ul>
<li>논리역공학 : 원시코드로부터 정보를 추출해 물리적 설계 정보저장소에 저장</li>
<li>자료역공학 : 기존 데이터베이스를 수정하거나 새로운 데이터베이스 관리시스템으로 전이하는 역할 수행</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TOPCIT 1.1 내용정리]]></title>
            <link>https://velog.io/@hyeon_ding/TOPCIT-1.1-%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hyeon_ding/TOPCIT-1.1-%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 03 Feb 2021 08:35:17 GMT</pubDate>
            <description><![CDATA[<h2 id="11-소프트웨어-공학-개요">1.1 소프트웨어 공학 개요</h2>
<h3 id="111-소프트웨어-공학의-배경과-목적">1.1.1 소프트웨어 공학의 배경과 목적</h3>
<h4 id="가-소프트웨어-공학-소개">가) 소프트웨어 공학 소개</h4>
<blockquote>
<p><strong>P.P.T</strong> </p>
</blockquote>
<ul>
<li>프로세스 (Process)</li>
<li>인력 (People)</li>
<li>인프라 기술 (Technology)</li>
</ul>
<p><img src="https://images.velog.io/images/hyeon_ding/post/57f3d862-855a-4c0b-af56-c92840df8b1c/image.png" alt=""></p>
<h4 id="나-소프트웨어-공학-배경">나) 소프트웨어 공학 배경</h4>
<h4 id="다-소프트웨어-공학의-4가지-중요요소">다) 소프트웨어 공학의 4가지 중요요소</h4>
<blockquote>
<ul>
<li>방법</li>
</ul>
</blockquote>
<ul>
<li>도구</li>
<li>절차</li>
<li>사람</li>
</ul>
<ol>
<li><p>방법 : 프로젝트 계획 수립과 추정, 시스템과 소프트웨어 분석, 자료구조</p>
</li>
<li><p>도구 : 일을 수행할 때 생산성 혹은 일관성을 목적으로 사용하는 방법
들을 자동화나 반자동화 시켜 놓은 것</p>
</li>
<li><p>절차 : <strong>방법 + 도구</strong> -&gt; 소프트웨어 합리적 개발을 가능하도록 함</p>
</li>
<li><p>사람</p>
</li>
</ol>
<h3 id="112-소프트웨어-개발-생명주기">1.1.2 소프트웨어 개발 생명주기</h3>
<h4 id="가-정의">가) 정의</h4>
<p>: 사용자 환경 및 문제점 이해부터 운용/유지 보수까지의  모든 과정</p>
<ul>
<li>일반적인 소프트웨어 생명주기</li>
</ul>
<blockquote>
<p>타당성 검토 -&gt; 개발 계획 -&gt; 요구사항 분석 -&gt; 설계 -&gt; 구현 -&gt; 테스트
-&gt; 운용 -&gt; 유지보수</p>
</blockquote>
<h4 id="나-목적">나) 목적</h4>
<ul>
<li><p>프로젝트 관리</p>
<h4 id="다-소프트웨어-생명주기-선정">다) 소프트웨어 생명주기 선정</h4>
</li>
<li><p>선택한 모델은 프로젝트에 존재하는 <strong>리스크 / 불확실성</strong>을 최소화 시킬 수 있어야 한다.</p>
</li>
<li><p>ex) 폭포수 모델, 프로토타입 모델, 진화 모델, 점증적 모델</p>
</li>
</ul>
<h4 id="라-소프트웨어-생명주기-모델-종류">라) 소프트웨어 생명주기 모델 종류</h4>
<p><strong>1. V 모델</strong></p>
<ul>
<li>시스템의 요구사항이 모두 <strong>식별되고 명확</strong>할 때 이상적인 생명주기 모델</li>
<li>프로젝트에 적용, 관리하기가 용이</li>
<li>프로젝트의 <strong>검증 및 확인</strong>을 강조하는 모델</li>
<li>개발 활동과 이에 해당하는 테스트 활동이 병행됨</li>
<li>테스트 동안 결함이 발견되었을 경우, 개발 활동의 어느 단계를<br>재 수행되어야 하는 지 알 수 있다.</li>
</ul>
<p><strong>2. VP 모델 (V Model with Prototyping)</strong>
Prototyping : 시스템에 대한 이해 또는 리스크, 불확실성 요소와 같은 이슈를 해결하기 위해 시스템 혹은 그 일부를 빠르게 개발하는 방법</p>
<ul>
<li>불확실성 요소나 리스크를 줄일 수 있음</li>
<li>개발자와 고객의 공통적인 이해를 이끌어 낼 수 있음</li>
</ul>
<blockquote>
<p>프로토타입 기법의 접근방법</p>
</blockquote>
<p><em>1) 적용 가능한 해결책 조사, 이를 적용</em></p>
<ul>
<li>불확실성 요소를 정의</li>
<li>해결책 찾기</li>
<li>적용하기 위한 방법 정의</li>
<li>해결책 적용 (반복 수행)</li>
<li>그 결과를 통해 불확실성 요소의 원인 찾기</li>
</ul>
<p>-&gt; 해결하려는 문제가 명확하지 않은 경우</p>
<p><em>2) 여러가지 선택 가능한 해결책을 열거, 정해진 기준에 따라 이를 평가</em></p>
<ul>
<li>불확실성 요소를 정의</li>
<li>선택 가능한 해결책 열거</li>
<li>선택 기준 정의</li>
<li>선택 기준에 따라 해결책 평가</li>
<li>가장 적합한 해결책 선택</li>
</ul>
<p>-&gt; 적용하려는 해결책에 리스크나 불확실성 요소가 존재하는 경우</p>
<p><strong>3. 점증적 모델</strong></p>
<ul>
<li>핵심이 되는 부분 먼저 개발 후 나머지 기능 구현</li>
<li>V 모델, VP 모델 모두 적용 가능</li>
<li><strong>시스템 개발 시간을 줄일 필요가 있는 경우</strong> 유용</li>
<li>시간이 지남에 따라 개선 여지가 있는 경우 유용</li>
</ul>
<p><strong>4. 진화 모델</strong></p>
<ul>
<li>전체 시스템에 대한 개발 단계 여러 번 반복</li>
<li>하나의 시스템 개발되어 사용, 변경 사항 도출 -&gt; 다음 시스템 개발에 반영</li>
<li><strong>시스템 개발 시간을 줄일 필요가 있는 경우</strong> 유용</li>
<li>제품의 개선이 지속적으로 요구되는 경우 유용</li>
</ul>
<p>*<em>5. 혼합 모델 *</em>
점증적 모델 + 진화 모델 -&gt; 기존의 기능 향상, 새로운 기능 추가</p>
<ul>
<li>시스템 초기 교육 가능 - 실무에 필요한 개선사항 도출</li>
<li>개발 기간 단축 - 경쟁력 강화</li>
<li>전문 분야별로 나눠서 시스템 개발 가능</li>
</ul>
<h3 id="113-소프트웨어-개발-방법론">1.1.3 소프트웨어 개발 방법론</h3>
<h4 id="가-소프트웨어-개발-방법론의-필요성">가) 소프트웨어 개발 방법론의 필요성</h4>
<ol>
<li>개발 생산성 향상</li>
<li>효과적인 프로젝트 관리</li>
<li>의사소통 수단 제공</li>
<li>일정 수준의 품질 보증</li>
</ol>
<h4 id="나-소프트웨어-개발-방법론-비교">나) 소프트웨어 개발 방법론 비교</h4>
<blockquote>
<p>구정객C</p>
</blockquote>
<p><img src="https://images.velog.io/images/hyeon_ding/post/cfce2c38-6ffa-4a43-b9aa-6a20c806bdea/%EC%82%AC%EC%A7%843.jpg" alt=""></p>
<ul>
<li>CBD : Compoenet Based Development</li>
</ul>
<h4 id="다-소프트웨어-개발-단계">다) 소프트웨어 개발 단계</h4>
<p> :  소프트웨어 <strong>생명주기</strong>에 따라 정의</p>
<blockquote>
<p> 요구사항 분석 -&gt; 설계 -&gt; 구현 -&gt; 테스팅 </p>
</blockquote>
<ol>
<li>요구사항 분석</li>
</ol>
<ul>
<li>개념적 단계</li>
<li>무엇을 개발할 것인지 정확히 결정</li>
<li>사용자의 요구를 이해하는 단계</li>
<li>개발 비용을 감소시킬 수 있는 단계</li>
<li>전체 소프트웨어 개발 기간과 비용의 초과, 품질 저하 미연에 방지 가능</li>
</ul>
<ol start="2">
<li>설계</li>
</ol>
<ul>
<li>물리적 실현의 첫 단계</li>
<li>시스템 구조 결정</li>
<li>품질에 직접적 영향 줌</li>
<li>설계가 제대로 되지 않으면 시스템 안정감 저하 -&gt; 유지보수 어려움</li>
</ul>
<ol start="3">
<li>구현</li>
</ol>
<ul>
<li>목표 : 요구사항을 만족할 수 있도록 프로그램 하는 것</li>
<li>상세 설계나 사용자 지침서에 기술된 것과 일치하도록 개발</li>
<li>코딩 표준 정하고 이를 기반으로 명확하게 코드 작성</li>
</ul>
<ol start="4">
<li>테스팅</li>
</ol>
<ul>
<li>정해진 요구 만족하는지, 예상과 실제 결과의 차이가 어떠한지 검사하고, 평가하는 일련의 과정</li>
<li>소프트웨어의 품질을 확보하기 위해 결함을 찾아내는 일련의 작업</li>
<li>개발한 소프트웨어 품질에 대한 평가와 품질 향상을 위한 수정 작업 포함</li>
</ul>
<h3 id="114-애자일-개발-방법론">1.1.4 애자일 개발 방법론</h3>
<h4 id="가-애자일-방법론-종류">가) 애자일 방법론 종류</h4>
<ul>
<li>스크럼 (Scrum)</li>
<li>익스트림 프로그래밍 (eXtreme Programming, XP)</li>
</ul>
<h4 id="나-애자일-개발-방법론---xp">나) 애자일 개발 방법론 - XP</h4>
<ol>
<li>XP 개요</li>
</ol>
<ul>
<li>중소규모 개발 조직에 적합한 경량화된 개발방식</li>
<li>반복적 개발방법론의 일종</li>
</ul>
<ol start="2">
<li>XP 개발절차 및 용어
<img src="https://images.velog.io/images/hyeon_ding/post/2540fc26-33ae-4a50-a4bf-3a5f92f4a243/image.png" alt=""></li>
</ol>
<ul>
<li>유저스토리 : 요구사항 수집, 의사소통의 도구, 기능단위의 필요한 내용 기재</li>
<li>스파이크 : 어려운 요구사항 혹은 잠재 솔루션을 고려한 간단한 프로그램
목적) 사용자 스토리의 신뢰성 증대, 기술 문제의 위험 감소</li>
<li>릴리즈 계획 : 전체 프로젝트에 데한 배포 계획 수립, 반복들을 균일하게 유지</li>
<li>승인 테스트 : 릴리즈 전 인스 테스트, 고객이 직접 수행</li>
<li>작은 릴리즈 : 소규모로 빈번하게 배포 -&gt; 고객에게 이득을 조기에 제공 가능</li>
</ul>
<ol start="3">
<li>XP 가치<blockquote>
<p>의사소통, 단순성, 피드백, 용기, 존중</p>
</blockquote>
</li>
</ol>
<ul>
<li>의사소통 : 팀 단위 개발에서 가장 중요, 고객, 개발자, 관리자들 간의 의사소통을 통해 문제를 해결하고 팀 빌딩을 강화해야 함</li>
<li>단순성 : 불필요한 복잡성 제거 - 설계를 단순,명확하도록 유지</li>
<li>피드백 : 최대한 많은 피드백을 만들어 개선에 활용</li>
<li>용기 : 요구사항 및 기술 변경에 용감하게 대처, 단순함 추구, 피드백 강화</li>
<li>존중 : 팀에 속한 사람들을 존중</li>
</ul>
<ol start="4">
<li>XP의 실천방법
<img src="https://images.velog.io/images/hyeon_ding/post/e09e70c9-2661-4d0a-92c9-bf1dcb3ce109/image.png" alt=""></li>
</ol>
<h4 id="다-스크럼-scrum">다) 스크럼 (SCRUM)</h4>
<ol>
<li>스크럼 개요</li>
</ol>
<ul>
<li>프로젝트 관리를 위한 애자일 방법론</li>
<li>경험적 관리기법의 대표적인 형태</li>
</ul>
<p>&lt;스크럼 역할자 유형&gt;</p>
<blockquote>
<p>P.O / S.M / S.T =&gt; <strong>SM POST</strong></p>
</blockquote>
<p>제품 책임자 (<strong>P</strong>roduct <strong>O</strong>wner) - 팀장</p>
<ul>
<li>제품 기능목록에 해당하는 제품 백로그 만듦</li>
<li>우선순위 조정</li>
<li>새로운 항목 추가</li>
<li>스프린트 계획 수립 시점 : 핵심 역할, 시작 후 : 팀의 운영에 관여하지 않음</li>
</ul>
<p>스크럼 마스터 (<strong>S</strong>crum <strong>M</strong>aster) - 관리자</p>
<ul>
<li>팀의 업무를 방해하는 요소 제거에 노력</li>
<li>원칙과 가치를 지키면서 팀이 개발을 진행할 수 있도록 지원</li>
</ul>
<p>스크럼 팀 (<strong>S</strong>crum <strong>T</strong>eam) - 개발자</p>
<ul>
<li>일반적으로 최소 5명 최대 9명</li>
<li>사용자 스토리를 사용하여 한 스프린트 동안 개발할 기능 도출</li>
</ul>
<ol start="2">
<li>스크럼 프로세스</li>
</ol>
<ul>
<li>스프린트 : 1 ~ 4주 단위의 반복개발기간</li>
<li>3가지 미팅 : 일일 스크럼, 스프린트 계획, 스프린트 리뷰</li>
<li>3가지 산출물 : 제품 백로그, 스프린트 백로그, 소멸 차트</li>
</ul>
<p>&lt;스크럼 프로세스 산출물&gt;</p>
<blockquote>
<p>제품 백로그, 스프린트 백로그, 소멸 차트</p>
</blockquote>
<ul>
<li>제품 백로그 
제품에 담고자 하는 기능의 우선순위를 정리한 목록
P.O가 주로 우선순위를 결정</li>
<li>스프린트 백로그
하나의 스프린트동안 개발할 목록
각 과업은 시간 단위로 추정</li>
<li>소멸 차트 : 개발을 완료하기까지 남은 작업량을 보여주는 그래프</li>
</ul>
<p>&lt;스크럼 프로세스 산출물&gt;</p>
<blockquote>
<p>스프린트 계획, 일일 스크럼, 스프린트 리뷰</p>
</blockquote>
<ul>
<li>스프린트 계획
각 스프린트에 대한 목표를 세우고 제품 백로그부터 스프린트에서 진행할 
항목을 선택</li>
<li>일일 스크럼 : 매일 진행하는 프로젝트 진행상황을 공유하는 회의</li>
<li>스프린트 리뷰 : 목표를 달성했는지 작업 진행과 결과물을 확인하는 회의
스크럼 팀 - 작업한 결과를 참석자들에게 데모하고 피드백 받기
스크럼 마스터 - 잘된 점, 아쉬웠던 점, 개선할 사항 등을 찾기위한 회고 진행</li>
</ul>
<ol start="3">
<li>스크럼 특징</li>
</ol>
<ul>
<li>투명성 : 프로젝트가 어떤 상태인지 어떤 문제점이 있는지 정확히 파악</li>
<li>타임박싱 : 스크럼을 진행하는데 들어가는 시간을 제한</li>
<li>커뮤니케이션 </li>
<li>경험주의 모델 : 개개인의 경험 중요</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Android] View Binding에 대해 알아보기]]></title>
            <link>https://velog.io/@hyeon_ding/Android-View-Binding%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@hyeon_ding/Android-View-Binding%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Tue, 26 Jan 2021 19:23:56 GMT</pubDate>
            <description><![CDATA[<h2 id="view-binding이란">View Binding이란?</h2>
<p>뷰와 상호 작용하는 코드를 쉽게 ​​작성할 수 있는 기능입니다. 각 XML 레이아웃 파일의 바인딩 클래스가 자동으로 생성되고 이를 이용하여 해당 xml에 존재하는 id가 있는 모든 View를 직접 참조할 수 있습니다.</p>
<p>+대부분의 경우에 ViewBinding으로 findViewById 메서드를 대체할 수 있습니다. </p>
<h2 id="view-binding-사용하는-방법">View Binding 사용하는 방법</h2>
<h3 id="1-view-binding-설정">1) View Binding 설정</h3>
<p><em>View Binding을 사용하기 위해서는 Android Studio 3.6 이상부터 사용이 가능합니다.</em></p>
<p><strong>build.gradle (:app)</strong> 파일에 하단의 코드를 추가합니다.</p>
<ul>
<li>방법 1 (Android Studio 4.0 미만 버전)</li>
</ul>
<pre><code class="language-kotlin">android {
    ...
    viewBinding {
        enabled = true
    }
}</code></pre>
<ul>
<li>방법 2 (Android Studio 4.0 이상 버전)<pre><code class="language-kotlin">android {
  ...
  buildFeatures {
          viewBinding true
  }
}</code></pre>
</li>
</ul>
<p>+) 바인딩 클래스를 생성하고 싶지 않은 레이아웃의 경우 viewBindingIgnore를 true로 설정해주면 됩니다.</p>
<pre><code class="language-kotlin">&lt;LinearLayout
        ...
        tools:viewBindingIgnore=&quot;true&quot; &gt;
    ...
&lt;/LinearLayout&gt;</code></pre>
<h3 id="2-activity에서-view-binding-사용">2) Activity에서 View Binding 사용</h3>
<ol>
<li><p>View Binding을 사용하고자 하는 Activity에 바인딩 클래스 인스턴스를 선언합니다.</p>
</li>
<li><p>onCreate() 안에 inflate 메서드를 호출하여 Activity에서 사용할 바인딩 클래스 인스턴스를 생성합니다.</p>
</li>
<li><p>바인딩 변수의 root View를 setContentView()에 전달하여 화면에서 활성화 된 View로 만듭니다.</p>
</li>
</ol>
<pre><code class="language-kotlin">private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }</code></pre>
<p>이제 바인딩 클래스의 인스턴스를 사용하여 모든 뷰를 참조 할 수 있습니다.</p>
<pre><code class="language-kotlin">binding.txt.text = &quot;Hi&quot;
binding.btn.setOnClickListener{
            ...
}</code></pre>
]]></description>
        </item>
    </channel>
</rss>