<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>슈코딩</title>
    <link>https://kyumin1020.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 5 Aug 2026 23:58:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Roshu</managingEditor>
    <image>
      <title>슈코딩</title>
      <url>https://tistory1.daumcdn.net/tistory/5329418/attach/c2c58c9b6e904c1a95b3ebe65e08bd6b</url>
      <link>https://kyumin1020.tistory.com</link>
    </image>
    <item>
      <title>[기술면접] Django 50문 50답 46~52</title>
      <link>https://kyumin1020.tistory.com/79</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tWGuL/btrPgFMAx9t/UT2OAsdDmKwQw0ahWkCu1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tWGuL/btrPgFMAx9t/UT2OAsdDmKwQw0ahWkCu1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tWGuL/btrPgFMAx9t/UT2OAsdDmKwQw0ahWkCu1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtWGuL%2FbtrPgFMAx9t%2FUT2OAsdDmKwQw0ahWkCu1K%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;277&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&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;h4 data-ke-size=&quot;size20&quot;&gt;⭐46.&amp;nbsp;Django&amp;nbsp;프로젝트를&amp;nbsp;배포할&amp;nbsp;때,&amp;nbsp;시크릿키를&amp;nbsp;노출하지&amp;nbsp;않는&amp;nbsp;방법에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.env에&amp;nbsp;시크릿키와&amp;nbsp;database정보들을&amp;nbsp;작성하고&amp;nbsp;settings.py에서는&amp;nbsp;.env파일의&amp;nbsp;정보를&amp;nbsp;가져와서&amp;nbsp;사용합니다. &lt;br /&gt;그리고&amp;nbsp;.env를&amp;nbsp;.gitignore에&amp;nbsp;포함시켜&amp;nbsp;github에&amp;nbsp;push되지&amp;nbsp;않도록&amp;nbsp;하고&amp;nbsp;EC2서버에&amp;nbsp;따로&amp;nbsp;.env파일을&amp;nbsp;업로드합니다. &lt;br /&gt;같은&amp;nbsp;방식으로&amp;nbsp;local_settings.py라는&amp;nbsp;파일을&amp;nbsp;생성해서&amp;nbsp;하는&amp;nbsp;방법도&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐47.&amp;nbsp;Django&amp;nbsp;프로젝트&amp;nbsp;진행&amp;nbsp;시&amp;nbsp;발생하는&amp;nbsp;CORS&amp;nbsp;오류를&amp;nbsp;처리하는&amp;nbsp;방법에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CORS는&amp;nbsp;Cross&amp;nbsp;Origin&amp;nbsp;Resource&amp;nbsp;Sharing의&amp;nbsp;약자로 &lt;br /&gt;도메인 또는 포트가 다른 서버의 자원을 요청하는 매커니즘입니다.&lt;/li&gt;
&lt;li&gt;CORS 문제는 다른 도메인의 서버로부터 요청이 들어왔을 때, 헤더에 접근을 허락하는 내용이 없으면 발생합니다.&lt;br /&gt;이럴&amp;nbsp;경우&amp;nbsp;외부&amp;nbsp;서버에서&amp;nbsp;보내는&amp;nbsp;요청의&amp;nbsp;헤더(Access-Control-Allow-Origin&amp;nbsp;response&amp;nbsp;헤더)에&amp;nbsp; &lt;br /&gt;cross&amp;nbsp;origin&amp;nbsp;HTTP&amp;nbsp;요청을&amp;nbsp;허가해&amp;nbsp;접근을&amp;nbsp;허락하는&amp;nbsp;내용을&amp;nbsp;추가해&amp;nbsp;주면&amp;nbsp;된다.&lt;/li&gt;
&lt;li&gt;pip를&amp;nbsp;통해(혹은&amp;nbsp;Poetry)django-cors-headers를&amp;nbsp;다운받고&amp;nbsp;installed&amp;nbsp;app에&amp;nbsp;명시를&amp;nbsp;해준다음 &lt;br /&gt;cors allow (header, method, allowed_origin) 설정들을 용도에 맞게 설정해주면 해결됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐48.&amp;nbsp;Django&amp;nbsp;프로젝트를&amp;nbsp;배포할&amp;nbsp;때&amp;nbsp;Allow&amp;nbsp;Host에&amp;nbsp;*&amp;nbsp;가&amp;nbsp;들어가면&amp;nbsp;안되는&amp;nbsp;이유는?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;allow&amp;nbsp;host&amp;nbsp;*은&amp;nbsp;어떤&amp;nbsp;호스트에서&amp;nbsp;접근을&amp;nbsp;해도&amp;nbsp;허락하겠다는&amp;nbsp;의미로&amp;nbsp;다양한&amp;nbsp;공격의&amp;nbsp;대상이&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐49.&amp;nbsp;Django&amp;nbsp;프로젝트를&amp;nbsp;배포할&amp;nbsp;때&amp;nbsp;사용되는&amp;nbsp;Gunicorn이&amp;nbsp;무엇이며,&amp;nbsp;WSGI를&amp;nbsp;왜&amp;nbsp;사용해야&amp;nbsp;하는지&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gunicorn은 웹서버에 필요한 동적페이지 요청을 python에 맞게 해석하여 응용프로그램에 전달해주는 역할을 합니다. &lt;br /&gt;이를 통해 장고 어플리케이션은 웹서버로 구동될 수 있습니다. &lt;/li&gt;
&lt;li&gt;장고의 공식문서를 보면 django의 runserver는 테스트, 디버깅용이며&lt;br /&gt;보안과&amp;nbsp;성능테스트를&amp;nbsp;거치지&amp;nbsp;않았기&amp;nbsp;때문에&amp;nbsp;wsgi와&amp;nbsp;웹서버로&amp;nbsp;서비스하도록&amp;nbsp;권장되어있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐50.&amp;nbsp;Django&amp;nbsp;프로젝트를&amp;nbsp;배포할&amp;nbsp;때&amp;nbsp;사용되는&amp;nbsp;NGINX가&amp;nbsp;무엇이며,&amp;nbsp;웹서버를&amp;nbsp;왜&amp;nbsp;사용해야&amp;nbsp;하는지&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;nginx란 정적 페이지 요청을 처리하고 웹서버의 구축을 도와주는 소프트웨어입니다. &lt;br /&gt;비동기 이벤트를 기반으로 하는 처리방식으로 응답이 빠르고 트래픽 처리에 유리합니다.&lt;/li&gt;
&lt;li&gt;nginx를 프록시 서버로 사용할 수 있으며, 클라이언트의 요청을 서버에 분산하기 위한 로드 밸런싱 기능,&amp;nbsp; &lt;br /&gt;DDos 공격 완화, 웹서버의 ssl인증도 적용도 가능합니다.&lt;/li&gt;
&lt;li&gt;Gunicorn만으로 서버를 구축하면 정적인 페이지를 관리할 수 없고 클라이언트와 서버를 분리해 &lt;br /&gt;REST API서버를 구축하여 사용한다고 해도 Nginx를 통해 장점으로 언급한 프록시 서버를 구축해 다양한 &lt;br /&gt;보안이점도 얻을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐51.&amp;nbsp;Django에서&amp;nbsp;PostgreSQL을&amp;nbsp;선호하는&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PostgreSQL은 확장 가능성 및 표준 준수를 강조하는&amp;nbsp;&lt;br /&gt;객체-관계형&amp;nbsp;데이터베이스&amp;nbsp;관리&amp;nbsp;시스템(ORDBMS)의&amp;nbsp;하나&amp;nbsp;입니다.&lt;/li&gt;
&lt;li&gt;Django는&amp;nbsp;PostgreSQL에서만&amp;nbsp;작동하는&amp;nbsp;여러&amp;nbsp;데이터&amp;nbsp;유형을&amp;nbsp;제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0c3c26;&quot;&gt;PostgreSQL에는 Django가 지원하는 다른 데이터베이스에서 공유되지 않는 많은 기능이 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;PostgreSQL에 Django에서 지원하는 기능&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;집계 함수 기능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;데이터베이스 제약 기능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;양식 필드 및 위젯 기능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;데이터베이스 함수 기능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;모델 인덱스 기능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;조회 기능&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;데이터베이스 마이그레이션 작업&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;전체 텍스트 검색&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;검증&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1666366209674&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;django.contrib.postgres | Django documentation | Django&quot; data-og-description=&quot;Django The web framework for perfectionists with deadlines. Toggle theme (current theme: auto) Toggle theme (current theme: light) Toggle theme (current theme: dark) Toggle Light / Dark / Auto color theme Overview Download Documentation News Community Code&quot; data-og-host=&quot;docs.djangoproject.com&quot; data-og-source-url=&quot;https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/&quot; data-og-url=&quot;https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;django.contrib.postgres | Django documentation | Django&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Django The web framework for perfectionists with deadlines. Toggle theme (current theme: auto) Toggle theme (current theme: light) Toggle theme (current theme: dark) Toggle Light / Dark / Auto color theme Overview Download Documentation News Community Code&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.djangoproject.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Django 공식문서 참고&lt;/b&gt;&lt;/p&gt;</description>
      <category>코딩공부/기술면접</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/79</guid>
      <comments>https://kyumin1020.tistory.com/79#entry79comment</comments>
      <pubDate>Thu, 27 Oct 2022 15:33:17 +0900</pubDate>
    </item>
    <item>
      <title>[기술면접] Django 50문 50답 31~45</title>
      <link>https://kyumin1020.tistory.com/78</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqpqMe/btrPfYy7WBw/sV7ImQ4kFxv5BybcqU1J20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqpqMe/btrPfYy7WBw/sV7ImQ4kFxv5BybcqU1J20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqpqMe/btrPfYy7WBw/sV7ImQ4kFxv5BybcqU1J20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqpqMe%2FbtrPfYy7WBw%2FsV7ImQ4kFxv5BybcqU1J20%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;277&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&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;h4 data-ke-size=&quot;size20&quot;&gt;⭐31.&amp;nbsp;DRF&amp;nbsp;Serializer는&amp;nbsp;무엇이며,&amp;nbsp;어떤&amp;nbsp;기능을&amp;nbsp;수행합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Serializer는&amp;nbsp;queryset과&amp;nbsp;모델&amp;nbsp;인스턴스와&amp;nbsp;같이&amp;nbsp;복잡한&amp;nbsp;데이터를&amp;nbsp;JSON,&amp;nbsp;XML&amp;nbsp;또는&amp;nbsp;&lt;br /&gt;다른 콘텐츠 유형으로 변환할 수 있고, Serializer는&amp;nbsp;받은&amp;nbsp;데이터의&amp;nbsp;유효성&amp;nbsp;검사를&amp;nbsp;&lt;br /&gt;진행한&amp;nbsp;뒤&amp;nbsp;복잡한&amp;nbsp;타입으로의&amp;nbsp;형&amp;nbsp;변환을&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;Serialization을&amp;nbsp;제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐32.&amp;nbsp;JSON&amp;nbsp;형식으로&amp;nbsp;데이터를&amp;nbsp;받고,&amp;nbsp;Serializer를&amp;nbsp;통해서&amp;nbsp;JSON형식으로&amp;nbsp;데이터를&amp;nbsp;반환하는&amp;nbsp;이유는&amp;nbsp;무엇인가요?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JSON은 특정 언어의 종속 되지 않습니다. &lt;/li&gt;
