<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Keon.</title>
    <link>https://montoo.tistory.com/</link>
    <description> Keon. 아카이브</description>
    <language>ko</language>
    <pubDate>Fri, 19 Jun 2026 16:56:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>_Keonmon</managingEditor>
    <image>
      <title>Keon.</title>
      <url>https://tistory1.daumcdn.net/tistory/2789977/attach/7327881ac2a3456bb43b1ad1b2e0b82b</url>
      <link>https://montoo.tistory.com</link>
    </image>
    <item>
      <title>라즈베리파이를 활용한 홈서버 구축 관련자료</title>
      <link>https://montoo.tistory.com/370</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;홈서버 구축에 관심이 생겨서 라즈베리파이 관련 자료를 스크랩한다.&lt;br&gt;&lt;br&gt;라즈베리파이로 서버 구축 관련 포스팅:&lt;br&gt;https://m.blog.naver.com/PostView.naver?blogId=makitmine_&amp;amp;logNo=222070055923&amp;amp;navType=by&lt;br&gt;&lt;br&gt;&lt;br&gt;라즈베리파이 서버 구축방식 종류 정리글 + 도커&lt;br&gt;https://iotmaker.kr/iotbook-raspberrypi/&lt;br&gt;&lt;br&gt;&lt;br&gt;라즈베리파이 넥스트클라우드 설치법&lt;br&gt;https://blog.naver.com/emperonics/222052780232&lt;/p&gt;</description>
      <category>Programming/Server</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/370</guid>
      <comments>https://montoo.tistory.com/370#entry370comment</comments>
      <pubDate>Thu, 14 Nov 2024 17:10:34 +0900</pubDate>
    </item>
    <item>
      <title>⛄ 찬바람 쌩쌩❄️ 부산 겨울 여행 계획 짜보자!</title>
      <link>https://montoo.tistory.com/369</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9fO7R/btsJIq2hhpV/KZJVwkfbcrKk3PvAVSlicK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9fO7R/btsJIq2hhpV/KZJVwkfbcrKk3PvAVSlicK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9fO7R/btsJIq2hhpV/KZJVwkfbcrKk3PvAVSlicK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9fO7R%2FbtsJIq2hhpV%2FKZJVwkfbcrKk3PvAVSlicK%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;915&quot; height=&quot;809&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;809&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;찬바람 쌩쌩&lt;/b&gt; 부는 &lt;b&gt;겨울&lt;/b&gt;,&lt;br&gt;&lt;b&gt;부산&lt;/b&gt;에서 즐길 수 있는 &lt;b&gt;실내데이트&lt;/b&gt;와 &lt;b&gt;맛집&lt;/b&gt;으로 &lt;b&gt;여행&amp;nbsp;계획&lt;/b&gt;을 세워보자!&lt;/blockquote&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;✔️ Day1 &lt;br&gt;&lt;b&gt;레이저아레나 광안점 &lt;/b&gt; - &lt;b&gt;티앤북스 북카페☕&lt;/b&gt; &lt;b&gt;- 첨벙(숙성횟집)  - 숙소&lt;/b&gt;&lt;br&gt;&lt;b&gt; ✔️ Day2 &lt;/b&gt;&lt;br&gt;&lt;b&gt;현대모터스튜디오 부산 (F1963) &amp;nbsp;- 수변최고돼지국밥 민락본점  - 복귀&lt;/b&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 1&lt;/b&gt;&lt;/h2&gt;&lt;h3 id=&quot;--%--%EA%B-%--%EC%--%--%EB%A-%AC%--%EB%-F%--%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. &lt;b&gt;레이저아레나 광안점&lt;/b&gt; &lt;iframe mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20194-2&amp;amp;addtype=1&amp;amp;confirmid=1173077981&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982435%2C%22mapCenterY%22%3A465485%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982436%2C%22y%22%3A465486%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%A0%88%EC%9D%B4%EC%A0%80%EC%95%84%EB%A0%88%EB%82%98%20%EA%B4%91%EC%95%88%EC%A0%90%22%2C%22confirmid%22%3A1173077981%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982435&amp;amp;mapY=465485&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=&amp;amp;title=%EB%A0%88%EC%9D%B4%EC%A0%80%EC%95%84%EB%A0%88%EB%82%98%20%EA%B4%91%EC%95%88%EC%A0%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727094530896_0&quot; id=&quot;maps_1727094530896_0&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20194-2&amp;amp;addtype=1&amp;amp;confirmid=1173077981&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982435%2C%22mapCenterY%22%3A465485%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982436%2C%22y%22%3A465486%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%A0%88%EC%9D%B4%EC%A0%80%EC%95%84%EB%A0%88%EB%82%98%20%EA%B4%91%EC%95%88%EC%A0%90%22%2C%22confirmid%22%3A1173077981%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982435&amp;amp;mapY=465485&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=&amp;amp;title=%EB%A0%88%EC%9D%B4%EC%A0%80%EC%95%84%EB%A0%88%EB%82%98%20%EA%B4%91%EC%95%88%EC%A0%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982435%2C465485&amp;amp;lv=2&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A982436%2C465486&quot;&gt;&lt;/iframe&gt; &lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;액션영화 한편 찍을 수 있는 이색데이트! &lt;br&gt;찬바람 쌩쌩부는 겨울에도 &lt;b&gt;실내에서 레이저 서바이벌 게임&lt;/b&gt; 함께 즐길 수 있는 &lt;b&gt;레이저아레나!&lt;/b&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/brjIyM/btsJHTcQ19S/zpWAWcqghf4F9BzxlbrcGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brjIyM/btsJHTcQ19S/zpWAWcqghf4F9BzxlbrcGk/img.png&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;579&quot; style=&quot;width: 60.367%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brjIyM/btsJHTcQ19S/zpWAWcqghf4F9BzxlbrcGk/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrjIyM%2FbtsJHTcQ19S%2FzpWAWcqghf4F9BzxlbrcGk%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;588&quot; height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v8ZvS/btsJKcByszq/KNFrdogx6eajrYA9vk5qo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v8ZvS/btsJKcByszq/KNFrdogx6eajrYA9vk5qo0/img.png&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;496&quot; style=&quot;width: 38.4702%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v8ZvS/btsJKcByszq/KNFrdogx6eajrYA9vk5qo0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv8ZvS%2FbtsJKcByszq%2FKNFrdogx6eajrYA9vk5qo0%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;321&quot; height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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/bfx4Yv/btsJIPOjkDX/3M1bTYNHpt1F4Fi7LCpNk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfx4Yv/btsJIPOjkDX/3M1bTYNHpt1F4Fi7LCpNk1/img.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;580&quot; style=&quot;width: 49.7521%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfx4Yv/btsJIPOjkDX/3M1bTYNHpt1F4Fi7LCpNk1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfx4Yv%2FbtsJIPOjkDX%2F3M1bTYNHpt1F4Fi7LCpNk1%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;937&quot; height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/szy7Z/btsJJJfxt9l/RTvXhBgks4FNr0L5L5vlLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/szy7Z/btsJJJfxt9l/RTvXhBgks4FNr0L5L5vlLK/img.png&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;586&quot; style=&quot;width: 49.0851%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/szy7Z/btsJJJfxt9l/RTvXhBgks4FNr0L5L5vlLK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fszy7Z%2FbtsJJJfxt9l%2FRTvXhBgks4FNr0L5L5vlLK%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;934&quot; height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;티앤북스 광안점 북카페&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1727091000619&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20181-223%208%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=1129640735&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A984023%2C%22mapCenterY%22%3A465384%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A984023%2C%22y%22%3A465384%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%8B%B0%EC%95%A4%EB%B6%81%EC%8A%A4%20%EA%B4%91%EC%95%88%EC%A0%90%22%2C%22confirmid%22%3A1129640735%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=984023&amp;amp;mapY=465384&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=051-758-0105&amp;amp;title=%ED%8B%B0%EC%95%A4%EB%B6%81%EC%8A%A4%20%EA%B4%91%EC%95%88%EC%A0%90&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20181-223%208%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=1129640735&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A984023%2C%22mapCenterY%22%3A465384%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A984023%2C%22y%22%3A465384%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%8B%B0%EC%95%A4%EB%B6%81%EC%8A%A4%20%EA%B4%91%EC%95%88%EC%A0%90%22%2C%22confirmid%22%3A1129640735%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=984023&amp;amp;mapY=465384&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=051-758-0105&amp;amp;title=%ED%8B%B0%EC%95%A4%EB%B6%81%EC%8A%A4%20%EA%B4%91%EC%95%88%EC%A0%90&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=984023%2C465384&amp;amp;lv=2&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A984023%2C465384&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727091000619&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;연인 혹은 친구와 함께 &lt;b&gt;통창으로 광안리가 한 눈에&lt;/b&gt; 담을 수 있는 &lt;b&gt;북카페&lt;/b&gt;를 소개합니다!&lt;br&gt;&lt;b&gt;고층(8층)에 위치&lt;/b&gt;하고, 저녁 쯤 가게되면 &lt;b&gt;노을진 광안리 해변&lt;/b&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/rYGXH/btsJJYQ2Pk1/w8txuUKmvwjpWPsbZ2zy80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rYGXH/btsJJYQ2Pk1/w8txuUKmvwjpWPsbZ2zy80/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;788&quot; style=&quot;width: 63.6594%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rYGXH/btsJJYQ2Pk1/w8txuUKmvwjpWPsbZ2zy80/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrYGXH%2FbtsJJYQ2Pk1%2Fw8txuUKmvwjpWPsbZ2zy80%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;1080&quot; height=&quot;788&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DxnkD/btsJJbjhvxm/UZQIvlaXhSGL0AOmTeZZ7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DxnkD/btsJJbjhvxm/UZQIvlaXhSGL0AOmTeZZ7K/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1426&quot; style=&quot;width: 35.1778%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DxnkD/btsJJbjhvxm/UZQIvlaXhSGL0AOmTeZZ7K/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDxnkD%2FbtsJJbjhvxm%2FUZQIvlaXhSGL0AOmTeZZ7K%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;1080&quot; height=&quot;1426&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;함께 소설, 만화, 잡지책을 보다가 출출해지면,&amp;nbsp;&lt;/span&gt;&lt;b&gt;라면이나 볶음밥 등 식사나, 간식&lt;/b&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/bibepM/btsJKhWVUR3/LjtMaKQolKxPQ8KFWG8Zg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bibepM/btsJKhWVUR3/LjtMaKQolKxPQ8KFWG8Zg1/img.png&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;865&quot; style=&quot;width: 36.794%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bibepM/btsJKhWVUR3/LjtMaKQolKxPQ8KFWG8Zg1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbibepM%2FbtsJKhWVUR3%2FLjtMaKQolKxPQ8KFWG8Zg1%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;696&quot; height=&quot;865&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/du9HlD/btsJI0vj0l6/oN8GkFkUuwjMUs5oKgKuO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/du9HlD/btsJI0vj0l6/oN8GkFkUuwjMUs5oKgKuO0/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;796&quot; style=&quot;width: 62.0432%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/du9HlD/btsJI0vj0l6/oN8GkFkUuwjMUs5oKgKuO0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdu9HlD%2FbtsJI0vj0l6%2FoN8GkFkUuwjMUs5oKgKuO0%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;1080&quot; height=&quot;796&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 첨벙(숙성횟집) &lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1727091862298&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20165-5%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=625948636&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A983120%2C%22mapCenterY%22%3A466607%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A983120%2C%22y%22%3A466608%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%B2%A8%EB%B2%99%22%2C%22confirmid%22%3A625948636%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=983120&amp;amp;mapY=466607&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=&amp;amp;title=%EC%B2%A8%EB%B2%99&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20165-5%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=625948636&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A983120%2C%22mapCenterY%22%3A466607%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A983120%2C%22y%22%3A466608%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%B2%A8%EB%B2%99%22%2C%22confirmid%22%3A625948636%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=983120&amp;amp;mapY=466607&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=&amp;amp;title=%EC%B2%A8%EB%B2%99&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=983120%2C466607&amp;amp;lv=2&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A983120%2C466608&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727091862298&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;일찍 해가 내려앉고, 바람이 더욱이 차가워지면,&lt;b&gt; 맛있는 안주에 소주 한잔 해야죠!&lt;br&gt;&lt;/b&gt;&lt;b&gt;광안리 숙성회 맛집&lt;/b&gt;으로 유명한 &lt;b&gt;첨벙!&lt;/b&gt;&lt;br&gt;&lt;b&gt;SNS&lt;/b&gt;에서 핫해지며, 웨이팅이 좀 있긴 하지만 &lt;b&gt;원격 줄서기가 가능&lt;/b&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/cwZWYO/btsJIii9mGq/Luchr5gEbpGvSFBeL2lnG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwZWYO/btsJIii9mGq/Luchr5gEbpGvSFBeL2lnG1/img.png&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;478&quot; style=&quot;width: 67.1637%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwZWYO/btsJIii9mGq/Luchr5gEbpGvSFBeL2lnG1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwZWYO%2FbtsJIii9mGq%2FLuchr5gEbpGvSFBeL2lnG1%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;724&quot; height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvRZC8/btsJJYDstJe/GipGSctpSvkYsVtrqCxZ81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvRZC8/btsJJYDstJe/GipGSctpSvkYsVtrqCxZ81/img.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;546&quot; style=&quot;width: 31.6735%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvRZC8/btsJJYDstJe/GipGSctpSvkYsVtrqCxZ81/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvRZC8%2FbtsJJYDstJe%2FGipGSctpSvkYsVtrqCxZ81%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;390&quot; height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회를 포함해서 다양한 밑반찬이 나오는 것이 특징!&lt;/b&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/OBTAs/btsJJQFGmAn/BriCuyMLw1BqeRA4J0mO30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OBTAs/btsJJQFGmAn/BriCuyMLw1BqeRA4J0mO30/img.png&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;579&quot; style=&quot;width: 62.5846%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OBTAs/btsJJQFGmAn/BriCuyMLw1BqeRA4J0mO30/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOBTAs%2FbtsJJQFGmAn%2FBriCuyMLw1BqeRA4J0mO30%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;784&quot; height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oaqLz/btsJKxMavEt/TV5WDWtZTZ8EjcKnzTYUKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oaqLz/btsJKxMavEt/TV5WDWtZTZ8EjcKnzTYUKK/img.png&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;575&quot; style=&quot;width: 36.2526%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oaqLz/btsJKxMavEt/TV5WDWtZTZ8EjcKnzTYUKK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoaqLz%2FbtsJKxMavEt%2FTV5WDWtZTZ8EjcKnzTYUKK%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;451&quot; height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-1306615891601538&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 2&lt;/b&gt;&lt;/h2&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;현대모터스튜디오 부산 (F1963)&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음날 볼거리가 가득한 F1963으로 이동해요.&lt;/b&gt;&lt;/p&gt;&lt;iframe id=&quot;maps_1727223472656&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20475-1%20F1963&amp;amp;addtype=1&amp;amp;confirmid=224222491&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A981710%2C%22mapCenterY%22%3A471868%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A981711%2C%22y%22%3A471872%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%98%84%EB%8C%80%EB%AA%A8%ED%84%B0%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4%20%EB%B6%80%EC%82%B0%22%2C%22confirmid%22%3A224222491%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=981710&amp;amp;mapY=471868&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=1899-6611&amp;amp;title=%ED%98%84%EB%8C%80%EB%AA%A8%ED%84%B0%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4%20%EB%B6%80%EC%82%B0&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20475-1%20F1963&amp;amp;addtype=1&amp;amp;confirmid=224222491&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A981710%2C%22mapCenterY%22%3A471868%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A981711%2C%22y%22%3A471872%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%98%84%EB%8C%80%EB%AA%A8%ED%84%B0%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4%20%EB%B6%80%EC%82%B0%22%2C%22confirmid%22%3A224222491%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=981710&amp;amp;mapY=471868&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=1899-6611&amp;amp;title=%ED%98%84%EB%8C%80%EB%AA%A8%ED%84%B0%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4%20%EB%B6%80%EC%82%B0&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=981710%2C471868&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A981711%2C471872&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727223472656&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;F1963에는 정말 다양한 체험시설이 있는 것 같아요.&lt;br&gt;&lt;/b&gt;여기에는 &lt;b&gt;현대모터스튜디오&lt;/b&gt;도 있는데요.&lt;b&gt;&lt;br&gt;상시로 전시가 진행 중이니 &lt;/b&gt;언제나 항상 볼거리가 있을 거예요.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9C8CY/btsJIpI5BUD/XR3MtQva5Oh0iVzTj8LPik/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9C8CY/btsJIpI5BUD/XR3MtQva5Oh0iVzTj8LPik/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9C8CY/btsJIpI5BUD/XR3MtQva5Oh0iVzTj8LPik/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9C8CY%2FbtsJIpI5BUD%2FXR3MtQva5Oh0iVzTj8LPik%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;712&quot; height=&quot;400&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&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/qlOUx/btsJJSDkfor/tLGlhNCCS40FiZMtik8ul0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qlOUx/btsJJSDkfor/tLGlhNCCS40FiZMtik8ul0/img.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;400&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qlOUx/btsJJSDkfor/tLGlhNCCS40FiZMtik8ul0/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqlOUx%2FbtsJJSDkfor%2FtLGlhNCCS40FiZMtik8ul0%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;600&quot; height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUrvmd/btsJJKrWBnE/lVNW5E4pKk6Z3KXBPkZ4o1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUrvmd/btsJJKrWBnE/lVNW5E4pKk6Z3KXBPkZ4o1/img.jpg&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;400&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUrvmd/btsJJKrWBnE/lVNW5E4pKk6Z3KXBPkZ4o1/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUrvmd%2FbtsJJKrWBnE%2FlVNW5E4pKk6Z3KXBPkZ4o1%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;600&quot; height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;수변최고돼지국밥 민락본점&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;부산의 대표 먹거리 &lt;/b&gt;중 하나인 &lt;b&gt;돼지국밥&lt;/b&gt;으로 속을 따뜻하게 해볼까봐요.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1727093082480&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20110-54%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=14635779&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A986191%2C%22mapCenterY%22%3A466406%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A986192%2C%22y%22%3A466407%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%88%98%EB%B3%80%EC%B5%9C%EA%B3%A0%EB%8F%BC%EC%A7%80%EA%B5%AD%EB%B0%A5%20%EB%AF%BC%EB%9D%BD%EB%B3%B8%EC%A0%90%22%2C%22confirmid%22%3A14635779%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=986191&amp;amp;mapY=466406&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=051-754-9222&amp;amp;title=%EC%88%98%EB%B3%80%EC%B5%9C%EA%B3%A0%EB%8F%BC%EC%A7%80%EA%B5%AD%EB%B0%A5%20%EB%AF%BC%EB%9D%BD%EB%B3%B8%EC%A0%90&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20110-54%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=14635779&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A986191%2C%22mapCenterY%22%3A466406%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A986192%2C%22y%22%3A466407%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%88%98%EB%B3%80%EC%B5%9C%EA%B3%A0%EB%8F%BC%EC%A7%80%EA%B5%AD%EB%B0%A5%20%EB%AF%BC%EB%9D%BD%EB%B3%B8%EC%A0%90%22%2C%22confirmid%22%3A14635779%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=986191&amp;amp;mapY=466406&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=051-754-9222&amp;amp;title=%EC%88%98%EB%B3%80%EC%B5%9C%EA%B3%A0%EB%8F%BC%EC%A7%80%EA%B5%AD%EB%B0%A5%20%EB%AF%BC%EB%9D%BD%EB%B3%B8%EC%A0%90&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=986191%2C466406&amp;amp;lv=2&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A986192%2C466407&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727093082480&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;부산 여러지점에 체인으로 있는 &lt;b&gt;수변최고돼지국밥&lt;/b&gt;.&lt;br&gt;그 중 &lt;b&gt;본점은 민락동&lt;/b&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/Vcdlh/btsJKaRg1et/gItRzJxAt5kKaE5jXJMRL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vcdlh/btsJKaRg1et/gItRzJxAt5kKaE5jXJMRL1/img.png&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;353&quot; style=&quot;width: 60.0609%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vcdlh/btsJKaRg1et/gItRzJxAt5kKaE5jXJMRL1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVcdlh%2FbtsJKaRg1et%2FgItRzJxAt5kKaE5jXJMRL1%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;426&quot; height=&quot;353&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcothr/btsJIucyM3u/cqJwDXnwEb6Mh2pw6AiKrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcothr/btsJIucyM3u/cqJwDXnwEb6Mh2pw6AiKrk/img.png&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;575&quot; style=&quot;width: 38.7763%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcothr/btsJIucyM3u/cqJwDXnwEb6Mh2pw6AiKrk/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcothr%2FbtsJIucyM3u%2FcqJwDXnwEb6Mh2pw6AiKrk%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;448&quot; height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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/mfMRI/btsJJCgEHT8/92iU1KabffL6zQjsc6jTIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mfMRI/btsJJCgEHT8/92iU1KabffL6zQjsc6jTIk/img.png&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;510&quot; style=&quot;width: 34.1873%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mfMRI/btsJJCgEHT8/92iU1KabffL6zQjsc6jTIk/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmfMRI%2FbtsJJCgEHT8%2F92iU1KabffL6zQjsc6jTIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;313&quot; height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coAq2g/btsJIQfomSz/kDg0N5vXLIuQBCMGFN1kv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coAq2g/btsJIQfomSz/kDg0N5vXLIuQBCMGFN1kv0/img.png&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;548&quot; style=&quot;width: 64.6499%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coAq2g/btsJIQfomSz/kDg0N5vXLIuQBCMGFN1kv0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoAq2g%2FbtsJIQfomSz%2FkDg0N5vXLIuQBCMGFN1kv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&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;b&gt;&lt;span style=&quot;color: #006DD7;&quot;&gt;#수영구랜선여행 #수영구청년마일리지 #수영의겨울 #이*희 #광안리 #첨벙 #티앤북스 #북카페 #부산여행 #현대모터스튜디오 #F1963 #수변최고돼지국밥 #레이저아레나 #돼지국밥&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Review</category>
      <category>F1963</category>
      <category>광안리</category>
      <category>돼지국밥</category>
      <category>부산여행</category>
      <category>북카페</category>
      <category>수영구랜선여행</category>
      <category>수영구청년마일리지</category>
      <category>첨벙</category>
      <category>티앤북스</category>
      <category>현대모터스튜디오</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/369</guid>
      <comments>https://montoo.tistory.com/369#entry369comment</comments>
      <pubDate>Wed, 25 Sep 2024 09:18:06 +0900</pubDate>
    </item>
    <item>
      <title>  축제의 계절 가을! 부산 가을 여행 계획</title>
      <link>https://montoo.tistory.com/368</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MfnK9/btsJJyegP9V/7kLPw2kjqOG3yIWu1PN3dK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MfnK9/btsJJyegP9V/7kLPw2kjqOG3yIWu1PN3dK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MfnK9/btsJJyegP9V/7kLPw2kjqOG3yIWu1PN3dK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMfnK9%2FbtsJJyegP9V%2F7kLPw2kjqOG3yIWu1PN3dK%2Fimg.webp&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;1024&quot; height=&quot;680&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;680&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;축제의 계절 가을,&lt;br /&gt;&lt;b&gt;부산의 대표 축제&lt;/b&gt;와 &lt;b&gt;제철 맛집&lt;/b&gt; 위주로 계획을 세워보자!&lt;/span&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✔️ Day1&lt;/b&gt;&lt;br /&gt;&lt;b&gt;부산골목페스티벌(망미골목)  - 4233마음센터  - 이하정간장게장(간장게장)  - 부산불꽃축제  - 숙소&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✔️ Day2&lt;/b&gt;&lt;br /&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;h2 id=&quot;DAY%---&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 1&lt;/b&gt;&lt;/h2&gt;
