<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>dingdong coding</title>
    <link>https://dodokwon.tistory.com/</link>
    <description>  개발개발   - 밍그러진 개발자 ~ 공부용 블로그 ~~</description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 19:00:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>  개발개발  </managingEditor>
    <image>
      <title>dingdong coding</title>
      <url>https://tistory1.daumcdn.net/tistory/4718354/attach/297e8ee9465f4deca2a571a52120c104</url>
      <link>https://dodokwon.tistory.com</link>
    </image>
    <item>
      <title>jest</title>
      <link>https://dodokwon.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트 필요성&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;에러가 또 나는 경우 &amp;rarr; 회귀 테스트&amp;nbsp;&lt;/li&gt;
&lt;li&gt;유지보수를 해야하는 경우&amp;nbsp;&lt;/li&gt;
&lt;li&gt;복잡한 코드를 많이 바꿔야 하는 경우&lt;/li&gt;
&lt;li&gt;import 를 많이 하는 영향도가 높은 코드&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⭐ 테스트는 틈틈히 추가하고, 정말 도움이 되는 테스트를 하자. 당연한거는 테스트 하지 말자 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;⭐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트 종류&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;유닛: 함수를 테스트 함&lt;/li&gt;
&lt;li&gt;통합&lt;/li&gt;
&lt;li&gt;E2E&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설치&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736076642883&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i jest -D
npm i ts-jest @types/jest -D
npm i babel-jest @babel/core
npm i cross-env // 윈도우 호환용 패키지&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트 시작 관련 명령어&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736077897420&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx ts-jest config:init
npx cross-env NODE_OPTIONS=&quot;$NODE_OPTIONS --experimental-vm-modules&quot; npx jest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Visual Studio Code Jest Test Setting&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) settings.json&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736079894643&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;jest.pathToJest&quot;: &quot;**/node_modules/.bin/jest&quot;,
    &quot;jest.pathToConfig&quot;: &quot;**/jest.config.js&quot;,
    &quot;jest.showCoverageOnLoad&quot;: true
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Extension 추가&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBeast/btsLE0Gb7BP/n9p7f1ySV67Xb8SW1O8QLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBeast/btsLE0Gb7BP/n9p7f1ySV67Xb8SW1O8QLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBeast/btsLE0Gb7BP/n9p7f1ySV67Xb8SW1O8QLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBeast%2FbtsLE0Gb7BP%2Fn9p7f1ySV67Xb8SW1O8QLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;185&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) Ctrl+Shift + P&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c11xzW/btsLFhgBowk/lYcBsTQR1iWohPzGZcikyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c11xzW/btsLFhgBowk/lYcBsTQR1iWohPzGZcikyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c11xzW/btsLFhgBowk/lYcBsTQR1iWohPzGZcikyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc11xzW%2FbtsLFhgBowk%2FlYcBsTQR1iWohPzGZcikyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;74&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sum function&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1738594311668&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;typescript&quot;&gt;&lt;code&gt;export function sum(x: number, y: number) {
  return x + y;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;xx.test.ts 또는 xx.spec.ts &amp;gt; test, spec 둘 다 됨&lt;/p&gt;
&lt;pre id=&quot;code_1738594371205&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test(&quot;sum&quot;, () =&amp;gt; {
  expect(sum(1, 2)).toBe(3);
  expect(sum(1, 2)).not.toBe(2);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKmuqV/btsL4YWOYIy/B464TtT4Iix8pam4QNoJXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKmuqV/btsL4YWOYIy/B464TtT4Iix8pam4QNoJXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKmuqV/btsL4YWOYIy/B464TtT4Iix8pam4QNoJXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKmuqV%2FbtsL4YWOYIy%2FB464TtT4Iix8pam4QNoJXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1137&quot; height=&quot;248&quot; data-origin-width=&quot;1137&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;toBe : 예상 값 비교&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;not.toBe : toBe의 부정형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;~ 2025.02.03&lt;/p&gt;</description>
      <category> TEST Code</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/93</guid>
      <comments>https://dodokwon.tistory.com/93#entry93comment</comments>
      <pubDate>Mon, 3 Feb 2025 23:13:22 +0900</pubDate>
    </item>
    <item>
      <title>무계획</title>
      <link>https://dodokwon.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2023.01.22 (일)&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;설 연휴가 시작되고 엄마랑 둘이 붙어있으면서 평소보다 대화를 더 많이 할 수 있었다. 보통 평일에 퇴근하고 집에 오면 녹초가 되어버려서 서로의 하루에 대한 브리핑 정도? 그리고 휴식이 전부였는데 오랜만에 시덥잖은 농담을 많이했다. 어제는 같이 장도 보러가고 내일은 쇼핑도 갈 예정이다. 그동안 발이 아팠던 나를 위한 내 신발을 사러가기로 했다. 이상하게 11월 부터&amp;nbsp; 걸을 때 발이랑 무릎이 아프기 시작하면서 통증은 나를 1월까지 병원 신세를 지게했다. 지금은 많이 괜찮아졌지만 아플동안은 진짜 힘들었다. 평소 운동도 잘 안하는데 무슨 운동선수가 걸릴법한 통증이 오다니..(。_。)&amp;nbsp;&lt;br /&gt;( 갑자기 직장동료분이 축구선수냐고 농담했을 때 엄청 웃겼던 기억이난다. )&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;서론이 너무 길었나?&amp;nbsp; 무계획이라는 타이틀이 무색해 지는것 같다. 오늘 설거지를 하면서 엄마한테 진짜 갑자기 &quot;엄마! 나 근데 쫌 무계획적인데 나름 계획적으로 잘 살지 않았어? 나 완전 무계획 속의 계획적인 사람이다. 완전 잘난척 대박ㅋㅋ&quot; 이런 말을 했다. &quot;그러네 근데 말이 쫌 이상한데? 무계획 속의 계획.. 뭔가 말도 안되는데 명언같아&quot; 나도 내가 말도 안되는 말을 했다는걸 아는데 그냥 뭔가 이 문구가 맘에 들었다. (무계획 속의 계획)&amp;nbsp; 왜냐면 살면서 계획을 짜보거나 그 계획을 실행해야지! 하고 살아본적은 없기 때문이다. 갑자기 뭔가 해야겠다는 마음 속 깊은 외침이 들리면 다소 충동적으로 일단 일을 벌려놓던가. 그 상황에 나를 집어 넣어버린다. 사실 내가 개발자라는 직업을 갖게 될 줄도 몰랐다. 분명 고등학생 때는 국어선생님이 꿈이였는데.. 내 국어 점수를 보고 한숨을 쉬었던 학원선생님의 조언으로 이과를 오게되었고 컴퓨터의 컴자도 모르던 내가 개발자를 하고 있지 않은가.. 진짜 계획대로 되는거 하나도 없다. ( 인간관계도 다소 비슷하다 느꼈다.. 다음에는 나의 인간관계에 대해서도 써보면 재밌겠다는 생각이 든다.)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;물론 흘러가는데로 살아온 나지만 ( 물아일체 성동일짤이 생각나는건 왜일까 ) 지금까지 나의 행적들을 되돌아보면 단기 계획들을 하나씩 세워두고 그 목표를 성취하기 위해&amp;nbsp; 많은 노력을 했던 순간은 많이 떠오른다. 공모전을 준비했을 때 밤을 세워서 노력하는데도 개발이 너무 안되고 짜증나서 집가는 길바닥에서 펑펑 울어본 기억도 있고.. 인턴했을 때도 이게 내 길이 아닌가 하면서 혼자 하늘 쳐다보면서 울적했던 순간도 진짜 많았다. 알바를 할 때도 나는 왜이렇게 손도 일 배우는 속도가 느릴까 하면서 터덜터덜 걸어왔던게 많이 생각난다.&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;이렇게 걱정도 우울함도 잘 느끼는 나였지만 근성 하나로 버티고 나니 끝내 상도 수상했고, 인턴다니던 회사에서도 3번이나 정규직 제안이 왔었고, 그 힘들다던 알바도 3년은 더 다니며 나중에는 내가 일을 가르쳐주기도 했다.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;고등학생 때까지만 해도 끈기도 노력도 하나도 없었던 내가 대학생이되고 성격도 생각도 정말 많이 바뀐게 느껴진다. 특히 고등학생 때 까지는 학업에 흥미가 하나도 없었는데&amp;nbsp; 지금은 학업에 나름 성취감이라는 감정을 느끼는거 자체가 신기하다. 사람이 바뀔 수 있다는 걸 나의 경험을 통해 느낄 수 있었다. 물론 전부 나의 아주아주 주관적인 기준이다. 누군가 나를 어떻게 평가할지는 모르지만 그들도 모두 주관적인 견해로 나를 평가하는 것이기 때문에 크게 신경쓰지 않아도 된다. 남들 기준에 나를 맞추지 말고 내가 성장했다고 느끼면 성장한것이다. 행복도 마찬가지다. 소확행을 크게 느끼는 나는 행복의 기준이 크게 높지 않다. 다만 내가 무엇을 할 때 행복함을 느끼는지 나에 대해 잘 아는 거는 꽤 중요한 문제인 것 같다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;음.. 이제 더 이상 쓸 말이 생각나지 않는다..ㅎㅎ&lt;br /&gt;&amp;nbsp;&lt;br /&gt;사실 나는 내 생각을 글로도 말로도 잘 표현하지 못한다. 그럼에도 일기를 쓰기 시작하게 된 이유는 비록 어딘가 엉성해보이는 글이지만 언젠가 내가 이 글을 다시 읽게 되었을 때&amp;nbsp; '아 이 때는 나는 이런생각을 갖고 살아갔구나. 그 시절에는 이런 고민을 했지만 지금의 나는 그 순간을 잘 버텨낼 수 있는 힘이 생겼구나' 이걸 느끼고 난 후 부터 하루에 한 줄이라도 그 날의 내 생각을 적는 편이다. 내 개인 블로그에는 일기를 처음 써보는 것 같은데 확실히 키보드가 편하긴하네ㅎㅎ&lt;br /&gt;&amp;nbsp;&lt;br /&gt;이제 새해의 1월이 곧 지나가는데 우연히 이 글을 보는 모든 사람들 올해 목표 꼭 이룰거고 혹여 못 이룬다해도 올해의 모든 일들이 내 인생의 값진 경험으로 남을거니 걱정보다는 하루하루 열심히 행복하게 살아가기를 바란다. '오늘은 내 인생의 첫 날'이라는 말이 있듯이 ㅎㅎ 무슨 오글거리는 말을 이렇게 길게 써놨는지. 오늘의 일기는 끝이다.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzUhBt/btrWRPPmRnN/okCnkssk46LaYYKceddD9k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzUhBt/btrWRPPmRnN/okCnkssk46LaYYKceddD9k/img.jpg&quot; data-alt=&quot;나름 운동1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzUhBt/btrWRPPmRnN/okCnkssk46LaYYKceddD9k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzUhBt%2FbtrWRPPmRnN%2FokCnkssk46LaYYKceddD9k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;421&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나름 운동1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq00GF/btrWRyf0zTy/QG4aGnzGdLgbAtyg2pKzH1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq00GF/btrWRyf0zTy/QG4aGnzGdLgbAtyg2pKzH1/img.jpg&quot; data-alt=&quot;우왕..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq00GF/btrWRyf0zTy/QG4aGnzGdLgbAtyg2pKzH1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq00GF%2FbtrWRyf0zTy%2FQG4aGnzGdLgbAtyg2pKzH1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;381&quot; height=&quot;508&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;우왕..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1801&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4BSlE/btrWU8mS76r/PQRLkDThgNRfXKoE9M2mE0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4BSlE/btrWU8mS76r/PQRLkDThgNRfXKoE9M2mE0/img.jpg&quot; data-alt=&quot;가을이 왔네 가을이 왔어&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4BSlE/btrWU8mS76r/PQRLkDThgNRfXKoE9M2mE0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4BSlE%2FbtrWU8mS76r%2FPQRLkDThgNRfXKoE9M2mE0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;490&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1801&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가을이 왔네 가을이 왔어&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUwhEX/btrWU72BhZv/qGc3PMiWOG6e9IfoLAKxck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUwhEX/btrWU72BhZv/qGc3PMiWOG6e9IfoLAKxck/img.jpg&quot; data-alt=&quot;나름 운동2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUwhEX/btrWU72BhZv/qGc3PMiWOG6e9IfoLAKxck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUwhEX%2FbtrWU72BhZv%2FqGc3PMiWOG6e9IfoLAKxck%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;495&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;나름 운동2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rxujb/btrWXiioghp/a2vlm46bcR24sSAtCX5571/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rxujb/btrWXiioghp/a2vlm46bcR24sSAtCX5571/img.jpg&quot; data-alt=&quot;너무 감동..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rxujb/btrWXiioghp/a2vlm46bcR24sSAtCX5571/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frxujb%2FbtrWXiioghp%2Fa2vlm46bcR24sSAtCX5571%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;395&quot; height=&quot;527&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;너무 감동..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pHVyK/btrWRDIjS90/3Oxw8IWlBkkMHbjMxhRjo1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pHVyK/btrWRDIjS90/3Oxw8IWlBkkMHbjMxhRjo1/img.jpg&quot; data-alt=&quot;점심시간 힐링타임&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pHVyK/btrWRDIjS90/3Oxw8IWlBkkMHbjMxhRjo1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpHVyK%2FbtrWRDIjS90%2F3Oxw8IWlBkkMHbjMxhRjo1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;389&quot; height=&quot;519&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;점심시간 힐링타임&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHcNCp/btrWUdIJWnj/UTPgYKG4lkAHTPwNdGMwDk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHcNCp/btrWUdIJWnj/UTPgYKG4lkAHTPwNdGMwDk/img.jpg&quot; data-alt=&quot;BIRTHDAY&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHcNCp/btrWUdIJWnj/UTPgYKG4lkAHTPwNdGMwDk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHcNCp%2FbtrWUdIJWnj%2FUTPgYKG4lkAHTPwNdGMwDk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;411&quot; height=&quot;731&quot; data-origin-width=&quot;2268&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BIRTHDAY&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pa9VO/btrWUdaT91J/IZqRkIXVKU8l2nNrCW7GN0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pa9VO/btrWUdaT91J/IZqRkIXVKU8l2nNrCW7GN0/img.jpg&quot; data-alt=&quot;화려한 조명이 나를..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pa9VO/btrWUdaT91J/IZqRkIXVKU8l2nNrCW7GN0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpa9VO%2FbtrWUdaT91J%2FIZqRkIXVKU8l2nNrCW7GN0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;399&quot; height=&quot;532&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화려한 조명이 나를..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HEth2/btrWSwaRvfM/O0AEK5Zv2zhkK3HzmXMep0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HEth2/btrWSwaRvfM/O0AEK5Zv2zhkK3HzmXMep0/img.jpg&quot; data-alt=&quot;그릭요거트의 세계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HEth2/btrWSwaRvfM/O0AEK5Zv2zhkK3HzmXMep0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHEth2%2FbtrWSwaRvfM%2FO0AEK5Zv2zhkK3HzmXMep0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;485&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그릭요거트의 세계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ce2YY6/btrWU72Bhwb/gZ8ysGF6CdOndIfBvKP7Zk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ce2YY6/btrWU72Bhwb/gZ8ysGF6CdOndIfBvKP7Zk/img.jpg&quot; data-alt=&quot;처음 써보는 안경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ce2YY6/btrWU72Bhwb/gZ8ysGF6CdOndIfBvKP7Zk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fce2YY6%2FbtrWU72Bhwb%2FgZ8ysGF6CdOndIfBvKP7Zk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;413&quot; height=&quot;551&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;처음 써보는 안경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>✏️Retrospect/ 다이어리 </category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/90</guid>
      <comments>https://dodokwon.tistory.com/90#entry90comment</comments>
      <pubDate>Sun, 22 Jan 2023 22:02:23 +0900</pubDate>
    </item>
    <item>
      <title>Node란</title>
      <link>https://dodokwon.tistory.com/89</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;노드의 정의&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;서버를 수행할 수 있는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;자바스크립트 런타임&lt;/b&gt;.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;u&gt;자바스크립드로 만든 프로그램을 실행할 수 있게 해주는 가상머신&lt;/u&gt;으로서 &lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;서버실행을 위해 http/https/http2 모듈제공&amp;nbsp; 다른 런타임의 예시로는 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;웹브라우저가 있다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;노드의 특징&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1) 이벤트 기반&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이벤트가 발생할 때 미리 지정해준 직업을 수행하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfA2Ue/btrWUIodWrO/Z75BIsF1zRMroqOIeSFTak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfA2Ue/btrWUIodWrO/Z75BIsF1zRMroqOIeSFTak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfA2Ue/btrWUIodWrO/Z75BIsF1zRMroqOIeSFTak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfA2Ue%2FbtrWUIodWrO%2FZ75BIsF1zRMroqOIeSFTak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;206&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;&amp;bull; 이벤트 리스너&lt;/b&gt; : 이벤트를 등록하는 함수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;&lt;b&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;콜백함수&lt;/b&gt; : 이벤트가 발생했을 때 실행될 함수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1674372097979&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;이벤트 기반 아키텍처 &amp;nbsp;|&amp;nbsp; Eventarc &amp;nbsp;|&amp;nbsp; Google Cloud&quot; data-og-description=&quot;의견 보내기 이벤트 기반 아키텍처 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이벤트 기반 아키텍처는 마이크로서비스가 이벤트라고 하는 상태 변화에&quot; data-og-host=&quot;cloud.google.com&quot; data-og-source-url=&quot;https://cloud.google.com/eventarc/docs/event-driven-architectures?hl=ko&quot; data-og-url=&quot;https://cloud.google.com/eventarc/docs/event-driven-architectures?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/TQ1Xi/hyRlwmOWRg/gGUkElUacXJBvxk32ek9uK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://cloud.google.com/eventarc/docs/event-driven-architectures?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cloud.google.com/eventarc/docs/event-driven-architectures?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/TQ1Xi/hyRlwmOWRg/gGUkElUacXJBvxk32ek9uK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;이벤트 기반 아키텍처 &amp;nbsp;|&amp;nbsp; Eventarc &amp;nbsp;|&amp;nbsp; Google Cloud&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;의견 보내기 이벤트 기반 아키텍처 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이벤트 기반 아키텍처는 마이크로서비스가 이벤트라고 하는 상태 변화에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cloud.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2) 논블로킹 I/O&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논블로킹 : 오래걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래걸리는 함수를 실행&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;논블로킹 방식하에서 &lt;b&gt;일부코드&lt;/b&gt;는 백그라운드에서 병렬로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; - &lt;/b&gt;일부코드 : I/O 작업 (파일시스템 접근, 네크워크 요청), 압축, 암호화 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;나머지 코드는 블로킹 방식으로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;I/O 작업이 많을 때 노드 활용성이 극대화&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동기면서 블로킹 / 비동기면서 논블로킹&lt;/p&gt;
&lt;figure id=&quot;og_1674374997993&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;블로킹(Blocking)/논블로킹(Non-Blocking), 동기(Sync)/비동기(Async) 구분하기&quot; data-og-description=&quot;보통 동기 = 블로킹을 같은 개념으로, 비동기 = 논블로킹을 같은 개념으로 헷갈리는 경우가 많다. 하지만 두 개념은 각각을 구분짓는 기준이 전혀 다르다. 블로킹/논블로킹은 한 작업이 처리되는&quot; data-og-host=&quot;joooing.tistory.com&quot; data-og-source-url=&quot;https://joooing.tistory.com/entry/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9&quot; data-og-url=&quot;https://joooing.tistory.com/entry/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgSAj8/hyRm3pOpux/VKq2xwSkz5ueqR7IMgyPKK/img.png?width=800&amp;amp;height=678&amp;amp;face=0_0_800_678,https://scrap.kakaocdn.net/dn/YNKkp/hyRlBVYVHd/QnKefsocz966Om4kKSWUGk/img.png?width=800&amp;amp;height=678&amp;amp;face=0_0_800_678,https://scrap.kakaocdn.net/dn/cpNRum/hyRnbOUbug/LvI5aATe4CoTkSY8PrOmKk/img.png?width=829&amp;amp;height=521&amp;amp;face=0_0_829_521&quot;&gt;&lt;a href=&quot;https://joooing.tistory.com/entry/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://joooing.tistory.com/entry/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgSAj8/hyRm3pOpux/VKq2xwSkz5ueqR7IMgyPKK/img.png?width=800&amp;amp;height=678&amp;amp;face=0_0_800_678,https://scrap.kakaocdn.net/dn/YNKkp/hyRlBVYVHd/QnKefsocz966Om4kKSWUGk/img.png?width=800&amp;amp;height=678&amp;amp;face=0_0_800_678,https://scrap.kakaocdn.net/dn/cpNRum/hyRnbOUbug/LvI5aATe4CoTkSY8PrOmKk/img.png?width=829&amp;amp;height=521&amp;amp;face=0_0_829_521');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;블로킹(Blocking)/논블로킹(Non-Blocking), 동기(Sync)/비동기(Async) 구분하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;보통 동기 = 블로킹을 같은 개념으로, 비동기 = 논블로킹을 같은 개념으로 헷갈리는 경우가 많다. 하지만 두 개념은 각각을 구분짓는 기준이 전혀 다르다. 블로킹/논블로킹은 한 작업이 처리되는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;joooing.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3) 프로세스와 스레드&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드 프로세스는 &lt;u&gt;멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글스레드라 표현&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;노드는 주로 멀티스레드 대신 멀티프로세스 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;노드는 14버전부터 멀티스레드 사용가능&lt;/p&gt;
&lt;figure id=&quot;og_1674372551209&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[ OS ] 프로세스와 스레드 Process, Thread&quot; data-og-description=&quot;1 ) 프로세스 Process In computing, a process is the instance of a computer program that is being executed by one or many threads. 컴퓨터 분야에서 프로세스는 컴퓨터 프로그램의 인스턴스로, 하나 이상의 스레드를 통해 실&quot; data-og-host=&quot;dodokwon.tistory.com&quot; data-og-source-url=&quot;https://dodokwon.tistory.com/80&quot; data-og-url=&quot;https://dodokwon.tistory.com/80&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ecZ5qR/hyRlooRfb9/mKfKKvBDtatDJDigTUWDW0/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/SspBC/hyRlyEU5HB/IyJ3hBPAukZX8kkfhoIjb0/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/pAF6A/hyRlCtQHhO/e95Rij4tuAeq2h9bxjnVxK/img.jpg?width=1668&amp;amp;height=1620&amp;amp;face=0_0_1668_1620&quot;&gt;&lt;a href=&quot;https://dodokwon.tistory.com/80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dodokwon.tistory.com/80&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ecZ5qR/hyRlooRfb9/mKfKKvBDtatDJDigTUWDW0/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/SspBC/hyRlyEU5HB/IyJ3hBPAukZX8kkfhoIjb0/img.png?width=800&amp;amp;height=534&amp;amp;face=0_0_800_534,https://scrap.kakaocdn.net/dn/pAF6A/hyRlCtQHhO/e95Rij4tuAeq2h9bxjnVxK/img.jpg?width=1668&amp;amp;height=1620&amp;amp;face=0_0_1668_1620');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[ OS ] 프로세스와 스레드 Process, Thread&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1 ) 프로세스 Process In computing, a process is the instance of a computer program that is being executed by one or many threads. 컴퓨터 분야에서 프로세스는 컴퓨터 프로그램의 인스턴스로, 하나 이상의 스레드를 통해 실&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dodokwon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4) 싱글스레드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;싱글스레드라 주어진 일을 하나밖에 처리하지 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;블로킹이 발생하는 경우 나머지 작업은 모두 대기해야해서 비효율이 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;대신 논블로킹 모델을 채택하여 일부 코드 (I/O)를 백그라운드(다른 프로세스)에서 실행 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;요청을 먼저 받고 완료될 때 응답함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;bull;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;노드의 장점&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. 멀티스레드 방식에 비해 컴퓨터 자원을 적게 사용함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2. I/O 작업이 많은 서버로 적합&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3. 멀티스레드 방식보다 쉬움&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4. 웹 서버가 내장되어 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;5. 자바스크립트를 사용함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;6. JSON 형식과 호환하기 쉬움&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;7. CPU 작업을 위해 AWS Lambda나 Google Cloud Functions 같은 별도 서비스 사용. 서브서버로도 많이 사용함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;학습에 많은 도움이 된 링크를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #000000;&quot;&gt;참조&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;했습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;참조 및 출처&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674382527785&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 - 인프런 | 강의&quot; data-og-description=&quot;노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 최종적으로 클라우드에 서비스&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard&quot; data-og-url=&quot;https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gSe9I/hyRlsreaJp/dH3ErhaSn9ZanyWPTKr0O0/img.jpg?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/chkUbB/hyRm7lt8rE/gFs6ekKi9D5bJkYxKqgrS1/img.jpg?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/bDIyWq/hyRm0zTbtm/teQKWOtYvGlfULkE7x5b7k/img.jpg?width=2339&amp;amp;height=511&amp;amp;face=0_0_2339_511&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gSe9I/hyRlsreaJp/dH3ErhaSn9ZanyWPTKr0O0/img.jpg?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/chkUbB/hyRm7lt8rE/gFs6ekKi9D5bJkYxKqgrS1/img.jpg?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/bDIyWq/hyRm0zTbtm/teQKWOtYvGlfULkE7x5b7k/img.jpg?width=2339&amp;amp;height=511&amp;amp;face=0_0_2339_511');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 - 인프런 | 강의&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 최종적으로 클라우드에 서비스&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> Node.js</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/89</guid>
      <comments>https://dodokwon.tistory.com/89#entry89comment</comments>
      <pubDate>Sun, 22 Jan 2023 19:16:15 +0900</pubDate>
    </item>
    <item>
      <title>Git 명령어 간단 정리 ( feat. Sync 맞추기 )</title>
      <link>https://dodokwon.tistory.com/87</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;remote branch&lt;/b&gt; : 원격 저장소에 있는 브랜치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 원격저장소를 clone 하면 자동으로 원격 저장소 이름은 origin&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- origin원격 저장소의 master 브랜치는 origin/master 로 표시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;원격 저장소(Remote Repository)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;bull;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;로컬 저장소(Local Repository)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 PC에 파일이 저장되는 개인 전용 저장소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 원격과 지역 저장소의 커밋은 독립적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git branch &amp;ndash;r&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 원격 브랜치 정보 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git branch -a &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모든 (원격/지역) 브랜치 정보 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git fetch, git pull&lt;/b&gt; (보통 fetch 한 후에 pull 받음)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span&gt;원격 저장소의 최신 내용을 가져옴&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git fetch -- origin&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 저장소에서 가져오기. 자동으로 merge 하지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git fetch new_rep -- new_rep &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 저장소에서 가져오기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git pull -- origin &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 저장소에서 가져오기. 자동으로 merge 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git push [remote name] [branch name]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 로컬 저장소의 변경사항을 원격저장소에 보내기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git push&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬&amp;nbsp;저장소의 현재 브랜치를 원격 저장소 origin 의 같은 이름의 브랜치에 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;git push origin mybranch&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;로컬&amp;nbsp;저장소의 mybranch를 원격 저장소 origin의 mybranch로 보냄&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git push origin mybranch:master&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬&amp;nbsp;저장소의 mybranch 브랜치를 원격 저장소 origin 저장소의 master 브랜치에 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git push origin master:new-br&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬&amp;nbsp;저장소의 master 브랜치를 원격 저장소 origin 저장소의 newbr 브랜치에 보냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(원격저장소에 new-br이 없으면 새로 생성함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 원격 저장소를 clone한 이후, 다른 팀원이 원격 저장소에 push를 먼저 했다면, 내 push는 안됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 이 경우에는 먼저 fetch (pull)을 해서 변경내용을 지역저장소에서 머지한 후에 push할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git remote show origin -- origin&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 저장소의 정보를 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 저장소의 URL 추적되고 있는 브랜치 (tracked remote branches) git pull 을 하면 머지할 브랜치 git push 를 하면 지역 저장소의 어떤 브랜치가 원격 저장소의 어떤 브랜치로 푸시되는 지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git remote show origin -- origin&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 원격 저장소의 정보 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;** git merge시 branch끼리 Sync 맞추기 중요 **&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 내가 작업한 브랜치를 develop에 머지하는 과정에서 conflict 가 자주 발생하고 local에서 하나씩 병합해주는 일이 많이 생겼었다. 사실 병합 충돌해결은 흔히 발생하는 일이겠지만 이 때 Sync를 잘못맞추면 메인으로 사용하는 branch에 오류를 발생시키는 일이 생길 수도..있다.. 필자의 잦은 실수로 팀장님이 열혈 강의를 해주셨음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 ) 머지하려는 대상의 브랜치를 현재 브랜치에서 머지해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예를 들어, 현재 내 브랜치가 iss_temp 머지하려는 대상 브랜치 develop이라 local에서 develop branch를 iss_temp에 머지 후 여기서 conflict 해결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 병합해결 후 커밋, iss_temp 원격저장소에 push &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) develop branch에 merge request&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  GIT</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/87</guid>
      <comments>https://dodokwon.tistory.com/87#entry87comment</comments>
      <pubDate>Tue, 23 Aug 2022 15:11:03 +0900</pubDate>
    </item>
    <item>
      <title>[ Oracle ] 기본 개념</title>
      <link>https://dodokwon.tistory.com/86</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;문자열&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CHAR&lt;/b&gt;: 고정된 길이의 문자열을 저장&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EX) CHAR(20) 지정 후 'AA'만 저장하면 나머지 공간은 공백으로 채움&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;VARCHAR2&lt;/b&gt; : 가변 문자열을 저장.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EX) VARCHAR2(20) 지정 후 'AA'만 저장. 즉, 저장 길이가 가변적.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;VARCHAR&lt;/b&gt; : VARCHAR2와 같지만 오라클에서 향 후 다른 용도로 사용한다고 공식문서에 적혀있다. 그래서 대부분 VARCHAR2 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[ 최대크기 ]&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CHAR&lt;/b&gt; : 2000Byte&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; VARCHAR2&lt;/b&gt;, &lt;b&gt;VARCHAR&lt;/b&gt;:4000바이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;숫자 NUMBER&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;NUMBER(유효 자릿수, 소수점 갯수)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NUMBER(5, 0) : 소수점이 없는 숫자 5자리 까지 저장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NUMBER(3, 2) : 123.45를 저장 시 오류&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;유효숫자 3자리 .기준 왼쪽에 숫자 한 개만 표시 가능, 소수점 2자리까지 표시&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NUMBER(11, 2) : 1.345가 들어오면 1.35가 저장됨, 즉 반올림&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;날짜 DATE, TIMESTAMP&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DATE&lt;/b&gt;: 날짜, 시간, 분, 초를 저장 (주로 사용)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KlrJj/btrKgtbYGkx/Kki4pUfZHCs6TfA44YwVS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KlrJj/btrKgtbYGkx/Kki4pUfZHCs6TfA44YwVS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KlrJj/btrKgtbYGkx/Kki4pUfZHCs6TfA44YwVS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKlrJj%2FbtrKgtbYGkx%2FKki4pUfZHCs6TfA44YwVS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;271&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;TIMESTAMP &lt;/b&gt;: 날짜, 시간, 분, 초 초단위 이하 9자리까지 저장 (시간이 매우 중요할 경우 사용)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yMm3U/btrKb8F2rQW/CDbKKBFCv7RJCQVVZ0Vn7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yMm3U/btrKb8F2rQW/CDbKKBFCv7RJCQVVZ0Vn7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yMm3U/btrKb8F2rQW/CDbKKBFCv7RJCQVVZ0Vn7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyMm3U%2FbtrKb8F2rQW%2FCDbKKBFCv7RJCQVVZ0Vn7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;339&quot; height=&quot;286&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;343&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;무결성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;무결성 제약조건&lt;/b&gt;: 제약조건은 데이터의 무결성을 보장받기 위해서 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;무결성&lt;/b&gt; : 데이터베이스에 데이터의 정확성 (일관성)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;제약 조건 (Constraint)&lt;/b&gt; : NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* NOT NULL&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식 : 컬럼명 데이터타입 NOT NULL&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661086300909&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	PRIMARY KEY (USERNO)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NOT NULL은 데이터삽입(INSERT)시 값을 꼭 넣어줘야됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이와 반대로 데이터를 넣지않게되면 즉 NULL값이 들어가면 오류가 발생합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용하면 좋을 때 : 없어서는 안되는 중요한 값일 경우.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* NULL에 관해&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INSERT시 값을 넣지 않게되면 NULL로서 표시됩니다. 즉 데이터값이 존재하지 않다는 것 입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 오라클에서는 ''빈 공백, 빈 값을 NULL로 인식하며 ''는 =''가 아닌 IS NULL로 조회해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* PRIMARY KEY&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식: PRIMARY KEY (컬럼명1, 컬럼명2, 컬럼명3,..)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661086443244&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	PRIMARY KEY (USERNO)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- PRIMAY KEY 즉 기본키는 하나의 테이블에 있는 데이터들을 고유하게 식별하는 제약조건입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 기본키는 한 개의 테이블에 하나만 생성가능 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 기본키로 설정된 열에 중복된 값을 가질 수 없으며 NULL값 또한 가질 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* FOREIGN KEY&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식: 컬럼명 데이터타입 CONSTRAINT 외래키 이름 REFERENCES 참조테이블 명(참조 컬럼)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661086637977&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	PRIMARY KEY (USERNO)
);

CREATE TABLE MARKET_CART(
	CARTNO NUMBER(11,0),
	USERNO NUMBER(11,0) CONSTRAINT FK_USERNO REFERENCES MYUSER(USERNO),
	PRIMARY KEY (CARTNO )
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- FOREIGN KEY 즉, 외래키는 참조하는 테이블에 존재하는 값만 사용하는 제약조건입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 참조할 수 있는 컬럼은 참조할 수 있는 테이블의 기본키이거나 UNIQUE만 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* CHECK&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식 : CONSTRAINT 제약명 CHECK(조건)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661086791127&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,	
	NICKNAME VARCHAR(30),
	EMAIL VARCHAR(50) NULL,
	BIRTHYEAR NUMBER(11,0) CONTSRAINTS (CH_BIRTHYEAR &amp;gt; 14),
	PRIMARY KEY (USERNO) CHECK(BIRTHYEAR)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- CHECK 소괄호 안의 조건에 맞는 데이터만 삽입가능한 제약조건&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 조건에는 기본연산자, 비교연산자, IN, NOT IN 등을 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* UNIQUE&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식: 컬럼명 데이터타입 UNIQUE&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087029414&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE MYUSER (
	USERNO NUMBER(11,0),
	USERID VARCHAR2(20),
	USERPW VARCHAR(30) NOT NULL,
	NICKNAME VARCHAR(30) UNIQUE,
	EMAIL VARCHAR(50) NULL,
	BIRTHYEAR NUMBER(11,0) CONSTRAINTS CH_BIRTHYEAR CHECK(BIRTHYEAR &amp;gt;14),
	PRIMARY KEY (USERNO)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- UNIQUE로 설정된 해당 컬럼에 중복값을 허용하지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DROP TABLE&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식 : DROP TABLE 테이블명&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DROP TABLE MYUSER;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- DROP TABLE 명령어를 사용하면 테이블의 모든 데이터, 구조를 삭제한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;ALTER TABLE&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼 삭제 형식 : ALTER TABLE 테이블명 DROP COLUMN 컬럼명&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ALTER TABLE MYUSER DROP COLUMN BIRTHYEAR;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼 추가 형식 :&amp;nbsp; ALTER TABLE 테이블명 ADD 추가할 컬럼명 데이터타입 (NOT NULL, NULL)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ALTER TABLE MYUSER ADD BIRTHYEAR NUMBER(11, 0) NOT NULL;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컬럼 변경 형식 : ALTER TABLE 테이블명 MODIFY 컬럼명 변경할 데이터타입 (NOT NULL, NULL)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ALTER TABLE MYUSER MODIFY EMAIL VARCHAR(100) NULL;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;USERNO NUMBER(11,0) 기본키를 사용자가 다음 숫자를 예상하고 입력하는 것은 불가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 어떻게 해야할까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;오라클에서 시퀀스를 사용&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 자동으로 다음 숫자를 생성하고 기본키로 사용가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스 생성형식&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CREATE&amp;nbsp;SEQUENCE&amp;nbsp;시퀀스명 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; START WITH 시작번호&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INCREMENT&amp;nbsp;BY&amp;nbsp;증가값&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MAXVALUE&amp;nbsp;최대값 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MINVALUE&amp;nbsp;최소값&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CYCLE&amp;nbsp;또는&amp;nbsp;NOCYCLE;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스 검색&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SELECT * FROM USER_SEQUENCES;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087533459&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE SEQUENCE SEQ_MYUSER
START WITH 1
INCREMENT BY 1
MAXVALUE 100000
MINVALUE 1
NOCYCLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스의 다음값을 이용한 유저테이블에 기본키(USERNO)값 넣기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087573588&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
'id1234',
'pw1234',
'nm1234',
'aaa@namer.com',
50
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스의 현재 값 조회&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087599495&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT seq_myuser.currval FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스 수정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087619513&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER SEQUENCE 시퀀스명
INCREMENT BY 수정할 증가값
MAXVALUE 수정할 최대값
MINVALUE 수정할 최소값
CYCLE 또는 NOCYCLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 시퀀스의 시작 값을 변경하는 방법은 시퀀스를 삭제 후 다시 생성해야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 또는 INCREMENT BY 수정할 증가값을 변경하여 원하는 시작값으로 이동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시퀀스 삭제&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087665956&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP SEQUENCE 시퀀스명;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데이터 정렬 ORDER BY&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;오름차순 정렬 ORDER BY ASC&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식 : ORDER BY ASC&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 데이터를 오름차순으로 정렬시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 숫자는 작은 숫자부터, 문자는 알파벳 순서로 출력된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- Default 값은 Ascending 오름차순으로써 ASC는 생략해도된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087770395&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM BBSTABLE
ORDER BY BBSNO ASC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ASC는 DEFAULT 값이라 생략가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 SELECT절에 ORDER BY에 사용된 컬럼을 꼭 사용할 필요는 없다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087817003&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT BBSTITLE
FROM BBSTABLE
ORDER BY BBSNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;내림차순 정렬 ORDER BY DESC&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식 : ORDER BY DESC&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 데이터를 내림차순으로 정렬시킨다. 숫자는 큰 숫자부터 문자는 알파벳 역순서로 출력된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- ASC 와 달리 DESC는 꼭 명시해 주어야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087874832&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM BBSTABLE
ORDER BY BBSNO DESC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;ORDER BY 여러 개 사용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661087902247&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM BBSTABLE
ORDER BY BBSTITLE DESC,bbscontents ASC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 정렬 후 중복되는 데이터는 콤마(,)다음 오는 정렬순서를 적용.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;조건절 WHERE과 AND, OR, SELECT 시 ROWNUM과 DISTINCT&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;WHERE과 AND&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- MYUSER의 USERID가 500이고 EMAIL은 NULL이 아닌 것만 조회&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GuvRa/btrKatwTkmU/jUa1veIG2ZoHQUMEsmUQY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GuvRa/btrKatwTkmU/jUa1veIG2ZoHQUMEsmUQY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GuvRa/btrKatwTkmU/jUa1veIG2ZoHQUMEsmUQY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGuvRa%2FbtrKatwTkmU%2FjUa1veIG2ZoHQUMEsmUQY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;301&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1661088015167&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM MYUSER WHERE USERID = 500 AND EMAIL != NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BBSTABLE의 게시판번호가 100이하이고 게시판제목이 ABC로 시작하는 것&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661088030504&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM BBSCONTENTS WHERE BBSNO&amp;lt;=100 AND BBSTITLE LIKE 'ABC%'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;WHERE과 OR&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- MYUSER의 USERID가 500또는 EMAIL은 NULL이 아닌것만 조회&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVnF44/btrJ7aS8Gjm/3kIkEHhP33aOolmkKYXMpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVnF44/btrJ7aS8Gjm/3kIkEHhP33aOolmkKYXMpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVnF44/btrJ7aS8Gjm/3kIkEHhP33aOolmkKYXMpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVnF44%2FbtrJ7aS8Gjm%2F3kIkEHhP33aOolmkKYXMpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;668&quot; height=&quot;251&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1661088075632&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM MYUSER WHERE USERID = 500 OR EMAIL != NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BBSTABLE의 게시판번호가 100초과 또는 게시판제목이 ABC가 포함된 것만 조회&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661088088323&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM BBSCONTENTS WHERE BBSNO&amp;gt;100 OR BBSTITLE LIKE '%ABC%'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SELECT와 ROWNUM&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;조회되는 행의 수를 제한할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;글 1개만 조회&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661088767235&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM BBSTABLE
WHERE ROWNUM = 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;글10개만 조회(행의 수 10개)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661088785942&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM BBSTABLE
WHERE ROWNUM &amp;lt;= 10;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SELECT와 DISTINCT&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중복된 값을 제거하고 하나만 결과로서 조회한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;중복된 글 제목은 2개 이상 조회안되도록 SELECT&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089023144&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT DISTINCT BBSTITLE
FROM BBSTABLE;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;오라클 함수 &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* 문자열 함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;LOWER(문자열)&lt;/b&gt;: 소문자로 변환&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089079730&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT LOWER(BBSTITLE)
FROM BBSTABLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;UPPER(문자열)&lt;/b&gt;: 대문자로 변환&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089098182&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT UPPER(BBSTITLE)
FROM BBSTABLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CONCAT(&amp;lsquo;문자열1&amp;rsquo;,&amp;rsquo;문자열2&amp;rsquo;)&lt;/b&gt;: 문자열1과 문자열2를 합침. 연결연산자||와 같은 역할.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089120289&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT CONCAT('abc','def')
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SUBSTR('문자열',시작위치,갯수)&lt;/b&gt;: 문자열에서 시작위치로부터 갯수만큼 리턴.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089141712&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT SUBSTR('abcdefghij',3,4)
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;LPAD(데이터,전체길이,'추가할문자열')&lt;/b&gt;:모자란 길이만큼 왼쪽에서부터 문자열을 추가해준다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089168082&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT LPAD(BBSCONTENTS,20,'A')
FROM BBSTABLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;RPAD(데이터,전체길이,'추가할문자열')&lt;/b&gt;:모자란 길이만큼 오른쪽에서부터 문자열을 추가해준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089190770&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT RPAD(BBSCONTENTS,20,&amp;lsquo;B')
FROM BBSTABLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;TRIM(&amp;lsquo;문자열&amp;rsquo;)&lt;/b&gt;:문자열 양쪽 공백을 제거해준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089206089&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT TRIM(' ABC ')
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;TRIM('특정문자' FROM '문자열')&lt;/b&gt;:문자열 앞뒤로 특정문자를 제거해준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089250057&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT TRIM('A' FROM 'AABA BC AA DD AABA')
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;TRUNC(숫자,소수점표시할 수)&lt;/b&gt;:소수점 숫자를 어디까지 보여주고 나머지는 버린다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089273812&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT TRUNC(123.56789,2)
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;ROUND(숫자,소수점표시할 수)&lt;/b&gt;:소수점 숫자를 어디까지 보여주고 나머지는 반올림한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089295854&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ROUND(123.56789,2)
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;MOD(숫자,나눌 숫자)&lt;/b&gt;:숫자를 나누고 나머지값을 얻는다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089320206&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT MOD(1234567,10)
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ADD_MONTHS('25-DEC-91',6):&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089353656&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ADD_MONTHS(SYSDATE, 1)
FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, -1)
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lv8m6/btrKdRqVjmw/ooOOQMQxpHiH38ASdtTXyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lv8m6/btrKdRqVjmw/ooOOQMQxpHiH38ASdtTXyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lv8m6/btrKdRqVjmw/ooOOQMQxpHiH38ASdtTXyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLv8m6%2FbtrKdRqVjmw%2FooOOQMQxpHiH38ASdtTXyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;148&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;하루추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089865036&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT SYSDATE+1 FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;** 가장 많이 사용될 것으로 예상됨.그만큼 중요. **&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;NVL(값, NULL일시 출력할 값)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089892587&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT NVL(NULL,'NULL이군요') FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;NVL2(값 , NULL이 아니면 출력할 값,NULL일시 출력할 값)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661089925863&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT NVL2(NULL,'NULL이 아닙니다','NULL이군요')
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Inner Join,Left Outer Join,Right Outer Join,Self Join&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Join을 사용하는 이유&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;join을 사용하면 관련있는 테이블끼지 묶어줄 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baUTFP/btrKauikRSs/R1Udp5k2an5fg25cisiyyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baUTFP/btrKauikRSs/R1Udp5k2an5fg25cisiyyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baUTFP/btrKauikRSs/R1Udp5k2an5fg25cisiyyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaUTFP%2FbtrKauikRSs%2FR1Udp5k2an5fg25cisiyyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1240&quot; height=&quot;441&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;INNER JOIN &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661090207271&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 컬럼명이 동일한 경우 별명을 사용하거나 각 테이블 명을 기술.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz35G4/btrJ7nkpLKL/DPH7Z57151AweoQwwvShKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz35G4/btrJ7nkpLKL/DPH7Z57151AweoQwwvShKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz35G4/btrJ7nkpLKL/DPH7Z57151AweoQwwvShKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz35G4%2FbtrJ7nkpLKL%2FDPH7Z57151AweoQwwvShKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;284&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여기서 알 수 있는 사실 A테이블XB테이블:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661090287027&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON 1=1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;같은 것 끼리만 결과 얻기.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661090299404&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 결과에서 USERNO=2인 것만 조회하기.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661090312184&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.*,B.*
FROM MYUSER A
INNER JOIN BUYLIST B
ON A.USERNO = B.USERNO
WHERE A.USERNO = 2;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;LEFT OUTER JOIN&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INNER JOIN처럼 같은 것 끼리 묶어준다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 후에 LEFT OUTER JOIN은 왼쪽의 나머지행도 결과에 포함시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buPvTj/btrKeubc4aJ/BIG5EjtguQDkGlXeczV9V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buPvTj/btrKeubc4aJ/BIG5EjtguQDkGlXeczV9V0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buPvTj/btrKeubc4aJ/BIG5EjtguQDkGlXeczV9V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuPvTj%2FbtrKeubc4aJ%2FBIG5EjtguQDkGlXeczV9V0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;272&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1661090358754&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.*,B.*
FROM MYUSER A
LEFT OUTER JOIN BUYLIST B
ON A.USERNO = B.USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;RIGHT OUTER JOIN&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INNER JOIN처럼 같은 것 끼리 묶어준다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 후에 RIGHT OUTER JOIN은 오른쪽의 나머지행도 결과에 포함시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZKIs4/btrKgsRJpiE/nkX0GUrR2FCY5OYLvxddA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZKIs4/btrKgsRJpiE/nkX0GUrR2FCY5OYLvxddA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZKIs4/btrKgsRJpiE/nkX0GUrR2FCY5OYLvxddA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZKIs4%2FbtrKgsRJpiE%2FnkX0GUrR2FCY5OYLvxddA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;349&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1661090672827&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.*,B.*
FROM MYUSER A
RIGHT OUTER JOIN BUYLIST B
ON A.USERNO = B.USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;LEFT OUTER JOIN&lt;/b&gt;: 왼쪽 나머지도 포함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;RIGHT OUTER JOIN&lt;/b&gt;: 오른쪽 나머지도 포함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Union, Union All &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;UNION&lt;/b&gt;: 두개의 쿼리문을 합쳐 하나의 결과집합으로 만들어줍니다.중복된 행은 제거해줍니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;UNION&lt;/b&gt; &lt;b&gt;ALL&lt;/b&gt;: 두개의 쿼리문을 합쳐 하나의 결과집합으로 만들어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;사용시 제약조건&lt;/b&gt;: 컬럼타입이 같아야한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661090783517&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
1 AS COLUMN0,
'1ssss' AS COLUMN1
FROM DUAL

UNION

SELECT
2 AS COLUMN0,
'2aaaa' AS COLUMN1
FROM DUAL

UNION

SELECT
3 AS COLUMN0,
'3aaaa' AS COLUMN1
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661090806326&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
BIRTHYEAR
FROM MYUSER

UNION

SELECT
BIRTHYEAR
FROM MYUSER
WHERE USERNO =7;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661090818944&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
BIRTHYEAR
FROM MYUSER

UNION ALL

SELECT
BIRTHYEAR
FROM MYUSER
WHERE USERNO =7;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661090840942&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
1 AS COL0,
USERNO AS COL1,
USERID AS COL2,
USERPW AS COL3
FROM MYUSER

UNION ALL

SELECT
2 AS COL0,
BBSNO AS COL1,
TO_CHAR(USERNO) AS COL2,
BBSTITLE AS COL3
FROM BBSTABLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;서브쿼리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 SQL문에 존재하는 또 다른 SQL문.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;WHERE 절 서브쿼리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091009823&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM MYUSER A
WHERE A.USERNO IN (
	SELECT B.USERNO
	FROM BUYLIST B)

SELECT *
FROM MYUSER A
WHERE A.USERNO NOT IN (
	SELECT B.USERNO
	FROM BUYLIST B)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SELECT 절 서브쿼리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;반드시 단일 값만을 결과로서 얻어야한다. SUM, AVG, COUNT, MIN, MAX와 같은 집계함수와 많이 사용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구매자의정보와 구매자의 전체구매금액.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091112023&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.*,(
	SELECT SUM(PRICE) 
    FROM BUYLIST 
    WHERE BUYLIST.USERNO = A.USERNO) 
    AS TOTALBUY)
FROM MYUSER A
WHERE A.USERNO = 2;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n1GWF/btrKbsyqKOj/Iz6HK7GLkkYIZVCxa1nYk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n1GWF/btrKbsyqKOj/Iz6HK7GLkkYIZVCxa1nYk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n1GWF/btrKbsyqKOj/Iz6HK7GLkkYIZVCxa1nYk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn1GWF%2FbtrKbsyqKOj%2FIz6HK7GLkkYIZVCxa1nYk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;129&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;FROM 절 서브쿼리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FROM 다음 오는 서브쿼리의 결과를 사용할 수 있게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091186077&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
A.USERNO,
A.USERID,
A.USERPW,
B.BBSNO,
B.USERNO,
B.BBSTITLE
FROM MYUSER A, (SELECT BBSNO,USERNO,BBSTITLE FROM BBSTABLE) B;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQcdyw/btrKgtiNGfc/nK2AkkiYQ34JTU3kB4rV00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQcdyw/btrKgtiNGfc/nK2AkkiYQ34JTU3kB4rV00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQcdyw/btrKgtiNGfc/nK2AkkiYQ34JTU3kB4rV00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQcdyw%2FbtrKgtiNGfc%2FnK2AkkiYQ34JTU3kB4rV00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;622&quot; height=&quot;346&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;INSERT+서브쿼리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SELECT결과를 INSERT INTO 다음오는 테이블(여기서는MYUSER)에 데이터삽입.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091244463&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
SELECT
9, --값을 적었지만 프로시저로 받는 매개변수값, 변수값을 사용가능.
'bbbbb',
'bbbbb',
'55555',
'bbb@naver.com',
55
FROM DUAL;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rzUuV/btrJ9tLm6A7/bKd9X7cr0qkyz5J8fmOeEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rzUuV/btrJ9tLm6A7/bKd9X7cr0qkyz5J8fmOeEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rzUuV/btrJ9tLm6A7/bKd9X7cr0qkyz5J8fmOeEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrzUuV%2FbtrJ9tLm6A7%2FbKd9X7cr0qkyz5J8fmOeEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641&quot; height=&quot;216&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Group By와 그룹 함수&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 컬럼을 기준으로 그룹으로 묶어준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091316645&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT USERNO
FROM BBSTABLE
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GROUP BY 다음에오는 컬럼 외에는 집계함수(SUM, AVG, MIN, MAX, COUNT 등)을 써준다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오류의 예&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091349353&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT USERNO,BBSTITLE 
FROM BBSTABLE 
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;USERNO를 기준으로 그룹으로 묶어주었지만 나머지는 그룹함수의 도움이 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;COUNT 함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GROUP BY에 사용되는 컬럼을 기준으로 그룹으로 묶어줄 시 COUNT(컬럼)을 적어주면 COUNT(컬럼)에 적힌 컬럼도 묶어서표시,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요약표시 해주지만 행의 수를 요약해준다. 단 NULL은 세지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091397172&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SUM함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;누적구매액수,기말고사중간고사 수학시험의 합계 등등에 사용가능하다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그룹으로 묶어서표시, 요약표시 해주면서 SUM이사용된 컬럼의 숫자적인 합계를 계산할 때 사용한다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091455923&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT SUM(BBSNO),USERNO
FROM BBSTABLE
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;회원마다 누적구매액수&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091474210&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT USERNO,SUM(PRICE) 
FROM BUYLIST
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEEE7Q/btrKeuWAqWu/rX17nxbAowgVGOaj8DdR3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEEE7Q/btrKeuWAqWu/rX17nxbAowgVGOaj8DdR3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEEE7Q/btrKeuWAqWu/rX17nxbAowgVGOaj8DdR3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEEE7Q%2FbtrKeuWAqWu%2FrX17nxbAowgVGOaj8DdR3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;166&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;AVG함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그룹으로 묶어서표시, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요약표시 해주면서 AVG이 사용된 컬럼의 숫자적인 평균을 계산할 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;--회원마다 평균상품금액&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091531099&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT USERNO,AVG(PRICE)
FROM BUYLIST
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0HIpl/btrKdREuUU0/nbEow5a8k2WjaBfXEqInrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0HIpl/btrKdREuUU0/nbEow5a8k2WjaBfXEqInrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0HIpl/btrKdREuUU0/nbEow5a8k2WjaBfXEqInrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0HIpl%2FbtrKdREuUU0%2FnbEow5a8k2WjaBfXEqInrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;184&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;--전체 평균상품금액&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091541713&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT AVG(PRICE)
FROM BUYLIST;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;MAX함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그룹으로 묶어서표시, 요약표시 해주면서 그룹마다 숫자적인 최대값을 표시해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;--회원마다 구매한 상품중 최고상품금액&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091587311&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT USERNO,MAX(PRICE)
FROM BUYLIST
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3xRRg/btrKgsRJNU0/gQRrhKEVUGeKqcXqZZ2bx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3xRRg/btrKgsRJNU0/gQRrhKEVUGeKqcXqZZ2bx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3xRRg/btrKgsRJNU0/gQRrhKEVUGeKqcXqZZ2bx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3xRRg%2FbtrKgsRJNU0%2FgQRrhKEVUGeKqcXqZZ2bx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;339&quot; height=&quot;175&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;--구매한 상품중 최고상품금액&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091599902&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT MAX(PRICE)
FROM BUYLIST;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;MIN함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그룹으로 묶어서표시, 요약표시 해주면서 그룹마다 숫자적인 최소값을 표시해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;--회원마다 구매한 상품중 최저상품금액&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091650294&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT USERNO,MIN(PRICE)
FROM BUYLIST
GROUP BY USERNO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;--구매한 상품중 최저상품금액&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091662698&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT MIN(PRICE)
FROM BUYLIST;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ptu97/btrKas5RZSH/yJB4KkR19bxkNXNIlOUkvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ptu97/btrKas5RZSH/yJB4KkR19bxkNXNIlOUkvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ptu97/btrKas5RZSH/yJB4KkR19bxkNXNIlOUkvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fptu97%2FbtrKas5RZSH%2FyJB4KkR19bxkNXNIlOUkvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;281&quot; height=&quot;140&quot; data-origin-width=&quot;369&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;HAVING&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;GROUP BY로 묶인 그룹에 조건을 준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;BBSNO의 NULL이 아닌 행의 갯수 10개 초과만 조회.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091725158&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
GROUP BY USERNO
HAVING COUNT(BBSNO)&amp;gt;10;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HAVING을 사용하는이유&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661091757217&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT COUNT(BBSNO),USERNO,COUNT(BBSTITLE)
FROM BBSTABLE
WHERE COUNT(BBSNO)&amp;gt;10
GROUP BY USERNO;--오류쿼리
그룹함수(SUM,AVG,COUNT,MAX,MIN)는 WHERE절에서 사용불가.&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;트랜잭션&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;트랜잭션은 데이터 처리의 한 단위 입니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;트랜잭션을 통해 데이터의 일관성을 보증합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;COMMIT&lt;/b&gt;: 데이터베이스에 트랜잭션으로 묶인 작업을 영구적으로 데이터베이스에 반영 후 트랜잭션 종료. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;ROLLBACK&lt;/b&gt;: 데이터베이스에 트랜잭션으로 묶인 작업을 취소함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;ROLLBACK이 사용되는 곳&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;올바르지 않은 데이터가 입력되었거나 데이터베이스에 오류가 발생했을 경우 트랜잭션을 취소하는 명령어입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnCJhY/btrKetwBJsg/ZncwTBvkd4SRJqakCBtk60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnCJhY/btrKetwBJsg/ZncwTBvkd4SRJqakCBtk60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnCJhY/btrKetwBJsg/ZncwTBvkd4SRJqakCBtk60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnCJhY%2FbtrKetwBJsg%2FZncwTBvkd4SRJqakCBtk60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;670&quot; height=&quot;613&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터베이스가 비정상적으로 종료되면 자동으로 ROLLBACK이 이루어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;COMMIT&lt;/b&gt;:데이터베이스에 영구적으로 작업이 반영된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4wupP/btrKetDnOPs/UdKjyNOMjMAmACLucTgg7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4wupP/btrKetDnOPs/UdKjyNOMjMAmACLucTgg7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4wupP/btrKetDnOPs/UdKjyNOMjMAmACLucTgg7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4wupP%2FbtrKetDnOPs%2FUdKjyNOMjMAmACLucTgg7K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;279&quot; height=&quot;591&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 여기서 ROLLBACK을 사용한다해도 INSERT 문이 취소가 안된다. 그러하기 때문에 조심할 필요가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 자동COMMIT: COMMIT명령을 사용하지 않아도 자동 COMMIT되는 경우는 아래와 같음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;: DDL&lt;/b&gt;(Data Definition Language:&lt;b&gt;CREATE,DROP&lt;/b&gt; 등)문 또는 &lt;b&gt;DCL&lt;/b&gt;(Data Control Language:&lt;b&gt;GRANT,REVOKE&lt;/b&gt;)문을 사용하는 경우.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 사람이 다른 컴퓨터상에서 동일한 데이터베이스에서 작업을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: A가 BUYLIST테이블에 UPDATE,DELETE,INSERT문을 통해 COMMIT,ROLLBACK없이 작업.(BUYLIST테이블에 LOCK이 걸림) B가 BUYLIST테이블에 접근하여 변경하려고하면 변경할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: A가 해당 Transaction을 Commit또는 Rollback을 하면 B가 사용가능.(LOCK이 해제됨.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇듯 상사 또는 여타 개발자와 합의된 사안에 대해서만 COMMIT 또는 ROLLBACK을 꼭 해줘야된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;PL/SQL&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;PL/SQL(Procedure Language/SQL)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: PL/SQL은 프로그래밍 언어의 절차적 특징과 함께 SQL의 조합이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 이로인해 SQL의 모듈화. 작업처리 속도의 성능향상을 도모할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;PL/SQL Block 예제&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661092949024&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DECLARE
	Variable declaration
BEGIN
	Program Execution
EXCEPTION
	Exception handling
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로시저란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 이름을 가지고 데이터베이스에 저장되는 PL/SQL 블록으로써 매개변수를 받고 반복적으로 호출가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 또한 뭐리문을 여러 개 실행할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 여러 어플리케이션에서 공유가능&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로시저 형식&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093032842&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE PROCEDURE 프로시저이름
(
	파라미터명 파라미터방향 파라미터타입,
	파라미터명 파라미터방향 파라미터타입
) IS
프로시저에서 사용할 변수선언.
BEGIN
쿼리작성.
END;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661093078215&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--변수
BEGIN
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
16,
In_userid,
'assv',
'asssv4',
'aaas@naber.com',
50
);

UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com'
WHERE USERNO = 16;
Out_state := 0;
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;명령어로 호출&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; EXEC 프로시저이름; --파라미터가 없는 프로시저 호출 시. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;EXEC 프로시저이름(값1,값2,값3,....); --파라미터가 존재하는 프로시저 호출 시.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;테스트용 사전작업&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093196894&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DELETE FROM MYUSER;
CREATE SEQUENCE SEQ_MYUSER
	START WITH 0
	INCREMENT BY 1
	MAXVALUE 1000000000
	MINVALUE 0
	NOCYCLE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로시저 호출&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;익명블록으로 PL/SQL 작성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093239179&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;set serveroutput on;
--쿼리결과를 화면에 출력.

DECLARE
-- [변수이름] [변수타입] [:=초기값];
v_state NUMBER(11,0):=50;
BEGIN

--프로시저호출.
INSERT_USER('aabs543',v_state);

--결과값 출력
dbms_output.put_line('결과'||v_state);
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNFQSC/btrKhTauc63/VRMyuvJvpoOPtlcKIP85aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNFQSC/btrKhTauc63/VRMyuvJvpoOPtlcKIP85aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNFQSC/btrKhTauc63/VRMyuvJvpoOPtlcKIP85aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNFQSC%2FbtrKhTauc63%2FVRMyuvJvpoOPtlcKIP85aK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;194&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;:= VS =&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;:=는 대입연산자이다 자바의 = 과 같다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=는 비교연산자이다 자바의 ==과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1661093321528&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create or replace PROCEDURE INSERT_USER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_nickname IN VARCHAR2,
InOut_state IN OUT NUMBER
)
IS
[변수명] [변수타입] [:=초기값(생략가능)];
v_username VARCHAR2(250) := 'AAA';
v_userno NUMBER(11,0);
BEGIN&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661093352587&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;프로시저와 변수선언:
create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--변수
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
BEGIN
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
Out_state := v_state;
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;PL/SQL 예외처리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트방법: 프로시저 호출 시&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093393063&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 1 INTO v_userno
FROM MYUSER
WHERE USERID = In_userid
AND ROWNUM = 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쿼리에서 일치하는 USERID가 미존재로 오류 발생시.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093426935&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BEGIN
	SELECT 1 INTO v_userno
	FROM MYUSER
	WHERE USERID = In_userid
	AND ROWNUM = 1;
	
    InOut_state:=v_userno;

	EXCEPTION WHEN NO_DATA_FOUND THEN
	InOut_state:=0;
END;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661093524724&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create or replace PROCEDURE INSERT_USER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_nickname IN VARCHAR2,
InOut_state IN OUT NUMBER
)
IS
v_username VARCHAR2(250) := 'AAA';
v_userno NUMBER(11,0);
BEGIN
/*
SELECT또는
INSERT,
DELETE존재가능.
앞단의 로직..
*/
BEGIN
SELECT 1 INTO v_userno
FROM MYUSER
WHERE USERID = In_userid
AND ROWNUM = 1;
InOut_state:=v_userno;
EXCEPTION WHEN NO_DATA_FOUND THEN
InOut_state:=0;
END;
/*
뒷단의 로직처리..
*/
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_nickname,
'aa@naver.com',
50
);
UPDATE MYUSER
SET EMAIL = 'bb@naver.com'
WHERE BIRTHYEAR = 50;
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCD3OZ/btrKdQZSJ3Q/l2EBJKKTqKqTeKVV5pQXMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCD3OZ/btrKdQZSJ3Q/l2EBJKKTqKqTeKVV5pQXMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCD3OZ/btrKdQZSJ3Q/l2EBJKKTqKqTeKVV5pQXMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCD3OZ%2FbtrKdQZSJ3Q%2Fl2EBJKKTqKqTeKVV5pQXMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1039&quot; height=&quot;448&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데이터베이스 EXCEPTION에서 주로하는 일&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ROLLBACK; INSERT INTO 테이블(컬럼1,컬럼2...) VALUES('프로시저이름',오류발생위치,파라미터로 받은값,에러코드,에러메시지); 파일로 기록남기기 등등..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1661093605812&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;연습용 테이블생성:
CREATE TABLE ERROR_LOG(
ERRORID NUMBER(10,0),
PROCNM VARCHAR2(250),
STEP NUMBER(5,0),
ERRORNO NUMBER(10,0),
ERRORMSG VARCHAR2(2000),
TXT_PARAMETER VARCHAR2(2000),
ERRORDAY DATE
);
시퀀스 생성
CREATE SEQUENCE SEQ_ERRORLOG
START WITH 1
INCREMENT BY 1
MAXVALUE 100000
MINVALUE 1
NOCYCLE;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1661093615940&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create or replace PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--변수
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
v_step NUMBER(5,0):=0;
v_errcode NUMBER(10,0);
v_errmsg VARCHAR2(2000);
v_userparm VARCHAR2(2000);
BEGIN
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=0;
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
v_step:=2;
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
v_step:=3;
--Out_state := v_state;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
v_errcode:=SQLCODE;
v_errmsg:=SQLERRM;
v_userparm:=('In_userid:'||In_userid||','||'In_userpw:'||In_userpw||',In_usernickname:'||In_usernickname);
dbms_output.put_line('PROC_INMYUSER오류가 발생했습니다.');
INSERT INTO ERROR_LOG(ERRORID, PROCNM, STEP, ERRONO, ERRORMSG, TXT_PARAMETER, ERRORDAY) VALUES(SEQ_ERRORLOG.nextval,'PROC_INMYUSER',v_step,v_errcode,v_errmsg,v_userparm,sysdate);
COMMIT;
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;익명블록으로 PL/SQL 작성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093650578&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;set serveroutput on;
--쿼리결과를 화면에 출력.
DECLARE
-- [변수이름] [변수타입] [:=초기값];
v_state NUMBER(11,0):=50;
BEGIN
--프로시저호출.
INSERT_USER('aa','bb','cc',v_state);
--결과값 출력
dbms_output.put_line('결과'||v_state);
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1383&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dO0pkT/btrKbsLXWIo/NbYTwhFsbRK2DLLgcMul5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dO0pkT/btrKbsLXWIo/NbYTwhFsbRK2DLLgcMul5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dO0pkT/btrKbsLXWIo/NbYTwhFsbRK2DLLgcMul5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdO0pkT%2FbtrKbsLXWIo%2FNbYTwhFsbRK2DLLgcMul5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1383&quot; height=&quot;142&quot; data-origin-width=&quot;1383&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;패키지란?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;패키지는 다수의 프로시저를 묶어서 관리해주는 역할을 해준다. 재 사용성을 높여줌. 유지보수가 쉬워짐.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bovQ38/btrJ8IIML6O/4q5fIU8ZoRGKPjqvkU3EF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bovQ38/btrJ8IIML6O/4q5fIU8ZoRGKPjqvkU3EF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bovQ38/btrJ8IIML6O/4q5fIU8ZoRGKPjqvkU3EF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbovQ38%2FbtrJ8IIML6O%2F4q5fIU8ZoRGKPjqvkU3EF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;308&quot; height=&quot;343&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;패키지는 &lt;b&gt;선언부와&lt;/b&gt; &lt;b&gt;본문&lt;/b&gt; 두 부분으로 나뉜다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;패키지 선언부(Package Specification)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093739158&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE PACKAGE 패키지명 [AS 또는 IS]
커서 선언
변수 선언
프로시저 선언
함수 선언
예외 선언&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;패키지 본문(Package Body)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093751664&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;프로시저 정의
함수 정의&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞서 프로시저를 패키지안에 넣어보자.(선언부)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661093780406&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create or replace PACKAGE USERENTER IS
PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
);
--앞으로 생성할 프로시저
PROCEDURE INSERT_BUYLIST
(
In_name IN VARCHAR2
);
END USERENTER;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV3JX7/btrKhR4OG9b/FFMhToHUwI7vzQzrfcDYrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV3JX7/btrKhR4OG9b/FFMhToHUwI7vzQzrfcDYrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV3JX7/btrKhR4OG9b/FFMhToHUwI7vzQzrfcDYrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV3JX7%2FbtrKhR4OG9b%2FFFMhToHUwI7vzQzrfcDYrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;463&quot; height=&quot;488&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1661094027190&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create or replace PACKAGE BODY USERENTER IS
PROCEDURE PROC_INMYUSER
(
In_userid IN VARCHAR2,
In_userpw IN VARCHAR2,
In_usernickname IN VARCHAR2,
Out_state OUT NUMBER
)
IS
--변수
v_userid VARCHAR2(250) := 'AAA';
v_state NUMBER(11,0);
v_step NUMBER(5,0):=0;
v_errcode NUMBER(10,0);
v_errmsg VARCHAR2(2000);
v_userparm VARCHAR2(2000);
BEGIN
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=0;
SELECT 5 INTO v_state
FROM MYUSER
WHERE USERID =In_userid
AND ROWNUM = 1;
/*SELECT,DELETE,UPDATE,INSERT*/
v_step:=1;
INSERT INTO MYUSER
(
USERNO,
USERID,
USERPW,
NICKNAME,
EMAIL,
BIRTHYEAR
)
VALUES
(
SEQ_MYUSER.nextval,
In_userid,
In_userpw,
In_usernickname,
'aaas@naber.com',
50
);
v_step:=2;
UPDATE MYUSER
SET EMAIL = 'bbbb@naber.com';
v_step:=3;
--Out_state := v_state;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
v_errcode:=SQLCODE;
v_errmsg:=SQLERRM;
v_userparm:=('In_userid:'||In_userid||','||'In_userpw:'||In_userpw||',In_usernickname:'||In_usernickname);
dbms_output.put_line('PROC_INMYUSER오류가 발생했습니다.');
INSERT INTO ERROR_LOG(ERRORID, PROCNM, STEP, ERRONO, ERRORMSG, TXT_PARAMETER, ERRORDAY) VALUES(SEQ_ERRORLOG.nextval,'PROC_INMYUSER',v_step,v_errcode,v_errmsg,v_userparm,sysdate);
COMMIT;
END PROC_INMYUSER;
PROCEDURE INSERT_BUYLIST
(
In_name IN VARCHAR2
)IS
BEGIN
INSERT INTO BUYLIST
(
BUYNO,
USERNO,
NAME,
BUYDAY,
PRICE
)
VALUES
(
500,--고정으로넣지만 나중에 다시실행 할때 변경해야 오류가안남.
4,
'AA초콜릿',
sysdate,
5000
);
END INSERT_BUYLIST;
END USERENTER;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;패키지안의 프로시저 호출. &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형식: EXEC 패키지명.프로시저명(&amp;lsquo;값1&amp;rsquo;,&amp;rsquo;값2&amp;rsquo;&amp;hellip;..); &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예제: EXEC USERENTER.INSERT_BUYLIST('aaaaaaa');&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;114p 부터 다시 보기!&amp;nbsp;&lt;/p&gt;</description>
      <category> DB</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/86</guid>
      <comments>https://dodokwon.tistory.com/86#entry86comment</comments>
      <pubDate>Mon, 22 Aug 2022 00:03:13 +0900</pubDate>
    </item>
    <item>
      <title>2022 취준 및 입사 느낀점</title>
      <link>https://dodokwon.tistory.com/85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2022.08 드디어 취준에 성공했다! 그동안 정말 다사다난 했지만 그래도 원하는 곳에 붙게되어서 정말 기뻤다&lt;br&gt;모든 취준생이라면 공감하겠지만 불확실한 기간의 막막함, 불안함은 정말 고통스럽다.&lt;br&gt;나도 취업을 준비하며 몸은 편했지만 확실히 마음은 정말 힘들었다.누가 그랬는데 머리가 힘들면 머리와 몸이 연결되어 있어서 몸까지 힘들다고 하더라... 그래서 취준 기간동안 힘든 순간이 온다면 정말 일주일잡고 아무생각 없이 노는 기간을 잡아두는걸 추천한다.&lt;br&gt; &lt;br&gt;나도 잠깐 힘들었을 때 한 달동안은 아무곳도 서류지원조차 하지 않고 쉬기만했다. 이 기간을 갖고 나니 오히려 더 취준기간을 잘 버틸 수 있었던 것 같다! 특히 면접볼 때 멘탈관리가 중요하니 평소에 스스로 멘탈관리하는 거, 스트레스 조절하는것은 정말 필수적이다. 괜히 스트레스가 만병의 근원이라고 하는게 아니다.. 취준 때 멘탈 부서지는 순간이 정말 많이 오기 때문에 그 때마다 무너진다면 버티기 힘들어진다. 그러니 너무 힘들게 하는 것보다 취업준비도 중간중간 쉬면서 하는걸 추천..!!&lt;br&gt; &lt;br&gt;그동안 웹 관련 개발만 했다가 이 곳에 입사하게 된 후 데이터쪽과 응용프로그램 개발을 하게 되었다. 평소 익숙하게 다루던 개발언어와 툴이 아니다 보니 적응하는데 꽤 시간이 필요할 것 같다. 잘 할수 있을지 쫌 막막하지만 그래도 빨리 적응하기 위해 어느정도 스스로 노력해야하는 시간을 만들고 많이 배우고 공부하고 해야겠다는 생각이 많이 들었다.&lt;br&gt; &lt;br&gt;그리고 지금까지는 학생의 마인드로 개발했다면 지금부터는 1인분이라도 해야하는 신입개발자가 되어야하기 때문에 쫌 부담감이 있지만 천천히 한 계단씩 올라갈 것이다. 그럼 언젠가는 떳떳할수도 있지 않을까?? 사실 지금 이렇게 글을 쓰고 있는 것도 마음의 부담감을 조금이라도 덜기 위해 스스로 다짐할려고 쓰는 것 같기도 하다. 갈수록 말의 두서가 없어지는 것 같지만 그래도 아무튼 열심히 해보자!! 1년 뒤에 이 글을 봤을 때 지금 느끼는 이 감정이 좋은 추억이 될 수 있음 좋겠다.&lt;br&gt; &lt;br&gt;세상의 모든 취업준비생과 신입 개발자 들 다 같이 힘냈음 좋겠다. 첫 사회생활을 앞두고 있거나 이미 첫 발을 디딘 순간이라면 어느정도 내가 느끼는 감정에 공감할 것이라 생각한다. &lt;br&gt; &lt;br&gt;끝!&lt;br&gt; &lt;/p&gt;</description>
      <category>✏️Retrospect/ETC</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/85</guid>
      <comments>https://dodokwon.tistory.com/85#entry85comment</comments>
      <pubDate>Sun, 21 Aug 2022 20:58:25 +0900</pubDate>
    </item>
    <item>
      <title>[ JAVA ] Reflection</title>
      <link>https://dodokwon.tistory.com/83</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Reflection의 개념을 이해하는 목적으로 포스팅을 작성하게 되었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Reflection&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 Java API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스 정보를 추출할 수 있는 프로그래밍 기법&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Framework, IDE에서 동적바인딩 기능 제공(프로그램 실행 중 동적으로 클래스 정보 가져와서 사용)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ex)&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;IntelliJ 자동완성, Spring Framework Annotation 등&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 작성할 때 어떤 타입의 클래스를 사용할지 모르는 경우가 있다. 이럴 때&amp;nbsp; 리플렉션을 사용하고 코드를 작성해&amp;nbsp; 런타임에 현재 실행되고 있는 클래스를 가져와서 실행해야 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;리플렉션은 객체를 통해 클래스의 정보를 분석해내는 프로그램 기법이다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;* Reflection으로 가져올 수 있는 정보&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Class&lt;/li&gt;