&lt;li&gt;xml&amp;nbsp;보다&amp;nbsp;가볍기&amp;nbsp;때문에&amp;nbsp;최소한의&amp;nbsp;용량으로&amp;nbsp;데이터&amp;nbsp;전송이&amp;nbsp;가능합니다. &lt;/li&gt;
&lt;li&gt;xml 보다 구조정의의 용이성과 가독성이 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐33.&amp;nbsp;Serializer를&amp;nbsp;통해서&amp;nbsp;특정&amp;nbsp;모델에&amp;nbsp;존재하지&amp;nbsp;않지만,&amp;nbsp;관계&amp;nbsp;있는&amp;nbsp;테이블의&amp;nbsp;필드&amp;nbsp;레코드를&amp;nbsp;반환하는&amp;nbsp;방법에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Serializer&amp;nbsp;MethodField를&amp;nbsp;사용하면&amp;nbsp;됩니다. &lt;br /&gt;serializer&amp;nbsp;에&amp;nbsp;test&amp;nbsp;=&amp;nbsp;serializer.SerializerMethodField()를&amp;nbsp;추가합니다. &lt;br /&gt;get_test&amp;nbsp;라는&amp;nbsp;함수를&amp;nbsp;선언합니다&amp;nbsp;(객체를&amp;nbsp;인자로&amp;nbsp;받습니다) &lt;br /&gt;fields&amp;nbsp;에&amp;nbsp;test&amp;nbsp;를&amp;nbsp;추가&amp;nbsp;해줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐34.&amp;nbsp;Serializer를&amp;nbsp;통해서&amp;nbsp;역참조&amp;nbsp;하는&amp;nbsp;방법에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약&amp;nbsp;post&amp;nbsp;라는&amp;nbsp;모델을&amp;nbsp;역참조&amp;nbsp;하려면&amp;nbsp;post_set을&amp;nbsp;통해서&amp;nbsp;역참조&amp;nbsp;를&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp; &lt;br /&gt;혹&amp;nbsp;related_name&amp;nbsp;을&amp;nbsp;모델에&amp;nbsp;선언해줬다면&amp;nbsp;related_name을&amp;nbsp;통해&amp;nbsp;참조&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐35.&amp;nbsp;DRF&amp;nbsp;Q기능을&amp;nbsp;통해서&amp;nbsp;쿼리하는&amp;nbsp;것은&amp;nbsp;어떤&amp;nbsp;장점이&amp;nbsp;있습니까?&lt;/h4&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;할때&amp;nbsp;and&amp;nbsp;,&amp;nbsp;or&amp;nbsp;,&amp;nbsp;not&amp;nbsp;연산을&amp;nbsp;사용&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;복잡한&amp;nbsp;데이터를&amp;nbsp;조회할&amp;nbsp;때&amp;nbsp;유용하게&amp;nbsp;쓰일&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐36.&amp;nbsp;Serializer에서&amp;nbsp;어떻게&amp;nbsp;객체를&amp;nbsp;validate하게&amp;nbsp;됩니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;validate&amp;nbsp;함수를&amp;nbsp;통해서&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp; &lt;br /&gt;함수의&amp;nbsp;인자값으로&amp;nbsp;해당&amp;nbsp;값이&amp;nbsp;전달되고&amp;nbsp;유효성&amp;nbsp;검사를&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;validator_필드명&amp;nbsp;을&amp;nbsp;통해서&amp;nbsp;정의&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp; &lt;br /&gt;유효성&amp;nbsp;검사가&amp;nbsp;실패하면&amp;nbsp;raise&amp;nbsp;ValidationError&amp;nbsp;를&amp;nbsp;발생시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐37.&amp;nbsp;Serializer에서&amp;nbsp;Custom&amp;nbsp;Validation을&amp;nbsp;하는&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;django 에서 기본적으로 validation 을 제공하지만&amp;nbsp;자신만의&amp;nbsp;validator&amp;nbsp;메소드를&amp;nbsp;만들고&amp;nbsp;싶거나,&amp;nbsp; &lt;br /&gt;데이터에 추가에 좀 더 많은 기능을 사용하고 싶을 때 사용합니다.&lt;br /&gt;특수문자&amp;nbsp;처리&amp;nbsp;등이&amp;nbsp;대표적인&amp;nbsp;예입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐38.&amp;nbsp;Serializer에서&amp;nbsp;create,&amp;nbsp;update&amp;nbsp;함수는&amp;nbsp;어떤&amp;nbsp;기능을&amp;nbsp;수행합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;serializer.save를&amp;nbsp;호출시&amp;nbsp;instance&amp;nbsp;가&amp;nbsp;있다면&amp;nbsp;update를&amp;nbsp;호출하고,&amp;nbsp;없다면&amp;nbsp;create를&amp;nbsp;호출합니다. &lt;br /&gt;create&amp;nbsp;&amp;rArr;&amp;nbsp;save()&amp;nbsp;메소드를&amp;nbsp;호출함으로&amp;nbsp;DB인스턴스를&amp;nbsp;생성 &lt;br /&gt;update&amp;nbsp;&amp;rArr;&amp;nbsp;save()&amp;nbsp;메소드를&amp;nbsp;호출함으로&amp;nbsp;DB&amp;nbsp;인스터스를&amp;nbsp;수정&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐39.&amp;nbsp;Serailizer&amp;nbsp;Custom&amp;nbsp;validate함수를&amp;nbsp;통해&amp;nbsp;오류&amp;nbsp;케이스를&amp;nbsp;어떻게&amp;nbsp;처리합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;validate함수 내에서 개발자가 설정한 검증 절차를 거치고 통과하지 못한다면&amp;nbsp;&lt;/li&gt;
&lt;li&gt;raise&amp;nbsp;를&amp;nbsp;통해서&amp;nbsp;에러를&amp;nbsp;발생&amp;nbsp;시킵니다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐40.&amp;nbsp;DRF&amp;nbsp;permission_classes를&amp;nbsp;사용하는&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;permisson&amp;nbsp;기능은&amp;nbsp;사용자의&amp;nbsp;권한을&amp;nbsp;나누는&amp;nbsp;가장&amp;nbsp;간단하고&amp;nbsp;효과적인&amp;nbsp;수단입니다. &lt;br /&gt;유저&amp;nbsp;별로&amp;nbsp;권한이&amp;nbsp;나누어져&amp;nbsp;있다면&amp;nbsp;유저&amp;nbsp;권한&amp;nbsp;별로&amp;nbsp;데이터를&amp;nbsp;접근&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있고, &lt;br /&gt;django&amp;nbsp;에서&amp;nbsp;제공하는&amp;nbsp;admin&amp;nbsp;같은&amp;nbsp;기능도&amp;nbsp;보다&amp;nbsp;쉽게&amp;nbsp;사용&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;유저&amp;nbsp;권한&amp;nbsp;별로&amp;nbsp;데이터&amp;nbsp;입출력도&amp;nbsp;편하게&amp;nbsp;핸들링&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐41.&amp;nbsp;Django는&amp;nbsp;어떤&amp;nbsp;종류의&amp;nbsp;데이터베이스를&amp;nbsp;사용합니까?&amp;nbsp;Flask와의&amp;nbsp;차이는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django&amp;nbsp;에서는&amp;nbsp;기본적으로&amp;nbsp;Sqlite&amp;nbsp;가&amp;nbsp;내장형으로&amp;nbsp;지원을&amp;nbsp;하며&amp;nbsp;Django&amp;nbsp;의&amp;nbsp;ORM&amp;nbsp;을&amp;nbsp;지원하며,&amp;nbsp; &lt;br /&gt;Django&amp;nbsp;에서도&amp;nbsp;기본적으로&amp;nbsp;Sqlite&amp;nbsp;를&amp;nbsp;사용하게&amp;nbsp;되어&amp;nbsp;있습니다.&amp;nbsp;Flask&amp;nbsp;는&amp;nbsp;기본적으로&amp;nbsp;지원하는&amp;nbsp;DB가&amp;nbsp;없으며,&amp;nbsp; &lt;br /&gt;Flask에서&amp;nbsp;sqlite를&amp;nbsp;사용하려면&amp;nbsp;import&amp;nbsp;sqlite3&amp;nbsp;,&amp;nbsp;conn&amp;nbsp;=&amp;nbsp;sqlite3.connect('database.db')&amp;nbsp;를&amp;nbsp;통해서&amp;nbsp;연동&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐42.&amp;nbsp;Django에서&amp;nbsp;제공하는&amp;nbsp;sqlite는&amp;nbsp;어떤&amp;nbsp;장단점이&amp;nbsp;있습니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점 &lt;br /&gt;대부분의 연산에서 mysql보다 빠릅니다. &lt;br /&gt;서비스를&amp;nbsp;설치할&amp;nbsp;필요가&amp;nbsp;없습니다. &lt;br /&gt;사용하지&amp;nbsp;않을&amp;nbsp;때에는&amp;nbsp;컴퓨터&amp;nbsp;메모리와&amp;nbsp;CPU를&amp;nbsp;소비하지&amp;nbsp;않습니다 &lt;br /&gt;단순하고&amp;nbsp;간편합니다.&lt;/li&gt;
&lt;li&gt;단점 &lt;br /&gt;동시성에&amp;nbsp;제한이&amp;nbsp;있습니다.&amp;nbsp;동시에&amp;nbsp;여러&amp;nbsp;프로세스가&amp;nbsp;SQLite&amp;nbsp;데이터베이스에&amp;nbsp;액세스하고&amp;nbsp;쿼리가&amp;nbsp;가능하지만&amp;nbsp;&lt;br /&gt;주어진&amp;nbsp;시간에&amp;nbsp;하나의&amp;nbsp;프로세스만이&amp;nbsp;데이터베이스를&amp;nbsp;변경할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;구조가&amp;nbsp;단순한&amp;nbsp;만큼&amp;nbsp;기능을&amp;nbsp;확장하기&amp;nbsp;어렵습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐43.&amp;nbsp;AWS를&amp;nbsp;통해&amp;nbsp;배포할&amp;nbsp;경우,&amp;nbsp;sqlite를&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB&quot;MS&quot;가 아니라 원격 사용이 불가능합니다. &lt;br /&gt;AWS&amp;nbsp;배포를&amp;nbsp;한다는것은&amp;nbsp;서비스를&amp;nbsp;하는&amp;nbsp;것인데,&amp;nbsp;확장성이&amp;nbsp;부족합니다 &lt;br /&gt;다른&amp;nbsp;데이터&amp;nbsp;베이스보다&amp;nbsp;보안이&amp;nbsp;약합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐44.&amp;nbsp;Django&amp;nbsp;settings에서&amp;nbsp;DB&amp;nbsp;스택을&amp;nbsp;변경하는&amp;nbsp;방법은&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;settings.py 에 DATABASES부분의 engine값을 변경하면 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1666365298458&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/Users/honux/my.cnf',
        },
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐45.&amp;nbsp;Django&amp;nbsp;프로젝트를&amp;nbsp;배포할&amp;nbsp;때,&amp;nbsp;노출되어서는&amp;nbsp;안되는&amp;nbsp;값은&amp;nbsp;어떤&amp;nbsp;것이&amp;nbsp;있습니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;database 와 관련된 정보 (username, password)&lt;/li&gt;
&lt;li&gt;JWT토큰 설정&lt;/li&gt;
&lt;li&gt;AWS S3와 관련된 키&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>코딩공부/기술면접</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/78</guid>
      <comments>https://kyumin1020.tistory.com/78#entry78comment</comments>
      <pubDate>Wed, 26 Oct 2022 14:17:28 +0900</pubDate>
    </item>
    <item>
      <title>[기술면접] Django 50문 50답 16~30</title>
      <link>https://kyumin1020.tistory.com/77</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xCuJY/btrPgWN6zSs/0a01JNq7gMk268zYZYjqkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xCuJY/btrPgWN6zSs/0a01JNq7gMk268zYZYjqkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xCuJY/btrPgWN6zSs/0a01JNq7gMk268zYZYjqkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxCuJY%2FbtrPgWN6zSs%2F0a01JNq7gMk268zYZYjqkK%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;277&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&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;h4 data-ke-size=&quot;size20&quot;&gt;⭐16.&amp;nbsp;Django의&amp;nbsp;기본&amp;nbsp;기능을&amp;nbsp;사용하는&amp;nbsp;것과&amp;nbsp;JWT를&amp;nbsp;사용하여&amp;nbsp;로그인&amp;nbsp;기능을&amp;nbsp;구현하는&amp;nbsp;것에는&amp;nbsp;어떤&amp;nbsp;차이점이&amp;nbsp;있습니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT를 사용하면 유저 관련 정보를 모두 base64 인코딩을 하고 유지 시간도 짧아 보안에 유리하며,&lt;br /&gt;다른 프레임워크에 호환성도 높습니다. &lt;br /&gt;Django 기본 인증은 Django 내장인 만큼 훨씬더 간편하게 사용할 수 있는 이점이 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐17.&amp;nbsp;데이터&amp;nbsp;테이블&amp;nbsp;간의&amp;nbsp;관계를&amp;nbsp;나타내는&amp;nbsp;FK,&amp;nbsp;OneToOne,&amp;nbsp;ManyToMany&amp;nbsp;필드에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FK:&amp;nbsp;다른&amp;nbsp;테이블과&amp;nbsp;관계가&amp;nbsp;있을&amp;nbsp;때&amp;nbsp;다른&amp;nbsp;테이블의&amp;nbsp;내용을&amp;nbsp;불러오고&amp;nbsp;이용할&amp;nbsp;수&amp;nbsp;있습니다. &lt;/li&gt;