&lt;h3 id=&quot;--%--%EA%B-%--%EC%--%--%EB%A-%AC%--%EB%-F%--%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 부산골목페스티벌(망미골목)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20603-2&amp;amp;addtype=1&amp;amp;confirmid=517272719&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A980495%2C%22mapCenterY%22%3A470525%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A980496%2C%22y%22%3A470531%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B9%84%EC%BD%98%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%EB%B9%84%EC%BD%98%EC%8A%A4%ED%80%98%EC%96%B4%22%2C%22confirmid%22%3A517272719%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=980495&amp;amp;mapY=470525&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650073000&amp;amp;tel=051-519-0200&amp;amp;title=%EB%B9%84%EC%BD%98%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%EB%B9%84%EC%BD%98%EC%8A%A4%ED%80%98%EC%96%B4&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727090517241&quot; id=&quot;maps_1727090517241&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20603-2&amp;amp;addtype=1&amp;amp;confirmid=517272719&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A980495%2C%22mapCenterY%22%3A470525%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A980496%2C%22y%22%3A470531%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B9%84%EC%BD%98%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%EB%B9%84%EC%BD%98%EC%8A%A4%ED%80%98%EC%96%B4%22%2C%22confirmid%22%3A517272719%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=980495&amp;amp;mapY=470525&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650073000&amp;amp;tel=051-519-0200&amp;amp;title=%EB%B9%84%EC%BD%98%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%20%EB%B9%84%EC%BD%98%EC%8A%A4%ED%80%98%EC%96%B4&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=980495%2C470525&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A980496%2C470531&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2024부산골목페스티벌&lt;/b&gt; 시리즈의 &lt;b&gt;세번째&lt;/b&gt; 축제!&lt;br /&gt;&lt;b&gt;수영구 망미골목&lt;/b&gt;에서 &lt;b&gt;작은 책방과 공방을 체험&lt;/b&gt;할 수 있는 콘텐츠로 구성되어있다고 한다.&lt;br /&gt;복합문화공간인 &lt;b&gt;'비콘그라운드'를 중심으로 진행&lt;/b&gt;되며, 북마켓, 원데이 클래스 등 &lt;b&gt;체험프로그램&lt;/b&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/G1JcA/btsJIltl9sA/QAVerWhKadzDK6th5Qkcek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G1JcA/btsJIltl9sA/QAVerWhKadzDK6th5Qkcek/img.jpg&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;1000&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.544%; margin-right: 10px;&quot; data-widthpercent=&quot;32.93&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G1JcA/btsJIltl9sA/QAVerWhKadzDK6th5Qkcek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG1JcA%2FbtsJIltl9sA%2FQAVerWhKadzDK6th5Qkcek%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;800&quot; height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTIqPq/btsJI3Mjuo2/aZ7U9E1Labk8oZUqjPcrq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTIqPq/btsJI3Mjuo2/aZ7U9E1Labk8oZUqjPcrq0/img.jpg&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;270&quot; data-is-animation=&quot;false&quot; style=&quot;width: 66.2933%;&quot; data-widthpercent=&quot;67.07&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTIqPq/btsJI3Mjuo2/aZ7U9E1Labk8oZUqjPcrq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTIqPq%2FbtsJI3Mjuo2%2FaZ7U9E1Labk8oZUqjPcrq0%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;440&quot; height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1165&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QetLN/btsJIqOJCnH/Tz5LNWq3hRofGqpOYzuOfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QetLN/btsJIqOJCnH/Tz5LNWq3hRofGqpOYzuOfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QetLN/btsJIqOJCnH/Tz5LNWq3hRofGqpOYzuOfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQetLN%2FbtsJIqOJCnH%2FTz5LNWq3hRofGqpOYzuOfk%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;1165&quot; height=&quot;938&quot; data-origin-width=&quot;1165&quot; data-origin-height=&quot;938&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdgS5a/btsJItdCHMo/hSUAZinXZmRRbhMnXWkK71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdgS5a/btsJItdCHMo/hSUAZinXZmRRbhMnXWkK71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdgS5a/btsJItdCHMo/hSUAZinXZmRRbhMnXWkK71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdgS5a%2FbtsJItdCHMo%2FhSUAZinXZmRRbhMnXWkK71%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;764&quot; height=&quot;515&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;515&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;--%--%EA%B-%--%EC%--%--%EB%A-%AC%--%EB%-F%--%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 4233마음센터&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20191-8&amp;amp;addtype=1&amp;amp;confirmid=522018729&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982490%2C%22mapCenterY%22%3A465685%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982490%2C%22y%22%3A465694%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%224233%EB%A7%88%EC%9D%8C%EC%84%BC%ED%84%B0%20%EA%B4%91%EC%95%88%EC%A0%90%22%2C%22confirmid%22%3A522018729%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982490&amp;amp;mapY=465685&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=&amp;amp;title=4233%EB%A7%88%EC%9D%8C%EC%84%BC%ED%84%B0%20%EA%B4%91%EC%95%88%EC%A0%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727091000619&quot; id=&quot;maps_1727091000619&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20191-8&amp;amp;addtype=1&amp;amp;confirmid=522018729&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982490%2C%22mapCenterY%22%3A465685%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982490%2C%22y%22%3A465694%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%224233%EB%A7%88%EC%9D%8C%EC%84%BC%ED%84%B0%20%EA%B4%91%EC%95%88%EC%A0%90%22%2C%22confirmid%22%3A522018729%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982490&amp;amp;mapY=465685&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=&amp;amp;title=4233%EB%A7%88%EC%9D%8C%EC%84%BC%ED%84%B0%20%EA%B4%91%EC%95%88%EC%A0%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982490%2C465685&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A982490%2C465694&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만일 당신이 친구, 또는 연인 &lt;b&gt;둘이서 여행&lt;/b&gt;을 떠난다면, 이곳을 추천한다.&amp;nbsp;&lt;br /&gt;&lt;b&gt;4233마음센터&lt;/b&gt;에서는 &lt;b&gt;다양하고 검증된 심리검사와 독특한 상호작용&lt;/b&gt;을 통해&lt;br /&gt;서로의 &lt;b&gt;성격&lt;/b&gt;, &lt;b&gt;소통 스타일&lt;/b&gt;, 서로와의 &lt;b&gt;관계를 이해&lt;/b&gt;할 수 있도록 한다.&lt;br /&gt;&lt;b&gt;나에 대한 발견&lt;/b&gt; 뿐 아니라 &lt;b&gt;서로의 더 깊은 연결을 경험&lt;/b&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/bLzum6/btsJJPNwThK/LbqY7a2UNcVxIy6eGYKn51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLzum6/btsJJPNwThK/LbqY7a2UNcVxIy6eGYKn51/img.png&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;382&quot; data-is-animation=&quot;false&quot; style=&quot;width: 58.7146%; margin-right: 10px;&quot; data-widthpercent=&quot;59.41&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLzum6/btsJJPNwThK/LbqY7a2UNcVxIy6eGYKn51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLzum6%2FbtsJJPNwThK%2FLbqY7a2UNcVxIy6eGYKn51%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;496&quot; height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8m6GK/btsJJWZWpW0/64s77MCt2l3koPkduKpKz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8m6GK/btsJJWZWpW0/64s77MCt2l3koPkduKpKz1/img.png&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;692&quot; data-is-animation=&quot;false&quot; style=&quot;width: 40.1227%;&quot; data-widthpercent=&quot;40.59&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8m6GK/btsJJWZWpW0/64s77MCt2l3koPkduKpKz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8m6GK%2FbtsJJWZWpW0%2F64s77MCt2l3koPkduKpKz1%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;614&quot; height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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/b0symB/btsJJI8LAGe/SprZrhWpMHY0xQ9k4gOb60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0symB/btsJJI8LAGe/SprZrhWpMHY0xQ9k4gOb60/img.jpg&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;1170&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.1995%; margin-right: 10px;&quot; data-widthpercent=&quot;51.8&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0symB/btsJJI8LAGe/SprZrhWpMHY0xQ9k4gOb60/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0symB%2FbtsJJI8LAGe%2FSprZrhWpMHY0xQ9k4gOb60%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;936&quot; height=&quot;1170&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4LwcY/btsJITpC2kG/HKbhOhM6vaaCn9EMukfKm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4LwcY/btsJITpC2kG/HKbhOhM6vaaCn9EMukfKm1/img.png&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;575&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.6378%;&quot; data-widthpercent=&quot;48.2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4LwcY/btsJITpC2kG/HKbhOhM6vaaCn9EMukfKm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4LwcY%2FbtsJITpC2kG%2FHKbhOhM6vaaCn9EMukfKm1%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;428&quot; height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;--%--%EA%B-%--%EC%--%--%EB%A-%AC%--%EB%-F%--%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;3. &lt;/span&gt;이하정간장게장&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%201077-8%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=222577374&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A981565%2C%22mapCenterY%22%3A468908%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A981565%2C%22y%22%3A468911%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%9D%B4%ED%95%98%EC%A0%95%EA%B0%84%EC%9E%A5%EA%B2%8C%EC%9E%A5%20%EB%B3%B8%EC%A0%90%22%2C%22confirmid%22%3A222577374%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=981565&amp;amp;mapY=468908&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650078000&amp;amp;tel=051-909-6100&amp;amp;title=%EC%9D%B4%ED%95%98%EC%A0%95%EA%B0%84%EC%9E%A5%EA%B2%8C%EC%9E%A5%20%EB%B3%B8%EC%A0%90&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727091862298&quot; id=&quot;maps_1727091862298&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%201077-8%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=222577374&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A981565%2C%22mapCenterY%22%3A468908%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A981565%2C%22y%22%3A468911%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%9D%B4%ED%95%98%EC%A0%95%EA%B0%84%EC%9E%A5%EA%B2%8C%EC%9E%A5%20%EB%B3%B8%EC%A0%90%22%2C%22confirmid%22%3A222577374%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=981565&amp;amp;mapY=468908&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650078000&amp;amp;tel=051-909-6100&amp;amp;title=%EC%9D%B4%ED%95%98%EC%A0%95%EA%B0%84%EC%9E%A5%EA%B2%8C%EC%9E%A5%20%EB%B3%B8%EC%A0%90&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=981565%2C468908&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A981565%2C468911&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;가을 제철요리인 게장&lt;/b&gt;!!&lt;br /&gt;심지어 2TV 생생정보, 먹거리X파일 등 &lt;b&gt;TV프로그램에 나온 맛집, 이하정간장게장&lt;/b&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/bF8IR2/btsJHYZvonb/QGbkKiG1ZC68LO20B2iwMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF8IR2/btsJHYZvonb/QGbkKiG1ZC68LO20B2iwMK/img.png&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;666&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.4281%; margin-right: 10px;&quot; data-widthpercent=&quot;58.1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF8IR2/btsJHYZvonb/QGbkKiG1ZC68LO20B2iwMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF8IR2%2FbtsJHYZvonb%2FQGbkKiG1ZC68LO20B2iwMK%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;1222&quot; height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE0pB4/btsJIVVgdHi/aKO8hS8LMMC8sXLLeSwcf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE0pB4/btsJIVVgdHi/aKO8hS8LMMC8sXLLeSwcf0/img.png&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;582&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.4091%;&quot; data-widthpercent=&quot;41.9&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE0pB4/btsJIVVgdHi/aKO8hS8LMMC8sXLLeSwcf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE0pB4%2FbtsJIVVgdHi%2FaKO8hS8LMMC8sXLLeSwcf0%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;770&quot; height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4wVsp/btsJIkVvSgT/RPvwdOWTEF5QKQyxwTlJIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4wVsp/btsJIkVvSgT/RPvwdOWTEF5QKQyxwTlJIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4wVsp/btsJIkVvSgT/RPvwdOWTEF5QKQyxwTlJIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4wVsp%2FbtsJIkVvSgT%2FRPvwdOWTEF5QKQyxwTlJIk%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;758&quot; height=&quot;566&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;--%--%EA%B-%--%EC%--%--%EB%A-%AC%--%EB%-F%--%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 부산불꽃축제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부산광역시에서 추최하는 &lt;b&gt;대한민국 최대 규모&lt;/b&gt;의 불꽃축제인 &lt;b&gt;부산불꽃축제!!&lt;br /&gt;&lt;/b&gt;부산불꽃축제는 &lt;b&gt;매년 11월 초&lt;/b&gt;에 열리는데,&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;2024년 &lt;b&gt;제19회 &lt;/b&gt;부산불꽃축제&lt;/b&gt;는 &lt;b&gt;&lt;u&gt;11월 9일에 개최&lt;/u&gt;할 예정&lt;/b&gt;이다.&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%882%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982725%2C%22mapCenterY%22%3A465360%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982725&amp;amp;mapY=465360&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=&amp;amp;title=&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727092083149&quot; id=&quot;maps_1727092083149&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%882%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982725%2C%22mapCenterY%22%3A465360%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982725&amp;amp;mapY=465360&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=&amp;amp;title=&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982725%2C465360&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;&quot;&gt;&lt;/iframe&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/dKYQOn/btsJJX5CYIt/BiEaUJoX4RRHVjI9mTrDA0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKYQOn/btsJJX5CYIt/BiEaUJoX4RRHVjI9mTrDA0/img.webp&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;680&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3021%; margin-right: 10px;&quot; data-widthpercent=&quot;49.88&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKYQOn/btsJJX5CYIt/BiEaUJoX4RRHVjI9mTrDA0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKYQOn%2FbtsJJX5CYIt%2FBiEaUJoX4RRHVjI9mTrDA0%2Fimg.webp&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;1024&quot; height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ON8ab/btsJKap9CdH/kk0f5khq1lkUMAFjptki5K/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ON8ab/btsJKap9CdH/kk0f5khq1lkUMAFjptki5K/img.gif&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;423&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.5352%;&quot; data-widthpercent=&quot;50.12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ON8ab/btsJKap9CdH/kk0f5khq1lkUMAFjptki5K/img.gif&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FON8ab%2FbtsJKap9CdH%2Fkk0f5khq1lkUMAFjptki5K%2Fimg.gif&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;640&quot; height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: inline-block; width: 728px; height: 90px;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-1306615891601538&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;DAY%---&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 2&lt;/b&gt;&lt;/h2&gt;
&lt;h3 id=&quot;--%--%EA%B-%--%EC%--%--%EB%A-%AC%--%EB%-F%--%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 광안리국화축제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;10월 중순 ~ 11월 초 광안리 민락해변공원&lt;/b&gt;을 가게되면&lt;br /&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/zqXJg/btsJKlkHRcw/p28bRyqIckA72zB6TEUbCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqXJg/btsJKlkHRcw/p28bRyqIckA72zB6TEUbCk/img.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1350&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqXJg/btsJKlkHRcw/p28bRyqIckA72zB6TEUbCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzqXJg%2FbtsJKlkHRcw%2Fp28bRyqIckA72zB6TEUbCk%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;1080&quot; height=&quot;1350&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LCFm1/btsJKuhAW8z/3ctnaT8hOw8eNeYB9AqNJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LCFm1/btsJKuhAW8z/3ctnaT8hOw8eNeYB9AqNJK/img.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1350&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LCFm1/btsJKuhAW8z/3ctnaT8hOw8eNeYB9AqNJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLCFm1%2FbtsJKuhAW8z%2F3ctnaT8hOw8eNeYB9AqNJK%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;1080&quot; height=&quot;1350&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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/vvzp1/btsJJMpNUXD/pr5QuDXZrzIjQK5ZdzrPcK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vvzp1/btsJJMpNUXD/pr5QuDXZrzIjQK5ZdzrPcK/img.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1350&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vvzp1/btsJJMpNUXD/pr5QuDXZrzIjQK5ZdzrPcK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvvzp1%2FbtsJJMpNUXD%2Fpr5QuDXZrzIjQK5ZdzrPcK%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;1080&quot; height=&quot;1350&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIgLAC/btsJIe8S9su/kHQhvT6LAul8IMh32z8Gm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIgLAC/btsJIe8S9su/kHQhvT6LAul8IMh32z8Gm0/img.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1350&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIgLAC/btsJIe8S9su/kHQhvT6LAul8IMh32z8Gm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIgLAC%2FbtsJIe8S9su%2FkHQhvT6LAul8IMh32z8Gm0%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;1080&quot; height=&quot;1350&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;--%--%EA%B-%--%EC%--%--%EB%A-%AC%--%EB%-F%--%EC%B-%A-&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 한다솥 본점&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부산 수영구에서 가을 축제 한껏 즐겼다면,&lt;br /&gt;&lt;b&gt;차가워지는 가을 바람 + 서늘한 바닷 바람&lt;/b&gt;에 몸이 으슬으슬해졌을 터인데!&lt;br /&gt;이때 &lt;b&gt;따뜻한 솥밥&lt;/b&gt;을 맛있게 먹으면서 가을 축제여행의 마침표를 찍어보는 건 어떨까&lt;/p&gt;
&lt;p&gt;&lt;iframe mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20195-7&amp;amp;addtype=1&amp;amp;confirmid=102556485&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A982250%2C%22mapCenterY%22%3A465153%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982250%2C%22y%22%3A465158%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%95%9C%EB%8B%A4%EC%86%A5%22%2C%22confirmid%22%3A102556485%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=982250&amp;amp;mapY=465153&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=051-752-0840&amp;amp;title=%ED%95%9C%EB%8B%A4%EC%86%A5&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1727093082480&quot; id=&quot;maps_1727093082480&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; data-ke-type=&quot;map&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20195-7&amp;amp;addtype=1&amp;amp;confirmid=102556485&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A982250%2C%22mapCenterY%22%3A465153%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982250%2C%22y%22%3A465158%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%95%9C%EB%8B%A4%EC%86%A5%22%2C%22confirmid%22%3A102556485%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=982250&amp;amp;mapY=465153&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=051-752-0840&amp;amp;title=%ED%95%9C%EB%8B%A4%EC%86%A5&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982250%2C465153&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A982250%2C465158&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솥밥으로 유명한 체인점 &lt;b&gt;한다솥&lt;/b&gt;,&lt;br /&gt;&lt;b&gt;본점은 광안리 해변 근처&lt;/b&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/oCIMa/btsJI9sd16o/kdhb2dyWHbDqz3krsUxXl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oCIMa/btsJI9sd16o/kdhb2dyWHbDqz3krsUxXl0/img.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;580&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.9606%; margin-right: 10px;&quot; data-widthpercent=&quot;49.54&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oCIMa/btsJI9sd16o/kdhb2dyWHbDqz3krsUxXl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoCIMa%2FbtsJI9sd16o%2Fkdhb2dyWHbDqz3krsUxXl0%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;450&quot; height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M4RLJ/btsJJKyKXk9/ULamgbOE5cNm2Bv7Gr9NK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M4RLJ/btsJJKyKXk9/ULamgbOE5cNm2Bv7Gr9NK1/img.png&quot; data-origin-width=&quot;460&quot; data-origin-height=&quot;582&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.46&quot; style=&quot;width: 49.8766%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M4RLJ/btsJJKyKXk9/ULamgbOE5cNm2Bv7Gr9NK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM4RLJ%2FbtsJJKyKXk9%2FULamgbOE5cNm2Bv7Gr9NK1%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;460&quot; height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XfU8b/btsJI1AZrOr/iKkuZKHZblLyoprBq8hYJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XfU8b/btsJI1AZrOr/iKkuZKHZblLyoprBq8hYJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XfU8b/btsJI1AZrOr/iKkuZKHZblLyoprBq8hYJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXfU8b%2FbtsJI1AZrOr%2FiKkuZKHZblLyoprBq8hYJ0%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;908&quot; height=&quot;578&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;578&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;#수영구랜선여행 #수영구청년마일리지 #수영의가을 #이*희 #광안리 #망미골목 #부산불꽃축제 #민락해변공원 #부산여행 #비콘스퀘어 #책방 #간장게장&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Review</category>
      <category>간장게장</category>
      <category>광안리</category>
      <category>망미골목</category>
      <category>민락해변공원</category>
      <category>부산불꽃축제</category>
      <category>부산여행</category>
      <category>비콘스퀘어</category>
      <category>수영구랜선여행</category>
      <category>수영구청년마일리지</category>
      <category>책방</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/368</guid>
      <comments>https://montoo.tistory.com/368#entry368comment</comments>
      <pubDate>Tue, 24 Sep 2024 14:28:16 +0900</pubDate>
    </item>
    <item>
      <title> 벚꽃놀이 가볼만한 곳, 부산 봄 여행 계획 세우기!</title>
      <link>https://montoo.tistory.com/367</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yHTyf/btsJGgTrerd/IT8m0XWDKX6e52vfmmuK6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yHTyf/btsJGgTrerd/IT8m0XWDKX6e52vfmmuK6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yHTyf/btsJGgTrerd/IT8m0XWDKX6e52vfmmuK6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyHTyf%2FbtsJGgTrerd%2FIT8m0XWDKX6e52vfmmuK6K%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;736&quot; height=&quot;488&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt; 
 &lt;p data-ke-size=&quot;size16&quot;&gt;부산에는 참 많은 벚꽃명소가 있는데,&lt;br&gt;오늘은 &lt;b&gt;부산 수영구&lt;/b&gt;를 중심으로 &lt;b&gt;벚꽃 여행 일정&lt;/b&gt;을 짜보도록 하겠습니다!&lt;/p&gt; 
