<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>back to the 0</title>
    <link>https://tyhan02.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 15 Aug 2026 09:50:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>아리빠</managingEditor>
    <image>
      <title>back to the 0</title>
      <url>https://tistory1.daumcdn.net/tistory/5425124/attach/fec63b7ff59f4beeaa0f938a81b81bd3</url>
      <link>https://tyhan02.tistory.com</link>
    </image>
    <item>
      <title>Servlet(Filter, Listener, Servlet)</title>
      <link>https://tyhan02.tistory.com/260</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿 컨테이너가 관리하는 컴포넌트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;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;Filter&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;// 필터 만들기
// =&amp;gt; javax.servlet.Filter 인터페이스 규칙에 따라 작성한다.
//
// 필터 배포하기
// =&amp;gt; DD 파일(web.xml)에 설정하기
//      &amp;lt;!-- 필터 등록 --&amp;gt;
//      &amp;lt;filter&amp;gt;
//          &amp;lt;filter-name&amp;gt;f01&amp;lt;/filter-name&amp;gt;
//          &amp;lt;filter-class&amp;gt;com.eomcs.web.ex02.Filter01&amp;lt;/filter-class&amp;gt;
//      &amp;lt;/filter&amp;gt;
//
//      &amp;lt;!-- 필터를 적용할 URL 설정 --&amp;gt;
//      &amp;lt;filter-mapping&amp;gt;
//          &amp;lt;filter-name&amp;gt;f01&amp;lt;/filter-name&amp;gt;
//          &amp;lt;url-pattern&amp;gt;/ex02/*&amp;lt;/url-pattern&amp;gt;
//      &amp;lt;/filter-mapping&amp;gt;
// =&amp;gt; 애노테이션으로 설정하기
//      @WebFilter(URL)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필터의 용도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;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;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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-서블릿 실행후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트로 보낼 데이터 압축&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트로 보낼 데이터 암호화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*필터의 실행순서는 임의로 조정 불가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필터를 정의할 때 순서에 의존하는 방식으로 프로그래밍 x&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;Listener&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;// 리스너 만들기
// =&amp;gt; 서블릿 컨테이너 또는 서블릿, 세션 등의 객체 상태가 변경되었을 때 보고 받는 옵저버
// =&amp;gt; &quot;Observer&quot; 디자인 패턴이 적용된 것이다.
// =&amp;gt; ServletContextListener
//    - 서블릿 컨테이너를 시작하거나 종료할 때 보고 받고 싶다면 이 인터페이스를 구현하라.
// =&amp;gt; ServletRequestListener
//    - 요청이 들어오거나 응답할 때 보고 받고 싶다면 이 인터페이스를 구현하라.
// =&amp;gt; HttpSessionListener
//    - 세션이 생성되거나 종료될 때 보고 받고 싶다면 이 인터페이스를 구현하라.
// =&amp;gt; XxxListener
//    - 기타 다양한 인터페이스가 있다. 문서를 참고하라.
//
// 리스너 배포하기
//=&amp;gt; DD 파일(web.xml)에 설정하기
//      &amp;lt;listener&amp;gt;
//          &amp;lt;listener-class&amp;gt;com.eomcs.web.ex02.Listener01&amp;lt;/listener-class&amp;gt;
//      &amp;lt;/listener&amp;gt;
//
//=&amp;gt; 애노테이션으로 설정하기
//      @WebListener&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스너의 용도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿 컨테이너나, 세션 등이 특별한 상태일 때 필요한 작업을 수행&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// =&amp;gt; ServletContextListener
//    - 웹 애플리케이션을 시작할 때 Spring IoC 컨테이너 준비하기
//    - 웹 애플리케이션을 시작할 때 DB 커넥션 풀 준비하기
//    - 웹 애플리케이션을 종료할 때 DB 커넥션 풀에 들어 있는 모든 연결을 해제하기
// =&amp;gt; ServletRequestListener
//    - 요청이 들어 올 때 로그 남기기&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/260</guid>
      <comments>https://tyhan02.tistory.com/260#entry260comment</comments>
      <pubDate>Thu, 18 Jan 2024 16:23:10 +0900</pubDate>
    </item>
    <item>
      <title>Servlet</title>
      <link>https://tyhan02.tistory.com/259</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿은 클래스를 만든 후, 서블릿 컨테이너에 등록해야 사용할 수 있다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;// 등록 방법 1)
