<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>웹 개발 꿈나무</title>
    <link>https://web-developer-backend.tistory.com/</link>
    <description>잠들기 전 잠깐 복습하기 위해 만든 블로그</description>
    <language>ko</language>
    <pubDate>Fri, 21 Aug 2026 12:54:48 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>하루인생</managingEditor>
    <item>
      <title>스프링 쇼핑몰 개인 프로젝트 최종 시연 영상</title>
      <link>https://web-developer-backend.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2021.04.21~ 2021.06.02&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;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&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;개발환경 : eclipse, Jquery, apache&amp;nbsp;tomcat9.0.41(was)&lt;br /&gt;Spring framework(5.0.7), JAVA(1.8),&amp;nbsp; Maven tool,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML5, CSS3,,bootstrap 4.4.1,&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysql 5.7.21,&lt;span&gt;&amp;nbsp;&lt;/span&gt;mybatis&amp;nbsp;3.4.6&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃 허브 주소 :&amp;nbsp;&lt;a href=&quot;https://github.com/souk2109/shoppingmall&quot;&gt;https://github.com/souk2109/shoppingmall&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1622815519384&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;souk2109/shoppingmall&quot; data-og-description=&quot;Contribute to souk2109/shoppingmall development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/souk2109/shoppingmall&quot; data-og-url=&quot;https://github.com/souk2109/shoppingmall&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CfTL6/hyKtdeSSvE/57PbU7J5zkO2LSAKK3K9Ak/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/souk2109/shoppingmall&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/souk2109/shoppingmall&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CfTL6/hyKtdeSSvE/57PbU7J5zkO2LSAKK3K9Ak/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;souk2109/shoppingmall&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to souk2109/shoppingmall development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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>Spring/시연영상</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/67</guid>
      <comments>https://web-developer-backend.tistory.com/67#entry67comment</comments>
      <pubDate>Fri, 4 Jun 2021 23:05:43 +0900</pubDate>
    </item>
    <item>
      <title>mysql 한글 설정하기</title>
      <link>https://web-developer-backend.tistory.com/66</link>
      <description>&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://getinthere.tistory.com/17&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://getinthere.tistory.com/17&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1622361370787&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;스프링부트 with JPA 블로그 3강 - MySQL 한글 설정 및 연결&quot; data-og-description=&quot;1. MySQL 한글 설정 my.ini 파일 MySQL 재시작 [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' init_conn..&quot; data-og-host=&quot;getinthere.tistory.com&quot; data-og-source-url=&quot;https://getinthere.tistory.com/17&quot; data-og-url=&quot;https://getinthere.tistory.com/17&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ckokvj/hyKo3wrbfW/DEkK6m0RmNWBwt33dNmiVK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gwKTR/hyKnjASNwt/o2wC8HjGkJvJTIhZFHweq0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://getinthere.tistory.com/17&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://getinthere.tistory.com/17&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ckokvj/hyKo3wrbfW/DEkK6m0RmNWBwt33dNmiVK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gwKTR/hyKnjASNwt/o2wC8HjGkJvJTIhZFHweq0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;스프링부트 with JPA 블로그 3강 - MySQL 한글 설정 및 연결&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. MySQL 한글 설정 my.ini 파일 MySQL 재시작 [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' init_conn..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;getinthere.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>Mysql</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/66</guid>
      <comments>https://web-developer-backend.tistory.com/66#entry66comment</comments>
      <pubDate>Sun, 30 May 2021 16:56:21 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 프로젝트 생성하기</title>
      <link>https://web-developer-backend.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;586&quot; width=&quot;521&quot; height=&quot;382&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L8dlc/btq52TWIJK3/MOTFrFbKCE4ohX2GD3vt6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L8dlc/btq52TWIJK3/MOTFrFbKCE4ohX2GD3vt6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L8dlc/btq52TWIJK3/MOTFrFbKCE4ohX2GD3vt6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL8dlc%2Fbtq52TWIJK3%2FMOTFrFbKCE4ohX2GD3vt6k%2Fimg.png&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;586&quot; width=&quot;521&quot; height=&quot;382&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;774&quot; width=&quot;469&quot; height=&quot;612&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDYFM9/btq52iWXU0f/mzU6okSnFZUPOL2YHAfIiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDYFM9/btq52iWXU0f/mzU6okSnFZUPOL2YHAfIiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDYFM9/btq52iWXU0f/mzU6okSnFZUPOL2YHAfIiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDYFM9%2Fbtq52iWXU0f%2FmzU6okSnFZUPOL2YHAfIiK%2Fimg.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;774&quot; width=&quot;469&quot; height=&quot;612&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;Spring Boot DebTools : 파일이 변경되었을 때 자동으로 재시작 해주는 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Web : 어노테이션을 사용가능하게 해줌. 톰캣을 기본으로 내장하고 있음.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;591&quot; data-origin-height=&quot;776&quot; width=&quot;432&quot; height=&quot;567&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDSETw/btq54UUKMFc/sXCpPptnBIvKsvL7dpS3o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDSETw/btq54UUKMFc/sXCpPptnBIvKsvL7dpS3o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDSETw/btq54UUKMFc/sXCpPptnBIvKsvL7dpS3o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDSETw%2Fbtq54UUKMFc%2FsXCpPptnBIvKsvL7dpS3o0%2Fimg.png&quot; data-origin-width=&quot;591&quot; data-origin-height=&quot;776&quot; width=&quot;432&quot; height=&quot;567&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;추가 라이브러리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;lt;dependency&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.springframework.security&amp;lt;/groupId&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;spring-security-taglibs&amp;lt;/artifactId&amp;gt; &lt;br /&gt;&amp;lt;/dependency&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;jasper : src에 넣어둔 jsp파일을 읽을 수 있게 해준다.&lt;br /&gt;&amp;lt;dependency&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.tomcat.embed&amp;lt;/groupId&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;tomcat-embed-jasper&amp;lt;/artifactId&amp;gt; &lt;br /&gt;&amp;lt;/dependency&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;lt;dependency&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;jstl&amp;lt;/artifactId&amp;gt; &lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/65</guid>
      <comments>https://web-developer-backend.tistory.com/65#entry65comment</comments>
      <pubDate>Sun, 30 May 2021 16:46:05 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 설치하기 (STS설치)</title>
      <link>https://web-developer-backend.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 아래 사이트에서 .jar파일 다운&lt;/p&gt;