&lt;li&gt;Constructor&lt;/li&gt;
&lt;li&gt;Method&lt;/li&gt;
&lt;li&gt;Field&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 정보를 가져올 수 있으며 해당 정보를 가져와 객체를 생성, 메서드 호출, 변수 값 변경을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Reflection 예제 관련 레퍼런스가 잘 정리되어 있어 참조했습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1658647654284&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;JAVA - 리플렉션 (Reflection)이란?&quot; data-og-description=&quot;리플렉션(Reflection)이란? 리플렉션은 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API입니다.   컴파일 시간이 아닌 실행 시간에&quot; data-og-host=&quot;kdg-is.tistory.com&quot; data-og-source-url=&quot;https://kdg-is.tistory.com/entry/JAVA-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98-Reflection%EC%9D%B4%EB%9E%80&quot; data-og-url=&quot;https://kdg-is.tistory.com/216&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DXQmy/hyPbV2E4wl/lH1WeDR4sIW9kCTBrWDE61/img.png?width=800&amp;amp;height=77&amp;amp;face=0_0_800_77,https://scrap.kakaocdn.net/dn/vrnaS/hyPbXMVVkx/3uOGcUIlmasEVM8Yjyvy20/img.png?width=800&amp;amp;height=77&amp;amp;face=0_0_800_77&quot;&gt;&lt;a href=&quot;https://kdg-is.tistory.com/entry/JAVA-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98-Reflection%EC%9D%B4%EB%9E%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kdg-is.tistory.com/entry/JAVA-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98-Reflection%EC%9D%B4%EB%9E%80&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DXQmy/hyPbV2E4wl/lH1WeDR4sIW9kCTBrWDE61/img.png?width=800&amp;amp;height=77&amp;amp;face=0_0_800_77,https://scrap.kakaocdn.net/dn/vrnaS/hyPbXMVVkx/3uOGcUIlmasEVM8Yjyvy20/img.png?width=800&amp;amp;height=77&amp;amp;face=0_0_800_77');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;JAVA - 리플렉션 (Reflection)이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;리플렉션(Reflection)이란? 리플렉션은 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API입니다.   컴파일 시간이 아닌 실행 시간에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kdg-is.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정리&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 리플렉션은 이름 별로 클래스 및 데이터 구조에 대한 정보의 동적 검색을 지원하고 실행 중인 Java 프로그램 내에서 조작을 허용하기 때문에 유용하다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> JAVA/Basic</category>
      <category>reflection</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/83</guid>
      <comments>https://dodokwon.tistory.com/83#entry83comment</comments>
      <pubDate>Sun, 24 Jul 2022 16:33:47 +0900</pubDate>
    </item>
    <item>
      <title>[ Web, Network ] 관련 용어 정리  ( 개인 학습용 )</title>
      <link>https://dodokwon.tistory.com/82</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp;Protocol&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어떤 시스템이 다른 시스템과 통신을 원활하게 수용하도록 해주는 통신 규약, 약속&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;IP &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전 세계 컴퓨터에 부여된 고유의 식별 주소&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Port&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. 즉, 같은 컴퓨터 내에서 프로그램을 식별하는 번호.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Socket&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; 소켓 은 네트워크에서 실행되는 두 프로그램 간의 양방향 통신 링크의 한 끝점입니다. 포트 번호에 바인딩되어 TCP 계층이 데이터를 보낼 응용 프로그램을 식별할 수 있습니다. ( 프로토콜, IP주소, 포트 넘버로 정의 됨&amp;nbsp;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스 역할로 소켓을 통해 데이터 통로가 만들어집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;데이터를 주고받을 수 있는 구조체&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Socket 통신&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; 서버와 클라이언트가 특정 port를 통해 실시간으로 양방향 통신을 하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 서버와 클라이언트가 계속 연결을 유지하는 양방향 통신으로 실시간으로 데이터를 주고 받는 상황이 필요한 경우 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) 실시간 동영상, Streaming, 온라인 게임..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RR0yq/btrHda1TDc7/a4lOgT9KerSVIFfmZy4Rgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RR0yq/btrHda1TDc7/a4lOgT9KerSVIFfmZy4Rgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RR0yq/btrHda1TDc7/a4lOgT9KerSVIFfmZy4Rgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRR0yq%2FbtrHda1TDc7%2Fa4lOgT9KerSVIFfmZy4Rgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;555&quot; height=&quot;383&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1) 클라이언트&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;socket() 함수로 가장 먼저 소켓을 엽니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;connect() 함수를 이용하여 통신할 서버의 설정된 ip와 port번호에 통신을 시도합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;통신을 시도 시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 클라이언트 서버가 서로 read(), write()를 하며 통신의 과정을 반복합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2) 서버&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 클라이언트 소켓의 연결 요청을 대기하고, 연결요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;socket() 함수를 이용하여 소켓을 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;bind() 함수로 ip와 port 번호를 지정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대시 시킬지 결정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;accept() 함수를 사용하여 클라이언트와의 연결을 기다림&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;TCP &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fffdfa;&quot;&gt;&amp;bull; &amp;nbsp;Transmission Control Protocol =&lt;/span&gt;&lt;span style=&quot;background-color: #fffdfa;&quot;&gt;&amp;nbsp;전송 제어 프로토콜&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; 양방향으로 바이트 스트림을 전송하고 연결지향적입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;오류 수정, 전송처리, 흐름제어를 보장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;송수신된 순서에 따라 중복되지 않게 데이터를 수신 =&amp;gt; 오버헤드가 발생&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;소량의 데이터보다 대량의 데이터 전송에 적합합니다. =&amp;gt; TCP 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;UDP&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fffdfa;&quot;&gt;&amp;bull; &amp;nbsp;User Datagram Protocol =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fffdfa;&quot;&gt;사용자 데이터그램 프로토콜&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; 비연결형 소켓으로 데이터의 크기에 제한이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;확실하게 전달이 보장되지 않으므로, 데이터가 손실되도 오류가 발생하지 않습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;실시간 멀티미디어 정보를 처리하기 위해서 주로 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1657701882379&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;TCP, UDP&quot; data-og-description=&quot;&amp;bull; TCP Transmission Control Protocol =&amp;nbsp;전송 제어 프로토콜 &amp;bull;&amp;nbsp;UDP User Datagram Protocol = 사용자 데이터그램 프로토콜 먼저 TCP, UDP를 말 그대로 해석해보았습니다. 본격적으로 TCP, UDP에 대해 알아보기..&quot; data-og-host=&quot;dodokwon.tistory.com&quot; data-og-source-url=&quot;https://dodokwon.tistory.com/28?category=1005294&quot; data-og-url=&quot;https://dodokwon.tistory.com/28&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cIRtZL/hyO4E7Ez63/z18kfDkFwG3Z0mlBkjXhh1/img.png?width=647&amp;amp;height=246&amp;amp;face=0_0_647_246,https://scrap.kakaocdn.net/dn/EBTSU/hyO4IhS8hQ/oMrlup54yPZq1X6WHyPoe0/img.png?width=647&amp;amp;height=246&amp;amp;face=0_0_647_246,https://scrap.kakaocdn.net/dn/UvjWF/hyO4K05L93/zvXCKQv5wfVATm6tOYII1k/img.jpg?width=1668&amp;amp;height=1620&amp;amp;face=0_0_1668_1620&quot;&gt;&lt;a href=&quot;https://dodokwon.tistory.com/28?category=1005294&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dodokwon.tistory.com/28?category=1005294&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cIRtZL/hyO4E7Ez63/z18kfDkFwG3Z0mlBkjXhh1/img.png?width=647&amp;amp;height=246&amp;amp;face=0_0_647_246,https://scrap.kakaocdn.net/dn/EBTSU/hyO4IhS8hQ/oMrlup54yPZq1X6WHyPoe0/img.png?width=647&amp;amp;height=246&amp;amp;face=0_0_647_246,https://scrap.kakaocdn.net/dn/UvjWF/hyO4K05L93/zvXCKQv5wfVATm6tOYII1k/img.jpg?width=1668&amp;amp;height=1620&amp;amp;face=0_0_1668_1620');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;TCP, UDP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; TCP Transmission Control Protocol =&amp;nbsp;전송 제어 프로토콜 &amp;bull;&amp;nbsp;UDP User Datagram Protocol = 사용자 데이터그램 프로토콜 먼저 TCP, UDP를 말 그대로 해석해보았습니다. 본격적으로 TCP, UDP에 대해 알아보기..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dodokwon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;rest-개념&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;REST(Representational State Transfer)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;REST는 웹서비스&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;와&amp;nbsp; 모바일 애플리케이션 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;경량화의 필요에 맞춘 아키텍처 원칙 세트입니다. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;가이드라인이기 때문에 이러한 권장 사항의 구현 여부는 개발자에게 달려 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터 요청이 REST API로 전송될 때는 일반적으로 하이퍼텍스트 전송 프로토콜(&lt;b&gt;HTTP&lt;/b&gt;)을 통해 이루어집니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이러한 요청을 수신하면 REST용으로 설계된 API(RESTful API 또는 RESTful 웹 서비스)가 HTML, XML, 일반 텍스트, JSON과 같은 다양한 형식으로 메시지를 반환할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JSON(JavaScript Object Notation)은 이름과는 달리 어떠한 프로그래밍 언어로든 읽을 수 있고, 인간과 기계가 모두 읽을 수 있으며, 경량화되어 있기 때문에 선호되는 메시지 형식입니다. 이러한 이유로 RESTful API는 보다 유연하고 설정하기도 쉽습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 6가지 아키텍처 가이드라인을 준수한 애플리케이션이 RESTful에 속합니다. RESTful 애플리케이션이 갖춰야 할 요소는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트, 서버, 리소스로 구성된 클라이언트-서버 아키텍처가 필요합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요청이 통과하는 서버에 클라이언트 콘텐츠가 저장되지 않는&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.redhat.com/ko/topics/cloud-native-apps/stateful-vs-stateless&quot;&gt;스테이트리스(stateless)&lt;/a&gt;&amp;nbsp;클라이언트-서버 커뮤니케이션이 필요합니다. 대신 세션의 상태에 대한 정보가 클라이언트에 저장됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일부 클라이언트-서버 간 상호 작용의 필요성을 제거할 캐시 가능 데이터가 필요합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;애플리케이션 요구 사항별로 다른 형식이 아닌, 표준화된 형식으로 정보를 전송할 수 있도록 구성 요소 간 통합된 인터페이스가 필요합니다. REST를 처음으로 제시한&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm&quot;&gt;Roy Fielding&lt;/a&gt;은 이를 &amp;ldquo;REST 아키텍처 스타일을 다른 네트워크 기반 스타일과 차별화하는 핵심적인 기능&amp;rdquo;이라고 설명합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트-서버 간의 상호 작용을 계층적으로 조정할 수 있도록 계층화된 시스템 제약이 필요합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실행 가능한 코드를 전송해 서버가 클라이언트의 기능을 확장할 수 있게 해주는 코드 온디맨드가 필요합니다. 단, 가시성이 감소할 수 있으므로 이는 선택적 가이드라인입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SOAP&lt;/b&gt; &lt;b&gt;(Simple Object Access Protocol)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹 서비스에서 기본적인 메시지를 전달하는 기반이 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;몇가지 형태의 메시지 패턴이 있지만, 보통의 경우 원격 프로시져 호출(Remote Procedure Call:RPC) 패턴으로, 네트워크 노드(클라이언트)에서 다른 쪽 노드(서버)쪽으로 메시지를 요청 하고, 서버는 메시지를 즉시 응답하게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;XML-RPC와 WDDX에서 envelope/header/body로 이루어진 구조와 전송(transport)과 상호 중립성(interaction neutrality)의 개념을 가지고 왔습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SOAP은 XML을 근간으로 헤더와 바디를 조합하는 디자인 패턴으로 설계되어 있습니다. 헤더는 선택사항으로 반복이나 보안 및 트랜잭션을 정보로 하는 메타 정보를 가지며, 바디 부분은 주요한 정보인 정보를 가지고 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SOAP 장점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기존 원격 기술들에 비해서 프록시와 방화벽에 구애받지 않고 쉽게 통신 가능합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;플랫폼과 프로그래밍 언어에 독립적입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹 서비스를 제공하기 위한 표준(WSDL, UDDI, WS-*)이 잘 정립되어 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;에러 처리에 대한 내용이 기본으로 내장되어 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;분산 환경에 적합합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SOAP 단점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;복잡한 구조로 인해 오버헤드가 있으며, 이는 SOAP의 확장을 저해하고 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;REST에 비해 상대적으로 무겁고 속도도 느립니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발 난이도가 높아 개발 환경의 지원이 필요합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;REST vs &lt;b&gt;SOAP&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 대부분의 레거시 시스템에서 SOAP를 준수하며, REST는 그보다 뒤에 고려하거나 웹 기반 시나리오에서의 더 빠른 대안으로 여기는 경우가 많습니다. REST는 유연한 구현을 제공하는 가이드라인 세트고, SOAP는 XML 메시징과 같은 특정 요건이 있는 프로토콜입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;REST API는 경량화되어 있기 때문에&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.redhat.com/ko/topics/internet-of-things-570051&quot;&gt;사물 인터넷(IoT)&lt;/a&gt;, 모바일 애플리케이션 개발,&amp;nbsp;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless&quot;&gt;서버리스(servreless) 컴퓨팅&lt;/a&gt;과 같이 보다 새로운 컨텍스트에 이상적입니다. SOAP 웹 서비스는 많은 기업에서 필요로 하는 기본 보안과 트랜잭션 컴플라이언스를 제공하지만, 이로 인해 좀 더 무거운 경향이 있습니다. 또한 Google Maps API와 같은 대부분의 퍼블릭 API는 REST 가이드라인을 따릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;FTP&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;FTP란 파일 전송 프로토콜(File Transfer Protocol)의 약자입니다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull; &amp;nbsp;기본적으로 '프로토콜'은 전자기기가 서로 통신하는 데 필요한 절차나 규칙을 뜻하죠.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;FTP는 TCP/IP 네트워크(인터넷)상의 장치가 파일을 전송할 때 사용하는 규칙입니다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;인터넷을 사용할 때 우리는 다양한 프로토콜을 사용합니다. 인터넷을 둘러볼 때는 HTTP를 사용하고, 인스턴트 메시지를 주고받을 때는 XMPP를 사용하죠. 간단히 말해 FTP란 파일을 이동할 때 사용하는 프로토콜이라고 보시면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;FTP는 주로 대량의 파일을 처리할 때 사용됩니다. 그래서 웹 개발 시 특히 유용하죠. 웹사이트를 수정할 때 FTP 세션을 통해 파일 전송을 관리하면 특정한 파일 업로드, 이미지 파일 추가, 웹 템플릿 이동 등의 작업을 수월하게 처리할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;HTTP&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;HTTP는 Hyper Text Transfer Protocol의 두문자어로,&amp;nbsp;&lt;/span&gt;&lt;b&gt;인터넷에서 데이터를 주고받을 수 있는 프로토콜&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;입니다. 프로토콜은 규칙이라고 생각하시면 됩니다. 이렇게 규칙을 정해두었기 때문에, 모든 프로그램이 이 규칙에 맞춰 개발해서 서로 정보를 교환할 수 있게 된 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657701899667&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;HTTP&quot; data-og-description=&quot;&amp;bull; HTTP (HyperText Transfer Protocol) : HTTP란 HyperText Transfer Protocol의 약자로 하이퍼텍스트를 전송하는 애플리케이션 계층 프로토콜 HTTP는&amp;nbsp;HTML뿐이 아니라 TEXT, IMAGE, JSON, XML 등 다양한 형태의..&quot; data-og-host=&quot;dodokwon.tistory.com&quot; data-og-source-url=&quot;https://dodokwon.tistory.com/33?category=1005294&quot; data-og-url=&quot;https://dodokwon.tistory.com/33&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CozM2/hyO4Fep0o4/8zOpJukqKC4EgCboU9txtk/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/bhkNA5/hyO4JHTfnR/UwEv6GOIgSmTV6W3wriQ2k/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/nGNJN/hyO4JulLfZ/aXzX2yEkV5XHH7hJl4S4v0/img.jpg?width=1668&amp;amp;height=1620&amp;amp;face=0_0_1668_1620&quot;&gt;&lt;a href=&quot;https://dodokwon.tistory.com/33?category=1005294&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dodokwon.tistory.com/33?category=1005294&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CozM2/hyO4Fep0o4/8zOpJukqKC4EgCboU9txtk/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/bhkNA5/hyO4JHTfnR/UwEv6GOIgSmTV6W3wriQ2k/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/nGNJN/hyO4JulLfZ/aXzX2yEkV5XHH7hJl4S4v0/img.jpg?width=1668&amp;amp;height=1620&amp;amp;face=0_0_1668_1620');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;HTTP&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; HTTP (HyperText Transfer Protocol) : HTTP란 HyperText Transfer Protocol의 약자로 하이퍼텍스트를 전송하는 애플리케이션 계층 프로토콜 HTTP는&amp;nbsp;HTML뿐이 아니라 TEXT, IMAGE, JSON, XML 등 다양한 형태의..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dodokwon.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 보안 문제를 해결해주는 프로토콜이&amp;nbsp;&lt;b&gt;'HTTPS'&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTPS(HyperText Transfer Protocol Secure)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTPS는 텍스트를 암호화한다. (공개키 암호화 방식으로)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DNS&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 도메인 이름 시스템(DNS)은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SMTP, &lt;/b&gt;&lt;b&gt;Simple Mail Transfer Protocol&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; 일반적으로&amp;nbsp;&lt;b&gt;전자 메일 전송을위한 표준 프로토콜&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;이메일을 송수신하는 서버를 SMTP 서버라고 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;TLS/SSL HandShake&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; HTTPS에서 클라이언트와 서버가 통신 전에 SSL 인증서로 신뢰성 여부를 판단하기 위해 연결하는 방식입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbnBBD/btrHdyg6Bs8/2pS2Wu7J8CWbu8pmvbzzF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbnBBD/btrHdyg6Bs8/2pS2Wu7J8CWbu8pmvbzzF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbnBBD/btrHdyg6Bs8/2pS2Wu7J8CWbu8pmvbzzF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbnBBD%2FbtrHdyg6Bs8%2F2pS2Wu7J8CWbu8pmvbzzF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;418&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1)&amp;nbsp; 클라이언트는 서버에게 Client hello 메시지를 담아 서버로 보냅니다. 이 때 암호화된 정보를 함께 담는데 버전, 암호 알고리즘, 압축 방식 등을 담습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) 서버는 클라이언트가 보낸 암호 알고리즘과 압축방식을 받고, 세션 ID 와 CA&amp;nbsp; 공개인증서를 server hello 메시지와 함께 담아 응답합니다. 이 CA인증서에는 앞으로 통신 이후 사용할 대칭키가 생성되기 전, 클라이언트에서 handshake 과정 속 암호화에 사용할 공개키를 담고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3) 클라이언트 측은 서버에서 보낸 CA 인증서에 대해 유효한지 CA 목록에서 확인하는 과정을 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4) CA 인증서에 대한 신뢰성이 확보되었다면 클라이언트는 난수 바이트를 생성하여 서버의 공개키로 암호화 합니다. 이 난수 바이트는 대칭키를 전하는데 사용되고 앞으로 서로 메시지를 통신할 때 암호화하는데 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;5) 만약 2번 단계에서 서버가 클라이언트 인증서를 함께 요구했다면, 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보내줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;6) &lt;span style=&quot;background-color: #ffffff;&quot;&gt;서버는 클라이언트의 인증서를 확인 후, 난수 바이트를 자신의 개인키로 복호화 후 대칭 마스터 키 생성에 활용합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;7) &lt;/span&gt;&lt;/span&gt;클라이언트는 handshake 과정이 완료되었다는&amp;nbsp;finished&amp;nbsp;메시지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보내줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;8) &lt;span style=&quot;background-color: #ffffff;&quot;&gt;서버도 동일하게 교환 내용들을 해싱한 뒤 클라이언트에서 보내준 값과 일치하는 지 확인합니다.. 일치하면 서버도 마찬가지로&amp;nbsp;&lt;/span&gt;finished&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;메시지를 이번에 만든 대칭키로 암호화하여 보내줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;9) 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받은 사용자란 걸 인지하고, 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고받을 수 있게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;Spyware&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 스파이웨어&lt;span style=&quot;background-color: #ffffff;&quot;&gt;(Spyware)는 사용자의 동의 없이 설치되어 컴퓨터의 정보를 수집하고 전송하는&amp;nbsp;&lt;/span&gt;악성 소프트웨어&lt;span style=&quot;background-color: #ffffff;&quot;&gt;로, 신용 카드와 같은 금융 정보 및&amp;nbsp;&lt;/span&gt;주민등록번호&lt;span style=&quot;background-color: #ffffff;&quot;&gt;와 같은 신상정보,&amp;nbsp;&lt;/span&gt;암호&lt;span style=&quot;background-color: #ffffff;&quot;&gt;를 비롯한 각종 정보를 수집한다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;스파이(spy)와 소프트웨어(software)를 합친 말로 컴퓨터나 스마트 폰에 잡입해서 개인정보를 빼가는 악성 소프트웨어이다.&amp;nbsp;설정 변경 및 삭제하기 어렵게 되어 있지만 바이러스처럼 스스로 복제하지는 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Ransomware&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;컴퓨터 시스템을 감염시켜 접근을 제한하고 일종의 몸값을 요구하는&amp;nbsp;&lt;/span&gt;악성 소프트웨어&lt;span style=&quot;background-color: #ffffff;&quot;&gt;의 한 종류다. 컴퓨터로의 접근이 제한되기 때문에 제한을 없애려면 해당 악성 프로그램을 개발한 자에게 지불을 강요받게 된다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull; 이때&amp;nbsp;&lt;/span&gt;암호화&lt;span style=&quot;background-color: #ffffff;&quot;&gt;되는 랜섬웨어가 있는 반면, 어떤 것은 시스템을 단순하게 잠그고 컴퓨터 사용자가 지불하게 만들기 위해 안내문구를 띄운다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Process&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;프로그램을 메모리 상에서 실행중인 작업&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp;프로세스는 각각 별도의 주소공간 할당 (독립적)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Code&lt;/b&gt;&amp;nbsp;: 코드 자체를 구성하는 메모리 영역(프로그램 명령)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Data&lt;/b&gt;&amp;nbsp;: 전역변수, 정적변수, 배열 등&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;초기화 된 데이터는 data 영역에 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;초기화 되지 않은 데이터는 bss 영역에 저장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Heap&lt;/b&gt;&amp;nbsp;: 동적 할당 시 사용 (new(), malloc() 등)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Stack&lt;/b&gt;&amp;nbsp;: 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Thread&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;프로세스 안에서 실행되는 여러 흐름 단위&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp;스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp;하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로세스는 자신만의 고유 공간과 자원을 할당받아 사용&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;하는데 반해,&amp;nbsp;&lt;/span&gt;&lt;b&gt;스레드는 다른 스레드와 공간, 자원을 공유하면서 사용&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;하는 차이가 존재함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Multi &lt;b&gt;Process&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;하나의 컴퓨터에 여러 CPU 장착 &amp;rarr; 하나 이상의 프로세스들을 동시에 처리(병렬)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&amp;nbsp;: 안전성 (메모리 침범 문제를 OS 차원에서 해결)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&amp;nbsp;: 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생. Context Switching으로 인한 성능 저하&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Context Switching&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;프로세스의 상태 정보를 저장하고 복원하는 일련의 과정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Multi &lt;b&gt;Thread&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &amp;nbsp;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp;스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&amp;nbsp;: 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소 전역 변수와 정적 변수에 대한 자료 공유 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&amp;nbsp;: 안전성 문제. 하나의 스레드가 데이터 공간 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;로드-밸런싱-load-balancing&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;로드 밸런싱(Load Balancing)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;둘 이상의 CPU or 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDTnR/btrHdaAWhvR/6h6xNSwqcf8iomyaBNg2Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDTnR/btrHdaAWhvR/6h6xNSwqcf8iomyaBNg2Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDTnR/btrHdaAWhvR/6h6xNSwqcf8iomyaBNg2Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDTnR%2FbtrHdaAWhvR%2F6h6xNSwqcf8iomyaBNg2Uk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;524&quot; height=&quot;255&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;요즘 시대에는 웹사이트에 접속하는 인원이 급격히 늘어나게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 이 사람들에 대해 모든 트래픽을 감당하기엔 1대의 서버로는 부족하다. 대응 방안으로 하드웨어의 성능을 올리거나(Scale-up) 여러대의 서버가 나눠서 일하도록 만드는 것(Scale-out)이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하드웨어 향상 비용이 더욱 비싸기도 하고, 서버가 여러대면 무중단 서비스를 제공하는 환경 구성이 용이하므로 Scale-out이 효과적이다. 이때 여러 서버에게 균등하게 트래픽을 분산시켜주는 것이 바로&amp;nbsp;&lt;b&gt;로드 밸런싱&lt;/b&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;로드 밸런싱&lt;/b&gt;은 분산식 웹 서비스로, 여러 서버에 부하(Load)를 나누어주는 역할을 한다. Load Balancer를 클라이언트와 서버 사이에 두고, 부하가 일어나지 않도록 여러 서버에 분산시켜주는 방식이다. 서비스를 운영하는 사이트의 규모에 따라 웹 서버를 추가로 증설하면서 로드 밸런서로 관리해주면 웹 서버의 부하를 해결할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;데드락-deadlock-교착-상태&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데드락 (DeadLock, 교착 상태)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 무한히 다음 자원을 기다리게 되는 상태를 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(마치, 외나무 다리의 양 끝에서 서로가 비켜주기를 기다리고만 있는 것과 같다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;OSI 7 Layer&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull;&amp;nbsp; 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말하며 국제표준화기구(ISO, International Organization for Standardization)에서 네트워크 간 호환을 위해 OSI 7 계층이라는 표준 네트워크 모델을 만들었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OSI 7단계로 정의한 이유는 &lt;b&gt;통신이 일어나는 과정을 단계별로 파악하기 위함과 통신 과정 중에 특정한 곳에 이상이 생길 경우&lt;/b&gt;에 다른 단계의 장비 및 소프트웨어 등을 건드리지 않고 통신 장애를 &lt;b&gt;일으킨 단계에서 해결할 수 있기 때문&lt;/b&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z3uVO/btrG9L2Mqid/fUWk0g6VPpodvcUU9vJSi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z3uVO/btrG9L2Mqid/fUWk0g6VPpodvcUU9vJSi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z3uVO/btrG9L2Mqid/fUWk0g6VPpodvcUU9vJSi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz3uVO%2FbtrG9L2Mqid%2FfUWk0g6VPpodvcUU9vJSi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;501&quot; height=&quot;638&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull;&amp;nbsp;&amp;nbsp;1 계층 물리계층 (Physical Layer)&amp;nbsp; &amp;nbsp;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;리피터, 케이블, 허브 등&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 장치를 연결하기 위한 전기적 및 물리적 세부사항을 정의한 계층입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인터넷 케이블, 라우터 스위치 등의 전기적 신호가 물리적인 장치에 의해 왔다 갔다 (통신)하는 계층입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 계층에서는 &lt;b&gt;단지 데이터를 전달만&lt;/b&gt; 할 뿐 전송하려는 (또는 받으려는) 데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 신경쓰지 않고 &lt;b&gt;단지 데이터 전기적인 신호로 변환해서 주고 받는 기능&lt;/b&gt;만 할 뿐입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;ex ) 케이블 종류, 무선 주파수 링크, 핀 배치, 전압, 물리 요건 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull;&amp;nbsp;&amp;nbsp;2 계층 데이터 링크 계층 (Data Link Layer)&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;브릿지, 스위치 등&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 계층은 장치 간 신호를 전달하는 물리계층을 이용하여 네트워크 상의 주변 장치들 간의 데이터를 전송하는 역할을 합니다. 쉽게 말해 &lt;b&gt;물리계층을 통해 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보의 전달을 수행할 수 있도록 도와주는 역할&lt;/b&gt;을 하는 것입니다.&amp;nbsp; &lt;b&gt;Mac 주소를 통해 통신&lt;/b&gt;합니다. 프레임 Mac 주소를 부여하고 에러검출, 재전송, 흐름제어를 진행합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따라서 통신에서의 오류도 찾아주고 재전송도 하는 기능을 가지고 있습니다.두 지점(장치) 간의 신뢰성 있는 전송을 보장하기 위한 계층입니다. 데이터 링크 계층에서 전송되는 단위를 프레임이라고 하고 대표적인 장비로는 브리지, 스위치 등이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주소 할당 : 물리 계층으로부터 받은 신호들이 네트워크 상의 장치에 올바르게 안착할 수 있게 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오류 감지 : 신호가 전달되는 동안 오류가 포함되는지 감지 오류가 있다면 해당 데이터를 폐기한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull;&amp;nbsp; 3 계층 네트워크 계층 (Network Layer)&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;라우터, IP&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 계층은 여러 개의 노드를 거칠 때마다 &lt;b&gt;경로를 찾아주는 역할&lt;/b&gt;을 하는 계층으로 다양한 길이의 데이터를 네트워크를 통해 전달하고, 그 과정에서 전송계층이 요구하는 서비스 품질을 제공하기 위한 기능적, 절차적 수단을 제공합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;경로를 선택하고 주소를 정하고 경로에 따라 패킷을 전달해주는 것&lt;/b&gt;이 이 계층의 주 역할입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;대표적으로 라우터가 있으며 2계층의 장비 중 스위치하는 장비에 라우팅 기능을 장착한 Layer 3 스위치도 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 계층은&lt;b&gt; 라우팅, 흐름제어, 세그멘테이션, 오류제어, 인터네트워킹 등을 수행&lt;/b&gt;합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라우터라는 장비가 이 계층에서 동작하고 해당 계층에서 동작하는 스위치도 있습니다. 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가장 중요한 기능은 &lt;b&gt;데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능(라우팅)&lt;/b&gt;입니다. 여기에 사용되는 프로토콜의 종류도 다양하고 라우팅 하는 기술도 다양합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라우터를 통해 이동할 경로를 선택하여 IP 주소를 지정하고, 해당 경로에 따라 패킷을 전달해줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며 계층적입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull;&amp;nbsp; 4&amp;nbsp;계층 전송 계층 (Transport Layer) &lt;span style=&quot;background-color: #ffffff;&quot;&gt;TCP, UDP&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 계층은 &lt;b&gt;통신을 활성화하기 위한 계층&lt;/b&gt;이며 보통 TCP 프로토콜을 이용하며 &lt;b&gt;포트를 열어서 응용프로그램들이 전송을 할 수 있게 합니다.&lt;/b&gt; 만약 데이터가 왔다면 4계층에서 해당 데이터를 하나로 통합하여 5계층으로 전달합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;양 끝단의 사용자가 신뢰성 있는 데이터를 주고받게 하여 상위 계층이 데이터 전달의 유효성이나 효율성을 신경쓰지 않게 해주는 계층이며 시퀀스 넘버 기반의 오류제어 방식을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전송계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고(stateful), 연결기반(connection oriented)입니다. 이는 전송계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻합니다. 가장 잘 알려진 전송 계층의 예는 TCP입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;종단간(end to end)통신을 다루는 최하위 계층으로 종단 간 신뢰성있고 효율적인 데이터를 전송하며 기능은 오류 검출 및 복구와 흐름제어, 중복 검사 등을 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TCP : 신뢰성, 연결지향적&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;UDP : 비신뢰성, 비연결성, 실시간&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3-Way-Handshaking&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl2wxQ/btrG9lpOK18/yUvayMWHh85klDOgimKeSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl2wxQ/btrG9lpOK18/yUvayMWHh85klDOgimKeSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl2wxQ/btrG9lpOK18/yUvayMWHh85klDOgimKeSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl2wxQ%2FbtrG9lpOK18%2FyUvayMWHh85klDOgimKeSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;498&quot; height=&quot;406&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1단계&amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 통신 중에 클라이언트와 서버 모두 Established 상태&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;두 시스템이 통신을 하기 전에 클라이언트는 포트가 닫힌 Closed 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서버는 해당 포트로 항상 서비스를 제공할 수 있는 Listen 상태&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2단계 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 통신을 끊으려는 클라이언트가 서버에 FIN 패킷을 보내고 클라이언트는 Close Wait 상태가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트가 처음 통신을 하려면 임의의 포트 번호가 클라이언트 프로그램에 할당되고, 클라이언트는 서버에 연결하고 싶다는 의사 표시로 SYN Sent 상태가 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3단계 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 서버는 클라이언트의 연결 종료 요청을 확인하고 응답으로 클라이언트에 ACK 패킷을 보내면 서버도 클라이언트의 연결을 종료하겠다는 의미로 FIN 패킷을 보내고 Close Wait 상태가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트의 연결 요청을 받은 서버는 SYN Received 상태가 되고, 클라이언트에 연결을 해도 좋다는 의미로&amp;nbsp; SYN+ACK 패킷을 보냅니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4단계&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 클라이언트는 연결 종료를 요청한 것에 대한 서버의 응답을 확인했다는 표시로 ACK 패킷을 서버에 보냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트는 연결 요청에 대한 서버의 응답을 확인했다는 표시로 ACK 패킷을 서버로 보냅니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull;&amp;nbsp; 5&amp;nbsp;계층 세션 계층 (Session Layer)&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;API, Socket&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;양 끝단의 응용 프로세스가 통신을 관리하는 방법을 제공하는 계층입니다. 이 계층의 프로토콜은 통신 연결이 손실되는 경우 연결 복구 시도가 가능하며 연결 시도 중 장시간 연결이 되지 않았다면 세션 계층의 프로토콜 연결을 닫고 다시 연결을 시도합니다. 또한 전이중 통신, 반이중 통신, 명령 중 하나를 제공하여 교환 메시지 스트림(stream) 내에서 동기화 지점을 제공합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;데이터가 통신하기 위한 논리적 연결을 담당한다. TCP/IP 세션을 만들고 없애는 책임을 지니고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세션 계층의 중요한 기능인 동기화가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;전이중 통신 (Full Duplex)&lt;/b&gt; : 두 대의 단말기가 데이터를 송수신하기 위해 동시에 각각 독립된 회선을 사용하는 통신 방식입니다. 대표적으로 전화망, 고속데이터 통신을 들 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;반이중 통신(Half Duplex)&lt;/b&gt; : 한 쪽이 송신하는 동안 다른 쪽에서 수신하는 통신 방식으로 전송방향을 교체합니다. 마스터 슬레이브 방식의 센서 네트워크가 대표적입니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull;&amp;nbsp; 6 계층 표현 계층 (Presentaion Layer)&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;JPEG, MPEG 등&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드 간 번역을 담당하는 계층입니다. 사용자 시스템에서 데이터의 형식상 차이를 다루는 응용계틍으로부터 덜어주고&amp;nbsp; MINE 인코딩이나 암호화 등의 동작이 이 계층에서 이뤄집니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 계층은 데이터 표현에서 독립적인 부분을 나타내고 일반적으로 응용 프로그램 형식을 준비 또는 네트워크 형식으로 변환하거나 네트워크 형식을 응용프로그램 형식으로 변환하는 것을 나타냅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다시말해 이 계층은 &lt;b&gt;응용 프로그램이나 네트워크를 위해 데이터를 표현하는 것입니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쉬운 예시로 EBCDIC(확장 이진화 십진법 교환 부호)로 인코딩된 문서 파일은 ASCII로 인코딩 된 파일로 바꿔주는 것, 해당 데이터가 TEXT인지, 그림인지, GIF인지, JPG인지 구분하는 것이 표현 계층의 몫입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 데이터 표현에 대한 독립성을 제공하고 암호화하는 역할을 담당한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 파일 인코딩, 명령어를 포장, 압축, 암호화한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp; 7&amp;nbsp;계층 응용 계층 (Application Layer)&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;HTTP, FTP, DNS 등&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행하는 계층입니다. 응용 계층은 최상위 계층으로 사용자에게 직접적으로 보이는 부분이며 OSI 모형에서는 최종 사용자에게 가장 가까운 계층입니다. 웹 상에서 웹 서버 및 웹 브라우저 상호간의 데이터 전송을 위한 응용계층 프로토콜.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음에는 www 상의 하이퍼텍스트 형태의 문서를 전달하는데 주로 이용하였고 현재는 이미지, 비디오, 음성 등 대부분의 모든 형식의 데이터를 전송할 수 있습니다. 7계층에서 작동하는 응용프로그램은 사용자와 직접적으로 상호작용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 최종 목적지로, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 사용자 인터페이스, 전자우편, 데이터베이스 관리 등의 서비스를 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) 웹 브라우저 : Chrome, Firefox .. / 응용 프로그램 : Outlook, Office ..&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 281px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;포트&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; text-align: center; height: 37px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;20&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; text-align: center; height: 37px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FTP Data&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; text-align: center; height: 37px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;File Transfer Protocol Datagram&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FTP 연결 시 실제로 데이터를 전송한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; text-align: center; height: 37px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;21&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; text-align: center; height: 37px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FTP&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; text-align: center; height: 37px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;File Transfer Protocol-Control&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FTP 연결 시 인증과 제어를 한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;23&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Telnet&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;텔넷 서비스로 원격지 서버의 실행 창을 얻어낸다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;25&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SMTP&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Simple Message Transfer Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메일을 보낼 때 사용한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;53&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Domain Name Service&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름을 해석하는데 사용한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;69&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TFTP&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Trivial File Transfer Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인증이 존재하지 않는 단순한 파일 전송에 사용한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;80&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HTTP&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Hyper Text Transfer Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;웹 서비스를 제공한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;110&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;POP3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Post Office Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메일 서버로 전송된 메일을 읽을 때 사용한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;111&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RPC&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sun의 Remote Protocol Call&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원격에서 서버의 프로세스를 실행할 수 있게 한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;138&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;NetBIOS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Network Basic Input Output Service&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;윈도우에서 파일을 공유할 수 있게 한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;143&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;IMAP&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Internet Message access Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;POP3와 기본적으로 같지만 메일이 확인된 후에도 서버에 남는다는 것이 차이점&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 72.5469px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;161&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 110.516px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;SNMP&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 624.938px; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Simple Network Management Protocol&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;네트워크 관리와 모니터링을 위해 사용된다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;VPN&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; VPN 또는 가상 사설 네트워크는 인터넷을 통해 디바이스 간에 사설 네트워크 연결을 생성합니다.&amp;nbsp;VPN은 퍼블릭 네트워크를 통해 데이터를 안전하게 익명으로 전송하는 데 사용됩니다. 또한 사용자 IP 주소를 마스킹하고 데이터를 암호화하여 수신 권한이 없는 사람이 읽을 수 없도록 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull; &amp;nbsp;VPN(가상 사설 네트워크)은 사람들이 자신의 인터넷 트래픽을 보호하고 온라인에서 신원을 비공개로 유지하는 가장 쉽고 효과적인 방법입니다. 보안 VPN 서버에 연결하면, 인터넷 트래픽이 해커, 정부, 인터넷 제공 업체를 포함하여&amp;nbsp;&lt;/span&gt;&lt;b&gt;그 누구도 들여다볼 수 없는 암호화된 터널을&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;통과하게 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Transaction&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&amp;nbsp;사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.&amp;nbsp;하나의 트랜잭션은 Commit되거나 Rollback된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull; &amp;nbsp;Atomicity(원자성)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&amp;nbsp;트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull; &amp;nbsp;Consistency(일관성)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&amp;nbsp;시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull; &amp;nbsp;Isolation(독립성,격리성)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2.&amp;nbsp;수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;bull; &amp;nbsp;Durablility(영속성,지속성)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1.&amp;nbsp;성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JAR&amp;nbsp;(Java&amp;nbsp;Archive)&amp;nbsp;WAR&amp;nbsp;(Web&amp;nbsp;Application Archive) 모두 JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일이며&amp;nbsp;어플리케이션을 쉽게 배포하고&amp;nbsp;동작시킬&amp;nbsp;수 있도록 있도록 관련 파일(리소스, 속성파일 등)들을 패키징해주는 것이 주 역할입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;War &lt;span style=&quot;background-color: #ffffff;&quot;&gt;( Web Application Archive )&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; .war&amp;nbsp;확장자 파일은&amp;nbsp; servlet / jsp 컨테이너에 배치 할 수 있는&amp;nbsp;웹 어플리케이션(Web Application) 압축 파일 포맷입니다.&amp;nbsp; JSP,&amp;nbsp; SERVLET, JAR, CLASS, XML, HTML, JAVASCRIPT 등&amp;nbsp; Servlet Context 관련 파일들로 패키징 되어있습니다. WAR는 웹 응용 프로그램를 위한 포맷이기 때문에&amp;nbsp;&lt;b&gt;웹 관련 자원만 포함하고 있으며&lt;/b&gt;&lt;b&gt;&amp;nbsp;이를 사용하면 웹 어플리케이션을 쉽게 배포&lt;/b&gt;하고 테스트 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Jar &lt;span style=&quot;background-color: #ffffff;&quot;&gt;( Java Archive )&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; .jar&amp;nbsp;확장자 파일에는 Class와 같은 Java 리소스와 속성 파일,&amp;nbsp; 라이브러리 및 액세서리 파일이 포함되어 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쉽게 JAVA 어플리케이션이 동작할 수 있도록&lt;b&gt;&amp;nbsp;자바 프로젝트를 압축한 파일&lt;/b&gt;로 생각하시면 되겠네요. 실제로&amp;nbsp;JAR 파일은 플랫폼에 귀속되는 점만 제외하면 WIN ZIP파일과 동일한 구조입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JAR 파일은&amp;nbsp;원하는 구조로 구성이 가능하며 JDK(Java Development Kit)에 포함하고 있는&amp;nbsp;JRE(Java Runtime Environment)만 가지고도 실행이 가능합니다.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;** 계속해서 추가하는 **&lt;/span&gt;&lt;/p&gt;</description>
      <category> Web &amp;amp; Network</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/82</guid>
      <comments>https://dodokwon.tistory.com/82#entry82comment</comments>
      <pubDate>Wed, 13 Jul 2022 18:32:16 +0900</pubDate>
    </item>
    <item>
      <title>[ Linux ] Linux, 기본 명령어 정리</title>
      <link>https://dodokwon.tistory.com/81</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btbNcE/btrG9l27gGC/j8unakhuhp8EEkEBKF7vk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btbNcE/btrG9l27gGC/j8unakhuhp8EEkEBKF7vk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btbNcE/btrG9l27gGC/j8unakhuhp8EEkEBKF7vk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtbNcE%2FbtrG9l27gGC%2Fj8unakhuhp8EEkEBKF7vk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;190&quot; height=&quot;448&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Linux&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;1991년 Linus Torvals가 개발한 오픈소스 운영체제(Operating System, OS)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Unix 운영체제를 기반으로 만들어진 운영체제로 유닉스 클론 운영체제&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;크게 커널, 셸, 디렉토리로 3가지로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;** OS, Operating System **&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; CPU, Memory, 스토리지처럼 시스템의 하드웨어와 리소스를 직접 관리하는 소프트웨어로 애플리케이션과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적인 리소스를 연결&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1 )&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;커널 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;kernel&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;운영체제의 주요 구성요소로써 컴퓨터 하드웨어와 프로세스를 이어주는 핵심 인터페이스 입니다. 주로&amp;nbsp; 메모리관리, 프로세스 관리, 장치 드라이버 관리, 시스템 호출 및 보안 등 컴퓨터의 모든 자원을 초기화하고 제어하는 기능을 수행합니다,.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;메모리 관리&lt;/b&gt; : 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로세스 관리&lt;/b&gt; : 어느 프로세스가 CPU(중앙처리 장치)를 언제 얼마나 오랫동안 사용할지를 결정합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;장치 드라이버&lt;/b&gt; : 하드웨어와 프로세스 사이에서 중재자 / 인터프리터의 역할을 수행합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;시스템 호출 및 보안&lt;/b&gt; : 프로세스의 서비스 요청을 수신합니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;레드헷 공식문서에 이해하기 쉽게 설명이 되어있어 일부내용을 발췌해 정리했습니다.&amp;nbsp;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657687360803&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Linux 커널이란 무엇일까요?&quot; data-og-description=&quot;Linux 커널은 Linux 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스입니다.&quot; data-og-host=&quot;www.redhat.com&quot; data-og-source-url=&quot;https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel&quot; data-og-url=&quot;https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/P1p4O/hyO4MRSieY/UvKCKoERDpPR6tn695UIr1/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/yhCz9/hyO4EGhJZ3/voD7eUlQ30yrho8yFBAdgK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675&quot;&gt;&lt;a href=&quot;https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/P1p4O/hyO4MRSieY/UvKCKoERDpPR6tn695UIr1/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675,https://scrap.kakaocdn.net/dn/yhCz9/hyO4EGhJZ3/voD7eUlQ30yrho8yFBAdgK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Linux 커널이란 무엇일까요?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Linux 커널은 Linux 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.redhat.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;올바르게 구현된 커널은 사용자가 볼 수 없으며 커널 공간이라는 자신만의 작은 작업 공간에서 메모리를 할당하고 저장되는 모든 항목을 추적합니다. 웹 브라우저 및 파일과 같이 사용자가 볼 수 있는 것은 사용자 공간이라고 하며 이러한 애플리케이션은 시스템 호출 인터페이스(SCI)를 통해 커널과 통신하는 것입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예를 들자면 하드웨어는 경영진, 커널은 비서, 사용자는 대중 및 직원이라고 할 수 있습니다.&amp;nbsp; 커널은 강력한 경영인(하드웨어)를 위해 일하는 바쁜 비서로 비서의 할 일은 직원 및 대중(사용자)로 부터 수신되는 메시지 및 요청(프로세스)을 경영진에게 전달하고 어디에 무엇이 저장되어 있는지 기억(메모리)하고 특정한 시간에 누가 경영진을 얼마 동안 만날 수 있는지 결정하는 것입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;하드웨어:&lt;/b&gt;&amp;nbsp;시스템의 토대가 되는 물리적 머신으로, 메모리(RAM)와 프로세서 또는 중앙 처리 장치(CPU) 그리고 입출력(I/O) 장치로 구성됩니다. CPU는 계산을 수행하고 메모리를 읽고 씁니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Linux 커널:&lt;/b&gt;&amp;nbsp;OS의 핵심입니다.메모리에 상주하며 CPU에 명령을 내리는 소프트웨어입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;사용자 프로세스:&lt;/b&gt;&amp;nbsp;실행 중인 프로그램으로, 커널이관리 합니다. 사용자 프로세스가 모여 사용자 공간을 구성합니다. 사용자 프로세스를 단순히&amp;nbsp;프로세스라고도 합니다. 또한, 커널은 이러한 프로세스 및 서버가 서로 통신(프로세스 간 통신 또는 IPC라고 함)할 수 있도록 해줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;- Red Hat -&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2 )&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;셸 shell&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;시스템 사용자 공간으로 설정 및 소프트웨어 설치와 같은 시스템 수준 데스크를 위한 관리 계층입니다. 셀은 사용자가 입력한 문장을 읽어 요청을 실행합니다. 이후&amp;nbsp; 커널이 명령어를 해석해 결과를 수행한 후 해당 결과를 다른 프로그램이나 커널로 전송합니다. &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;즉 사용자와 커널의 중간다리 역할을 수행합니다. &lt;span style=&quot;background-color: #ffffff;&quot;&gt;리눅스는 bash셸을 기본으로 사용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3 )&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;디렉토리 directory&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;파일을 가지고 있거나 또 다른 디렉터리를 가지고 있는 그룹을 의미하며 파일 시스템에 의해 관리됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; pwd (print work directory)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;현재 사용자가 위치하는(&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;작업 중인&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;) 경로를 출력.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; ls (list segements)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;현재 위치한 디렉토리에 있는 파일과 디렉토리 목록 조회&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ls -l : 파일과 디렉토리의 상세정보 출력 ( 권한 소유계정 그룹계정 파일크기[Byte] 생성날짜 파일명 )&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ls -a : 현재 디렉토리에서 숨김 파일 포함해 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ls -t : 파일들을 제일 최신 생성된 것부터 생성시간순으로 표시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ls -rt : 파일들을 제일 예전에 생성된 것 부터 생성시간순으로 표시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ls -li:&amp;nbsp;ls-l상태에서&amp;nbsp;inode번호를 함께 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ll:&amp;nbsp;ls-l과 동일&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; cd&amp;nbsp;(change directory)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;디렉토리를 이동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cd 디렉터리 경로 : 이동하려는 디렉터리로 이동&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cd ~ : 홈 디렉터리로 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cd / : 최상위 디렉터리로 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cd . : 현재 디렉터리&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cd .. : 상위 디렉터리로 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cd - : 이전 경로로 이동&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; mkdir (&lt;span style=&quot;background-color: #ffffff;&quot;&gt;make directory&lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;디렉토리를 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mkdir dirname : dirname이라는 디렉터리 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mkdir dir1 dir2: 한 번에 여러 개의 디렉터리 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mkdir -p dirname/sub_dirname : dirname이라는 디렉터리 생성, sub_dirname이라는 하위 디렉터리도 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mkdir -m 700 dirname : 특정 퍼미션(권한)을 갖는 디렉터리 생성&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;파일의 퍼미션&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LIgJQ/btrHaW2DkHi/5PMkNJ6xEA4rYpSd3KAybK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LIgJQ/btrHaW2DkHi/5PMkNJ6xEA4rYpSd3KAybK/img.png&quot; data-alt=&quot;https://cocoon1787.tistory.com/717&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LIgJQ/btrHaW2DkHi/5PMkNJ6xEA4rYpSd3KAybK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLIgJQ%2FbtrHaW2DkHi%2F5PMkNJ6xEA4rYpSd3KAybK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;894&quot; height=&quot;288&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://cocoon1787.tistory.com/717&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; rmdir&amp;nbsp;(&lt;span style=&quot;background-color: #ffffff;&quot;&gt;remove directory&lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 빈 디렉터리를 삭제할 때 사용하는 명령어. 삭제하려는 디렉터리가 비어있지 않을 경우에는 삭제 불가&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; lsblk&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; Linux 시스템에서 사용가능한 블록장치를 나열해야하는 경우 사용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; mount&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; sd카드 또는 usb 연결 시 배포반이 처음에 직접표시 되지 않는 경우 mount 명령어로 기존 파일 시스템으로&amp;nbsp; 마운트&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; df&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 파일 시스템의 디스크 공간에 대한 필수 정보를 표시. 기본적으로 1,024Byte 블록단위로 출력&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; uname&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;이름, 커널 버전 및 기타 시스템 특정 세부사항과 같은 시스템 정보를 얻기 위한 명령어&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; ps&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;현재 시스템에서 실행 중인 프로세스를 시각화. 시스템 리소스를 분석하는데 사용된다. Linux 모니터링 도구&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; kill&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 자원제한으로 인해 멈춘 프로세스를 종료하는 경우 사용하는 명령어. 관리자 권한이 필요한 명령어로 PID를 이용하여 종료시킨다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; service&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 리눅스 터미널에서 시스템 전체 서비스를 호출하기 위한 명령어. 터미널 창에서 직접 System V init 스크립트를 실행하기 위해 사용 가능&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; batch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 미리 정의된 일정에 따라 시스템 서비스를 실행하는 깔끔한 도구 기능을 수행하는 명령어.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; shutdown&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 시스템을 종료하는 명령어로 현재 접속 중인 모든 사용자에게 시스템이 종료된다는 메시지 전송&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; touch&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;유효한 빈 파일을 작성하기 위한 필수 Linux 명령어, 0바이트 파일을 생성하고 파일의 날짜와 시간을 수정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;touch filename : filename의 파일을 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;touch -c filename : filename의 시간을 현재시간으로 갱신&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;touch -t 202110291608 filename : filename의 시간을 날짜 정보(YYYYMMDDhhmm)로 갱신&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(20211029160 =&amp;gt; 2021.10.29.16:08)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;touch -r oldfile newfile&amp;nbsp;&amp;nbsp;:&amp;nbsp;newfile의 날짜 정보를&amp;nbsp;oldfile의 날짜 정보와 동일하게 변경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;cat&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;파일의 내용을 화면에 출력, 리다이렉션 기로를 사용하여 새 파일 생성&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cat filename filename의 내용을 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cat filename | more&amp;nbsp; 페이지 별로 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cat source &amp;gt; target&amp;nbsp; 출력의 방향을 파일로 변경함, source를 target으로 복사했다고 볼 수 있다. target으로 지정한 파일의 이름이 이미 존재하는 경우 그 파일에 source의 내용이 덮어씌워짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cat source &amp;gt;&amp;gt; target source의 내용이 target파일에 append됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cat file | head : file의 내용을 처음부터 10번째 줄까지만 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cat file | tail : file의 내용을 끝에서부터 10번째 줄까지만 출력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;head&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;파일의 맨 앞에서 몇 라인만을 출력&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;tail&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;파일의 맨 아래부분 몇 라인만을 출력. &lt;/span&gt;오류나 파일로그를 실시간으로 확인할 때 유용하게 사용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;cp (copy)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp; 시스템에서 파일이나 디렉터리를 한 폴더에서 다른 폴더로 복사하도록 지시하는 간단한 명령어&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cp file1 file2 : file1을 file2라는 이름으로 복사&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cp -f file1 file2 : 강제 복사. file2라는 파일이 이미 있을 경우 강제로 기존 file2를 지우고 복사&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cp -r dir1 dir2 : 디렉터리 복사. 폴더 안의 모든 하위 경로와 파일들을 복사&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;mv(move)&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;파일을 이동시키는 명령어&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mv file1 file2 : file1 파일을 file2 파일로 변경&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mv file1 /dir : file1 파일을 dir 디렉터리로 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mv file1 file2 /dir : 여러 개의 파일을 dir 디렉터리로 이동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;mv /dir1 /dir2 : dir1 디렉터리를 dir2 디렉터리로 이름 변경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;comm&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;두 개의 파일을 공통 행과 구별되는 행으로 비교 가능.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; less&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;파일을 열고 내용을 볼 수 있는 텍스트 뷰어 기능. cat과 달리 터미널 세션을 방해하지 않고 파일 내에서 양방향 탐색가능&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;In ( link )&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;특정 파일에 대한 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;심벌릭&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;링크를 만들기 위한 명령어. 디스크 공간의 특정 파일이나 디렉터리에 대한 심벌릭 링크, 인스턴스 생성&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ln -s source target&amp;nbsp;(softlink, target은 source를 참조)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ln source target&amp;nbsp;(hardlink, 같은 inode번호를 가진다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp;&amp;nbsp;alias&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;자주 사용하는 명령으들을 별명으로 정의하여 쉽게 사용할 수 있도록 설정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; alias 별명 = '명령어 정의'&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;chmod (change Mode)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&amp;nbsp; 권한 변경을 해주는 명령어&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chomd 664 fileName&amp;nbsp;(ex. chomd 664 note.txt)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;chmod u+x fileName&amp;nbsp;(ex. chomd u+x note.txt)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;u(user), g(group), o(other)를 의미하며 +는 권한부여, -는 권한박탈&amp;nbsp; (ex. u+x =&amp;gt; 유저에게 execute권한을 부여)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;grep&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;검색하고자 하는 문자를 옵션으로 주면 해당 문자열과 일치하는 파일을 찾아준다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;grep 문자열 파일이름&amp;nbsp;(ex. grep test *.log)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;grep -H 문자열 파일이름&amp;nbsp;(어떤 파일인지를 함께 출력해줌)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;grep -w 문자열 파일이름&amp;nbsp;(입력한 문자열과 정확히 일치하는 파일만을 출력)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; tar&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;압축관련 명령어&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tar cvfz target.tar.gz source1 source2&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;source1, source2를 target으로 압축한다. 현재 디렉토리를 모두 압축하고 싶은경우에는 *를 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tar.gz는 tar(파일과 디렉토리를 한 묶음으로 만듬)라는 명령어를 이용하여 gzip으로 압축한다는 의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;tar xvfz source.tar.gz&amp;nbsp; xvfz중 x는 extract를 의미하며 압축을 해제할 때 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;bull;&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 관&lt;span style=&quot;background-color: #ffffff;&quot;&gt;리자 권한을 사용할 수 있는 명령어. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;root계정으로 접속하여&amp;nbsp;&lt;/span&gt;etc/sudoers &lt;span style=&quot;background-color: #ffffff;&quot;&gt;파일에서 계정에 권한을 주어야 함.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;학습에 많은 도움이 된 링크를&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;참조&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;했습니다.  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참조 및 출처&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;a style=&quot;color: #0593d3;&quot; href=&quot;https://velog.io/@ghldjfldj/%EB%A6%AC%EB%88%85%EC%8A%A4Linux%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Linux]리눅스(Linux)란 무엇인가?&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;a style=&quot;color: #0593d3;&quot; href=&quot;https://velog.io/@ovan/Linux-Linux-%EB%A7%8E%EC%9D%B4-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Linux] Linux 많이 사용하는 명령어 모음&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;a style=&quot;color: #0593d3;&quot; href=&quot;https://cocoon1787.tistory.com/717&quot;&gt;[Linux] 리눅스 기본 명령어 정리&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;a style=&quot;color: #0593d3;&quot; href=&quot;https://dora-guide.com/linux-commands/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;리눅스 명령어 모음&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category> Linux</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/81</guid>
      <comments>https://dodokwon.tistory.com/81#entry81comment</comments>
      <pubDate>Wed, 13 Jul 2022 14:40:17 +0900</pubDate>
    </item>
    <item>
      <title>[ OS ] 프로세스와 스레드 Process, Thread</title>
      <link>https://dodokwon.tistory.com/80</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1 ) 프로세스 Process&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;In computing, a process is the instance of a computer program that is being executed by one or many threads.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;cb65&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴퓨터 분야에서&amp;nbsp;&lt;b&gt;프로세스는 컴퓨터 프로그램의 인스턴스&lt;/b&gt;로, 하나 이상의 스레드를 통해 실행된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;- 위키 -&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스를 한마디로 정의하면&amp;nbsp;&lt;b&gt;실행 중인 프로그램 (A program in execution)&amp;nbsp;&lt;/b&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 프로그램이 메모리에 올라와 실행되고 있는 능동적인 존재입니다. 이는 정상적인 실행을 위해 운영체제로부터 CPU(시스템 자원)를 할당받아 실행됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;c79e&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로그램&lt;/b&gt;: 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램 (정적인 상태)&lt;/span&gt;&lt;/li&gt;