&lt;li&gt;OnetoOne: 1:1의 대응 관계 테이블입니다. 예를들어 유저와 유저프로필 모델&lt;/li&gt;
&lt;li&gt;ManytoMany:&amp;nbsp;A&amp;nbsp;모델에&amp;nbsp;연관된&amp;nbsp;B&amp;nbsp;모델&amp;nbsp;필드가&amp;nbsp;여러개&amp;nbsp;일&amp;nbsp;수&amp;nbsp;있고,&amp;nbsp;&lt;br /&gt;B모델에 연관된 A 모델 필드가 여러개일 수 있는 관계가 MtoM 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐18.&amp;nbsp;Django에서&amp;nbsp;ManyToMany필드를&amp;nbsp;만드는&amp;nbsp;방법에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델과 다대다 관계에 두고 싶은 모델을 manytomany 필드로 연결하면&amp;nbsp;&lt;br /&gt;자동적으로 두 모델을 연결해주는 새로운 모델이 생성됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1666364276946&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Company(models.Model):
    company_name = models.CharField(max_length=128)
    business_area = models.ManyToManyField('BusinessArea', through='CompanyBusinessArea')

    class Meta:
        db_table = 'companies'&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐19.&amp;nbsp;FBV와&amp;nbsp;CBV는&amp;nbsp;각각&amp;nbsp;무엇이며,&amp;nbsp;어떤&amp;nbsp;차이가&amp;nbsp;있습니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;views.py를&amp;nbsp;함수중심으로&amp;nbsp;구성하는&amp;nbsp;것과&amp;nbsp;클래스&amp;nbsp;중심으로&amp;nbsp;구성하는&amp;nbsp;것의&amp;nbsp;차이가&amp;nbsp;있습니다. &lt;br /&gt;클래스는 객체지향적으로 구성이 가능하고, &lt;br /&gt;상속할 수 있어서 코드 수를 줄이고 재사용성을 높일 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐20.&amp;nbsp;테스트코드를&amp;nbsp;작성하는&amp;nbsp;이유는&amp;nbsp;무엇이며&amp;nbsp;어떤&amp;nbsp;장점이&amp;nbsp;있습니까?&lt;/h4&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;작동하는지&amp;nbsp;여부를&amp;nbsp;자동적으로&amp;nbsp;알&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;&lt;br /&gt;더 꼼꼼하고 정확한 코드를 작성할 수 있으며 처음엔&amp;nbsp;시간을&amp;nbsp;더&amp;nbsp;쓰는것&amp;nbsp;같아도&amp;nbsp;&lt;br /&gt;결국에는 에러를 줄여 시간을 절약하는 길이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐21.&amp;nbsp;테스트코드에서&amp;nbsp;setup&amp;nbsp;함수와&amp;nbsp;setupclass의&amp;nbsp;차이는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;setup()&amp;rArr; 각 테스트 메소드를 호출하기 이전에 호출되는 메소드입니다. 테스트 케이스가 실행될 때 마다 사용됩니다.&lt;br /&gt;setUpClass()&amp;nbsp;&amp;rArr;&amp;nbsp;해당&amp;nbsp;테스트&amp;nbsp;클래스가&amp;nbsp;시작되기&amp;nbsp;이전&amp;nbsp;단&amp;nbsp;한번&amp;nbsp;호출되는&amp;nbsp;메소드입니다.&amp;nbsp; &lt;br /&gt;setup&amp;nbsp;메소드는&amp;nbsp;각&amp;nbsp;테스트&amp;nbsp;메소드&amp;nbsp;이전에&amp;nbsp;항상&amp;nbsp;호출&amp;nbsp;됩니다.&amp;nbsp; &lt;br /&gt;메소드에&amp;nbsp;@classmethod라는&amp;nbsp;데코레이터를&amp;nbsp;달아줘야하고&amp;nbsp;메소드&amp;nbsp;인자로&amp;nbsp;cls를&amp;nbsp;넘겨줘야합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐22.&amp;nbsp;Template&amp;nbsp;Engine을&amp;nbsp;사용할&amp;nbsp;때,&amp;nbsp;발생하는&amp;nbsp;CSRF&amp;nbsp;Error가&amp;nbsp;무엇이고&amp;nbsp;어떻게&amp;nbsp;해결합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;csrf 사이트간 요청 위조이며, 사이트간 요청 위조는 웹사이트 취약점 공격의 하나입니다.&amp;nbsp;&lt;br /&gt;사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격을 말합니다.&amp;nbsp;&lt;br /&gt;Template&amp;nbsp;Engine&amp;nbsp;을&amp;nbsp;사용할때는&amp;nbsp;{%&amp;nbsp;csrf_token&amp;nbsp;%}&amp;nbsp;을&amp;nbsp;붙여줘서&amp;nbsp;해결&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐23.&amp;nbsp;Django&amp;nbsp;ORM에서&amp;nbsp;queryset과&amp;nbsp;object의&amp;nbsp;차이점에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;queryset은 데이터베이스에서 전달받은 객체들의 list입니다.&lt;/li&gt;