&lt;/blockquote&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;✅ Day1&lt;br&gt;황령산 드라이브  - 테라로사☕(F1963) - 미락뽈락 (횟집) - 수영강 산책로  - 숙소&lt;br&gt;✅ Day2&lt;br&gt;남천동 삼익비치타운  - 남천동 빵지순례  - 복귀&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 1&lt;/b&gt;&lt;/h2&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 황령산 드라이브&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1726840607859&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2039-35&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A978830%2C%22mapCenterY%22%3A464520%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A978832%2C%22y%22%3A464527%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2039-35%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=978830&amp;amp;mapY=464520&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650066000&amp;amp;tel=&amp;amp;title=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2039-35&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2039-35&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A978830%2C%22mapCenterY%22%3A464520%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A978832%2C%22y%22%3A464527%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2039-35%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=978830&amp;amp;mapY=464520&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650066000&amp;amp;tel=&amp;amp;title=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2039-35&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=978830%2C464520&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A978832%2C464527&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726840607859&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;수영구 한복판에 있는 &lt;b&gt;황령산!&lt;/b&gt; 그곳에는 숨은 명소인 &lt;b&gt;벚꽃터널&lt;/b&gt;이 있어요!&lt;br&gt;&lt;b&gt;중간 중간 볼 수있는&lt;/b&gt; &lt;b&gt;시티뷰/광안대교뷰&lt;/b&gt;는 덤!&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ttm50/btsJHT3jXTg/afEMv34K3gwmd51FbSHxck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ttm50/btsJHT3jXTg/afEMv34K3gwmd51FbSHxck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ttm50/btsJHT3jXTg/afEMv34K3gwmd51FbSHxck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fttm50%2FbtsJHT3jXTg%2FafEMv34K3gwmd51FbSHxck%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;773&quot; height=&quot;433&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&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/DJQhT/btsJHnqvJ6E/yUl3wqji1vSrKiZfRd7qCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DJQhT/btsJHnqvJ6E/yUl3wqji1vSrKiZfRd7qCK/img.png&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;762&quot; style=&quot;width: 32.6553%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DJQhT/btsJHnqvJ6E/yUl3wqji1vSrKiZfRd7qCK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDJQhT%2FbtsJHnqvJ6E%2FyUl3wqji1vSrKiZfRd7qCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;574&quot; height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0OcGK/btsJGtyh0AA/4a1xU9JlW4SeztHx2zN6BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0OcGK/btsJGtyh0AA/4a1xU9JlW4SeztHx2zN6BK/img.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;651&quot; style=&quot;width: 32.7628%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0OcGK/btsJGtyh0AA/4a1xU9JlW4SeztHx2zN6BK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0OcGK%2FbtsJGtyh0AA%2F4a1xU9JlW4SeztHx2zN6BK%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;492&quot; height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY9Qox/btsJH09dabL/O82bodXu7sC6Of5HC99QK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY9Qox/btsJH09dabL/O82bodXu7sC6Of5HC99QK1/img.png&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;633&quot; style=&quot;width: 32.2563%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY9Qox/btsJH09dabL/O82bodXu7sC6Of5HC99QK1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY9Qox%2FbtsJH09dabL%2FO82bodXu7sC6Of5HC99QK1%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;471&quot; height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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. 테라로사(F1963)&lt;/b&gt;&lt;/h3&gt;&lt;iframe id=&quot;maps_1726840645551&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20475-1%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=752977632&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A981610%2C%22mapCenterY%22%3A471838%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A981612%2C%22y%22%3A471841%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%85%8C%EB%9D%BC%EB%A1%9C%EC%82%AC%20%EC%88%98%EC%98%81%EC%A0%90%22%2C%22confirmid%22%3A752977632%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=981610&amp;amp;mapY=471838&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=1668-2764&amp;amp;title=%ED%85%8C%EB%9D%BC%EB%A1%9C%EC%82%AC%20%EC%88%98%EC%98%81%EC%A0%90&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20475-1%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=752977632&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A981610%2C%22mapCenterY%22%3A471838%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A981612%2C%22y%22%3A471841%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%ED%85%8C%EB%9D%BC%EB%A1%9C%EC%82%AC%20%EC%88%98%EC%98%81%EC%A0%90%22%2C%22confirmid%22%3A752977632%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=981610&amp;amp;mapY=471838&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=1668-2764&amp;amp;title=%ED%85%8C%EB%9D%BC%EB%A1%9C%EC%82%AC%20%EC%88%98%EC%98%81%EC%A0%90&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=981610%2C471838&amp;amp;lv=2&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A981612%2C471841&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726840645551&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테라로사는 정말 유명하죠!!&lt;/b&gt; 강릉에서 시작된 카페로 알고 있는데,&lt;br&gt;부산에도 &lt;b&gt;복합문화공간인 F1963에&lt;/b&gt; 있습니다!&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ubweA/btsJIr6kDk8/xRM9I0UXu6ny18zEzbhkj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ubweA/btsJIr6kDk8/xRM9I0UXu6ny18zEzbhkj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ubweA/btsJIr6kDk8/xRM9I0UXu6ny18zEzbhkj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FubweA%2FbtsJIr6kDk8%2FxRM9I0UXu6ny18zEzbhkj0%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;713&quot; height=&quot;710&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/78xIH/btsJHSQTmrJ/ZUUkk1XHsmHEvlrjmF2ZMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/78xIH/btsJHSQTmrJ/ZUUkk1XHsmHEvlrjmF2ZMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/78xIH/btsJHSQTmrJ/ZUUkk1XHsmHEvlrjmF2ZMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F78xIH%2FbtsJHSQTmrJ%2FZUUkk1XHsmHEvlrjmF2ZMk%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;880&quot; height=&quot;490&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&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;3. 미락뽈락&lt;/b&gt;&lt;/h3&gt;&lt;iframe id=&quot;maps_1726841040663&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20211-11%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=9768945&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982293%2C%22mapCenterY%22%3A471081%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982293%2C%22y%22%3A471082%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%AF%B8%EB%9D%BD%EB%BD%88%EB%9D%BD%22%2C%22confirmid%22%3A9768945%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982293&amp;amp;mapY=471081&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=051-624-2515&amp;amp;title=%EB%AF%B8%EB%9D%BD%EB%BD%88%EB%9D%BD&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B8%EB%8F%99%20211-11%201%EC%B8%B5&amp;amp;addtype=1&amp;amp;confirmid=9768945&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982293%2C%22mapCenterY%22%3A471081%2C%22mapLevel%22%3A2%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982293%2C%22y%22%3A471082%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%AF%B8%EB%9D%BD%EB%BD%88%EB%9D%BD%22%2C%22confirmid%22%3A9768945%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982293&amp;amp;mapY=471081&amp;amp;map_hybrid=false&amp;amp;map_level=2&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=051-624-2515&amp;amp;title=%EB%AF%B8%EB%9D%BD%EB%BD%88%EB%9D%BD&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982293%2C471081&amp;amp;lv=2&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A982293%2C471082&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726841040663&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;부산에 왔다면 회는 꼭 먹어줘야죠~~~&lt;br&gt;물론 회센터도 좋지만 &lt;b&gt;미락뽈락&lt;/b&gt;과 같은 로컬 맛집도 있답니다!!&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ywnef/btsJF7PKBFA/rem6ftNzkE20mcS479yAI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ywnef/btsJF7PKBFA/rem6ftNzkE20mcS479yAI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ywnef/btsJF7PKBFA/rem6ftNzkE20mcS479yAI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fywnef%2FbtsJF7PKBFA%2Frem6ftNzkE20mcS479yAI0%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;878&quot; height=&quot;568&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&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/ood9l/btsJHxl8LeP/egeNndkBG6JDK4ZR5qzfD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ood9l/btsJHxl8LeP/egeNndkBG6JDK4ZR5qzfD0/img.png&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;346&quot; style=&quot;width: 64.273%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ood9l/btsJHxl8LeP/egeNndkBG6JDK4ZR5qzfD0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Food9l%2FbtsJHxl8LeP%2FegeNndkBG6JDK4ZR5qzfD0%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;659&quot; height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca62AC/btsJGHwi4jy/dHlEgsyO3xK4qoSacebHhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca62AC/btsJGHwi4jy/dHlEgsyO3xK4qoSacebHhK/img.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;701&quot; style=&quot;width: 34.5642%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca62AC/btsJGHwi4jy/dHlEgsyO3xK4qoSacebHhK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca62AC%2FbtsJGHwi4jy%2FdHlEgsyO3xK4qoSacebHhK%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;718&quot; height=&quot;701&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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;4. 수영강 산책로 (좌수영교 인근)&lt;/b&gt;&lt;/h3&gt;&lt;iframe id=&quot;maps_1726841212103&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B82%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982335%2C%22mapCenterY%22%3A472135%2C%22mapLevel%22%3A3%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982335%2C%22y%22%3A472135%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%88%98%EC%98%81%EA%B0%95%20%EC%82%B0%EC%B1%85%EB%A1%9C%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982335&amp;amp;mapY=472135&amp;amp;map_hybrid=false&amp;amp;map_level=3&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=&amp;amp;title=%EC%88%98%EC%98%81%EA%B0%95%20%EC%82%B0%EC%B1%85%EB%A1%9C&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%A7%9D%EB%AF%B82%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982335%2C%22mapCenterY%22%3A472135%2C%22mapLevel%22%3A3%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982335%2C%22y%22%3A472135%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EC%88%98%EC%98%81%EA%B0%95%20%EC%82%B0%EC%B1%85%EB%A1%9C%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982335&amp;amp;mapY=472135&amp;amp;map_hybrid=false&amp;amp;map_level=3&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650075000&amp;amp;tel=&amp;amp;title=%EC%88%98%EC%98%81%EA%B0%95%20%EC%82%B0%EC%B1%85%EB%A1%9C&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982335%2C472135&amp;amp;lv=3&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A982335%2C472135&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726841212103&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;해가지고 밤이 찾아오면, &lt;b&gt;수영강변&lt;/b&gt;의 조명이 하나 둘 켜지는데요!&lt;br&gt;밤에는 &lt;b&gt;수영강 산책로의 벚꽃야경&lt;/b&gt;이 참 예쁩니다~&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3UuZ8/btsJGV8TssC/XkKKNEkgSg60JdAGRhtV5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3UuZ8/btsJGV8TssC/XkKKNEkgSg60JdAGRhtV5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3UuZ8/btsJGV8TssC/XkKKNEkgSg60JdAGRhtV5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3UuZ8%2FbtsJGV8TssC%2FXkKKNEkgSg60JdAGRhtV5k%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;694&quot; height=&quot;516&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;조명이 켜진 좌수영교&lt;/b&gt;를 배경으로 봐도 참 아름답습니다!&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/broAzP/btsJGVufODb/33BADcKxcJ3Wnvm64K3HE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/broAzP/btsJGVufODb/33BADcKxcJ3Wnvm64K3HE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/broAzP/btsJGVufODb/33BADcKxcJ3Wnvm64K3HE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbroAzP%2FbtsJGVufODb%2F33BADcKxcJ3Wnvm64K3HE1%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;716&quot; height=&quot;469&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 2&lt;/b&gt;&lt;/h2&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 남천동 삼익비치아파트&lt;/b&gt;&lt;/h3&gt;&lt;iframe id=&quot;maps_1726841232784&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%20148-9&amp;amp;addtype=1&amp;amp;confirmid=11355607&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982120%2C%22mapCenterY%22%3A462565%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982120%2C%22y%22%3A462574%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%82%A8%EC%B2%9C%EC%82%BC%EC%9D%B5%EB%B9%84%EC%B9%98%EC%95%84%ED%8C%8C%ED%8A%B8%22%2C%22confirmid%22%3A11355607%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982120&amp;amp;mapY=462565&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650067000&amp;amp;tel=&amp;amp;title=%EB%82%A8%EC%B2%9C%EC%82%BC%EC%9D%B5%EB%B9%84%EC%B9%98%EC%95%84%ED%8C%8C%ED%8A%B8&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%20148-9&amp;amp;addtype=1&amp;amp;confirmid=11355607&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=329px&amp;amp;ifrW=550px&amp;amp;mapHeight=329&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A550%2C%22mapHeight%22%3A329%2C%22mapCenterX%22%3A982120%2C%22mapCenterY%22%3A462565%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982120%2C%22y%22%3A462574%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%82%A8%EC%B2%9C%EC%82%BC%EC%9D%B5%EB%B9%84%EC%B9%98%EC%95%84%ED%8C%8C%ED%8A%B8%22%2C%22confirmid%22%3A11355607%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=550&amp;amp;mapX=982120&amp;amp;mapY=462565&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650067000&amp;amp;tel=&amp;amp;title=%EB%82%A8%EC%B2%9C%EC%82%BC%EC%9D%B5%EB%B9%84%EC%B9%98%EC%95%84%ED%8C%8C%ED%8A%B8&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982120%2C462565&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A982120%2C462574&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726841232784&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;여기도 많이 알려진 정말 &lt;b&gt;유명한 곳&lt;/b&gt;이죠 ㅋㅋ&lt;br&gt;둘째날 체크 아웃을 하고 &lt;b&gt;남천동 삼익비치아파트&lt;/b&gt;로 이동합니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P34ia/btsJIuvdIWi/H93CwMxdcVvomUWNHJb7pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P34ia/btsJIuvdIWi/H93CwMxdcVvomUWNHJb7pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P34ia/btsJIuvdIWi/H93CwMxdcVvomUWNHJb7pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP34ia%2FbtsJIuvdIWi%2FH93CwMxdcVvomUWNHJb7pK%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;762&quot; height=&quot;476&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cG5Fdb/btsJGjbwUt1/jxtSNF6KpRX7XwnQPZW660/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cG5Fdb/btsJGjbwUt1/jxtSNF6KpRX7XwnQPZW660/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cG5Fdb/btsJGjbwUt1/jxtSNF6KpRX7XwnQPZW660/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcG5Fdb%2FbtsJGjbwUt1%2FjxtSNF6KpRX7XwnQPZW660%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;797&quot; height=&quot;493&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&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. 남천동 빵지순례&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;남천동에 왔다면 &lt;b&gt;빵지순례&lt;/b&gt;를 빼놓을 수 없죠!&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u5rk6/btsJHVNAQlS/0d0rV7CbJrjRigUkBPUDCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u5rk6/btsJHVNAQlS/0d0rV7CbJrjRigUkBPUDCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u5rk6/btsJHVNAQlS/0d0rV7CbJrjRigUkBPUDCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu5rk6%2FbtsJHVNAQlS%2F0d0rV7CbJrjRigUkBPUDCk%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;868&quot; height=&quot;593&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYWzVj/btsJGOIHey7/VqI0MK3XMSNirqqkLs4bmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYWzVj/btsJGOIHey7/VqI0MK3XMSNirqqkLs4bmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYWzVj/btsJGOIHey7/VqI0MK3XMSNirqqkLs4bmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYWzVj%2FbtsJGOIHey7%2FVqI0MK3XMSNirqqkLs4bmk%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;743&quot; height=&quot;496&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style2&quot;&gt;#수영구랜선여행 #수영구청년마일리지 #수영의봄 #이*희 #황령산 #남천동 #벚꽃 #드라이브 #테라로사 #F1963 #횟집 #수영강 #좌수영교 #벚꽃야경 #삼익비치타운&lt;/blockquote&gt;</description>
      <category>Review</category>
      <category>드라이브</category>
      <category>벚꽃</category>
      <category>벚꽃야경</category>
      <category>수영구랜선여행</category>
      <category>수영구청년마일리지</category>
      <category>수영의봄</category>
      <category>이*희</category>
      <category>좌수영교</category>
      <category>테라로사</category>
      <category>황령산</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/367</guid>
      <comments>https://montoo.tistory.com/367#entry367comment</comments>
      <pubDate>Mon, 23 Sep 2024 14:03:37 +0900</pubDate>
    </item>
    <item>
      <title> 광안리 가볼만한 곳, 부산 여름 여행 계획 세우기!</title>
      <link>https://montoo.tistory.com/366</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfEEJ4/btsJGNCX1rO/etdtRZiT4u4u4XfywBJq5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfEEJ4/btsJGNCX1rO/etdtRZiT4u4u4XfywBJq5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfEEJ4/btsJGNCX1rO/etdtRZiT4u4u4XfywBJq5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfEEJ4%2FbtsJGNCX1rO%2FetdtRZiT4u4u4XfywBJq5K%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;772&quot; height=&quot;435&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt; 
 &lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;부산 대표 해수욕장, 광안리 해수욕장&lt;/b&gt;&lt;br&gt;광안리 해수욕장을 중심으로 늦여름 여행계획을 세워보자!&lt;/p&gt; 