&lt;li id=&quot;8639&quot; data-selectable-paragraph=&quot;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로세스&lt;/b&gt;: 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1-1 ) 프로세스의 메모리 구성요소&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vsGqn/btrG4HEHEpl/3YFJXnW0KwBzPNv3Php7Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vsGqn/btrG4HEHEpl/3YFJXnW0KwBzPNv3Php7Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vsGqn/btrG4HEHEpl/3YFJXnW0KwBzPNv3Php7Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvsGqn%2FbtrG4HEHEpl%2F3YFJXnW0KwBzPNv3Php7Sk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;673&quot; height=&quot;449&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;935&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1 )&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Code)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;영역&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&amp;nbsp; :&amp;nbsp; 프로그램의 코드 자체로 실행할 프로그램의 코드 및 매크로 상수가 기계어 형태로 저장되는 영역입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2 )&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;데이터(Data) 영역&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&amp;nbsp; :&amp;nbsp; 프로그램의 전역 변수&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(global variable)&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;나 정적 변수&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(static variable)&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;의 할당을 위해 존재하는 공간으로 프로그램의 시작과 함께 할당되어 종료될 때 소멸됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3 )&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;스택&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Stack)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;영역&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&amp;nbsp; :&amp;nbsp; 지역 변수&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(local variable)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;할당과 함수 호출 시 전달되는 인수&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(argument)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;값으로 함수 안에서 선언된 지역변수, 매개변수, 리턴 값 등이 저장되고 함수 호출 시 기록, 종료되면 제거됩니다. ( 임시 메모리 )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;4 )&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;힙&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Heap)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;영역&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; :&amp;nbsp; 동적 메모리 영역으로 관리 가능한 데이터 외의 다른 형태의 데이터를 관리하기 위한 공간입니다. ( new(), malloc() )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 OS로 여러 Process를 실행, 관리할 수 있는데 이를 &lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #edfcf6;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #456771;&quot;&gt;멀티테스킹 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #5733b1;&quot;&gt;&lt;span style=&quot;background-color: #f4f3ff;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이라고 합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* 멀티테스킹 *&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;OS로 CPU가 작업하는데 필요한 자원을 프로세스 또는 스레드 간 나누는 행위입니다. &lt;/span&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;이를 통해 여러 응용 프로그램을 동시에 열고 작업할 수 있습니다. &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만 CPU는 한 번에 한가지 명령어만 처리할 수 있기 때문에 이는&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 동시가 아닌 &lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #edfcf6;&quot;&gt;Context Switching&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; 을 통해 프로세스를 번갈아 실행하고 관리하는 것입니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;* Context Switching *&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CPU가 현재 작업 중인 프로세스에서 다른 프로세스로 넘어갈 때 지금까지의 프로세스의 상태를 저장(PCB)하고, 새 프로세스의 저장된 상태를 다시 적재하는 작업을 Context Switch라 합니다. 이 때 Context Switching은 CPU 자원을 할당하는&amp;nbsp; Scheuler에 의해 발생합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1-2 ) 프로세스 특징&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스는 독립된 메모리 영역(Code, Data, Stack, Heap의 구조), 주소공간, CPU 시간을 할당받습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 프로세스의 정보를 담고 있는 &lt;span style=&quot;background-color: #edfcf6;&quot;&gt;&lt;span style=&quot;color: #456771;&quot;&gt;&lt;b&gt;PCB&lt;/b&gt;&lt;/span&gt;(Process Control Block)&lt;/span&gt;가 만들어집니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기본적으로 프로세스당 최소 1개의 스레드를 가지고 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 프로세스는 별도의 주소 공간에서 실행되고 프로세스끼리는 자원을 공유하지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)이 필요합니다.&amp;nbsp;&amp;nbsp; ex ) 메일 슬롯, 파이프, 소켓, 시그널, 공유 메모리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;* &lt;b&gt;PCB&amp;nbsp; &lt;/b&gt;&lt;b&gt;(Process Control Block)&lt;/b&gt; *&lt;/span&gt;&lt;span style=&quot;color: #000000; background-color: #edfcf6;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스에 대한 정보로 프로세스 생성 시에 만들어지는 것입니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;* PCB의 구조 *&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp;프로세스 번호 (Process Identification Number, PID)&lt;/b&gt; : &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프로세스의 고유로 한 정수 번호이며 다른 프로세스와의 구별을 위해 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프로세스의 상태&amp;nbsp;(Status) &lt;/b&gt;: &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;준비&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;실행&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;대기&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;보류 등의 상태&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp;프로세스 우선순위 (Priority)&lt;/b&gt;&amp;nbsp;:&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;스케줄링을 할 때 사용되는 우선순위&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;b&gt;&amp;nbsp;프로그램 카운터(Program&amp;nbsp;Counter,PC&lt;/b&gt;&lt;b&gt;)&lt;/b&gt; :&amp;nbsp;다음에 실행될 명령어의 주소 값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;b&gt;메모리 포인터&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로그램과 데이터가 저장되어 있는 메모리 블록 위치와&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공유되는 메모리 블록들에 대한 포인터&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;nbsp;문맥 데이터&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문맥 교환 시에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CPU&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;레지스터 값들을 저장하는 영역&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;할당받은&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;자원들에 대한 목록&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개방&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Open)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한 파일 등&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할당받은&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;자원들의 정보&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;b&gt;계정 정보&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(Accounting Information)&lt;/b&gt; : CPU&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 사용한 시간 등의 정보&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;&amp;nbsp;입출력 정보 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;:&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000;&quot;&gt;진행 중인 입출력 요구 등의 정보&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1-3 ) 프로세스 상태&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3SNcE/btrG4GTizVJ/Jdk9eNr10T6vFaT0aZ8IV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3SNcE/btrG4GTizVJ/Jdk9eNr10T6vFaT0aZ8IV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3SNcE/btrG4GTizVJ/Jdk9eNr10T6vFaT0aZ8IV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3SNcE%2FbtrG4GTizVJ%2FJdk9eNr10T6vFaT0aZ8IV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;381&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. &lt;span style=&quot;color: #464653;&quot;&gt;생성&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Created)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자가 요청한 작업이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커널에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등록되고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PCB&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;가 만들어져 프로세스가 만들어진 다음 준비나 보류 준비 상태로 되기 위해 잠시&lt;span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;거치는 상태&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스를 생성한 후 메모리 공간을 검사하여 충분한 공간이 있으면 메모리를 할당하면서 준비 상태로 바꾸어주고&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇지 못할 경우 보류 준비 상태&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. &lt;span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;준비&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Ready)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;CPU&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할당받기&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;위해 기다리고 있는 상태&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;CPU&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만 주어지면 바로 실행할 준비가 되어 있는 상태&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.&lt;span&gt; &lt;span style=&quot;color: #464653;&quot;&gt;실행&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Running)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CPU&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할당받아&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행 중인 상태&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: CPU&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 할당하는 것을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디스패치&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Dispatch)&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라고 함&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4.&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #464653;&quot;&gt;대기&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Blocked)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스가 실행되다가 입출력 처리를 요청하거나&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;바로 확보될 수 없는 자원을 요청하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CPU&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 양도하고 요청한 일이 완료되기를 기다리면서 대기하는 상태&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5.&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #464653;&quot;&gt;종료&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Terminated)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프로세스가 종료될 때 아주 잠시 거치는 상태&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;:&amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;프로세스는 할당되었던 모든 자원들이 회수되고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;PCB&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;만 커널에 남아있는 상태&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6.&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #464653;&quot;&gt;보류 준비&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Suspended Ready)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;:&amp;nbsp;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성된 프로세스가 바로 메모리를 받지 못할 때나&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;준비 또는 실행 상태에서 메모리를 잃게 될 때를 위해 필요&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;:&amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;실행 상태의 프로세스가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CPU&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 반납하면서 준비 상태로 바뀔 때 메모리 공간까지 잃어야 하는 경우라면 보류 준비 상태로 바뀌게&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(Suspended)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;됨&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7.&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;color: #464653;&quot;&gt;보류 대기&lt;/span&gt;&lt;span style=&quot;color: #464653;&quot;&gt;(Suspended Blocked)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #464653;&quot;&gt;: &lt;span style=&quot;color: #000000;&quot;&gt;대기 상태일 때 메모리 공간을 잃은 상태&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2 ) 스레드 Thread&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;p id=&quot;8fec&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system&lt;/p&gt;
&lt;p id=&quot;0168&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨터 분야에서 실행되는 스레드는 일반적으로 운영체제의 일부인 스케줄러에 의해 독립적으로 관리 될 수 있는 프로그래밍 된 명령어의 가장 작은 시퀀스&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;- 위키 -&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스레드란 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;프로세스 안에서 실행되는 &lt;b&gt;여러 흐름 단위&lt;/b&gt;로&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt; 프로세스마다 최소 1개의 스레드를 포함하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;또한 스레드는 프로세스 내에서 실행되는 흐름으로 &lt;b&gt;프로세스 자원을 공유&lt;/b&gt;합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세스 내의 주소 공간이나 자원들 공유합니다.&lt;/li&gt;
&lt;li&gt;한 프로세스 내에서 동작하는 여러 실행의 흐름입니다.&lt;/li&gt;
&lt;li&gt;스레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다&lt;/li&gt;
&lt;li&gt;같은 프로세스 안에 여러 스레드들은 서로 공유가능하지만 다른 프로세스의 메모리에는 직접 접근할 수 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr729T/btrGWbU29iF/s0u1WqILD3eklG7H9t9tZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr729T/btrGWbU29iF/s0u1WqILD3eklG7H9t9tZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr729T/btrGWbU29iF/s0u1WqILD3eklG7H9t9tZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr729T%2FbtrGWbU29iF%2Fs0u1WqILD3eklG7H9t9tZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;542&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;즉, 서로 독립적인 일들을 불필요하게 순차적으로 수행하는 사실을 개선하기 위해 프로세스보다 작고 독립적으로 스케줄링이 가능한 스레드라는 개념이 도입된 것입니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세스 : 전체적인 하나의 일&amp;nbsp; /&amp;nbsp; 고유 공간과 자원을 할당받아 사용&lt;/li&gt;
&lt;li&gt;스레드 : 세분된 작은 일&amp;nbsp; /&amp;nbsp; 다른 스레드와 공간, 자원을 공유하며 사용&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;학습에 많은 도움이 된 링크를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #000000;&quot;&gt;참조&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;했습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;참조 및 출처&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cocoon1787.tistory.com/688&quot;&gt;[OS] 프로세스(Process)와 스레드(Thread) 차이 (멀티 프로세스, 멀티 스레드)&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;a4f6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Process와 Thread 이야기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@khai96/Process-vs-Thread&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Process vs Thread&lt;/a&gt;&lt;/p&gt;</description>
      <category> Web &amp;amp; Network</category>
      <category>Process</category>
      <category>Thread</category>
      <author>  개발개발  </author>
      <guid isPermaLink="true">https://dodokwon.tistory.com/80</guid>
      <comments>https://dodokwon.tistory.com/80#entry80comment</comments>
      <pubDate>Tue, 12 Jul 2022 01:56:59 +0900</pubDate>
    </item>
  </channel>
</rss>