<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>조코드</title>
    <link>https://jo-coder.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 11 May 2026 04:14:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>조동동고</managingEditor>
    <item>
      <title>asp.net 게시판 만들기(MS graph API)(Teams 캘린더 읽어오기)</title>
      <link>https://jo-coder.tistory.com/85</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.microsoft.com/en-us/graph/quick-start?code=0.AVQAEz2_Sq4IakOXzpaEyj9NtUlfR1jC_qZOg9x1EEvAbPNUAHw.AQABAAIAAAD--DLA3VO7QrddgJg7Wevrww8dTl89myJ3Qsx8M0AHCDPQbypu0fE4OGi5i39eynsVUzXoP2wosF2vF-H7Ua6Jp2amJNno3hKOLxjruY3OUzFNKknJmPAaHHeTZMK6gO2SmIjAcYwuOIufX37m6zQa8Pa8JfAJTcONlCClxPsFHZbQrvOI1nHMB8Nh6Ri7SpgDJ8dkLet5uS_MqjLvFUS_CN2NRUEKetAiT6yfG3vh21kaJF-7gEI67qYfiKgw3-OvKffbT_ug0hvKR7lUF8HJRT-7VxC0oe-MeUnj82TitssQ6oY6VCqSCEHpItKtcK0s4IDc0_xm4w0qEAPncZGFuqsSWBUr7cXQ-Sn_WRjKCp1n2zyHu7h5egG9nesmB7FrWVE-_lc7GaM7BAjklwYQ7PkGMqYgH28tjf9u0bfSKIGD7bNJbYRdaeqwM2Inj0zO8VQiKP7D4f69Y7ygukaFsjAG00l92h9AUaXDb9Pn0W93WJGJ-FDZz_UnfoR0BEnveZt2h9Y0S17rJX7YxgVEo7yJl3oNijgBGb4ERCdx2uus8ZLbP2ln-FTO3OY4cPXouNDZK0O3MP0v3bYqoBz5v_FEv4GzQBQh6OcUZlTPBCAA&amp;amp;state=option-dotnet&amp;amp;session_state=3f94d9b1-dc34-462e-b3bb-ae6809886284&quot;&gt;https://developer.microsoft.com/en-us/graph/quick-start?code=0.AVQAEz2_Sq4IakOXzpaEyj9NtUlfR1jC_qZOg9x1EEvAbPNUAHw.AQABAAIAAAD--DLA3VO7QrddgJg7Wevrww8dTl89myJ3Qsx8M0AHCDPQbypu0fE4OGi5i39eynsVUzXoP2wosF2vF-H7Ua6Jp2amJNno3hKOLxjruY3OUzFNKknJmPAaHHeTZMK6gO2SmIjAcYwuOIufX37m6zQa8Pa8JfAJTcONlCClxPsFHZbQrvOI1nHMB8Nh6Ri7SpgDJ8dkLet5uS_MqjLvFUS_CN2NRUEKetAiT6yfG3vh21kaJF-7gEI67qYfiKgw3-OvKffbT_ug0hvKR7lUF8HJRT-7VxC0oe-MeUnj82TitssQ6oY6VCqSCEHpItKtcK0s4IDc0_xm4w0qEAPncZGFuqsSWBUr7cXQ-Sn_WRjKCp1n2zyHu7h5egG9nesmB7FrWVE-_lc7GaM7BAjklwYQ7PkGMqYgH28tjf9u0bfSKIGD7bNJbYRdaeqwM2Inj0zO8VQiKP7D4f69Y7ygukaFsjAG00l92h9AUaXDb9Pn0W93WJGJ-FDZz_UnfoR0BEnveZt2h9Y0S17rJX7YxgVEo7yJl3oNijgBGb4ERCdx2uus8ZLbP2ln-FTO3OY4cPXouNDZK0O3MP0v3bYqoBz5v_FEv4GzQBQh6OcUZlTPBCAA&amp;amp;state=option-dotnet&amp;amp;session_state=3f94d9b1-dc34-462e-b3bb-ae6809886284&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1650961892642&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;Quick Start - Microsoft Graph&quot; data-og-description=&quot;Your session has expired. Please sign-in again to continue. Unfortunately any unsaved changes will be lost.&quot; data-og-host=&quot;developer.microsoft.com&quot; data-og-source-url=&quot;https://developer.microsoft.com/en-us/graph/quick-start?code=0.AVQAEz2_Sq4IakOXzpaEyj9NtUlfR1jC_qZOg9x1EEvAbPNUAHw.AQABAAIAAAD--DLA3VO7QrddgJg7Wevrww8dTl89myJ3Qsx8M0AHCDPQbypu0fE4OGi5i39eynsVUzXoP2wosF2vF-H7Ua6Jp2amJNno3hKOLxjruY3OUzFNKknJmPAaHHeTZMK6gO2SmIjAcYwuOIufX37m6zQa8Pa8JfAJTcONlCClxPsFHZbQrvOI1nHMB8Nh6Ri7SpgDJ8dkLet5uS_MqjLvFUS_CN2NRUEKetAiT6yfG3vh21kaJF-7gEI67qYfiKgw3-OvKffbT_ug0hvKR7lUF8HJRT-7VxC0oe-MeUnj82TitssQ6oY6VCqSCEHpItKtcK0s4IDc0_xm4w0qEAPncZGFuqsSWBUr7cXQ-Sn_WRjKCp1n2zyHu7h5egG9nesmB7FrWVE-_lc7GaM7BAjklwYQ7PkGMqYgH28tjf9u0bfSKIGD7bNJbYRdaeqwM2Inj0zO8VQiKP7D4f69Y7ygukaFsjAG00l92h9AUaXDb9Pn0W93WJGJ-FDZz_UnfoR0BEnveZt2h9Y0S17rJX7YxgVEo7yJl3oNijgBGb4ERCdx2uus8ZLbP2ln-FTO3OY4cPXouNDZK0O3MP0v3bYqoBz5v_FEv4GzQBQh6OcUZlTPBCAA&amp;amp;state=option-dotnet&amp;amp;session_state=3f94d9b1-dc34-462e-b3bb-ae6809886284&quot; data-og-url=&quot;https://developer.microsoft.com/en-us/graph/quick-start?code=0.AVQAEz2_Sq4IakOXzpaEyj9NtUlfR1jC_qZOg9x1EEvAbPNUAHw.AQABAAIAAAD--DLA3VO7QrddgJg7Wevrww8dTl89myJ3Qsx8M0AHCDPQbypu0fE4OGi5i39eynsVUzXoP2wosF2vF-H7Ua6Jp2amJNno3hKOLxjruY3OUzFNKknJmPAaHHeTZMK6gO2SmIjAcYwuOIufX37m6zQa8Pa8JfAJTcONlCClxPsFHZbQrvOI1nHMB8Nh6Ri7SpgDJ8dkLet5uS_MqjLvFUS_CN2NRUEKetAiT6yfG3vh21kaJF-7gEI67qYfiKgw3-OvKffbT_ug0hvKR7lUF8HJRT-7VxC0oe-MeUnj82TitssQ6oY6VCqSCEHpItKtcK0s4IDc0_xm4w0qEAPncZGFuqsSWBUr7cXQ-Sn_WRjKCp1n2zyHu7h5egG9nesmB7FrWVE-_lc7GaM7BAjklwYQ7PkGMqYgH28tjf9u0bfSKIGD7bNJbYRdaeqwM2Inj0zO8VQiKP7D4f69Y7ygukaFsjAG00l92h9AUaXDb9Pn0W93WJGJ-FDZz_UnfoR0BEnveZt2h9Y0S17rJX7YxgVEo7yJl3oNijgBGb4ERCdx2uus8ZLbP2ln-FTO3OY4cPXouNDZK0O3MP0v3bYqoBz5v_FEv4GzQBQh6OcUZlTPBCAA&amp;amp;state=option-dotnet&amp;amp;session_state=3f94d9b1-dc34-462e-b3bb-ae6809886284&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.microsoft.com/en-us/graph/quick-start?code=0.AVQAEz2_Sq4IakOXzpaEyj9NtUlfR1jC_qZOg9x1EEvAbPNUAHw.AQABAAIAAAD--DLA3VO7QrddgJg7Wevrww8dTl89myJ3Qsx8M0AHCDPQbypu0fE4OGi5i39eynsVUzXoP2wosF2vF-H7Ua6Jp2amJNno3hKOLxjruY3OUzFNKknJmPAaHHeTZMK6gO2SmIjAcYwuOIufX37m6zQa8Pa8JfAJTcONlCClxPsFHZbQrvOI1nHMB8Nh6Ri7SpgDJ8dkLet5uS_MqjLvFUS_CN2NRUEKetAiT6yfG3vh21kaJF-7gEI67qYfiKgw3-OvKffbT_ug0hvKR7lUF8HJRT-7VxC0oe-MeUnj82TitssQ6oY6VCqSCEHpItKtcK0s4IDc0_xm4w0qEAPncZGFuqsSWBUr7cXQ-Sn_WRjKCp1n2zyHu7h5egG9nesmB7FrWVE-_lc7GaM7BAjklwYQ7PkGMqYgH28tjf9u0bfSKIGD7bNJbYRdaeqwM2Inj0zO8VQiKP7D4f69Y7ygukaFsjAG00l92h9AUaXDb9Pn0W93WJGJ-FDZz_UnfoR0BEnveZt2h9Y0S17rJX7YxgVEo7yJl3oNijgBGb4ERCdx2uus8ZLbP2ln-FTO3OY4cPXouNDZK0O3MP0v3bYqoBz5v_FEv4GzQBQh6OcUZlTPBCAA&amp;amp;state=option-dotnet&amp;amp;session_state=3f94d9b1-dc34-462e-b3bb-ae6809886284&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.microsoft.com/en-us/graph/quick-start?code=0.AVQAEz2_Sq4IakOXzpaEyj9NtUlfR1jC_qZOg9x1EEvAbPNUAHw.AQABAAIAAAD--DLA3VO7QrddgJg7Wevrww8dTl89myJ3Qsx8M0AHCDPQbypu0fE4OGi5i39eynsVUzXoP2wosF2vF-H7Ua6Jp2amJNno3hKOLxjruY3OUzFNKknJmPAaHHeTZMK6gO2SmIjAcYwuOIufX37m6zQa8Pa8JfAJTcONlCClxPsFHZbQrvOI1nHMB8Nh6Ri7SpgDJ8dkLet5uS_MqjLvFUS_CN2NRUEKetAiT6yfG3vh21kaJF-7gEI67qYfiKgw3-OvKffbT_ug0hvKR7lUF8HJRT-7VxC0oe-MeUnj82TitssQ6oY6VCqSCEHpItKtcK0s4IDc0_xm4w0qEAPncZGFuqsSWBUr7cXQ-Sn_WRjKCp1n2zyHu7h5egG9nesmB7FrWVE-_lc7GaM7BAjklwYQ7PkGMqYgH28tjf9u0bfSKIGD7bNJbYRdaeqwM2Inj0zO8VQiKP7D4f69Y7ygukaFsjAG00l92h9AUaXDb9Pn0W93WJGJ-FDZz_UnfoR0BEnveZt2h9Y0S17rJX7YxgVEo7yJl3oNijgBGb4ERCdx2uus8ZLbP2ln-FTO3OY4cPXouNDZK0O3MP0v3bYqoBz5v_FEv4GzQBQh6OcUZlTPBCAA&amp;amp;state=option-dotnet&amp;amp;session_state=3f94d9b1-dc34-462e-b3bb-ae6809886284&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;Quick Start - Microsoft Graph&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Your session has expired. Please sign-in again to continue. Unfortunately any unsaved changes will be lost.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1026&quot; data-origin-height=&quot;873&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNYUAd/btrAwDW2oBb/nksWd0jLSQNWyXJJrI3E00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNYUAd/btrAwDW2oBb/nksWd0jLSQNWyXJJrI3E00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNYUAd/btrAwDW2oBb/nksWd0jLSQNWyXJJrI3E00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNYUAd%2FbtrAwDW2oBb%2FnksWd0jLSQNWyXJJrI3E00%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;1026&quot; height=&quot;873&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;873&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;teams의 캘린더를 읽어오는 graph API 자습서이다.&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;자동으로 앱을 만들어주고 해당 client id 와 AppSecret을 자동 주입하여 앱이 구동되도록 되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코드를 수정하여 캘린더를 조회할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1341&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCJ9YK/btrAx6Ea4hm/fbFfxvjUVLshzLPj4PRpLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCJ9YK/btrAx6Ea4hm/fbFfxvjUVLshzLPj4PRpLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCJ9YK/btrAx6Ea4hm/fbFfxvjUVLshzLPj4PRpLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCJ9YK%2FbtrAx6Ea4hm%2FfbFfxvjUVLshzLPj4PRpLk%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;1341&quot; height=&quot;373&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;373&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;</description>
      <category>ASP.NET MVC</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/85</guid>
      <comments>https://jo-coder.tistory.com/85#entry85comment</comments>
      <pubDate>Tue, 26 Apr 2022 17:42:04 +0900</pubDate>
    </item>
    <item>
      <title>MSSQL PROCEDURE 페이징에 유용하게 쓰이는 OFFSET,FETCH</title>
      <link>https://jo-coder.tistory.com/84</link>
      <description>&lt;pre id=&quot;code_1650894215846&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER PROCEDURE [dbo].[USP_GET_BOARD]
	@CURRENT AS int,
	@ROW AS int