&lt;li&gt;object는 데이터베이스 에서 전달받은 객체입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐24.&amp;nbsp;Django&amp;nbsp;ORM에서&amp;nbsp;정참조와&amp;nbsp;역참조에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&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;객체가&amp;nbsp;다른&amp;nbsp;객체의&amp;nbsp;ForeignKey를&amp;nbsp;가지고&amp;nbsp;있거나&amp;nbsp;1:1&amp;nbsp;관계인&amp;nbsp;상황에서&amp;nbsp;참조&amp;nbsp;하는&amp;nbsp;경우입니다.&lt;br /&gt;(내가&amp;nbsp;참조하는&amp;nbsp;table접근) &lt;/li&gt;
&lt;li&gt;역참조:&amp;nbsp;다른&amp;nbsp;객체가&amp;nbsp;ForeignKey를&amp;nbsp;가지고&amp;nbsp;있거나&amp;nbsp;N:N&amp;nbsp;관계인&amp;nbsp;상황,&amp;nbsp; &lt;br /&gt;해당 객체를 참조하고 있는 다른 객체를 참조하려는 경우입니다.&lt;br /&gt;(나를 참조하는 table접근)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐25.&amp;nbsp;Response&amp;nbsp;결과와&amp;nbsp;함께&amp;nbsp;status&amp;nbsp;code를&amp;nbsp;반환하는&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&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;해당&amp;nbsp;코드&amp;nbsp;번호는&amp;nbsp;API&amp;nbsp;가이드&amp;nbsp;라인을&amp;nbsp;따릅니다.&amp;nbsp;클라이언트의&amp;nbsp;요청에&amp;nbsp;대한&amp;nbsp;올바른&amp;nbsp;응답은&amp;nbsp;서버를&amp;nbsp;해줘야&amp;nbsp;합니다.&amp;nbsp; &lt;br /&gt;그렇지&amp;nbsp;않으면&amp;nbsp;서버에서&amp;nbsp;무슨&amp;nbsp;에러가&amp;nbsp;났는지,&amp;nbsp;클라이언트에서&amp;nbsp;어떠한&amp;nbsp;에러가&amp;nbsp;났는지,&amp;nbsp; &lt;br /&gt;파악&amp;nbsp;할&amp;nbsp;수&amp;nbsp;없고&amp;nbsp;무조건적인&amp;nbsp;200&amp;nbsp;ok&amp;nbsp;는&amp;nbsp;서비스에&amp;nbsp;큰&amp;nbsp;타격을&amp;nbsp;입힐&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐26.&amp;nbsp;회원탈퇴,&amp;nbsp;게시글&amp;nbsp;삭제와&amp;nbsp;같은&amp;nbsp;기능을&amp;nbsp;구현할&amp;nbsp;때&amp;nbsp;실제&amp;nbsp;레코드를&amp;nbsp;삭제합니까?&amp;nbsp;그렇지&amp;nbsp;않다면&amp;nbsp;그&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&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;삭제&amp;nbsp;할&amp;nbsp;수&amp;nbsp;는&amp;nbsp;있지만&amp;nbsp;삭제시키기&amp;nbsp;보다는&amp;nbsp;유저의&amp;nbsp;권한을&amp;nbsp;정지&amp;nbsp;시키는게&amp;nbsp;좋습니다.&amp;nbsp; &lt;br /&gt;특히 RDBMS에서는 테이블 간의 데이터가 연결되어 있는 경우가 많아 오류를 유발 할 수도 있습니다.&amp;nbsp; &lt;br /&gt;또한&amp;nbsp;데이터를&amp;nbsp;삭제&amp;nbsp;하는&amp;nbsp;것&amp;nbsp;보다는&amp;nbsp;유지하는&amp;nbsp;것&amp;nbsp;이&amp;nbsp;마케팅&amp;nbsp;등에&amp;nbsp;활용&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있어&amp;nbsp;좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐27. RESTful API는 무엇을 의미합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP&amp;nbsp;URI&amp;nbsp;를&amp;nbsp;통해&amp;nbsp;자원을&amp;nbsp;명시하고,&amp;nbsp;HTTP&amp;nbsp;method&amp;nbsp;(GET,POST,PUT,DELETE)를&amp;nbsp;통해&amp;nbsp; &lt;br /&gt;해당&amp;nbsp;자원에&amp;nbsp;대한&amp;nbsp;CRUD&amp;nbsp;OPERATION을&amp;nbsp;적용하는&amp;nbsp;것을&amp;nbsp;의미합니다. &lt;/li&gt;
&lt;li&gt;RESTful 이라는 말은 REST 라는 아키텍처 개념을 그대로적용해서 웹서버 구성하고 웹서빙을 하는 것을 말합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐28.&amp;nbsp;DRF를&amp;nbsp;사용해&amp;nbsp;API를&amp;nbsp;개발할&amp;nbsp;경우&amp;nbsp;어떤&amp;nbsp;장점이&amp;nbsp;있습니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Serailizer를&amp;nbsp;통해&amp;nbsp;복잡한&amp;nbsp;데이터를&amp;nbsp;JSOn,XML등의&amp;nbsp;컨텐트&amp;nbsp;타입으로&amp;nbsp;쉽게&amp;nbsp; &lt;br /&gt;변환 가능한 python 데이터 타입으로 변환시켜줍니다.&lt;/li&gt;
&lt;li&gt;ORM 과 non-ORM을 모두 지원합니다. &lt;/li&gt;
&lt;li&gt;많은&amp;nbsp;기업에서&amp;nbsp;사용해서&amp;nbsp;정보를&amp;nbsp;얻기&amp;nbsp;쉽습니다. &lt;/li&gt;
&lt;li&gt;인증 관리를 위해 OAuth1와 OAuth2가 내장되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐29.&amp;nbsp;Django&amp;nbsp;와&amp;nbsp;DRF를&amp;nbsp;통한&amp;nbsp;개발의&amp;nbsp;차이점은&amp;nbsp;어떤&amp;nbsp;것이&amp;nbsp;있습니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django 만 사용하는 경우 Queryset을 템플릿 언어로 렌더링합니다.&lt;/li&gt;
&lt;li&gt;DRF를 사용하면 json을 템플릿 언어로 렌더링합니다.&lt;/li&gt;
&lt;li&gt;DRF를 사용하면 python으로 만든 백엔드를 다른 프론트엔드에서도 사용이 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐30.&amp;nbsp;Django&amp;nbsp;User&amp;nbsp;모델과&amp;nbsp;DRF&amp;nbsp;Custom&amp;nbsp;User&amp;nbsp;모델의&amp;nbsp;차이는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django User모델에는 유저네임,이름,이메일,패스워드 의 기본적인 필드가 존재합니다. &lt;br /&gt;하지만&amp;nbsp;실제&amp;nbsp;서비스에서는&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;User의&amp;nbsp;정보를&amp;nbsp;필요로&amp;nbsp;합니다.&amp;nbsp; &lt;br /&gt;생일이라던지,&amp;nbsp;여러가지&amp;nbsp;질문을&amp;nbsp;포함할&amp;nbsp;수&amp;nbsp;도있습니다.&amp;nbsp; &lt;br /&gt;그렇기&amp;nbsp;위해&amp;nbsp;Custom&amp;nbsp;User을&amp;nbsp;통해&amp;nbsp;커스텀&amp;nbsp;합니다.&amp;nbsp; &lt;br /&gt;또한 Django User모델은 username으로 로그인을 해야 합니다.&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩공부/기술면접</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/77</guid>
      <comments>https://kyumin1020.tistory.com/77#entry77comment</comments>
      <pubDate>Tue, 25 Oct 2022 13:58:04 +0900</pubDate>
    </item>
    <item>
      <title>[기술면접] Django 50문 50답 1~15</title>
      <link>https://kyumin1020.tistory.com/76</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhMmBw/btrODCJFt3C/qWuKZIOec9aoGS8Q8UJ9y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhMmBw/btrODCJFt3C/qWuKZIOec9aoGS8Q8UJ9y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhMmBw/btrODCJFt3C/qWuKZIOec9aoGS8Q8UJ9y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhMmBw%2FbtrODCJFt3C%2FqWuKZIOec9aoGS8Q8UJ9y1%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;277&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;546&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;h4 data-ke-size=&quot;size20&quot;&gt;⭐1. Django가 무엇인지 설명하시오&lt;/h4&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;웹&amp;nbsp;프레임워크입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐2. Django를&amp;nbsp;백엔드&amp;nbsp;스택으로&amp;nbsp;선정한&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&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;하는&amp;nbsp;프레임워크중에서&amp;nbsp;가장&amp;nbsp;대표적으로&amp;nbsp;쓰이며, &lt;br /&gt;DB와 Admin페이지, ORM등 기본적으로 제공하는 기능이 편리하여 개발에 유용하기 때문입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐3. Django에는&amp;nbsp;어떤&amp;nbsp;장점이&amp;nbsp;있습니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ORM,&amp;nbsp;Admin,&amp;nbsp;permission등&amp;nbsp;내부&amp;nbsp;기능이&amp;nbsp;많아서&amp;nbsp;숙지하면&amp;nbsp;빠른개발이&amp;nbsp;가능하고, &lt;br /&gt;Django&amp;nbsp;템플릿을&amp;nbsp;활용하여&amp;nbsp;프론트엔드&amp;nbsp;개발도&amp;nbsp;다른&amp;nbsp;기술없이&amp;nbsp;개발이&amp;nbsp;가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐4. Django가&amp;nbsp;다른&amp;nbsp;Python&amp;nbsp;프레임워크와&amp;nbsp;비교되는&amp;nbsp;특징이&amp;nbsp;있다면?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django의 특징은 기본적으로 제공되는 기능이 많다는 점이고, 파이썬에서 가장 많이 쓰이는 오픈 소스프레임워크이기 때문에 관련 자료가 많은것이 장점입니다. 하지만 기능이 많은 만큼 무겁고 복잡하며, Flask와 비교 했을때 자유도가 떨어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐5. Django&amp;nbsp;프로세스는&amp;nbsp;어떤&amp;nbsp;순서로&amp;nbsp;동작합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;request가&amp;nbsp;들어오면&amp;nbsp;URL에&amp;nbsp;따라&amp;nbsp;지정된&amp;nbsp;view를&amp;nbsp;호출하고&amp;nbsp;정해진&amp;nbsp;response를&amp;nbsp;보내는&amp;nbsp;방식으로&amp;nbsp;작동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐6. Django의&amp;nbsp;MTV패턴&amp;nbsp;시스템은&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Model-Template-View로&amp;nbsp;이루어진&amp;nbsp;패턴으로&amp;nbsp;Model은&amp;nbsp;데이터베이스에&amp;nbsp;저장되는&amp;nbsp;데이터를&amp;nbsp;의미하고, &lt;br /&gt;template은&amp;nbsp;사용자가&amp;nbsp;시각&amp;nbsp;적으로&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;화면&amp;nbsp;즉,&amp;nbsp;UI를&amp;nbsp;담당하는&amp;nbsp;부분이고,&amp;nbsp; &lt;br /&gt;View는 데이터를 가공하고 처리하는 부분을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐7. ORM에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Object-Relational Mapping의 약자로 SQL이라는 언어 대신 데이터베이스를 쉽게 다룰 수 있게 하는 방법입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐8. Django의&amp;nbsp;장단점은&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점: 파이썬 웹프레임워크 중에서 가장 사용자가 많아서 자료 찾기가 편리하며, &lt;br /&gt;RDBMS와의 상호 작용을 완전히 지원하는 기본 내장 ORM이 함께 제공됩니다.&lt;/li&gt;
&lt;li&gt;단점: 무겁고 복잡하며, Flask와 같은 마이크로 프레임워크에 비해 자유도가 떨어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐9. Django&amp;nbsp;Admin은&amp;nbsp;무엇이고&amp;nbsp;어떤&amp;nbsp;기능을&amp;nbsp;제공합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django&amp;nbsp;admin은&amp;nbsp;django에서&amp;nbsp;기본으로&amp;nbsp;제공하는&amp;nbsp;관리자&amp;nbsp;기능을&amp;nbsp;의미합니다.&lt;/li&gt;
&lt;li&gt;DB의&amp;nbsp;데이터를&amp;nbsp;조회하거나&amp;nbsp;추가,수정,삭제를&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있고&amp;nbsp;커스터마이징을&amp;nbsp;통해&amp;nbsp;페이지를 &lt;br /&gt;사용성있게 꾸밀 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐10. Django&amp;nbsp;Template&amp;nbsp;Engine은&amp;nbsp;무엇이고&amp;nbsp;어떤&amp;nbsp;기능을&amp;nbsp;제공합니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Django Template Engine은 Jinja2와 비슷한 Django에서 기본으로 지원하는 템플릿 엔진입니다.&lt;br /&gt;이를&amp;nbsp;통해&amp;nbsp;django&amp;nbsp;템플릿&amp;nbsp;언어를&amp;nbsp;사용해서&amp;nbsp;간편하게&amp;nbsp;사용자에게&amp;nbsp;데이터를&amp;nbsp;보여주고&amp;nbsp;&lt;br /&gt;HTML을&amp;nbsp;동적으로&amp;nbsp;생성할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐11. Django를&amp;nbsp;통해&amp;nbsp;CRUD를&amp;nbsp;구현하는&amp;nbsp;방법에&amp;nbsp;대해서&amp;nbsp;HTTP&amp;nbsp;Method와&amp;nbsp;함께&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;get:&amp;nbsp;정보&amp;nbsp;조회&amp;nbsp;(read) &lt;br /&gt;post:&amp;nbsp;정보&amp;nbsp;업로드(create) &lt;br /&gt;put:&amp;nbsp;정보수정(update) &lt;br /&gt;delete:&amp;nbsp;정보&amp;nbsp;삭제(delete)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐12. Django에서&amp;nbsp;테이블을&amp;nbsp;설계하고&amp;nbsp;데이터베이스에&amp;nbsp;반영하는&amp;nbsp;방법에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;models.py에 models.Model을 상속해 클래스를 생성하고 &lt;br /&gt;charfield, integerfield 등 필드를 사용해 테이블을 설계합니다.&lt;br /&gt;만들어진&amp;nbsp;테이블은&amp;nbsp;python&amp;nbsp;manage.py&amp;nbsp;makemigration&amp;nbsp;명령어로&amp;nbsp;&lt;br /&gt;migration 파일을 생성한뒤 python manage.py migrate로 반영합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐13. 회원가입을&amp;nbsp;할&amp;nbsp;때&amp;nbsp;비밀번호를&amp;nbsp;암호화하여&amp;nbsp;저장하는&amp;nbsp;이유는&amp;nbsp;무엇입니까?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해킹에 취약해지기 때문에 유저정보를 다룰 수 있는 비밀번호는 해싱, 암호화해서 저장합니다. &lt;br /&gt;SHA-256표준 해시 알고리즘을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐14. JWT에&amp;nbsp;대해서&amp;nbsp;설명하시오&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;토큰 기반의 유저 식별 인증 방법으로, 사용자 인증에 필요한 정보를 토큰에 포함합니다.&amp;nbsp;&lt;br /&gt;따라서 별도의 인증 저장소가 필요하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⭐15. JWT의&amp;nbsp;Access&amp;nbsp;Token과&amp;nbsp;Refresh&amp;nbsp;Token은&amp;nbsp;왜&amp;nbsp;필요한가요?&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT토큰은 token을 가지고 있다는 것을 제외하면 클라이언트 본인이 맞는지 확인할 수단이 없습니다. &lt;br /&gt;따라서 어떤 의미에서는 보안이 취약한데 이를 보안해주는 것이 refresh token의 존재입니다. &lt;br /&gt;설정한 토큰 유효기간이 지나면 access token의 기간이 만료되고 refresh token을 가지고 access token을 새로 &lt;br /&gt;발급받아서 token을 유지할 수 있게합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>코딩공부/기술면접</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/76</guid>
      <comments>https://kyumin1020.tistory.com/76#entry76comment</comments>
      <pubDate>Mon, 24 Oct 2022 12:39:53 +0900</pubDate>
    </item>
    <item>
      <title>[신입 기술면접] 기술면접 스터디 정리 3</title>
      <link>https://kyumin1020.tistory.com/75</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7RYMo/btrPhp3zALb/bPSZQWUPCYKz4a8jUxkUKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7RYMo/btrPhp3zALb/bPSZQWUPCYKz4a8jUxkUKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7RYMo/btrPhp3zALb/bPSZQWUPCYKz4a8jUxkUKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7RYMo%2FbtrPhp3zALb%2FbPSZQWUPCYKz4a8jUxkUKk%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;603&quot; height=&quot;317&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;525&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;h3 data-ke-size=&quot;size23&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;관심사 분리란 무엇인지 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;관심사 분리&lt;/span&gt;&lt;/b&gt;&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;List 안의 숫자들에서 최댓값과 최솟값을 찾고, 구한 값을 모두 더하는 로직이 있다고 가정 했을때&lt;br /&gt;그 안에서의 관심사는 최댓값 찾기, 최솟값 찾기, 모두 더하기 이렇게 3가지로 나눌 수 있다.&lt;br /&gt;이렇게 각각의 관심사를 함수로 나누어서 처리를 하는 기법&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;SOLID 원칙에 대해 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;SOLID 원칙&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;객체지향 프로그래밍의 가장 큰 장점인 유연성, 재사용성, 유지보수성&lt;br /&gt;객체지향 5대 원칙&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SRP(단일책임원칙)&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OCP(개방-폐쇄 원칙)&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LSP(리스코프 치환 원칙)&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ISP(인터페이스 분리 원칙)&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DIP(의존 역전 원칙)&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;웹서버와 WAS의 차이점 중심으로 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;웹서버&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트 요청시, 요청을 받아 &lt;b&gt;정적 컨텐츠&lt;/b&gt;를 제공하는 서버&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff;&quot;&gt;WAS&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹서버 단독으로 처리할 수 없는 데이터베이스 조회나 다양한 로직 처리가 필요한 &lt;b&gt;동적 컨텐츠&lt;/b&gt;를 제공하는 서버&lt;/li&gt;
