<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>윤이네</title>
    <link>https://ellie-yoon.tistory.com/</link>
    <description>마크다운이 워드보다 더 편해서 쓰는 내 블로그 </description>
    <language>ko</language>
    <pubDate>Wed, 13 May 2026 14:35:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Ellie_yoon</managingEditor>
    <image>
      <title>윤이네</title>
      <url>https://tistory1.daumcdn.net/tistory/5053712/attach/d5a422d2643c4946a8d9ddb735782929</url>
      <link>https://ellie-yoon.tistory.com</link>
    </image>
    <item>
      <title>Spring Boot JSP &amp;amp; Thymeleaf</title>
      <link>https://ellie-yoon.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;View Tempate Engine: JSP 와 Thymeleaf&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. JSP 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Embedded Sevlet 컨테이너의 Spring Boot를 사용할 경우 jar 를 사용할 수 없기 때문에 war 방식을 선택해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;WAR(Web Archive) 는 웹 어플리케이션 압축 타입으로 Servlet(JSP) 관련 패키지들을 포함하고 있기 때문에 복잡하고 무거운 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면에 Spring Boot는 독립적이고 가벼운 실행을 목표로 하기 때문에 이 방법과는 맞지 않아서, JSP 사용을 권장하지 않는다. 그 대체 템플릿 엔진으로 나온 것이 바로 Thymeleaf&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[JSP 사용방법 업데이트 예정]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.Thymeleaf &lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;: 템플릿 엔진으로서, 기존 HTML 코드와 구조를 변경하지 않고 덧붙이는 방식이 특징&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- view와 관련된 설정들은 꼭 정해진 디렉토리에 위치해있어야 한다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;/src/main/resources/templates&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 필요한 dependency (maven 기준) - thymeleaf 만 추가해주었다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Maven Repository : &lt;a href=&quot;https://mvnrepository.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mvnrepository.com/&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654668069577&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;

&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;spring-boot-starter-tomcat&amp;lt;/artifactId&amp;gt;
  &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;

&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;spring-boot-starter-thymeleaf&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Thymeleaf&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;제공 Template&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;XML&lt;/li&gt;
&lt;li&gt;TEXT&lt;/li&gt;
&lt;li&gt;Javascript&lt;/li&gt;
&lt;li&gt;Css&lt;/li&gt;
&lt;li&gt;Raw&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Thymeleaf 문법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- th:text=&quot;${변수명}&quot;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654671515893&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!--index.html--&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;title&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;!--/*@thymesVar id=&quot;name&quot; type=&quot;&quot;*/--&amp;gt;
&amp;lt;h1 th:text=&quot;${name}&quot;&amp;gt;Hello Thymeleaf&amp;lt;/h1&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- th:href=&quot;@{변수명}&quot;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: &amp;lt;a&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;&lt;b&gt;- th:with=&quot;${변수명}&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 변수 형태의 값을 재정의하는 속성, 새 변수값 생성용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- th:value=&quot;${변수명}&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: input의 value에 값을 삽입할 때 사용, + 기호로 여러개의 값을 넣을 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Javascript에서 사용시&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654671457402&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;script th:inline=&quot;javascript&quot;&amp;gt;
        /*&amp;lt;![CDATA[*/
        let data = /*[[${data}]]&quot;*/;
        /*]]*/
    &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Controller 코드 예시&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. [Model] 사용 ver&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@Controller
public class TempController {