&lt;/blockquote&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;✔️ Day1&lt;br&gt;광안리  - 밀락더마켓  - 민락회타운  - 광안리M스타라이트쇼  - 숙소&lt;br&gt;✔️ Day2&lt;br&gt;남천동 빵지순례  - 다리집  - 복귀&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 1&lt;/b&gt;&lt;/h2&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 광안리 도착&lt;/b&gt;&lt;/h3&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUveDt/btsJGGD6nBG/kOKq95Rmz4f8HYiufMRook/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUveDt/btsJGGD6nBG/kOKq95Rmz4f8HYiufMRook/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUveDt/btsJGGD6nBG/kOKq95Rmz4f8HYiufMRook/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUveDt%2FbtsJGGD6nBG%2FkOKq95Rmz4f8HYiufMRook%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;555&quot; height=&quot;417&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1726833919754&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20192-20&amp;amp;addtype=1&amp;amp;confirmid=8202423&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A982725%2C%22mapCenterY%22%3A465363%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982728%2C%22y%22%3A465367%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EA%B4%91%EC%95%88%EB%A6%AC%ED%95%B4%EC%88%98%EC%9A%95%EC%9E%A5%22%2C%22confirmid%22%3A8202423%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=982725&amp;amp;mapY=465363&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=051-610-4722&amp;amp;title=%EA%B4%91%EC%95%88%EB%A6%AC%ED%95%B4%EC%88%98%EC%9A%95%EC%9E%A5&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EA%B4%91%EC%95%88%EB%8F%99%20192-20&amp;amp;addtype=1&amp;amp;confirmid=8202423&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A982725%2C%22mapCenterY%22%3A465363%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A982728%2C%22y%22%3A465367%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EA%B4%91%EC%95%88%EB%A6%AC%ED%95%B4%EC%88%98%EC%9A%95%EC%9E%A5%22%2C%22confirmid%22%3A8202423%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=982725&amp;amp;mapY=465363&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650077000&amp;amp;tel=051-610-4722&amp;amp;title=%EA%B4%91%EC%95%88%EB%A6%AC%ED%95%B4%EC%88%98%EC%9A%95%EC%9E%A5&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=982725%2C465363&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A982728%2C465367&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726833919754&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 밀락더마켓&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;부산의 초대형 복합문화공간.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1726833936224&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20113-31&amp;amp;addtype=1&amp;amp;confirmid=852075435&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A984550%2C%22mapCenterY%22%3A465703%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A984550%2C%22y%22%3A465708%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B0%80%EB%9D%BD%EB%8D%94%EB%A7%88%EC%BC%93%22%2C%22confirmid%22%3A852075435%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=984550&amp;amp;mapY=465703&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=051-752-5671&amp;amp;title=%EB%B0%80%EB%9D%BD%EB%8D%94%EB%A7%88%EC%BC%93&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20113-31&amp;amp;addtype=1&amp;amp;confirmid=852075435&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A984550%2C%22mapCenterY%22%3A465703%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A984550%2C%22y%22%3A465708%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B0%80%EB%9D%BD%EB%8D%94%EB%A7%88%EC%BC%93%22%2C%22confirmid%22%3A852075435%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=984550&amp;amp;mapY=465703&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=051-752-5671&amp;amp;title=%EB%B0%80%EB%9D%BD%EB%8D%94%EB%A7%88%EC%BC%93&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=984550%2C465703&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A984550%2C465708&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726833936224&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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/czrsav/btsJGNJKTCe/ckWUDkt9LPbznCn6kbyDs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czrsav/btsJGNJKTCe/ckWUDkt9LPbznCn6kbyDs0/img.png&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;412&quot; style=&quot;width: 45.0512%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czrsav/btsJGNJKTCe/ckWUDkt9LPbznCn6kbyDs0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczrsav%2FbtsJGNJKTCe%2FckWUDkt9LPbznCn6kbyDs0%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;632&quot; height=&quot;412&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AomH9/btsJGzSzh07/jhbRBau82iy4ED5EH5xjF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AomH9/btsJGzSzh07/jhbRBau82iy4ED5EH5xjF1/img.png&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;344&quot; style=&quot;width: 53.786%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AomH9/btsJGzSzh07/jhbRBau82iy4ED5EH5xjF1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAomH9%2FbtsJGzSzh07%2FjhbRBau82iy4ED5EH5xjF1%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;630&quot; height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022 부산다운건축상에서 대상을 수상하기도 한 건축물이다.&lt;br&gt;이곳은 민락수변공원에 위치하고 있고, 트렌디한 상점가가 집중되어있어 인기가 많다.&lt;br&gt;광안대교가 보이는 전면유리로 된 공간에서는 행사가 끊임없이 진행되어 사람들이 많이 모여있는 것을 볼 수 있다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clhdjC/btsJHB2Ujm8/RczBUeuCM4k9AKWkV92Cz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clhdjC/btsJHB2Ujm8/RczBUeuCM4k9AKWkV92Cz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clhdjC/btsJHB2Ujm8/RczBUeuCM4k9AKWkV92Cz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclhdjC%2FbtsJHB2Ujm8%2FRczBUeuCM4k9AKWkV92Cz1%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;775&quot; height=&quot;380&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbhNPQ/btsJHYXRsJg/ykLKiM7y47u7oBB1VSv72K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbhNPQ/btsJHYXRsJg/ykLKiM7y47u7oBB1VSv72K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbhNPQ/btsJHYXRsJg/ykLKiM7y47u7oBB1VSv72K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbhNPQ%2FbtsJHYXRsJg%2FykLKiM7y47u7oBB1VSv72K%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;775&quot; height=&quot;505&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&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;3. 민락회타운&lt;br&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1726833955083&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20181-84&amp;amp;addtype=1&amp;amp;confirmid=18444596&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A983800%2C%22mapCenterY%22%3A466053%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A983800%2C%22y%22%3A466057%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%AF%BC%EB%9D%BD%ED%9A%8C%ED%83%80%EC%9A%B4%EC%8B%9C%EC%9E%A5%22%2C%22confirmid%22%3A18444596%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=983800&amp;amp;mapY=466053&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=&amp;amp;title=%EB%AF%BC%EB%9D%BD%ED%9A%8C%ED%83%80%EC%9A%B4%EC%8B%9C%EC%9E%A5&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99%20181-84&amp;amp;addtype=1&amp;amp;confirmid=18444596&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A983800%2C%22mapCenterY%22%3A466053%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A983800%2C%22y%22%3A466057%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%AF%BC%EB%9D%BD%ED%9A%8C%ED%83%80%EC%9A%B4%EC%8B%9C%EC%9E%A5%22%2C%22confirmid%22%3A18444596%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=983800&amp;amp;mapY=466053&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=&amp;amp;title=%EB%AF%BC%EB%9D%BD%ED%9A%8C%ED%83%80%EC%9A%B4%EC%8B%9C%EC%9E%A5&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=983800%2C466053&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A983800%2C466057&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726833955083&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mWvBu/btsJHPmvb4E/gsBIKWHHZ2gckFYrJTHnV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mWvBu/btsJHPmvb4E/gsBIKWHHZ2gckFYrJTHnV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mWvBu/btsJHPmvb4E/gsBIKWHHZ2gckFYrJTHnV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmWvBu%2FbtsJHPmvb4E%2FgsBIKWHHZ2gckFYrJTHnV1%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;773&quot; height=&quot;345&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEPA6T/btsJHOgN6r7/UHpZY7PL2XHbdd40ghCvb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEPA6T/btsJHOgN6r7/UHpZY7PL2XHbdd40ghCvb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEPA6T/btsJHOgN6r7/UHpZY7PL2XHbdd40ghCvb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEPA6T%2FbtsJHOgN6r7%2FUHpZY7PL2XHbdd40ghCvb1%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;417&quot; height=&quot;413&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&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;4. 광안리 M 드론라이트쇼 / 야경&lt;br&gt;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1726834003831&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A983538%2C%22mapCenterY%22%3A465673%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A983482.5%2C%22y%22%3A465720%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EA%B4%91%EC%95%88%EB%A6%ACM%EB%93%9C%EB%A1%A0%EB%9D%BC%EC%9D%B4%ED%8A%B8%EC%87%BC%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=983538&amp;amp;mapY=465673&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=&amp;amp;title=%EA%B4%91%EC%95%88%EB%A6%ACM%EB%93%9C%EB%A1%A0%EB%9D%BC%EC%9D%B4%ED%8A%B8%EC%87%BC&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%EA%B4%91%EC%97%AD%EC%8B%9C%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%AF%BC%EB%9D%BD%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A983538%2C%22mapCenterY%22%3A465673%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A983482.5%2C%22y%22%3A465720%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EA%B4%91%EC%95%88%EB%A6%ACM%EB%93%9C%EB%A1%A0%EB%9D%BC%EC%9D%B4%ED%8A%B8%EC%87%BC%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=983538&amp;amp;mapY=465673&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650080000&amp;amp;tel=&amp;amp;title=%EA%B4%91%EC%95%88%EB%A6%ACM%EB%93%9C%EB%A1%A0%EB%9D%BC%EC%9D%B4%ED%8A%B8%EC%87%BC&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=983538%2C465673&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A983482.5%2C465720&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726834003831&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;광안리를 갔다면 꼭 봐야한다는 &lt;b&gt;드론쇼!!&lt;/b&gt;&lt;br&gt;광안대교를 배경으로 펼쳐지는 드론라이트쇼는 &lt;b&gt;매주 토요일 2회&lt;/b&gt; 펼쳐지는데,&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;&lt;b&gt;하절기&lt;/b&gt;(3월~9월)에는 &lt;b&gt;20시, 22시&lt;/b&gt;에 진행되며,&lt;/li&gt;&lt;li&gt;&lt;b&gt;동절기&lt;/b&gt;(10월~2월)에는 &lt;b&gt;19시, 21시&lt;/b&gt;에 진행된다.&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exyxY3/btsJIouZxP1/wlTP29K7xQHhicI8z7rEOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exyxY3/btsJIouZxP1/wlTP29K7xQHhicI8z7rEOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exyxY3/btsJIouZxP1/wlTP29K7xQHhicI8z7rEOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexyxY3%2FbtsJIouZxP1%2FwlTP29K7xQHhicI8z7rEOK%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;1226&quot; height=&quot;482&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYMTvk/btsJGzSzkST/Hpi6bGeCnv5PswmIfDk6C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYMTvk/btsJGzSzkST/Hpi6bGeCnv5PswmIfDk6C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYMTvk/btsJGzSzkST/Hpi6bGeCnv5PswmIfDk6C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYMTvk%2FbtsJGzSzkST%2FHpi6bGeCnv5PswmIfDk6C1%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;426&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&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;5. 숙소 도착 - 휴식!&lt;/b&gt;&lt;/h3&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mK9q1/btsJIlSMbvB/TIEAxKtMtn3kCtYpN4Gk9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mK9q1/btsJIlSMbvB/TIEAxKtMtn3kCtYpN4Gk9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mK9q1/btsJIlSMbvB/TIEAxKtMtn3kCtYpN4Gk9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmK9q1%2FbtsJIlSMbvB%2FTIEAxKtMtn3kCtYpN4Gk9k%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;310&quot; height=&quot;408&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DAY 2&lt;/b&gt;&lt;/h2&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 숙소 체크아웃&lt;/b&gt;&lt;/h3&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CfHVL/btsJGO2V8rG/nXNHDVEa5QC7MZP55slrtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CfHVL/btsJGO2V8rG/nXNHDVEa5QC7MZP55slrtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CfHVL/btsJGO2V8rG/nXNHDVEa5QC7MZP55slrtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCfHVL%2FbtsJGO2V8rG%2FnXNHDVEa5QC7MZP55slrtK%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;525&quot; height=&quot;410&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;/figure&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. 남천동 빵지순례길&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;광안리 근처 남천동은 맛있는 빵집이 많기로 유명하다!!&lt;br&gt;&lt;b&gt;여행 필수 코스&lt;/b&gt;이니 꼭 가보도록 하자!&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1726834060627&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A981370%2C%22mapCenterY%22%3A463305%2C%22mapLevel%22%3A6%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A980830%2C%22y%22%3A462430%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=981370&amp;amp;mapY=463305&amp;amp;map_hybrid=false&amp;amp;map_level=6&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650067000&amp;amp;tel=&amp;amp;title=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99&amp;amp;addtype=1&amp;amp;confirmid=&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A981370%2C%22mapCenterY%22%3A463305%2C%22mapLevel%22%3A6%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A980830%2C%22y%22%3A462430%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%22%2C%22confirmid%22%3A%22%22%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=981370&amp;amp;mapY=463305&amp;amp;map_hybrid=false&amp;amp;map_level=6&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650067000&amp;amp;tel=&amp;amp;title=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=981370%2C463305&amp;amp;lv=6&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A980830%2C462430&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726834060627&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjmAhc/btsJIesz556/MqHwdV7f7tI5O89OKEppXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjmAhc/btsJIesz556/MqHwdV7f7tI5O89OKEppXK/img.png&quot; data-alt=&quot;수영구에서 제공하는 빵지도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjmAhc/btsJIesz556/MqHwdV7f7tI5O89OKEppXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjmAhc%2FbtsJIesz556%2FMqHwdV7f7tI5O89OKEppXK%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;471&quot; height=&quot;348&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수영구에서 제공하는 빵지도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;964&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcpb5U/btsJHskOZh4/DkkWy8D0RWe1wEoOO4U7cK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcpb5U/btsJHskOZh4/DkkWy8D0RWe1wEoOO4U7cK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcpb5U/btsJHskOZh4/DkkWy8D0RWe1wEoOO4U7cK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcpb5U%2FbtsJHskOZh4%2FDkkWy8D0RWe1wEoOO4U7cK%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;1920&quot; height=&quot;964&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;964&quot;/&gt;&lt;/span&gt;&lt;/figure&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. 다리집 본점 - 떡볶이, 물떡&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;부산 떡볶이 맛집 다리집&lt;/b&gt;&lt;br&gt;어묵 국물에 떡을 불려서 먹는 &lt;b&gt;물떡&lt;/b&gt;도 유명하다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;iframe id=&quot;maps_1726833810560&quot; data-ke-type=&quot;map&quot; mapdata=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2029-4%20%EC%A0%95%EC%9B%90%EC%84%BC%ED%85%80%EB%B7%B0%20101%ED%98%B8&amp;amp;addtype=1&amp;amp;confirmid=8849564&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A980875%2C%22mapCenterY%22%3A463468%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A980879%2C%22y%22%3A463470%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%8B%A4%EB%A6%AC%EC%A7%91%20%EB%B3%B8%EC%A0%90%22%2C%22confirmid%22%3A8849564%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=980875&amp;amp;mapY=463468&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650066000&amp;amp;tel=&amp;amp;title=%EB%8B%A4%EB%A6%AC%EC%A7%91%20%EB%B3%B8%EC%A0%90&quot; data-maps-data=&quot;addr=%EB%B6%80%EC%82%B0%20%EC%88%98%EC%98%81%EA%B5%AC%20%EB%82%A8%EC%B2%9C%EB%8F%99%2029-4%20%EC%A0%95%EC%9B%90%EC%84%BC%ED%85%80%EB%B7%B0%20101%ED%98%B8&amp;amp;addtype=1&amp;amp;confirmid=8849564&amp;amp;docid=&amp;amp;idx=1&amp;amp;ifrH=362px&amp;amp;ifrW=490px&amp;amp;mapHeight=362&amp;amp;mapInfo=%7B%22version%22%3A2%2C%22mapWidth%22%3A490%2C%22mapHeight%22%3A362%2C%22mapCenterX%22%3A980875%2C%22mapCenterY%22%3A463468%2C%22mapLevel%22%3A4%2C%22coordinate%22%3A%22wcongnamul%22%2C%22markInfo%22%3A%5B%7B%22markerType%22%3A%22standPlace%22%2C%22coordinate%22%3A%22wcongnamul%22%2C%22x%22%3A980879%2C%22y%22%3A463470%2C%22clickable%22%3Atrue%2C%22draggable%22%3Atrue%2C%22icon%22%3A%7B%22width%22%3A35%2C%22height%22%3A56%2C%22offsetX%22%3A17%2C%22offsetY%22%3A56%2C%22src%22%3A%22%2F%2Ft1.daumcdn.net%2Flocalimg%2Flocalimages%2F07%2F2012%2Fattach%2Fpc_img%2Fico_marker2_150331.png%22%7D%2C%22content%22%3A%22%EB%8B%A4%EB%A6%AC%EC%A7%91%20%EB%B3%B8%EC%A0%90%22%2C%22confirmid%22%3A8849564%7D%5D%2C%22graphicInfo%22%3A%5B%5D%2C%22roadviewInfo%22%3A%5B%5D%7D&amp;amp;mapWidth=490&amp;amp;mapX=980875&amp;amp;mapY=463468&amp;amp;map_hybrid=false&amp;amp;map_level=4&amp;amp;map_type=TYPE_MAP&amp;amp;rcode=2650066000&amp;amp;tel=&amp;amp;title=%EB%8B%A4%EB%A6%AC%EC%A7%91%20%EB%B3%B8%EC%A0%90&quot; data-maps-mapx=&quot;&quot; data-maps-mapy=&quot;&quot; data-maps-thumbnail=&quot;https://ssl.daumcdn.net/map3/staticmap/image?center=980875%2C463468&amp;amp;lv=4&amp;amp;size=540x350&amp;amp;srs=WCONGNAMUL&amp;amp;markers=symbol%3Asc_marker%7Clocation%3A980879%2C463470&quot; width=&quot;540px&quot; height=&quot;350px&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;/proxy/plusmapViewer.php?id=maps_1726833810560&quot;&gt;&lt;/iframe&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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/cWIkCN/btsJGMRAWev/kDqBXlTVtkDcLtM16020wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWIkCN/btsJGMRAWev/kDqBXlTVtkDcLtM16020wK/img.png&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;471&quot; style=&quot;width: 42.2703%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWIkCN/btsJGMRAWev/kDqBXlTVtkDcLtM16020wK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWIkCN%2FbtsJGMRAWev%2FkDqBXlTVtkDcLtM16020wK%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;359&quot; height=&quot;471&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/szZ8I/btsJIkl2a3i/7TEH7LK7lhy2d9kKHerr11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/szZ8I/btsJIkl2a3i/7TEH7LK7lhy2d9kKHerr11/img.png&quot; data-origin-width=&quot;357&quot; data-origin-height=&quot;350&quot; style=&quot;width: 56.5669%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/szZ8I/btsJIkl2a3i/7TEH7LK7lhy2d9kKHerr11/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FszZ8I%2FbtsJIkl2a3i%2F7TEH7LK7lhy2d9kKHerr11%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;357&quot; height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&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;3. 복귀&lt;/b&gt;&lt;/h3&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8c6rq/btsJGjbu0Iz/QiP3WEE2VLTBGghZveL3R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8c6rq/btsJGjbu0Iz/QiP3WEE2VLTBGghZveL3R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8c6rq/btsJGjbu0Iz/QiP3WEE2VLTBGghZveL3R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8c6rq%2FbtsJGjbu0Iz%2FQiP3WEE2VLTBGghZveL3R1%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;436&quot; height=&quot;271&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #009A87;&quot;&gt;#수영구랜선여행 #수영구청년마일리지 #수영의여름 #이*희 #광안리 #남천동 #민락회센터 #밀락더마켓 #부산여행 #빵지순례&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;</description>
      <category>Review</category>
      <category>광안리</category>
      <category>남천동</category>
      <category>민락회센터</category>
      <category>밀락더마켓</category>
      <category>부산여행</category>
      <category>빵지순례</category>
      <category>수영구랜선여행</category>
      <category>수영구청년마일리지</category>
      <category>수영의여름</category>
      <category>이*희</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/366</guid>
      <comments>https://montoo.tistory.com/366#entry366comment</comments>
      <pubDate>Fri, 20 Sep 2024 21:01:19 +0900</pubDate>
    </item>
    <item>
      <title>[도서] SQL 백과사전 ( SQL Cookbook )</title>
      <link>https://montoo.tistory.com/365</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;https://jul-liet.tistory.com/213&quot; href=&quot;https://jul-liet.tistory.com/213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jul-liet.tistory.com/213&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686184243614&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;[IT도서] SQL 쿡북 리뷰 (부제 : SQL문 백과사전)&quot; data-og-description=&quot;개발자라면 SQL문은 필수다 DB와 SQL문에 대해서 정확히 배우지는 않았지만 개발을 하게된다면 자연스럽게 알게될 (필수로 알아야 할과 같은 말ㅎ) SELECT, UPDATE, DELETE 등등의 DML, DDL 문들... 회사에 &quot; data-og-host=&quot;jul-liet.tistory.com&quot; data-og-source-url=&quot;https://jul-liet.tistory.com/213&quot; data-og-url=&quot;https://jul-liet.tistory.com/213&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dlQdpD/hySTUmh8bN/ZYKX5bdFkBHcyLxp30niQk/img.jpg?width=400&amp;amp;height=514&amp;amp;face=0_0_400_514,https://scrap.kakaocdn.net/dn/CT0Oq/hySVHMoX3e/ZYkHh4Wfq6lQNVe01OcLik/img.jpg?width=400&amp;amp;height=514&amp;amp;face=0_0_400_514,https://scrap.kakaocdn.net/dn/dFaPhE/hySTJrx0jM/Yzb1payd4hsjKinxpZ5SdK/img.jpg?width=1080&amp;amp;height=1440&amp;amp;face=0_0_1080_1440&quot;&gt;&lt;a href=&quot;https://jul-liet.tistory.com/213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jul-liet.tistory.com/213&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dlQdpD/hySTUmh8bN/ZYKX5bdFkBHcyLxp30niQk/img.jpg?width=400&amp;amp;height=514&amp;amp;face=0_0_400_514,https://scrap.kakaocdn.net/dn/CT0Oq/hySVHMoX3e/ZYkHh4Wfq6lQNVe01OcLik/img.jpg?width=400&amp;amp;height=514&amp;amp;face=0_0_400_514,https://scrap.kakaocdn.net/dn/dFaPhE/hySTJrx0jM/Yzb1payd4hsjKinxpZ5SdK/img.jpg?width=1080&amp;amp;height=1440&amp;amp;face=0_0_1080_1440');&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;[IT도서] SQL 쿡북 리뷰 (부제 : SQL문 백과사전)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발자라면 SQL문은 필수다 DB와 SQL문에 대해서 정확히 배우지는 않았지만 개발을 하게된다면 자연스럽게 알게될 (필수로 알아야 할과 같은 말ㅎ) SELECT, UPDATE, DELETE 등등의 DML, DDL 문들... 회사에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jul-liet.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매처&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예사 (실물책)&lt;br /&gt;36,000&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.yes24.com/Product/Goods/106207663&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.yes24.com/Product/Goods/106207663&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686185208802&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;book&quot; data-og-title=&quot;SQL 쿡북 - YES24&quot; data-og-description=&quot;SQL 언어를 마스터하기 위한 마지막 필독서SQL을 유연하게 사용하기 위해서는 기본적인 내용뿐만 아니라 다양한 표현식을 잘 알아야 한다. 『SQL 쿡북: 모든 SQL 사용자를 위한 쿼리 완벽 가이드』 &quot; data-og-host=&quot;www.yes24.com&quot; data-og-source-url=&quot;https://www.yes24.com/Product/Goods/106207663&quot; data-og-url=&quot;https://www.yes24.com/Product/Goods/106207663&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/6HhIl/hySVJQZrze/SGEcarKZDFutlzpxbA6jg1/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/cgDNnU/hySVNy5iWc/QQHdVAs5XnIXtKWm3YInM1/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/ca5ygP/hySVEoBLQe/SlC5tKil8LbUcw1xFITVKK/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200&quot;&gt;&lt;a href=&quot;https://www.yes24.com/Product/Goods/106207663&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.yes24.com/Product/Goods/106207663&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/6HhIl/hySVJQZrze/SGEcarKZDFutlzpxbA6jg1/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/cgDNnU/hySVNy5iWc/QQHdVAs5XnIXtKWm3YInM1/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/ca5ygP/hySVEoBLQe/SlC5tKil8LbUcw1xFITVKK/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200');&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;SQL 쿡북 - YES24&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SQL 언어를 마스터하기 위한 마지막 필독서SQL을 유연하게 사용하기 위해서는 기본적인 내용뿐만 아니라 다양한 표현식을 잘 알아야 한다. 『SQL 쿡북: 모든 SQL 사용자를 위한 쿼리 완벽 가이드』&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yes24.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;리디 (e-book)&lt;br /&gt;32,000 (e-book이지만 할인률이 적은듯)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ridibooks.com/books/443000996&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ridibooks.com/books/443000996&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686185279907&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;books.book&quot; data-og-title=&quot;SQL 쿡북&quot; data-og-description=&quot;SQL 언어를 마스터하기 위한 마지막 필독서 SQL을 유연하게 사용하기 위해서는 기본적인 내용뿐만 아니라 다양한 표현식을 잘 알아야 한다. 이 책은 SQL에 대한 매우 실용적인 접근 방식을 적용하&quot; data-og-host=&quot;ridibooks.com&quot; data-og-source-url=&quot;https://ridibooks.com/books/443000996&quot; data-og-url=&quot;https://ridibooks.com/books/443000996&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZXHgQ/hySVyPtmca/tXu1AQ046z09ZB5PB4fEUk/img.jpg?width=480&amp;amp;height=616&amp;amp;face=0_0_480_616,https://scrap.kakaocdn.net/dn/bq2BfA/hySTXchVYW/qABvFKMubzG4TzTFYSKYZ1/img.png?width=300&amp;amp;height=450&amp;amp;face=0_0_300_450,https://scrap.kakaocdn.net/dn/brXAEK/hySTHAvzQc/0FIMacd0l10DYpLz6PmeCK/img.png?width=300&amp;amp;height=450&amp;amp;face=0_0_300_450&quot;&gt;&lt;a href=&quot;https://ridibooks.com/books/443000996&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ridibooks.com/books/443000996&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZXHgQ/hySVyPtmca/tXu1AQ046z09ZB5PB4fEUk/img.jpg?width=480&amp;amp;height=616&amp;amp;face=0_0_480_616,https://scrap.kakaocdn.net/dn/bq2BfA/hySTXchVYW/qABvFKMubzG4TzTFYSKYZ1/img.png?width=300&amp;amp;height=450&amp;amp;face=0_0_300_450,https://scrap.kakaocdn.net/dn/brXAEK/hySTHAvzQc/0FIMacd0l10DYpLz6PmeCK/img.png?width=300&amp;amp;height=450&amp;amp;face=0_0_300_450');&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;SQL 쿡북&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SQL 언어를 마스터하기 위한 마지막 필독서 SQL을 유연하게 사용하기 위해서는 기본적인 내용뿐만 아니라 다양한 표현식을 잘 알아야 한다. 이 책은 SQL에 대한 매우 실용적인 접근 방식을 적용하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ridibooks.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;SQL 쿡북 data insert&lt;/p&gt;
&lt;pre id=&quot;code_1686186436975&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE EMP  (
 EMPNO NUMBER , 
 ENAME VARCHAR2(10) , 
 JOB VARCHAR2(10) , 
 MGR NUMBER , 
 HIREDATE DATE , 
 SAL NUMBER , 
 COMM NUMBER , 
 DEPTNO NUMBER 
 );


INSERT INTO EMP VALUES
        (7369, 'SMITH',  'CLERK',     7902,
        DATE('17-DEC-2005'),  800, NULL, 20);
INSERT INTO EMP VALUES
        (7499, 'ALLEN',  'SALESMAN',  7698,
        date('20-FEB-2006'), 1600,  300, 30);
INSERT INTO EMP VALUES
        (7521, 'WARD',   'SALESMAN',  7698,
        date('22-FEB-2006'), 1250,  500, 30);
INSERT INTO EMP VALUES
        (7566, 'JONES',  'MANAGER',   7839,
        date('02-APR-2006'),  2975, NULL, 20);
INSERT INTO EMP VALUES
        (7654, 'MARTIN', 'SALESMAN',  7698,
        date('28-SEP-2006'), 1250, 1400, 30);
INSERT INTO EMP VALUES
        (7698, 'BLAKE',  'MANAGER',   7839,
        date('01-MAY-2006'),  2850, NULL, 30);
INSERT INTO EMP VALUES
        (7782, 'CLARK',  'MANAGER',   7839,
        date('09-JUN-2006'),  2450, NULL, 10);
INSERT INTO EMP VALUES
        (7788, 'SCOTT',  'ANALYST',   7566,
        date('09-DEC-2007'), 3000, NULL, 20);
INSERT INTO EMP VALUES
        (7839, 'KING',   'PRESIDENT', NULL,
        date('17-NOV-2006'), 5000, NULL, 10);
INSERT INTO EMP VALUES
        (7844, 'TURNER', 'SALESMAN',  7698,
        date('08-SEP-2006'),  1500,    0, 30);
INSERT INTO EMP VALUES
        (7876, 'ADAMS',  'CLERK',     7788,
        date('12-JAN-2008'), 1100, NULL, 20);
INSERT INTO EMP VALUES
        (7900, 'JAMES',  'CLERK',     7698,
        date('03-DEC-2006'),   950, NULL, 30);
INSERT INTO EMP VALUES
        (7902, 'FORD',   'ANALYST',   7566,
        date('03-DEC-2006'),  3000, NULL, 20);
INSERT INTO EMP VALUES
        (7934, 'MILLER', 'CLERK',     7782,
        date('23-JAN-2007'), 1300, NULL, 10);


CREATE TABLE DEPT
       (DEPTNO NUMBER,
        DNAME VARCHAR2(14),
        LOC VARCHAR2(13) );

INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');


CREATE TABLE T1 (ID INTEGER);

INSERT INTO T1 VALUES (1);

CREATE TABLE T10 (ID INTEGER);

INSERT INTO T10 VALUES (1);
INSERT INTO T10 VALUES (2);
INSERT INTO T10 VALUES (3);
INSERT INTO T10 VALUES (4);
INSERT INTO T10 VALUES (5);
INSERT INTO T10 VALUES (6);
INSERT INTO T10 VALUES (7);
INSERT INTO T10 VALUES (8);
INSERT INTO T10 VALUES (9);
INSERT INTO T10 VALUES (10);


CREATE TABLE T100 (ID INTEGER);