&lt;li&gt;웹서버 기능들을 구조적으로 분리하여 처리하고자하는 목적으로 제시&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB조회 및 로직처리는 WAS를 사용하고, 단순한 정적 컨텐츠는 웹서버에게 맡겨서 기능을 분리하여 서버 부하를 방지하는 방향으로 사용한다.&lt;/p&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; W&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;SGI와 ASGI가 무엇인지 각각 설명해주세요&lt;/span&gt;&lt;/h3&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;background-color: #ffffff;&quot;&gt;WSGI (Web Server Gateway Interface)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python 애플리케이션, 스크립트가 웹서버와&amp;nbsp;통신하기&amp;nbsp;위한&amp;nbsp;인터페이스&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff;&quot;&gt;ASGI (Asynchronous Server Gateway Interface)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WSGI의 정신적 계승자&lt;/li&gt;
&lt;li&gt;웹소켓&amp;nbsp;등을&amp;nbsp;사용한&amp;nbsp;실시간&amp;nbsp;채팅서비스,&amp;nbsp;대용량&amp;nbsp;트래픽&amp;nbsp;처리&amp;nbsp;등&amp;nbsp;WSGI로는&amp;nbsp;구현하기&amp;nbsp;어려운 &lt;br /&gt;비동기&amp;nbsp;기능을&amp;nbsp;구현하기&amp;nbsp;위한&amp;nbsp;인터페이스&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;WSGI로&amp;nbsp;비동기처리가&amp;nbsp;불가능한가요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비동기 큐와 같은 Celery를 잘만 활용하면 대용량 트래픽처리를 요구하는&amp;nbsp;서비스&amp;nbsp;구현이&amp;nbsp;불가능한&amp;nbsp;것은&amp;nbsp;아니지만,&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;트레이싱 등과 같은 유지 보수와 기본적인 구현이 쉽지 않다는것으로 알고있다.&lt;/b&gt;&lt;/p&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;background-color: #ffffff; color: #000000;&quot;&gt;파이썬에서의 매개변수와 인자의 차이를 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;매개변수&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수를 정의할 때 넘겨주는 a,b와 같은 변수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;인자&lt;/span&gt;&lt;/b&gt;&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;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;파이썬에서의 상속, 오버라이딩에 대해 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;상속&lt;/span&gt;&lt;/b&gt;&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;메소드를&amp;nbsp;물려받아&amp;nbsp;새롭게&amp;nbsp;클래스를&amp;nbsp;작성하는것&lt;/li&gt;
&lt;li&gt;물려주는 클래스를 부모클래스, 물려받는 클래스를 자식클래스로 정의&lt;/li&gt;
&lt;li&gt;상속을&amp;nbsp;했을때&amp;nbsp;장점은&amp;nbsp;중복되는&amp;nbsp;코드를&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;유지보수에&amp;nbsp;용이&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;오버라이딩&lt;/span&gt;&lt;/b&gt;&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;/ul&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: 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;파라미터 갯수가 달라야 함&lt;/li&gt;
&lt;li&gt;파라미터 갯수가 같을 경우, 데이터 타입이 달라야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;decorator를 왜 사용하는가?&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적인 기능을 구현할 경우에 사용한다.&lt;/p&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;background-color: #ffffff; color: #000000;&quot;&gt;파이썬 클래스에서의 __init__, self, super 개념에 대해 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;__init__&lt;/span&gt;&lt;/b&gt;&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;span data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;init&lt;/span&gt; 메서드를 통해 객체 생성시 만들어진 변수들은 모두 독립된 메모리에 저장&lt;/li&gt;
&lt;li&gt;파이선 클래스가 최초로 생성이 되었을 떄 생성된 객체에 초기화를 하는데에 관여를 하는 생성자&lt;/li&gt;
&lt;li&gt;객체변수들의 값을 넣어주는것이 초기화 하는것&lt;/li&gt;
&lt;li&gt;사용할 때 첫 인자로 self를 사용하게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;self&lt;/span&gt;&lt;/b&gt;&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;클래스의 메소드를 정의할 때 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;super()&lt;/span&gt;&lt;/b&gt;&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;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;백엔드 개발자로서 Django를 선택한 이유와 Django로 개발을 하면서 어떠한 장/단점을 느꼈는지 기술적인 측면 위주로 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Django 선택 이유&lt;/span&gt;&lt;/b&gt;&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;하는&amp;nbsp;프레임워크중에서&amp;nbsp;가장&amp;nbsp;대표적&lt;/li&gt;
&lt;li&gt;DB와&amp;nbsp;Admin페이지,&amp;nbsp;ORM등&amp;nbsp;기본적으로&amp;nbsp;제공하는&amp;nbsp;기능이&amp;nbsp;편리하여&amp;nbsp;개발에&amp;nbsp;유용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Django 장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ORM,&amp;nbsp;Admin,&amp;nbsp;permission등&amp;nbsp;내부&amp;nbsp;기능이&amp;nbsp;많아서&amp;nbsp;숙지하면&amp;nbsp;빠른개발이&amp;nbsp;가능&lt;/li&gt;
&lt;li&gt;Django&amp;nbsp;템플릿을&amp;nbsp;활용하여&amp;nbsp;프론트엔드&amp;nbsp;개발도&amp;nbsp;다른&amp;nbsp;기술없이&amp;nbsp;개발이&amp;nbsp;가능&lt;/li&gt;
&lt;li&gt;파이썬에서 가장 많이 쓰이는 프레임워크이기 때문에 관련 자료가 많은점&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Django 단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능이 많은 만큼 무겁고 복잡하며, Flask와 비교 했을때 자유도가 떨어짐&lt;/li&gt;
&lt;/ul&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;</description>
      <category>코딩공부/기술면접</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/75</guid>
      <comments>https://kyumin1020.tistory.com/75#entry75comment</comments>
      <pubDate>Sat, 22 Oct 2022 09:18:16 +0900</pubDate>
    </item>
    <item>
      <title>[신입 기술면접] 기술면접 스터디 정리 2</title>
      <link>https://kyumin1020.tistory.com/74</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZRWef/btrO9lWnjVD/uwsjBaO5aY93jxGpPGZzk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZRWef/btrO9lWnjVD/uwsjBaO5aY93jxGpPGZzk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZRWef/btrO9lWnjVD/uwsjBaO5aY93jxGpPGZzk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZRWef%2FbtrO9lWnjVD%2FuwsjBaO5aY93jxGpPGZzk0%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;603&quot; height=&quot;317&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;525&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Deadlock이 무엇인지 설명해주시고 해결할 수 있는 방안에 대해 알려주세요&lt;/span&gt;&lt;/h3&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;background-color: #ffffff;&quot;&gt;Deadlock&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&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;/ul&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;background-color: #ffffff;&quot;&gt;예방 (Prevention)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 Deadlock이 프로세스들끼리 자원 사용시 서로 상호 배제한단 것이 문제가 되었으니, 자원을 공유하게 하여 대기에 빠지지 않도록 함&lt;/li&gt;