    @GetMapping(&quot;/index&quot;)
    public String test(Model model){
        //속성 이름과 속성값 model에 추가 -&amp;gt; index.html 페이지에서 {$name} 으로 값을 읽음
        model.addAttribute(&quot;name&quot;,&quot;yoon&quot;);
        //리턴할 페이지 이름
        return &quot;index&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. [ModelAndView] 사용 ver&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@GetMapping(&quot;/test&quot;)
public ModelAndView test(HttpServletRequest request){
 	....
    ModelAndView mv = new ModelAndView();
    //리턴할 페이지 
    mv.setViewName(&quot;test&quot;);
    //리턴할 속성과 객체
    mv.addObject(&quot;request&quot;,request);

    return mv;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Model 과 ModelAndView 차이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bestkingit.tistory.com/155&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bestkingit.tistory.com/155&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654672071198&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring Boot] Model 과 ModelAndView 차이.&quot; data-og-description=&quot;인터셉터에서 세션 처리를 하는 도중에 문제가 생겼다. 지금까지 Controller에서 Model을 이용하여 view에 넣어주었는데, HandlerInterceptor의 postHandle에는 ModelAndView를 이용하는 것이다..(확장하면 되지..&quot; data-og-host=&quot;bestkingit.tistory.com&quot; data-og-source-url=&quot;https://bestkingit.tistory.com/155&quot; data-og-url=&quot;https://bestkingit.tistory.com/155&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dauY1x/hyOGRTGet1/JntFs9amfJMMVbhKz45tx0/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/bp4Mmp/hyOGQAvfj3/4ZvD4kLJJODOXtzTfefyY0/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/7lXVC/hyOG2uaSuC/v1ZOFAC3aWyPMkQt6HnXU1/img.jpg?width=1346&amp;amp;height=946&amp;amp;face=0_0_1346_946&quot;&gt;&lt;a href=&quot;https://bestkingit.tistory.com/155&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bestkingit.tistory.com/155&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dauY1x/hyOGRTGet1/JntFs9amfJMMVbhKz45tx0/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/bp4Mmp/hyOGQAvfj3/4ZvD4kLJJODOXtzTfefyY0/img.jpg?width=800&amp;amp;height=562&amp;amp;face=0_0_800_562,https://scrap.kakaocdn.net/dn/7lXVC/hyOG2uaSuC/v1ZOFAC3aWyPMkQt6HnXU1/img.jpg?width=1346&amp;amp;height=946&amp;amp;face=0_0_1346_946');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Spring Boot] Model 과 ModelAndView 차이.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;인터셉터에서 세션 처리를 하는 도중에 문제가 생겼다. 지금까지 Controller에서 Model을 이용하여 view에 넣어주었는데, HandlerInterceptor의 postHandle에는 ModelAndView를 이용하는 것이다..(확장하면 되지..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bestkingit.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Web/Spring</category>
      <category>JSP</category>
      <category>springboot</category>
      <category>thymeleaf</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/46</guid>
      <comments>https://ellie-yoon.tistory.com/46#entry46comment</comments>
      <pubDate>Wed, 8 Jun 2022 16:08:48 +0900</pubDate>
    </item>
    <item>
      <title>JAVA Azure Application Insights  설정</title>
      <link>https://ellie-yoon.tistory.com/45</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 모니터링을 위해 JAVA에 Application Insights 연결하기&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;준비&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. testweb(Remote Host)에 jar 파일 대기 - /home/user/&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent &lt;/a&gt;에서 applicationinsights-agent.jar 다운로드하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Azure Portal 에서 모니터 -&amp;gt; 어플리케이션 인사이트 -&amp;gt; 만들기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 3번완료시 생성된 연결문자열 복사해두기&lt;/p&gt;
&lt;div&gt;&lt;b&gt;연결 문자열 - Azure Portal -&amp;gt; 어플리케이션 인사이트 -&amp;gt; 연결문자열에서 확인 가능&lt;/b&gt;&lt;/div&gt;
&lt;div id=&quot;_weave_e_975&quot;&gt;:&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;InstrumentationKey=~~~~으로 시작.&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;터미널&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$mkdir test&amp;nbsp; // jar unzip할 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$cd test&amp;nbsp; &amp;nbsp; &amp;nbsp; // test 디렉토리 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$unzip '/path/to/user/jar'&amp;nbsp; &amp;nbsp; // test 디렉토리에서 jar 파일 unzip&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ls -al //unzip된 파일들 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로젝트&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PIdws/btrDkmy8HQD/jZPXQ8KZ2eakhQRYFFVkbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PIdws/btrDkmy8HQD/jZPXQ8KZ2eakhQRYFFVkbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PIdws/btrDkmy8HQD/jZPXQ8KZ2eakhQRYFFVkbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPIdws%2FbtrDkmy8HQD%2FjZPXQ8KZ2eakhQRYFFVkbk%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;303&quot; height=&quot;79&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. spring boot application 에 'azure' 폴더 만들고 &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;applicationinsights-agent.jar&lt;/span&gt; 파일 + applicationinsights.json + setting 용 xml 위치시키기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. applicationinsights.json&amp;nbsp; 파일에 &quot;connectionString&quot; 수정과 클라우드 역할(role) &lt;b&gt;인스턴스 &lt;/b&gt;이름 넣기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'connectionString' 이 부분에 아까 복사한 연결문자열을 넣어주면 된다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctNih1/btrDkCIvKxu/LKnZcIc3HWOSLjf111mql0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctNih1/btrDkCIvKxu/LKnZcIc3HWOSLjf111mql0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctNih1/btrDkCIvKxu/LKnZcIc3HWOSLjf111mql0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctNih1%2FbtrDkCIvKxu%2FLKnZcIc3HWOSLjf111mql0%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;646&quot; height=&quot;96&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 역할 인스턴스 항목은 머신의 기본값이름으로 설정되기 때문에 json 파일 추가는 optional 하다. 하지만 이름ㅇ르 변경하고 싶다면 같은 json 파일 안에&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM4DOg/btrDyv3CC9k/QuoKBSu9bs2jAEquMp7yH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM4DOg/btrDyv3CC9k/QuoKBSu9bs2jAEquMp7yH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM4DOg/btrDyv3CC9k/QuoKBSu9bs2jAEquMp7yH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM4DOg%2FbtrDyv3CC9k%2FQuoKBSu9bs2jAEquMp7yH1%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;856&quot; height=&quot;177&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 추가하면 된다. 보통 어플리케이션 이름으로 흔하게 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. jvm 인수 추가 - javaagent&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;intellij ru/debug configuration (windows: alt+shift+f10)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vm 옵션 추가 후, 필드에&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;javaagent:path/to/applicationinsights-agent-3.2.11.jar&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. application run&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; log 에 다음과 같은 메세지가 기록됨&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- ApplicationInsights Java Agent 3.2.11 started successfull&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출처&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653904214957&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Azure Monitor: Application Insights Java - Azure Monitor&quot; data-og-description=&quot;코드를 수정할 필요 없이 모든 환경에서 실행되는 Java 애플리케이션에 대한 애플리케이션 성능 모니터링입니다. 분산 추적 및 애플리케이션 맵.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bkNsCa/hyOzS0coPD/eURo0kSA2PKsWm6z0C0mS1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/OP59W/hyOBEMLxl6/QXme9xLkCPRfrEllAwHUc0/img.png?width=1963&amp;amp;height=1041&amp;amp;face=0_0_1963_1041,https://scrap.kakaocdn.net/dn/qElNk/hyOBCIb6W2/vfA8FGsg6p4Sks4zNfMda1/img.png?width=2036&amp;amp;height=272&amp;amp;face=0_0_2036_272&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bkNsCa/hyOzS0coPD/eURo0kSA2PKsWm6z0C0mS1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/OP59W/hyOBEMLxl6/QXme9xLkCPRfrEllAwHUc0/img.png?width=1963&amp;amp;height=1041&amp;amp;face=0_0_1963_1041,https://scrap.kakaocdn.net/dn/qElNk/hyOBCIb6W2/vfA8FGsg6p4Sks4zNfMda1/img.png?width=2036&amp;amp;height=272&amp;amp;face=0_0_2036_272');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Azure Monitor: Application Insights Java - Azure Monitor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드를 수정할 필요 없이 모든 환경에서 실행되는 Java 애플리케이션에 대한 애플리케이션 성능 모니터링입니다. 분산 추적 및 애플리케이션 맵.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2.&amp;nbsp; Application Insights 라이브메트릭 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Application Insights의 라이브 메트릭은 applicationinsights.json 파일의 jmxMetrics 을 추가함으로써 Azure Portal 내에서 확인이 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p38Y5/btrDEzpLMQJ/Ivdsq0PbwIbGuR6gqt0Jz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p38Y5/btrDEzpLMQJ/Ivdsq0PbwIbGuR6gqt0Jz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p38Y5/btrDEzpLMQJ/Ivdsq0PbwIbGuR6gqt0Jz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp38Y5%2FbtrDEzpLMQJ%2FIvdsq0PbwIbGuR6gqt0Jz1%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;861&quot; height=&quot;321&quot; data-origin-width=&quot;861&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메트릭으로 확인해 보고싶은 항목을 objectname 으로 설정하여 라이브 메트릭에서 실시간으로 확인이 가능하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브 메트릭 화면 예시는 아래와 같다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bacw0n/btrDz7O8NTn/mPOx4vCKGUlMg4DGxsbusK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bacw0n/btrDz7O8NTn/mPOx4vCKGUlMg4DGxsbusK/img.png&quot; data-alt=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/live-stream#get-started&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bacw0n/btrDz7O8NTn/mPOx4vCKGUlMg4DGxsbusK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbacw0n%2FbtrDz7O8NTn%2FmPOx4vCKGUlMg4DGxsbusK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;688&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/live-stream#get-started&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 &lt;a href=&quot;https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-standalone-config&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-standalone-config&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653975683100&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Configuration options - Azure Monitor Application Insights for Java - Azure Monitor&quot; data-og-description=&quot;How to configure Azure Monitor Application Insights for Java&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-standalone-config&quot; data-og-url=&quot;https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-standalone-config&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cgpOvC/hyOBBJMgtZ/omkZTUc0BscKv8adt1EhJ1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/6FSKX/hyOBwuUj0p/zr5Jrvqhtz5Z5vev5OLuM1/img.png?width=1120&amp;amp;height=377&amp;amp;face=0_0_1120_377&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-standalone-config&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-standalone-config&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cgpOvC/hyOBBJMgtZ/omkZTUc0BscKv8adt1EhJ1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/6FSKX/hyOBwuUj0p/zr5Jrvqhtz5Z5vev5OLuM1/img.png?width=1120&amp;amp;height=377&amp;amp;face=0_0_1120_377');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Configuration options - Azure Monitor Application Insights for Java - Azure Monitor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How to configure Azure Monitor Application Insights for Java&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 포스팅과 무관하지만 jar unzip 시 항목들&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고] Spring boot 는 BOOT-INF , META-INF , org 로 크게 3가지로 구성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) BOOT-INFO : 클래스 파일들과 의존성이 있는&amp;nbsp; jar 파일들로 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) META-INFO : MANIFEST.MF(프로젝트 매니패스트 파일) pom.xml(메이븐 설정 파일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) org&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;MANIFEST.MT 기존의 Java Jar 같은 경우에&amp;nbsp; Main-Class가 실제 Main Method (public static void main)가 있는 클래스로 설정되지만 Spring Boot&amp;nbsp; 에서는 org.springframework.boot.loader.JarLauncher 라는 클래스로 설정됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 Spring Boot 내부에서 의존성 라이브러리들이 존재하는 BOOT-INFO 폴더에서 Jar 파일들을 실행하는 방식으로 이뤄진다는 뜻&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;org.springframework.boot.loader.jar.JarFile을 사용해서 내장 JAR를 읽음&lt;/li&gt;
&lt;li&gt;org.springframework.boot.loader.Launcher를 사용해서 실행&lt;/li&gt;
&lt;li&gt;출처 : &lt;a href=&quot;https://seongmun-hong.github.io/springboot/Spring-boot-Spring-Boot-Principal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://seongmun-hong.github.io/springboot/Spring-boot-Spring-Boot-Principal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1653872942345&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Spring Boot 구동 원리&quot; data-og-description=&quot;Spring Boot 구동 원리 Spring boot 는 빌드를 진행하면 Jar File이 나오게 된다. 이 Jar File 하나로 독립적으로 실행이 가능하다. 어떻게 이...&quot; data-og-host=&quot;Seongmun-Hong.github.io&quot; data-og-source-url=&quot;https://seongmun-hong.github.io/springboot/Spring-boot-Spring-Boot-Principal&quot; data-og-url=&quot;https://Seongmun-Hong.github.io/springboot/Spring-boot-Spring-Boot-Principal&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SiSkD/hyOzK8tIGV/pxXB00KNzyF3kkeNYMj6M1/img.png?width=754&amp;amp;height=842&amp;amp;face=0_0_754_842,https://scrap.kakaocdn.net/dn/e75Dw/hyOzUDh2qe/gt1OtlAfW5MLRSLakKtlOK/img.png?width=814&amp;amp;height=678&amp;amp;face=0_0_814_678&quot;&gt;&lt;a href=&quot;https://seongmun-hong.github.io/springboot/Spring-boot-Spring-Boot-Principal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seongmun-hong.github.io/springboot/Spring-boot-Spring-Boot-Principal&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SiSkD/hyOzK8tIGV/pxXB00KNzyF3kkeNYMj6M1/img.png?width=754&amp;amp;height=842&amp;amp;face=0_0_754_842,https://scrap.kakaocdn.net/dn/e75Dw/hyOzUDh2qe/gt1OtlAfW5MLRSLakKtlOK/img.png?width=814&amp;amp;height=678&amp;amp;face=0_0_814_678');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Spring Boot 구동 원리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Spring Boot 구동 원리 Spring boot 는 빌드를 진행하면 Jar File이 나오게 된다. 이 Jar File 하나로 독립적으로 실행이 가능하다. 어떻게 이...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;Seongmun-Hong.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Azure</category>
      <category>ApplicationInsights</category>
      <category>AZURE</category>
      <category>java</category>
      <category>LiveMetrics</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/45</guid>
      <comments>https://ellie-yoon.tistory.com/45#entry45comment</comments>
      <pubDate>Tue, 31 May 2022 13:18:38 +0900</pubDate>
    </item>
    <item>
      <title>Azure Application Insights</title>
      <link>https://ellie-yoon.tistory.com/44</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Application Insights &lt;/span&gt;작동 방법 &lt;span&gt;: &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;앱에&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; SDK(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;작은&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;계측&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;패키지&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;를&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;설치하거나&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; Application Insights &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;에이전트를&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;사용&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Azure Insights &lt;/span&gt;요금&lt;/b&gt; &lt;span&gt;: &lt;/span&gt;앱에 상당한 사용량이 될 때 까지 요금 부과 &lt;span&gt;x&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(&lt;a href=&quot;https://azure.microsoft.com/pricing/details/application-insights/&quot;&gt;https://azure.microsoft.com/pricing/details/application-insights/&lt;/a&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;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Application Insights &lt;/b&gt;&lt;/span&gt;&lt;b&gt;원격 분석 탐색 방법 &lt;span&gt;/ &lt;/span&gt;기능 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/app-insights-overview&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/app-insights-overview&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모니터링 항목&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;요청 속도&lt;span&gt;, &lt;/span&gt;응답 시간 및 실패율&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&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;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;예외&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;사용자의 브라우저에서 보고된 페이지 보기 및 로드 성능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;속도&lt;span&gt;, &lt;/span&gt;응답 시간 및 실패율을 포함하여 웹 페이지의&lt;span&gt; AJAX &lt;/span&gt;호출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;사용자 및 세션 수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;CPU, &lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;메모리 및 네트워크 사용량과 같은&lt;span&gt; Windows &lt;/span&gt;또는&lt;span&gt; Linux &lt;/span&gt;서버 컴퓨터의 성능 카운터&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;Docker &lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;또는&lt;span&gt; Azure&lt;/span&gt;의 호스트 진단&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;앱의 진단 추적 로그를 통해 추적 이벤트와 요청의 상관 관계를 지정할 수 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;l&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;판매된 항목과 같은 비즈니스 이벤트를 추적하는 클라이언트 또는 서버 코드의 사용자 지정 이벤트 및 메트릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&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;/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 style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;애플리케이션이&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;원격&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;분석을&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;캡처할&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;수&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;있도록&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;자동 계측 애플리케이션 모니터링&lt;span&gt;(ApplicationInsightsAgent) = &lt;/span&gt;런타임 모니터링&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/azure-vm-vmss-apps?tabs=Java&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/azure-vm-vmss-apps?tabs=Java&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;Azure Portal&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;을&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;사용하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;것입니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;. Azure Portal&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;애플리케이션&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;모니터링을&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;켜면&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; Application Insights&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;로&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;애플리케이션이&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;자동으로&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;계측되며&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;코드를&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;변경할&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;필요가&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;없습니다&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;권장 사항&lt;span&gt;) &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;-&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Azure App Services&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;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;클라이언트 쪽 모니터링을 사용하려면 &lt;span&gt;Javascript SDK &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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;프로파일러&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;및&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;스냅샷&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;디버거는&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt; Java &lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;애플리케이션에&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;사용할&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;수&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;없습니다&lt;/span&gt;&lt;span style=&quot;background-color: #efd9fd; color: #171717;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설정방법&lt;span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/azure-web-apps-java&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/azure-web-apps-java&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;1. App Service&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;의&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; Azure &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;제어판에서&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;Application Insights&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;를&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;선택&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;한&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;다음&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;사용&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;을&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;선택&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;2. &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;새&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;리소스를&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;만들도록&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;선택하거나&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;이&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;애플리케이션에&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;대한&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; Application Insights &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;리소스를&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;선택&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;3. &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;사용할&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;리소스를&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;지정한&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;후&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;span&gt;Java &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #171717;&quot;&gt;에이전트를&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #171717;&quot;&gt;구성&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;할&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;수&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;있습니다&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;. Java &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;에이전트를&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;구성하지&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;않으면&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;기본&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;구성이&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;적용됩니다&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;수동&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;- &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;전체&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-standalone-config&quot; data-linktype=&quot;relative-path&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;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;span&gt;을&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;사용할&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;수&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;있으며&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;유효한&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-standalone-config#an-example&quot; data-linktype=&quot;relative-path&quot;&gt;&lt;span&gt;json &lt;/span&gt;&lt;span&gt;&lt;span&gt;파일&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;span&gt;을&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;붙여넣기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; - &lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-standalone-config#an-example&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-standalone-config#an-example&lt;/a&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;Application Insights SDK&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;를 설치하여 코드를 통해 애플리케이션을 수동으로 계측 &lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;OpenTelemetry &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;기반&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;사용&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;시나리오&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;자동&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;계측&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;모니터링을&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;사용하여&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;기본적으로&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;캡처되지&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;않는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;이벤트&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;종속성을&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;추적하기&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;위해&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;사용자&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;지정&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; API &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;호출을&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;수행해야&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;하는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;경우&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;이&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;방법을&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #171717;&quot;&gt;ApplicationInsights Java Agent &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffff00; color: #171717;&quot;&gt;사용&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-in-process-agent&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;a href=&quot;https://wiki.sansae.net/display/PS/Application+Insights+of+SpringBoot+-+5mHandsOn&quot;&gt;https://wiki.sansae.net/display/PS/Application+Insights+of+SpringBoot+-+5mHandsOn&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;1.&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;jar &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;파일&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;다운로드&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;- application&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;에&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;span&gt;jar &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;파일&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;위치&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;시키기&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;span&gt;(jar, applicationinsights.json ) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;2. J&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;VM &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;환경변수로 &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt;-javaagent:path/to/applicationinsights-agent-3.2.11.jar&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;추가&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;span&gt;[Run/Debug Configuration]&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;3. Application Insights &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;문자열&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;설정&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;span&gt;(= jar &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;파일로&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; Application Insights &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;리소스를&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;가리키는&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;두&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;가지&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;방법&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;) &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(1). &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;환경변수&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;설정&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&amp;ndash; (Console) APPLICATIONINSIGHTS_CONNECTION_STRING = &amp;lt;Copy connection string from Application Insights Resource Overview&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;(2). &lt;span&gt;Applicationisights.json&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;이라는&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;구성&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;파일&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;만들기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;- &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;키는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;span&gt;Application Insights -&amp;gt; amass_api_dbweb &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;연결문자열&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;이름&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;- &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;파일은&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;span&gt;applicationinsights-agent jar&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;과&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;동일한&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;디렉터리에&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;배치돼야함&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;4. &lt;span&gt;&amp;nbsp;&lt;/span&gt;Application Insights &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;리소스에서&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;연결&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;문자열&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;찾기&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;5. &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;데이터&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;흐르는지&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;확인&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;span&gt;[Auzre Portal &amp;ndash; Application Insights &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;리소스&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;탭&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Applicationinsights.json &lt;/span&gt;&lt;span&gt;구성 옵션&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;클라우드 역할 이름&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;클라우드 역할 인스턴스&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;샘플링&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;JMX &lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;메트릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;사용자 지정 차원&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;원격 분석 프로세서&lt;span&gt;(&lt;/span&gt;미리 보기&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;자동 수집된 로깅&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;자동 수집된 마이크로미터 메트릭&lt;span&gt;(Spring Boot Actuator &lt;/span&gt;메트릭 포함&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;하트비트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;HTTP &lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;프록시 &lt;span&gt;: &lt;/span&gt;애플리케이션이 방화벽 뒤에 있고&lt;span&gt; Application Insights&lt;/span&gt;에 직접 연결할 수 없는 경우&lt;span&gt;(&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/ip-addresses&quot; data-linktype=&quot;relative-path&quot;&gt;Application Insights&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;사용하는 IP &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;주소&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;참조&lt;span&gt;), HTTP &lt;/span&gt;프록시를 사용하도록&lt;span&gt; Application Insights Java 3.x&lt;/span&gt;를 구성할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;자체 진단&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;Applicationinsights.json&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;구성 옵션&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;클라우드 역할 이름&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;클라우드 역할 인스턴스&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;샘플링&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;JMX&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;메트릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;사용자 지정 차원&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;원격 분석 프로세서&lt;span&gt;(&lt;/span&gt;미리 보기&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;자동 수집된 로깅&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;자동 수집된 마이크로미터 메트릭&lt;span&gt;(Spring Boot Actuator&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;메트릭 포함&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;하트비트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;HTTP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;프록시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;애플리케이션이 방화벽 뒤에 있고&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Application Insights&lt;/span&gt;에 직접 연결할 수 없는 경우&lt;span&gt;(&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/ip-addresses&quot; data-linktype=&quot;relative-path&quot;&gt;Application Insights&lt;span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;사용하는 IP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;주소&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;참조&lt;span&gt;), HTTP&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프록시를 사용하도록&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Application Insights Java 3.x&lt;/span&gt;를 구성할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;middot;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #171717;&quot;&gt;자체 진단&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #171717;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Applicationinsights.json&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;구성 파일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;예제&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-standalone-config#an-example&quot;&gt;https://docs.microsoft.com/ko-kr/azure/azure-monitor/app/java-standalone-config#an-example&lt;/a&gt;)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Azure</category>
      <category>ApplicationInsights</category>
      <category>AZURE</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/44</guid>
      <comments>https://ellie-yoon.tistory.com/44#entry44comment</comments>
      <pubDate>Fri, 27 May 2022 18:13:42 +0900</pubDate>
    </item>
    <item>
      <title>Spring - AOP</title>
      <link>https://ellie-yoon.tistory.com/14</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;AOP (Aspect Oriented Programming)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관점지향 프로그램&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스프링 어플리케이션은 대부분 특별한 경우를 제외하고는 MVC 웹 어플리케이션에서는 Web Layer, Business Layer, Data Layer로 정의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Web Layer&lt;/b&gt;: REST API를 제공하며, Client 중심의 로직 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Business Layer&lt;/b&gt;: 내부 정책에 따른 logic을 개발하며, 주로 해당 부분을 개발&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Data Layer&lt;/b&gt;: 데이터 베이스 및 외부와의 연동을 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;횡단 관심&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Method Parameter Log&lt;/b&gt; - 메소드 실행 시 어떤값이 들어가고 리턴되는지 확인&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;실행시간 Log&lt;/b&gt; - 특정 메소드의 실행시간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Parameter Encode&lt;/b&gt; : 메소드가 들어갈 때나 반환될 때 값을 변환시켜줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요 Annotation&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Aspect : 자바에서 널리 사용하는 AOP프레임워크에 포함되며, AOP를 정의하는 Class에 할당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Pointcut : 기능을 어디에 적용시킬지, 메소드? Annotation?등 AOP를 적용시킬 지점을 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Before : 메소드를 &lt;u&gt;실행하기 이전&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@After : 메소드가 성공적으로 &lt;u&gt;실행 후, 예외가 발생되더라도 실행&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@AfterReturning : 메소드 호출 성공 실행 시 (Not Throws)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@AfterThrowing : 메소드 호출 실패 예외 발생 (Throws)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Around : &lt;u&gt;Before/after 모두 제어&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Web/Spring</category>
      <category>AOP</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/14</guid>
      <comments>https://ellie-yoon.tistory.com/14#entry14comment</comments>
      <pubDate>Fri, 7 Jan 2022 16:04:20 +0900</pubDate>
    </item>
    <item>
      <title>Spring - IoC/DI 란?</title>
      <link>https://ellie-yoon.tistory.com/13</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmeVJX/btrqAWdCKM7/r7IYKhvgsMR3iWS2LquaV1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmeVJX/btrqAWdCKM7/r7IYKhvgsMR3iWS2LquaV1/img.jpg&quot; data-alt=&quot;저작자: PHẠM HUY HO&amp;amp;amp;amp;amp;Agrave;NG 이미지 출처 :&amp;amp;amp;amp;amp;nbsp;https://toidicodedao.com/2015/11/03/dependency-injection-va-inversion-of-control-phan-1-dinh-nghia/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmeVJX/btrqAWdCKM7/r7IYKhvgsMR3iWS2LquaV1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmeVJX%2FbtrqAWdCKM7%2Fr7IYKhvgsMR3iWS2LquaV1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;479&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저작자: PHẠM HUY HO&amp;amp;amp;amp;Agrave;NG 이미지 출처 :&amp;amp;amp;amp;nbsp;https://toidicodedao.com/2015/11/03/dependency-injection-va-inversion-of-control-phan-1-dinh-nghia/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;b&gt;DI (Dependency Injection): 의존성 주입&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- &lt;b&gt;외부의 컨테이너(Spring Conainer)에서 객체를 생성한 후 의존성을 주입시키는 설계 패턴&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 스프링에서 객체는&lt;b&gt; Bean 으로 표현&lt;/b&gt;된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;DI 사용의 장점&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- &lt;b&gt;모듈 간의 결합도가 낮아져&lt;/b&gt;, &lt;b&gt;유연성이 높아짐&lt;/b&gt; 따라서 &lt;b&gt;안정적인 테스트 가능&lt;/b&gt; (&amp;nbsp;Mock 을 통해)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;*&lt;/span&gt;&lt;b&gt;&lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;순환참조&lt;/span&gt;(Circular Reference) 제거&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;*&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;순환참조(Circular Reference)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;: 참조하는 대상이 서로 몰려있어서 참조할 수 없게 되는 현상.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 재사용이 높고, &lt;b&gt;코드 변경 및 확장의 영향이 적음 (추상화)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&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;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;DI 사용 - 객체에 의존성을 주입시키는 방법&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;대표적으로 3가지 방법이 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;[세터 기반 의존성 주입, 생성자 기반 의존성 주입, 필드 기반 의존성 주입]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #dddddd;&quot;&gt;&lt;b&gt;1) 세터 기반 의존성 주입&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- &lt;b&gt;setter()메소드에 @Autowired를 지정하여 객체에 대한 의존성을 주입&lt;/b&gt;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;*@Autowired 란?&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 자동연결 (Autowiring)을 뜻하며 스프링 DI에서 사용되는 어노테이션으로, 컨테이너에 빈을 자동으로 주입해준다(즉, @Autowired 가 붙은 필드에 자동적으로 의존성을 주입해줌).&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 변수, 생성자, Setter(), 일반 메소드에 적용가능하다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예시: StudentController.java 에 Student 객체를 &amp;nbsp;setter()를 사용하여 의존성을 주입해보자&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public class StudentController {
    private Student student; //의존성 주입 대상 필드

    //Setter 를 사용한 의존성 주입
    @Autowired
    public void setStudent(Student student){
        this.student = student;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 주입 방법은 순환 참조 및 결합도 (Coupling) 문제로 권장되지는 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #dddddd;&quot;&gt;&lt;b&gt;2) 생성자 기반 의존성 주입&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 생성자에 @Autowired 애너테이션을 지정하여 객체에 의존성을 주입한다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 세터기반의존성 주입에 비해 &lt;b&gt;권장되는 방식&lt;/b&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예시: StudentController.java 에 Student 객체를 생성자를 사용하여 의존성을 주입해보자&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public class StudentController {
    private Student student; //의존성 주입 대상 필드

    //생성자를 사용하여 의존성 주입
    @Autowired
    public StudentController(Student student){
        this.student = student;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Lombok을 사용한다면 @RequiredArgsConstructo&lt;/b&gt;r를 사용한다면 위와 같은 코드를 조금 더 간결하게 구현할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다만 &lt;b&gt;의존성 주입 대상 필드는 꼭 final로 선언&lt;/b&gt;을 해주어야만 해당 필드를 가진 생성자가 만들어진다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public class StudentController {
    private final Student student; //의존성 주입 대상 필드
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #dddddd;&quot;&gt;&lt;b&gt;3) 필드 기반 의존성 주입&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;단순히 필드에 @Autowired 를 붙여서 의존성을 주입하는 것&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예시: StudentController.java 안에서 Student 객체(필드) 의존성을 주입해보자&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;public class StudentController {
    @Autowired
    private Student student; //의존성 주입 대상 필드
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #f6e199;&quot;&gt;&lt;b&gt;IoC(Inversion Of Control) : 제어의 역전&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 제어의 역전, 즉 &lt;b&gt;제어권한이 뒤바뀌었다는 뜻&lt;/b&gt; (권한이 개발자에서 프레임워크로)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 예전 자바기반 어플리케이션은 &lt;b&gt;개발자가 직접 자바 객체를 생성하고, 의존관계를 연결함 (제어권을 개발자가 가지고 있었음 =&amp;gt; DI)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만, Servlet 과 EJB가 생겨나면서&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; &lt;u&gt;객체의 생성/관리등의 제어권한이 외부의 컨테이너로 넘어가 뒤바뀌게 됨 (제어권을 컨테이너가 가지게됨) 이를 우리는 &quot;제어의 역전&quot;, IoC라고 표현&lt;/u&gt;&lt;/b&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예시) 개발자가 직접 객체를 생성하는 코드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;import BBB.BBB;

public class AAA {
    
    private BBB bbb;
    
    public AAA(){
        bbb = new BBB(); // AAA 객체안에서 BBB 라는 객체가 New 생성자로 직접생성됨
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기존에 객체를 생성했던 방법을 간단히 살펴보면, 위의 코드와 같이 &lt;span style=&quot;color: #ee2323;&quot;&gt;객체 AAA안에서 BBB의 객체를 쓰려면 new BBB()로 직접 생성해야 했다&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 코드를 다시 해석하면&lt;span style=&quot;color: #ee2323;&quot;&gt; AAA 라는 객체는 BBB라는 객체를 사용(의존)하고 있는 것&lt;/span&gt;을 확인할 수 있는데, 이것을 IoC 의 형태로 바꿔서 쓰면 (의존성 주입) 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;예시) 컨테이너에 의한 객체를 사용하는 코드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;import BBB.BBB;
import org.springframework.beans.factory.annotation.Autowired;

public class AAA {

    @Autowired
    private BBB bbb;

}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 객체는 스프링 컨테이너에 의해 생성 및 관리되기 때문에 코드에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;직접 객체를 생성하지 않고 &lt;b&gt;의존관계만 주입&lt;/b&gt;해주는 것을 확인할 수 있다. &lt;span style=&quot;color: #000000;&quot;&gt;이것을 우리는 제어가 역전되었다 (IoC) 라고 한다. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 간단하게 말하면, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;'의존성을 주입해준다' = 외부(스프링 컨테이너)에서 객체의 레퍼런스(객체의 주소)를 전달하여 객체를 참조할 수 있게 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;따라서 스프링에서 객체가 만들어지고 실행되는 과정&lt;/b&gt;은 다음과 같다&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;객체 생성 -&amp;gt; 객체에 의존성 주입 (컨테이너에 의해 관리되어지는 객체) -&amp;gt; 의존성 주입된 객체의 메소드 호출&amp;nbsp;&lt;/blockquote&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;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;IoC와 DI의 차이점&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DI는 IoC 모델을 구현하는 방식중에 하나고,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp;&lt;u&gt;IoC(객체의 제어권한을 외부에서 관리)는 DI(외부에서 생성된 객체를 주입하는 것)를 통해 실현&lt;/u&gt;되는 것이라고 이해하면 될 것 같다. 큰 차이점은 없는 것으로 보인다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;References&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@gillog/Spring-DIDependency-Injection&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@gillog/Spring-DIDependency-Injection&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://junu0516.tistory.com/87&quot;&gt;https://junu0516.tistory.com/87&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://life-with-coding.tistory.com/433&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://life-with-coding.tistory.com/433&lt;/a&gt;&lt;/p&gt;</description>
      <category>Web/Spring</category>
      <category>Autowired</category>
      <category>DI</category>
      <category>DI의존관계주입</category>
      <category>IoC</category>
      <category>IoC/DI</category>
      <category>의존성주입</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/13</guid>
      <comments>https://ellie-yoon.tistory.com/13#entry13comment</comments>
      <pubDate>Fri, 7 Jan 2022 13:58:02 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 시작하기 1장 (Get API-@GetMapping)</title>
      <link>https://ellie-yoon.tistory.com/11</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUfGpE/btrp1G3pZdS/S4rgYebmQW0qUbB2ulCOGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUfGpE/btrp1G3pZdS/S4rgYebmQW0qUbB2ulCOGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUfGpE/btrp1G3pZdS/S4rgYebmQW0qUbB2ulCOGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUfGpE%2Fbtrp1G3pZdS%2FS4rgYebmQW0qUbB2ulCOGK%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;572&quot; height=&quot;303&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;Spring&lt;/b&gt; 은&amp;nbsp;엔터프라이즈&amp;nbsp;애플리케이션&amp;nbsp;개발에&amp;nbsp;널리&amp;nbsp;사용되는&amp;nbsp;오픈&amp;nbsp;소스&amp;nbsp;경량&amp;nbsp;프레임워크이고, &lt;b&gt;Spring Boot&lt;/b&gt;는 기존의 Spring 프레임워크&amp;nbsp;위에&amp;nbsp;구축되어 REST&amp;nbsp;API&amp;nbsp;개발에&amp;nbsp;널리&amp;nbsp;사용되는 &amp;nbsp;오픈 소스 마이크로 프레임워크이다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Spring Boot 의 장점&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- Spring 기반 어플리케이션의 빠르고 쉬운 개발&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- war 파일의 배포가 필요 없음&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 독립 실행형 어플리케이션 (standalone application)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- Tomcat, Jetty, Undertow 같은 웹서버를 응용프로그램에 직접 내장할 수 있음&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- XML을 구성할 필요가 없음&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 소스코드의 양 감소&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 간단할 설정 및 관리, 여러 기능의 추가가 쉬움&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이제 Spring Boot 프로젝트를 만들어&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;GET, POST, PUT, DELETE 방식의 웹 서비스(Rest API)의 사용방법을 익혀보겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;준비과정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;난 IntelliJ 가 커뮤니티 버전이라, Spring Initializr 로 프로젝트를 다운받아 사용해야 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Spring Initializr : &lt;a href=&quot;https://start.spring.io&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://start.spring.io&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Spring Initializr 에서 Gradle - Java- Spring Boot(2.6.2) - &amp;nbsp;Dependencies [Spring Web] 을 선택한 후 zip 파일을 다운 받아, IntelliJ에서 열어주었다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2530&quot; data-origin-height=&quot;1328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7XLKj/btrpWzdoHkX/OoZalKNLdjNDYrvytRPmUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7XLKj/btrpWzdoHkX/OoZalKNLdjNDYrvytRPmUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7XLKj/btrpWzdoHkX/OoZalKNLdjNDYrvytRPmUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7XLKj%2FbtrpWzdoHkX%2FOoZalKNLdjNDYrvytRPmUk%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;2530&quot; height=&quot;1328&quot; data-origin-width=&quot;2530&quot; data-origin-height=&quot;1328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;1. Get API&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트 실행 - main 아래 [controller] 패키지 생성 - 패키지 안에 [GetAPIController.java] 생성&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;[GET 예제 코드 - 1]&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;@RestController&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;@RequestMapping&lt;/b&gt;(&quot;/uri&quot;) // 원하는 이름으로 지정해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3. Get을 확인할 테스트 메소드(&lt;b&gt;public String testGetMapping()&lt;/b&gt;) 만들기 &amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;4. &lt;b&gt;@GetMapping&lt;/b&gt;(path=&quot;/uri2&quot;) // 원하는 이름으로 지정해준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;5. 프로젝트 Run&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;6. &lt;b&gt;Talend API tester&lt;/b&gt; (Google Chrome extension) 에서 GET 으로 확인해보기&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;성공적으로 상태코드 200과 함께 리턴된 메세지를 확인할 수 있었다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // 1. RestController 추가
@RequestMapping(&quot;/demo&quot;) //2. RequestMapping 으로 시작 Path 지정
public class GetAPIController {

	@GetMapping(path = &quot;/test&quot;) // 3. GetMapping 에 path 추가, http://localhost:8080/demo/test
	public String testGetMapping(){
    return &quot;test get mapping&quot;;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;같은 코드지만 다른 방식으로는 &lt;b&gt;@RequestMapping&lt;/b&gt;(path=&quot;&quot;, method = RequestMethod.GET)으로 써줄 수 도 있다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController // 1. RestController 추가
@RequestMapping(&quot;/demo&quot;) //2. RequestMapping 으로 시작 Path 지정
public class GetAPIController {

	@RequestMapping(path=&quot;/test&quot;, method= RequestMethod.GET)
	public String testGetMapping2(){
    return &quot;test get mapping&quot;;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;[GET 예제 코드 2- @PathVariable]&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일관적이지 않은 URI일 경우에 우리는 @PathVariable 을 사용한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 사용자 아이디같은 경우라면&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;/demo/test/user1&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;/demo/test/user2 .. 처럼 사용자 아이디에 따라 계속 바뀌기에 우리는 고정된 URI를 사용할 수 없다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런 경우에 @PathVariable 코드를 써주면 된다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;

@RestController // 1. RestController 추가
@RequestMapping(&quot;/demo&quot;) //2. RequestMapping 으로 시작 Path 지정
public class GetAPIController {

    @GetMapping(&quot;/test/{userID}&quot;) //3. {변화하는 값}
    public String pathVariable(@PathVariable String userID){
        return userID;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-01-07 at 1.08.38 am.png&quot; data-origin-width=&quot;2204&quot; data-origin-height=&quot;1008&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uqb8a/btrpVwVD1xk/yrdhYVdeDA6adJUvZITLAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uqb8a/btrpVwVD1xk/yrdhYVdeDA6adJUvZITLAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uqb8a/btrpVwVD1xk/yrdhYVdeDA6adJUvZITLAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuqb8a%2FbtrpVwVD1xk%2FyrdhYVdeDA6adJUvZITLAK%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;2204&quot; height=&quot;1008&quot; data-filename=&quot;Screen Shot 2022-01-07 at 1.08.38 am.png&quot; data-origin-width=&quot;2204&quot; data-origin-height=&quot;1008&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;/test/{userID} 에 user100을 넣어주었고 Get이 정상적으로 동작하여 user100이 return 된 것을 Body에서 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;[GET 예제 코드 3- @RequestParam]&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;http://localhost:8080/demo/query?userId=100&amp;amp;name=ellie&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런식의 주소를 본 적이 있을 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;?를 기준으로 key=value&amp;amp;key=value로 이어진 형태로, 이런 경우에는 &lt;b&gt;@RequestParam&lt;/b&gt;을 활용하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;방법 1 - Map 사용&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController // 1. RestController 추가
@RequestMapping(&quot;/demo&quot;) //2. RequestMapping 으로 시작 Path 지정
public class GetAPIController {

//http://localhost:8080/demo/query?userId=100&amp;amp;name=ellie
//방법1. Map 사용    
@GetMapping(path = &quot;test1&quot;)
    public String queryTest1(@RequestParam Map&amp;lt;String,String&amp;gt; queryTest){
    
    StringBuilder sb = new StringBuilder();
    queryTest.entrySet().forEach( entry -&amp;gt; {
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
        System.out.println(&quot;\n&quot;);
        
        sb.append(entry.getKey()+&quot; = &quot;+entry.getValue());
    });
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;방법2 - 각 변수에 &amp;nbsp;@RequestParam 붙이기&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;

@RestController // 1. RestController 추가
@RequestMapping(&quot;/demo&quot;) //2. RequestMapping 으로 시작 Path 지정
public class GetAPIController {

    //방법 2 : 각 변수를 명시해주기 (사용해주는 Key 값을 알기위해서)
    @GetMapping(&quot;test2&quot;)
    public String queryTest2(
            @RequestParam String userID,
            @RequestParam String name
    ){
        return userID+&quot; &quot; +name;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;방법3 - 클래스 따로 만들기&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;package com.example.demo.controller;

import com.example.demo.User;
import org.springframework.web.bind.annotation.*;

@RestController // 1. RestController 추가
@RequestMapping(&quot;/demo&quot;) //2. RequestMapping 으로 시작 Path 지정
public class GetAPIController {

    //방법 3: 변수가 많아, 외부 클래스를 따로 만들어 불러오기
    @GetMapping(&quot;test3&quot;)
    public String queryTest3(User user){
        return user.toString();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Talend API tester에 아래와 같이 Query Parameters 를 추가하고 Send 를 하면 성공적으로 값을 받아온 것을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;1062&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wKDDI/btrp0aRLtKK/zCF98C0y7p5lImbSIlNdKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wKDDI/btrp0aRLtKK/zCF98C0y7p5lImbSIlNdKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wKDDI/btrp0aRLtKK/zCF98C0y7p5lImbSIlNdKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwKDDI%2Fbtrp0aRLtKK%2FzCF98C0y7p5lImbSIlNdKK%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;2250&quot; height=&quot;1062&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;1062&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;References&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bambooagile.eu/insights/pros-and-cons-of-using-spring-boot/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bambooagile.eu/insights/pros-and-cons-of-using-spring-boot/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/49&quot;&gt;https://mangkyu.tistory.com/49&lt;/a&gt;&lt;/p&gt;</description>
      <category>Web/Spring</category>
      <category>GETAPI</category>
      <category>getmapping</category>
      <category>PathVariable</category>
      <category>requestparam</category>
      <category>springboot</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/11</guid>
      <comments>https://ellie-yoon.tistory.com/11#entry11comment</comments>
      <pubDate>Fri, 7 Jan 2022 01:56:30 +0900</pubDate>
    </item>
    <item>
      <title>REST API</title>
      <link>https://ellie-yoon.tistory.com/10</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CoH8p/btrpUIB0M1W/vfv9gQWC8y0d7j42fYLkI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CoH8p/btrpUIB0M1W/vfv9gQWC8y0d7j42fYLkI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CoH8p/btrpUIB0M1W/vfv9gQWC8y0d7j42fYLkI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCoH8p%2FbtrpUIB0M1W%2Fvfv9gQWC8y0d7j42fYLkI1%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;1262&quot; height=&quot;470&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&amp;nbsp;REST란 무엇인가?&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST (Representational State Transfer: 자원의 상태 전달)&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 말 그대로 &amp;nbsp;&lt;b&gt;자원(Resource)을 표현(Representation)&lt;/b&gt;으로 구분하여 &lt;b&gt;상태를 주고 받는 것(Transfer-Verb)&lt;/b&gt;으로, &lt;u&gt;웹의 장점을 최대한 활용하기 위해 쓰이는 아키텍쳐 스타일&lt;/u&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API(Application Programing Interface)&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-REST 기반으로 API를 구현한 것.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;RESTful&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- REST의 조건을 잘 갖춘 웹 &lt;b&gt;서비스를&lt;/b&gt; 일컫는 용어로 주로 REST API를 제공하는 웹서비스를 RESTful 하다고 표현합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #dddddd;&quot;&gt;REST의 구성요소&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;(1) 자원(Resource) - URI(Uniform Resouce Identifier)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- &lt;b&gt;특정 자원의 식별자(Identifier)&lt;/b&gt;이다. e.g) '/study/rest_api'&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- &lt;u&gt;자원은 서버에 존재&lt;/u&gt;하며, &lt;u&gt;클라이언트는 URI 로 자원을 지정하여 조작을 서버에 요청&lt;/u&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;size14&quot;&gt;&lt;span style=&quot;color: #666666; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;# URL (Uniform Resource Locator) 와의 차이점은?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-URL은 특정 자원(URI로 식별할 수 있는 자원)에 접근할 수 있는 위치(locator), 즉 파일 식별자를 일컫는다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;e.g.) &lt;a style=&quot;color: #666666;&quot; href=&quot;https://www.ellie-yoon.tistory.com&quot;&gt;https://www.ellie-yoon.tistory.com&lt;/a&gt;/study/rest-api.pdf&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-따라서 URL 은 URI 의 하위 개념이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;(2) 표현(Representation)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 클라이언트가 자원을 지정하여 조작을 서버에 요청하면, 서버는 적절한 응답을 보낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 자원의 형태는 XML, JSON, TEXT 로 다양하다. (JSON이 더 자주 쓰인다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;(3) 행위(Verb) - HTTP Method(GET, POST, PUT, DELETE)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 자원에 행해지는 행위는 &lt;u&gt;HTTP Method&lt;/u&gt;에 의해 일어난다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- HTTP Method 는 &lt;u&gt;GET, POST, PUT, DELETE&lt;/u&gt; 등이 있으며 이를 통해 &lt;u&gt;CRUD (Create, Read, Update, Delete) Operations&lt;/u&gt; 을 할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #dddddd;&quot;&gt;[Resource] URI 설계 원칙&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;계층관계에서 슬래시 구분자(/) 사용&lt;/b&gt; e.g) https://ellie-yoon.tistory.com&lt;span style=&quot;color: #ee2323;&quot;&gt;/&lt;/span&gt;web&lt;span style=&quot;color: #ee2323;&quot;&gt;/&lt;/span&gt;spring&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;소문자 사용&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;언더바(_) 대신 하이픈(-) 사용&lt;/b&gt; e.g) https://ellie-yoon.tistory.com/web/&lt;span style=&quot;color: #ee2323;&quot;&gt;rest-api&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;URI 마지막에는 슬래시 포함하지 않음&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;프로그래밍의 메소드명(행위)는 포함하지 않음&lt;/b&gt; e.g) https://ellie-yoon.tistory.com/&lt;span style=&quot;color: #ee2323;&quot;&gt;web?action='sth'&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;파일 확장자는 URI에 포함하지 않음&lt;/b&gt; e.g) https://ellie-yoon.tistory.com/web/index&lt;span style=&quot;color: #ee2323;&quot;&gt;.jsp&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;명사형을 사용하되, 컨트롤러를 일컫을 때는 예외적으로 동사 허용&lt;/b&gt; e.g) https://ellie-yoon.tistory.com/book/&lt;span style=&quot;color: #ee2323;&quot;&gt;order&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;명사에 단수형보다는 복수형으로 사용&lt;/b&gt; e.g)&amp;nbsp;https://ellie-yoon.tistory.com/web/&lt;span style=&quot;color: #ee2323;&quot;&gt;courses&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;세션 ID 는 포함하지 않음&lt;/b&gt; e.g) https://ellie-yoon.tistory.com/&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;web?&lt;/span&gt;session-id=ellie&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CRUD 기능을 나타내는 이름은 URI에 사용하지 않음&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;caret-color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;일관성있게 서브 도메인을 사용한다.&lt;/b&gt; e.g.) (1)&amp;nbsp;https://ellie-yoon.tistory.com/ (2) https://&lt;span style=&quot;color: #ee2323;&quot;&gt;rest-api&lt;/span&gt;.ellie-yoon.tistory.com/&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;caret-color: #ee2323;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;URI 정의와 설계원칙은 아래 링크에서 자세하게 확인이 가능하다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc3986&quot;&gt;https://datatracker.ietf.org/doc/html/rfc3986&lt;/a&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc3986&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;[Verb] HTTP Method&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 197px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;의미&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 51px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CRUD&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 54px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;멱등성&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 54px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안전성&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 60px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Path&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Variable&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Query &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Parameter&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Data Body&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GET&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;리소스 취득&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;R&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;X&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;POST&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;리소스 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;C&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;X&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;X&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;권장X&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;PUT&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;리소스 갱신&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;C/U&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;X&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;권장X&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELETE&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;리소스 삭제&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;D&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;X&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;X&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HEAD&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;헤더 데이터 취득&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;OPTIONS&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;지원하는 메소드 취득&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;TRACE&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;요청메세지 반환&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CONNECT&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 197px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프록시 동작의 터널 접속으로 변경&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;X&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 60px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 HTTP Method들은 다음과 같은 URI 형태로 사용되어 진다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;GET&lt;/b&gt;: 사용자 정보 요청(READ)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;http://ellie.com/user/1&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;POST&lt;/b&gt;: 사용자 정보 생성(CREATE)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;http://ellie.com/user&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;PUT&lt;/b&gt;: 사용자 정보 생성 및 업데이트(CREATE OR UPDATE)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;http://ellie.com/user/1&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;DELETE&lt;/b&gt;: 사용자 정보 삭제 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;http://ellie.com/user/1&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API 특징&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;(1) Server-Client (서버-클라이언트)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;: 서버와 클라이언트의 독립적인 구조로 서로간의 의존성을 낮춤.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;(2) Stateless (무상태성)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;: 클라이언트의 &amp;nbsp;상태정보를 따로 저장하지 않고 (세션 정보나 쿠키를 별도 저장 관리 X) 서버로 들어오는 요청만 단순 처리함.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;(3) Cacheable (캐시 처리 가능)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;: 클라이언트는 서버의 응답을 임시저장(Cache)하고, Cache를 통한 응답의 재사용을 하여 서버의 부하를 낮춤. Last-Modified 태그나 E-Tag 태그 를 사용하여 HTTP의 캐싱 기능 사용가능.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;(4) Layered System (계층형 구조)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;: &amp;nbsp;REST 서버는 다중 계층으로 구성이 가능하여, 구조상으로 유연하며 확장가능함.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;(5) Uniform Interface (인터페이스 일관성)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;: URI로 지정 자원의 조작을 통일하고, 한정적인 인터페이스로 수행하여&amp;nbsp;일관성을 유지 및 아키텍처를 단순화가능.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;(6) Code on Demand (Optional)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;: 옵셔널한 특징, 서버로 부터 자바 애플릿, 자바스크립트, 플래시 등 특정 기능을 Client 가 전달받아 실행하는 것&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;References&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://fastcampus.co.kr&quot;&gt;https://fastcampus.co.kr&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://meetup.toast.com/posts/92&quot;&gt;https://meetup.toast.com/posts/92&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html&lt;/a&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;</description>
      <category>Web/Web 개론</category>
      <category>HTTPMethod</category>
      <category>rest</category>
      <category>REST API</category>
      <category>RESTful</category>
      <category>URI</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/10</guid>
      <comments>https://ellie-yoon.tistory.com/10#entry10comment</comments>
      <pubDate>Thu, 6 Jan 2022 22:12:34 +0900</pubDate>
    </item>
    <item>
      <title>HTTP 상태코드</title>
      <link>https://ellie-yoon.tistory.com/8</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;HTTP 상태코드 (응답코드)&lt;/b&gt;&amp;nbsp;: 클라이언트의 요청 (Request)에 대한 응답(Response)에 대한 상태를 코드로 알려주는 것&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;상태코드는 1부터 5까지로 구성되어 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 108px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 7.209302325581396%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;Response &lt;/b&gt;&lt;br /&gt;&lt;b&gt;Code Syntax&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.534883720930232%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;Response Code&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.58914728682171%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 7.209302325581396%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;1XX&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.534883720930232%; height: 18px; text-align: center;&quot;&gt;Informational&lt;/td&gt;
&lt;td style=&quot;width: 16.58914728682171%; height: 18px;&quot;&gt;서버가 요청을 받아 처리중인 상태 (어떤 형태의 문제도 X)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 7.209302325581396%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;2XX&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.534883720930232%; height: 18px; text-align: center;&quot;&gt;Success&lt;/td&gt;
&lt;td style=&quot;width: 16.58914728682171%; height: 18px;&quot;&gt;요청한 작업이 성공적으로 처리됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 7.209302325581396%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;3XX&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.534883720930232%; height: 18px; text-align: center;&quot;&gt;Redirection&lt;/td&gt;
&lt;td style=&quot;width: 16.58914728682171%; height: 18px;&quot;&gt;요청을 처리하기 위해 추가 동작이 필요함&lt;br /&gt;(Redirection: 요청된 위치에서 리소스를 더 이상 사용할 수 없음을 알림)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 7.209302325581396%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;4XX&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.534883720930232%; height: 18px; text-align: center;&quot;&gt;Client Error&lt;/td&gt;
&lt;td style=&quot;width: 16.58914728682171%; height: 18px;&quot;&gt;클라이언트의 요청에 오류가 있는 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 7.209302325581396%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;5XX&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.534883720930232%; height: 18px; text-align: center;&quot;&gt;Server Error&lt;/td&gt;
&lt;td style=&quot;width: 16.58914728682171%; height: 18px;&quot;&gt;서버가 오류가 발생했거나 요청을 수행할 수 없는 상태&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #dddddd;&quot;&gt;&lt;b&gt;1XX ( Informational : 조건부 응답) &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;: 클라이언트의 요청을 처리중인 상태&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 100: Continue &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버에 클라이언트의 요청의 시작 부분이 받아들여졌으며 나머지를 기다리고 있는 상태.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 101: Switching Protocols&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트가 서버에 프로토콜 전환을 요청했을 때, 서버가 이를 승인한 경우(변경 중임을 알려주는 상태코드).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 102: Processing &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버가 요청을 수신하고 처리중인 상태라 아직 응답을 할 수 없는 상태.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 103: Early Hints&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;Link 헤더와 함께 사용&lt;/u&gt;되어 서버가 응답을 준비하는 동안 &lt;u&gt;클라이언트가 사전 로딩(Pre-loading)을 할 수 있도록&lt;/u&gt; 하는 응답코드.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;2XX (Success: &amp;nbsp;성공)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&amp;nbsp;: 클라이언트의 요청을 수신하여 성공적으로 처리한 상태&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 200: OK &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청 정상 처리됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 201: Created&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청이 정상 처리되어 리소스가 만들어짐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 202: Accepted&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청은 승인됐지만, 처리되지는 않은 상태.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 204: No Content &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청은 정상 처리되었지만 응답에 본문(Body)가 없어 돌려줄 리소스가 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 처리 후 클라이언트에게 정보를 보낼 필요가 없는 경우에 사용됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5) 206: Partial Content&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 리소스의 &lt;u&gt;일부분만 제공&lt;/u&gt;되는 경우.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;범위(range)가 지정된 요청&lt;/u&gt;일 경우에 사용된다. 예를 들면 클라이언트에서 다운로드 범위를 지정한 경우에 그 부분만 제공하기 위해 사용됨.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;3XX (Redirection: 리디렉션 완료) &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;: 요청을 처리하는데 추가동작이 필요&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 300: Multiple Choices &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트의 요청에 대해 &lt;u&gt;서버에서 여러 개의 응답&lt;/u&gt;이 있을 때, 사용자 에이전트 또는 사용자는 하나의 응답을 선택해야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 응답을 선택하는 방법은 표준화되지 않아 잘사용되지 않음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 301: Moved Permanently&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청한 리소스의 &lt;u&gt;URI가 영구적으로 변경&lt;/u&gt;됨 (새 URI를 사용해야함).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;리다이렉트시, HTTP 메소드를 GET로 바꿔서 전송함.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 302: Found&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청한 리소스의 &lt;u&gt;URI가 일시적&lt;/u&gt;으로 변경되었기에, 클라이언트는&amp;nbsp;&lt;u&gt;향후 요청을 반드시 동일한 URI로 해야함&lt;/u&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;리다이렉트시, HTTP 메소드를 GET로 바꿔서 전송함.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 303: See Other&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;요청한 리소스가 다른 URI&lt;/u&gt;에 있어서&lt;u&gt; 별도의 GET 요청&lt;/u&gt;을 해서 얻어야 하는 경우, 서버가 클라이언트로 직접 보내는 응답임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5) 304: Not Modified&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;캐시 목적&lt;/u&gt;으로 사용됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마지막 요청 이후에 리소스가 수정되지 않음을 알려주며, 클라이언트는 &lt;u&gt;응답의 캐시된 버전 (로컬 캐시 리소스)를 사용할 수 있음.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 리디렉션과는 관계없는 처리를 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6) 307: Temporary Redirect&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 302 (요청한 리소스의 &lt;u&gt;URI가 일시적으로 변경&lt;/u&gt;)와 같지만, 리다이렉트시 &lt;u&gt;HTTP 메소드가 유지&lt;/u&gt;됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e.g.) POST로 요청했다면, 리다이렉트 시에도 POST 로 요청해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7) 308: Permanent Redirect&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 301 (요청한 리소스의 &lt;u&gt;URI가 영구적으로 변경됨&lt;/u&gt;)와 같지만, 리다이렉트시 &lt;u&gt;HTTP 메소드가 유지됨&lt;/u&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e.g.) POST로 요청했다면, 리다이렉트 시에도 POST 로 요청해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Permanent Status&lt;/b&gt;&lt;/span&gt; -&lt;u&gt; 301과 308&lt;/u&gt;은 상태는 유사하지만, 301은 리다이렉트시, HTTP 메소드를 GET 으로 바꿔서 전송하고, 308은 첫 HTTP 메소드를 리다이렉트시도 그대로(유지) 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Temporary Status&lt;/b&gt; &lt;/span&gt;- &lt;u&gt;302와 307&lt;/u&gt;은 상태는 유사하지만 302은 리다이렉트시, HTTP 메소드를 GET 으로 바꿔서 전송하고, 307은 첫 HTTP 메소드를 리다이렉트시도 그대로(유지) 사용한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;4XX (Client Error: 클라이언트 에러) &lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;: 클라이언트 측의 문제로 요청을 처리할 수 없는 상태&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 400: Bad Request&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트 쪽의 에러로 서버가 요청을 처리할 수 없는 상태 (잘못된 형식의 요청 구문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 401: Unauthorised&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unautorised 로 표기되어 있지만 Unauthentication 이 더 이해하기 가까운 표현!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청에 &lt;u&gt;사용자 인증이 필요&lt;/u&gt;한 경우 (로그인 페이지 등).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 응답에는 요청된 리소스에 적용할 수 있는 문제가 포함된 WWW-Authenticate 필드가 포함되어야 함 ( 어느 인증 방식을 사용할 것인지).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단순한 클라이언트 권한이 없는 경우는 403 Forbidden 사용해야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 403: Forbidden&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트가 &lt;u&gt;접근할 권한이 없어, 서버가 요청을 거부&lt;/u&gt;하는 경우.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버는 요청을 이해했고 클라이언트를 알고 있음, 단순히 접근권한 불충분으로 승인을 거부한 경우.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 404: Not Found&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청한 리소스를 찾을 수 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5) 405: Method Not Allowed&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트가 &lt;u&gt;허용되지 않는 HTTP 메서드를 요청&lt;/u&gt;했을 경우.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- e.g) POST 요청받는 서버에 GET 으로 보내는 경우.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6) 407: Proxy Authentication Required&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 401과 비슷하지만, &lt;u&gt;클라이언트가 프록시에 의해 완료된 인증이 필요한 경우&lt;/u&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7) 408: Request Timeout&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청 시간이 초과된 경우.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8) 409: Conflict&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요청이 서버의 상태와 충돌한 경우.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;5XX (Server Error: 서버 에러) &lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;: 서버가 요청을 수행하는데 문제가 발생한 상태&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 500: Internal Server Error&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버가 요청 처리 중에 발생한 오류.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 502: Bad Gateway&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버가 &lt;u&gt;게이트웨이에서 잘못된 응답을 받은 경우&lt;/u&gt; (다른 서버로 부터 유효하지 않은 응답을 수신한 경우).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 503: Service Unavailable&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버가 요청을 처리할 수 없는 상태.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버 과부화나 유지보수중의 이유로 요청 처리 불가함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 504: Gateway Timeout&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 게이트웨이 역할을 하는 서버가 연결된 다른 서버로 부터&amp;nbsp;응답시간이 초과된 상태.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버 간의 네트워크 오류이거나 실제 서버의 문제일 가능성이 큼.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5) 505: HTTP Version Not Supported&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;요청에 사용된 HTTP 버전이 해당 서버에서 지원이 안되는 경우&lt;/u&gt;.&lt;/p&gt;</description>
      <category>Web/Web 개론</category>
      <category>http</category>
      <category>HTTP Response Codes</category>
      <category>http status</category>
      <category>HTTP Status Codes</category>
      <category>HTTP상태코드</category>
      <category>http응답코드</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/8</guid>
      <comments>https://ellie-yoon.tistory.com/8#entry8comment</comments>
      <pubDate>Wed, 5 Jan 2022 01:49:18 +0900</pubDate>
    </item>
    <item>
      <title>Swift 3-2장 반복문 (for-in, while, repeat-while)</title>
      <link>https://ellie-yoon.tistory.com/7</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 Swift의 반복문에 대해서 다뤄보겠다! :)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;반복문은 말그대로 반복적으로 해당되는 코드블럭을 실행하게 만드는 구문이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Swift 의 반복문 키워드는 대표적으로 &lt;b&gt;for-in, while, repeat-while&lt;/b&gt; 이 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하나씩 살펴보도록 하자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;1. &amp;nbsp;for - in&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;for 상수 초기식 ; 조건식 ; 변화식 {&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;코드 블럭&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;} &lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;에 익숙한 사람이라면 자연스럽게&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1486&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvVd2z/btro38ggP4L/OJcEbxJktGh9ikhkDUsw4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvVd2z/btro38ggP4L/OJcEbxJktGh9ikhkDUsw4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvVd2z/btro38ggP4L/OJcEbxJktGh9ikhkDUsw4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvVd2z%2Fbtro38ggP4L%2FOJcEbxJktGh9ikhkDUsw4K%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;1486&quot; height=&quot;124&quot; data-origin-width=&quot;1486&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런식의 코드를 쓰겠지만, &quot;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;이런 C 스타일의 구문은 siwft3에서 지워졌다.&lt;/i&gt;&lt;/span&gt;&quot; 라는 에러메세지로 알 수 있듯이,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;더 이상 저런 형식의 for문은 사용할 수가 없다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;그 대신에 Swift 에서는 for-in 구문을 써주면 된다!&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;for - in 은 in 때문에 생소할 수 있을 수 있고, 아마 파이썬을 한 사람이면 익숙할 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어려울 것 없이 순회대상 또는 범위가 있는 코드에 써주면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;구조는 다음과 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Swift 에서는&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;for &amp;lt;값&amp;gt; in &amp;lt;순회범위&amp;gt; {&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;코드블럭&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;i&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;사용예제를 살펴보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S6K0m/btroWEfUBGO/Q1Xl0AfHMNATXh3ajnRbA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S6K0m/btroWEfUBGO/Q1Xl0AfHMNATXh3ajnRbA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S6K0m/btroWEfUBGO/Q1Xl0AfHMNATXh3ajnRbA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS6K0m%2FbtroWEfUBGO%2FQ1Xl0AfHMNATXh3ajnRbA0%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;1052&quot; height=&quot;216&quot; data-origin-width=&quot;1052&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;numbers 라는 배열이 있고 i 는 그 배열을 순회하며 출력한다.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 &lt;span style=&quot;color: #ee2323;&quot;&gt;결과값은 1,2,3,4,5&lt;/span&gt; 차례대로 출력된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;특정한 조건을 달고 싶다면 &lt;span style=&quot;color: #ee2323;&quot;&gt;조건문 if&lt;/span&gt;를 넣어주어도 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpcvCZ/btro14ekNWB/KaXWG04Yw7kFhu5Ouf2MpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpcvCZ/btro14ekNWB/KaXWG04Yw7kFhu5Ouf2MpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpcvCZ/btro14ekNWB/KaXWG04Yw7kFhu5Ouf2MpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpcvCZ%2Fbtro14ekNWB%2FKaXWG04Yw7kFhu5Ouf2MpK%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;1050&quot; height=&quot;210&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;i는 위 코드 예제처럼 배열을 순회한다. 다만 달라진 점은&lt;span style=&quot;color: #ee2323;&quot;&gt; if문의 등장으로 i가 2로 나눠 나머지가 0일 때, 즉 짝수일때만 출력&lt;/span&gt;하라는 조건식을 써주었다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결과값은 당연히 배열 내의 &lt;span style=&quot;color: #ee2323;&quot;&gt;짝수인 2,4 가 출력된다&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;마지막 for-in 예제&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTy5i9/btro8v9OHEz/dr4o6wgr4mkWEYSfDhJfoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTy5i9/btro8v9OHEz/dr4o6wgr4mkWEYSfDhJfoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTy5i9/btro8v9OHEz/dr4o6wgr4mkWEYSfDhJfoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTy5i9%2Fbtro8v9OHEz%2Fdr4o6wgr4mkWEYSfDhJfoK%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;1050&quot; height=&quot;180&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이번에 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;in &amp;lt;범위대상&amp;gt;&lt;/span&gt; 을 직접 써줬다. &lt;span style=&quot;color: #ee2323;&quot;&gt;...의 사용으로 범위는 i &amp;gt;= 1 &amp;amp;&amp;amp; i&amp;lt;=3 (1 이상 3이하) 인 [1,2,3]&lt;/span&gt;이 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;result 의 초기값은 1로 설정하고 i의 값을 루프를 돌때마다 result에 곱해준다&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;결과값은 1,2,6&lt;/span&gt; 이 될 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;2. while&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;while 은&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;while 조건식 {&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;코드블럭&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;}&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;의 구조로, 조건식에 맞다면 해당 코드블럭을 계속 실행한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;예제를 들어보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crWE7M/btrpdrr2veW/Ktq47XEjqwpmWspBPKlDfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crWE7M/btrpdrr2veW/Ktq47XEjqwpmWspBPKlDfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crWE7M/btrpdrr2veW/Ktq47XEjqwpmWspBPKlDfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrWE7M%2Fbtrpdrr2veW%2FKtq47XEjqwpmWspBPKlDfk%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;1050&quot; height=&quot;212&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;count = 0&lt;/span&gt; 으로 초기화 되어있고, &lt;span style=&quot;color: #ee2323;&quot;&gt;그 값이 50보다 작다면 계속 1씩 증가&lt;/span&gt;할 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;count 는 0 부터 49까지 점차 값이 증가할 것이고, &lt;span style=&quot;color: #ee2323;&quot;&gt;49일때 까지만 조건식을 충당해 코드 블럭내로 들어가고 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;그 안에서 1이 더해진 다음 50이 되어 while 루프 밖을 빠져나온다&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;따&lt;span style=&quot;color: #333333;&quot;&gt;라서 루프 밖에서 50이라는 결과값이 출력되는 것!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다음으로 이 코드 구문을 &lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;repeat-while&lt;/span&gt; &lt;/b&gt;을 이용하여 써보겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;3. repeat-while&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;repeat - while 문은 do - while로 이해하면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;repeat {&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;실행 구문&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;} while(조건식)&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;의 구조를 가지고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6qzCU/btrpcMiT80h/9zi6aU5WoN6AKaVOykqQUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6qzCU/btrpcMiT80h/9zi6aU5WoN6AKaVOykqQUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6qzCU/btrpcMiT80h/9zi6aU5WoN6AKaVOykqQUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6qzCU%2FbtrpcMiT80h%2F9zi6aU5WoN6AKaVOykqQUk%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;1050&quot; height=&quot;216&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;컴파일러는 repeat 내를 먼저 실행하고 while의 조건식이 맞는지 비교한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결과값은 50이 출력될 것이다. (count2 가 49일때 1이 더해져 50이 되기 때문에 조건식에 맞지 않아 해당 루프를 빠져나오기 때문!)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;마지막 repeat-while 예제를 살펴보겠다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1씩 증가하는 i를 total 에 더해주는 구문이다. 다만 여기서 조건은 i 가 10 보다 작을 때 까지기 때문에&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;i 는 초기값인 0 부터 9까지 증가하며 그 값을 total 에 더해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결과값은 아래와 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b71laV/btrpcNhNRj7/LrIlhwk38HMT33phSTC2a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b71laV/btrpcNhNRj7/LrIlhwk38HMT33phSTC2a0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b71laV/btrpcNhNRj7/LrIlhwk38HMT33phSTC2a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb71laV%2FbtrpcNhNRj7%2FLrIlhwk38HMT33phSTC2a0%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;1050&quot; height=&quot;644&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 이렇게 Swift 의 반복문에 대해 다뤄보았다. &amp;nbsp;다음 파트에서는 옵셔널과 옵셔널 바인딩을 해야겠다!&lt;/p&gt;</description>
      <category>iOS</category>
      <category>For-in</category>
      <category>Repeat-while</category>
      <category>Swift반복문</category>
      <category>while</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/7</guid>
      <comments>https://ellie-yoon.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 28 Dec 2021 15:32:28 +0900</pubDate>
    </item>
    <item>
      <title>Swift 3-1장 - 조건문 (if, switch, guard)</title>
      <link>https://ellie-yoon.tistory.com/6</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;앞서 함수를 배웠으니 이쯤되면 등장해야하는 조건문에 대해서 알아보자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; background-color: #f6e199;&quot;&gt;1. 조건문 (if, switch, guard)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;주어진 조건에 따라 명령을 수행하는 문장, 즉 조건의 참과 거짓을 판별하여 참일 때 수행된다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;-&lt;b&gt; Swift 에서의 조건문 :&lt;span style=&quot;background-color: #f6e199;&quot;&gt; if, switch, guard&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하나씩 사용법을 알아보도록 하자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;&lt;b&gt;(1) if&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;swift 의 if문은 다음과 같은 형식으로 써주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YMYwN/btrnWR0qhN9/NlJjqtP7HCisogVPKHAhmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YMYwN/btrnWR0qhN9/NlJjqtP7HCisogVPKHAhmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YMYwN/btrnWR0qhN9/NlJjqtP7HCisogVPKHAhmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYMYwN%2FbtrnWR0qhN9%2FNlJjqtP7HCisogVPKHAhmK%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;202&quot; height=&quot;192&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;예제 코드로는 홀수와 짝수 판별식을 만들어보자&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NiAjv/btrnR2I86iK/ol7m6mllTG9llzLHjsJTD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NiAjv/btrnR2I86iK/ol7m6mllTG9llzLHjsJTD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NiAjv/btrnR2I86iK/ol7m6mllTG9llzLHjsJTD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNiAjv%2FbtrnR2I86iK%2Fol7m6mllTG9llzLHjsJTD0%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;422&quot; height=&quot;297&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;277&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;if 문의 조건이 성립한다면 즉, 2로 나눈 나머지가 0 이라면 &quot;짝수입니다.&quot; 를 출력할 것이고, 그렇지 않다면 (else) 다음 else 구문안의 문장을 출력할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 num이 3일때: if 조건문 성립 X -&amp;gt; else 문으로 이동 후 실행&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;num이 6일때: if 조건문 성립 O, 실행&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;만약에 조건이 3개 이상이라면?&lt;/b&gt;&lt;/span&gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;else if&lt;/span&gt; 를 사용해주면 된다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;myMark&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;조건 1: 점수가 90 이상이면 A&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;조건 2: 80-90 사이면 B&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;조건 3: 둘 다 아니면 C&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;위 같은 경우는 switch 문으로 하는 게 낫겠지만 좋은 예시가 생각나지 않으니 이걸로 해보자&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZgQZd/btrnZocwK41/2tAYRCrTRpmDW4tWsaW8wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZgQZd/btrnZocwK41/2tAYRCrTRpmDW4tWsaW8wK/img.png&quot; data-alt=&quot;if ~ else if ~ else&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZgQZd/btrnZocwK41/2tAYRCrTRpmDW4tWsaW8wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZgQZd%2FbtrnZocwK41%2F2tAYRCrTRpmDW4tWsaW8wK%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;565&quot; height=&quot;266&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;if ~ else if ~ else&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&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;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;(2) switch&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEZCmq/btroaMkCqvI/8jptbbGD1hQiQYkcLX4VqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEZCmq/btroaMkCqvI/8jptbbGD1hQiQYkcLX4VqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEZCmq/btroaMkCqvI/8jptbbGD1hQiQYkcLX4VqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEZCmq%2FbtroaMkCqvI%2F8jptbbGD1hQiQYkcLX4VqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;250&quot; height=&quot;159&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;switch 는 입력변수에 매칭되는 case 가 실행된다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- 반복적으로 if, else - if 를 써야되는 상황이라면 switch 문으로 써주는게 가독성이 더 좋고 적합할 때가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;위에서 if 문에서 사용한 &lt;b&gt;myMark를 좀 더 세부화시켜서 switch 구문&lt;/b&gt;으로 바꿔보자&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;myMark&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;조건 1:&lt;/b&gt; 점수가 90-100 사이면 A&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;조건 2&lt;/b&gt;: 80-90 사이면 B&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;조건 3&lt;/b&gt;: 70-80 사이면 C&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;조건 4&lt;/b&gt;: 60-70 사이면 D&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;조건 5&lt;/b&gt;: 60 미만이면 F&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvVkWZ/btrn0k9hwpz/6dtjmZPziUmNUNEiz5yIl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvVkWZ/btrn0k9hwpz/6dtjmZPziUmNUNEiz5yIl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvVkWZ/btrn0k9hwpz/6dtjmZPziUmNUNEiz5yIl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvVkWZ%2Fbtrn0k9hwpz%2F6dtjmZPziUmNUNEiz5yIl1%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;526&quot; height=&quot;292&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mark 가 입력변수&lt;/b&gt;이기 때문에 따로 조건에 맞는 case 구문을 실행한다. &lt;b&gt;사이에 있는 값은 ... 으로 표현한다&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;하지만 위의 if 조건절처럼 mark &amp;gt; 90 이런식으로 쓸 수 있을까?&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blq3sc/btrnWSrVCRm/tBqwQGbNaM2cHlCrHn5ZBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blq3sc/btrnWSrVCRm/tBqwQGbNaM2cHlCrHn5ZBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blq3sc/btrnWSrVCRm/tBqwQGbNaM2cHlCrHn5ZBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblq3sc%2FbtrnWSrVCRm%2FtBqwQGbNaM2cHlCrHn5ZBk%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;798&quot; height=&quot;98&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;바로 다음과 같은 &lt;span style=&quot;color: #ee2323;&quot;&gt;에러&lt;/span&gt;가 발생한다&lt;/b&gt;. &quot; &lt;span style=&quot;color: #ee2323;&quot;&gt;Expression pattern of type 'Bool' cannot match values f type 'Int'&lt;/span&gt; &quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;위 switch 구문에서 입력변수의 데이터타입은 Int이다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;따라서 매칭되는 case 를 찾기 위해서는 case 조건부분이 같은 Int 이어야 한다는 것이다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하지만 mark &amp;gt;= 90 이 부분은 참과 거짓으로 판단되는 Bool 타입이기에 다음과 같은 에러가 발생하는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그래서 굳이 비교등호가 필요하다면 다음과 같이 써주면되겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;오류 해결 - 1번 방법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lmykk/btrnVaz9xur/RQBG4MvTJK2TDp9pG0sdl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lmykk/btrnVaz9xur/RQBG4MvTJK2TDp9pG0sdl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lmykk/btrnVaz9xur/RQBG4MvTJK2TDp9pG0sdl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flmykk%2FbtrnVaz9xur%2FRQBG4MvTJK2TDp9pG0sdl0%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;710&quot; height=&quot;218&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1번 방법이다. boolean의 case 를 써야된다면, 입력 변수 값을 같은 boolean으로 변경해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;switch를 실행시켜야 하기에 당연히 true 를 써주고, 아래 case 수식을 아까 쓰지 못한 등호를 사용하여 완성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하지만 보기에도 좋은 코드는 아닌 듯하니 참고만 하자!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;오류 해결 - 2번 방법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lecmu/btrn1gyA4rz/kKF17bOvf3UIp7WYOBOjKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lecmu/btrn1gyA4rz/kKF17bOvf3UIp7WYOBOjKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lecmu/btrn1gyA4rz/kKF17bOvf3UIp7WYOBOjKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flecmu%2Fbtrn1gyA4rz%2FkKF17bOvf3UIp7WYOBOjKK%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;648&quot; height=&quot;190&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span&gt;입력 변수 타입을 바꾸지 않겠다면 &lt;b&gt;case _ where 을 추천&lt;/b&gt;한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;혹시 sql 을 공부했었던 사람이면 눈치챘겠지만 where 은 뒤에 조건식을 데리고 다닌다. 그래서 데이터베이스에서 특정 데이터 값을 찾을 때 where FirstName = 'Ellie' 이런식으로 필터링해서 조건에 맞는 데이터 값을 찾는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이처럼 mark의 조건식(where)이 충족한다면 해당 case 는 실행될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #f6e199;&quot;&gt;(3) guard&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;- guard 는 우리가 아는 뜻 그대로 무언가를 막는 것이다. 따라서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;guard 문은 함수 내에서 입력값의 오류로 프로그램이 종료되는 것을 막기위해 사용해준다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Q: 그렇다면 잘못된 값일 때의 처리를 어떻게 해줄까?&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;A&lt;/b&gt;: &lt;b&gt;else 구문과 함께 return , throw, break 등&lt;/b&gt; 으로 함수의 실행을 막거나 함수를 나가게 하면된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;guard - else 는 항상 한 세트&lt;/b&gt;로 다니니 기억하도록 하자&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;guard 예시코드&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAnQ4N/btrob72NiaR/DpUnJTa02gkIexAaZRTCIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAnQ4N/btrob72NiaR/DpUnJTa02gkIexAaZRTCIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAnQ4N/btrob72NiaR/DpUnJTa02gkIexAaZRTCIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAnQ4N%2Fbtrob72NiaR%2FDpUnJTa02gkIexAaZRTCIk%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;665&quot; height=&quot;143&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;input 앞에 guard 가 붙어있으므로 해당 함수는 input 이 1 일때만 실행된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;결과에서 알 수 있듯이 1을 입력하면 함수가 실행이 됐지만, 2를 입력하니 return 되어 결과가 없는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Q: 보면서 if 같다고 생각하는 사람이 많을 것이다. 둘의 차이는?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;A:&lt;/b&gt; if와 다른점은 코드블럭의 수행을 막기위해 if는 부정의 조건식을 쓰지만, g&lt;u&gt;uard 는 수행에 필요한 조건을 그대로 나타내어 훨씬 가독성이 좋습니다&lt;/u&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Q: 여러식의 조건문을 쓰고 싶을 때는?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;A&lt;/b&gt;: Guard 문은 쉼표(,)로 구분하여 여러 조건을 쓸 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;여러식의 조건문을 쓴 간단한 예시 코드는 다음과 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;로그인을 하려면 아이디와 비밀번호 두 개의 필드가 입력되어야만 다음으로 진행이 가능하다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;필드값이 비어있지 않은 경우, 즉 != nil일 경우에 guard 문을 붙이고, 비어있을 경우 (else) 에는 return 을 메세지 출력과 함께 return 을 시켜주자.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&amp;nbsp;guard로 사용자 아이디와 비밀번호 필드값 입력 확인하기&lt;/i&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/65RHu/btrodArKb9Y/9QlmvILs6XLJnYQknZPIc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/65RHu/btrodArKb9Y/9QlmvILs6XLJnYQknZPIc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/65RHu/btrodArKb9Y/9QlmvILs6XLJnYQknZPIc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F65RHu%2FbtrodArKb9Y%2F9QlmvILs6XLJnYQknZPIc1%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;1532&quot; height=&quot;524&quot; data-origin-width=&quot;1532&quot; data-origin-height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 테스트한 부분을 보면 아이디와 비밀번호가 nil 일 때는 결과값으로 else 문의 코드블럭에 있던 &quot;아이디와 비밀번호가 입력되지 않았습니다. &quot; 가 출력이 되고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;아이디와 비밀번호에 문자열을 입력해준 후 실행하면 guard 문을 통과하여 성공적으로 &quot;아이디와 비밀번호가 입력되었습니다. &quot; 가 출력되는 것이다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘의 조건문 끝! 사실 반복문까지 다루고 싶었지만 포스트가 너무 길어질까봐 다음장에서 하도록 하겠다!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS</category>
      <category>guard</category>
      <category>IF</category>
      <category>swift조건문</category>
      <category>switch</category>
      <author>Ellie_yoon</author>
      <guid isPermaLink="true">https://ellie-yoon.tistory.com/6</guid>
      <comments>https://ellie-yoon.tistory.com/6#entry6comment</comments>
      <pubDate>Mon, 20 Dec 2021 13:57:17 +0900</pubDate>
    </item>
  </channel>
</rss>