&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://spring.io/tools&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://spring.io/tools&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1622310235494&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;Spring Tools 4 is the next generation of Spring tooling&quot; data-og-description=&quot;Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.&quot; data-og-host=&quot;spring.io&quot; data-og-source-url=&quot;https://spring.io/tools&quot; data-og-url=&quot;https://spring.io/tools&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XJYcL/hyKngRlV4x/KYTlmknAHJua6r62eVw1m0/img.jpg?width=493&amp;amp;height=338&amp;amp;face=0_0_493_338,https://scrap.kakaocdn.net/dn/bk2lg3/hyKnuPApHQ/ESowbIYe5kSEsivNzolQeK/img.jpg?width=493&amp;amp;height=315&amp;amp;face=0_0_493_315,https://scrap.kakaocdn.net/dn/nKQWz/hyKngcIKZz/0GYYtVjoX70qKRqu8RzFIK/img.jpg?width=493&amp;amp;height=281&amp;amp;face=0_0_493_281&quot;&gt;&lt;a href=&quot;https://spring.io/tools&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://spring.io/tools&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XJYcL/hyKngRlV4x/KYTlmknAHJua6r62eVw1m0/img.jpg?width=493&amp;amp;height=338&amp;amp;face=0_0_493_338,https://scrap.kakaocdn.net/dn/bk2lg3/hyKnuPApHQ/ESowbIYe5kSEsivNzolQeK/img.jpg?width=493&amp;amp;height=315&amp;amp;face=0_0_493_315,https://scrap.kakaocdn.net/dn/nKQWz/hyKngcIKZz/0GYYtVjoX70qKRqu8RzFIK/img.jpg?width=493&amp;amp;height=281&amp;amp;face=0_0_493_281');&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 Tools 4 is the next generation of Spring tooling&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;spring.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;64비트 windows클릭 후 다운&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;615&quot; width=&quot;538&quot; height=&quot;215&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/stC1T/btq54mRijZT/Vqt7Fr6KgsjJjLtObHMkM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/stC1T/btq54mRijZT/Vqt7Fr6KgsjJjLtObHMkM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/stC1T/btq54mRijZT/Vqt7Fr6KgsjJjLtObHMkM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FstC1T%2Fbtq54mRijZT%2FVqt7Fr6KgsjJjLtObHMkM1%2Fimg.png&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;615&quot; width=&quot;538&quot; height=&quot;215&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;cmd창을 관리자 권한으로 접속 후 다운받은 경로로 들어가서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java -jar spring-tool-suite-4-4.10.0.RELEASE-e4.19.0-win32.win32.x86_64.self-extracting.jar 명령어 실행&lt;/p&gt;
&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;508&quot; width=&quot;597&quot; height=&quot;337&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcxFnU/btq56dNa6To/3MJX3jJkGoxk9MKTP27kzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcxFnU/btq56dNa6To/3MJX3jJkGoxk9MKTP27kzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcxFnU/btq56dNa6To/3MJX3jJkGoxk9MKTP27kzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcxFnU%2Fbtq56dNa6To%2F3MJX3jJkGoxk9MKTP27kzk%2Fimg.png&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;508&quot; width=&quot;597&quot; height=&quot;337&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SpringToolSuite4.exe 파일을 실행해서 STS를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신버전인 경우 jsp와 javascript 파일을 지원하지 않아서 만들 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이를 위한 tool을 다운받아야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Eclipse Marketplace에서 동그라미된 부분을 다운받으면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;966&quot; width=&quot;360&quot; height=&quot;521&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcuX7x/btq59OeYO1V/PlNc0dx223jpSFJG3KM5I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcuX7x/btq59OeYO1V/PlNc0dx223jpSFJG3KM5I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcuX7x/btq59OeYO1V/PlNc0dx223jpSFJG3KM5I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcuX7x%2Fbtq59OeYO1V%2FPlNc0dx223jpSFJG3KM5I1%2Fimg.png&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;966&quot; width=&quot;360&quot; height=&quot;521&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;이 프로그램을 설치해도 js파일을 인식 못 할 수 있다. 이를 위해서 추가적인 설정이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;window -&amp;gt; Preferences에서 아래 경로로 들어가면 .js파일이 등록이 되어있지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분에 *.js를 add해주면 정상적으로 인식 할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;860&quot; width=&quot;474&quot; height=&quot;352&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxXKiC/btq53RKMzdU/Yk88A9MSku7hZawi6MtCm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxXKiC/btq53RKMzdU/Yk88A9MSku7hZawi6MtCm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxXKiC/btq53RKMzdU/Yk88A9MSku7hZawi6MtCm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxXKiC%2Fbtq53RKMzdU%2FYk88A9MSku7hZawi6MtCm0%2Fimg.png&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;860&quot; width=&quot;474&quot; height=&quot;352&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;추가한 *.js를 클릭 후 text가 아닌 JavaScript로 인식하도록 Generic Text Editor를 누르고 Default를 클릭 후 저장 후 닫는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;892&quot; width=&quot;540&quot; height=&quot;557&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yp7Jo/btq57o11pPi/8CDYN2ZrPgbya9FVIgMFs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yp7Jo/btq57o11pPi/8CDYN2ZrPgbya9FVIgMFs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yp7Jo/btq57o11pPi/8CDYN2ZrPgbya9FVIgMFs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyp7Jo%2Fbtq57o11pPi%2F8CDYN2ZrPgbya9FVIgMFs1%2Fimg.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;892&quot; width=&quot;540&quot; height=&quot;557&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;+ spring legacy프로젝트를 생성하지 못하는 경우&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;color: #006dd7;&quot;&gt;eclipse marketplace에서 sts를 검색 후 spring tools 3 Add-On for Spring Tools 4를 설치해주면 된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Spring/스프링부트</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/64</guid>
      <comments>https://web-developer-backend.tistory.com/64#entry64comment</comments>
      <pubDate>Sun, 30 May 2021 03:34:12 +0900</pubDate>
    </item>
    <item>
      <title>[Mysql] 생성한 테이블 구조를 sql로 출력하기</title>
      <link>https://web-developer-backend.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;처음 테이블을 만들었을 떄와 달리 코딩을 하면서 수정된 테이블이 있을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 테이블의 구조를 sql로 얻고 싶을 때 사용하기 좋은 명령어가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;show create table 테이블명;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mysql에서 실행해 보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;215&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boEPAK/btq5RCN0dmF/9tgcQB79O4HYUbyXhnEElK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boEPAK/btq5RCN0dmF/9tgcQB79O4HYUbyXhnEElK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boEPAK/btq5RCN0dmF/9tgcQB79O4HYUbyXhnEElK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboEPAK%2Fbtq5RCN0dmF%2F9tgcQB79O4HYUbyXhnEElK%2Fimg.png&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;215&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doMguk/btq5Q7uasFI/2kRFpWE958ID5eodVLcbFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doMguk/btq5Q7uasFI/2kRFpWE958ID5eodVLcbFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doMguk/btq5Q7uasFI/2kRFpWE958ID5eodVLcbFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoMguk%2Fbtq5Q7uasFI%2F2kRFpWE958ID5eodVLcbFk%2Fimg.png&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Mysql</category>
      <category>MySQL</category>
      <category>Spring</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/63</guid>
      <comments>https://web-developer-backend.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 27 May 2021 15:16:49 +0900</pubDate>
    </item>
    <item>
      <title>웹 소켓 채팅 방 구현 (중간 점 채팅 방 구현 (중간 점검)</title>
      <link>https://web-developer-backend.tistory.com/62</link>
      <description>&lt;p&gt;채팅방&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/공부</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/62</guid>
      <comments>https://web-developer-backend.tistory.com/62#entry62comment</comments>
      <pubDate>Sat, 17 Apr 2021 20:51:09 +0900</pubDate>
    </item>
    <item>
      <title>[Spring MVC ]Mybatis mapper.xml에서 date(java.util.date)자료형 다루기</title>
      <link>https://web-developer-backend.tistory.com/61</link>
      <description>&lt;p&gt;mysql에서 timestamp으로 저장된 approvaldate데이터를 가져올 때 resultType으로 java.util.Date형식으로 받아왔다.&lt;/p&gt;
&lt;pre id=&quot;code_1618242757788&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;getApprovalDate&quot; resultType=&quot;java.util.Date&quot;&amp;gt;
	select approvaldate from tbl_chat_validate where id=#{id} and chnum = #{chnum};
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 데이터를 반환하면 아래 사진과 같은 형태를 띈다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqWuMy/btq2uc5c2YM/jAnIJAiOtNoiljk7NMhAH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqWuMy/btq2uc5c2YM/jAnIJAiOtNoiljk7NMhAH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqWuMy/btq2uc5c2YM/jAnIJAiOtNoiljk7NMhAH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqWuMy%2Fbtq2uc5c2YM%2FjAnIJAiOtNoiljk7NMhAH1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;하지만 mysql에서의 &lt;span style=&quot;color: #333333;&quot;&gt;timestamp&lt;/span&gt;형식은 아래 사진과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdLVFz/btq2plWo7ZP/QWnlI7BqWKsbp1vKLoLh3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdLVFz/btq2plWo7ZP/QWnlI7BqWKsbp1vKLoLh3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdLVFz/btq2plWo7ZP/QWnlI7BqWKsbp1vKLoLh3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdLVFz%2Fbtq2plWo7ZP%2FQWnlI7BqWKsbp1vKLoLh3K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 반환된 java.util.date 형식을 &lt;span style=&quot;color: #333333;&quot;&gt;timestamp&lt;/span&gt;에 맞게끔 바꿔줘야 한다.&lt;/p&gt;
&lt;p&gt;이를 위해서 SimpleDateFormat클래스를 이용하면 된다. 아래와 같이 형식을 지정해주고 사용하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1618243172693&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SimpleDateFormat format = new SimpleDateFormat(&quot;yyyy-MM-dd HH:mm:ss&quot;); &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 지정한 형식을 java.util.date 변수에 적용시켜주면 된다.&lt;/p&gt;
&lt;p&gt;그러면 정상적으로 timestamp형식으로 변환이 되었다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1618243487520&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String mysqlDate = format.format(Jdate);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 이렇게 변환된 String형의 문자를 mysql에 적용시키기 위해서 다시 timestamp형식으로 변환 해줘야 한다.&lt;/p&gt;
&lt;p&gt;아래와 비슷하게 사용해주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1618243786780&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;where chnum =#{chnum} and sendDate &amp;gt;= date_format(#{mysqlDate},'%Y-%m-%d %H:%i:%s')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드로 보기&lt;/h3&gt;
&lt;pre id=&quot;code_1618243436057&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;		Date Jdate = chatValidateMapper.getApprovalDate(321,&quot;user3&quot;);
		System.out.println(Jdate);
		SimpleDateFormat format = new SimpleDateFormat(&quot;yyyy-MM-dd HH:mm:ss&quot;); 
		String mysqlDate = format.format(Jdate);
		System.out.println(mysqlDate); &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJhYKb/btq2krXmE53/Fwo4qtsDH41nmdHq7blc9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJhYKb/btq2krXmE53/Fwo4qtsDH41nmdHq7blc9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJhYKb/btq2krXmE53/Fwo4qtsDH41nmdHq7blc9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJhYKb%2Fbtq2krXmE53%2FFwo4qtsDH41nmdHq7blc9K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1618243911336&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;getAllChatMessage&quot; resultType=&quot;org.example.domain.ChatMessageVO&quot;&amp;gt;
		&amp;lt;![CDATA[
			select * 
			from tbl_chat_message 
			where chnum =#{chnum} and sendDate &amp;gt;= date_format(#{approvalDate},'%Y-%m-%d %H:%i:%s')
		]]&amp;gt;
	&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Spring</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/61</guid>
      <comments>https://web-developer-backend.tistory.com/61#entry61comment</comments>
      <pubDate>Tue, 13 Apr 2021 01:11:59 +0900</pubDate>
    </item>
    <item>
      <title>웹 소켓 시연 영상 (미완성)</title>
      <link>https://web-developer-backend.tistory.com/60</link>
      <description>&lt;p&gt;이런식으로 통신해서 채팅방을 만들면 될 듯하다.&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&gt;
            &lt;/figure&gt;
        
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/공부</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/60</guid>
      <comments>https://web-developer-backend.tistory.com/60#entry60comment</comments>
      <pubDate>Wed, 7 Apr 2021 01:12:43 +0900</pubDate>
    </item>
    <item>
      <title>[Spring MVC] 스프링 시큐리티 웹 소켓 사용하기</title>
      <link>https://web-developer-backend.tistory.com/59</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. pom.xml 설정&lt;/h3&gt;
&lt;pre id=&quot;code_1617546096305&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 웹 소캣 설정 --&amp;gt;
&amp;lt;!-- https://mvnrepository.com/artifact/org.springframework/spring-websocket --&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;spring-websocket&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;${org.springframework-version}&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;
		&amp;lt;!--  이 부분은 httpsession을 사용할 때 작성
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;javax.websocket&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;javax.websocket-api&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
			&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
		&amp;lt;/dependency&amp;gt;
--&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. servlet-context.xml 설정&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) namespace websocket 체크하기&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;503&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9AzJc/btq1KdrFjMc/0xkRHldHU02AYBZs9bLej0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9AzJc/btq1KdrFjMc/0xkRHldHU02AYBZs9bLej0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9AzJc/btq1KdrFjMc/0xkRHldHU02AYBZs9bLej0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9AzJc%2Fbtq1KdrFjMc%2F0xkRHldHU02AYBZs9bLej0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;503&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 코드 작성 (servlet-context.xml)&lt;/h4&gt;
&lt;pre id=&quot;code_1617546294550&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;beans:bean id=&quot;replyEchoHandler&quot; class=&quot;org.socket.socket.ReplyEchoHandler&quot;&amp;gt;&amp;lt;/beans:bean&amp;gt;
&amp;lt;websocket:handlers&amp;gt;
	&amp;lt;websocket:mapping handler=&quot;replyEchoHandler&quot; path=&quot;/replyEcho&quot;/&amp;gt;
	&amp;lt;!-- 이 부분은 http세션을 사용할 때 작성
	&amp;lt;websocket:handshake-interceptors&amp;gt;
		&amp;lt;beans:bean class=&quot;org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor&quot;&amp;gt;
		&amp;lt;/beans:bean&amp;gt;
	&amp;lt;/websocket:handshake-interceptors&amp;gt;
	--&amp;gt;