&lt;li&gt;교착상태의 필요조건을 부정함으로써 교착상태가 발생하지 않도록 미리 예방하는 방법&lt;/li&gt;
&lt;li&gt;환형 대기, 비선점, 점유와 대기, 상호 배제 4가지 부정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회피 (Avoidance)&lt;/b&gt;&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;b&gt;은행원 알고리즘&lt;/b&gt; 처럼 사전에 필요로 하는 최대 자원을 파악하여 교착상태를 최대한 피함&lt;/li&gt;
&lt;/ul&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://jhnyang.tistory.com/102&quot;&gt;[운영체제]교착상태 회피-은행원 알고리즘(Banker's Algorithm) 쉬운 예시, 안전상태, 불안전상태 (tistory.com)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1666283619352&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;[운영체제]교착상태 회피-은행원 알고리즘(Banker's Algorithm) 쉬운 예시, 안전상태, 불안전상태&quot; data-og-description=&quot;[한 번에 끝내는 운영체제 목차!] Deadlock Avoidance 교착상태 회피 저번 시간에 교착상태 해결 방안 4종류를 알아봤어요 교착상태 예방, 교착상태 회피, 교착상태 탐지, 교착상태 복구! 이렇게 4가지 &quot; data-og-host=&quot;jhnyang.tistory.com&quot; data-og-source-url=&quot;https://jhnyang.tistory.com/102&quot; data-og-url=&quot;https://jhnyang.tistory.com/102&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zSHLS/hyQbEZknr0/taMqoDLaq9HujDYIvhSId1/img.jpg?width=800&amp;amp;height=527&amp;amp;face=292_27_766_398,https://scrap.kakaocdn.net/dn/tesUH/hyQbt4ytth/VrTtMDTYD28grVrDPdcyzK/img.jpg?width=800&amp;amp;height=527&amp;amp;face=292_27_766_398,https://scrap.kakaocdn.net/dn/tGEua/hyQbwNKmus/KfHNADcbKbzXppsb3t1UTK/img.jpg?width=860&amp;amp;height=573&amp;amp;face=309_34_818_280&quot;&gt;&lt;a href=&quot;https://jhnyang.tistory.com/102&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jhnyang.tistory.com/102&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zSHLS/hyQbEZknr0/taMqoDLaq9HujDYIvhSId1/img.jpg?width=800&amp;amp;height=527&amp;amp;face=292_27_766_398,https://scrap.kakaocdn.net/dn/tesUH/hyQbt4ytth/VrTtMDTYD28grVrDPdcyzK/img.jpg?width=800&amp;amp;height=527&amp;amp;face=292_27_766_398,https://scrap.kakaocdn.net/dn/tGEua/hyQbwNKmus/KfHNADcbKbzXppsb3t1UTK/img.jpg?width=860&amp;amp;height=573&amp;amp;face=309_34_818_280');&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;[운영체제]교착상태 회피-은행원 알고리즘(Banker's Algorithm) 쉬운 예시, 안전상태, 불안전상태&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[한 번에 끝내는 운영체제 목차!] Deadlock Avoidance 교착상태 회피 저번 시간에 교착상태 해결 방안 4종류를 알아봤어요 교착상태 예방, 교착상태 회피, 교착상태 탐지, 교착상태 복구! 이렇게 4가지&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jhnyang.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;탐지 (Detection)&lt;/b&gt;&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회복 (Recovery)&lt;/b&gt;&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;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;쿠키와 세션의 차이점에 대해 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;사용 이유&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP 프로토콜 환경은 &quot;connectionless, stateless&quot;한 특성을 가지고 있기 때문에 서버는 클라이언트가 누구인지 매번 확인 해야하고 이러한 특성이자 약점을 보완하기 위해서 쿠키 또는 세션을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;쿠키&lt;/span&gt;&lt;/b&gt;&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;/ul&gt;
&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;클라이언트가 페이지를 요청&lt;/li&gt;
&lt;li&gt;서버에서 쿠키를 생성&lt;/li&gt;
&lt;li&gt;HTTP 헤더에 쿠키를 포함하여 전달&lt;/li&gt;
&lt;li&gt;브라우저가 종료되어도 쿠키 만료 시간이 남아있다면 클라이언트에서 보관&lt;/li&gt;
&lt;li&gt;같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄&lt;/li&gt;
&lt;li&gt;서버에서 쿠키를 읽어서 이전 상태 정보를 변경 할 필요가 있을때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP헤더에 포함시켜 응답&lt;/li&gt;
&lt;/ol&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방문 사이트에서 로그인 시, &quot;아이디와 비밀번호를 저장하시겠습니까?&quot;&lt;/li&gt;
&lt;li&gt;쇼핑몰의 장바구니 기능&lt;/li&gt;
&lt;li&gt;자동로그인, 팝업에서 &quot;오늘 더이상 이창을 보지 않음&quot; 체크&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;세션&lt;/span&gt;&lt;/b&gt;&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;서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여, 서버에 접속해서 브라우저를 종료 전까지 인증상태를 유지&lt;/li&gt;
&lt;li&gt;접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정 가능&lt;/li&gt;
&lt;/ul&gt;
&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;클라이언트가 서버에 접속 시 세션 ID를 발급 받음&lt;/li&gt;
&lt;li&gt;클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음&lt;/li&gt;
&lt;li&gt;클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청&lt;/li&gt;
&lt;li&gt;서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라이언트 정보를 가져와서 사용&lt;/li&gt;
&lt;li&gt;클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답&lt;/li&gt;
&lt;/ol&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그인 같이 보안상 중요한 작업을 수행할 때 사용&lt;/li&gt;
&lt;/ul&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: 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;보안면에서 세션이 더 우수하며, 요청 속도는 쿠키가 세션보다 더 빠름(세션은 서버의 처리가 필요)&lt;/li&gt;
&lt;li&gt;쿠키는 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어서 보안에 취약&lt;/li&gt;
&lt;li&gt;세션은 사용자가 많아질수록 서버 메모리를 많이 차지하게 되어 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 된다. 즉, 확장성이 안좋다.&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;OSI 7계층에 대해 설명해주세요&lt;/span&gt;&lt;/h3&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;background-color: #ffffff;&quot;&gt;OSI 7계층&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;네트워크 프로토콜이 통신하는 구조를 7개의 계층으로 분리하여 각 계층간 상호 작동하는 방식을 정해 놓은 것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;1 물리 &amp;gt; 2 데이터 링크 &amp;gt; 3 네트워크 &amp;gt; 4 전송 &amp;gt; 5 세션 &amp;gt; 6 표현 &amp;gt; 7 응용 (물데네전세표응)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;통신이 일어나는 과정을 단계별로 파악하여 7단계중 특정한 곳에 이상이 생길시 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 문제가 생긴 단계만 고치면 되기 때문이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1계층 물리 계층&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;통신 케이블, 리피터, 허브&lt;/b&gt; 등 전기적, 기계적, 기능적인 특성을 이용해서 데이터를 전송&lt;/li&gt;
&lt;li&gt;통신단위는 비트, 1과0으로 나타내어지는 전기적으로 On, Off 상태&lt;/li&gt;
&lt;li&gt;데이터를 전달만 하고 전송하거나 받으려는 &lt;b&gt;데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 신경 쓰지 않음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2계층 데이터 링크 계층&lt;/b&gt;&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;MAC 주소를 가지고 통신&lt;/li&gt;
&lt;li&gt;전송되는 단위를 프레임이라 하고, 대표적인 장비 브리지, 스위치 등이 있음&lt;/li&gt;
&lt;li&gt;한마디로 &lt;b&gt;브릿지나 스위치를 통해&amp;nbsp;맥주소를 가지고 물리계층에서 받은 정보를 전달함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;3계층&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;네트워크 계층&lt;/b&gt;&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;IP주소로 연결이 되며 데이터 패킷을 목적지IP주소로 라우팅&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;4계층&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;전송 계층&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP, UDP 프로토콜이 해당되며 데이터 통신을 보장해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;5계층&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;세션 계층&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;통신을 하기위한 대문&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;통신하는 사용자들을 동기화하고 오류복구 명령들을 일괄적으로 다룸&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;통신을 하기 위한 세션을 확립/유지/중단 (운영체제가 해줌)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;6계층&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;표현 계층&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;데이터 표현이 상이한 응용 프로세스의 독립성을 제공하고, 암호화 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어짐&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;해당 데이터가 TEXT인지, 그림인지, GIF인지 JPG인지의 구분 등이 표현 계층의 몫&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;7계층&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;응용 계층&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;최종 목적지로서 HTTP, FTP, SMTP, POP3, IMAP, Telnet 등과 같은 프로토콜이 있다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;응용 계층(Application layer)은 응용 프로세스와 직접 관계하여 일반적인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;응용 서비스를 수행&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;TCP와 UDP를 비교하여 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;TCP&lt;/span&gt;&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;OSI 계층모델의 관점에서 전송 계층(4계층)에 해당하는 통신 프로토콜&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;3-way-handshake 과정을 통해 연결을 설정하기 때문에 높은 신뢰적인 전송을 보장, 속도가 비교적 느림&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;연결지향성 서비스를 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;나의 데이터가 제대로 전송이 되었는가를 체크하고 패킷이 손실되었다면 재전송을 해줌&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;신뢰성이 중요한 파일 교환&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;UDP&lt;/span&gt;&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;전송 계층의 통신 프로토콜의 하나 (TCP에 대비됨)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;3-way-handshake를 사용하지 않기 때문에 신뢰성이 떨어짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;데이터 수신 여부를 확인하지 않기 때문에 속도가 빠름&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;가상회선을 굳이 확립할 필요가 없고 유연하며 효율적 응용의 데이터 전송에 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;비연결성, 단방향성, 순서화되지 않은 Datagram 서비스 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;패킷의 손실 유무를 체크하지 못함&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;실시간성이 중요한 스트리밍&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;HTTP와 HTTPS를 비교하여 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HTTP&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP는 서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜&lt;/li&gt;
&lt;li&gt;상태 정보를 저장하지 않는 Stateless한 특징을 지니고 해결 방안으로는 세션, 토큰, 쿠키가 있음&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이기때문에 비밀번호나 주민등록등을 주고받으면 제 3자가 정보를 조회할 수 있어 위험&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;80번포트 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HTTPS&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP의 보안적인 문제를 해결하기 위해 등장&lt;/li&gt;
&lt;li&gt;HTTP에 Secure 즉 보안적인 측면에서 데이터 암화가 추가된 프로토콜&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;HTTPS는 HTTP 프로토콜에 보안 요소가 추가된 방식으로 SSL 인증서를 이용해, 데이터를 공개키 암호화 방식으로 암호화하여 통신&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;HTTP는 TCP와 직접 통신하지만, HTTPS는 SSL과 통신하고 SSL이 TCP와 통신함으로써 암호화와 증명서, 안전성 보호를 이용할 수 있게 됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;443번 포트 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://dev-coco.tistory.com/161&quot;&gt;https://dev-coco.tistory.com/161&lt;/a&gt; [슬기로운 개발생활:티스토리]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SSL &lt;b&gt;동작 원리&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1666288119019&quot; class=&quot;stylus&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SSL(Secure Socket Layer) 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;서버에서 CA를 통해 SSL 인증서를 발급하여 클라이언트에게 공개키와 함께 줌 (CA는 서버에서 만든 공개키와 개인키로 암호화 수행된 SSL 인증서발급)&lt;/li&gt;
&lt;li&gt;공개키를 가지고 SSL을 복호화 성공시 인증서가 잘 되어 있다는 것&lt;/li&gt;
&lt;li&gt;공개키를 가지고 데이터를 서버로 보낼 때 암호화 진행&lt;/li&gt;
&lt;li&gt;서버에서 개인키로 복호화하여 데이터 확인&lt;/li&gt;
&lt;/ol&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;  3-way handshake에 대해 설명해주세요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3-way-handshake&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP 네트워크에서 통신하는 장치가 서로 연결이 잘되었는지 확인하는 방법&lt;/li&gt;
&lt;li&gt;송신자와 수신자는 총 3번에 걸쳐 데이터를 주고 받으며 통신이 가능한 상태인지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4-way-handshake&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP 네트워크에서 통신 하는 장치의 연결을 해제하는 방법&lt;/li&gt;
&lt;li&gt;송신자와 수신자는 총 4번에 걸쳐 데이터를 주고 받으며 연결을 끊음&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;www.naver.com을 접속했을 시 화면이 출력되기까지의 과정을 설명해주세요&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/h3&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 브라우저에 URL을 입력&lt;/li&gt;
&lt;li&gt;DNS 서버에 도메인 네임으로 서버의 진짜 주소를 찾음&lt;/li&gt;
&lt;li&gt;IP 주소로 웹서버에 TCP 3-way-handshake로 연결 수립&lt;/li&gt;
&lt;li&gt;클라이언트는 웹 서버로 HTTP 요청 메시지를 보냄&lt;/li&gt;
&lt;li&gt;웹 서버는 HTTP 응답 메시지를 보냄&lt;/li&gt;
&lt;li&gt;도착한 HTTP 응답 메시지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해 출력&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;HTTP 메소드 중 GET, POST를 비교하여 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GET&lt;/b&gt;&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;URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안됨&lt;/li&gt;
&lt;li&gt;길이 제한이 있음(브라우저마다 제한이 다름)&lt;/li&gt;
&lt;li&gt;캐싱할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;POST&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 추가 또는 수정하기 위해 사용되는 방식으로 데이터를 Body에 추가하여 전송하는 방식&lt;/li&gt;
&lt;li&gt;완전히 안전한 것은 아니지만 URL에 데이터가 노출되지 않아 GET 보다는 안전&lt;/li&gt;
&lt;li&gt;데이터 길이에 제한이 없음&lt;/li&gt;
&lt;li&gt;캐싱할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PUT&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;post와 put의 차이점은 post는 매번 새로운 리소스를 만들지만, put은 요청 시 마다 같은 리소스를 반복한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;put은 멱등하다고 할 수 있으며, post는 멱등하지 않다고 할 수 있다.&lt;/p&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;background-color: #ffffff; color: #000000;&quot;&gt;HTTP 상태코드 정의를 말씀해주시고 알고있는 상태코드 모두 설명해주세요&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HTTP 상태코드&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP 상태 코드는 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드로, 상태 코드에 따라 요청의 성공/실패 여부를 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;1xx(정보) :&lt;/b&gt;&amp;nbsp;요청을 받았으며 프로세스를 계속 진행합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;100 : continue&lt;/li&gt;
&lt;li&gt;102 : processing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2xx(성공) :&lt;/b&gt;&amp;nbsp;요청을 성공적으로 받았으며 인식했고 수용하였습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;200 : ok, 요청이 성공적이며 정보는 그 요청에 대한 응답&lt;/li&gt;
&lt;li&gt;201 : Created, 요청이 성공적이며, 그 결과로 새로운 리소스 생성&lt;/li&gt;
&lt;li&gt;202 : Accepted, 요청을 수신하였다. 행동은 아직 할 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;3xx(리다이렉션) :&lt;/b&gt;&amp;nbsp;요청 완료를 위해 추가 작업 조치가 필요합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;301 : Moved Permanently, 요청한 리소스의 Url이 변경되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;4xx(클라이언트 오류) :&lt;/b&gt;&amp;nbsp;요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;400 : Bad Request, 잘못된 요청으로 인해 서버가 이해할 수 없음&lt;/li&gt;
&lt;li&gt;401 : Unauthorized, 비 인증 상태이기에 응답을 할 수 없다.&lt;/li&gt;
&lt;li&gt;403 : Forbidden, 클라이언트가 접근할 권리를 갖고 있지 않을 경우, 401과 다른점은 서버가 누구인지를 알고 있다는 사실&lt;/li&gt;
&lt;li&gt;404 : Not Found, 서버가 요청받은 리소스를 찾을 수 없는 경우, 서버가 인증받지 않은 클라이언트로부터 리소스를 숨기기 위해서 403대신 보낼 수 있다.&lt;/li&gt;
&lt;li&gt;405 : Method Not Allowed, 요청한 메소드는 서버에서는 알고있지만, 제거되었거나 사용할 수 없는 메소드.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;5xx(서버 오류) :&lt;/b&gt;&amp;nbsp;서버가 명백히 유효한 요청에 대한 충족을 실패했습니다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;500 : Internal Server Error**,** 웹사이트에 문제가 있지만, 서버가 제대로 설명 불가&lt;/li&gt;
&lt;li&gt;502 : Bad Gateway, 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;</description>
      <category>코딩공부/기술면접</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/74</guid>
      <comments>https://kyumin1020.tistory.com/74#entry74comment</comments>
      <pubDate>Fri, 21 Oct 2022 03:07:08 +0900</pubDate>
    </item>
    <item>
      <title>[신입 기술면접] 기술면접 스터디 정리 1</title>
      <link>https://kyumin1020.tistory.com/73</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFQsQt/btrOEqhDTB5/7K555QsU6B9APA4Q6ZbtqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFQsQt/btrOEqhDTB5/7K555QsU6B9APA4Q6ZbtqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFQsQt/btrOEqhDTB5/7K555QsU6B9APA4Q6ZbtqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFQsQt%2FbtrOEqhDTB5%2F7K555QsU6B9APA4Q6ZbtqK%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;603&quot; height=&quot;317&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;525&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; Stack과 Queue 자료구조에 대해 말하고 차이점에 대해 설명하시오&lt;/h3&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;Stack 이란?&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 구조와 크기의 자료를 Top방향으로만 쌓는 구조&lt;/li&gt;