insert into t100 values (1);
insert into t100 values (2);
insert into t100 values (3);
insert into t100 values (4);
insert into t100 values (5);
insert into t100 values (6);
insert into t100 values (7);
insert into t100 values (8);
insert into t100 values (9);
insert into t100 values (10);
insert into t100 values (11);
insert into t100 values (12);
insert into t100 values (13);
insert into t100 values (14);
insert into t100 values (15);
insert into t100 values (16);
insert into t100 values (17);
insert into t100 values (18);
insert into t100 values (19);
insert into t100 values (20);
insert into t100 values (21);
insert into t100 values (22);
insert into t100 values (23);
insert into t100 values (24);
insert into t100 values (25);
insert into t100 values (26);
insert into t100 values (27);
insert into t100 values (28);
insert into t100 values (29);
insert into t100 values (30);
insert into t100 values (31);
insert into t100 values (32);
insert into t100 values (33);
insert into t100 values (34);
insert into t100 values (35);
insert into t100 values (36);
insert into t100 values (37);
insert into t100 values (38);
insert into t100 values (39);
insert into t100 values (40);
insert into t100 values (41);
insert into t100 values (42);
insert into t100 values (43);
insert into t100 values (44);
insert into t100 values (45);
insert into t100 values (46);
insert into t100 values (47);
insert into t100 values (48);
insert into t100 values (49);
insert into t100 values (50);
insert into t100 values (51);
insert into t100 values (52);
insert into t100 values (53);
insert into t100 values (54);
insert into t100 values (55);
insert into t100 values (56);
insert into t100 values (57);
insert into t100 values (58);
insert into t100 values (59);
insert into t100 values (60);
insert into t100 values (61);
insert into t100 values (62);
insert into t100 values (63);
insert into t100 values (64);
insert into t100 values (65);
insert into t100 values (66);
insert into t100 values (67);
insert into t100 values (68);
insert into t100 values (69);
insert into t100 values (70);
insert into t100 values (71);
insert into t100 values (72);
insert into t100 values (73);
insert into t100 values (74);
insert into t100 values (75);
insert into t100 values (76);
insert into t100 values (77);
insert into t100 values (78);
insert into t100 values (79);
insert into t100 values (80);
insert into t100 values (81);
insert into t100 values (82);
insert into t100 values (83);
insert into t100 values (84);
insert into t100 values (85);
insert into t100 values (86);
insert into t100 values (87);
insert into t100 values (88);
insert into t100 values (89);
insert into t100 values (90);
insert into t100 values (91);
insert into t100 values (92);
insert into t100 values (93);
insert into t100 values (94);
insert into t100 values (95);
insert into t100 values (96);
insert into t100 values (97);
insert into t100 values (98);
insert into t100 values (99);
insert into t100 values (100);&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming/이것저것</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/365</guid>
      <comments>https://montoo.tistory.com/365#entry365comment</comments>
      <pubDate>Thu, 8 Jun 2023 09:30:57 +0900</pubDate>
    </item>
    <item>
      <title>_ lodash</title>
      <link>https://montoo.tistory.com/364</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. lodash ( _ )&lt;/h2&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;h3 data-ke-size=&quot;size23&quot;&gt;1.1. lodash Docs&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs-lodash.com/v4/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1682495275063&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;Lodash Docs v4.17.11 &amp;ndash; Documentation for JavaScript utility library&quot; data-og-description=&quot;A modern JavaScript utility library delivering modularity, performance &amp;amp; extras. Download Lodash is released under the&amp;nbsp;MIT license&amp;nbsp;&amp;amp; supports modern environments.Review the&amp;nbsp;build differences&amp;nbsp;&amp;amp; pick one that&amp;rsquo;s right for you. Installation In a browser:&quot; data-og-host=&quot;docs-lodash.com&quot; data-og-source-url=&quot;https://docs-lodash.com/v4/&quot; data-og-url=&quot;https://docs-lodash.com/v4/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs-lodash.com/v4/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs-lodash.com/v4/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Lodash Docs v4.17.11 &amp;ndash; Documentation for JavaScript utility library&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A modern JavaScript utility library delivering modularity, performance &amp;amp; extras. Download Lodash is released under the&amp;nbsp;MIT license&amp;nbsp;&amp;amp; supports modern environments.Review the&amp;nbsp;build differences&amp;nbsp;&amp;amp; pick one that&amp;rsquo;s right for you. Installation In a browser:&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs-lodash.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;h3 data-ke-size=&quot;size23&quot;&gt;1.2. 설치&lt;/h3&gt;
&lt;pre id=&quot;code_1682497324750&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;####  lodash | npm 설치 ####
npm i -g npm
npm i --save lodash
############################

...

import _ from 'lodash';&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;h3 data-ke-size=&quot;size23&quot;&gt;1.3. 주요 method&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;_.pick()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 객체에서 해당 속성으로 새롭게 구성한 객체를 return&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15#pick&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_.pick &amp;ndash; Lodash Docs v4.17.11 (docs-lodash.com)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;_.cloneDeep()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 깊은복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15#cloneDeep&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_.cloneDeep &amp;ndash; Lodash Docs v4.17.11 (docs-lodash.com)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;_.set()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 객체와 속성위치와 값을 받아 해당 객체의 속성의 값을 변경함, 위치를 배열로 순서대로 속성을 생성하여 최종위치에 값을 입력한다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15#set&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_.set &amp;ndash; Lodash Docs v4.17.11 (docs-lodash.com)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;_.invert()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 객체의 key와 value를 뒤집음. 단, value가 일치하는 속성이 있으면 가장 나중 속성이 key가 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15#invert&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_.invert &amp;ndash; Lodash Docs v4.17.11 (docs-lodash.com)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;_.match()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 객체에서 찾으려는 속성과 일치하면 그 객체를 return&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15#matches&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_.matches &amp;ndash; Lodash Docs v4.17.11 (docs-lodash.com)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;_.omit()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 객체에서 해당 속성을 제외한 객체를 return&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15#omit&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_.omit &amp;ndash; Lodash Docs v4.17.11 (docs-lodash.com)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;_.includes()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;: 해당 collection에 찾고자 하는 값이 있는지 탐색 ( return boolean ), 3번째 매개변수는 idx (해당 idx에 그 값이 있는지 확인)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lodash.com/docs/4..17.15#includes&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_.includes &amp;ndash; Lodash Docs v4.17.11 (docs-lodash.com)&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/JS</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/364</guid>
      <comments>https://montoo.tistory.com/364#entry364comment</comments>
      <pubDate>Wed, 26 Apr 2023 17:31:45 +0900</pubDate>
    </item>
    <item>
      <title>정규표현식 - 앵커 ( ^, $ )</title>
      <link>https://montoo.tistory.com/363</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.javascript.info/regexp-anchors&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.javascript.info/regexp-anchors&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1672887963902&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;앵커: 문자열의 시작 ^과 끝 $&quot; data-og-description=&quot;&quot; data-og-host=&quot;ko.javascript.info&quot; data-og-source-url=&quot;https://ko.javascript.info/regexp-anchors&quot; data-og-url=&quot;https://ko.javascript.info/regexp-anchors&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hqH0c/hyQ82GqwNO/gXuZfx5epJ9NClkSQ2Wkg1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ZptRT/hyQ827uHRy/tZgl4audFUOiBhr4DptD51/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://ko.javascript.info/regexp-anchors&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.javascript.info/regexp-anchors&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hqH0c/hyQ82GqwNO/gXuZfx5epJ9NClkSQ2Wkg1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ZptRT/hyQ827uHRy/tZgl4audFUOiBhr4DptD51/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;앵커: 문자열의 시작 ^과 끝 $&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.javascript.info&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;^ ... $ 패턴이 주로 사용되는데&lt;br /&gt;이 패턴을 사용하면, 탐색하고자 하는 문자열과 완전히 일치해야 true 반환한다.&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;div&gt;&lt;span&gt;참고로 앵커의 너비는 &amp;lsquo;0&amp;rsquo;이다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앵커&lt;span&gt;&amp;nbsp;&lt;/span&gt;^와&lt;span&gt;&amp;nbsp;&lt;/span&gt;$는 조건을 나타냅니다. 따라서 앵커의 너비는 0입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 말해서 앵커는 어떤 문자와 일치하는 것이 아니라 정규식 엔진이 문자열의 시작과 끝이라는 조건을 검사하도록 강제하는 역할을 합니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Programming/이것저것</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/363</guid>
      <comments>https://montoo.tistory.com/363#entry363comment</comments>
      <pubDate>Thu, 5 Jan 2023 12:11:03 +0900</pubDate>
    </item>
    <item>
      <title>postgresql | 국내 시도 geometry를 합쳐 전국 box로 생성하기</title>
      <link>https://montoo.tistory.com/359</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;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://t1.daumcdn.net/tistory_admin/lib/jquery/jquery-3.2.1.min.js?v=anti_jb&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차&lt;/p&gt;
&lt;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	$(function(){
		$(&quot;#toc&quot;).toc({content: &quot;article.content&quot;, headings: &quot;h1,h2,h3,h4&quot;, top: -90, isBlink : true, blinkColor : '#21B9DE' })
	});
&lt;/script&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1658534240851&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select st_extent(st_transform(a.mult,3857))
from( 
	select st_multi(st_union(geom)) as mult 
	from tb_sido
) a;&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;polygon으로 변환해서 확인하면 아래와같이 나옴&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eRHtdF/btrH0ckDPgY/J36TzHwhtzpq7sfssb5BXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eRHtdF/btrH0ckDPgY/J36TzHwhtzpq7sfssb5BXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eRHtdF/btrH0ckDPgY/J36TzHwhtzpq7sfssb5BXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeRHtdF%2FbtrH0ckDPgY%2FJ36TzHwhtzpq7sfssb5BXK%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;290&quot; height=&quot;226&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. st_union()&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지오메트리 데이터를 합쳐줌 (merge 기능)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. st_multi()&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지오메트리를 다중(멀티)유형(MultiPoint, MultiLineString, MultiPolygon)으로 변경한다.&lt;br /&gt;st_union()하면 아마도 이게 사라지는듯?&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.&amp;nbsp; st_extent()&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매개변수로 들어오는 geometry를 포함하는box 값을 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming/이것저것</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/359</guid>
      <comments>https://montoo.tistory.com/359#entry359comment</comments>
      <pubDate>Sat, 23 Jul 2022 09:12:52 +0900</pubDate>
    </item>
    <item>
      <title>스프링부트 ) Inflearn 학습내용 정리 ( 김영한 )</title>
      <link>https://montoo.tistory.com/358</link>
      <description>&lt;script type=&quot;text/javascript&quot; src=&quot;https://t1.daumcdn.net/tistory_admin/lib/jquery/jquery-3.2.1.min.js?v=anti_jb&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://tistory4.daumcdn.net/tistory/2831812/skin/images/jquery.toc.js&quot;&gt;&lt;/script&gt;