&amp;lt;/websocket:handlers&amp;gt;
	&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;웹 소켓 통신 경로는 &lt;/span&gt;&lt;span&gt;&amp;ldquo;replyEcho&amp;rdquo;&lt;/span&gt;&lt;span&gt;이고 이를 &lt;/span&gt;&lt;span&gt;replyEchoHandler&lt;/span&gt;&lt;span&gt;가 관리한다는 의미와 같다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;웹 소켓 통신을 관리&lt;/span&gt;&lt;span&gt;(?)&lt;/span&gt;&lt;span&gt;하기 위해서 &lt;/span&gt;&lt;span&gt;replyEchoHandler&lt;/span&gt;&lt;span&gt;를 작성해주면 된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;또 여러 개의 웹 소켓을 사용하고싶다면 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;lt;websocket:mapping handler=&quot;replyEchoHandler&quot; path=&quot;/replyEcho2&quot;/&amp;gt;&lt;/span&gt;&lt;span&gt;와 같이 생성해주면 된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이제 &lt;/span&gt;&lt;span&gt;jsp&lt;/span&gt;&lt;span&gt;페이지에서 아래 경로를 통해서 통신할 수 있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;주의할 점은 &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;통신이 아니라 웹 소켓의 약자인 &lt;/span&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt;통신이다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617546319860&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var was = new WebSocket(&quot;ws://localhost:8080/controller/replyEcho&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&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;http&lt;/span&gt;&lt;span&gt;세션을 사용하기 위해서는 &lt;/span&gt;&lt;span&gt;pom.xml&lt;/span&gt;&lt;span&gt;에 설정해둔 &lt;/span&gt;&lt;span&gt;websocket-api&lt;/span&gt;&lt;span&gt;를 이용해서 가져올 수 있다&lt;/span&gt;&lt;span&gt;. pom,xml&lt;/span&gt;&lt;span&gt;에 설정한 내용을 사용하기 위해서 &lt;/span&gt;&lt;span&gt;HttpSessionHandshakeInterceptor&lt;/span&gt;&lt;span&gt;클래스를 빈으로 등록한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;필자는 시큐리티 로그인을 해서 회원정보를 가져올 때는 &lt;/span&gt;&lt;span&gt;httpSession&lt;/span&gt;&lt;span&gt;을 사용할 필요가 없어서 주석처리 하겠다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;3. ReplyEchoHandler 작성하기 (서버)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;이 &lt;/span&gt;&lt;span&gt;replyEchoHandler&lt;/span&gt;&lt;span&gt;에서는 &lt;/span&gt;&lt;span&gt;TextWebSocketHandler&lt;/span&gt;&lt;span&gt;를 상속받아서 사용한다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;웹 소켓 통신으로 문자만 받기 위해서&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;다른 형식으로 주고받기 위해서는 다른 핸들러를 상속받으면 된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;afterConnectionEstablished(), handleTextMessage(), afterConnectionClosed() 등의 &lt;/span&gt;&lt;span&gt;메소드를 &lt;/span&gt;&lt;span&gt;Override &lt;/span&gt;&lt;span&gt;해서 사용하면 된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617546391306&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class ReplyEchoHandler extends TextWebSocketHandler {
	// 커넥션이 연결된 후
	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		System.out.println(&quot;연결 후 : &quot; + session)
	}

	// 소켓에 메세지를 보냈을 때 ((서버입장에서 메시지를 받았을 때))
	@Override
	protected void handleTextMessage(WebSocketSession session, TextMessage message) 