&lt;li&gt;가장 최근에 삽입된 데이터가 가장 위에 쌓이며 가장 먼저 삭제&lt;/li&gt;
&lt;li&gt;FIFO 후입선출의 구조&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RoG9z/btrOQbGx3sN/gOBTkuXSauL3pe7MmH0syK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RoG9z/btrOQbGx3sN/gOBTkuXSauL3pe7MmH0syK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RoG9z/btrOQbGx3sN/gOBTkuXSauL3pe7MmH0syK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRoG9z%2FbtrOQbGx3sN%2FgOBTkuXSauL3pe7MmH0syK%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;216&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Queue 란?&lt;/b&gt;&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;삽입연산이 이루어지는 Rear, 삭제연산이 이루어지는 Front의 구성&lt;/li&gt;
&lt;li&gt;LIFO 선입선출의 구조&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQGMyW/btrOP2JEyWi/A4G5CSTCSzza5has6fXdpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQGMyW/btrOP2JEyWi/A4G5CSTCSzza5has6fXdpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQGMyW/btrOP2JEyWi/A4G5CSTCSzza5has6fXdpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQGMyW%2FbtrOP2JEyWi%2FA4G5CSTCSzza5has6fXdpk%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;356&quot; height=&quot;142&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;background-color: #ffffff; color: #000000;&quot;&gt;Array와 Linked List 자료구조에 대해 말하고 차이점에 대해 설명해보시오&lt;/span&gt;&lt;/h3&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;Array (배열)&lt;/b&gt;&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;연속된 메모리 -&amp;gt; 데이터의 주소를 통해서 데이터 조회 가능&lt;/li&gt;
&lt;li&gt;데이터를 추가하는 경우, 한자리를 비워야되는데 모든자료가 한칸 밀리게 되어 추가,삭제는 지양&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Linked List (연결리스트)&lt;/b&gt;&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;Node는 연속된 공간에 존재하지 않기에 데이터를 조회하려면 처음부터 순차적으로 접근해야함&lt;/li&gt;
&lt;li&gt;메모리 관리가 용이&lt;/li&gt;
&lt;li&gt;추가 및 삭제는 O(1)로 가능&lt;/li&gt;
&lt;/ul&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: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Array에 데이터 추가 및 삭제 시 O(N)이 소요, Linked List는 O(1)만큼 소요&lt;/li&gt;
&lt;li&gt;데이터의 주소를 찾는 것에는 Array가 용이하고, 데이터 추가 및 삭제를 위한 것에는 Linked List가 더 용이&lt;/li&gt;
&lt;li&gt;수정을 할때마다 동적으로 Linked List 크기가 결정되어 Array에 비해 처음부터 큰 공간을 할당할 필요가 없음&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;Array와 Linked List는 trade off의 관계를 갖는다. &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;즉, 어떤 특성이 좋아지면 다른 특성이 나뻐지는 상황을 의미&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rKmBl/btrOPZF9Huh/YxCnIVhd6unqDn7WZRH9R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rKmBl/btrOPZF9Huh/YxCnIVhd6unqDn7WZRH9R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rKmBl/btrOPZF9Huh/YxCnIVhd6unqDn7WZRH9R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrKmBl%2FbtrOPZF9Huh%2FYxCnIVhd6unqDn7WZRH9R0%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;636&quot; height=&quot;297&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;#&lt;/b&gt;파이썬의 List는 Linked List 기능이 함께 포함되어 있어서 Linked List에 조금 더 가깝다.&lt;/p&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;background-color: #ffffff; color: #000000;&quot;&gt;RDB와 NoSQL은 무엇인가? 차이점 또는 장단점 위주로 설명해보시오&lt;/span&gt;&lt;/h3&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;RDB (Relational DataBase)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관계형 모델을 기반으로하는 DataBase, 이를 관리하기 위한 시스템을 RDBMS (Management System) 라고 함&lt;/li&gt;
&lt;li&gt;모든 데이터를 2차원의 테이블 형태로 표현&lt;/li&gt;
&lt;li&gt;정해진 스키마에 따라 데이터를 저장하고 명확한 데이터 구조를 보장&lt;/li&gt;
&lt;li&gt;스키마로 인해 데이터가 유연하지 못하며, 스키마가 변경될 경우 번거롭고 까다로움&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;외래 키와 같은 관계가 설정되어 있기 때문에 결제 등의 복잡한 트랜잭션 처리에 강함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;테이블 설계시 정규화를 통해 데이터 중복 저장 없앰 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;테이블간의 Join연산이 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;단점, 테이블간 관계를 맺고 있어 시스템이 커질 경우 Join 문이 많은 복잡한 쿼리가 만들어 질 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NoSQL (Not Only SQL)&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;비관계형으로 데이터를 저장하는 형태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;테이블(혹은 컬렉션 혹은 또 다른 명칭) 사이에 딱히 명시된 제약이나 규칙이 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있음&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;key-value나 key-value가 계층화 된 document로 저장하는 것이 일반적&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;자유롭게 데이터 구조를 설정 가능&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; 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;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;복잡도가 떨어지기에 훨씬 대용량의 데이터를 저장, 관리하기에 용이&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;데이터 분산이 용이하여 성능 향상을 위한 scale-up 뿐만 아니라 scale-out 또한 가능함&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;단점, 데이터 중복이 발생할 수 있으며, 중복된 데이터가 변경될 경우 수정을 모든컬렉션에서 진행해야함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;단점, &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;서로 depth가 깊은 곳에 data가 있다면 다른 컬렉션 끼리는 JOIN이 힘들 수 있음&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;Join 의 뜻은 무엇인가? Inner Join과 Left (Outer) Join 에 대한 차이점을 설명해보시오&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Join&lt;/b&gt;&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;ORM에서 FK로 참조를 할 때 자주 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Inner Join&lt;/b&gt;&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;A와 B에 대해 수행하는 것은, A와 B의 교집합을 의미함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Outer Join&lt;/b&gt;&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;A와 B에 대해 수행하는 것은, A와 B의 합집합을 의미함&lt;/li&gt;
&lt;li&gt;어떤 행을 기준으로 outer join 하느냐에 따라서 left, right, full outer join으로 나뉨&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDEhmb/btrOQiyX8yn/PoFXUZRp2PnuBQqun6ZyQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDEhmb/btrOQiyX8yn/PoFXUZRp2PnuBQqun6ZyQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDEhmb/btrOQiyX8yn/PoFXUZRp2PnuBQqun6ZyQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDEhmb%2FbtrOQiyX8yn%2FPoFXUZRp2PnuBQqun6ZyQK%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;461&quot; height=&quot;251&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;background-color: #ffffff; color: #000000;&quot;&gt;Transaction 의 의미와 ACID 규칙에 대해서 설명해보시오&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Transaction&lt;/span&gt;&lt;/b&gt;&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;즉, 작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능&lt;/li&gt;
&lt;li&gt;하나의 트랜잭션은 Commit(작업완료) 되거나 Rollback(취소) 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;트랜잭션의 특성 ACID&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원자성(Atomicity) : 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 함&lt;/li&gt;
&lt;li&gt;일관성(Consistency) : 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 함&lt;/li&gt;
&lt;li&gt;독립성(Isolation) : 둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없음&lt;/li&gt;
&lt;li&gt;영속성(Durability) : 완료된 결과는 영구적으로 반영되어야 함&lt;/li&gt;
&lt;/ul&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;background-color: #ffffff; color: #000000;&quot;&gt;Primary Key와 Foreign Key에 대해 각각 설명해보시오&lt;/span&gt;&lt;/h3&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;background-color: #ffffff;&quot;&gt;Primary Key (기본키)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&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;테이블 내에 하나의 PK만 허용&lt;/li&gt;
&lt;li&gt;Null값을 허용하지 않고 상위 테이블에서 해당 값을 삭제할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Foreign Key (외래키)&lt;/b&gt;&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;background-color: #ffffff; color: #000000;&quot;&gt;다른 테이블의 PK(기본키)를 현재 테이블로 참조하여 사용하는 키&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;테이블 내에 한개 이상의 FK(외래키)가 허용&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Null값을 허용하며 상위 테이블에서 해당 값을 삭제할 수 있음&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;참조하는 데이터의 무결성을 높임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;관계를 설정하여 참조된 테이블의 데이터에 접근이 가능하게 해줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;</description>
      <category>코딩공부/기술면접</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/73</guid>
      <comments>https://kyumin1020.tistory.com/73#entry73comment</comments>
      <pubDate>Mon, 17 Oct 2022 22:18:22 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] 도커? 도커는 왜 사용해야 할까?</title>
      <link>https://kyumin1020.tistory.com/72</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kEwli/btrOCdo74Fb/M9atpw7xrQfMJkSombPI61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kEwli/btrOCdo74Fb/M9atpw7xrQfMJkSombPI61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kEwli/btrOCdo74Fb/M9atpw7xrQfMJkSombPI61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkEwli%2FbtrOCdo74Fb%2FM9atpw7xrQfMJkSombPI61%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;438&quot; height=&quot;381&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;604&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Docker 란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker&lt;/b&gt;는 애플리케이션을 신속하게 구축하고 테스트 및 배포할 수 있는 &lt;b&gt;컨테이너&lt;/b&gt; 기반의 소프트웨어 플랫폼입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어를 &lt;b&gt;컨테이너&lt;/b&gt;라는 표준화된 유닛으로 패키징하며, 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행하는 데 필요한 모든것이 컨테이너에 포함되어 있습니다. Docker에는 &lt;b&gt;Image&lt;/b&gt;라는 개념이 존재하는데 Docker Image는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행환경, 실행하는 코드, 필요한 라이브러리, 설정 파일을 한곳에 모아둔 파일을 의미하고, &lt;b&gt;Image&lt;/b&gt;를 사용하여 실행한 것이 &lt;b&gt;컨테이너&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Docker의 장점&lt;/b&gt;&lt;/h2&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;Docker를 사용하지 않는 사용자보다 7배 더 많은 소프트웨어를 더 빠르게 제공할 수 있습니다.&lt;/li&gt;