//   웹 애플리케이션 배치 파일(web.xml; DD(Deploy Description) 파일)에 서블릿 정보를 등록한다.
//   =&amp;gt; WEB-INF/web.xml
//   =&amp;gt; DD File: Deployment Descriptor File
//   =&amp;gt; 배치 예:
//      &amp;lt;servlet&amp;gt;
//          &amp;lt;servlet-name&amp;gt;서블릿별명&amp;lt;/servlet-name&amp;gt;
//          &amp;lt;servlet-class&amp;gt;서블릿 클래스의 전체이름(패키지명 포함)&amp;lt;/servlet-class&amp;gt;
//      &amp;lt;/servlet&amp;gt;
//
//      &amp;lt;servlet-mapping&amp;gt;
//          &amp;lt;servlet-name&amp;gt;서블릿별명&amp;lt;/servlet-name&amp;gt;
//          &amp;lt;url-pattern&amp;gt;클라이언트에서 요청할 때 사용할 URL(/로 시작해야 한다.)&amp;lt;/url-pattern&amp;gt;
//      &amp;lt;/servlet-mapping&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;// 등록 방법 2)
//   서블릿 클래스 선언부에 @WebServlet 애노테이션을 붙인다.
//   =&amp;gt; @WebServlet
//      @WebServlet(URL)
//      @WebServlet(value=URL)
//      @WebServlet(urlPatterns={&quot;URL1&quot;, &quot;URL2&quot;, ...})&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿 구동 과정&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// 1) 웹 브라우저가 서블릿 실행을 요청한다.
// 2) 서블릿 컨테이너는 해당 URL의 서블릿 객체를 찾는다.
// 3.1) 서블릿 객체를 아직 만들지 않았다면,
// =&amp;gt; 서블릿 클래스에 대해 인스턴스를 생성한다.
// =&amp;gt; 생성자를 호출한다.
// =&amp;gt; init()를 호출한다.
// =&amp;gt; service()를 호출한다.
// 3.2) 서블릿 객체가 생성되어 있다면,
// =&amp;gt; service()를 호출한다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IF 웹 애플리케이션 종료시 =&amp;gt; 생성된 모든 서블릿들의 destroy() 메서드 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특별한 옵션을 주지 않는 이상 클라이언트가 최초로 요청했을 때 서블릿 인스턴스를 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서블릿 인스턴스는 클래스마다 오직 한개만 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;init(), destroy()는 오직 한번만 호출됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;service()는 클라이언트가 요청할 때 마다 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 서블릿 인스턴스는 오직 클래스마다 한개만 생성되기에, 모든 클라이언트가 같은 서블릿 인스턴스를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt;클라이언트마다 구분되어야 하는 데이터는 서블릿 인스턴스에 보관 불가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/259</guid>
      <comments>https://tyhan02.tistory.com/259#entry259comment</comments>
      <pubDate>Thu, 18 Jan 2024 15:19:20 +0900</pubDate>
    </item>
    <item>
      <title>NCP 취득 완</title>
      <link>https://tyhan02.tistory.com/258</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Xuw4/btsBXGjSrei/WbKhWN2jVpD7IaVvJDV8c1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Xuw4/btsBXGjSrei/WbKhWN2jVpD7IaVvJDV8c1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Xuw4/btsBXGjSrei/WbKhWN2jVpD7IaVvJDV8c1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Xuw4%2FbtsBXGjSrei%2FWbKhWN2jVpD7IaVvJDV8c1%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;863&quot; height=&quot;601&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/258</guid>
      <comments>https://tyhan02.tistory.com/258#entry258comment</comments>
      <pubDate>Wed, 13 Dec 2023 19:06:33 +0900</pubDate>
    </item>
    <item>
      <title> 면접 최종 정리(Java, Spring, DB, OS, 네트워크, 자료구조)</title>
      <link>https://tyhan02.tistory.com/257</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스프링:&lt;br /&gt;자바&amp;nbsp;플랫폼을&amp;nbsp;위한&amp;nbsp;오픈소스&amp;nbsp;어플리케이션&amp;nbsp;프레임워크로&amp;nbsp;,&amp;nbsp;pojo&amp;nbsp;기반&amp;nbsp;-&amp;nbsp;plain&amp;nbsp;old&amp;nbsp;java&amp;nbsp;object&amp;nbsp;,&amp;nbsp;DI-&amp;nbsp;defendency&amp;nbsp;injection&amp;nbsp;의존성&amp;nbsp;주입,&amp;nbsp;aop&lt;br /&gt;-관점&amp;nbsp;지향&amp;nbsp;프로그래밍&amp;nbsp;을&amp;nbsp;지원하는&amp;nbsp;컨테이너를&amp;nbsp;제공하는&amp;nbsp;프레임워크&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;제어의 역전 Ioc(Inversion of Control) - 디자인 원칙 중 하나로&amp;nbsp;&lt;br /&gt;&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;줄이기&amp;nbsp;위해&lt;br /&gt;&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;어렵게&amp;nbsp;만들기&amp;nbsp;때문에&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;DI(Dependency&amp;nbsp;injection)&amp;nbsp;의존성&amp;nbsp;주입&amp;nbsp;-&amp;nbsp;디자인&amp;nbsp;패턴&amp;nbsp;중&amp;nbsp;하나&amp;nbsp;&lt;br /&gt;&lt;br /&gt;의존&amp;nbsp;객체를&amp;nbsp;직접&amp;nbsp;생성하는&amp;nbsp;것이&amp;nbsp;아닌,&amp;nbsp;생성자나&amp;nbsp;setter을&amp;nbsp;통해&amp;nbsp;의존&amp;nbsp;관계를&amp;nbsp;주입하는&amp;nbsp;것&amp;nbsp;의미&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그렇다면 스프링에선 IoC와 DI를 어떻게 지원하는가?&lt;br /&gt;-컨테이너로써&amp;nbsp;제공,&amp;nbsp;클래스&amp;nbsp;사이&amp;nbsp;의존&amp;nbsp;관계를&amp;nbsp;Bean&amp;nbsp;설정&amp;nbsp;정보를&amp;nbsp;바탕으로&amp;nbsp;컨테이너가&amp;nbsp;자동으로&amp;nbsp;연결해주는&amp;nbsp;방식으로&amp;nbsp;제공&lt;br /&gt;-&amp;gt; 객체간 결합도가 낮아짐 But 코드 추적이 어렵다&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;AOP&lt;br /&gt;관점 지향 프로그래밍: 공통 관심사항과 핵심 관심사항을 분리하는 것을 의미&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Bean 객체란?&lt;br /&gt;DI&amp;nbsp;컨테이너&amp;nbsp;내부에&amp;nbsp;존재하며&amp;nbsp;관리받고&amp;nbsp;있는&amp;nbsp;객체를&amp;nbsp;의미,&amp;nbsp;Bean으로&amp;nbsp;등록된&amp;nbsp;객체는&amp;nbsp;쉽게&amp;nbsp;주입하여&amp;nbsp;사용&amp;nbsp;가능&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Annotation&lt;br /&gt;프로그램에&amp;nbsp;추가적&amp;nbsp;정보를&amp;nbsp;제공하는&amp;nbsp;메타&amp;nbsp;데이터&lt;br /&gt;어노테이션을 정의하고 원하는 위치에 배치한 후, 코드가 실행되는 도중 자바 리플렉션을 이용해 추가 정보를 획득, 기능 실시하는 방식&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트랜잭션을 추상화해서 사용하는 이유&lt;br /&gt;코드레벨은&amp;nbsp;다르지만&amp;nbsp;논리적으로&amp;nbsp;같은&amp;nbsp;기능을&amp;nbsp;수행하기에&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JAVA의&amp;nbsp;장단점&lt;br /&gt;JVM&amp;nbsp;위에서&amp;nbsp;실행되기&amp;nbsp;때문에&amp;nbsp;OS에&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;변환하고,&amp;nbsp;JVM에&amp;nbsp;의해&amp;nbsp;기계어로&amp;nbsp;번역되므로&amp;nbsp;한번&amp;nbsp;컴파일링을&amp;nbsp;거치는&amp;nbsp;언어에&amp;nbsp;비해&amp;nbsp;느리다&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JVM이란?&lt;br /&gt;java&amp;nbsp;virtual&amp;nbsp;machine&lt;br /&gt;OS와&amp;nbsp;java&amp;nbsp;application사이를&amp;nbsp;중재해주는&amp;nbsp;가상&amp;nbsp;머신&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바 실행 과정&lt;br /&gt;1.&amp;nbsp;java&amp;nbsp;소스코드&amp;nbsp;작성:&amp;nbsp;.java&amp;nbsp;확장자&amp;nbsp;가짐&lt;br /&gt;2.&amp;nbsp;java&amp;nbsp;소스코드를&amp;nbsp;.class바이트&amp;nbsp;코드로&amp;nbsp;변환하는&amp;nbsp;컴파일&amp;nbsp;작업&amp;nbsp;수행&lt;br /&gt;3.&amp;nbsp;jvm의&amp;nbsp;바이트&amp;nbsp;코드&amp;nbsp;실행&lt;br /&gt;4.&amp;nbsp;java&amp;nbsp;클래스&amp;nbsp;파일이&amp;nbsp;jvm에&amp;nbsp;의해&amp;nbsp;로딩,&amp;nbsp;클래스변수&amp;nbsp;초기화&lt;br /&gt;5.&amp;nbsp;main&amp;nbsp;메서드&amp;nbsp;실행&lt;br /&gt;6.&amp;nbsp;프로그램&amp;nbsp;종료&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가비지 콜렉터 GC란?&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;Java에서&amp;nbsp;동적&amp;nbsp;변수를&amp;nbsp;할당하는&amp;nbsp;영역은&amp;nbsp;Heap&amp;nbsp;영역이므로,&amp;nbsp;JVM의&amp;nbsp;GC의&amp;nbsp;작동&amp;nbsp;대상은&amp;nbsp;Heap&amp;nbsp;메모리&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바에서 ==와 equals의 차이&lt;br /&gt;==:&amp;nbsp;참조&amp;nbsp;비교,&amp;nbsp;두&amp;nbsp;객체가&amp;nbsp;같은&amp;nbsp;메모리&amp;nbsp;위치인지&amp;nbsp;비교&lt;br /&gt;equals:&amp;nbsp;두객체의&amp;nbsp;내부&amp;nbsp;값이&amp;nbsp;같은지&amp;nbsp;비교&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바의 접근 제한자&lt;br /&gt;public:&amp;nbsp;접근에&amp;nbsp;제한&amp;nbsp;없음&lt;br /&gt;private:&amp;nbsp;자기&amp;nbsp;자신&amp;nbsp;클래스&amp;nbsp;내에서&amp;nbsp;접근&amp;nbsp;가능&lt;br /&gt;default:&amp;nbsp;같은&amp;nbsp;패키지&amp;nbsp;내에서&amp;nbsp;접근&amp;nbsp;가능&lt;br /&gt;protected:&amp;nbsp;동일한&amp;nbsp;패키지&amp;nbsp;내에서&amp;nbsp;접근+&amp;nbsp;상속을&amp;nbsp;이용한&amp;nbsp;접근&amp;nbsp;가능&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바의 데이터 타입&lt;br /&gt;원시&amp;nbsp;자료형:&amp;nbsp;stack영역&lt;br /&gt;정수형&amp;nbsp;:&amp;nbsp;byte,&amp;nbsp;short,&amp;nbsp;int,&amp;nbsp;long&lt;br /&gt;실수형&amp;nbsp;:&amp;nbsp;float,&amp;nbsp;double&lt;br /&gt;논리형&amp;nbsp;:&amp;nbsp;boolean&lt;br /&gt;문자형&amp;nbsp;:&amp;nbsp;char&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참조 자료형: Heap영역&lt;br /&gt;원시&amp;nbsp;자료형&amp;nbsp;제외&amp;nbsp;모두&lt;br /&gt;String,&amp;nbsp;integer&amp;nbsp;등&lt;br /&gt;데이터는&amp;nbsp;heap에서&amp;nbsp;관리,&amp;nbsp;메모리&amp;nbsp;주소값은&amp;nbsp;stack에서&amp;nbsp;관리&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java의 hashcode()는?&lt;br /&gt;두&amp;nbsp;객체가&amp;nbsp;동일한&amp;nbsp;객체인지&amp;nbsp;비교할&amp;nbsp;때&amp;nbsp;사용&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Boxing과, UnBoxing에 대해&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;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;래퍼(Wrapper) 클래스:원시자료형 타입의 데이터를 객체로 취급해야 할 경우 사용하는 클래스&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java의 static변수&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;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java의 main 메소드가 static인 이유는?&lt;br /&gt;static은&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;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;generic이란?&lt;br /&gt;클래스&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;타입&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추상클래스 vs 인터페이스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추상 클래스: 추상 클래스 내부에 추상 메소드 이외 다른 것들도 추가 가능,&lt;br /&gt;추상&amp;nbsp;키워드사용해&amp;nbsp;선언한&amp;nbsp;클래스,&amp;nbsp;추상&amp;nbsp;메서드&amp;nbsp;한개&amp;nbsp;이상&amp;nbsp;포함&lt;br /&gt;&lt;br /&gt;인터페이스:&amp;nbsp;인터페이스&amp;nbsp;키워드를&amp;nbsp;사용해&amp;nbsp;선언,&amp;nbsp;추상메서드와&amp;nbsp;상순만을&amp;nbsp;포함&lt;br /&gt;다중상속&amp;nbsp;가능&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;String builder: 동기화 지원 안해서, 단일쓰레드에서 성능이 좋음&amp;nbsp;&lt;br /&gt;String&amp;nbsp;buffer:&amp;nbsp;동기화&amp;nbsp;지원해서&amp;nbsp;멀티&amp;nbsp;쓰레드&amp;nbsp;환경에서&amp;nbsp;thread-safe&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OS란?&lt;br /&gt;운영체제는&amp;nbsp;하드웨어&amp;nbsp;자원을&amp;nbsp;관리하고,&amp;nbsp;응용&amp;nbsp;프로그램와&amp;nbsp;하드웨어&amp;nbsp;사이를&amp;nbsp;중재하는&amp;nbsp;인터페이스&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;커널이란?&lt;br /&gt;메모리에&amp;nbsp;상주하는&amp;nbsp;OS의&amp;nbsp;핵심&amp;nbsp;부분으로,&amp;nbsp;필요한&amp;nbsp;운영체제의&amp;nbsp;핵심&amp;nbsp;부분만을&amp;nbsp;메인&amp;nbsp;메모리에&amp;nbsp;적재하여&amp;nbsp;운영체제를&amp;nbsp;사용하게함&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;메모리 구조&lt;br /&gt;&lt;br /&gt;텍스트&amp;nbsp;영역:&amp;nbsp;실행할&amp;nbsp;프로그램의&amp;nbsp;구조가&amp;nbsp;저장되는&amp;nbsp;영역&lt;br /&gt;&lt;br /&gt;static&amp;nbsp;영역:&amp;nbsp;전역&amp;nbsp;변수,&amp;nbsp;정적&amp;nbsp;변수가&amp;nbsp;저장되는&amp;nbsp;영역&lt;br /&gt;&lt;br /&gt;heap&amp;nbsp;영역:&amp;nbsp;사용자가&amp;nbsp;직접&amp;nbsp;관리하는&amp;nbsp;영역,&amp;nbsp;메모리&amp;nbsp;공간&amp;nbsp;동적&amp;nbsp;할당&lt;br /&gt;&lt;br /&gt;stack&amp;nbsp;영역:&amp;nbsp;지역변수,&amp;nbsp;매개변수가&amp;nbsp;저장되는&amp;nbsp;영역,&amp;nbsp;컴파일&amp;nbsp;시&amp;nbsp;크기&amp;nbsp;결정&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Heap vs Stack&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;heap&amp;nbsp;overflow,&amp;nbsp;stack&amp;nbsp;overflow가&amp;nbsp;발생&lt;br /&gt;스택:&amp;nbsp;크기&amp;nbsp;제한&lt;br /&gt;힙:&amp;nbsp;크기&amp;nbsp;제한&amp;nbsp;X&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Heap의 영역을 너무 크게 잡으면 생기는 일은?&lt;br /&gt;힙&amp;nbsp;영역이&amp;nbsp;너무&amp;nbsp;크다면,&amp;nbsp;가비지&amp;nbsp;콜렉터의&amp;nbsp;수행시간이&amp;nbsp;길어져&amp;nbsp;성능저하로&amp;nbsp;이어짐&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로세스 vs 쓰레드&lt;br /&gt;프로세스:&amp;nbsp;자원을&amp;nbsp;할당받는&amp;nbsp;작업의&amp;nbsp;단위&lt;br /&gt;쓰레드:&amp;nbsp;프로세스의&amp;nbsp;자원을&amp;nbsp;실행하는&amp;nbsp;실행의&amp;nbsp;단위&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Context Switiching(문맥교환이란?)&lt;br /&gt;&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;의미&lt;br /&gt;-프로세스&amp;nbsp;스케줄링,&amp;nbsp;시스템&amp;nbsp;콜&amp;nbsp;등에&amp;nbsp;사용&lt;br /&gt;-&amp;gt;&amp;nbsp;자주&amp;nbsp;사용&amp;nbsp;시&amp;nbsp;오버헤드&amp;nbsp;발생&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로세스 제어 블록이란?&amp;nbsp;&lt;br /&gt;프로세스를&amp;nbsp;관리하기&amp;nbsp;위한&amp;nbsp;정보를&amp;nbsp;포함하는&amp;nbsp;OS커널의&amp;nbsp;자료구조&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;크롬 브라우저에서 한 탭에 오류가 생기더라도, 다른 탭에 영향을 끼치지 않는다&lt;br /&gt;&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;크롬&amp;nbsp;탭은&amp;nbsp;별개의&amp;nbsp;프로세스&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;멀티쓰레드 vs 멀티 프로세스&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;공유하므로&amp;nbsp;동기화를&amp;nbsp;항상&amp;nbsp;고려&lt;br /&gt;&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;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동기 vs 비동기&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;가능&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DeadLock:교착상태&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;-상호배제&lt;br /&gt;-점유대기&lt;br /&gt;-비선점&lt;br /&gt;-순환대기&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;선점 vs 비선점&lt;br /&gt;&lt;br /&gt;선점&amp;nbsp;방식:&amp;nbsp;특정&amp;nbsp;프로세스가&amp;nbsp;실행&amp;nbsp;중이더라도&amp;nbsp;CPU&amp;nbsp;할당을&amp;nbsp;뺏어&amp;nbsp;다른&amp;nbsp;프로세스에&amp;nbsp;부여할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;방식&lt;br /&gt;-System&amp;nbsp;Call,&amp;nbsp;Time&amp;nbsp;Quantum,&amp;nbsp;Interrupt&lt;br /&gt;&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;CPU를&amp;nbsp;뺏기지&amp;nbsp;않는&amp;nbsp;방식&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동시성 vs 병렬성&lt;br /&gt;&lt;br /&gt;동시성:&amp;nbsp;멀티&amp;nbsp;프로그래밍에서&amp;nbsp;나온&amp;nbsp;개념,&amp;nbsp;주&amp;nbsp;기억장치에&amp;nbsp;여러&amp;nbsp;프로세스를&amp;nbsp;적재해&amp;nbsp;context&amp;nbsp;switching을&amp;nbsp;통해&amp;nbsp;동시에&amp;nbsp;실행되는것&amp;nbsp;처럼&amp;nbsp;&lt;br /&gt;보이게&amp;nbsp;하는것(실제로는&amp;nbsp;동시&amp;nbsp;X,&amp;nbsp;번갈아&amp;nbsp;실행)&lt;br /&gt;&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;방식&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;메모리 종류&lt;br /&gt;CPU에&amp;nbsp;가까운&amp;nbsp;순으로&amp;nbsp;레지스터,&amp;nbsp;캐시,&amp;nbsp;주기억장치,&amp;nbsp;보조기억&amp;nbsp;장치&lt;br /&gt;-&amp;gt;&amp;nbsp;접근속도에&amp;nbsp;따른&amp;nbsp;차이를&amp;nbsp;두기&amp;nbsp;위해&amp;nbsp;종류&amp;nbsp;다양&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OS가 메모리 관리 해야 하는 이유&lt;br /&gt;-각각의&amp;nbsp;프로세스는&amp;nbsp;독립적&amp;nbsp;메모리&amp;nbsp;공간을&amp;nbsp;갖음-&amp;gt;&amp;nbsp;다른&amp;nbsp;프로세스의&amp;nbsp;메모리&amp;nbsp;공간&amp;nbsp;침범&amp;nbsp;불가,&lt;br /&gt;오로지&amp;nbsp;OS만이&amp;nbsp;OS메모리&amp;nbsp;영역과&amp;nbsp;사용자&amp;nbsp;메모리영역의&amp;nbsp;접근에&amp;nbsp;영향받지&amp;nbsp;않기에,&amp;nbsp;OS만&amp;nbsp;관리&amp;nbsp;가능해서&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;페이징 vs 세그멘테이션&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;분리해&lt;br /&gt;메인&amp;nbsp;메모리에&amp;nbsp;불연속적으로&amp;nbsp;저장하는&amp;nbsp;방식&lt;br /&gt;&lt;br /&gt;세그멘테이션:&amp;nbsp;프로세스를&amp;nbsp;가변적인&amp;nbsp;크기의&amp;nbsp;세그먼트로&amp;nbsp;분리,&amp;nbsp;메모리에&amp;nbsp;적재&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단편화: 프로세스들이 차지하는 메모리 사이에 사용하지 못할만큼 작은 공간을 의미&lt;br /&gt;내부&amp;nbsp;단편화:&amp;nbsp;고정길이&amp;nbsp;할당/페이지&lt;br /&gt;&lt;br /&gt;외부&amp;nbsp;단편화:&amp;nbsp;가변길이&amp;nbsp;할당/세그먼테이션&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가상메모리란?&lt;br /&gt;프로레스&amp;nbsp;전체가&amp;nbsp;메모리에&amp;nbsp;올라오지&amp;nbsp;않아도&amp;nbsp;실행&amp;nbsp;가능&lt;br /&gt;-&amp;gt;&amp;nbsp;동시에&amp;nbsp;많은&amp;nbsp;프로그램&amp;nbsp;실행&amp;nbsp;가능,&amp;nbsp;응답시간&amp;nbsp;유지하며&amp;nbsp;CPU&amp;nbsp;이용율,&amp;nbsp;처리율&amp;nbsp;높일&amp;nbsp;수&amp;nbsp;있음&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;요구페이징&lt;br /&gt;프로그램 실행 시작 시에 프로그램 전체를 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;메모리가 고갈되면 일어나는 현상&lt;br /&gt;-프로세스를&amp;nbsp;실행해야&amp;nbsp;하기&amp;nbsp;때문에&amp;nbsp;Swap이&amp;nbsp;활발&lt;br /&gt;-&amp;gt;CPU&amp;nbsp;이용률이&amp;nbsp;하락하고,&amp;nbsp;OS는&amp;nbsp;CPU&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;상태&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;캐시 메모리 사용 이유&lt;br /&gt;:CPU와&amp;nbsp;메모리&amp;nbsp;사이의&amp;nbsp;속도&amp;nbsp;차이를&amp;nbsp;완화하기&amp;nbsp;위해&amp;nbsp;사용&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OSI&amp;nbsp;7&amp;nbsp;Layer의&amp;nbsp;각&amp;nbsp;계층&lt;br /&gt;7계층&amp;nbsp;(Application&amp;nbsp;Layer,&amp;nbsp;응용계층)&amp;nbsp;:&amp;nbsp;최종&amp;nbsp;목적지로&amp;nbsp;응용&amp;nbsp;프로그램과&amp;nbsp;연관해&amp;nbsp;서비스를&amp;nbsp;수행하는&amp;nbsp;계층&amp;nbsp;-HTTP,DNS&lt;br /&gt;6계층&amp;nbsp;(Presentation&amp;nbsp;Layer,&amp;nbsp;표현계층)&amp;nbsp;:&amp;nbsp;데이터&amp;nbsp;압축&amp;nbsp;혹은&amp;nbsp;변환이&amp;nbsp;이뤄지는&amp;nbsp;계층,&amp;nbsp;데이터의&amp;nbsp;형식을&amp;nbsp;정의&amp;nbsp;-JPEG&lt;br /&gt;5계층&amp;nbsp;(Session&amp;nbsp;Layer,&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;-API,&amp;nbsp;Socket&lt;br /&gt;4계층&amp;nbsp;(Transport&amp;nbsp;Layer,&amp;nbsp;전송계층)&amp;nbsp;:&amp;nbsp;종단&amp;nbsp;간&amp;nbsp;사용자들에게&amp;nbsp;신뢰성있는&amp;nbsp;데이터를&amp;nbsp;전달하는&amp;nbsp;계층&amp;nbsp;-TCP,UDP&lt;br /&gt;3계층&amp;nbsp;(Network&amp;nbsp;Layer,&amp;nbsp;네트워크계층)&amp;nbsp;:&amp;nbsp;IP를&amp;nbsp;지정하고&amp;nbsp;라우터로&amp;nbsp;경로를&amp;nbsp;선택해&amp;nbsp;네트워크를&amp;nbsp;통해&amp;nbsp;데이터를&amp;nbsp;전달하는&amp;nbsp;계층&amp;nbsp;-Router&lt;br /&gt;2계층&amp;nbsp;(Datalink&amp;nbsp;Layer,&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;계층&amp;nbsp;-Ethernet&lt;br /&gt;1계층&amp;nbsp;(Physical&amp;nbsp;Layer,&amp;nbsp;물리계층)&amp;nbsp;:&amp;nbsp;데이터를&amp;nbsp;전기&amp;nbsp;신호로&amp;nbsp;변경하는&amp;nbsp;계층&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전송계층과 데이터 링크계층 모두 신뢰성 관련 기능 제공, 차이는?&lt;br /&gt;전송계층:&amp;nbsp;논리적&amp;nbsp;연결&lt;br /&gt;데이터&amp;nbsp;링크&amp;nbsp;계층:&amp;nbsp;물리적&amp;nbsp;연결&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전송계층이 데이터 분실을 확인하는 방법&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;확인&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전송계층의 흐름제어, 오류제어, 혼잡제어&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;조절&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;프로토콜&lt;br /&gt;혼잡제어:&amp;nbsp;네트워크의&amp;nbsp;혼잡을&amp;nbsp;피하기&amp;nbsp;위해&amp;nbsp;송신측에서&amp;nbsp;보내는&amp;nbsp;데이터의&amp;nbsp;전송&amp;nbsp;속도를&amp;nbsp;제어&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DNS?&lt;br /&gt;Domain&amp;nbsp;Name&amp;nbsp;Server의&amp;nbsp;약어로,&amp;nbsp;IP주소를&amp;nbsp;문자로&amp;nbsp;표현한&amp;nbsp;주소로&amp;nbsp;바꾸는&amp;nbsp;시스템&amp;nbsp;혹은&amp;nbsp;서버&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.google.com&quot;&gt;http://www.google.com&lt;/a&gt;&amp;nbsp;도메인을&amp;nbsp;브라우저에&amp;nbsp;입력했을&amp;nbsp;때&amp;nbsp;일어나는&amp;nbsp;일&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;1.&amp;nbsp;주소창에&amp;nbsp;&lt;a href=&quot;http://www.google.com&quot;&gt;http://www.google.com&lt;/a&gt;&amp;nbsp;입력&lt;br /&gt;2.&amp;nbsp;브라우저는&amp;nbsp;캐싱된&amp;nbsp;DNS&amp;nbsp;기록을&amp;nbsp;통해&amp;nbsp;해당&amp;nbsp;도메인&amp;nbsp;주소에&amp;nbsp;대응하는&amp;nbsp;IP주소가&amp;nbsp;있는지&amp;nbsp;확인&lt;br /&gt;3.&amp;nbsp;요청한&amp;nbsp;URL이&amp;nbsp;캐시에&amp;nbsp;없을&amp;nbsp;경우,&amp;nbsp;ISP의&amp;nbsp;DNS&amp;nbsp;서버가&amp;nbsp;&lt;a href=&quot;http://www.google.com을&quot;&gt;http://www.google.com을&lt;/a&gt;&amp;nbsp;호스팅하는&amp;nbsp;서버의&amp;nbsp;IP주소&amp;nbsp;찾기&amp;nbsp;위해&amp;nbsp;DNS&amp;nbsp;Query보내찾음&lt;br /&gt;4.&amp;nbsp;브라우저는&amp;nbsp;&lt;a href=&quot;http://www.google.com&quot;&gt;http://www.google.com&lt;/a&gt;&amp;nbsp;해당&amp;nbsp;IP주소&amp;nbsp;획득,&amp;nbsp;해당서버와&amp;nbsp;TCP&amp;nbsp;연결&amp;nbsp;시도&lt;br /&gt;5.&amp;nbsp;TCP연결&amp;nbsp;완료시&amp;nbsp;브라우저가&amp;nbsp;웹&amp;nbsp;서버에&amp;nbsp;HTTP&amp;nbsp;Request&amp;nbsp;보냄&lt;br /&gt;6.&amp;nbsp;서버는&amp;nbsp;해당&amp;nbsp;Request&amp;nbsp;처리,&amp;nbsp;Response&amp;nbsp;생성&lt;br /&gt;7.&amp;nbsp;브라우저는&amp;nbsp;해당&amp;nbsp;Response&amp;nbsp;읽어&amp;nbsp;사용자에게&amp;nbsp;보여줌&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TCP Connection 시 3-way handshaking 의 설명&lt;br /&gt;TCP는&amp;nbsp;신뢰성있는&amp;nbsp;전송을&amp;nbsp;위해&amp;nbsp;1:1로&amp;nbsp;서로&amp;nbsp;잘&amp;nbsp;연결되었음을&amp;nbsp;확인하는&amp;nbsp;과정을&amp;nbsp;거침.&amp;nbsp;이&amp;nbsp;과정이&amp;nbsp;바로&amp;nbsp;3-way&amp;nbsp;handshaking&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TCP vs UDP&lt;br /&gt;TCP:&amp;nbsp;연결지향,&amp;nbsp;흐름제어,혼잡제어,오류제어를&amp;nbsp;통한&amp;nbsp;신뢰성&amp;nbsp;보장,&amp;nbsp;속도&amp;nbsp;느림&lt;br /&gt;UDP:비연결&amp;nbsp;지향,&amp;nbsp;Checksum&amp;nbsp;필드로&amp;nbsp;최소한의&amp;nbsp;오류만&amp;nbsp;보장,&amp;nbsp;속도&amp;nbsp;빠름&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HTTP의 특징&lt;br /&gt;-&amp;nbsp;비연결지향&amp;nbsp;(connectionless)&amp;nbsp;:&amp;nbsp;client가&amp;nbsp;server에&amp;nbsp;request를&amp;nbsp;보내고,&amp;nbsp;서버가&amp;nbsp;해당&amp;nbsp;요청에&amp;nbsp;맞는&amp;nbsp;response를&amp;nbsp;보내면&amp;nbsp;바로&amp;nbsp;연결을&amp;nbsp;끊음&lt;br /&gt;-&amp;nbsp;상태&amp;nbsp;비저장&amp;nbsp;(stateless)&amp;nbsp;:&amp;nbsp;연결을&amp;nbsp;끊는&amp;nbsp;순간&amp;nbsp;client와&amp;nbsp;server의&amp;nbsp;통신은&amp;nbsp;끝나며,&amp;nbsp;상태정보를&amp;nbsp;유지하지&amp;nbsp;않는&amp;nbsp;특징&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HTTPS는 HTTP의 보단상 문제 해결 위해 나온 프로토콜&lt;br /&gt;HTTP는&amp;nbsp;TEXT로&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;SSL,&amp;nbsp;TLS를&amp;nbsp;이용해&amp;nbsp;암호화를&amp;nbsp;거쳐&amp;nbsp;주고&amp;nbsp;받음&amp;nbsp;(응용-전송&amp;nbsp;계층&amp;nbsp;사이에&amp;nbsp;위치)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HTTP Method&lt;br /&gt;GET 조회,&amp;nbsp;리소스&amp;nbsp;요청&lt;br /&gt;POST 요청된&amp;nbsp;데이터를&amp;nbsp;처리하고&amp;nbsp;자원을&amp;nbsp;생성함&lt;br /&gt;PUT 요청된&amp;nbsp;자원이&amp;nbsp;없으면&amp;nbsp;생성,&amp;nbsp;있으면&amp;nbsp;새&amp;nbsp;것으로&amp;nbsp;전체&amp;nbsp;갱신&lt;br /&gt;PATCH 자원의&amp;nbsp;일부분만&amp;nbsp;수정&lt;br /&gt;DELETE 요청된&amp;nbsp;자원을&amp;nbsp;삭제&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;멱등성 메소드: 특정 메소드를 여러번 요청했는데, 매번 요청 결과가 같은 경우&lt;br /&gt;Get,&amp;nbsp;Put,&amp;nbsp;Delete&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;REST API와 RESTful 하다는 것&lt;br /&gt;&lt;br /&gt;REST는&amp;nbsp;HTTP&amp;nbsp;URI를&amp;nbsp;통해&amp;nbsp;자원을&amp;nbsp;명시하고&amp;nbsp;HTTP&amp;nbsp;Method를&amp;nbsp;통해&amp;nbsp;자원을&amp;nbsp;처리하도록&amp;nbsp;설계된&amp;nbsp;아키텍처&lt;br /&gt;이러한 REST를 기반으로 만든 API가 REST API&lt;br /&gt;RESTful 하다는 것은, REST 원리를 잘 따르는 시스템&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠키 vs 세션&lt;br /&gt;&lt;br /&gt;쿠키:&amp;nbsp;라이프&amp;nbsp;사이클-만료기간&amp;nbsp;부여,서버&amp;nbsp;요청이&amp;nbsp;없어-&amp;gt;&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;gt;느림,&amp;nbsp;서버에서&amp;nbsp;관리&amp;nbsp;비교적&amp;nbsp;안전&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;JWT Token&lt;br /&gt;JWT는&amp;nbsp;JSON&amp;nbsp;포맷을&amp;nbsp;이용하는&amp;nbsp;Claim&amp;nbsp;기반의&amp;nbsp;웹&amp;nbsp;토큰이며,&amp;nbsp;토큰&amp;nbsp;자체를&amp;nbsp;정보로&amp;nbsp;사용하는&amp;nbsp;Self-Contained&amp;nbsp;방식으로&amp;nbsp;정보를&amp;nbsp;안전하게&amp;nbsp;전달&lt;br /&gt;헤더(Header).내용(Payload).서명(Signature)로&amp;nbsp;구성&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;URI vs URL&lt;br /&gt;URI:&amp;nbsp;특정&amp;nbsp;리소스를&amp;nbsp;식별하는&amp;nbsp;통합&amp;nbsp;자원&amp;nbsp;식별자(Uniform&amp;nbsp;Resource&amp;nbsp;Identifier)를&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;URL:&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;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DBMS&amp;nbsp;란?&lt;br /&gt;database&amp;nbsp;management&amp;nbsp;system:&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;소프트웨어&lt;br /&gt;-&amp;gt;DB를&amp;nbsp;사용하지&amp;nbsp;않고,&amp;nbsp;OS에&amp;nbsp;종속적인&amp;nbsp;파일&amp;nbsp;시스템을&amp;nbsp;활용하면&amp;nbsp;프로그램의&amp;nbsp;확장성을&amp;nbsp;해치기에&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스키마&lt;br /&gt;:&amp;nbsp;구조와&amp;nbsp;제약&amp;nbsp;조건에&amp;nbsp;대해&amp;nbsp;명세를&amp;nbsp;기술한&amp;nbsp;데이터&amp;nbsp;집합&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;외부 스키마 : 사용자의 입장에서 데이터베이스의 모습으로 조직의 일부분을 정의한 것&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;정의한&amp;nbsp;것&lt;br /&gt;내부&amp;nbsp;스키마&amp;nbsp;:&amp;nbsp;전체&amp;nbsp;데이터베이스의&amp;nbsp;물리적&amp;nbsp;저장&amp;nbsp;형태를&amp;nbsp;기술하는&amp;nbsp;것&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;뷰 란?&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;않는&amp;nbsp;가상테이블&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;키 란?&lt;br /&gt;검색,&amp;nbsp;정렬&amp;nbsp;시&amp;nbsp;튜플&amp;nbsp;구분하는&amp;nbsp;기준이&amp;nbsp;되는&amp;nbsp;속성&lt;br /&gt;&lt;br /&gt;슈퍼키:&amp;nbsp;유일성을&amp;nbsp;만족&lt;br /&gt;&lt;br /&gt;후보키:&amp;nbsp;기본키가&amp;nbsp;될&amp;nbsp;수있는&amp;nbsp;후보가&amp;nbsp;되는&amp;nbsp;키,&amp;nbsp;유일성+최소성&amp;nbsp;만족&lt;br /&gt;&lt;br /&gt;기본키:&amp;nbsp;후보&amp;nbsp;키&amp;nbsp;중에서&amp;nbsp;선택된&amp;nbsp;하나의&amp;nbsp;고유한&amp;nbsp;식별자,&amp;nbsp;중복되는&amp;nbsp;값이나&amp;nbsp;NULL값&amp;nbsp;X&lt;br /&gt;&lt;br /&gt;대체키:&amp;nbsp;후보&amp;nbsp;키&amp;nbsp;중&amp;nbsp;기본키&amp;nbsp;제외한&amp;nbsp;나머지&amp;nbsp;&lt;br /&gt;&lt;br /&gt;외래키:&amp;nbsp;다른&amp;nbsp;테이블의&amp;nbsp;레코드를&amp;nbsp;유일하게&amp;nbsp;식별&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;키&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트랜잭션&lt;br /&gt;데이터베이스의&amp;nbsp;상태를&amp;nbsp;변화시키는&amp;nbsp;논리적인&amp;nbsp;작업&amp;nbsp;단위&lt;br /&gt;원자성:&amp;nbsp;트랜잭션은&amp;nbsp;모두&amp;nbsp;정상&amp;nbsp;실행&amp;nbsp;or&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;&lt;br /&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;반영&lt;br /&gt;&lt;br /&gt;-활동,&amp;nbsp;장애,&amp;nbsp;철회,&amp;nbsp;부분완료,&amp;nbsp;완료&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Commit: 트랜잭션이 성공해 트랜잭션 결과를 영구적으로 반영하는 연산&lt;br /&gt;Rollback:&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;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동시성 제어란?&lt;br /&gt;DBMS는&amp;nbsp;다수의&amp;nbsp;사용자를&amp;nbsp;가정,&amp;nbsp;다중&amp;nbsp;트랜잭션의&amp;nbsp;상호&amp;nbsp;간섭&amp;nbsp;작용&amp;nbsp;중,&amp;nbsp;DB를&amp;nbsp;보호해야함,&amp;nbsp;일관성을&amp;nbsp;파괴하지&amp;nbsp;않도록&amp;nbsp;&lt;br /&gt;상호작용을&amp;nbsp;제어하는&amp;nbsp;것을&amp;nbsp;의미&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터의 무결성:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;데이터가 정확하고 일관되게 유지되는 상태&lt;/span&gt;&lt;br /&gt;-&amp;nbsp;개체&amp;nbsp;무결성:&amp;nbsp;기본키는&amp;nbsp;null.&amp;nbsp;중복&amp;nbsp;값&amp;nbsp;불가능&lt;br /&gt;-&amp;nbsp;참조&amp;nbsp;무결성:&amp;nbsp;외래키는&amp;nbsp;null이거나&amp;nbsp;참조&amp;nbsp;테이블의&amp;nbsp;기본&amp;nbsp;키&amp;nbsp;값과&amp;nbsp;같아야&amp;nbsp;함&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Join&lt;br /&gt;두&amp;nbsp;개&amp;nbsp;이상의&amp;nbsp;테이블이나&amp;nbsp;데이터베이스를&amp;nbsp;연결해&amp;nbsp;데이터를&amp;nbsp;검색하는&amp;nbsp;방법&lt;br /&gt;inner&amp;nbsp;join은&amp;nbsp;서로&amp;nbsp;연관된&amp;nbsp;내용만&amp;nbsp;검색하는&amp;nbsp;조인&amp;nbsp;방법&lt;br /&gt;outer&amp;nbsp;join은&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;출력하는&amp;nbsp;방법&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Group By의 역할&lt;br /&gt;&amp;nbsp;GROUP&amp;nbsp;BY&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;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;DELETE, TRUNCATE, DROP의 차이&lt;br /&gt;DELETE는&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;되돌릴&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;&lt;br /&gt;TRUNCATE는&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;없고,&amp;nbsp;&amp;nbsp;삭제&amp;nbsp;후&amp;nbsp;되돌릴&amp;nbsp;수&amp;nbsp;없다.&lt;br /&gt;&lt;br /&gt;DROP은&amp;nbsp;테이블&amp;nbsp;자체를&amp;nbsp;완전히&amp;nbsp;삭제하는&amp;nbsp;방식,&amp;nbsp;삭제&amp;nbsp;후&amp;nbsp;되돌릴&amp;nbsp;수&amp;nbsp;없다&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트리거란?&lt;br /&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;DB에서&amp;nbsp;자동적으로&amp;nbsp;호출&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DB 인덱스&lt;br /&gt;Index는&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;속도가&amp;nbsp;느려짐&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정규화란?&lt;br /&gt;이상현상이&amp;nbsp;존재하는&amp;nbsp;테이블을&amp;nbsp;분해해&amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;테이블로&amp;nbsp;분리하는&amp;nbsp;과정&lt;br /&gt;&lt;br /&gt;-삽입&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;br /&gt;-삭제&amp;nbsp;이상:&amp;nbsp;삭제로&amp;nbsp;인해&amp;nbsp;필요한&amp;nbsp;데이터까지&amp;nbsp;삭제되는&amp;nbsp;현상&lt;br /&gt;&lt;br /&gt;정규화&lt;br /&gt;1&amp;nbsp;정규화&amp;nbsp;:&amp;nbsp;원자값을&amp;nbsp;갖도록&amp;nbsp;분해&lt;br /&gt;2 정규화 : 부분 함수 종속성 제거&lt;br /&gt;3&amp;nbsp;정규화&amp;nbsp;:&amp;nbsp;이행종속&amp;nbsp;제거&lt;/p&gt;