AS
BEGIN
	SELECT 
		* 
	FROM [dbo].[User] 
	order by [Num] desc
	OFFSET (@CURRENT-1) *@ROW ROWS
	FETCH NEXT @ROW ROWS ONLY
END&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;order by 절은 필수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;ORDER BY를 통해 정렬 기준을 정한 뒤&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;OFFSET을 통해 건너 뛸 행의 수를 먼저 설정하고&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;FETCH NEXT 에서 몇 개의 행을 가져올 지 결정하게 됩니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;current 매개변수에 현재 페이지와&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;row 매개변수에 페이지에 나타낼 수 를 넣는다 생각하면&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;1페이지에 0개의 행수를 띄어넘어 10개를 보여줍니다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2페이지에 10개의 행수를 띄어넘어 10개를 보여줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3페이지에 10개의 행수를 띄어넘어 10개를 보여줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>MSSQL, SSMS</category>
      <category>fetch next</category>
      <category>MSSQL</category>
      <category>OFFSET</category>
      <category>PROCEDURE</category>
      <category>페이징</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/84</guid>
      <comments>https://jo-coder.tistory.com/84#entry84comment</comments>
      <pubDate>Mon, 25 Apr 2022 22:52:42 +0900</pubDate>
    </item>
    <item>
      <title>asp.net 게시판 만들기(MS 아이디로 로그인하기)</title>
      <link>https://jo-coder.tistory.com/83</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/active-directory/develop/tutorial-v2-asp-webapp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/ko-kr/azure/active-directory/develop/tutorial-v2-asp-webapp&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1650893659981&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;자습서: 인증을 위해 Microsoft ID 플랫폼을 사용하는 ASP.NET 웹앱 만들기 - Microsoft identity platform&quot; data-og-description=&quot;이 자습서에서는 Microsoft ID 플랫폼과 OWIN 미들웨어를 사용하여 사용자 로그인을 사용하도록 설정하는 ASP.NET 웹 애플리케이션을 빌드합니다.&quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/azure/active-directory/develop/tutorial-v2-asp-webapp&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/azure/active-directory/develop/tutorial-v2-asp-webapp&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/95HXq/hyN9TFk32B/vveLLomvk7VaVaRDn9znh0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/RdtY1/hyObse4uVt/y034nHKPyguvgIrbhpXYn0/img.png?width=482&amp;amp;height=292&amp;amp;face=0_0_482_292&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/active-directory/develop/tutorial-v2-asp-webapp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/azure/active-directory/develop/tutorial-v2-asp-webapp&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/95HXq/hyN9TFk32B/vveLLomvk7VaVaRDn9znh0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/RdtY1/hyObse4uVt/y034nHKPyguvgIrbhpXYn0/img.png?width=482&amp;amp;height=292&amp;amp;face=0_0_482_292');&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;자습서: 인증을 위해 Microsoft ID 플랫폼을 사용하는 ASP.NET 웹앱 만들기 - Microsoft identity platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 자습서에서는 Microsoft ID 플랫폼과 OWIN 미들웨어를 사용하여 사용자 로그인을 사용하도록 설정하는 ASP.NET 웹 애플리케이션을 빌드합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;이 자습서에서는 OWIN(Open Web Interface for .NET) 미들웨어 및 Microsoft ID 플랫폼을 사용하여 사용자를 로그인하는 ASP.NET MVC 웹앱을 빌드합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;회사 내부 코드로 변경되어 코드 자체를 올리기는 힘들지만 게시판 연습 프로젝트에 로그인을 추가하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;이 자습서는 엄청 자세하고 쉽게 따라하기만 하면 되도록 만들어져있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #171717;&quot;&gt;누구나 MS로 로그인/로그아웃 기능을 만들 수 있을 것이다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>ASP.NET MVC</category>
      <category>asp.net</category>
      <category>asp.net MS로그인</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/83</guid>
      <comments>https://jo-coder.tistory.com/83#entry83comment</comments>
      <pubDate>Mon, 25 Apr 2022 22:38:52 +0900</pubDate>
    </item>
    <item>
      <title>Controller와 View의 데이터 전달에 대하여</title>
      <link>https://jo-coder.tistory.com/82</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;ViewBag을 이용한 전달&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다이나믹(Dynamic) 오브젝트로 되어 있고 자동으로 변수형을 유추하기 때문에 사용 시 형 변환이 필요 없습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1650460745443&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public ActionResult Index()
        {
            ViewBag.userName = &quot;조동연&quot;;
 
            return View();
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650460784013&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;div&amp;gt;
        이름 : @ViewBag.userName &amp;lt;br /&amp;gt;
    &amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;List에 데이터를 담고 viewbag으로 view단으로 던지는 것도 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1650461293406&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public List&amp;lt;string&amp;gt; TestList()
{
    List&amp;lt;string&amp;gt; Student = new List&amp;lt;string&amp;gt;();
    Student.Add(&quot;Jignesh&quot;);
    Student.Add(&quot;Tejas&quot;);
    Student.Add(&quot;Rakesh&quot;);
 
    return Student;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1650461303066&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ViewBag.Student = this.TestList();&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1650461327608&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@foreach (var student in ViewBag.Student)
{
    &amp;lt;li&amp;gt;@student&amp;lt;/li&amp;gt;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #373a3c;&quot;&gt;ViewData를 이용한 전달&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딕셔너리(Dictionary) 콜랙션으로 되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뷰백에 비해 속도가 빠릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값(Value)이 오브젝트로 나오기 때문에 형 변환을 해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #373a3c;&quot;&gt;위의 TestList 메서드를 사용할 때&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1650461598103&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ViewData[&quot;Student&quot;] = this.TestList();&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1650461633220&quot; class=&quot;stata&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@foreach (var student in ViewData[&quot;Student&quot;] as List&amp;lt;string&amp;gt;)
{
    &amp;lt;li&amp;gt;@student&amp;lt;/li&amp;gt;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DATASET 클래스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DataSet 클래스는 클라이언트 메모리 상에 존재하는 테이블들을 가지며, 서버와의 연결을 유지하지 않는다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DataSet 클래스는 개발자가 직접 모든 테이블 구조 만들고 데이터 삽입 등을 할 수 있으나, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;DataAdapter (예: SqlDataAdapter)&lt;span style=&quot;color: #000000;&quot;&gt;를 이용하여 데이터를 서버로부터 가져와 메모리상의 DataSet에 할당 후 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650462443764&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public ActionResult Index()
        {

            DataSet ds = new DataSet();
            ds = User_DAL.Select_User();

            return View(ds);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1650462492194&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static DataSet Select_User()
        {
            con.Open();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;

            cmd.CommandText = string.Format(&quot;SELECT [Num],[Title],[Name],[Date] FROM [TEST_PROFILE].[dbo].[USER] order by [Num] desc&quot;);

            cmd.CommandType = CommandType.Text;
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            DataSet ds = new DataSet();
            da.Fill(ds, &quot;[TEST_PROFILE].[dbo].[USER]&quot;);
            con.Close();

            return ds;
        }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1650462909543&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;tbody&amp;gt;
        @foreach (DataRow row in Model.Tables[&quot;[TEST_PROFILE].[dbo].[USER]&quot;].Rows)
        {
        &amp;lt;tr&amp;gt;
            &amp;lt;th&amp;gt;@(row[&quot;Num&quot;])&amp;lt;/th&amp;gt;
            &amp;lt;th&amp;gt;@(row[&quot;Title&quot;])&amp;lt;/th&amp;gt;
            &amp;lt;th&amp;gt;@(row[&quot;Name&quot;])&amp;lt;/th&amp;gt;
            &amp;lt;th&amp;gt;@(row[&quot;Date&quot;])&amp;lt;/th&amp;gt;
        &amp;lt;/tr&amp;gt;
        }
    &amp;lt;/tbody&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;ActionLink&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #066de2;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0a9989;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #df5000;&quot;&gt;&quot;/Home/LoginView?str=a태그&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&amp;gt;링크&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #066de2;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;a 태그와 같이 동작하는 actionlink&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1650463411883&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Html.ActionLink(&quot;링크&quot;, &quot;LoginView&quot;, &quot;Home&quot;)

@Html.ActionLink(&quot;링크&quot;, &quot;LoginView&quot;, new { id = 1 })&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;RedirectToAction 메소드&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f1f1f1; color: #000000;&quot;&gt;HTML을 랜더링 하는 대신, 다른 액션 메서드를 호출할 때 사용된다.&amp;nbsp;&lt;/span&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;h2 data-ke-size=&quot;size26&quot;&gt;js&amp;nbsp; window.location.href&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;javascript로 ajax통신이 아닌 리다이렉트로 url을 이동시켜야할 때 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자값 (ex id)을 url에 넣어 게시물 상세보기가 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1650891679050&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.location.href = &quot;https://localhost:44334&quot; + &quot;/Home/About/&quot; + id;&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;h2 data-ke-size=&quot;size26&quot;&gt;html form태그&amp;nbsp;&lt;/h2&gt;
&lt;pre id=&quot;code_1650893208089&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;form method=&quot;post&quot;  action =&quot;/Home/Insert&quot;&amp;gt;
	&amp;lt;input type=&quot;text&quot; name=&quot;Title&quot; placeholder=&quot;글 제목&quot;&amp;gt;
&amp;lt;/form&amp;gt;

&amp;lt;input type=&quot;submit&quot; value=&quot;글쓰기&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;form태그로 식별가능한 name값을 넣고 input type=submit으로 서버에 전송한다&lt;/p&gt;
&lt;pre id=&quot;code_1650893257756&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public ActionResult Insert(User user)
        {
            string title = user.Title;
            dbSystem.Insert_User(title);

            return RedirectToAction(&quot;Index&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;&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;하나의 form태그의 submit 두개 (자바스크립트로 분기한다.)&lt;/p&gt;
&lt;pre id=&quot;code_1650893413144&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;button&quot; value=&quot;글수정&quot; onclick='return info_chk2(this.form);'&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1650893432073&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function info_chk2(frm) {
    frm.action = '/Home/Update';
    frm.submit(); return true;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ASP.NET MVC</category>
      <category>ActionLink</category>
      <category>ASP.NET MVC</category>
      <category>Dataset</category>
      <category>viewbag</category>
      <category>viewdata</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/82</guid>
      <comments>https://jo-coder.tistory.com/82#entry82comment</comments>
      <pubDate>Wed, 20 Apr 2022 23:10:51 +0900</pubDate>
    </item>
    <item>
      <title>asp.net 게시판 만들기(paging)(페이징 처리)</title>
      <link>https://jo-coder.tistory.com/81</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJCFQ6/btrzQoUmeEy/jZEiCMk3E1Izug4jhqdLH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJCFQ6/btrzQoUmeEy/jZEiCMk3E1Izug4jhqdLH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJCFQ6/btrzQoUmeEy/jZEiCMk3E1Izug4jhqdLH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJCFQ6%2FbtrzQoUmeEy%2FjZEiCMk3E1Izug4jhqdLH0%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;553&quot; height=&quot;193&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;193&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; 기본 CRUD 게시판에 이어 페이징을 해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a href=&quot;https://mchch.tistory.com/140&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mchch.tistory.com/140&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;javascript, jquery를 사용, ajax통신을 태울것이다.&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;index.html&lt;/p&gt;
&lt;pre id=&quot;code_1650377677271&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;table form-group&quot;&amp;gt;
    &amp;lt;table class=&quot;table&quot;&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;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 id=&quot;dataTableBody&quot;&amp;gt;

        &amp;lt;/tbody&amp;gt;
    &amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;!-- 페이징:S --&amp;gt;
&amp;lt;ul id=&quot;pagingul&quot;&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;!-- 페이징:E --&amp;gt;


&amp;lt;script src=&quot;~/Scripts/BoardList.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게시물을 받아올 tbody와 페이징을 표시할 ul을 만들어준다.&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;BoardList.js&lt;/p&gt;
&lt;pre id=&quot;code_1650377929201&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let totalData; //총 데이터 수
let dataPerPage; //한 페이지에 나타낼 글 수
let pageCount = 5; //페이징에 나타낼 페이지 수
let globalCurrentPage = 1; //현재 페이지
var globalData; //controller에서 가져온 data 전역변수

$(document).ready(function () {

	dataPerPage = 5;

	var Id = 1

	var param = { Id: Id };

    ajaxPost(&quot;/Home/GetBoardAjax&quot;, param, function (data) {

        totalData = data.length;
        globalData = data;


		//글 목록 표시 호출 (테이블 생성)
        displayData(1, dataPerPage, data);

		//페이징 표시 호출
		paging(totalData, dataPerPage, pageCount, 1);

    });
});

	
function paging(totalData, dataPerPage, pageCount, currentPage) {

    totalPage = Math.ceil(totalData / dataPerPage); //총 페이지 수

    if (totalPage &amp;lt; pageCount) {
        pageCount = totalPage;
    }

    let pageGroup = Math.ceil(currentPage / pageCount); // 페이지 그룹
    let last = pageGroup * pageCount; //화면에 보여질 마지막 페이지 번호

    if (last &amp;gt; totalPage) {
        last = totalPage;
    }

    let first = last - (pageCount - 1); //화면에 보여질 첫번째 페이지 번호
    let next = last + 1;
    let prev = first - 1;

    let pageHtml = &quot;&quot;;

    if (prev &amp;gt; 0) {
        pageHtml += &quot;&amp;lt;li&amp;gt;&amp;lt;a href='#' id='prev'&amp;gt; 이전 &amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&quot;;
    }

    //페이징 번호 표시 
    for (var i = first; i &amp;lt;= last; i++) {
        if (currentPage == i) {
            pageHtml +=
                &quot;&amp;lt;li class='on'&amp;gt;&amp;lt;a href='#' id='&quot; + i + &quot;'&amp;gt;&quot; + i + &quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&quot;;
        } else {
            pageHtml += &quot;&amp;lt;li&amp;gt;&amp;lt;a href='#' id='&quot; + i + &quot;'&amp;gt;&quot; + i + &quot;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&quot;;
        }
    }

    if (last &amp;lt; totalPage) {
        pageHtml += &quot;&amp;lt;li&amp;gt;&amp;lt;a href='#' id='next'&amp;gt; 다음 &amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&quot;;
    }

    $(&quot;#pagingul&quot;).html(pageHtml);
    let displayCount = &quot;&quot;;
    displayCount = &quot;현재 1 - &quot; + totalPage + &quot; 페이지 / &quot; + totalData + &quot;건&quot;;
    $(&quot;#displayCount&quot;).text(displayCount);


    //페이징 번호 클릭 이벤트 
    $(&quot;#pagingul li a&quot;).click(function () {
        globalData

        let $id = $(this).attr(&quot;id&quot;);
        selectedPage = $(this).text();

        if ($id == &quot;next&quot;) selectedPage = next;
        if ($id == &quot;prev&quot;) selectedPage = prev;

        //전역변수에 선택한 페이지 번호를 담는다...
        globalCurrentPage = selectedPage;
        //페이징 표시 재호출
        paging(totalData, dataPerPage, pageCount, selectedPage);
        //글 목록 표시 재호출
        displayData(selectedPage, dataPerPage, globalData);
    });
}


//현재 페이지(currentPage)와 페이지당 글 개수(dataPerPage) 반영
function displayData(currentPage, dataPerPage, data) {
    let chartHtml = &quot;&quot;;

    //Number로 변환하지 않으면 아래에서 +를 할 경우 스트링 결합이 되어버림.. 
    currentPage = Number(currentPage);
    dataPerPage = Number(dataPerPage);

    for (var i = (currentPage - 1) * dataPerPage; i &amp;lt; (currentPage - 1) * dataPerPage + dataPerPage; i++)
    {

        if (data[i] == undefined)
        {
            break;
        }
        
        chartHtml +=
            &quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&quot; +
            data[i].Num +
            &quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&quot; +
            data[i].Title+
            &quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&quot; +
            data[i].Name +
            &quot;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&quot; +
            data[i].Date +
            &quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&quot;;
    }
    $(&quot;#dataTableBody&quot;).empty();
    $(&quot;#dataTableBody&quot;).append(chartHtml);
}&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;param값을 1로 줬는데 이유 없습니다 ...ㅎ&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임의로 넣어놓은것이고 인자값이 필요하면 맞게 넣어서 사용하면 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HomeController.cs&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650378325632&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public JsonResult GetBoardAjax()
        {

            List&amp;lt;User&amp;gt; result = dbSystem.GetBoard();

            return Json(result);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;generic list에 select된 게시물 정보를 담아 json return 해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 dbSystem은 수정된 코드이니 전 게시물을 참고해 select해오시면 됩니다.&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;Site.css&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650378578306&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ul {
    text-align: center;
    display: inline-block;
    
    border-right: 0;
    list-style: none;
}
ul li {
    text-align: center;
    float: left;
}

ul li a {
    display: block;
    font-size: 14px;
    padding: 9px 12px;
    box-sizing: border-box;
}

ul li.on {
    background: #eda712;
}

ul li.on a {
    color: #fff;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ASP.NET MVC</category>
      <category>asp.net 게시판</category>
      <category>asp.net 게시판 페이징</category>
      <category>javascript</category>
      <category>paging</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/81</guid>
      <comments>https://jo-coder.tistory.com/81#entry81comment</comments>
      <pubDate>Tue, 19 Apr 2022 23:31:32 +0900</pubDate>
    </item>
    <item>
      <title>asp.net 게시판 만들기(CRUD) (MSSQL - DB연결) (SELECT)</title>
      <link>https://jo-coder.tistory.com/80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개요 : 처음으로 c# asp.net을 써야할 일이 생겨서 맛보기로 CRUD 게시판을 만들어보았다.&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;의의 : 그러나 점차 기능을 붙여 발전된 형태로 만들며 연습할 것이고 나와 같이 db연결도 못하는 분에게 약간의 도움이라도 되었으면 하는 마음&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;특징 : 회사 서버로 db연결함 (인터넷엔 로컬db로 연결하는 글이 대부분이라 설정값 찾는데 헤맸다...)&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;툴 : visualstudio2022 , ssms&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;게시판 미리보기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;933&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEqnJ7/btrzv4hD50X/ggVRKcl42rES096Qo2pmek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEqnJ7/btrzv4hD50X/ggVRKcl42rES096Qo2pmek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEqnJ7/btrzv4hD50X/ggVRKcl42rES096Qo2pmek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEqnJ7%2Fbtrzv4hD50X%2FggVRKcl42rES096Qo2pmek%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;1920&quot; height=&quot;933&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;933&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uRohy/btrzxa2q8di/97i9s2ZU0RF1bwglZcrrW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uRohy/btrzxa2q8di/97i9s2ZU0RF1bwglZcrrW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uRohy/btrzxa2q8di/97i9s2ZU0RF1bwglZcrrW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuRohy%2Fbtrzxa2q8di%2F97i9s2ZU0RF1bwglZcrrW1%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;1920&quot; height=&quot;926&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 asp.net web application 실행&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;978&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVvb4b/btrzvSA5WEW/BCger78ANMUGunXKSpAGtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVvb4b/btrzvSA5WEW/BCger78ANMUGunXKSpAGtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVvb4b/btrzvSA5WEW/BCger78ANMUGunXKSpAGtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVvb4b%2FbtrzvSA5WEW%2FBCger78ANMUGunXKSpAGtk%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;978&quot; height=&quot;600&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;600&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;mvc패턴으로 생성&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;1014&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnPRFk/btrzx9aWYF0/3FH05KJ4H4cnp3a2kXJ9L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnPRFk/btrzx9aWYF0/3FH05KJ4H4cnp3a2kXJ9L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnPRFk/btrzx9aWYF0/3FH05KJ4H4cnp3a2kXJ9L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnPRFk%2Fbtrzx9aWYF0%2F3FH05KJ4H4cnp3a2kXJ9L0%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;1014&quot; height=&quot;687&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;687&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB연결&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;1. webConfig에서 connectionStrings으로 db연결&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;2. cs 파일에서 using문을 사용하여 db연결 (이건 나중에 코드에서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 1번&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650072759241&quot; class=&quot;xml&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
    
    &amp;lt;connectionStrings&amp;gt;
		&amp;lt;add name=&quot;UserDB&quot; connectionString=&quot;Data Source=ip 작성,port 작성; 
          Initial Catalog=TEST_PROFILE;User ID=sa;Password=123456789&quot;
		  providerName=&quot;System.Data.SqlClient&quot; /&amp;gt;  
	&amp;lt;/connectionStrings&amp;gt;
		
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Connection String 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- name : 코드에서 연결될 이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Data Source : 서버명 &lt;br /&gt;- Initial Catalog : database 이름 &lt;br /&gt;- Integrated Security=SSPI&amp;nbsp; : db 서버 접근 인증이 windows 인증 방식인 경우(난 회사 db라 안씀)&lt;br /&gt;- User ID=yourid;Password=yourpass ; db 서버 접근 인증이 SQL 인증 방식인 경우 &lt;br /&gt;출처: &lt;a href=&quot;https://freeprog.tistory.com/221&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://freeprog.tistory.com/221&lt;/a&gt;&amp;nbsp;[취미로&amp;nbsp;하는&amp;nbsp;프로그래밍&amp;nbsp;!!!] &lt;br /&gt;&lt;br /&gt;SqlDataSource.ProviderName&amp;nbsp;속성 &lt;br /&gt;System.Data.SqlClient&amp;nbsp;공급자는&amp;nbsp;기본.NET&amp;nbsp;Framework&amp;nbsp;Data&amp;nbsp;Provider&amp;nbsp;for&amp;nbsp;SQL&amp;nbsp;Server입니다. &lt;br /&gt;Syste&lt;a href=&quot;http://m.Data.OleDb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;m.Data.OleDb&lt;/a&gt;&amp;nbsp;공급자는.NET&amp;nbsp;Framework&amp;nbsp;Data&amp;nbsp;Provider&amp;nbsp;for&amp;nbsp;OLE&amp;nbsp;DB입니다. &lt;br /&gt;Syste&lt;a href=&quot;http://m.Data.Odbc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;m.Data.Odbc&lt;/a&gt;&amp;nbsp;공급자는.NET&amp;nbsp;Framework&amp;nbsp;Data&amp;nbsp;Provider&amp;nbsp;for&amp;nbsp;ODBC입니다. &lt;br /&gt;System.Data.OracleClient &lt;a href=&quot;http://공급자는.NET&quot;&gt;공급자는.NET&lt;/a&gt; Framework Data Provider for Oracle입니다. &lt;br /&gt;출처 : &lt;a href=&quot;https://docs.microsoft.com/ko-kr/dotnet/api/system.web.ui.webcontrols.sqldatasource.providername?view=netframework-4.8&quot;&gt;https://docs.microsoft.com/ko-kr/dotnet/api/system.web.ui.webcontrols.sqldatasource.providername?view=netframework-4.8&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;pre id=&quot;code_1650073339962&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;namespace WebApplication9.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {

            DataSet ds = new DataSet();
            ds = User_DAL.Select_User();

			return View(ds);
        }
     }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RouteConfig.cs에 설정값인 시작 controller와 action명이 명시되어있는 곳 부터 시작하여&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DataSet에 게시판 글을 table data를 넣어 view로 리턴할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처:&lt;a href=&quot;https://www.soowave.com/entry/ASPNET-MVC-3-MSSQL-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-INSERT&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.soowave.com/entry/ASPNET-MVC-3-MSSQL-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-INSERT&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;264&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmb7kj/btrzve5IFFP/lR9iB8T5Y2nxPXLZwQBG90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmb7kj/btrzve5IFFP/lR9iB8T5Y2nxPXLZwQBG90/img.png&quot; data-alt=&quot;User_DAL..cs 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmb7kj/btrzve5IFFP/lR9iB8T5Y2nxPXLZwQBG90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmb7kj%2Fbtrzve5IFFP%2FlR9iB8T5Y2nxPXLZwQBG90%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;264&quot; height=&quot;82&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;User_DAL..cs 생성&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;pre id=&quot;code_1650074077980&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;namespace WebApplication9.DAL
{
	public class User_DAL

    {

        public static SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[&quot;UserDB&quot;].ToString());

		public static DataSet Select_User()
        {
            con.Open();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;

            cmd.CommandText = string.Format(&quot;SELECT [Num],[Title],[Name],[Date] FROM [TEST_PROFILE].[dbo].[USER] order by [Num] desc&quot;);

            cmd.CommandType = CommandType.Text;
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;

            DataSet ds = new DataSet();
            da.Fill(ds, &quot;[TEST_PROFILE].[dbo].[USER]&quot;);
            con.Close();

            return ds;
        }
     }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SqlConnection으로 webconfig에 설정해놓은 name인 UserDB 매핑해주기&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;pre id=&quot;code_1650074747911&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@model System.Data.DataSet
@using System.Data

@{
    ViewBag.Title = &quot;Home Page&quot;;
}

&amp;lt;br /&amp;gt;
&amp;lt;table class=&quot;table&quot;&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;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;
        @foreach (DataRow row in Model.Tables[&quot;[TEST_PROFILE].[dbo].[USER]&quot;].Rows)
        {
        &amp;lt;tr&amp;gt;
            &amp;lt;th&amp;gt;@(row[&quot;Num&quot;])&amp;lt;/th&amp;gt;
            &amp;lt;th&amp;gt;@Html.ActionLink(&quot;&quot; + row[&quot;Title&quot;], &quot;About&quot;, new { id = row[&quot;Num&quot;] })
            &amp;lt;th&amp;gt;@(row[&quot;Name&quot;])&amp;lt;/th&amp;gt;
            &amp;lt;th&amp;gt;@(row[&quot;Date&quot;])&amp;lt;/th&amp;gt;
        &amp;lt;/tr&amp;gt;
        }
    &amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;hr /&amp;gt;

&amp;lt;button class=&quot;btn btn-default&quot;&amp;gt;@Html.ActionLink(&quot;글 쓰기&quot;, &quot;About&quot;, &quot;Home&quot;)&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;view단 게시판 간단하게 select 완료&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;style6&quot; /&gt;
&lt;pre id=&quot;code_1650075098992&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string strConn = &quot;Data Source=ip,port;Initial Catalog=TEST_PROFILE;User ID=id;Password=12345679;&quot;;

string sql = &quot;select * from [TEST_PROFILE].[dbo].[USER]&quot;;

 using (SqlConnection conn = new SqlConnection(strConn))
 using (SqlCommand cmd = new SqlCommand(sql, conn))
 {
     try
     {
         conn.Open();

         using (SqlDataReader rdr = cmd.ExecuteReader())
         {
             while (rdr.Read())
             {
                 String num = rdr[&quot;Num&quot;] as string;
                 String title = rdr[1] as String;
                 String name = rdr[2] as String;
                 String date = rdr[3] as String;
                 Console.WriteLine(&quot; {0}, {1}, {2}, {3}&quot;, name, title, name, date);
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(&quot; ============= exception ===============&quot;);
         Console.WriteLine(ex.Message);
     }

 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 using을 사용하여 바로 db연결하여 사용도 가능&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 호출 할 때 마다 저렇게 db 정보를 적는것보다 web.config에서 관리하는게 당연히 더 나은 방식으로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처&amp;nbsp;:&amp;nbsp;&lt;a href=&quot;https://freeprog.tistory.com/221&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://freeprog.tistory.com/221&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;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;다음 crud는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/jodongyeon/boardEx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/jodongyeon/boardEx&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;있습니당.&lt;/p&gt;</description>
      <category>ASP.NET MVC</category>
      <category>ASP.NET MVC</category>
      <category>asp.net 게시판</category>
      <category>mssql 연결</category>
      <category>ssms 연결</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/80</guid>
      <comments>https://jo-coder.tistory.com/80#entry80comment</comments>
      <pubDate>Sat, 16 Apr 2022 11:15:47 +0900</pubDate>
    </item>
    <item>
      <title>자주 사용하는 visual studio 단축키</title>
      <link>https://jo-coder.tistory.com/79</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;솔루션 탐색기 열기 : ctrl + alt + L&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;자동완성 : ctrl + space&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;자동 정렬 : ctrl + K + F&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;아래 라인으로 복사 : ctrl + D&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;라인 삭제 : ctrl + X&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;열 모드 드래그 : alt + 드래그&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;주석 처리 : ctrl +K + C&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;주석 해제 : ctrl + K + U&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;소문자 변환 : ctrl + U&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;대문자 변환 : ctrl + shift + U&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;라인 이동 : ctrl + G&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;괄호 끝으로 이동 : ctrl + ]&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;줄 상하로 이동 alt + 방향키&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;뒤로 탐색 : ctrl + + -&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;문자 찾기 : ctrl + F&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;문자 바꾸기 : ctrl + H&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;전체 문자 찾기 : ctrl +shift + F&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;전체 문자 바꾸기 : ctrl + shift + H&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;함수,헤더파일 등 자동 완성 : alt + enter / ctrl + .&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;hr contenteditable=&quot;false&quot; 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;디버깅, 실행 단축키&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디버깅 : F5&amp;nbsp; (디버깅 중에 F5는 다음 breakPoint까지 넘어감) (빠르게 넘길 때 유용)&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;디버깅 중지 : shift + F5&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;실행(디버깅x) : ctrl + F5&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;break point : F9&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f;&quot;&gt;Ctrl + Shift + F9 : 모든 break point삭제.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디버깅 함수 안탐 (한줄씩): F10&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;디버깅 함수 태움 (함수안으로 들어감): F11&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;디버깅 함수 빠져나오기 : shift + F11&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;디버깅 조사식 확인하기 : shift + F9&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;</description>
      <category>visual studio</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/79</guid>
      <comments>https://jo-coder.tistory.com/79#entry79comment</comments>
      <pubDate>Tue, 12 Apr 2022 10:49:00 +0900</pubDate>
    </item>
    <item>
      <title>JSON</title>
      <link>https://jo-coder.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JSON이란? &lt;br /&gt;JSON은&amp;nbsp;JavaScript&amp;nbsp;Object&amp;nbsp;Notation의&amp;nbsp;약자로,&amp;nbsp;브라우저와&amp;nbsp;서버사이에서&amp;nbsp;오고가는&amp;nbsp;데이터의&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;&lt;br /&gt;JSON.stringify(value,&amp;nbsp;replacer,&amp;nbsp;space) &lt;br /&gt;&lt;br /&gt;value(필수):&amp;nbsp;JSON&amp;nbsp;문자열로&amp;nbsp;변환할&amp;nbsp;값이다.(배열,&amp;nbsp;객체,&amp;nbsp;또는&amp;nbsp;숫자,&amp;nbsp;문자&amp;nbsp;등이&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있다.) &lt;br /&gt;&lt;br /&gt;replacer(선택):&amp;nbsp;함수&amp;nbsp;또는&amp;nbsp;배열이&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;이&amp;nbsp;값이&amp;nbsp;null&amp;nbsp;이거나&amp;nbsp;제공되지&amp;nbsp;않으면,&amp;nbsp;객체의&amp;nbsp;모든&amp;nbsp;속성들이&amp;nbsp;JSON&amp;nbsp;문자열&amp;nbsp;결과에&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;&lt;br /&gt;나는&amp;nbsp;보통&amp;nbsp;프론트단에서&amp;nbsp;controller단으로&amp;nbsp;json데이터를&amp;nbsp;보낼&amp;nbsp;때&amp;nbsp;사용하는데&amp;nbsp; &lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;json&amp;nbsp;data를&amp;nbsp;포함하는&amp;nbsp;객체가&amp;nbsp;생성되었을&amp;nbsp;때&amp;nbsp; &lt;br /&gt;params['resultData']&amp;nbsp;=&amp;nbsp;JSON.stringify(jsonData); &lt;br /&gt;문자열로&amp;nbsp;만들어&amp;nbsp;객체에&amp;nbsp;넣어&amp;nbsp;controller로&amp;nbsp;보낸다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/78</guid>
      <comments>https://jo-coder.tistory.com/78#entry78comment</comments>
      <pubDate>Mon, 9 Aug 2021 17:11:12 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 배열(생성, 추가, 삭제)</title>
      <link>https://jo-coder.tistory.com/77</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;자바스크립트&amp;nbsp;배열&lt;/b&gt;&lt;/h4&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;배열이&amp;nbsp;다른&amp;nbsp;언어와&amp;nbsp;다른&amp;nbsp;점&amp;nbsp;2가지 &lt;br /&gt;1 배열 내부의 데이터 타입이 서로 다를 수 있다.&lt;br /&gt;2 배열의 크기는 동적으로 변경될 수 있다.&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열&amp;nbsp;생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;//&amp;nbsp;배열&amp;nbsp;생성&amp;nbsp;(빈&amp;nbsp;배열) &lt;br /&gt;var&amp;nbsp;arr&amp;nbsp;=&amp;nbsp;[];&amp;nbsp; &lt;br /&gt;혹은 &lt;br /&gt;var&amp;nbsp;arr&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Array();&amp;nbsp; &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;배열&amp;nbsp;생성&amp;nbsp;(초기&amp;nbsp;값&amp;nbsp;할당) &lt;br /&gt;var&amp;nbsp;arr&amp;nbsp;=&amp;nbsp;['zero',&amp;nbsp;'one',&amp;nbsp;'tow'];&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 추가&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Array.push(), Array.unshift(), Array.splice() &lt;br /&gt;&lt;br /&gt;arr.push('d');&amp;nbsp;//&amp;nbsp;배열의&amp;nbsp;끝에&amp;nbsp;요소를&amp;nbsp;추가 &lt;br /&gt;arr.unshift('d');&amp;nbsp;//&amp;nbsp;배열의&amp;nbsp;앞쪽에&amp;nbsp;요소를&amp;nbsp;추가 &lt;br /&gt;arr.splice(2,&amp;nbsp;0,&amp;nbsp;'d');&amp;nbsp;//&amp;nbsp;index&amp;nbsp;2&amp;nbsp;('c')의&amp;nbsp;위치에&amp;nbsp;요소를&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 삭제&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Array.pop(),&amp;nbsp;Array.shift(),&amp;nbsp;Array.splice()&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;arr.pop();&amp;nbsp;//&amp;nbsp;배열의&amp;nbsp;마지막&amp;nbsp;요소를&amp;nbsp;제거 &lt;br /&gt;var&amp;nbsp;popped&amp;nbsp;=&amp;nbsp;arr.pop();&amp;nbsp;//&amp;nbsp;제거한&amp;nbsp;요소를&amp;nbsp;반환&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있음 &lt;br /&gt;arr.shift();&amp;nbsp;//&amp;nbsp;배열의&amp;nbsp;첫번째&amp;nbsp;요소를&amp;nbsp;제거 &lt;br /&gt;var&amp;nbsp;shifted&amp;nbsp;=&amp;nbsp;arr.shift();&amp;nbsp;//&amp;nbsp;제거한&amp;nbsp;요소를&amp;nbsp;반환&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있음 &lt;br /&gt;arr.splice(1,&amp;nbsp;2);&amp;nbsp;//&amp;nbsp;index&amp;nbsp;1&amp;nbsp;부터&amp;nbsp;2개의&amp;nbsp;요소를&amp;nbsp;제거 &lt;br /&gt;removed&amp;nbsp;=&amp;nbsp;arr.splice(1,&amp;nbsp;2);&amp;nbsp;//&amp;nbsp;제거한&amp;nbsp;요소를&amp;nbsp;반환&amp;nbsp;받을&amp;nbsp;수&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;</description>
      <category>JavaScript</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/77</guid>
      <comments>https://jo-coder.tistory.com/77#entry77comment</comments>
      <pubDate>Mon, 9 Aug 2021 17:10:15 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 객체(생성, 접근, 삭제)</title>
      <link>https://jo-coder.tistory.com/76</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;자바스크립트&amp;nbsp;객체&lt;/b&gt;&lt;/h4&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;원시&amp;nbsp;타입을&amp;nbsp;제외한&amp;nbsp;모든&amp;nbsp;데이터&amp;nbsp;타입(객체,&amp;nbsp;함수,&amp;nbsp;배열,&amp;nbsp;정규표현식&amp;nbsp;등)은&amp;nbsp;객체다. &lt;br /&gt;객체는&amp;nbsp;여러가지&amp;nbsp;값을&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;함수도&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있다.&lt;/p&gt;
&lt;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;(둘다&amp;nbsp;프로퍼티라고&amp;nbsp;하기도&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;프로퍼티와&amp;nbsp;메서드들은&amp;nbsp;'키값'으로&amp;nbsp;구분된다.&lt;/p&gt;
&lt;pre id=&quot;code_1628495127463&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var object ={ key1: value1, key2: value2, ... }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 생성하는 법&lt;/b&gt;&lt;/h4&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;1.&amp;nbsp;중괄호&amp;nbsp;{&amp;nbsp;}&amp;nbsp;안에&amp;nbsp;key:value를&amp;nbsp;쉼표(,)로&amp;nbsp;구분하여&amp;nbsp;만든다.&lt;/p&gt;
&lt;pre id=&quot;code_1628495227830&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var myObj = { name: '조', age: 20, hello: function(){ 
	return `이름은 ${this.name}이고, 나이는 ${this.age}입니다.`; }
};
console.log(myObj); // { name: '조', age: 20, hello: [Function: hello] }&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;2.&amp;nbsp;new&amp;nbsp;연산자를&amp;nbsp;통해&amp;nbsp;Object객체의&amp;nbsp;생성자함수를&amp;nbsp;호출한다.&lt;/p&gt;
&lt;pre id=&quot;code_1628495273469&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var myObj = new Object(); 
myObj.name = '조'; 
myObj['age'] = 20; 
myObj.hello = function(){ 
	return `이름은 ${this.name}이고, 나이는 ${this.age}입니다.`; 
}; 
console.log(myObj); // { name: '조', age: 20, hello: [Function] }&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;3.&amp;nbsp;중괄호&amp;nbsp;{&amp;nbsp;}를&amp;nbsp;사용하여&amp;nbsp;빈&amp;nbsp;객체&amp;nbsp;생성&lt;/p&gt;
&lt;pre id=&quot;code_1628495394515&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var myObj = {};
myObj['name'] = '조';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 접근하는 법&lt;/b&gt;&lt;/h4&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;대괄호[ ] 사이에 키값을 '문자열'로 넣어 접근한다.&lt;/p&gt;
&lt;pre id=&quot;code_1628495518681&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;myObj.name; // '조' 
myObj.age; // 20 
myObj.hello(); // '이름은 조이고, 나이는 20입니다.'

myObj['name']; // '조'
myObj['age']; // 20
myObj['hello'](); // '이름은 조이고, 나이는 20입니다.'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 프로퍼티 생성하는 법&lt;/b&gt;&lt;/h4&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;]&amp;nbsp;사이에&amp;nbsp;키값을&amp;nbsp;'문자열'을&amp;nbsp;넣어&amp;nbsp;생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1628495596212&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;myObj.name1= '조1';
myObj.age1=21;
myObj.hello1 = function(){return 'hello1'};

myObj['name2'] = '조2';
myObj['age2']=  22;
myObj['hello2'] = function(){return 'hello2'};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 프로퍼티 삭제하는 법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;delete&amp;nbsp;연산자를&amp;nbsp;사용하여&amp;nbsp;객체의&amp;nbsp;프로퍼티나&amp;nbsp;메서드를&amp;nbsp;제거한다.&lt;/p&gt;
&lt;pre id=&quot;code_1628495645372&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;delete myObj.name1;
delete myObj.age1;
delete myObj.hello1;

delete myObj['name2'];
delete myObj['age2'];
delete myObj['hello2'];&lt;/code&gt;&lt;/pre&gt;</description>
      <category>JavaScript</category>
      <author>조동동고</author>
      <guid isPermaLink="true">https://jo-coder.tistory.com/76</guid>
      <comments>https://jo-coder.tistory.com/76#entry76comment</comments>
      <pubDate>Mon, 9 Aug 2021 16:55:17 +0900</pubDate>
    </item>
  </channel>
</rss>