&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;ul id=&quot;toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;/ul&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	$(function(){
		$(&quot;#toc&quot;).toc({content: &quot;article.content&quot;, headings: &quot;h1,h2,h3,h4&quot;, top: -90, isBlink : true, blinkColor : '#21B9DE' })
	});
&lt;/script&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;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://inf.run/6bix&quot;&gt;https://inf.run/6bix&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653820313336&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;[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의&quot; data-og-description=&quot;스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://inf.run/6bix&quot; data-og-url=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/q21Py/hyOzV2DqEq/Kdo8LPZnyCrXDnueSKcMmK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/qWLrx/hyOzP2onQ2/7ffBp6GVZ8y7lNfmsGohgK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/tmbEl/hyOzQfVLzj/miKXivwZJTONk2t4OtZRK0/img.jpg?width=1805&amp;amp;height=1630&amp;amp;face=454_383_609_552&quot;&gt;&lt;a href=&quot;https://inf.run/6bix&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://inf.run/6bix&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/q21Py/hyOzV2DqEq/Kdo8LPZnyCrXDnueSKcMmK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/qWLrx/hyOzP2onQ2/7ffBp6GVZ8y7lNfmsGohgK/img.png?width=768&amp;amp;height=500&amp;amp;face=0_0_768_500,https://scrap.kakaocdn.net/dn/tmbEl/hyOzQfVLzj/miKXivwZJTONk2t4OtZRK0/img.jpg?width=1805&amp;amp;height=1630&amp;amp;face=454_383_609_552');&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;[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 필요 프로그램 설치&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.1. IDE - InteliJ설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 InteliJ 커뮤니티 버전 (무료버전)을 설치&lt;br /&gt;(아래 링크 참고)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://montoo.tistory.com/entry/Kotlin-0506-intelliJ프로그램-Kotlin-기초&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.05.21 - [Programming/기초 지식] - Kotlin ) intelliJ IDE 설치, Kotlin 기초&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653817163768&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;Kotlin ) intelliJ IDE 설치, Kotlin 기초&quot; data-og-description=&quot;목차 1. IntelliJ다운로드 및 설치 2. 프로젝트 생성 다운로드가 완료되면 3. 코틀린 기초 3.1. 출력문 3.2. 리터럴 3.2.1. 리터럴의 종류 리터럴 : 코드&amp;nbsp;작성시에&amp;nbsp;값을&amp;nbsp;작성하는&amp;nbsp;문법 정수(Int,&amp;nbsp;Long)&amp;nbsp;..&quot; data-og-host=&quot;montoo.tistory.com&quot; data-og-source-url=&quot;https://montoo.tistory.com/entry/Kotlin-0506-intelliJ프로그램-Kotlin-기초&quot; data-og-url=&quot;https://montoo.tistory.com/entry/Kotlin-0506-intelliJ%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-Kotlin-%EA%B8%B0%EC%B4%88&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dmgs8m/hyOzIIVh9m/b3716Hte0qAfzJd8vqSiWK/img.png?width=399&amp;amp;height=313&amp;amp;face=0_0_399_313,https://scrap.kakaocdn.net/dn/cVQt7I/hyOzMEzluV/T9YfXRbouHIwh2GEsvZnP0/img.png?width=399&amp;amp;height=313&amp;amp;face=0_0_399_313,https://scrap.kakaocdn.net/dn/bBbkqe/hyOzIIViiM/hEQZUK0aKKkWCLET31dpr1/img.png?width=1358&amp;amp;height=885&amp;amp;face=0_0_1358_885&quot;&gt;&lt;a href=&quot;https://montoo.tistory.com/entry/Kotlin-0506-intelliJ프로그램-Kotlin-기초&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://montoo.tistory.com/entry/Kotlin-0506-intelliJ프로그램-Kotlin-기초&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dmgs8m/hyOzIIVh9m/b3716Hte0qAfzJd8vqSiWK/img.png?width=399&amp;amp;height=313&amp;amp;face=0_0_399_313,https://scrap.kakaocdn.net/dn/cVQt7I/hyOzMEzluV/T9YfXRbouHIwh2GEsvZnP0/img.png?width=399&amp;amp;height=313&amp;amp;face=0_0_399_313,https://scrap.kakaocdn.net/dn/bBbkqe/hyOzIIViiM/hEQZUK0aKKkWCLET31dpr1/img.png?width=1358&amp;amp;height=885&amp;amp;face=0_0_1358_885');&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;Kotlin ) intelliJ IDE 설치, Kotlin 기초&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;목차 1. IntelliJ다운로드 및 설치 2. 프로젝트 생성 다운로드가 완료되면 3. 코틀린 기초 3.1. 출력문 3.2. 리터럴 3.2.1. 리터럴의 종류 리터럴 : 코드&amp;nbsp;작성시에&amp;nbsp;값을&amp;nbsp;작성하는&amp;nbsp;문법 정수(Int,&amp;nbsp;Long)&amp;nbsp;..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;montoo.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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.2. H2 Database 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 링크로 들어가 1.4.200버전을 설치 ( 최신 버전은 일부 기능이 정상작동하지 않음 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.h2database.com/html/download-archive.html&quot;&gt;https://www.h2database.com/html/download-archive.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 실행했다면 *~/test.mv.db* 파일을 삭제할 것.&lt;br /&gt;( 오류 발생함 )&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 스프링 프레임워크 빌드하기&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.1. 스프링에서 제공하는 Spring Initializr을 활용하여 SpringBoot를 빌드한다.&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1715&quot; data-origin-height=&quot;973&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XFEqP/btrDobp4A1F/ngCMpZO3x8ejWBIkoBGKrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XFEqP/btrDobp4A1F/ngCMpZO3x8ejWBIkoBGKrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XFEqP/btrDobp4A1F/ngCMpZO3x8ejWBIkoBGKrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXFEqP%2FbtrDobp4A1F%2FngCMpZO3x8ejWBIkoBGKrk%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;805&quot; height=&quot;457&quot; data-origin-width=&quot;1715&quot; data-origin-height=&quot;973&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;위와 같이 세팅하고, 하단의 버튼 'Generate' 를 선택하면 압축된 프로젝트?가 다운로드되는데, 편한 위치에 압축 풀기한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;167&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DDJdf/btrDoVUPiSB/BaUml9wa8WRKymszBwnmok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DDJdf/btrDoVUPiSB/BaUml9wa8WRKymszBwnmok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DDJdf/btrDoVUPiSB/BaUml9wa8WRKymszBwnmok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDDJdf%2FbtrDoVUPiSB%2FBaUml9wa8WRKymszBwnmok%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;192&quot; height=&quot;78&quot; data-origin-width=&quot;167&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 설치한 인텔리제이를 실행하고, 압축 푼 파일 중 build.gradle 파일을 선택하여 Open&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mmf3T/btrDmW70LpT/77xnrkDJILjM4xwibKuyX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mmf3T/btrDmW70LpT/77xnrkDJILjM4xwibKuyX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mmf3T/btrDmW70LpT/77xnrkDJILjM4xwibKuyX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMmf3T%2FbtrDmW70LpT%2F77xnrkDJILjM4xwibKuyX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;498&quot; height=&quot;529&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 자동으로 빌드가 진행되고, 필요한 라이브러리들을 자동으로 다운로드한다.&lt;/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;style1&quot; /&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.2. 추가적인 인텔리제이 설정 ( Gradle이 아닌 InteliJ로 run 되도록 )&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dk6Ezc/btrDth3GHGa/zvDlk8oqovl8B7PpmObPV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dk6Ezc/btrDth3GHGa/zvDlk8oqovl8B7PpmObPV1/img.png&quot; data-alt=&quot;위와 같이 설정해야 조금 더 빠르게 실행될 뿐 아니라, 오류가 발생하지 않았다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dk6Ezc/btrDth3GHGa/zvDlk8oqovl8B7PpmObPV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdk6Ezc%2FbtrDth3GHGa%2FzvDlk8oqovl8B7PpmObPV1%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;711&quot; height=&quot;434&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위와 같이 설정해야 조금 더 빠르게 실행될 뿐 아니라, 오류가 발생하지 않았다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 스프링부트의 라이브러리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다.&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3.1. 스프링 부트 라이브러리&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spring-web-starter-web
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spring-boot-starter-tomcat : 톰캣(웹서버)&lt;/li&gt;
&lt;li&gt;spring-webmvc : 스프링 웹 MVC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진(view)&lt;/li&gt;
&lt;li&gt;spring-boot-starter ( 공통 ) : 스프링 부트 + 스프링 core + 로깅
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spring-boot
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spring-core&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;spring-boot-starter-logging
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;logback, slf4j&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;3.2. 테스트 라이브러리&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spring-boot-starter-test
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;junit : 제이유닛 ( 테스트 프레임워크 )&amp;nbsp;&lt;/li&gt;
&lt;li&gt;mockito : 모키토 ( 목 라이브러리 )&lt;/li&gt;
&lt;li&gt;assertj : 어썰트제이 ( 테스트 코드를 좀 더 편하게 작성하도록 도와주는 라이브러리 )&amp;nbsp;&lt;/li&gt;
&lt;li&gt;spring-test : 스프링 통합 테스트 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. View 환경설정&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.1. Welcome Page 만들기 ( index.html )&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;src/main/resources/static/index.html&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653915530803&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&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;meta name=&quot;viewport&quot;
          content=&quot;width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;ie=edge&quot;&amp;gt;
    &amp;lt;title&amp;gt;index.html&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
Hello
&amp;lt;a href=&quot;/hello&quot;&amp;gt;hello&amp;lt;/a&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsYpRf/btrDBLXFiyY/K92KXCaqCh5LjcyGNVYFHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsYpRf/btrDBLXFiyY/K92KXCaqCh5LjcyGNVYFHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsYpRf/btrDBLXFiyY/K92KXCaqCh5LjcyGNVYFHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsYpRf%2FbtrDBLXFiyY%2FK92KXCaqCh5LjcyGNVYFHk%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;201&quot; height=&quot;110&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;92&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;4.2. 컨트롤러 구성&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4.2.1. 컨트롤러 클래스&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/java/hello.hellospring.controller/HelloController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653915820516&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping(&quot;hello&quot;)
    public String Hello(Model model){
        model.addAttribute(&quot;data&quot;, &quot;hello!!&quot;);
        return &quot;hello&quot;;
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4.2.2. hello.html 페이지&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;src/main/resources/template/hello.html&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;타임리프( thymeleaf ) 템플릿 엔진을 사용하는 것이 특징적이다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653915959102&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;hello.html&amp;lt;/title&amp;gt;
    &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;/&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot;
          content=&quot;width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0&quot;&amp;gt;
    &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;ie=edge&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;p th:text=&quot;'안녕하세요. ' + ${data}&quot; &amp;gt;안녕하세요. 손님&amp;lt;/p&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFIAPE/btrDywtH3uk/C9fql1vM6CZ0Lt70gpA8o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFIAPE/btrDywtH3uk/C9fql1vM6CZ0Lt70gpA8o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFIAPE/btrDywtH3uk/C9fql1vM6CZ0Lt70gpA8o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFIAPE%2FbtrDywtH3uk%2FC9fql1vM6CZ0Lt70gpA8o1%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;261&quot; height=&quot;111&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;625&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9VOpy/btrDy1tE23S/a9EsnTslifgiUaYIA9m4L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9VOpy/btrDy1tE23S/a9EsnTslifgiUaYIA9m4L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9VOpy/btrDy1tE23S/a9EsnTslifgiUaYIA9m4L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9VOpy%2FbtrDy1tE23S%2Fa9EsnTslifgiUaYIA9m4L1%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;772&quot; height=&quot;518&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;625&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 빌드하고 실행하기 ( 배포 패키지 생성하기 )&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5.1. cmd를 실행하여 프로젝트 폴더로 이동&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctAKjZ/btrDvLFE7x1/F6mUmyLS1dNEmmR2u6gJc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctAKjZ/btrDvLFE7x1/F6mUmyLS1dNEmmR2u6gJc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctAKjZ/btrDvLFE7x1/F6mUmyLS1dNEmmR2u6gJc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctAKjZ%2FbtrDvLFE7x1%2FF6mUmyLS1dNEmmR2u6gJc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;501&quot; height=&quot;639&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;659&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;5.2. gradlew build 명령어 실행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 디렉토리로 이동하였으면&lt;u&gt; gradlew 파일이 존재하는지 확인&lt;/u&gt;하고,&lt;br /&gt;(windows 기준) &lt;u&gt;gradlew build 명령어를 실행&lt;/u&gt;한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;376&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUkrKF/btrDy0O4dGK/Fgp3bTZ79BZQSqpyDsHna1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUkrKF/btrDy0O4dGK/Fgp3bTZ79BZQSqpyDsHna1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUkrKF/btrDy0O4dGK/Fgp3bTZ79BZQSqpyDsHna1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUkrKF%2FbtrDy0O4dGK%2FFgp3bTZ79BZQSqpyDsHna1%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;383&quot; height=&quot;116&quot; data-origin-width=&quot;376&quot; data-origin-height=&quot;114&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;그러면 build 디렉토리가 생성되는데..&lt;br /&gt;&lt;u&gt;./build/libs 로 이동&lt;/u&gt;하면&lt;u&gt; ' hello-spring-0.0.1-SNAPSHOT.jar '파일이 생성&lt;/u&gt;되는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxmXLN/btrDwPA1xnm/dD0iRC9MFFevkFMTqSIVv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxmXLN/btrDwPA1xnm/dD0iRC9MFFevkFMTqSIVv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxmXLN/btrDwPA1xnm/dD0iRC9MFFevkFMTqSIVv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxmXLN%2FbtrDwPA1xnm%2FdD0iRC9MFFevkFMTqSIVv1%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;640&quot; height=&quot;302&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;316&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;5.3. 배포 패키지(jar파일) 실행해보기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;배포 패키지가 위치한 디렉토리에서 &lt;br /&gt;' java -jar hello-spring-0.0.1-SNAPSHOT.jar ' 명령으로 실행한다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdhoO1/btrDyGce4DN/8Qf7kEeUhyWyw40hGb1KgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdhoO1/btrDyGce4DN/8Qf7kEeUhyWyw40hGb1KgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdhoO1/btrDyGce4DN/8Qf7kEeUhyWyw40hGb1KgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdhoO1%2FbtrDyGce4DN%2F8Qf7kEeUhyWyw40hGb1KgK%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;998&quot; height=&quot;527&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이렇게 스프링이 실행되는 것을 확인할 수 있다.&lt;/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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6. 스프링 웹 개발 기초&lt;/b&gt;&lt;/h2&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;6.1. 정적 컨텐츠 ( Static Content )&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버에서 처리하는 것 없이 &lt;u&gt;파일을 웹브라우저에 내려주는 방식&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D4Ojc/btrDDsrH1ND/yVdQJrmIMBzKDkF4A6yaxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D4Ojc/btrDDsrH1ND/yVdQJrmIMBzKDkF4A6yaxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D4Ojc/btrDDsrH1ND/yVdQJrmIMBzKDkF4A6yaxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD4Ojc%2FbtrDDsrH1ND%2FyVdQJrmIMBzKDkF4A6yaxk%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;805&quot; height=&quot;458&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;톰캣 서버는 컨테이너에서 우선적으로 'hello-static'이라는 컨트롤러를 탐색.&lt;/li&gt;
&lt;li&gt;1에서 탐색 결과가 없으면, resources/static 에서 hello-static.html을 탐색 후 존재하면 그것을 브라우저로 반환&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1653985954120&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;resources/static/hello-static.html&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
정적컨텐츠입니다.&amp;lt;br&amp;gt;
&amp;lt;h3&amp;gt;' src/main/resources/static/hello-static.html '&amp;lt;/h3&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oyraa/btrDCUouyBa/gcV3C0CeKQFCquFnxLFCHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oyraa/btrDCUouyBa/gcV3C0CeKQFCquFnxLFCHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oyraa/btrDCUouyBa/gcV3C0CeKQFCquFnxLFCHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foyraa%2FbtrDCUouyBa%2FgcV3C0CeKQFCquFnxLFCHk%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;430&quot; height=&quot;166&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;178&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;6.2. MVC / 템플릿 엔진&lt;/b&gt;&lt;/h3&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;b&gt;View와 Controller의 관심사를 분리하기 위해 발전되었다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;템플릿 엔진&lt;/u&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;과거에는 jsp, php등이 많이 쓰임&lt;/li&gt;
&lt;li&gt;정적 컨텐츠 처럼 html을 그냥 브라우저로 보내는 것이 아닌, 서버에서 프로그래밍을 하여 html을 동적으로 브라우저로 건내는 방식&lt;/li&gt;
&lt;li&gt;MVC패턴에서 View(화면, 페이지)를 보여주기 위한 구성 중 하나&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;MVC 패턴&lt;/u&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Model - View - Controller&lt;/li&gt;
&lt;li&gt;위와 같은 방식을 구동하기 위해 MVC패턴을 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/McvV8/btrDFJZ7PSK/EPnowlkvYiConDTMMX0axk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/McvV8/btrDFJZ7PSK/EPnowlkvYiConDTMMX0axk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/McvV8/btrDFJZ7PSK/EPnowlkvYiConDTMMX0axk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMcvV8%2FbtrDFJZ7PSK%2FEPnowlkvYiConDTMMX0axk%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;793&quot; height=&quot;435&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징적인 것은 브라우저에 html을 템플릿 엔진이&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;controller&lt;/p&gt;
&lt;pre id=&quot;code_1653987147028&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

...

@Controller
public class HelloController {

...

    @GetMapping(&quot;hello-mvc&quot;)
    public String helloMvc(@RequestParam(value=&quot;name&quot;/*, required=false*/) String name, Model model){
        model.addAttribute(&quot;name&quot;, name);
        return &quot;hello-template&quot;;
    }
    
}&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;view&lt;/p&gt;
&lt;pre id=&quot;code_1653987171992&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns:th=&quot;http://ww.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;hello-template.html&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;!-- thymeleaf의 특징은 태그속성에 쓰여진 값이 태그 사이의 값에 치환된다. --&amp;gt;
    &amp;lt;p th:text=&quot;'hello ' + ${name}&quot;&amp;gt;hello! empty&amp;lt;/p&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bha4dI/btrDGcHLqp7/SQux4sgoIumVC4QXMpibK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bha4dI/btrDGcHLqp7/SQux4sgoIumVC4QXMpibK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bha4dI/btrDGcHLqp7/SQux4sgoIumVC4QXMpibK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbha4dI%2FbtrDGcHLqp7%2FSQux4sgoIumVC4QXMpibK1%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;578&quot; height=&quot;207&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHq5K2/btrDFKdDPBF/xgYi9yCP9fQxnm2y0tKKmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHq5K2/btrDFKdDPBF/xgYi9yCP9fQxnm2y0tKKmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHq5K2/btrDFKdDPBF/xgYi9yCP9fQxnm2y0tKKmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHq5K2%2FbtrDFKdDPBF%2FxgYi9yCP9fQxnm2y0tKKmk%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;386&quot; height=&quot;191&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ob8YP/btrDE95OG3y/ASALKXw5nnVUNB7QGHjUGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ob8YP/btrDE95OG3y/ASALKXw5nnVUNB7QGHjUGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ob8YP/btrDE95OG3y/ASALKXw5nnVUNB7QGHjUGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fob8YP%2FbtrDE95OG3y%2FASALKXw5nnVUNB7QGHjUGK%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;385&quot; height=&quot;157&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;164&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;6.3. API&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JSON 데이터 구조 포멧으로 클라이언트에게 데이터를 전달하는 것&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;view.js, react를 사용할 때 api로 데이터만 내려주면 화면은 클라이언트(브라우저)가 알아서 그려지고 정리하는 방식을 사용할때 API방식을 사용한다.&lt;/li&gt;
&lt;li&gt;그리고 서버와 서버가 통신할 때 데이터를 주고받을 때 API방식을 사용하기도 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMhl8Z/btrDDsSViPn/wkKkG0PqZCoTKNec13QUW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMhl8Z/btrDDsSViPn/wkKkG0PqZCoTKNec13QUW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMhl8Z/btrDDsSViPn/wkKkG0PqZCoTKNec13QUW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMhl8Z%2FbtrDDsSViPn%2FwkKkG0PqZCoTKNec13QUW1%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;698&quot; height=&quot;486&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;controller에서 @ResponseBody 어노테이션이 붙은 객체는 return값을 http에 그대로 건내준다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;단 &lt;u&gt;객체가 반환되는 경우&lt;/u&gt;에는 &lt;u&gt;디폴트로 &lt;b&gt;json방식&lt;/b&gt;으로 변환&lt;/u&gt;하여 전달한다. &lt;br /&gt;( 변환 라이브러리 : MappingJackson2HttpMessageConverter )&lt;/li&gt;
&lt;li&gt;문자일 경우 StringConverter가 처리&lt;br /&gt;( 변환 라이브러리 : StringHttpMessageConverter )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;클라이언트의 &lt;u&gt;HTTP Accept 헤더&lt;/u&gt;와, 서버의 &lt;u&gt;컨트롤러 반환타입 정보&lt;/u&gt;&lt;br /&gt;이 둘을 조합하여 'HttpMessageConveter'가 선택된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6.3.1. 문자열을 반환하는 방식&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;controller&lt;/p&gt;
&lt;pre id=&quot;code_1653988065984&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

...

@Controller
public class HelloController {

...

    @GetMapping(&quot;hello-string&quot;)
    @ResponseBody   // http body부에 이 데이터를 직접 추가한다는 의미 (return값이 그대로 출력되는 특징.)
    public String helloString(@RequestParam(&quot;name&quot;) String name){
        return &quot;hello &quot; + name; //&quot;hello spring&quot;
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm54b0/btrDDr7xxpX/DpTfkCEIcyoKpzUfDnC3gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm54b0/btrDDr7xxpX/DpTfkCEIcyoKpzUfDnC3gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm54b0/btrDDr7xxpX/DpTfkCEIcyoKpzUfDnC3gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm54b0%2FbtrDDr7xxpX%2FDpTfkCEIcyoKpzUfDnC3gK%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;437&quot; height=&quot;130&quot; data-origin-width=&quot;383&quot; data-origin-height=&quot;114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;145&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btlEUx/btrDEACUo0J/6u04o7JLgx0ZWFkQDBx7yK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btlEUx/btrDEACUo0J/6u04o7JLgx0ZWFkQDBx7yK/img.png&quot; data-alt=&quot;페이지 소스를 보면 문자열만 나온다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btlEUx/btrDEACUo0J/6u04o7JLgx0ZWFkQDBx7yK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtlEUx%2FbtrDEACUo0J%2F6u04o7JLgx0ZWFkQDBx7yK%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;528&quot; height=&quot;163&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;145&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;페이지 소스를 보면 문자열만 나온다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6.3.2. 객체( json데이터 )로 반환하는 방식&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;객체가&lt;u&gt; json으로 변환&lt;/u&gt;되어 브라우저로 전달되는 방식&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;controller&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653988465847&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

...

@Controller
public class HelloController {

...

    @GetMapping(&quot;hello-api&quot;)
    @ResponseBody
    public Hello helloApi(@RequestParam(&quot;name&quot;) String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    // static 객체 생성
    static class Hello{
        private String name;
        
        // 자바빈 표준 규약 (getter/setter, 프로퍼티 접근 방식)
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }


}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHJYhm/btrDBLrTbz4/CJgkmJKGbmkNAJQukZKb90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHJYhm/btrDBLrTbz4/CJgkmJKGbmkNAJQukZKb90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHJYhm/btrDBLrTbz4/CJgkmJKGbmkNAJQukZKb90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHJYhm%2FbtrDBLrTbz4%2FCJgkmJKGbmkNAJQukZKb90%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;379&quot; height=&quot;116&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyVnTM/btrDGdmrY00/BS3GnTJexgtFROaEbkdJb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyVnTM/btrDGdmrY00/BS3GnTJexgtFROaEbkdJb1/img.png&quot; data-alt=&quot;소스보기를 하면 json 방식으로 데이터가 전달되는 것을 확인할 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyVnTM/btrDGdmrY00/BS3GnTJexgtFROaEbkdJb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyVnTM%2FbtrDGdmrY00%2FBS3GnTJexgtFROaEbkdJb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;127&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;소스보기를 하면 json 방식으로 데이터가 전달되는 것을 확인할 수 있다.&lt;/figcaption&gt;
&lt;/figure&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;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;7. 회원관리 예제&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7.1. 비즈니스 요구사항 정리&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 :
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;회원id&lt;/li&gt;
&lt;li&gt;이름&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;기능 :&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;회원등록&lt;/li&gt;
&lt;li&gt;조회&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아직 데이터 저장소(DB)가 선정되지 않음 ( 가상의 시나리오 )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzUD45/btrDJvOl3WZ/E0ajW4ihLFzNfKVOb3oKe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzUD45/btrDJvOl3WZ/E0ajW4ihLFzNfKVOb3oKe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzUD45/btrDJvOl3WZ/E0ajW4ihLFzNfKVOb3oKe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzUD45%2FbtrDJvOl3WZ%2FE0ajW4ihLFzNfKVOb3oKe1%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;701&quot; height=&quot;357&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tgEsH/btrDE9F1qoA/DKxdZKKEwuZ2KW7qjRU6kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tgEsH/btrDE9F1qoA/DKxdZKKEwuZ2KW7qjRU6kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tgEsH/btrDE9F1qoA/DKxdZKKEwuZ2KW7qjRU6kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtgEsH%2FbtrDE9F1qoA%2FDKxdZKKEwuZ2KW7qjRU6kk%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;787&quot; height=&quot;611&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;655&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;7.2. 회원 도메인과 리포지토리 생성&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7.2.1. 회원 도메인 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java/hello/hellospring/domain/Member.java&lt;/p&gt;
&lt;pre id=&quot;code_1654074965953&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.domain;

public class Member {

    private Long id;    // 시스템의 데이터 아이디 (회원 id X)
    private String name;

    // getter/setter 
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7.2.2. 레포지토리 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원 레포지토리 인터페이스 생성&lt;br /&gt;java/hello/hellospring/repository/MemberRepository.java ( Interface )&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;Optional&amp;lt;T&amp;gt; 클래스&lt;/u&gt; : NPE(NullPointerException)을 방지하는 Wrapper 클래스 ( Java 8&amp;uarr; )&lt;b&gt;&lt;br /&gt;&amp;nbsp;- 이것을 사용하지 않으면 if문으로 막~ 검사하는 과정을 돌려야 하는 복잡하고 번거로움이 생김&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654075096912&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {

    Member save(Member member); //회원 등록
    Optional&amp;lt;Member&amp;gt; findById(Long id); //Id로 회원 조회
    Optional&amp;lt;Member&amp;gt; findByName(String name);   //name으로 회원 조회
    List&amp;lt;Member&amp;gt; findAll(); //전체회원 조회

}&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;MemoryMemberRepository 클래스 생성&lt;/b&gt;&lt;br /&gt;java/hello/hellospring/repository/MemoryMemberRepository.java&lt;/p&gt;
&lt;pre id=&quot;code_1654075476297&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository{

    private static Map&amp;lt;Long, Member&amp;gt; store = new HashMap&amp;lt;&amp;gt;();
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }

    @Override
    public Optional&amp;lt;Member&amp;gt; findById(Long id) {
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional&amp;lt;Member&amp;gt; findByName(String name) {
        return store.values().stream()
                .filter(member -&amp;gt; member.getName().equals(name))
                .findAny();
    }

    @Override
    public List&amp;lt;Member&amp;gt; findAll() {
        return new ArrayList&amp;lt;&amp;gt;(store.values());
    }

    // (테스트용) repository를 삭제하는 메서드
    public void clearStore(){
        store.clear();
    }
}&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;style1&quot; /&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;7.3. 회원 리포지토리 테스트 케이스 작성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발한 기능을 실행해서 테스트를 진행할 때 main메서드를 통해 실행하거나, 웹 애플리케이션의 컨트롤러를 통해 해당 기능을 실행하기도 하지만, 이러한 방법은 준비-실행하는 과정이 오래걸리고, 반복실행에 어려움이 있으며, 여러 테스트를 한 번에 실행하기 어려운 단점이 있다.&lt;br /&gt;자바는 JUnit이라는 프레임워크로 테스트를 실행하여 이러한 문제를 해결할 수 있다.&lt;br /&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7.3.1. Test클래스 작성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java/hello/hellospring/repository/MemoryMemberRepositoryTest.java&lt;/p&gt;
&lt;pre id=&quot;code_1654078125477&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.*;

class MemoryMemberRepositoryTest {

    MemoryMemberRepository repository = new MemoryMemberRepository();

    // 하나의 테스트를 진행하고 repository를 비우는 메서드.
    // 테스트 후 repository에 객체가 남아있기 때문에 다음 테스트를 진행할 때 에러가 발생할 수 있다.
    // @AfterEach : 메서드 실행이 끝날 때 마다 한 번씩 동작하는 콜백 메서드
    @AfterEach
    public void afterEach(){
        repository.clearStore();
    }


    @Test
    public void save(){
        Member member = new Member();
        member.setName(&quot;spring&quot;);

        repository.save(member);

        Member result = repository.findById(member.getId()).get();
        assertThat(member).isEqualTo(result);
        //Assertions.assertEquals(member, result);
    }

    @Test
    public void findByName(){
        Member member1 = new Member();
        member1.setName(&quot;spring1&quot;);
        repository.save(member1);

        Member member2 = new Member();
        member2.setName(&quot;spring2&quot;);
        repository.save(member2);


        Member result = repository.findByName(&quot;spring1&quot;).get();
        assertThat(result).isEqualTo(member1);
    }

    @Test
    public void findAll(){
        Member member1 = new Member();
        member1.setName(&quot;spring1&quot;);
        repository.save(member1);

        Member member2 = new Member();
        member2.setName(&quot;spring2&quot;);
        repository.save(member2);

        List&amp;lt;Member&amp;gt; result = repository.findAll();

        assertThat(result.size()).isEqualTo(2);
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dx6hx/btrDE0IzLL1/Kj00kMv6cKTiaDKmAkzEv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dx6hx/btrDE0IzLL1/Kj00kMv6cKTiaDKmAkzEv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dx6hx/btrDE0IzLL1/Kj00kMv6cKTiaDKmAkzEv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDx6hx%2FbtrDE0IzLL1%2FKj00kMv6cKTiaDKmAkzEv1%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;837&quot; height=&quot;185&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;200&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;7.4. 회원 서비스 개발&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;repository 클래스는 단순히 데이터를 input/output 하는 역할이라면,&lt;br /&gt;service 클래스는 네이밍부터 비즈니스에 가깝게 지어지며, 하는 역할도 비즈니스에 가깝게 설계되는 특징이 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/service/MemberService.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654079447007&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;

import java.util.List;
import java.util.Optional;

public class MemberService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();

    /**
     * 회원가입
     */
    public Long join(Member member){
        // 같은 이름이 있는 중복 회원X
        validateDuplicateMember(member);    //중복 회원 검증
        memberRepository.save(member);
        return member.getId();
    }

    //중복 회원 검증
    private void validateDuplicateMember(Member member) {
        Optional&amp;lt;Member&amp;gt; result = memberRepository.findByName(member.getName());
        // result.ifPresent : 값이 있는지 체크하는 메서드 ( 존재하면 true )
        result.ifPresent( m -&amp;gt; {
            throw new IllegalThreadStateException(&quot;이미 존재하는 회원입니다.&quot;);
        });
    }


    /**
     * 전체 회원 조회
     */
    public List&amp;lt;Member&amp;gt; findMembers() {
        return memberRepository.findAll();
    }

    /**
     * id로 회원 조회
     */
    public Optional&amp;lt;Member&amp;gt; findOne(Long memberId){
        return memberRepository.findById(memberId);
    }
}&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;style1&quot; /&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;7.5. 회원 서비스 테스트&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7.5.1. 테스트 클래스 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트를 하고싶은 클래스 내에서 ' ctrl + shift + T ' 를 입력하면, 아래와 같은 버튼이 등장한다.&amp;nbsp;&lt;br /&gt;Create New Test... 를 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/canXY6/btrDEQ07S1W/eIud7yl28pYRHwarU1PLw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/canXY6/btrDEQ07S1W/eIud7yl28pYRHwarU1PLw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/canXY6/btrDEQ07S1W/eIud7yl28pYRHwarU1PLw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcanXY6%2FbtrDEQ07S1W%2FeIud7yl28pYRHwarU1PLw0%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;753&quot; height=&quot;207&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;223&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;br /&gt;여러가지 입력을 하고, 테스트 하고싶은 메서드를 선택한뒤 ok를 누르면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rSAeU/btrDFLkFuaY/cia0DYv5Cr91LkAPNyHy9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rSAeU/btrDFLkFuaY/cia0DYv5Cr91LkAPNyHy9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rSAeU/btrDFLkFuaY/cia0DYv5Cr91LkAPNyHy9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrSAeU%2FbtrDFLkFuaY%2Fcia0DYv5Cr91LkAPNyHy9k%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;493&quot; height=&quot;460&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같이 자동으로 테스트 클래스가 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVlMvJ/btrDJvgBglf/E7rsY57PPiZyhg64I3kjk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVlMvJ/btrDJvgBglf/E7rsY57PPiZyhg64I3kjk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVlMvJ/btrDJvgBglf/E7rsY57PPiZyhg64I3kjk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVlMvJ%2FbtrDJvgBglf%2FE7rsY57PPiZyhg64I3kjk0%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;841&quot; height=&quot;621&quot; data-origin-width=&quot;923&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7.5.2. 테스트 메서드 작성&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테스트 클래스의 메서드는 해외와 협업하는 경우가 아니라면 한글로 적어도 무방하다.&lt;br /&gt;빌드될 때 실제 코드에 포함되지 않기 때문에 문제가 없다.&lt;br /&gt;&lt;br /&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;given - when - then 문법 :&amp;nbsp;&lt;br /&gt;어떠한 상황이 주어졌을 때 ( &lt;b&gt;given ), &lt;/b&gt;&lt;/b&gt;&lt;b&gt;이것을 실행하면( when ), &lt;/b&gt;&lt;b&gt;결과는 이렇게 나와야 한다 ( then )&lt;br /&gt;&lt;br /&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;java/hello/hellospring/service/MemberServiceTest.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654082369973&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.*;

class MemberServiceTest {

    MemberService memberService = new MemberService();
    MemoryMemberRepository memberRepository = new MemoryMemberRepository();
    
    @AfterEach
    public void afterEach(){
        memberRepository.clearStore();
    }

    @Test
    void 회원가입() {
        // given
        Member member = new Member();
        member.setName(&quot;hello&quot;);

        // when
        Long saveId = memberService.join(member);

        // then
        Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());

    }

    @Test
    public void 중복_회원_예외(){
        //given
        Member member1 = new Member();
        member1.setName(&quot;spring&quot;);

        Member member2 = new Member();
        member2.setName(&quot;spring&quot;);

        //when
        memberService.join(member1);
        IllegalThreadStateException e = assertThrows(IllegalThreadStateException.class, () -&amp;gt; memberService.join(member2));

        assertThat(e.getMessage()).isEqualTo(&quot;이미 존재하는 회원입니다.&quot;);
        
/*
        try{
            memberService.join(member2);    // 예외가 발생하여 catch부 실행
            fail();
        } catch(IllegalThreadStateException e){
            // 메시지가 일치하는지 확인
            assertThat(e.getMessage()).isEqualTo(&quot;이미 존재하는 회원입니다.&quot;);
        }
*/

        //then
    }

    @Test
    void findMembers() {
    }

    @Test
    void findOne() {
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7.5.4. 의존 주입 ( DI )&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 코드는 MemberService와 MemoryMemberRepository 각각 인스턴스를 생성하기 때문에 데이터가 달라질 수 있다.&lt;br /&gt;따라서 &lt;u&gt;'의존 주입'&lt;/u&gt;을 하여 Service에서도 같은 MemoryMemberRepository가 사용되도록 해보자잉.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java/hello/hellospring/service/MemberService.java&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MemberRepository 객체를 매개변수로 받는 &lt;span&gt;생성자를 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654083226122&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;

import java.util.List;
import java.util.Optional;

public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }


    /**
     * 회원가입
     */

...

}&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;java/hello/hellospring/service/MemberServiceTest.java&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;@BeforeEach : 테스트 메서드가 실행되기 전 실행하는 메서드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;따라서 각 메서드가 실행되기 전에 MemoryMemberRepository객체가 생성되고, &lt;br /&gt;그 인스턴스로 MemberService 객체가 생성되어 그 데이터가 보존?될 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654083335762&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;

class MemberServiceTest {

    MemberService memberService;
    MemoryMemberRepository memberRepository;

    @BeforeEach
    public void beforeEach(){
        memberRepository = new MemoryMemberRepository();
        memberService = new MemberService(memberRepository);
    }

    @AfterEach
    public void afterEach(){
        memberRepository.clearStore();
    }

    @Test
    void 회원가입() {
        // given
        Member member = new Member();
        member.setName(&quot;hello&quot;);

        // when
        Long saveId = memberService.join(member);

        // then
        Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());

    }

...

}&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;8. 스프링 빈(Spring Bean)과 의존관계&lt;/b&gt;&lt;/h2&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BdJFC/btrDPrS5ttP/I01DYbY1nyweUzdK7WgOpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BdJFC/btrDPrS5ttP/I01DYbY1nyweUzdK7WgOpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BdJFC/btrDPrS5ttP/I01DYbY1nyweUzdK7WgOpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBdJFC%2FbtrDPrS5ttP%2FI01DYbY1nyweUzdK7WgOpK%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;679&quot; height=&quot;494&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;컴포넌트 스캔&lt;/u&gt;과 &lt;u&gt;자동 의존관계 설정&lt;/u&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;@Controller, @Service, @Repository 등 코드에 작성하여 의존관계를 설정하는 방식 : 컴포넌트 스캔&lt;br /&gt;( @Component의 특수화된(@Component를 포함) 케이스 )&lt;/li&gt;
&lt;li&gt;그리고 &lt;u&gt;@Autowired&lt;/u&gt; 어노테이션으로 &lt;u&gt;클래스들의 연관관계를 형성&lt;/u&gt;한다. &lt;br /&gt;( &lt;u&gt;객체 생성시점&lt;/u&gt;에 스프링 컨테이너에서 해당 &lt;u&gt;빈을 찾아 주입&lt;/u&gt;(DI)한다. )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;자바 코드로 직접 스프링 빈 등록하기&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;8.1. 컴포넌트 스캔과 자동 의존관계 설정&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8.1.1. MemberController.java&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/controller/MemberController.java&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;클래스 선언부에 @Controller를 사용해 스프링 빈에 등록한다.&lt;/li&gt;
&lt;li&gt;@Autowired를 MemberService가 매개변수인 생성자에 사용하여 해당 빈을 가져와 사용하도록 한다.&lt;br /&gt;( 사용하려면 MemberService가 스프링 빈에 등록되어야 한다 )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654161219182&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {

    // private final MemberService memberService = new MemberService();
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }
    
    ...
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8.1.2. MemberService.java 수정&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스 선언부 위에 &lt;u&gt;@Service&lt;/u&gt; 애너테이션을 입력하여 &lt;u&gt;스프링 빈으로 등록&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;MemberRepository를 매개변수로 갖는 생성자 위에 @Autowired를 입력&lt;/u&gt;하여 &lt;u&gt;의존주입&lt;/u&gt;한다.&lt;br /&gt;( MemberRepository는 Interface이므로 이를 구현하는 클래스인 MemoryMemberRepository를 빈으로 등록되어 있어야 한다. )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654161309413&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class MemberService {

    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8.1.3. MemoryMemberRepository.java&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MemberRepository.java 인터페이스를 구현하는 구현 클래스인 MemoryMemberRepository클래스를 &lt;br /&gt;@Repository를 사용해 스프링 빈으로 등록한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654162085798&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.stereotype.Repository;

import java.util.*;

@Repository
public class MemoryMemberRepository implements MemberRepository{

    private static Map&amp;lt;Long, Member&amp;gt; store = new HashMap&amp;lt;&amp;gt;();
    private static long sequence = 0L;

...

}&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;style1&quot; /&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;8.2. 자바 코드로 직접 스프링 빈 등록하기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회원 서비스와 회원 리포지토리의 @Service, @Repository, @Autowired 애너테이션을 제거하고 진행한다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Controller는 스프링에서 직접 관리하기 때문에 어노테이션을 삭제하지 않는다.&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8.2.1. Configuration 클래스 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java/hello/hellospring/SpringConfig.java&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@Configuration으로 클래스를 감싸 스프링이 빈 등록을 시킬 수 있도록 한다.&lt;/li&gt;
&lt;li&gt;필드 메서드에는 @Bean 어노테이션으로 해당 클래스가 스프링 빈에 등록하고, &lt;br /&gt;그 &lt;u&gt;내부에는 new 키워드로 의존주입&lt;/u&gt;을 한다.( 자동 의존관계 설정에서 @Autowired에 해당 )&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654164902707&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Optional;

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8.2.2. 의존 주입&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거에는 XML로 스프링 빈을 설정했지만, 최근에는 잘 사용하지 않는 방법.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의존주입(DI)에는 3가지 방법이 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;필드 주입&lt;/u&gt; ( 내가 프로젝트에서 사용한 방법 ) - 별로 안좋다고 함..&lt;/li&gt;
&lt;li&gt;&lt;u&gt;setter 주입&lt;/u&gt; ( 과거에 주로 사용했지만, 최근에는 사용하지 않는 방식 ) - 멤버필드인 객체를 setter로 생성하여 주입하는 방식 ;&amp;nbsp; 메서드가 public하게 노출되면서 중간에 바꿔치기될 가능성이 비교적 높다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;생성자 주입&lt;/u&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;b&gt;&lt;u&gt;정형화되어있지 않은 상황&lt;/u&gt;&lt;/b&gt;&amp;nbsp;( 차후에 구현 클래스를 변경해야 하는 상황)에서는 &lt;b&gt;&lt;u&gt;자바 코드로 직접 스프링 빈을 등록하는 것이 더 유리&lt;/u&gt;&lt;/b&gt;하다. &lt;br /&gt;현재 작성한 프로젝트에서는, DB가 정해지지 않은 상황이다. (MemoryMemberRepository를 변경해야 하는 상황 )&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;9. 회원 관리 예제 - 웹 MVC 개발&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9.1. 홈 화면 추가&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홈 컨트롤러 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java/hello/hellospring/controller/HomeController.java&lt;/p&gt;
&lt;pre id=&quot;code_1654258639337&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    // main페이지(home)
    @GetMapping(&quot;/&quot;)
    public String home(){
        return &quot;home&quot;;
    }

}&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;resources/templates/home.html&lt;/p&gt;
&lt;pre id=&quot;code_1654258627073&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;

&amp;lt;body&amp;gt;
&amp;lt;!-- home.html --&amp;gt;

&amp;lt;div class=&quot;container&quot;&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;h1&amp;gt;Hello Spring&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;회원 기능&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;
            &amp;lt;a href=&quot;/members/new&quot;&amp;gt;회원 가입&amp;lt;/a&amp;gt;
            &amp;lt;a href=&quot;/members&quot;&amp;gt;회원 목록&amp;lt;/a&amp;gt;
        &amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- /container --&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yOGVG/btrDVnjio1v/kkct7C1tcCtNMXYqaKmDa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yOGVG/btrDVnjio1v/kkct7C1tcCtNMXYqaKmDa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yOGVG/btrDVnjio1v/kkct7C1tcCtNMXYqaKmDa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyOGVG%2FbtrDVnjio1v%2Fkkct7C1tcCtNMXYqaKmDa0%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;270&quot; height=&quot;236&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;222&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;이전에 만들었던 index.html(static)로 이동하지 않는 이유는,&lt;br /&gt;스프링에 우선순위가 있기 때문이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;스프링은 &lt;u&gt;스프링 컨테이너에서 일치하는 관련 컨트롤러를 우선 탐색&lt;/u&gt;하고,&lt;/li&gt;
&lt;li&gt;그곳에 없으면 &lt;u&gt;static파일을 탐색&lt;/u&gt;한다.&lt;/li&gt;
&lt;/ol&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;style1&quot; /&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;9.2. 회원 등록&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;9.2.1. 회원 등록 폼 컨트롤러 ( GET )&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/controller/MemberController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654262727009&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MemberController {

    // private final MemberService memberService = new MemberService();
    private MemberService memberService;


    @Autowired
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }

    @GetMapping(&quot;members/new&quot;)
    public String createForm(){
        return &quot;members/createMemberForm&quot;;
    }

...

}&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;회원 등록 폼 html&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;resources/templates/members/createMemberForm.html&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654262766695&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;

&amp;lt;body&amp;gt;
&amp;lt;!-- createMemberForm.html --&amp;gt;

&amp;lt;div class=&quot;container&quot;&amp;gt;
    &amp;lt;form action=&quot;/members/new&quot; method=&quot;post&quot;&amp;gt;
        &amp;lt;div class=&quot;form-group&quot;&amp;gt;
            &amp;lt;label for=&quot;name&quot;&amp;gt;이름&amp;lt;/label&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot; placeholder=&quot;이름을 입력하세요&quot;&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;button type=&quot;submit&quot;&amp;gt;등록&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- /container --&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZlmbB/btrDUUWj3D0/MK3VQWB5iVjrEh6v9auE20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZlmbB/btrDUUWj3D0/MK3VQWB5iVjrEh6v9auE20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZlmbB/btrDUUWj3D0/MK3VQWB5iVjrEh6v9auE20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZlmbB%2FbtrDUUWj3D0%2FMK3VQWB5iVjrEh6v9auE20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;308&quot; height=&quot;156&quot; data-origin-width=&quot;304&quot; data-origin-height=&quot;154&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;9.2.2. 회원 등록 컨트롤러 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;( POST )&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/controller/MemberController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654262790545&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class MemberController {

    // private final MemberService memberService = new MemberService();
    private MemberService memberService;


    @Autowired
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }

...

    @PostMapping(&quot;members/new&quot;)
    public String create(MemberForm form){
        Member member = new Member();
        member.setName(form.getName());

        memberService.join(member);

        return &quot;redirect:/&quot;;
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직은 회원 등록을 해도 확인이 불가능하다.&lt;br /&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;9.3. 회원 조회&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;9.3.1. 전체 회원 조회 컨트롤러&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/controller/MemberController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654265648463&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.controller;

import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Controller
public class MemberController {

    // private final MemberService memberService = new MemberService();
    private MemberService memberService;


    @Autowired
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }

...

    @GetMapping(&quot;members&quot;)
    public String list(Model model){
        List&amp;lt;Member&amp;gt; members = memberService.findMembers();
        model.addAttribute(&quot;members&quot;, members);
        return &quot;members/memberList&quot;;
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;9.3.2. 회원 리스트 html&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;resources/templates/members/memberList.html&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654265684875&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;

&amp;lt;body&amp;gt;
&amp;lt;!-- memberList.html --&amp;gt;
&amp;lt;div class=&quot;container&quot;&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;table&amp;gt;
            &amp;lt;thead&amp;gt;
            &amp;lt;tr&amp;gt;
                &amp;lt;th&amp;gt;#&amp;lt;/th&amp;gt;
                &amp;lt;th&amp;gt;이름&amp;lt;/th&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;/thead&amp;gt;
            &amp;lt;tbody&amp;gt;
            &amp;lt;tr th:each=&quot;member : ${members}&quot;&amp;gt;
                &amp;lt;td th:text=&quot;${member.id}&quot;&amp;gt;&amp;lt;/td&amp;gt;
                &amp;lt;td th:text=&quot;${member.name}&quot;&amp;gt;&amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            &amp;lt;/tbody&amp;gt;
        &amp;lt;/table&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&amp;lt;!-- /container --&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lci3Q/btrDVCm5Unc/hG2DkmjBdqALy49E7C0OJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lci3Q/btrDVCm5Unc/hG2DkmjBdqALy49E7C0OJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lci3Q/btrDVCm5Unc/hG2DkmjBdqALy49E7C0OJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLci3Q%2FbtrDVCm5Unc%2FhG2DkmjBdqALy49E7C0OJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;279&quot; height=&quot;174&quot; data-origin-width=&quot;289&quot; data-origin-height=&quot;180&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;10. 스프링 DB 접근 기술&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10.1. H2 데이터베이스 설치&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10.1.1. H2 DB 세팅&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설치 후 db파일을 생성한 후, 소캣 접근을 해야한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;계속해서 파일접근을 하면 애플리케이션과 웹콘솔과 동시접근으로 오류가 발생할 수 있기 때문이다!!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Yp1m/btrDZuBk8CA/3O9v5AhA8zzBi9VaQGBo2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Yp1m/btrDZuBk8CA/3O9v5AhA8zzBi9VaQGBo2k/img.png&quot; data-alt=&quot;일단 이렇게 실행시키면 아래와 같이 데이터베이스 ( test라는 이름의 )파일이 생성된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Yp1m/btrDZuBk8CA/3O9v5AhA8zzBi9VaQGBo2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Yp1m%2FbtrDZuBk8CA%2F3O9v5AhA8zzBi9VaQGBo2k%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;620&quot; height=&quot;553&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;일단 이렇게 실행시키면 아래와 같이 데이터베이스 ( test라는 이름의 )파일이 생성된다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bve85z/btrDZuH5qPS/ZKWUKU0r0ugteLWA5Fhfq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bve85z/btrDZuH5qPS/ZKWUKU0r0ugteLWA5Fhfq0/img.png&quot; data-alt=&quot;c:user/pc명에 생김&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bve85z/btrDZuH5qPS/ZKWUKU0r0ugteLWA5Fhfq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbve85z%2FbtrDZuH5qPS%2FZKWUKU0r0ugteLWA5Fhfq0%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;292&quot; height=&quot;236&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;c:user/pc명에 생김&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GAs9z/btrDVD717lr/xLniICm0U204QbsgJSWDE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GAs9z/btrDVD717lr/xLniICm0U204QbsgJSWDE0/img.png&quot; data-alt=&quot;db파일이 생성된것을 확인하면 이후에는 소캣접근을 한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GAs9z/btrDVD717lr/xLniICm0U204QbsgJSWDE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGAs9z%2FbtrDVD717lr%2FxLniICm0U204QbsgJSWDE0%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;528&quot; height=&quot;448&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;db파일이 생성된것을 확인하면 이후에는 소캣접근을 한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;10.1.2. member테이블 생성&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bigint : Java의 Long 타입은 h2에서 bigint라는 타입,&lt;/li&gt;
&lt;li&gt;generated by default as identity : 값이 null로 insert되면, 자동으로 값을 채워진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654319320733&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;drop table if exists member CASCADE;
create table member
(
 id bigint generated by default as identity,
 name varchar(255),
 primary key(id)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb62v7/btrDWiPSErd/KwqTGy87qCK9Afc1GxqRE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb62v7/btrDWiPSErd/KwqTGy87qCK9Afc1GxqRE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb62v7/btrDWiPSErd/KwqTGy87qCK9Afc1GxqRE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb62v7%2FbtrDWiPSErd%2FKwqTGy87qCK9Afc1GxqRE1%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;640&quot; height=&quot;419&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;640&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-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SVq3L/btrDV0Ppejn/lg498u9cL3EXgPyAGR236k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SVq3L/btrDV0Ppejn/lg498u9cL3EXgPyAGR236k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SVq3L/btrDV0Ppejn/lg498u9cL3EXgPyAGR236k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSVq3L%2FbtrDV0Ppejn%2Flg498u9cL3EXgPyAGR236k%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;466&quot; height=&quot;450&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;496&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;10.2. 순수 JDBC&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.2.1. 환경설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;build.gradle&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;jdbc와 H2 DB에 관련된 라이브러리를 추가한다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654329092445&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...

dependencies {

	...

	/* jdbc driver */
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
	runtimeOnly 'com.h2database:h2'
}
	
...

}&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;resources/&lt;u&gt;application.properties&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;H2 DB에 접근하기 위한 DB설정 정보를 작성한다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654329177634&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.2.2. Jdbc 리포지토리 구현&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/repository/&lt;u&gt;JdbcMemberRepository.java&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;회원을&amp;nbsp;db에&amp;nbsp;저장하는&amp;nbsp;repository&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;앞에서 만들었던 &lt;u&gt;MemoryMemberRepository는 메모리에 저장하는 repository&lt;/u&gt;라는 차이가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654329273769&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.jdbc.datasource.DataSourceUtils;

import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class JdbcMemberRepository implements MemberRepository{
    // 회원을 db에 저장하는 repository
    // 앞에서 만들었던 MemoryMemberRepository는 메모리에 저장하는 repository라는 차이가 있다.

    private final DataSource dataSource;

    public JdbcMemberRepository(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public Member save(Member member) {
        String sql = &quot;insert into member(name) values(?)&quot;;

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            conn = getConnection();
            pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

            pstmt.setString(1, member.getName());

            pstmt.executeUpdate();
            rs = pstmt.getGeneratedKeys();

            if (rs.next()) {
                member.setId(rs.getLong(1));
            } else {
                throw new SQLException(&quot;id 조회 실패&quot;);
            }
            return member;
        } catch (Exception e) {
            throw new IllegalStateException(e);
        } finally {
            close(conn, pstmt, rs);
        }
    }
    
    @Override
    public Optional&amp;lt;Member&amp;gt; findById(Long id) {
        String sql = &quot;select * from member where id = ?&quot;;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            conn = getConnection();
            pstmt = conn.prepareStatement(sql);
            pstmt.setLong(1, id);
            rs = pstmt.executeQuery();
            if(rs.next()) {
                Member member = new Member();
                member.setId(rs.getLong(&quot;id&quot;));
                member.setName(rs.getString(&quot;name&quot;));
                return Optional.of(member);
            } else {
                return Optional.empty();
            }
        } catch (Exception e) {
            throw new IllegalStateException(e);
        } finally {
            close(conn, pstmt, rs);
        }
    }
    
    @Override
    public List&amp;lt;Member&amp;gt; findAll() {
        String sql = &quot;select * from member&quot;;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            conn = getConnection();
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            List&amp;lt;Member&amp;gt; members = new ArrayList&amp;lt;&amp;gt;();
            while(rs.next()) {
                Member member = new Member();
                member.setId(rs.getLong(&quot;id&quot;));
                member.setName(rs.getString(&quot;name&quot;));
                members.add(member);
            }
            return members;
        } catch (Exception e) {
            throw new IllegalStateException(e);
        } finally {
            close(conn, pstmt, rs);
        }
    }
    
    @Override
    public Optional&amp;lt;Member&amp;gt; findByName(String name) {
        String sql = &quot;select * from member where name = ?&quot;;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            conn = getConnection();
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, name);
            rs = pstmt.executeQuery();
            if(rs.next()) {
                Member member = new Member();
                member.setId(rs.getLong(&quot;id&quot;));
                member.setName(rs.getString(&quot;name&quot;));
                return Optional.of(member);
            }
            return Optional.empty();
        } catch (Exception e) {
            throw new IllegalStateException(e);
        } finally {
            close(conn, pstmt, rs);
        }
    }
    private Connection getConnection() {
        return DataSourceUtils.getConnection(dataSource);
    }
    private void close(Connection conn, PreparedStatement pstmt, ResultSet rs)
    {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (pstmt != null) {
                pstmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null) {
                close(conn);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    private void close(Connection conn) throws SQLException {
        DataSourceUtils.releaseConnection(conn, dataSource);
    }
}​&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;java/hello/hellospring/&lt;u&gt;SpringConfig.java&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 MemoryMemberRepository에 연결되어 있던 bean을 &lt;u&gt;JdbcMemberRepository로 변경&lt;/u&gt;하고,&lt;br /&gt;&lt;u&gt;JdbcMemberRepository는 DataSource를 전달인수로 필요&lt;/u&gt;로 하므로, &lt;u&gt;DataSource를&lt;/u&gt; 생성자 주입 방식으로 &lt;u&gt;Bean을 생성하여 주입&lt;/u&gt;한다.&lt;/p&gt;
&lt;pre id=&quot;code_1654329372570&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.util.List;
import java.util.Optional;

@Configuration
public class SpringConfig {

    private DataSource dataSource;

    @Autowired
    public SpringConfig(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    ...

    @Bean
    public MemberRepository memberRepository(){
        // return new MemoryMemberRepository();
        return new JdbcMemberRepository(dataSource);
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y2yiL/btrDWEFghOo/4FApYVNCNh9DB1uFiXCMT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y2yiL/btrDWEFghOo/4FApYVNCNh9DB1uFiXCMT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y2yiL/btrDWEFghOo/4FApYVNCNh9DB1uFiXCMT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy2yiL%2FbtrDWEFghOo%2F4FApYVNCNh9DB1uFiXCMT1%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;713&quot; height=&quot;417&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/edhg8i/btrDV6uSsxE/jkXc3VbCBEwURV0WkyciB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/edhg8i/btrDV6uSsxE/jkXc3VbCBEwURV0WkyciB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/edhg8i/btrDV6uSsxE/jkXc3VbCBEwURV0WkyciB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fedhg8i%2FbtrDV6uSsxE%2FjkXc3VbCBEwURV0WkyciB1%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;757&quot; height=&quot;509&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이와 같은 원칙은&lt;u&gt; 'SOLID 설계 원칙'에서 '개방-폐쇄 원칙(OCP; Open-Close Principle)&lt;/u&gt;'이라 한다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;확장에는 열려있고, 수정,변경에는 닫힌 구조&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;스프링의 &lt;u&gt;DI를 사용&lt;/u&gt;하면 기존 코드를 전혀 손대지 않고, &lt;u&gt;설정만으로 구현 클래스를 변경&lt;/u&gt;할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;style1&quot; /&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;10.3. 스프링 통합 테스트&lt;/b&gt;&lt;/h3&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;java/hello/hellospring/service/MemberServiceIntegrationTest.java&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 MemberServiceTest를 복제하여 네이밍을 바꾸고 수정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1654331128522&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {

    @Autowired
    MemberService memberService;
    
    @Autowired
    MemberRepository memberRepository;

    @Test
    void 회원가입() {
        // given
        Member member = new Member();
        member.setName(&quot;hello&quot;);

        // when
        Long saveId = memberService.join(member);

        // then
        Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());

    }

    @Test
    public void 중복_회원_예외(){
        //given
        Member member1 = new Member();
        member1.setName(&quot;spring&quot;);

        Member member2 = new Member();
        member2.setName(&quot;spring&quot;);

        //when
        memberService.join(member1);
        IllegalThreadStateException e = assertThrows(IllegalThreadStateException.class, () -&amp;gt; memberService.join(member2));

        assertThat(e.getMessage()).isEqualTo(&quot;이미 존재하는 회원입니다.&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@SpringBootTest : 스프링부트를 구동하여 테스트를 진행한다.&lt;/li&gt;
&lt;li&gt;@Transactional : 테스트 케이스에 @Transactional이 있다면, 테스트 직전에 트랜잭션을 하고, 하나의 테스트가 끝날 때 마다 롤백을 한다.&lt;br /&gt;이렇게 하면, 매 테스트시 DB에 데이터가 보존되므로, 다음 테스트에 영향을 주지 않는다.&lt;/li&gt;
&lt;/ul&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;style1&quot; /&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;10.4. 스프링 JdbcTemplate&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.4.1. 환경설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순수 JDBC와 동일한 환경설정을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 JdbcTemplate와 MyBatis같은 라이브러리는, &lt;br /&gt;JDBC API에서 본 반복되는 코드를 대부분 제거했으나, SQL은 직접 작성해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.4.2. JdbcTemplate 리포지토리 구현&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/repository/&lt;u&gt;JdbcTemplateMemberRepository.java&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SimpleJdbcInsert : JdbcTemplate를 전달받아 생성되며, 테이블명과 컬럼명을 설정하면 자동으로 쿼리가 생성되는 객체&lt;/li&gt;
&lt;li&gt;RopMapper 메서드는 람다식으로 변환하여 짧은 코드로 작성할 수 있다.&lt;br /&gt;&lt;a href=&quot;https://velog.io/@seculoper235/RowMapper%EC%97%90-%EB%8C%80%ED%95%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@seculoper235/RowMapper%EC%97%90-%EB%8C%80%ED%95%B4&lt;/a&gt; 참고&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654334217824&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;


import hello.hellospring.domain.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;

import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

public class JdbcTemplateMemberRepository implements MemberRepository {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public JdbcTemplateMemberRepository(DataSource dataSource) {
        jdbcTemplate = new JdbcTemplate(dataSource);
    }

    @Override
    public Member save(Member member) {
        SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
        jdbcInsert.withTableName(&quot;member&quot;).usingGeneratedKeyColumns(&quot;id&quot;);

        Map&amp;lt;String, Object&amp;gt; parameters = new HashMap&amp;lt;&amp;gt;();
        parameters.put(&quot;name&quot;, member.getName());

        Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
        member.setId(key.longValue());
        return member;

    }

    @Override
    public Optional&amp;lt;Member&amp;gt; findById(Long id) {
        List&amp;lt;Member&amp;gt; result = jdbcTemplate.query(&quot;select * from member where id=?&quot;, memberRowMapper(), id);
        return result.stream().findAny();
    }

    @Override
    public Optional&amp;lt;Member&amp;gt; findByName(String name) {
        List&amp;lt;Member&amp;gt; result = jdbcTemplate.query(&quot;select * from member where name=?&quot;, memberRowMapper(), name);
        return result.stream().findAny();
    }

    @Override
    public List&amp;lt;Member&amp;gt; findAll() {
        return jdbcTemplate.query(&quot;select * from member&quot;, memberRowMapper());
    }

    private RowMapper&amp;lt;Member&amp;gt; memberRowMapper(){
//        return new RowMapper&amp;lt;Member&amp;gt;() {
//            @Override
//            public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
//                Member member = new Member();
//                member.setId(rs.getLong(&quot;id&quot;));
//                member.setName(rs.getString(&quot;name&quot;));
//                return member;
//            }
//        };

        return (rs, rowNum) -&amp;gt; {
            Member member = new Member();
            member.setId(rs.getLong(&quot;id&quot;));
            member.setName(rs.getString(&quot;name&quot;));
            return member;
        };
    }
}&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;java/hello/hellospring/&lt;u&gt;SpringConfig.java&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 JdbcMemberRepository로 생성되던 빈을 JdbcTemplateMemberRepository로 변경하고, DataSource를 주입한다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package hello.hellospring;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.JdbcTemplateMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.util.List;
import java.util.Optional;

@Configuration
public class SpringConfig {

    private DataSource dataSource;

    @Autowired
    public SpringConfig(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    ...

    @Bean
    public MemberRepository memberRepository(){
        // return new MemoryMemberRepository();
        // return new JdbcMemberRepository(dataSource);
        return new JdbcTemplateMemberRepository(dataSource);
    }
}&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;style1&quot; /&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;10.5. JPA&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JPA는 반복되는 코드는 물론, 기본적인 SQL도 JPA가 직접 만들어 실행.&lt;/li&gt;
&lt;li&gt;JPA를 사용하면, SQL과 데이터 중심의 설계 -&amp;gt; 객체 중심의 설계로 패러다임을 전환이 가능하다.&lt;/li&gt;
&lt;li&gt;JPA를 사용하면 개발 생산성을 크게 높일 수 있다.&lt;/li&gt;
&lt;li&gt;MyBatis는 중국과 우리나라에서 많이 사용되지만, &lt;br /&gt;최근 우리나라에서도 점차적으로 JPA의 점유율이 증가하고 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.5.1. JPA 환경설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;build.gradle&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;jpa라이브러리는 jdbc 관련 라이브러리를 포함한다. &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654337906776&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'

	/* jdbc driver */
//	implementation 'org.springframework.boot:spring-boot-starter-jdbc'

	runtimeOnly 'com.h2database:h2'

	/* jpa */
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

}

...&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;resources/application.properties&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;show-sql&amp;nbsp; : JPA가 생성하는 SQL을 출력한다.&lt;/li&gt;
&lt;li&gt;ddl-auto : JPA는 테이블을 자동으로 생성하는 기능을 제공하는데 none을 입력하면 해당 기능을 꺼놓는다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;create를 입력하면 엔티티 정보를 바탕으로 테이블도 직접 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654337945027&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server.port=8090

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.5.2. JPA 엔티티 매핑&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JPA는 인터페이스만 제공되고, 구현체로는 Hibernate, EclipseLink등 여러 구현기술들이 존재한다. &lt;br /&gt;(우리는 JPA와 Hibernate를 사용)&lt;br /&gt;쉽게 말해서, JPA는 표준 인터페이스이며, JPA의 구현은 여러 업체들의 라이브러리를 사용하는 것&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JPA를 사용하려면 우선 Entity를 매핑해야한다.&lt;br /&gt;&lt;/b&gt;@Entity 어노테이션을 입력하게되면, 이제 &lt;u&gt;JPA가 관리하는 클래스&lt;/u&gt;가 되는 것.&lt;br /&gt;&lt;u&gt;JPA를 사용&lt;/u&gt;하여 &lt;u&gt;테이블과 매핑할 클래스&lt;/u&gt;는 &lt;u&gt;반드시 @Entity가 명시&lt;/u&gt;되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 그 Entity 요소 중 &lt;u&gt;'PK'&lt;/u&gt;(Primary Key)와 &lt;u&gt;'값 자동생성'&lt;/u&gt;를 매핑해야한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;@Id&lt;/u&gt; : pk매핑&lt;/li&gt;
&lt;li&gt;&lt;u&gt;@GeneratedValue(strategy = Generation.IDENTITY)&lt;/u&gt; : &lt;u&gt;값이 자동 생성되는 Column이므로 자동생성임을 명시&lt;/u&gt;한다.&lt;br /&gt;자동생성 키워드의 종류는, IDENTITY, SEQUENCE, TABLE, AUTO등이 있으며,&lt;br /&gt;여기서는 &lt;u&gt;기본 키 생성을 데이터베이스에 위임&lt;/u&gt;하고, MySQL에서 많이 사용하는 &lt;u&gt;'IDENTITY'를 사용&lt;/u&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654338457439&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Member {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;    // 시스템의 데이터 아이디 (회원 id X)
    private String name;

    // getter/setter

	...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.5.3. JPA 회원 리포지토리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JPA는 EntityManager 객체로 모든 동작을 한다.&lt;br /&gt;JPA 라이브러리를 받으면 스프링부트는 자동으로 EntityManager를 생성하므로,&lt;br /&gt;Repository에서는 그것을 Injection받고 사용하기만 하면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특이하게 findByName()과 findAll()에서는 객체지향쿼리(JPQL)을 사용하는데, &lt;br /&gt;그 이유는 여러 개의 리스트를 조회할 때 pk가 아닌 값으로 검색, 조회하기 때문!! (결과가 복수개)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;( 그러나, 다음 챕터에서 진행하는 '스프링 데이터 JPA'를 사용하면 객체지향쿼리도 생략이 가능하다... )&lt;/p&gt;
&lt;pre id=&quot;code_1654338579027&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.beans.factory.annotation.Autowired;

import javax.persistence.EntityManager;
import java.util.List;
import java.util.Optional;

public class JpaMemberRepository implements MemberRepository{

    private final EntityManager em;

    @Autowired
    public JpaMemberRepository(EntityManager em) {
        this.em = em;
    }

    @Override
    public Member save(Member member) {
        em.persist(member);
        return member;
    }

    @Override
    public Optional&amp;lt;Member&amp;gt; findById(Long id) {
        Member member = em.find(Member.class, id);
        return Optional.ofNullable(member);
    }

    @Override
    public Optional&amp;lt;Member&amp;gt; findByName(String name) {
        List&amp;lt;Member&amp;gt; result = em.createQuery(&quot;select m from Member m where m.name =: name&quot;, Member.class)
                .setParameter(&quot;name&quot;, name)
                .getResultList();

        return result.stream().findAny();
    }

    @Override
    public List&amp;lt;Member&amp;gt; findAll() {
        return em.createQuery(&quot;select m from member m&quot;, Member.class)
                .getResultList();
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.5.4. 서비스 계층에 트랜잭션 추가&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JPA로 데이터를 저장, 변경할 때 트랜잭션이 필요하다.&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;@Transactional을 입력한다. : JPA를 통한 모든 데이터 변경은 &lt;u&gt;반드시 트랜잭션 안에서 실행&lt;/u&gt;되어야 한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스프링은 해당 클래스의 메서드를 실행할 때 트랜잭션을 시작하고, 메서드 정상 종료되면 트랜잭션을 커밋한다.&lt;/li&gt;
&lt;li&gt;만약 런타임 예외가 발생하면 롤백한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1654338690457&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Transactional
public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }


    /**
     * 회원가입
     */

...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.5.5. JPA를 사용하도록 &lt;/b&gt;&lt;b&gt;스프링 설정 변경&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1654338784477&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring;

import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;

@Configuration
public class SpringConfig {

    private EntityManager em;

    @Autowired
    public SpringConfig(EntityManager em) {
        this.em = em;
    }

    ...

    @Bean
    public MemberRepository memberRepository(){
        // return new MemoryMemberRepository();
        // return new JdbcMemberRepository(dataSource);
        // return new JdbcTemplateMemberRepository(dataSource);
        return new JpaMemberRepository(em);
    }
    
}&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;style1&quot; /&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;10.6. 스프링 데이터 JPA&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'스프링 부트'와 'JPA'만 사용해도 개발 생산성이 눈에 띄게 증가하고, 코드 줄도 확연히 줄어든다.&lt;br /&gt;여기에 '스프링 데이터 JPA'를 더하면, 마치 마법처럼 리포지토리에 구현 클래스 없이 &lt;u&gt;인터페이스만으로 개발을 완료&lt;/u&gt;할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 반복해서 개발해오던 CRUD기능도 '스프링 데이터 JPA'가 모두 제공된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 조금이라도 단순하며 반복됬던 개발 코드들이 확연히 줄어든다. &lt;br /&gt;따라서 개발자는 &lt;u&gt;핵심 비즈니스 로직을 개발하는데에 더욱 집중할 수 있는 환경이 마련&lt;/u&gt;된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, '스프링 데이터 JPA'는 &lt;u&gt;'JPA'를 편리하게 사용하는 기술&lt;/u&gt;이므로, &lt;br /&gt;&lt;u&gt;'JPA'를 먼저 학습한 뒤에 '스프링 데이터 JPA'를 학습&lt;/u&gt;해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.6.1. 스프링 데이터 JPA 회원 리포지토리 생성 ( interface )&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1654436014097&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface SpringDataJpaMemberRepository extends JpaRepository&amp;lt;Member, Long&amp;gt;, MemberRepository {

    @Override
    Optional&amp;lt;Member&amp;gt; findByName(String name);
    // select m  from Member m where m.name = ? 형태로 스프링 데이터 JPA가 JPQL을 짬
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.6.2. 스프링 데이터 JPA 회원 리포지토리를 사용하도록 설정 변경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스프링 데이터 JPA가 SpringDataJpaMemberRepository를 스프링 빈으로 &lt;u&gt;자동 등록&lt;/u&gt;한다.&lt;br /&gt;따라서 MemberRepository를 final로 생성하여 생성자 주입 되도록 구성하고, 서비스에 주입한다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654436068468&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package hello.hellospring;

import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    private final MemberRepository memberRepository;

    @Autowired
    public SpringConfig(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

//    private EntityManager em;
//
//    @Autowired
//    public SpringConfig(EntityManager em) {
//        this.em = em;
//    }

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository);
    }

//    @Bean
//    public MemberRepository memberRepository(){
//        return new MemoryMemberRepository();
//        return new JdbcMemberRepository(dataSource);
//        return new JdbcTemplateMemberRepository(dataSource);
//        return new JpaMemberRepository(em);
//    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.6.3. 스프링 데이터 JPA가 제공하는 클래스&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;각 클래스를 살펴보면 메서드들이 CRUD / 단순조회가 &lt;b&gt;기본적으로 제공되어진다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;843&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMysny/btrDV45xfYW/DGKSb8s1hfuenfvKx0M9o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMysny/btrDV45xfYW/DGKSb8s1hfuenfvKx0M9o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMysny/btrDV45xfYW/DGKSb8s1hfuenfvKx0M9o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMysny%2FbtrDV45xfYW%2FDGKSb8s1hfuenfvKx0M9o1%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;631&quot; height=&quot;843&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;843&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.6.4. 스프링 데이터 JPA가 제공하는 기능&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인터페이스를 통한 기본적인 CRUD ( findAll(), findById(), save, delete 등 )&lt;/li&gt;
&lt;li&gt;findByName(), findByEmail()과 같이 메서드 이름만으로 조회할 수 있는 기능을 제공 ( 쿼리 메서드 )
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;메서드 명에 findBy...()와 같이 findBy다음으로 나오는 요소를 파악하여 쿼리를 구성한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;findBy ... And ... Or ... 등 패턴이 정해져 있음.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/#jpa.query-methods&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/#jpa.query-methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.devkuma.com/docs/jpa/%EC%9E%90%EB%8F%99-%EC%83%9D%EC%84%B1-%EC%BF%BC%EB%A6%AC-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%AA%85%EB%AA%85-%EA%B7%9C%EC%B9%99/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.devkuma.com/docs/jpa/%EC%9E%90%EB%8F%99-%EC%83%9D%EC%84%B1-%EC%BF%BC%EB%A6%AC-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%AA%85%EB%AA%85-%EA%B7%9C%EC%B9%99/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;페이징 기능을 자동 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;10.6.5. 참고 :&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용하고, 복잡한 동적쿼리는 'Querydsl'이라는 라이브러리를 사용하면 된다.&lt;br /&gt;'Querydsl'을 사용하면 쿼리도 자바 코드로 안전하게 작성 가능하며, 동적 쿼리도 편리하게 작성할 수 있다.&lt;br /&gt;이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, 앞서 학습한 JdbcTemplate을 사용하면 된다. ( 스프링 데이터 JPA와 섞어서 사용이 가능하다. )&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;11. AOP&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AOP : Aspect Oriented Programming&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;11.1. AOP가 필요한 상황&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 메서드의 호출 시간을 측정하고 싶을 때&lt;/li&gt;
&lt;li&gt;공통 관심사항(cross-cutting concern) vs 핵심 관심 사항(core concern)&lt;/li&gt;
&lt;li&gt;회원 가입 시간, 회원 조회 시간을 측정이 필요할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;11.1.1. 시간측정 기능 추가하기 ( AOP적용 X )&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package hello.hellospring.service;

...

@Transactional
public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }


    /**
     * 회원가입
     */
    public Long join(Member member){

        long start = System.currentTimeMillis();

        try {
            // 같은 이름이 있는 중복 회원X
            validateDuplicateMember(member);    //중복 회원 검증
            memberRepository.save(member);
            return member.getId();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish-start;
            System.out.println(&quot;join = &quot; + timeMs + &quot;ms&quot;);
        }
    }

    ...

    /**
     * 전체 회원 조회
     */
    public List&amp;lt;Member&amp;gt; findMembers() {
    
        long start = System.currentTimeMillis();

        try {
            return memberRepository.findAll();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish-start;
            System.out.println(&quot;findMembers = &quot; + timeMs + &quot;ms&quot;);
        }
    }

    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9GMOZ/btrEeXLXO3n/WaRDF6BTL1uP24JfVFzcT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9GMOZ/btrEeXLXO3n/WaRDF6BTL1uP24JfVFzcT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9GMOZ/btrEeXLXO3n/WaRDF6BTL1uP24JfVFzcT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9GMOZ%2FbtrEeXLXO3n%2FWaRDF6BTL1uP24JfVFzcT0%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;121&quot; height=&quot;62&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSHolf/btrEibhV64b/GYgDmiKQJZzWqHqrl4dKt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSHolf/btrEibhV64b/GYgDmiKQJZzWqHqrl4dKt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSHolf/btrEibhV64b/GYgDmiKQJZzWqHqrl4dKt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSHolf%2FbtrEibhV64b%2FGYgDmiKQJZzWqHqrl4dKt1%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;155&quot; height=&quot;57&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oxqtW/btrEhrlmEF7/CdaT6GRazbkAWgIR3kkmkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oxqtW/btrEhrlmEF7/CdaT6GRazbkAWgIR3kkmkK/img.png&quot; data-alt=&quot;시간 측정 로직을 각 메서드마다 붙였다...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oxqtW/btrEhrlmEF7/CdaT6GRazbkAWgIR3kkmkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoxqtW%2FbtrEhrlmEF7%2FCdaT6GRazbkAWgIR3kkmkK%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;626&quot; height=&quot;340&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시간 측정 로직을 각 메서드마다 붙였다...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제점 :&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회원 가입, 회원 조회의 &lt;u&gt;'시간을 측정하는 기능'&lt;/u&gt;은 '&lt;u&gt;핵심 관심사항'이 아니다&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;'시간을 측정하는 로직'은 '공통 관심사항'&lt;/u&gt;이다.&lt;/li&gt;
&lt;li&gt;'시간을 측정하는 로직'과 '핵심 비즈니스 로직'이 섞여 &lt;u&gt;유지보수가 어렵다&lt;/u&gt;.&lt;/li&gt;
&lt;li&gt;'시간을 측정하는 로직'을 &lt;u&gt;별도의 공통 로직으로 만들기 매우 어렵다&lt;/u&gt;.&lt;br /&gt;( 핵심로직의 시작과 끝 부분에 물려야 하기 때문 )&lt;/li&gt;
&lt;li&gt;'시간을 측정하는 로직'을 &lt;u&gt;변경할 때 모든 로직을 찾아 변경해야 한다&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&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;style1&quot; /&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;11.2. AOP 적용&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AOP : Aspect Oriented Programming&lt;/li&gt;
&lt;li&gt;공통 관심 사항(cross-cutting concern)과 핵심 관심 사항(core concern)의 분리&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boHMdk/btrEgvhfANW/NS7uT1o0FrrXvHDxn1YMuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boHMdk/btrEgvhfANW/NS7uT1o0FrrXvHDxn1YMuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boHMdk/btrEgvhfANW/NS7uT1o0FrrXvHDxn1YMuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboHMdk%2FbtrEgvhfANW%2FNS7uT1o0FrrXvHDxn1YMuk%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;602&quot; height=&quot;322&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;11.2.1. 시간 측정 AOP 등록&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java/hello/hellospring/aop/TimeTraceAop.java&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;@Aspect 어노테이션&lt;/li&gt;
&lt;li&gt;@Component로 빈으로 등록한다.&lt;/li&gt;
&lt;li&gt;@Around(&quot;execution(* hello.hellospring..*(..))&quot;) :&amp;nbsp;&lt;br /&gt;&lt;u&gt;AOP가 적용될 디렉토리를 설정&lt;/u&gt;하는 것&lt;/li&gt;
&lt;li&gt;joinPoint.proceed(); :&amp;nbsp;&lt;br /&gt;Around에서 기준점이 된다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;proceed() 전 : aop가 적용된 메서드 호출 전 동작&lt;br /&gt;proceed() 후 : aop가 적용된 메서드 호출 후 동작&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package hello.hellospring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class TimeTraceAop {

    @Around(&quot;execution(* hello.hellospring..*(..))&quot;)
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println(&quot;START : &quot; + joinPoint.toString());
        try {
            return joinPoint.proceed();
        }finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;

            System.out.println(&quot;END : &quot; + joinPoint.toString() + &quot; &quot; +timeMs + &quot;ms&quot;);
        }
        
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x5Ahz/btrEgovsbsB/22lZRAg9KOvQfqseXMUrKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x5Ahz/btrEgovsbsB/22lZRAg9KOvQfqseXMUrKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x5Ahz/btrEgovsbsB/22lZRAg9KOvQfqseXMUrKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx5Ahz%2FbtrEgovsbsB%2F22lZRAg9KOvQfqseXMUrKK%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;721&quot; height=&quot;217&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;234&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회원가입, 회원 조회 등 &lt;u&gt;'핵심 관심 사항'과&lt;/u&gt; 시간을 측정하는 &lt;u&gt;'공통 관심 사항'을 분리&lt;/u&gt;한다.&lt;/li&gt;
&lt;li&gt;시간을 측정하는 로직을 별도의 공통 로직으로 만들었다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;핵심 관심 사항을 깔끔하게 유지&lt;/u&gt;할 수 있다.&lt;/li&gt;
&lt;li&gt;변경이 필요하면 이 로직만 변경하면 된다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;원하는 적용 대상을 선택할 수 있다&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;11.2.2. 스프링의 AOP 동작 방식 설명&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AOP 적용 전 의존관계&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3M6Ld/btrEhqGOJuf/1clr4HOqnT7dCvpkr5R5ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3M6Ld/btrEhqGOJuf/1clr4HOqnT7dCvpkr5R5ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3M6Ld/btrEhqGOJuf/1clr4HOqnT7dCvpkr5R5ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3M6Ld%2FbtrEhqGOJuf%2F1clr4HOqnT7dCvpkr5R5ak%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;618&quot; height=&quot;395&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AOP 적용 후 의존 관계&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDCGdi/btrEiawJyHx/WWlWMAMKUhiumIdgU8O411/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDCGdi/btrEiawJyHx/WWlWMAMKUhiumIdgU8O411/img.png&quot; data-alt=&quot;memberService가 복제된 프록시객체가 주입되고, AOP 실행 되고,&amp;amp;nbsp; joinPoint.Proceed()가 되면, 실제 memberService가 호출된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDCGdi/btrEiawJyHx/WWlWMAMKUhiumIdgU8O411/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDCGdi%2FbtrEiawJyHx%2FWWlWMAMKUhiumIdgU8O411%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;623&quot; height=&quot;348&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;memberService가 복제된 프록시객체가 주입되고, AOP 실행 되고,&amp;nbsp; joinPoint.Proceed()가 되면, 실제 memberService가 호출된다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;memberService가 프록시로 복제되는데 이것이 memberController에 주입된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메서드가 실행되면 프록시memberService가 호출되어 AOP가 실행되고 joinPoint.proceed()가 되면, 실제 memberService가 호출되는 구조.&lt;/p&gt;
&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;AOP 적용 전 전체 구성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FjSTf/btrEhpOFYIl/Bx64kVircQsFZ93AczemT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FjSTf/btrEhpOFYIl/Bx64kVircQsFZ93AczemT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FjSTf/btrEhpOFYIl/Bx64kVircQsFZ93AczemT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFjSTf%2FbtrEhpOFYIl%2FBx64kVircQsFZ93AczemT0%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;619&quot; height=&quot;323&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AOP 적용 후 전체 구성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wk2u5/btrEiajc1HV/Zrg1ci3V6G0IwtOf4KLsP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wk2u5/btrEiajc1HV/Zrg1ci3V6G0IwtOf4KLsP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wk2u5/btrEiajc1HV/Zrg1ci3V6G0IwtOf4KLsP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwk2u5%2FbtrEiajc1HV%2FZrg1ci3V6G0IwtOf4KLsP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;329&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Programming/BACKEND</category>
      <author>_Keonmon</author>
      <guid isPermaLink="true">https://montoo.tistory.com/358</guid>
      <comments>https://montoo.tistory.com/358#entry358comment</comments>
      <pubDate>Sun, 29 May 2022 18:51:22 +0900</pubDate>
    </item>
  </channel>
</rss>