&lt;hr data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;역정규화&lt;br /&gt;-읽기&amp;nbsp;작업이&amp;nbsp;많이&amp;nbsp;필요한&amp;nbsp;DB의&amp;nbsp;전반적인&amp;nbsp;성능을&amp;nbsp;향상시키기&amp;nbsp;위해&amp;nbsp;역정규화&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Connection Pool이란?&lt;br /&gt;커넥션&amp;nbsp;풀은,&amp;nbsp;미리&amp;nbsp;일정&amp;nbsp;수의&amp;nbsp;Connection을&amp;nbsp;생성해&amp;nbsp;Pool에&amp;nbsp;보관해&amp;nbsp;두는&amp;nbsp;것&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;RDB vs NoSQL&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;RDB:&amp;nbsp;관계형&amp;nbsp;데이터&amp;nbsp;베이스&lt;br /&gt;데이터&amp;nbsp;구조&amp;nbsp;보장,&amp;nbsp;중복&amp;nbsp;피할&amp;nbsp;수&amp;nbsp;있음&lt;br /&gt;&lt;br /&gt;NoSQL&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;저장&lt;br /&gt;중복을&amp;nbsp;계속&amp;nbsp;업데이트&amp;nbsp;해줘야함&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ORM&lt;br /&gt;ORM은&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;의미&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Array와&amp;nbsp;&amp;nbsp;LinkedList가&amp;nbsp;각각&amp;nbsp;무엇인지,&amp;nbsp;어떻게&amp;nbsp;다른지&lt;br /&gt;&lt;br /&gt;Array&amp;nbsp;순서가&amp;nbsp;있는&amp;nbsp;데이터를&amp;nbsp;저장하기&amp;nbsp;위한&amp;nbsp;선형&amp;nbsp;자료구조&lt;br /&gt;&lt;br /&gt;LinkedList는&amp;nbsp;각&amp;nbsp;데이터&amp;nbsp;저장한&amp;nbsp;노드를&amp;nbsp;서로&amp;nbsp;연결하여&amp;nbsp;만든&amp;nbsp;선형&amp;nbsp;자료구조,&amp;nbsp;가변길이&amp;nbsp;크기&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스택 vs 큐&lt;br /&gt;&lt;br /&gt;스택:&amp;nbsp;선입후출&amp;nbsp;-&amp;nbsp;주로&amp;nbsp;배열을&amp;nbsp;통해&amp;nbsp;구현,&amp;nbsp;브라우저의&amp;nbsp;'뒤로가기'&amp;nbsp;기능&lt;br /&gt;&lt;br /&gt;큐:&amp;nbsp;선입선출-&amp;nbsp;주로&amp;nbsp;연결리스트&amp;nbsp;통해&amp;nbsp;구현,&amp;nbsp;CPU&amp;nbsp;스케줄링의&amp;nbsp;Ready&amp;nbsp;Queue&lt;br /&gt;&lt;br /&gt;Priority&amp;nbsp;Queue?&lt;br /&gt;선입선출의&amp;nbsp;큐와&amp;nbsp;다르게,&amp;nbsp;우선순위가&amp;nbsp;높은&amp;nbsp;원소가&amp;nbsp;우선적으로&amp;nbsp;빠져나오게&amp;nbsp;되는&amp;nbsp;자료구조&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Heap&lt;br /&gt;힙(Heap)은&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;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;해시 테이블&lt;br /&gt;해시&amp;nbsp;테이블은&amp;nbsp;Key-Value&amp;nbsp;쌍으로&amp;nbsp;값을&amp;nbsp;저장하는&amp;nbsp;자료구조&lt;br /&gt;해시 충돌:서로 다른 Key에 대해 같은 해시값을 갖는 경우를 해시 충돌&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>의문점 공부하기/ 공부하며</category>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/257</guid>
      <comments>https://tyhan02.tistory.com/257#entry257comment</comments>
      <pubDate>Tue, 12 Dec 2023 01:57:03 +0900</pubDate>
    </item>
    <item>
      <title> 스프링</title>
      <link>https://tyhan02.tistory.com/256</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;스프링은 자바 기반의 엔터프라이즈급 애플리케이션을 개발하기 위한 종합적인 프레임워크입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;스프링은 모듈화가 잘 되어 있어 필요한 모듈만 선택하여 사용할 수 있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;주요 모듈에는 &lt;/span&gt;&lt;span&gt;Spring MVC(&lt;/span&gt;&lt;span&gt;웹 애플리케이션 개발&lt;/span&gt;&lt;span&gt;), Spring ORM(&lt;/span&gt;&lt;span&gt;객체 관계 매핑&lt;/span&gt;&lt;span&gt;), Spring JDBC(&lt;/span&gt;&lt;span&gt;데이터베이스 액세스&lt;/span&gt;&lt;span&gt;), Spring AOP(&lt;/span&gt;&lt;span&gt;관점 지향 프로그래밍&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;등이 있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;설정이 &lt;/span&gt;&lt;span&gt;XML &lt;/span&gt;&lt;span&gt;기반이며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;개발자가 많은 구성을 수동으로 처리해야 합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Spring MVC (&lt;/span&gt;&lt;span&gt;웹 애플리케이션 개발&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;목적&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;웹 애플리케이션을 개발하기 위한 모듈입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특징&lt;/span&gt;&lt;span&gt;: MVC &lt;/span&gt;&lt;span&gt;아키텍처를 기반으로 한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;모델&lt;/span&gt;&lt;span&gt;(Model), &lt;/span&gt;&lt;span&gt;뷰&lt;/span&gt;&lt;span&gt;(View), &lt;/span&gt;&lt;span&gt;컨트롤러&lt;/span&gt;&lt;span&gt;(Controller)&lt;/span&gt;&lt;span&gt;의 분리를 통해 애플리케이션을 구조화한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;모델은 데이터를 나타내고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;뷰는 사용자 인터페이스를 나타내며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;컨트롤러는 요청을 처리하고 응답을 관리한다&lt;/span&gt;&lt;span&gt;. Spring MVC&lt;/span&gt;&lt;span&gt;는 유연한 &lt;/span&gt;&lt;span&gt;URL &lt;/span&gt;&lt;span&gt;매핑&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;데이터 바인딩&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;검증&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;템플릿 엔진과의 통합 등 다양한 기능을 제공한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Spring ORM (&lt;/span&gt;&lt;span&gt;객체 관계 매핑&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;목적&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;객체와 데이터베이스 간의 매핑을 간단하게 처리하기 위한 모듈입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특징&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;주로 &lt;/span&gt;&lt;span&gt;Hibernate, JPA(Java Persistence API), MyBatis &lt;/span&gt;&lt;span&gt;등과 같은 &lt;/span&gt;&lt;span&gt;ORM &lt;/span&gt;&lt;span&gt;프레임워크와 통합되어 사용된다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;객체 지향 언어인 자바의 객체와 관계형 데이터베이스 간의 불일치를 해소하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;데이터베이스와의 상호작용을 쉽게 처리할 수 있도록 지원한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Spring JDBC (&lt;/span&gt;&lt;span&gt;데이터베이스 액세스&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;목적&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;데이터베이스와의 간단한 &lt;/span&gt;&lt;span&gt;JDBC(Java Database Connectivity) &lt;/span&gt;&lt;span&gt;액세스를 지원하는 모듈입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특징&lt;/span&gt;&lt;span&gt;: JDBC &lt;/span&gt;&lt;span&gt;코드를 보다 간결하게 작성할 수 있도록 도와주며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;예외처리 및 리소스 관리 등을 자동으로 처리한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;데이터베이스와의 연결&lt;/span&gt;&lt;span&gt;, SQL &lt;/span&gt;&lt;span&gt;실행&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;결과 처리 등을 추상화하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;트랜잭션 관리와 예외처리를 지원한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Spring AOP (&lt;/span&gt;&lt;span&gt;관점 지향 프로그래밍&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;목적&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;관점 지향 프로그래밍을 지원하는 모듈입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특징&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;횡단 관심 사항&lt;/span&gt;&lt;span&gt;(Cross-cutting Concerns)&lt;/span&gt;&lt;span&gt;을 분리하여 모듈화하고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;코드의 재사용성과 유지보수성을 향상시키는 데 목적이 있다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;주요 개념으로는 어드바이스&lt;/span&gt;&lt;span&gt;(Advice), &lt;/span&gt;&lt;span&gt;포인트컷&lt;/span&gt;&lt;span&gt;(Pointcut), &lt;/span&gt;&lt;span&gt;애스펙트&lt;/span&gt;&lt;span&gt;(Aspect) &lt;/span&gt;&lt;span&gt;등이 있으며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;특정 메서드 실행 전이나 후에 코드를 삽입하거나&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;예외를 처리하는 등의 작업을 수행할 수 있다&lt;/span&gt;&lt;span&gt;. AOP&lt;/span&gt;&lt;span&gt;는 주로 로깅&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;트랜잭션 관리&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;보안 등에서 활용된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>의문점 공부하기/ 공부하며</category>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/256</guid>
      <comments>https://tyhan02.tistory.com/256#entry256comment</comments>
      <pubDate>Fri, 8 Dec 2023 15:31:31 +0900</pubDate>
    </item>
    <item>
      <title> 리액트 정리</title>
      <link>https://tyhan02.tistory.com/255</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;리액트는 컴포넌트 기반 아키텍처를 기반으로&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;각 컴포넌트는 스테이트를 가질 수 있고&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;재사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;가상 &lt;/span&gt;&lt;span&gt;DOM &lt;/span&gt;&lt;span&gt;사용 성능 최적화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;리덕스는 특히 상태 관리가 복잡한 대규모 애플리케이션 또는 여러 컴포넌트 간에 상태를 공유해야 하는 경우에 유용합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;전역 상태를 하나의 객체로 관리 &lt;/span&gt;&lt;span&gt;-&amp;gt; &lt;/span&gt;&lt;span&gt;쉽게 관리 가능 예측 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;컴포넌트 간 데이터 공유&lt;/span&gt;&lt;span&gt;-&amp;gt; &lt;/span&gt;&lt;span&gt;리액트는 부모&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;자식 관계가 아닌 컴포넌트 간 상태 공유가 어려운데 리덕스 사용시 동일한 상태 트리 공유로 데이터 쉽게 전달 공유 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;상태 로직 추상화하여 관리 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;유지보수성 향상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;브라우저 라우터&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;클라이언트 측 라우팅 처리하는 도구&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;다른 경로로 이동시 페이지 새로고침이 필요없다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>의문점 공부하기/ 공부하며</category>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/255</guid>
      <comments>https://tyhan02.tistory.com/255#entry255comment</comments>
      <pubDate>Fri, 8 Dec 2023 15:30:57 +0900</pubDate>
    </item>
    <item>
      <title>면접대비 java</title>
      <link>https://tyhan02.tistory.com/254</link>
      <description>&lt;h2 id=&quot;자바-Java&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;자바(Java)&lt;/h2&gt;