&lt;li&gt;Docker기반 애플리케이션을 Local 개발 시스템에서 AWS의 배포로 원활하게 이전할 수 있습니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Docker와 가상 머신의 차이점?&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQ1KkH/btrOCrWIa0z/Slpl6Y0hX8u2ty602Vnqtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQ1KkH/btrOCrWIa0z/Slpl6Y0hX8u2ty602Vnqtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQ1KkH/btrOCrWIa0z/Slpl6Y0hX8u2ty602Vnqtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQ1KkH%2FbtrOCrWIa0z%2FSlpl6Y0hX8u2ty602Vnqtk%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;574&quot; height=&quot;450&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상 머신(VM)은 서버 하드웨어를 가상화하는 반면, 컨테이너는 서버의 운영 체제를 가상화합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker는 컨테이너를 위한 운영 체제이며, 컨테이너를 실행하려는 각 서버에 Docker Engine이 설치되어 컨테이너를 구축,&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Docker를 활용한 배포 (명령어)&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;EC2에 접속&lt;/li&gt;
&lt;li&gt;git clone ( 깃허브 프로젝트 클론 )&lt;/li&gt;
&lt;li&gt;sudo apt-get update (라이브러리 관련 업데이트)&lt;/li&gt;
&lt;li&gt;sudo apt-get remove docker docker-engine docker.io ( 도커관련 파일이 남아있으면 에러가 발생하여 제거)&lt;/li&gt;
&lt;li&gt;sudo apt install docker.io ( 도커 설치 )&lt;/li&gt;
&lt;li&gt;docker --version (도커 설치확인)&lt;/li&gt;
&lt;li&gt;sudo systemctl start docker (도커 실행)&lt;/li&gt;
&lt;li&gt;sudo systemctl enable docker (인스턴스 시작될때 자동으로 docker 실행)&lt;/li&gt;
&lt;li&gt;sudo apt install docker-compose ( docker-compose 설치)&lt;/li&gt;
&lt;li&gt;sudo docker-compose -f docker-compose.yml up -d --build (Docker 빌드, -f : 환경설정 설정, -d : 백그라운드 실행)&lt;/li&gt;
&lt;li&gt;sudo docker-compose -f docker-compose.yml down (Docker 컨테이너 내리기)&lt;/li&gt;
&lt;li&gt;sudo docker-compose exec -it {해당 컨테이너 id} /bin/sh ( 컨테이너 접속 )&lt;/li&gt;
&lt;li&gt;sudo docker exec -it {해당 컨테이너 id} /bin/sh (compose로 접속이 불가능 할시 컨테이너 접속)&lt;/li&gt;
&lt;li&gt;sudo docker logs {컨테이너 이름} -f ( 로그 확인 )&lt;/li&gt;
&lt;li&gt;sudo docker restart {컨테이너 이름} ( 컨테이너 재시작 )&lt;/li&gt;
&lt;/ol&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>코딩공부/Docker</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/72</guid>
      <comments>https://kyumin1020.tistory.com/72#entry72comment</comments>
      <pubDate>Fri, 14 Oct 2022 22:30:10 +0900</pubDate>
    </item>
    <item>
      <title>[내일배움캠프] 4개월간 여정의 끝 그리고 또 다른 시작</title>
      <link>https://kyumin1020.tistory.com/71</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBXKh9/btrKb78jmwR/TpIugUmQydB9LCBEKRg53K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBXKh9/btrKb78jmwR/TpIugUmQydB9LCBEKRg53K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBXKh9/btrKb78jmwR/TpIugUmQydB9LCBEKRg53K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBXKh9%2FbtrKb78jmwR%2FTpIugUmQydB9LCBEKRg53K%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;313&quot; height=&quot;161&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;161&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느덧 짧다면 짧고 길다면 긴 시간인 4개월이 쏜살같이 지나갔다. 4월 18일날 내일배움캠프를 시작할 때만 해도 나는 정말 코딩의 'ㅋ'자도 모르는 정말 처음 해보는 초심자였다. 이전에 요리를 할때도 정말 이렇게까지 내가 4개월이라는 기간동안 하루에 12시간 이상씩 몰입하면서 공부를 한적이 없었는데, 코딩이 나한테 잘맞고 재미있어서 가능했던것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4개월간 얻고 배운것 &lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;Python 기초 문법&lt;/li&gt;
&lt;li&gt;HTML, CSS, JavaScript 활용한 프론트엔드 구성&lt;/li&gt;
&lt;li&gt;DataBase를 구성하고 데이터 저장, 수정, 삭제&lt;/li&gt;
&lt;li&gt;Flask, Django 웹 프레임워크&lt;/li&gt;
&lt;li&gt;DRF활용한 REST API 설계&lt;/li&gt;
&lt;li&gt;협업툴 Git, Github활용&lt;/li&gt;
&lt;li&gt;AWS 서비스 (EC2, RDS, S3)&lt;/li&gt;
&lt;li&gt;Docker 기초&lt;/li&gt;
&lt;li&gt;알고리즘 기초&lt;/li&gt;
&lt;li&gt;머신러닝 간단 적용&lt;/li&gt;
&lt;li&gt;다양한 프로젝트를 통한 협업 경험&lt;/li&gt;
&lt;li&gt;프로젝트 배포 경험&lt;/li&gt;
&lt;li&gt;문제(에러) 해결을 위한 구글링 능력 향상&lt;/li&gt;
&lt;li&gt;StackOverflow같은 영어로 된 정보파악을 위한 영어독해능력 향상&lt;/li&gt;
&lt;li&gt;같은 뜻을 가지고 모인 멋진사람들과 함께 꿈을향해 나아갔던 열정넘치는 시간&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3bqbe/btrKkSXmAky/YakWOXGdqmxLTPjiXpEck1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3bqbe/btrKkSXmAky/YakWOXGdqmxLTPjiXpEck1/img.png&quot; data-alt=&quot;캠프 진행 하면서 배포한 프로젝트는 전부 배포담당&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3bqbe/btrKkSXmAky/YakWOXGdqmxLTPjiXpEck1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3bqbe%2FbtrKkSXmAky%2FYakWOXGdqmxLTPjiXpEck1%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;681&quot; height=&quot;248&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;248&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 data-ke-size=&quot;size16&quot;&gt;이렇게 정말 4개월이라는 시간동안 많은것을 얻게되고 또 배우게 되었는데, 진짜 4개월전의 나였으면 상상도 못할것들을 단기간에 많이 했고, 성장을 빠르게 했던것 같았다. 캠프 초반부터 습득력이 빨라서인지 초반 프로젝트서부터 많은 역할을 담당하고 아무것도 모르던 내가 열심히 구글링해가며 기초적인 기능들을 구현해가며 간단한 로그인기능이 완성이 되었을때 좋아하던 내가 이제는 로그인/회원가입은 쉽게 구현하고 더 나아가 마지막 프로젝트때는 채팅기능에 대한 지식이 정말 1도없었는데, 잘 구현을 한 것을 보고 이렇게 공부해가며 하나 둘씩 할 줄 아는게 늘어가는게 기분이 좋았다.&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;아직은 부족한 점이 많고, 사실 면접을 보러가기에는 말로 설명 할 수 있는 지식이 너무나도 부족하다는걸 느낀다. 더군다나 테스트코드나, CI CD 파이프라인 관해서는 마지막 프로젝트때 인원부족으로 신경 못 썼던 부분도 아쉬움이 남는다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;또 다른 시작 &lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 캠프활동이 끝나고 스파르타의 지원을 받아서 1달간 면접준비기간이 진행이된다. 스파르타코딩클럽 내일배움캠프에 놀란점은 캠프졸업 후에도 취업을 위해서 취업준비 기간을 또 9시부터 6시까지 케어를 해주고 지원을 계속 해준다는 점이었다. 사실 캠프끝나고 어떻게 준비해야 할까 걱정도 많았는데 매니저님과 튜터님들 그리고 든든한 팀원들과 함께 하나 둘 씩 준비해나간다면 어떻게든 되지 않을까? 라는 생각이 든다. 이제는 내가 노력하는 일만 남은것 같다. 4개월간 캠프를 끝까지 완수한 나자신에게 정말 고생했다는 말을 하고싶고 앞으로 있을 취업도 꼭 성공해서 개발자로서의 길을 나아가고 싶다. 취업 파이팅! 내일배움캠프 파이팅!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>주간회고/WIL</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/71</guid>
      <comments>https://kyumin1020.tistory.com/71#entry71comment</comments>
      <pubDate>Mon, 22 Aug 2022 17:55:06 +0900</pubDate>
    </item>
    <item>
      <title>[WIL] 내일배움캠프 막바지</title>
      <link>https://kyumin1020.tistory.com/70</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;WIL.png&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;817&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs3VEP/btrJqLFn9wB/MO919rDcoYxkmKY61DKcJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs3VEP/btrJqLFn9wB/MO919rDcoYxkmKY61DKcJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs3VEP/btrJqLFn9wB/MO919rDcoYxkmKY61DKcJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs3VEP%2FbtrJqLFn9wB%2FMO919rDcoYxkmKY61DKcJK%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;395&quot; height=&quot;395&quot; data-filename=&quot;WIL.png&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;817&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;캠프도 어느덧 막바지를 향해 달려가고 있다. 이제 1주일도 안남은채로 곧 취업시장에 뛰어들게 되는데 걱정 반 기대 반인 상태인것 같다. 올해 4월부터 코딩을 시작해서 어느덧 4개월동안 코딩을 해왔는데, 정말 시작하기 전과는 정말 상상도 못할정도로 성장을 한것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이번주 한일 &lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 프로젝트 발표 후 유저 피드백을 받으며 에러 수정, 코드리팩토링 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 매일아침 알고리즘 기초 다지기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 1:1 매니저님과 면담 (취업관련)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;느낀점 &lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 진짜 취업시장에 뛰어들어야 할 시간이 왔다. 4개월동안 내가 배운것들을 전부 정리하고, 머릿속에 집어넣어서 말로 표현할수있게 해야한다. 사실 이부분이 가장 어렵고 힘들다.. 개념들이 전부다 외우기는 정말 힘들고 모르는게 있으면 항상 구글링으로 그때그때 찾아보면서 해결해왔기 때문에 전부다 머릿속에 들어있는 상태도 아니다. 어쩌면 프로젝트보다 더 힘든 시간이 될것같다는 예감도 있다. 하지만 코딩을 하는것 자체가 정말 재밌고 컴퓨터 앞에서 하는 일이라서 적성에 정말 잘맞는것 같다.&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;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지금까지 배운 내용들에 대한 개념 들을 말로 표현 할 수 있도록 이해(꾸준히 블로그 정리) 프로젝트로 인해 소홀해진 블로그 정리 중점으로 개념 전부 정리.&lt;/li&gt;
&lt;li&gt;알고리즘 꾸준히 풀어서 코딩테스트 대비 (매일 1~2시간)&lt;/li&gt;
&lt;li&gt;Devops, 네트워크 공부 (백엔드 전문가로서 필수 소양)&lt;/li&gt;
&lt;li&gt;프로젝트와 병행하면서 놓쳤던 강의 수강&lt;/li&gt;
&lt;/ol&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;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/whZbt/btrJo2ufAu5/4ZhUYBMPC0DnXWbcMNNUI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/whZbt/btrJo2ufAu5/4ZhUYBMPC0DnXWbcMNNUI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/whZbt/btrJo2ufAu5/4ZhUYBMPC0DnXWbcMNNUI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwhZbt%2FbtrJo2ufAu5%2F4ZhUYBMPC0DnXWbcMNNUI1%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;600&quot; height=&quot;601&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;601&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>주간회고/WIL</category>
      <author>Roshu</author>
      <guid isPermaLink="true">https://kyumin1020.tistory.com/70</guid>
      <comments>https://kyumin1020.tistory.com/70#entry70comment</comments>
      <pubDate>Sat, 13 Aug 2022 13:00:16 +0900</pubDate>
    </item>
  </channel>
</rss>