throws Exception {
		
	}

	// 커넥션이 닫혔을 때
	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception 	{
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;소켓 통신을 제어하기 위해서 이 메소드들을 작성해주면 된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이제 각 메소드들을 하나하나 작성해보겠다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;먼저 필드에 접속한 클라이언트들의 정보를 저장하기 위해서 리스트를 만들었다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617546422350&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class SocketHandler extends TextWebSocketHandler{
	List&amp;lt;WebSocketSession&amp;gt; sessionList = new ArrayList&amp;lt;WebSocketSession&amp;gt;()
(...이하 생략)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;span&gt;1) afterConnectionEstablished&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;연결이 된 후 &lt;/span&gt;&lt;span&gt;sessionList&lt;/span&gt;&lt;span&gt;에 접속한 세션을 담아준다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;또 &lt;/span&gt;&lt;span&gt;session.getId()&lt;/span&gt;&lt;span&gt;를 해주면 연결된 세션의 &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;를 볼 수 있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;시큐리티 로그인을 한 경우 &lt;/span&gt;&lt;span&gt;session.getPrincipal().getName()&lt;/span&gt;&lt;span&gt;을 통해 로그인한 사용자의 &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;를 가져올 수 있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617546508342&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
	sessionList.add(session);
	log.info(&quot;연결된 세션 : &quot; + session.getId());
	log.info(&quot;채팅방 입장 아이디 : &quot; + session.getPrincipal().getName());
	System.out.println(&quot;afterConnectionEstablished : &quot; + session);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;2) handleTextMessage&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;이 메소드는 메시지를 받았을 때 작동하는 메소드이다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;소켓 통신으로 받은 메시지를 가져와서 연결된 모든 사용자들한테 전송함&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617546539700&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
	for(WebSocketSession sess : sessionList) {
		log.info(sess.getPrincipal().getName() + &quot;에게&quot; + message.getPayload()+&quot;전달함&quot;);
		sess.sendMessage(new TextMessage(session.getPrincipal().getName()+&quot;|&quot;
			+message.getPayload()));
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;span&gt;3) afterConnectionClosed&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;이 메소드는 커넥션이 끊어졌을 때 작동하는 메소드이다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;특정 사용자가 연결을 끊었을 때 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617546563789&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
	sessionList.remove(session);
	log.info(session.getPrincipal().getName() + &quot;와의연결이끊김!&quot;)
	System.out.println(&quot;채팅방 퇴장자: &quot;+ session.getPrincipal().getName());
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;참고&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=scw0531&amp;amp;logNo=221052774287&amp;amp;categoryNo=28&amp;amp;proxyReferer=&amp;amp;proxyReferer=https:%2F%2Fwww.google.co.kr%2F&quot;&gt;https://m.blog.naver.com/PostView.nhn?blogId=scw0531&amp;amp;logNo=221052774287&amp;amp;categoryNo=28&amp;amp;proxyReferer=&amp;amp;proxyReferer=https:%2F%2Fwww.google.co.kr%2F&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617546594452&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring - WebSocket을 활용한 채팅 서비스 구현]&quot; data-og-description=&quot;안녕하세요!! 이번 포스팅은 Spring WebSocket을 이용하여 채팅을 구현해보겠습니다. 여러 웹 사이트에...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/PostView.nhn?blogId=scw0531&amp;amp;logNo=221052774287&amp;amp;categoryNo=28&amp;amp;proxyReferer=&amp;amp;proxyReferer=https:%2F%2Fwww.google.co.kr%2F&quot; data-og-url=&quot;https://blog.naver.com/scw0531/221052774287&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tpJfs/hyJK7uICIo/yKwekaWBbolwtNbtlKpF70/img.png?width=740&amp;amp;height=79&amp;amp;face=0_0_740_79,https://scrap.kakaocdn.net/dn/dysDLA/hyJKZcmb2v/albrfVfO8glW9cjLBFReL1/img.png?width=80&amp;amp;height=29&amp;amp;face=0_0_80_29&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=scw0531&amp;amp;logNo=221052774287&amp;amp;categoryNo=28&amp;amp;proxyReferer=&amp;amp;proxyReferer=https:%2F%2Fwww.google.co.kr%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/PostView.nhn?blogId=scw0531&amp;amp;logNo=221052774287&amp;amp;categoryNo=28&amp;amp;proxyReferer=&amp;amp;proxyReferer=https:%2F%2Fwww.google.co.kr%2F&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tpJfs/hyJK7uICIo/yKwekaWBbolwtNbtlKpF70/img.png?width=740&amp;amp;height=79&amp;amp;face=0_0_740_79,https://scrap.kakaocdn.net/dn/dysDLA/hyJKZcmb2v/albrfVfO8glW9cjLBFReL1/img.png?width=80&amp;amp;height=29&amp;amp;face=0_0_80_29');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Spring - WebSocket을 활용한 채팅 서비스 구현]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;안녕하세요!! 이번 포스팅은 Spring WebSocket을 이용하여 채팅을 구현해보겠습니다. 여러 웹 사이트에...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;4) jsp&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;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;span&gt;1) &lt;/span&gt;&lt;span&gt;웹 소켓 커넥션&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;jsp&lt;/span&gt;&lt;span&gt;에서 아래 코드를 실행하면 자동으로 커넥션을 요청한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617546657544&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var was = new WebSocket(&quot;ws://localhost:8080/controller/replyEcho&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;span&gt;2) &lt;/span&gt;&lt;span&gt;웹 소켓 제어&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;javascript&lt;/span&gt;&lt;span&gt;의 다음 함수로 웹 소켓을 제어할 수 있다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;was.onopen() = function(){}; : &lt;/span&gt;&lt;u&gt;&lt;span&gt;소켓이 열렸을 때&lt;/span&gt;&lt;/u&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;실행할 메소드를 정의 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;was.onclose() = function(){}; : &lt;/span&gt;&lt;u&gt;&lt;span&gt;소켓 연결이 종료된 순간&lt;/span&gt;&lt;/u&gt;&lt;span&gt;에 작동할 내용을 작성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;was.onmessage() = function(){}; : &lt;/span&gt;&lt;u&gt;&lt;span&gt;메시지를 받은 순간&lt;/span&gt;&lt;/u&gt;&lt;span&gt;에 작동할 내용을 작성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;was.onerror() = function(){} : &lt;/span&gt;&lt;span&gt;에러가 발생한 경우에 작동할 내용 작성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;was.close() ; &lt;/span&gt;&lt;span&gt;소켓 연결을 종료&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;종료했으므로&lt;/span&gt;&lt;span&gt;afterConnectionClosed() &lt;/span&gt;&lt;span&gt;를 실행&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;was.send(&quot;msg&quot;) : &lt;/span&gt;&lt;span&gt;소켓 통신으로 메시지를 보냄&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이 보낸 메시지는 &lt;/span&gt;&lt;span&gt;handleTextMessage()&lt;/span&gt;&lt;span&gt;에서 받아서 처리하는데 여기서 접속된 클라이언트에 다시 보내주면 채팅방이 형성된다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;was.onmessage = function(e){e.data}: &lt;/span&gt;&lt;span&gt;서버로부터 메시지를 받았을 때 실행할 메소드를 작성&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;받은 메시지를 꺼내기 위해서 &lt;/span&gt;&lt;span&gt;e.data&lt;/span&gt;&lt;span&gt;를 사용한다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;span&gt;3) &lt;/span&gt;&lt;span&gt;코드 작성&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1617546714528&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
	pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; prefix=&quot;c&quot;%&amp;gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;input type=&quot;text&quot; id=&quot;msg&quot; class=&quot;form-control&quot;&amp;gt;
	&amp;lt;button id=&quot;btn&quot;&amp;gt;Send Message&amp;lt;/button&amp;gt;
	&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
		let inputValue = $(&quot;input#msg&quot;).val();
		$(&quot;document&quot;).ready(function() {
			var socket = null;
			connect();
		});

		function connect() {
			var was = new WebSocket(&quot;ws://localhost:8080/controller/replyEcho&quot;);
			socket = was;
			socket.onopen = function() {
				console.log('info: connection opened!');

				socket.onmessage = function(event) {
					var rawMessage = event.data;
					var messageArr = rawMessage.split(&quot;|&quot;);
					var messageSender = null;
					var originMessage = null;
					if (messageArr.length == 2) {
						messageSender = messageArr[0];
						originMessage = messageArr[1];
						console.log(messageSender + &quot;가 [&quot; + originMessage
								+ &quot;] 보냄&quot;);
					} else {
						socket.close();
						console.log(&quot;커넥션 닫음&quot;);
					}

				}

				socket.onclose = function(event) {
					console.log(&quot;Info : connection closed&quot;);
					setTimeout(function() {
						connect();
					}, 1000);
				}
				socket.onerror = function(err) {
					console.log(&quot;Error : connection error&quot;);
				}
			}
		};
		
		$(&quot;#btn&quot;).on(&quot;click&quot;, function(e) {
			if (!socket) {
				return;
			}
			let msg = $(&quot;input#msg&quot;).val();
			// 소캣 메세지 전송
			socket.send(msg);
		});
	&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span&gt;5) &lt;span&gt;테스트 결과&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;크롬과 인터넷 익스플로어를 사용해서 각각 로그인을 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv1Ayx/btq1OMTXuJD/cCBemPD4UhOQ1hSuZIh1pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv1Ayx/btq1OMTXuJD/cCBemPD4UhOQ1hSuZIh1pK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;340&quot; height=&quot;NaN&quot; style=&quot;width: 51.1634%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv1Ayx/btq1OMTXuJD/cCBemPD4UhOQ1hSuZIh1pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv1Ayx%2Fbtq1OMTXuJD%2FcCBemPD4UhOQ1hSuZIh1pK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/znAqe/btq1QmOeQXd/l6pqPJvDuZGkuaUweTr7U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/znAqe/btq1QmOeQXd/l6pqPJvDuZGkuaUweTr7U0/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;344&quot; height=&quot;NaN&quot; style=&quot;width: 47.6738%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/znAqe/btq1QmOeQXd/l6pqPJvDuZGkuaUweTr7U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FznAqe%2Fbtq1QmOeQXd%2Fl6pqPJvDuZGkuaUweTr7U0%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각 브라우저에서 메시지를 보냈다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc8SeG/btq1JWjrstc/Km0KuLuPCcPgBJLwUvT211/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc8SeG/btq1JWjrstc/Km0KuLuPCcPgBJLwUvT211/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc8SeG/btq1JWjrstc/Km0KuLuPCcPgBJLwUvT211/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc8SeG%2Fbtq1JWjrstc%2FKm0KuLuPCcPgBJLwUvT211%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;콘솔창에서의 결과이다. 동시에 사용자 간의 통신을 하는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mBIC2/btq1JzPwuqH/zgcNKrh27tR7sDQFfn6wP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mBIC2/btq1JzPwuqH/zgcNKrh27tR7sDQFfn6wP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mBIC2/btq1JzPwuqH/zgcNKrh27tR7sDQFfn6wP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmBIC2%2Fbtq1JzPwuqH%2FzgcNKrh27tR7sDQFfn6wP1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 사진은 웹 소켓 통신의 큰 흐름이다.. 참고하면 이해하는데 도움이 될 것이다!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pK6eG/btq1JWDLCU2/xuxLO4gjVUTLkyakOkUfPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pK6eG/btq1JWDLCU2/xuxLO4gjVUTLkyakOkUfPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pK6eG/btq1JWDLCU2/xuxLO4gjVUTLkyakOkUfPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpK6eG%2Fbtq1JWDLCU2%2FxuxLO4gjVUTLkyakOkUfPK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Spring/공부</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/59</guid>
      <comments>https://web-developer-backend.tistory.com/59#entry59comment</comments>
      <pubDate>Sun, 4 Apr 2021 23:38:02 +0900</pubDate>
    </item>
    <item>
      <title>[Join 알아보기] Inner Join, Right Join, Left Join</title>
      <link>https://web-developer-backend.tistory.com/58</link>
      <description>&lt;p&gt;Join을 알아보기 위해서 예제 테이블을 생성했다.&lt;/p&gt;
&lt;pre id=&quot;code_1617283432472&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table soccer (
	ch int,
    team varchar(50)
);

 desc soccer;
create table baseball (
	ch int,
    team varchar(50)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그리고 데이트를 조금 넣어봤다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617283479517&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;insert into soccer values(33,'서울 축구');
insert into soccer values(34,'부산 축구');
insert into soccer values(35,'경주 축구');
insert into soccer values(35,'용인 축구');
insert into soccer values(35,'광주 축구');
insert into soccer values(35,'대구 축구');
insert into soccer values(55,'전주 축구');

insert into baseball values(33,'서울 야구');
insert into baseball values(34,'부산 야구');
insert into baseball values(42,'전북 야구');
insert into baseball values(35,'울산 야구');
insert into baseball values(33,'제주 야구');
insert into baseball values(53,'광주 야구');&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이제 조인에 대해 알아보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;조인의 형식은 아래와 같다.&lt;/p&gt;
&lt;p&gt;on은 where와 같은 의미이다.&lt;/p&gt;
&lt;pre id=&quot;code_1617283795194&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select a.*, b.* 
from 테이블A a 
[inner/ right/ left..] join 테이블B b
on a.id = b.id&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;Inner&amp;nbsp;Join&lt;/h3&gt;
&lt;p&gt;예제를 보면 이해하기가 쉽다.&lt;/p&gt;
&lt;p&gt;Inner 말 그대로 내부라는 의미로 두 테이블의 공통된 부분을 가져온다.&lt;/p&gt;
&lt;pre id=&quot;code_1617283507085&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select s.ch, s.team
from soccer s
inner join baseball b
on s.ch = b.ch;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행한 결과는 다음과 같다. 두 테이블에서 ch가 &lt;b&gt;같은 항목&lt;/b&gt;에 해당하는 내용을 가져왔다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCjCiv/btq1EoFP1FI/gv2yLpLKNk8ZFfuufFJzwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCjCiv/btq1EoFP1FI/gv2yLpLKNk8ZFfuufFJzwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCjCiv/btq1EoFP1FI/gv2yLpLKNk8ZFfuufFJzwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCjCiv%2Fbtq1EoFP1FI%2Fgv2yLpLKNk8ZFfuufFJzwk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;Left Join&lt;/h3&gt;
&lt;p&gt;Left join은 Join을 기준으로 왼쪽에 있는 테이블을 기준으로 두 테이블을 합친다.&lt;/p&gt;
&lt;p&gt;즉, 아래 코드에서는 soccer가 기준이 되고 baseball테이블과 합치게 된다.&lt;/p&gt;
&lt;p&gt;따라서 baseball테이블에 null이 있어도 가져오게 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1617283926742&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select s.ch, s.team, b.ch, b.team
from soccer s
left join baseball b
on s.ch = b.ch;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbeuWi/btq1z4V8Lkg/TLt9q1lwifktsRWzfqS1lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbeuWi/btq1z4V8Lkg/TLt9q1lwifktsRWzfqS1lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbeuWi/btq1z4V8Lkg/TLt9q1lwifktsRWzfqS1lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbeuWi%2Fbtq1z4V8Lkg%2FTLt9q1lwifktsRWzfqS1lk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;Right Join&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Right join은 Join을 기준으로 오른쪽에 있는 테이블을 기준으로 두 테이블을 합친다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Left Join과 반대 방향이라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;baseball을 기준으로 합쳐진 것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617283879858&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select s.ch, s.team, b.ch, b.team
from soccer s
right join baseball b
on s.ch = b.ch;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brNCLo/btq1AFohOBy/kKTWXg7kCthfkeGK3h9CYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brNCLo/btq1AFohOBy/kKTWXg7kCthfkeGK3h9CYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brNCLo/btq1AFohOBy/kKTWXg7kCthfkeGK3h9CYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrNCLo%2Fbtq1AFohOBy%2FkKTWXg7kCthfkeGK3h9CYK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Mysql</category>
      <author>하루인생</author>
      <guid isPermaLink="true">https://web-developer-backend.tistory.com/58</guid>
      <comments>https://web-developer-backend.tistory.com/58#entry58comment</comments>
      <pubDate>Thu, 1 Apr 2021 22:38:27 +0900</pubDate>
    </item>
  </channel>
</rss>