&lt;h3 id=&quot;OOP란&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;OOP란&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있습니다. 즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말합니다. 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것입니다.&lt;br /&gt;&lt;br /&gt;대표적인 특징으로 추상화, 상속, 캡슐화, 다형성이 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;객체-지향적-설계-원칙의-종류&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;객체 지향적 설계 원칙의 종류&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SRP(Single Responsibility Principle) : 단일 책임 원칙&lt;br /&gt;클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 합니다.&lt;/li&gt;
&lt;li&gt;OCP(Open-Closed Principle) : 개방-폐쇄 원칙&lt;br /&gt;확장에는 열려 있어야 하고 변경에는 닫혀 있어야 합니다.&lt;/li&gt;
&lt;li&gt;LSP(Liskov Substitution Principle) : 리스코프 치환 원칙&lt;br /&gt;상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 합니다.&lt;/li&gt;
&lt;li&gt;ISP(Interface Segregation Principle) : 인터페이스 분리 원칙&lt;br /&gt;인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 합니다.&lt;/li&gt;
&lt;li&gt;DIP(Dependency Inversion Principle) : 의존 역전 원칙&lt;br /&gt;고수준 모듈은 저수준 모듈의 구현에 의존해서는 안됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;JVM의-구조&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;JVM의 구조&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;프로그램이 실행되면 OS로부터 프로그램이 필요로 하는 메모리를 먼저 할당 받습니다.&lt;/li&gt;
&lt;li&gt;그리고 자바 컴파일러를 통해 개발자가 작성한 코드(.java)를 바이트 코드(.class)로 변환합니다.&lt;/li&gt;
&lt;li&gt;다음 Class Loader에서 바이트 코드를 JVM에 로딩 시킵니다.&lt;/li&gt;
&lt;li&gt;로딩 된 바이트 코드를 execution engine을 통해 기계어로 해석됩니다.&lt;/li&gt;
&lt;li&gt;해석된 바이트 코드들은 runtime data areas에 배치되어 실질적인 수행이 이루어집니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;직렬화-serialization-란&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;직렬화(serialization)란?&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바에서 입출력을 할 때에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;스트림이라는 통로를 통해 데이터가 이동합니다. 하지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;바이트형이 아니라서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;스트림을 통해 파일에 저장하거나 네트워크로 전송할 수 없습니다.&lt;br /&gt;&lt;br /&gt;따라서 객체를 스트림을 통해 입출력하려면&lt;span&gt;&amp;nbsp;&lt;/span&gt;바이트 배열로 변환하는 것이 필요한데, 이를&lt;span&gt;&amp;nbsp;&lt;/span&gt;'직렬화'&lt;span&gt;&amp;nbsp;&lt;/span&gt;라고 합니다. 반대로 스트림을 통해 받은 직렬화된 객체를 원래 모양으로 만드는 과정을&lt;span&gt;&amp;nbsp;&lt;/span&gt;역직렬화라고 합니다.&lt;/p&gt;
&lt;h3 id=&quot;박싱과-언박싱이란&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;박싱과 언박싱이란?&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 자료형(Primitive data type)을 Wrapper class&lt;/b&gt;로 바꾸어 주는 것을&lt;span&gt;&amp;nbsp;&lt;/span&gt;박싱,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Wrapper class를 기본 자료형(Primitive data type)&lt;/b&gt;으로 바꿔주는 것을&lt;span&gt;&amp;nbsp;&lt;/span&gt;언박싱&lt;span&gt;&amp;nbsp;&lt;/span&gt;이라고 합니다.&lt;/p&gt;
&lt;h3 id=&quot;HashMap-vs-HashTable-vs-ConcurrentHashMap&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;HashMap vs HashTable vs ConcurrentHashMap&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HashMap
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 메서드에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;synchronized 키워드&lt;/b&gt;가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;없습니다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;key, value에 null을 입력할 수&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;있습니다&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;HashTable
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 메서드에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;synchronized 키워드&lt;/b&gt;가 선언 되어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;있습니다&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;key, value에 null을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;허용하지 않습니다&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ConcurrentHashMap
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;HashMap&lt;/b&gt;을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;thread-safe&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하도록 만든 클래스&lt;/li&gt;
&lt;li&gt;key, value에 null을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;허용하지 않습니다&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;접근-제어자&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;접근 제어자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;public : 어디서든 접근이 가능합니다.&lt;/li&gt;
&lt;li&gt;protected : 동일 패키지 혹은 상속받은 외부 패키지 클래스에서 사용 가능합니다.&lt;/li&gt;
&lt;li&gt;(default) : 동일 패키지 내에서만 접근 가능합니다.&lt;/li&gt;
&lt;li&gt;private : 해당 클래스 내에서만 접근 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;interface-vs-abstract&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;interface vs abstract&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;interface(인터페이스)
&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;/li&gt;
&lt;li&gt;abstract(추상 클래스)
&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;추상 메서드 1개 이상, 일반 변수, 일반 메서드 선언 가능&lt;/li&gt;
&lt;li&gt;생성자, 일반 변수 가질 수 있음&lt;/li&gt;
&lt;li&gt;메서드의 부분 구현이 가능(부분 구현된 메서드를 상속받아 확장시키기 위함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;String-vs-StringBuffer-vs-StringBuilder&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;String vs StringBuffer vs StringBuilder&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;String
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;immutable(불변)&lt;/li&gt;
&lt;li&gt;객체를 한 번 할당할시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;메모리 공간에 변동이 없습니다&lt;/b&gt;.(할당시 Heap String Pool영역에 생성되어 그 값을 계속 사용합니다.)&lt;/li&gt;
&lt;li&gt;동기화를 신경쓰지 않아도 됩니다.&lt;/li&gt;
&lt;li&gt;엄청나게 많은 문자열을 선언 및 연산할 시 성능저하를 고려해야합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;StringBuffer
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mutable(가변)&lt;/li&gt;
&lt;li&gt;각 메서드별로 Synchronized Keyword가 존재합니다.&lt;/li&gt;
&lt;li&gt;멀티스레드 환경에서도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;동기화를 지원&lt;/b&gt;합니다.&lt;b&gt;(thread-safe)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;StringBuilder
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mutable(가변)&lt;/li&gt;
&lt;li&gt;동기화를 지원하지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;않습니다&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;try-with-resource란&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;try-with-resource란?&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;try-with-resources는&lt;span&gt;&amp;nbsp;&lt;/span&gt;자동으로 자원을 해제해주는 기능입니다. try에서 선언된 객체가&lt;span&gt;&amp;nbsp;&lt;/span&gt;AutoCloseable을 구현하였다면 Java는 try구문이 종료될 때 객체의&lt;span&gt;&amp;nbsp;&lt;/span&gt;close()&lt;span&gt;&amp;nbsp;&lt;/span&gt;메소드를 호출해 줍니다.&lt;/p&gt;
&lt;h3 id=&quot;Synchronized-동기화-란&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Synchronized(동기화)란?&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동기화는 여러 개의 쓰레드가 하나의 자원에 접근하려 할 때 주어진 순간에는 단&lt;span&gt;&amp;nbsp;&lt;/span&gt;하나의 쓰레드만이 접근 가능하도록 하는 것입니다.&lt;br /&gt;&lt;br /&gt;둘 이상의 쓰레드가 공동의 자원(파일이나 메모리 블록)을 공유하는 경우, 순서를 잘 맞추어 다른 쓰레드가 자원을 사용하고 있는 동안 한 쓰레드가 절대 자원을 변경할 수 없도록 해야합니다. 만얃 한 쓰레드가 파일에서 레코드를 수정하는데, 다른 쓰레드가 동시에 같은 레코드를 수정하면 심각한 문제가 발생할 수 있기 때문입니다.&lt;br /&gt;&lt;br /&gt;이런 상황을 처리할 수 있는 한 방법은 관련된 쓰레드에 대한 동기화(synchronization)를 하는 것입니다.&lt;/p&gt;
&lt;h3 id=&quot;Synchronized-동기화-를-하기-위한-방법&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Synchronized(동기화)를 하기 위한 방법&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;synchronized 함수(메서드)를 만들어 사용합니다.&lt;/li&gt;
&lt;li&gt;synchronized 블록(block) 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;자바의-메모리-영역&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;자바의 메모리 영역&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메서드 영역
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;static 변수, 전역 변수, 코드에서 사용되는 Class 정보 등이 할당됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;스택(Stack)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지역 변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;힙(Heap)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;new 연산자를 통한 동작할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;컬렉션-프레임워크란&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;컬렉션 프레임워크란?&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컬렉션 프레임워크(collection framework)란&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다수의 데이터&lt;/b&gt;를 쉽고 효과적으로 처리할 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;표준화된 방법을&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;제공하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;클래스의 집합을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컬렉션 프레임워크에서는 데이터를 저장하는 자료 구조에 따라 다음과 같은 핵심이 되는 주요 인터페이스를 정의하고 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;List 인터페이스&lt;/li&gt;
&lt;li&gt;Set 인터페이스&lt;/li&gt;
&lt;li&gt;Map 인터페이스&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;제네릭이란&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;제네릭이란?&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;제네릭은 자바에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;안정성을 맡고 있다고 할 수 있습니다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안전성을 높이고 형변환의 번거로움을 덜어주어 자연스럽게 코드도 더 간결해집니다.&lt;/p&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Vector-vs-ArrayList&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Vector vs ArrayList&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동적인 배열을 다루는 컬렉션 프레임워크로서 둘의 차이점을 알아보겠습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vector
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동기화된 상태입니다.(Thread safe)&lt;/li&gt;
&lt;li&gt;상대적으로 속도가 느립니다.(동기화 되어있기 떄문)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ArrayList
&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;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ArrayList와-LinkedList의-차이&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;ArrayList와 LinkedList의 차이&lt;/h3&gt;
&lt;p style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;LinkedList와 ArrayList는 모두 Java에서 제공하는 List 인터페이스를 구현한 Collection 구현체입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ArrayList
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부적으로 데이터를 배열로 관리하고 데이터 추가/삭제 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;임시 배열&lt;/b&gt;을 생성해 데이터를 복사합니다.&lt;/li&gt;
&lt;li&gt;데이터별 인덱스가 있어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검색에는 유리&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;임시 배열을 사용하기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;데이터 추가/삭제의 경우에는 불리&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LinkedList
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;노드 단위&lt;/b&gt;로 데이터를 관리합니다. 자신의 앞 뒤 노드만 인지하는 상태입니다.&lt;/li&gt;
&lt;li&gt;인덱스가 따로 없기 때문에 검색 시 전 노드를 순회해야하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검색시 불리&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;데이터 추가/삭제 시 불필요한 데이터 복사가 없어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;유리&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;오버로딩-Overloading-과-오버라이딩-Overriding-의-차이&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;오버로딩(Overloading)과 오버라이딩(Overriding)의 차이&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오버로딩(Overloading) :&lt;br /&gt;상위 클래스의 메소드와 이름, return 값은 동일하지만, 매개변수만 다른 메소드를 만드는 것을 의미합니다. 다양한 상황에서 메소드가 호출될 수 있도록 한다.&lt;/li&gt;
&lt;li&gt;오버라이딩(Overriding) :&lt;br /&gt;상위 클래스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 재정의하는 것을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;final-finally-finalize-차이&quot; style=&quot;color: #34495e; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;final / finally / finalize() 차이&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #34495e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;final
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;final class : 다른 클래스에서 상속하지 못합니다.&lt;/li&gt;
&lt;li&gt;final method : 다른 메소드에서 오버라이딩하지 못합니다.&lt;/li&gt;
&lt;li&gt;final variable : 변하지 않는 상수값이 되어 새로 할당할 수 없는 변수가 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;finally :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;try-catch&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;try-catch-resource&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;구문을 사용할 때, 정상적으로 작업을 한 경우와 에러가 발생했을 경우를 포함하여 마무리 해줘야하는 작업이 존재하는 경우에 해당하는 코드를 작성해주는 코드 블록입니다.&lt;/li&gt;
&lt;li&gt;finalize() :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;GC&lt;/b&gt;에 의해 호출되는 함수로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;절대 호출해서는 안 되는 함수&lt;/b&gt;입니다. 이유는 GC가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;발생하는 시점이 불분명&lt;/b&gt;하기 때문에 해당 메소드가 실행된다는 보장이 없습니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>의문점 공부하기/ 공부하며</category>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/254</guid>
      <comments>https://tyhan02.tistory.com/254#entry254comment</comments>
      <pubDate>Wed, 6 Dec 2023 02:24:20 +0900</pubDate>
    </item>
    <item>
      <title>  HTTP VS HTTPS</title>
      <link>https://tyhan02.tistory.com/253</link>
      <description>&lt;h3 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;HTTP 의 문제점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP 는 평문 통신이기 때문에 도청이 가능하다.&lt;/li&gt;
&lt;li&gt;통신 상대를 확인하지 않기 때문에 위장이 가능하다.&lt;/li&gt;
&lt;li&gt;완전성을 증명할 수 없기 때문에 변조가 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 세 가지는 다른 암호화하지 않은 프로토콜에도 공통되는 문제점들이다.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-tcpip-는-도청-가능한-네트워크이다&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#tcpip-%EB%8A%94-%EB%8F%84%EC%B2%AD-%EA%B0%80%EB%8A%A5%ED%95%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%9D%B4%EB%8B%A4&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;TCP/IP 는 도청 가능한 네트워크이다.&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-보완-방법&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#%EB%B3%B4%EC%99%84-%EB%B0%A9%EB%B2%95&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;보완 방법&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;통신 자체를 암호화&lt;span&gt;&amp;nbsp;&lt;/span&gt;SSL(Secure Socket Layer)&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;TLS(Transport Layer Security)라는 다른 프로토콜을 조합함으로써 HTTP 의 통신 내용을 암호화할 수 있다. SSL 을 조합한 HTTP 를&lt;span&gt;&amp;nbsp;&lt;/span&gt;HTTPS(HTTP Secure)&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;HTTP over SSL이라고 부른다.&lt;/li&gt;
&lt;li&gt;콘텐츠를 암호화 말 그대로 HTTP 를 사용해서 운반하는 내용인, HTTP 메시지에 포함되는 콘텐츠만 암호화하는 것이다. 암호화해서 전송하면 받은 측에서는 그 암호를 해독하여 출력하는 처리가 필요하다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-통신-상대를-확인하지-않기-때문에-위장이-가능하다&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#%ED%86%B5%EC%8B%A0-%EC%83%81%EB%8C%80%EB%A5%BC-%ED%99%95%EC%9D%B8%ED%95%98%EC%A7%80-%EC%95%8A%EA%B8%B0-%EB%95%8C%EB%AC%B8%EC%97%90-%EC%9C%84%EC%9E%A5%EC%9D%B4-%EA%B0%80%EB%8A%A5%ED%95%98%EB%8B%A4&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;통신 상대를 확인하지 않기 때문에 위장이 가능하다.&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HTTP 에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에 누구든지 리퀘스트를 보낼 수 있다. IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우 리퀘스트가 오면 상대가 누구든지 무언가의 리스폰스를 반환한다. 이러한 특징은 여러 문제점을 유발한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-list-type=&quot;decimal&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;li&gt;의미없는 리퀘스트도 수신한다. &amp;mdash;&amp;gt; DoS 공격을 방지할 수 없다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-보완-방법-1&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#%EB%B3%B4%EC%99%84-%EB%B0%A9%EB%B2%95-1&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;보완 방법&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 암호화 방법으로 언급된&lt;span&gt;&amp;nbsp;&lt;/span&gt;SSL로 상대를 확인할 수 있다. SSL 은 상대를 확인하는 수단으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;증명서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 제공하고 있다. 증명서는 신뢰할 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;제 3 자 기관에 의해&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다. 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인 정보 누설 등의 위험성이 줄어들게 된다. 한 가지 이점을 더 꼽자면 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-완전성을-증명할-수-없기-때문에-변조가-가능하다&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#%EC%99%84%EC%A0%84%EC%84%B1%EC%9D%84-%EC%A6%9D%EB%AA%85%ED%95%A0-%EC%88%98-%EC%97%86%EA%B8%B0-%EB%95%8C%EB%AC%B8%EC%97%90-%EB%B3%80%EC%A1%B0%EA%B0%80-%EA%B0%80%EB%8A%A5%ED%95%98%EB%8B%A4&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;완전성을 증명할 수 없기 때문에 변조가 가능하다&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 완전성이란&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정보의 정확성&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 의미한다. 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다라는 것을 보장할 수 없는 것이다. 리퀘스트나 리스폰스가 발신된 후에 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이 사실을 알 수 없다. 이와 같이 공격자가 도중에 리퀘스트나 리스폰스를 빼앗아 변조하는 공격을 중간자 공격(Man-in-the-Middle)이라고 부른다.&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-보완-방법-2&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#%EB%B3%B4%EC%99%84-%EB%B0%A9%EB%B2%95-2&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;보완 방법&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MD5,&lt;span&gt;&amp;nbsp;&lt;/span&gt;SHA-1&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실히 확인할 수 있는 것은 아니다. 확실히 방지하기에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;HTTPS를 사용해야 한다. SSL 에는 인증이나 암호화, 그리고 다이제스트 기능을 제공하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-https&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#https&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;HTTPS&lt;/h3&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 에 암호화와 인증, 그리고 완전성 보호를 더한 HTTPS&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HTTPS는 SSL 의 껍질을 덮어쓴 HTTP 라고 할 수 있다. 즉, HTTPS 는 새로운 애플리케이션 계층의 프로토콜이 아니라는 것이다. HTTP 통신하는 소켓 부분을&lt;span&gt;&amp;nbsp;&lt;/span&gt;SSL(Secure Socket Layer)&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;TLS(Transport Layer Security)라는 프로토콜로 대체하는 것 뿐이다. HTTP 는 원래 TCP 와 직접 통신했지만, HTTPS 에서 HTTP 는 SSL 과 통신하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;SSL 이 TCP 와 통신&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하게 된다. SSL 을 사용한 HTTPS 는 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HTTPS 의 SSL 에서는 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다. 공통키를 공개키 암호화 방식으로 교환한 다음에 다음부터의 통신은 공통키 암호를 사용하는 방식이다.&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-모든-웹-페이지에서-https를-사용해도-될까&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#%EB%AA%A8%EB%93%A0-%EC%9B%B9-%ED%8E%98%EC%9D%B4%EC%A7%80%EC%97%90%EC%84%9C-https%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%8F%84-%EB%90%A0%EA%B9%8C&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;모든 웹 페이지에서 HTTPS를 사용해도 될까?&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;평문 통신에 비해서 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한 대당 처리할 수 있는 리퀘스트의 수가 상대적으로 줄어들게 된다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다. 따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.&lt;/p&gt;</description>
      <category>의문점 공부하기/ 공부하며</category>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/253</guid>
      <comments>https://tyhan02.tistory.com/253#entry253comment</comments>
      <pubDate>Mon, 4 Dec 2023 23:20:24 +0900</pubDate>
    </item>
    <item>
      <title> 면접 대비</title>
      <link>https://tyhan02.tistory.com/252</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;RDB&lt;/span&gt;&lt;span&gt;와 &lt;/span&gt;&lt;span&gt;NoSQL&lt;/span&gt;&lt;span&gt;의 차이&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;RDBMS&lt;/span&gt;&lt;span&gt;는 정해진 스키마가 존재하고&lt;/span&gt;&lt;span&gt;, NoSQL&lt;/span&gt;&lt;span&gt;는 정해진 스키마가 없다는 것이 가장 큰 차이입니다&lt;/span&gt;&lt;span&gt;. NoSQL&lt;/span&gt;&lt;span&gt;은 정해진 스키마가 없을 때 데이터 구조 변화가 자유롭고 데이터 분산이 용이하다는 장점이 있지만&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;데이터 중복이 발생하거나 데이터 변경 시에 연산이 오래 걸린다는 단점이 있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DB&lt;/span&gt;&lt;span&gt;에서 인덱스를 잘 사용 했을 때의 장점&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DB&lt;/span&gt;&lt;span&gt;의 인덱스를 잘 사용하는 것은 데이터를 검색하는 시점에 성능 차이에 큰 영향을 미칩니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;대용량 데이터를 담고 있는 &lt;/span&gt;&lt;span&gt;DB &lt;/span&gt;&lt;span&gt;테이블에서 필요한 데이터를 빨리 찾기 위해 인덱스가 필요합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;인덱스가 없거나 적절한 인덱스를 찾지 못할 경우 데이터가 담겨있는 테이블 전체를 읽어야 하기에 데이터 조회 시간이 오래 걸립니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;인덱스는 &lt;/span&gt;&lt;span&gt;DB &lt;/span&gt;&lt;span&gt;데이터의 주소를 갖고 있는 것을 의미하며&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;원하는 데이터를 빠르게 찾을 수 있다는 장점을 가지고 있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;</description>
      <category>의문점 공부하기/ 공부하며</category>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/252</guid>
      <comments>https://tyhan02.tistory.com/252#entry252comment</comments>
      <pubDate>Sat, 2 Dec 2023 17:54:29 +0900</pubDate>
    </item>
    <item>
      <title> NCA 취득 완료</title>
      <link>https://tyhan02.tistory.com/251</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEpEvQ/btsBgvJc8rk/C17rFLQV9alt6j8ghxN5b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEpEvQ/btsBgvJc8rk/C17rFLQV9alt6j8ghxN5b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEpEvQ/btsBgvJc8rk/C17rFLQV9alt6j8ghxN5b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEpEvQ%2FbtsBgvJc8rk%2FC17rFLQV9alt6j8ghxN5b0%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;858&quot; height=&quot;589&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>의문점 공부하기/ 공부하며</category>
      <author>아리빠</author>
      <guid isPermaLink="true">https://tyhan02.tistory.com/251</guid>
      <comments>https://tyhan02.tistory.com/251#entry251comment</comments>
      <pubDate>Thu, 30 Nov 2023 20:02:14 +0900</pubDate>
    </item>
  </channel>
</rss>