<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>najiwon</title>
    <link>https://najiwon.tistory.com/</link>
    <description>개발자(가 되고 싶은)
느리더라도 꾸준히 </description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 16:48:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>najiwon</managingEditor>
    <image>
      <title>najiwon</title>
      <url>https://tistory1.daumcdn.net/tistory/6502349/attach/a6e8ff1256574be6b01f7eb20d6b130f</url>
      <link>https://najiwon.tistory.com</link>
    </image>
    <item>
      <title>[Python] 네이버 Geocoding API를 사용하여 주소를 좌표로 변환하기</title>
      <link>https://najiwon.tistory.com/114</link>
      <description>&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;486&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4rCQb/btsIYvPxjL7/sN0k0M2Sa3doDlzeK2IiM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4rCQb/btsIYvPxjL7/sN0k0M2Sa3doDlzeK2IiM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4rCQb/btsIYvPxjL7/sN0k0M2Sa3doDlzeK2IiM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4rCQb%2FbtsIYvPxjL7%2FsN0k0M2Sa3doDlzeK2IiM0%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;486&quot; height=&quot;144&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;144&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;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;사용 라이브러리&amp;nbsp;&lt;br /&gt;- requests&lt;br /&gt;- pandas&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.24.34.png&quot; data-origin-width=&quot;3338&quot; data-origin-height=&quot;1784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMpc8K/btsIWbei8cg/3BQzzaslrUPIHBOlkNRa11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMpc8K/btsIWbei8cg/3BQzzaslrUPIHBOlkNRa11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMpc8K/btsIWbei8cg/3BQzzaslrUPIHBOlkNRa11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMpc8K%2FbtsIWbei8cg%2F3BQzzaslrUPIHBOlkNRa11%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;3338&quot; height=&quot;1784&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.24.34.png&quot; data-origin-width=&quot;3338&quot; data-origin-height=&quot;1784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.37.19.png&quot; data-origin-width=&quot;3134&quot; data-origin-height=&quot;1158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7AH6U/btsIYwgyCH3/Xc69VDdKO4tIt3vylJpf0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7AH6U/btsIYwgyCH3/Xc69VDdKO4tIt3vylJpf0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7AH6U/btsIYwgyCH3/Xc69VDdKO4tIt3vylJpf0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7AH6U%2FbtsIYwgyCH3%2FXc69VDdKO4tIt3vylJpf0k%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;3134&quot; height=&quot;1158&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.37.19.png&quot; data-origin-width=&quot;3134&quot; data-origin-height=&quot;1158&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도에 공공데이터 포털에서 API로 받아온 장애인 구인 실시간 현황 데이터의 comAddr(회사주소)를 지도에 마커로 표시하기 위해 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;위도와 경도로&lt;span&gt; 변환하여 테이블에 저장해 보려고 한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;네이버 Geocoding API를 사용하여 주소를 좌표로 변환하는 방법이다.&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;01. 네이버 Geocoding API 키 발급받기&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;먼저, 네이버 클라우드 플랫폼에서 Geocoding API를 사용하기 위해 API 키를 발급받아야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.ncloud.com/&quot;&gt;네이버 클라우드 플랫폼&lt;/a&gt;에 접속하여 로그인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-27 오후 8.19.25.png&quot; data-origin-width=&quot;2346&quot; data-origin-height=&quot;904&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9XvaP/btsIWvcx65F/MYc8D4w38eNPfcPqSN7QU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9XvaP/btsIWvcx65F/MYc8D4w38eNPfcPqSN7QU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9XvaP/btsIWvcx65F/MYc8D4w38eNPfcPqSN7QU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9XvaP%2FbtsIWvcx65F%2FMYc8D4w38eNPfcPqSN7QU1%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;2346&quot; height=&quot;904&quot; data-filename=&quot;스크린샷 2024-07-27 오후 8.19.25.png&quot; data-origin-width=&quot;2346&quot; data-origin-height=&quot;904&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2. 콘솔에서 Application 서비스의 애플리케이션 등록 메뉴로 이동, 새 애플리케이션을 등록한고 Geocoding API 사용을 활성화한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.31.51.png&quot; data-origin-width=&quot;3136&quot; data-origin-height=&quot;1706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KcuNi/btsIYsFeJHw/TY78K7k1b0BjKVe1OeYink/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KcuNi/btsIYsFeJHw/TY78K7k1b0BjKVe1OeYink/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KcuNi/btsIYsFeJHw/TY78K7k1b0BjKVe1OeYink/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKcuNi%2FbtsIYsFeJHw%2FTY78K7k1b0BjKVe1OeYink%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;3136&quot; height=&quot;1706&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.31.51.png&quot; data-origin-width=&quot;3136&quot; data-origin-height=&quot;1706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.32.30.png&quot; data-origin-width=&quot;2576&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vEPrR/btsIW5qRu5v/KFeZvdFYkq4hkIkaASyLAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vEPrR/btsIW5qRu5v/KFeZvdFYkq4hkIkaASyLAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vEPrR/btsIW5qRu5v/KFeZvdFYkq4hkIkaASyLAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvEPrR%2FbtsIW5qRu5v%2FKFeZvdFYkq4hkIkaASyLAk%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;2576&quot; height=&quot;758&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.32.30.png&quot; data-origin-width=&quot;2576&quot; data-origin-height=&quot;758&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;3. 발급된 클라이언트 ID와 클라이언트 시크릿을 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-27 오후 8.21.39.png&quot; data-origin-width=&quot;2236&quot; data-origin-height=&quot;1518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzKgHY/btsIXZDyUFJ/XD85lZum5b2hZNAKn9Rkwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzKgHY/btsIXZDyUFJ/XD85lZum5b2hZNAKn9Rkwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzKgHY/btsIXZDyUFJ/XD85lZum5b2hZNAKn9Rkwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzKgHY%2FbtsIXZDyUFJ%2FXD85lZum5b2hZNAKn9Rkwk%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;2236&quot; height=&quot;1518&quot; data-filename=&quot;스크린샷 2024-07-27 오후 8.21.39.png&quot; data-origin-width=&quot;2236&quot; data-origin-height=&quot;1518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 API 키를 발급받았으니, 파이썬 코드에서 이를 사용하여 Geocoding API를 호출하는 방법을 알아보겠다.&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;02. 파이썬 코드로 주소를 좌표로 변환하기&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;먼저, HTTP 요청을 보내기 위해 requests 라이브러리를 설치한다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1723030559648&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install requests&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 Geocoding API를 사용하여 하나의 고정된 주소를 좌표로 변환하는 파이썬 코드를 작성해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1723030664186&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests

# 네이버 API 키 설정
client_id = 'YOUR_CLIENT_ID'  # 네이버 클라우드 플랫폼에서 발급받은 클라이언트 ID
client_secret = 'YOUR_CLIENT_SECRET'  # 네이버 클라우드 플랫폼에서 발급받은 클라이언트 시크릿

# 고정 문자열 주소
address = '충청북도 청주시 흥덕구 산단로 54 한국폴리텍대학 청주캠퍼스'

# 네이버 Geocoding API 호출 함수 정의
def geocode_address(address):
    url = f&quot;https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query={address}&quot;
    headers = {
        'X-NCP-APIGW-API-KEY-ID': client_id,
        'X-NCP-APIGW-API-KEY': client_secret
    }
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        if data['addresses']:
            location = data['addresses'][0]
            return location['y'], location['x']
        else:
            return None, None
    else:
        print(f&quot;Error {response.status_code}: {response.text}&quot;)
        return None, None

# 주소를 좌표로 변환
latitude, longitude = geocode_address(address)

# 결과 출력
if latitude and longitude:
    print(f&quot;주소: {address}&quot;)
    print(f&quot;위도: {latitude}&quot;)
    print(f&quot;경도: {longitude}&quot;)
else:
    print(&quot;좌표를 찾을 수 없습니다.&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;코드 설명&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;requests 라이브러리를 사용하여 네이버 Geocoding API를 호출&lt;/li&gt;
&lt;li&gt;네이버 클라우드 플랫폼에서 발급받은 클라이언트 ID와 클라이언트 시크릿을 설정&lt;/li&gt;
&lt;li&gt;변환할 고정 문자열 주소를 address 변수에 저장&lt;/li&gt;
&lt;li&gt;geocode_address 함수를 정의하여 주소를 입력받고, 네이버 Geocoding API를 호출하여 JSON 응답을 처리&lt;/li&gt;
&lt;li&gt;응답에서 위도(y)와 경도(x) 값을 추출하여 반환&lt;/li&gt;
&lt;li&gt;주소를 좌표로 변환한 후, 결과를 출력&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;03. 지도에서 결과 확인하기&lt;/h3&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.39.45.png&quot; data-origin-width=&quot;1878&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOCX4o/btsIXwhjBrO/663IhLkjJGUMWeix1aPXtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOCX4o/btsIXwhjBrO/663IhLkjJGUMWeix1aPXtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOCX4o/btsIXwhjBrO/663IhLkjJGUMWeix1aPXtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOCX4o%2FbtsIXwhjBrO%2F663IhLkjJGUMWeix1aPXtk%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;1878&quot; height=&quot;140&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.39.45.png&quot; data-origin-width=&quot;1878&quot; data-origin-height=&quot;140&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.41.31.png&quot; data-origin-width=&quot;3544&quot; data-origin-height=&quot;2070&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs4RRd/btsIWEf7C0Y/6gQXpgQeglbQ3pIbMS9PG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs4RRd/btsIWEf7C0Y/6gQXpgQeglbQ3pIbMS9PG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs4RRd/btsIWEf7C0Y/6gQXpgQeglbQ3pIbMS9PG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs4RRd%2FbtsIWEf7C0Y%2F6gQXpgQeglbQ3pIbMS9PG1%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;3544&quot; height=&quot;2070&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.41.31.png&quot; data-origin-width=&quot;3544&quot; data-origin-height=&quot;2070&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 data-ke-size=&quot;size23&quot;&gt;04. 데이터프레임의 주소를 한 번에 좌표로 변환하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위도와 경도가 잘 변환되는 것을 확인하였으니 이번에는 데이터프레임을 사용하여 여러 주소를 한 번에 좌표로 변환하여 위도, 경도 칼럼에 데이터를 추가해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1723031344538&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import requests

# 네이버 API 키 설정
client_id = 'YOUR_CLIENT_ID'  # 네이버 클라우드 플랫폼에서 발급받은 클라이언트 ID
client_secret = 'YOUR_CLIENT_SECRET'  # 네이버 클라우드 플랫폼에서 발급받은 클라이언트 시크릿

# 네이버 Geocoding API 호출 함수 정의
def geocode_address(address):
    url = f&quot;https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query={address}&quot;
    headers = {
        'X-NCP-APIGW-API-KEY-ID': client_id,
        'X-NCP-APIGW-API-KEY': client_secret
    }
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        if data['addresses']:
            location = data['addresses'][0]
            return location['y'], location['x']
        else:
            return None, None
    else:
        print(f&quot;Error {response.status_code}: {response.text}&quot;)
        return None, None

# 데이터프레임에 위도와 경도 컬럼 추가
df['latitude'], df['longitude'] = zip(*df['compAddr'].apply(geocode_address))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코드 설명&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;pandas와 requests 라이브러리를 import 한다.&lt;/li&gt;
&lt;li&gt;네이버 클라우드 플랫폼에서 발급받은 클라이언트 ID와 클라이언트 시크릿을 설정한다.&lt;/li&gt;
&lt;li&gt;geocode_address 함수를 정의하여 주소를 입력받고, 네이버 Geocoding API를 호출하여 JSON 응답을 처리한다.&lt;/li&gt;
&lt;li&gt;응답에서 위도(y)와 경도(x) 값을 추출하여 반환한다.&lt;/li&gt;
&lt;li&gt;데이터프레임의 comAddr 칼럼에 apply 메서드를 사용하여 각 주소에 대해 geocode_address 함수를 적용한다. 결과로 얻은 위도와 경도를 zip 함수로 풀어서 각각 latitude와 longitude 컬럼에 추가한다.&lt;/li&gt;
&lt;/ol&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.56.00.png&quot; data-origin-width=&quot;2448&quot; data-origin-height=&quot;1312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lj1jW/btsIWuxP0kT/O2lq2TK71mZIu5rY2DUunK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lj1jW/btsIWuxP0kT/O2lq2TK71mZIu5rY2DUunK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lj1jW/btsIWuxP0kT/O2lq2TK71mZIu5rY2DUunK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flj1jW%2FbtsIWuxP0kT%2FO2lq2TK71mZIu5rY2DUunK%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;2448&quot; height=&quot;1312&quot; data-filename=&quot;스크린샷 2024-08-07 오후 8.56.00.png&quot; data-origin-width=&quot;2448&quot; data-origin-height=&quot;1312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;latitude와 longitude 컬럼에 데이터가 잘 들어간 것을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>   Programming/Python</category>
      <category>geocode</category>
      <category>NaverAPI</category>
      <category>pandas</category>
      <category>Python</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/114</guid>
      <comments>https://najiwon.tistory.com/114#entry114comment</comments>
      <pubDate>Wed, 7 Aug 2024 21:04:20 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Python과 CSV 파일을 활용한 MySQL INSERT 쿼리 생성 방법</title>
      <link>https://najiwon.tistory.com/112</link>
      <description>&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;486&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bduN9M/btsIBkosBau/KyGqIUszYGweH1qchvpZmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bduN9M/btsIBkosBau/KyGqIUszYGweH1qchvpZmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bduN9M/btsIBkosBau/KyGqIUszYGweH1qchvpZmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbduN9M%2FbtsIBkosBau%2FKyGqIUszYGweH1qchvpZmk%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;486&quot; height=&quot;144&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;144&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;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;사용 라이브러리&amp;nbsp;&lt;br /&gt;- csv&lt;br /&gt;- datetime&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에 이어서 번역한 메시지 데이터를 테이블에 삽입해야 하는 일이 생겼다. 하나씩 복사해서 insert문을 작성하기엔 너무 많다는 생각이 들어서 한 번에 쿼리문을 생성할 수 있는 방법에 대해 고민했다.&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;Python을 사용하여 CSV 파일의 데이터를 MySQL 데이터베이스에 삽입할 수 있도록&amp;nbsp;csv 모듈을 이용해 CSV 파일을 읽고, 각 행의 데이터를 기반으로 MySQL INSERT 쿼리문을 생성하는 프로그램을 만들어봤다.&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;en.csv 파일 (CSV 파일은 다음과 같은 구조를 가정한다)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 열: 한국어 메시지 (MSG)&lt;/li&gt;
&lt;li&gt;두 번째 열: 메시지 코드 (MSG_CD)&lt;/li&gt;
&lt;li&gt;세 번째 열: 영어로 번역된 메시지 (MSG_EN)&lt;/li&gt;
&lt;li&gt;나머지 열은 무시된다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;01. Python 코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 en.csv 파일을 읽어서 각 행의 데이터를 사용하여 MySQL INSERT 쿼리문을 생성하는 Python 코드이다.&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;import csv

# en.csv 파일 경로
csv_file = 'en.csv'

# 생성할 INSERT 쿼리문을 저장할 리스트
query_list = []

# en.csv 파일 읽기
with open(csv_file, 'r', newline='', encoding='utf-8') as f:
    reader = csv.reader(f)
    header = next(reader)  # 첫 번째 줄은 헤더로 처리

    # 각 행마다 INSERT 쿼리문 생성
    for row in reader:
        LANG_CD = 'ko'  # 언어 코드 (예: 한국어)
        MSG_CD = row[1]  # MSG_CD 열의 데이터
        MSG = row[0]     # MSG 열의 데이터
        MSG_EN = row[2]  # MSG_EN 열의 데이터
        CRT_DT = '20240627143000'  # 생성 일시 (YYYYMMDDHHMMSS 형식)
        UPDT_DT = '20240627143000'  # 업데이트 일시 (YYYYMMDDHHMMSS 형식)

        # INSERT 쿼리문 생성하여 리스트에 추가
        query = f&quot;INSERT INTO cm_message (LANG_CD, MSG_CD, MSG, MSG_EN, CRT_DT, UPDT_DT) VALUES ('{LANG_CD}', '{MSG_CD}', '{MSG}', '{MSG_EN}', '{CRT_DT}', '{UPDT_DT}');&quot;
        query_list.append(query)

# 생성된 쿼리문 출력 또는 파일에 저장
for query in query_list:
    print(query)

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. en.csv 파일을 읽는다. 이 파일은 한국어 메시지, 메시지 코드, 영어 메시지를 포함한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. csv.reader를 사용하여 CSV 파일을 읽고, 첫 번째 줄을 헤더로 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 각 행마다 데이터를 추출하여 INSERT INTO ... VALUES ... 형식의 SQL 쿼리문을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 생성된 쿼리문을 query_list에 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 최종적으로 생성된 쿼리문을 출력하거나 파일에 저장한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;02. 주요 포인트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CSV 파일을 읽을 때, encoding='utf-8' 옵션을 사용하여 UTF-8 인코딩을 지정한다.&lt;/li&gt;
&lt;li&gt;생성 일시 (CRT_DT)와 업데이트 일시 (UPDT_DT)는 우선 고정된 값을 사용하였다. 실제로는 현재 시간을 사용하거나 다른 로직을 적용할 수 있다.&lt;/li&gt;
&lt;li&gt;쿼리문을 데이터베이스에 실제로 삽입하기 전에, 생성된 쿼리문이 올바른지 확인하는 것이 중요하다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;03. 코드 개선하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드코딩을 줄이고 보다 유연하게 데이터를 추출할 수 있는 방법을 적용해 보자. 각 열 이름에 대응되는 데이터를 추출할 수 있도록 하였다. 고정된 일시를 사용하지 않고 datetime으로 현재 시간을 가져오도록 수정하였다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import csv
from datetime import datetime

# en.csv 파일 경로
csv_file = 'en.csv'

# 생성할 INSERT 쿼리문을 저장할 리스트
query_list = []

# 현재 시간을 YYYYMMDDHHMMSS 형식으로 가져오기
current_time = datetime.now().strftime('%Y%m%d%H%M%S')

# en.csv 파일 읽기
with open(csv_file, 'r', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)

    # 각 행마다 INSERT 쿼리문 생성
    for row in reader:
        # 각 열 이름에 대응되는 데이터 추출
        LANG_CD = row['LANG_CD']
        MSG_CD = row['MSG_CD']
        MSG = row['MSG']
        MSG_EN = row['MSG_EN']
        CRT_DT = current_time  # 생성 일시
        UPDT_DT = current_time  # 업데이트 일시

        # INSERT 쿼리문 생성하여 리스트에 추가
        query = (
				    f&quot;('{LANG_CD}', &quot;
				    f&quot;'{MSG_CD}', &quot;
				    f&quot;'{MSG.replace('\\'', '\\\\\\'')}', &quot;
				    f&quot;'{MSG_EN.replace('\\'', '\\\\\\'')}', &quot;
				    f&quot;'{CRT_DT}', &quot;
				    f&quot;'{UPDT_DT}')&quot;
				)
        query_list.append(query)

# 쿼리문 리스트를 이용해 최종 INSERT 쿼리문 생성
insert_query = f&quot;INSERT INTO cm_message (LANG_CD, MSG_CD, MSG, MSG_EN, CRT_DT, UPDT_DT) VALUES\\\\n&quot;
insert_query += &quot;,\\\\n&quot;.join(query_list) + &quot;;&quot;

# 생성된 쿼리문 출력
print(insert_query)

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;05. 개선된 점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;csv.DictReader()로 각 행을 사전(dictionary) 형태로 읽어 열 이름을 직접 지정해 데이터에 접근할 수 있도록 했다.&lt;/li&gt;
&lt;li&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;</description>
      <category>   Programming/Python</category>
      <category>MySQL</category>
      <category>Python</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/112</guid>
      <comments>https://najiwon.tistory.com/112#entry112comment</comments>
      <pubDate>Tue, 16 Jul 2024 23:40:25 +0900</pubDate>
    </item>
    <item>
      <title>[빅데이터분석기사] 8회 실기 합격 후기 (feat. 공부 방법)</title>
      <link>https://najiwon.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;795&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5fBvT/btsIAPvHsjT/KIkde5HYkYIr9lmwK4urrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5fBvT/btsIAPvHsjT/KIkde5HYkYIr9lmwK4urrK/img.png&quot; data-alt=&quot;@gosimperson&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5fBvT/btsIAPvHsjT/KIkde5HYkYIr9lmwK4urrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5fBvT%2FbtsIAPvHsjT%2FKIkde5HYkYIr9lmwK4urrK%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;1098&quot; height=&quot;795&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;795&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;@gosimperson&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-16 오후 9.59.37.png&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;1608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ce3CNy/btsIBeaMmUE/47tfvSSu2GqjqSYio98nlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ce3CNy/btsIBeaMmUE/47tfvSSu2GqjqSYio98nlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ce3CNy/btsIBeaMmUE/47tfvSSu2GqjqSYio98nlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fce3CNy%2FbtsIBeaMmUE%2F47tfvSSu2GqjqSYio98nlK%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;1324&quot; height=&quot;1608&quot; data-filename=&quot;스크린샷 2024-07-16 오후 9.59.37.png&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;1608&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년 2023년 4월 빅데이터분석기사 6회 필기 합격 후&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;style3&quot; /&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; 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;- 컴퓨터공학과 졸업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학부시절 인공지능, 머신러닝 과목 수강&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 외부 빅데이터 교육 이수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빅데이터 분석 공모전 (pandas 사용 경험)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 정보처리기사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SQLD&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;공부 스케줄&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6/3부터 3주 공부하려고 했는데 역시 회사 다니면서 공부하는 건 쉽지가 않았다... ^^&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_2392.jpg&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;1261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5YGmm/btsICQzwaJ5/m66Ad7X2lVBJq8kNgFXmA0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5YGmm/btsICQzwaJ5/m66Ad7X2lVBJq8kNgFXmA0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5YGmm/btsICQzwaJ5/m66Ad7X2lVBJq8kNgFXmA0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5YGmm%2FbtsICQzwaJ5%2Fm66Ad7X2lVBJq8kNgFXmA0%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;1170&quot; height=&quot;1261&quot; data-filename=&quot;IMG_2392.jpg&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;1261&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;시험 1주일 전부터 빡공 했다. 집에선 집중이 잘 안 돼서 퇴근하고 맨날 카페 가서 새벽까지 공부하고 귀가했다...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시험 2주 전 주말에는 작업형 1 공부&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시험 1주 전 주말에 작업형 2 공부&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;월화는 작업형 3 공부,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;수, 목, 금은 2회~6회 기출문제를 풀면서 공부했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시험 전 금요일은 기출 5, 6회 풀고 작업형 3 유형 총정리 했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;공부 방법&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;회사에서 인프런 강의를 한 달에 1개씩 지원해 줘서 &lt;b&gt;[퇴근 후딴짓] 빅데이터 분석기사 실기&lt;/b&gt; 강의를 들으면서 공부했다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(추천합니다!!!  )&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://inf.run/PoyjH&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://inf.run/PoyjH&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1721136432829&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;[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3) 강의 | 퇴근후딴짓 - 인프런&quot; data-og-description=&quot;퇴근후딴짓 | 비전공자, 입문자가 빅데이터 분석기사 실기를 빠르게 취득할 수 있도록 안내해드려요! 꼭 필요한 파이썬, 판다스, 머신러닝을 다루고 있어요!, ❤️공지❤️ 7회 기출 유형 업데이&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://inf.run/PoyjH&quot; data-og-url=&quot;https://www.inflearn.com/course/빅데이터-분석기사-실기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DTqlD/hyWzszgvuk/lsq6Q4JkeDbYIuJAkXaxkK/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/9luiJ/hyWCAWIZKr/dqytRbK9KKNKrNzSkHHSXK/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/zNWvn/hyWzBCYNtF/CMfruBcPMfIeT4LN0wQEGk/img.png?width=1080&amp;amp;height=1769&amp;amp;face=0_0_1080_1769&quot;&gt;&lt;a href=&quot;https://inf.run/PoyjH&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://inf.run/PoyjH&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DTqlD/hyWzszgvuk/lsq6Q4JkeDbYIuJAkXaxkK/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/9luiJ/hyWCAWIZKr/dqytRbK9KKNKrNzSkHHSXK/img.png?width=1200&amp;amp;height=781&amp;amp;face=0_0_1200_781,https://scrap.kakaocdn.net/dn/zNWvn/hyWzBCYNtF/CMfruBcPMfIeT4LN0wQEGk/img.png?width=1080&amp;amp;height=1769&amp;amp;face=0_0_1080_1769');&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;[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3) 강의 | 퇴근후딴짓 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;퇴근후딴짓 | 비전공자, 입문자가 빅데이터 분석기사 실기를 빠르게 취득할 수 있도록 안내해드려요! 꼭 필요한 파이썬, 판다스, 머신러닝을 다루고 있어요!, ❤️공지❤️ 7회 기출 유형 업데이&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;작업형 2 -&amp;gt; 작업형 1 -&amp;gt; 작업형 3 순으로 공부하려고 했지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작업형 1 -&amp;gt; 작업형 2 -&amp;gt; 작업형 3 -&amp;gt; 기출풀이(2~6회)로&lt;/b&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 강의를 듣는 게 적당한 것 같아서 작업형 1부터 공부했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas를 다뤄본 경험이 있어서 작업형 1은 코랩에서 실습하면서 쉽게 공부할 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업형 1은 여러 문제를 풀어보는면서 어떤 메서드를 써야 하는지 익히는 게 제일 좋은 방법 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-16 오후 10.36.50.png&quot; data-origin-width=&quot;3164&quot; data-origin-height=&quot;2108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EVme6/btsIAZkCFCD/kHIK7HO8DR83PKRxFBeix1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EVme6/btsIAZkCFCD/kHIK7HO8DR83PKRxFBeix1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EVme6/btsIAZkCFCD/kHIK7HO8DR83PKRxFBeix1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEVme6%2FbtsIAZkCFCD%2FkHIK7HO8DR83PKRxFBeix1%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;3164&quot; height=&quot;2108&quot; data-filename=&quot;스크린샷 2024-07-16 오후 10.36.50.png&quot; data-origin-width=&quot;3164&quot; data-origin-height=&quot;2108&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;작업형 2가 살짝 까다로웠는데 어느 정도 작업하는 템플릿이 있어서 그 순서대로 계속 실습을 반복했다.&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;1. 데이터 import&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. EDA&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 전처리 및 Feature Enginnering&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. train, test 나누기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 모델 선택, 학습, 예측&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 평가&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. 결과 파일 제출&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-16 오후 10.44.50.png&quot; data-origin-width=&quot;3584&quot; data-origin-height=&quot;2108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IOBCw/btsICpoOilq/prBb3cKmqwk5Y7UT2Likf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IOBCw/btsICpoOilq/prBb3cKmqwk5Y7UT2Likf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IOBCw/btsICpoOilq/prBb3cKmqwk5Y7UT2Likf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIOBCw%2FbtsICpoOilq%2FprBb3cKmqwk5Y7UT2Likf0%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;3584&quot; height=&quot;2108&quot; data-filename=&quot;스크린샷 2024-07-16 오후 10.44.50.png&quot; data-origin-width=&quot;3584&quot; data-origin-height=&quot;2108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1721137130596&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 데이터 불러오기
import pandas as pd
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

print(train.shape, test.shape)

# 2. EDA
# print(train.isnull().sum())
# print(test.isnull().sum())

# print(train.info()) # float64(2), int64(4), object(3)
# print(test.info()) # float64(2), int64(3), object(3)

# print(train.head())
# print(test.head())

# print(train.describe(include='O'))

cols = train.select_dtypes(include='O').columns

# print(cols)

# print(train['model'].value_counts())

# for col in cols:
#     print(set(train[col]))
#     print(set(test[col]))
#     print(set(train[col]) - set(test[col]))
#     print(set(test[col]) - set(train[col]))


# 3. 전처리 FE
target = train.pop('price')

# object 삭제
# train = train.drop(cols, axis=1)
# test = test.drop(cols, axis=1)

# 원핫
# train = pd.get_dummies(train)
# test = pd.get_dummies(test)

# label
from sklearn.preprocessing import LabelEncoder

for col in cols:
    le = LabelEncoder()
    train[col] = le.fit_transform(train[col])
    test[col] = le.transform(test[col])

print(train.shape, test.shape)
print(train.head())

# 4. train, test split
from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=123)
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 5. 모델 선택 학습 예측
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor()
model.fit(X_tr, y_tr)
pred = model.predict(X_val)

# 6. 평가
from sklearn.metrics import mean_squared_error
import numpy as np

def rmse(y, pred):
    return np.sqrt(mean_squared_error(y, pred))

print(rmse(y_val, pred))

# base line 1475.1455911498017
# 원핫 1354.8502422515874
# label 1329.841635858263

# 7. test 예측 후 결과 제출
pred = model.predict(test)
submit = pd.DataFrame({
    'pred': pred
})

submit.to_csv('result.csv', index=False)

print(rmse(pd.read_csv('y.csv'), pd.read_csv('result.csv')))&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이 공부하는데 제일 까다로웠다. 가설검정, 범주형 데이터 분석, 회귀 분석, 분산 분석에 대한 내용이었는데,&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-16 오후 10.43.27.png&quot; data-origin-width=&quot;3584&quot; data-origin-height=&quot;2108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdXKXL/btsIBIWMaoh/WCAjiqPqeZyC5KTjA8PPsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdXKXL/btsIBIWMaoh/WCAjiqPqeZyC5KTjA8PPsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdXKXL/btsIBIWMaoh/WCAjiqPqeZyC5KTjA8PPsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdXKXL%2FbtsIBIWMaoh%2FWCAjiqPqeZyC5KTjA8PPsK%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;3584&quot; height=&quot;2108&quot; data-filename=&quot;스크린샷 2024-07-16 오후 10.43.27.png&quot; data-origin-width=&quot;3584&quot; data-origin-height=&quot;2108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;시험 전 날에는 빈 종이에 그동안 공부한 걸 다 적으면서 이해하고 암기했다.&amp;nbsp;&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/pSrmH/btsIAUp7vHL/KJkzK4dfMonIGh1v9DCyR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pSrmH/btsIAUp7vHL/KJkzK4dfMonIGh1v9DCyR0/img.png&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;edited_IMG_2393.jpg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pSrmH/btsIAUp7vHL/KJkzK4dfMonIGh1v9DCyR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpSrmH%2FbtsIAUp7vHL%2FKJkzK4dfMonIGh1v9DCyR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2250&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfDgSx/btsIBn6nfQ5/qdET2kh92uQPdCNnQk1d2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfDgSx/btsIBn6nfQ5/qdET2kh92uQPdCNnQk1d2k/img.png&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;edited_IMG_2394.jpg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfDgSx/btsIBn6nfQ5/qdET2kh92uQPdCNnQk1d2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfDgSx%2FbtsIBn6nfQ5%2FqdET2kh92uQPdCNnQk1d2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2250&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qhSMr/btsICRrGfUT/6Ao7MsWUkS0cp2ZanoMdnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qhSMr/btsICRrGfUT/6Ao7MsWUkS0cp2ZanoMdnk/img.png&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;edited_IMG_2395.jpg&quot; data-widthpercent=&quot;33.34&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qhSMr/btsICRrGfUT/6Ao7MsWUkS0cp2ZanoMdnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqhSMr%2FbtsICRrGfUT%2F6Ao7MsWUkS0cp2ZanoMdnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2250&quot; height=&quot;3000&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;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;help(), dir() 함수&lt;/b&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8회 시험 후기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작업형 1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 문제를 풀었을 때 이해를 잘못해서 잘못 풀었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 시간이 남아서 문제를 다시 읽어보고 제대로 이해하고 다시 풀어서 맞을 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;꼭 다시 문제를 읽고 확인&lt;/b&gt;해 보는 것을 추천한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작업형 2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회귀 문제였는데,&amp;nbsp; 결측치는 없었다. 수치형 데이터는 따로 처리해주지 않고, 범주형 데이터는 원핫인코딩 해줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RandomForestRegressor로 돌렸을 때 성능이 제일 좋아서 모델은 &lt;b&gt;랜덤포레스트&lt;/b&gt;로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가 지표는 소수점으로 나왔는데 따로 &lt;b&gt;정수처리 하지 않고&lt;/b&gt; 답안을 제출했다.&amp;nbsp; -&amp;gt; 40점 받음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모델을 학습할 때, train, validation 데이터로 나누는데 그거로 예측한 결과로 제출하면 절대 안 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제출 전 꼭 문제에서 제공하는&amp;nbsp;&lt;b&gt;test 데이터로 예측한 결과&lt;/b&gt;인지 확인하도록 하자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작업형 3&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 문제 2개에 각 소문제가 3개씩 있는 형태로 문제가 구성되어 있었다.&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;b&gt;회귀, 로지스틱회귀 분석&lt;/b&gt;을 하고 model.summary()에서 답을 찾을 수 있는 문제, &lt;b&gt;오즈비&lt;/b&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; 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;파이썬으로 데이터 분석 경험이 있어서 10일 정도(?)로 충분했던 것 같다.&lt;span style=&quot;color: #9d9d9d;&quot;&gt; 평일에 퇴근하고 새벽까지 공부하느라 힘들긴 했다. &lt;/span&gt;작업형 3은 어떤 문제가 나올지 잘 모르기 때문에 작업형 1, 2는 확실하게 공부해서 만점 받을 수 있게 준비하는 게 좋을 것 같다.&amp;nbsp;비전공자들은 무작정 암기하는 게 아니라 어느 정도 개념을 이해하고 실습을 진행한다면 충분히 합격할 수 있을 난이도 같습니다 :-)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빅데이터분석기사 준비하시는 분들 모두 파이팅입니다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;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>자격증/빅데이터분석기사</category>
      <category>빅데이터분석기사</category>
      <category>빅데이터분석기사실기</category>
      <category>빅데이터분석기사실기8회</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/111</guid>
      <comments>https://najiwon.tistory.com/111#entry111comment</comments>
      <pubDate>Tue, 16 Jul 2024 23:09:56 +0900</pubDate>
    </item>
    <item>
      <title>[빅데이터분석기사] 6회 필기 합격 후기</title>
      <link>https://najiwon.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-8766EEA8-32C5-4EAA-A902-F0935CE81D6C&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-8766EEA8-32C5-4EAA-A902-F0935CE81D6C&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8766EEA8-32C5-4EAA-A902-F0935CE81D6C&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-2ce973a8-2cd7-4d06-8769-e74d5b4f5e20&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-79CB9270-5CB8-40EB-AA24-EF9392EFE83D&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;대학교 4학년 때 빅데이터 수업을 들으면서 데이터를 다루는 것이 재미있었다. 대외활동으로 분석 공모전을 진행하면서 분석에 활용할 수 있도록 데이터를 수집하고 가공하는 일에 흥미를 가지게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-B2D33DD8-344F-4268-AB8C-E9C9F8658978&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-B2D33DD8-344F-4268-AB8C-E9C9F8658978&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-B2D33DD8-344F-4268-AB8C-E9C9F8658978&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-c3f7a9c9-5827-4c16-9342-d28282f4027d&quot;&gt;
&lt;p id=&quot;SE-762D7A97-36B5-4D95-88E7-7EF2B55212D9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-651B3018-090F-473A-9BA0-BE51276EEE16&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재는 어찌어찌 취업을 해서 웹 개발 업무를 하고 있지만 언젠가는 데이터 엔지니어가 되고 싶다는 목표가 있다. 그래서 빅데이터 분석 기사를 공부해 볼까 하는 생각이 들었다. (빅데이터 공모전 했던 거 + 공빅데 하면서 공부했던 것도 그냥 넘겨버리기 아쉬워서 ㅎㅎ ,,, + 기사 자격증 하나 더 따고 싶은 마음)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-EF0160F2-088E-47AB-9FE7-5F622B6236AC&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9D2F00B2-C516-4290-8E1B-F4706C045633&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-9D2F00B2-C516-4290-8E1B-F4706C045633&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9D2F00B2-C516-4290-8E1B-F4706C045633&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-9D2F00B2-C516-4290-8E1B-F4706C045633&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-9D2F00B2-C516-4290-8E1B-F4706C045633&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-EE7AB6DF-093E-4B78-A39D-8A06FDB6BF1E&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-EE7AB6DF-093E-4B78-A39D-8A06FDB6BF1E&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-EE7AB6DF-093E-4B78-A39D-8A06FDB6BF1E&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-D9553F34-B827-4930-9AC6-2B6BC7465D6A&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-D9553F34-B827-4930-9AC6-2B6BC7465D6A&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-D9553F34-B827-4930-9AC6-2B6BC7465D6A&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-d0069d88-503d-40e5-8cb2-56bb9eaab2d4&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-A0F77226-E7B8-44D8-86F9-3ACDA129117D&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-A0F77226-E7B8-44D8-86F9-3ACDA129117D&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-A0F77226-E7B8-44D8-86F9-3ACDA129117D&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-c7a934ec-2fdf-4f58-8eb6-42c6adb81a8b&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-15 오후 11.17.41.png&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBWlLB/btsIz6KdxLn/5XkVARVkuwrnpdV2lN0PTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBWlLB/btsIz6KdxLn/5XkVARVkuwrnpdV2lN0PTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBWlLB/btsIz6KdxLn/5XkVARVkuwrnpdV2lN0PTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBWlLB%2FbtsIz6KdxLn%2F5XkVARVkuwrnpdV2lN0PTK%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;1033&quot; height=&quot;826&quot; data-filename=&quot;스크린샷 2024-07-15 오후 11.17.41.png&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;SE-A7D4925E-9FEF-472F-BB20-F63F7A5FBA30&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내가 과연 지금 자격증 공부를 하는 게 맞나?라는 고민을 계속했지만 지금 와서 보면 그냥 애매하게 시간을 보내는 것보단 훨씬 나은 선택이었다고 생각한다. 고민할 시간에 뭐라도 하자..!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;output_3065468746.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DPfkC/btsIBjWdAtw/rfQ2wFKWu3aU2A1z87klwK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DPfkC/btsIBjWdAtw/rfQ2wFKWu3aU2A1z87klwK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DPfkC/btsIBjWdAtw/rfQ2wFKWu3aU2A1z87klwK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDPfkC%2FbtsIBjWdAtw%2FrfQ2wFKWu3aU2A1z87klwK%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;900&quot; height=&quot;632&quot; data-filename=&quot;output_3065468746.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;회사를 다니고 있었기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;SE-F968C76D-4E7F-4579-9D1D-32CC4774032B&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-F968C76D-4E7F-4579-9D1D-32CC4774032B&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-F968C76D-4E7F-4579-9D1D-32CC4774032B&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-77357191-9955-46ca-b597-0e32d589ffdd&quot;&gt;
&lt;p id=&quot;SE-12D72BFB-CD7D-4B14-AC32-7A66B203F636&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;퇴근 후 공부 + 주말 공부라는 계획을 세웠지만 ,,, &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6603E5F9-ED79-42F0-A962-86097C6BB0C0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;월수금은 수영, 전화영어를 했고&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3C87EC52-7AB0-492C-BC84-86C281394802&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주말에는 병원을 갔었어야 해서 공부하는 것이 쉽지 않았다 ^^&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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/oOwml/btsIAPOP5mD/KKDvrM7ycXAUVwRUOK6Is0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oOwml/btsIAPOP5mD/KKDvrM7ycXAUVwRUOK6Is0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;899&quot; data-origin-height=&quot;1186&quot; data-filename=&quot;output_1124514008.jpg&quot; style=&quot;width: 49.6811%; margin-right: 10px;&quot; data-widthpercent=&quot;50.27&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oOwml/btsIAPOP5mD/KKDvrM7ycXAUVwRUOK6Is0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoOwml%2FbtsIAPOP5mD%2FKKDvrM7ycXAUVwRUOK6Is0%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;899&quot; height=&quot;1186&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rrqZM/btsIzo5Dc3y/xFrzyE4koK6GNLItblzX21/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rrqZM/btsIzo5Dc3y/xFrzyE4koK6GNLItblzX21/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1200&quot; data-filename=&quot;IMG_3590.JPG&quot; style=&quot;width: 49.1561%;&quot; data-widthpercent=&quot;49.73&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rrqZM/btsIzo5Dc3y/xFrzyE4koK6GNLItblzX21/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrrqZM%2FbtsIzo5Dc3y%2FxFrzyE4koK6GNLItblzX21%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;900&quot; height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;SE-8EDF9926-A745-44A6-B2C7-4B052B862965&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-8EDF9926-A745-44A6-B2C7-4B052B862965&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8EDF9926-A745-44A6-B2C7-4B052B862965&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-6fbed616-3ef9-4255-95e6-891577079ca5&quot;&gt;
&lt;p id=&quot;SE-2ACB2E12-6910-4DA2-945F-3889C4158093&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;인터넷에 정리된 자료들을 보고 공부하려고 했는데, 뭔가 불안한 마음이 들어서 당근 마켓에서 중고로 책을 샀다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2EC9FB7B-1F06-4641-AF07-92F0D1D4E203&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2023년 책이 있길래 바로 구매했다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-D19FEB88-6E08-4D8E-BABE-EDF9C0DC7A29&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-D19FEB88-6E08-4D8E-BABE-EDF9C0DC7A29&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-D19FEB88-6E08-4D8E-BABE-EDF9C0DC7A29&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-ccc39e30-a162-4fb8-b5f5-4e3df8ec422c&quot;&gt;
&lt;p id=&quot;SE-34537AB1-FD4E-494D-977F-25306D015383&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴퓨터공학을 전공하고 4학년 때 빅데이터, 인공지능, 머신러닝 수업을 듣긴 했지만 몇 년 전이라 생각이 잘 나지 않고 ,,, &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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;output_1776492547.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bH2rUO/btsIBk8HWuw/9SlO0epYaWNNcBwp1SzXP0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bH2rUO/btsIBk8HWuw/9SlO0epYaWNNcBwp1SzXP0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bH2rUO/btsIBk8HWuw/9SlO0epYaWNNcBwp1SzXP0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH2rUO%2FbtsIBk8HWuw%2F9SlO0epYaWNNcBwp1SzXP0%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;900&quot; height=&quot;433&quot; data-filename=&quot;output_1776492547.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p id=&quot;SE-77D00F6A-BFAB-40A9-A12B-608F9F5AA76E&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;필기는 2과목과 3과목이 어렵다는 후기를 보고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;1, 4과목 먼저 후다닥 끝내고 2,3과목 봐야지 했지만 ,,, 1과목 분량이 너무 많아서 보다가 지쳐버렸다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;너무 지루 ,,, 그냥 한번 슥 읽는데 머리에 하나도 안 남아서 결국엔 빈 종이에 적으면서 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-BE2E44CB-821F-4105-8CCC-D70257EA35C4&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-BE2E44CB-821F-4105-8CCC-D70257EA35C4&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-BE2E44CB-821F-4105-8CCC-D70257EA35C4&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-6461e729-0f5d-44df-b184-b6df2558183b&quot;&gt;
&lt;p id=&quot;SE-E487F82F-C6BB-48D2-99EB-BF4257F4DB78&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(모두가 알겠지만 팁이라고 한다면 ,, 집중이 안 될 때는 손으로 쓰면서 공부하면 잘 된다.) &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-04F71462-AED3-4D64-A4B7-DAD23CE9D799&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-04F71462-AED3-4D64-A4B7-DAD23CE9D799&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-04F71462-AED3-4D64-A4B7-DAD23CE9D799&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-C164FEA9-3EC0-41B3-87E5-DA41D8950A23&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-C164FEA9-3EC0-41B3-87E5-DA41D8950A23&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-C164FEA9-3EC0-41B3-87E5-DA41D8950A23&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-6d2923f4-7e99-4d75-8dcf-1a161523eb4d&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-C430BC3F-CDAF-405C-ADC3-7E9484022964&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-C430BC3F-CDAF-405C-ADC3-7E9484022964&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-C430BC3F-CDAF-405C-ADC3-7E9484022964&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-40be968a-d1af-4396-8049-7da8e106dfec&quot;&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;output_1008823917.jpg&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rFq41/btsIz7vzY2k/CY9bzYMCwy103kDGxjVlA0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rFq41/btsIz7vzY2k/CY9bzYMCwy103kDGxjVlA0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rFq41/btsIz7vzY2k/CY9bzYMCwy103kDGxjVlA0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrFq41%2FbtsIz7vzY2k%2FCY9bzYMCwy103kDGxjVlA0%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;774&quot; height=&quot;604&quot; data-filename=&quot;output_1008823917.jpg&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;주말에는 병원에서 공부했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-DB07A42F-7247-444D-AC62-5FC22207D13B&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책 맨 뒤에 모의고사 풀면서 공부하자 해서 1회 모의고사를 풀고 답지에 있는 풀이를 보면서 공부했다. 이해가 안 가는 풀이는 유튜브에 이기적 모의고사 풀이가 있길래 그걸 보면서 모르는 개념이 나오면 추가로 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 두 채널 추천합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;&lt;a style=&quot;color: #0593d3;&quot; href=&quot;https://youtu.be/NEffY1rXJuE?si=sSQpzvbVQomWlvqO&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/NEffY1rXJuE?si=sSQpzvbVQomWlvqO&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=NEffY1rXJuE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cn4l8m/hyWCDy0oO1/hFwBmT4fWoAlJUaanRYegk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[빅데이터분석기사 필기] 기출문제 4회 01~20 (24년 도서) // 모의고사 1회 (23년 도서)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/NEffY1rXJuE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&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;color: #0593d3;&quot;&gt;&lt;a style=&quot;color: #0593d3;&quot; href=&quot;https://youtu.be/NWOy0SNzLaI?si=VrptUo5weIMEF09g&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youtu.be/NWOy0SNzLaI?si=VrptUo5weIMEF09g&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=NWOy0SNzLaI&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Ouzuj/hyWzvCCef9/PHg7AwbnJPDsk8FYHMCADk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=972_168_1104_312&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;2023 빅데이터분석기사 필기 2과목] Chapter 1. 01. 데이터 전처리&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/NWOy0SNzLaI&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;그리고 출퇴근 시간에 버스나 전철에서 보내는 시간이 아까워서 검색해 봤더니 유튜브에 강의가 있길래 이걸 보면서 출퇴근했다. 채널은 epass&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;솔직히 공부를 너무 안 했다는 생각이 들어서 시험 취소도 생각했는데, 시험이라도 있어야 책을 한 번이라도 더 본다는 아부지의 말을 듣고 ,,, 취소 안 했다.&lt;/span&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;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9WIdz/btsIBLLDN3f/nawERIusSwCMjPwljHgXZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9WIdz/btsIBLLDN3f/nawERIusSwCMjPwljHgXZ0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;917&quot; data-filename=&quot;output_1775132808.jpg&quot; style=&quot;width: 49.3647%; margin-right: 10px;&quot; data-widthpercent=&quot;49.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9WIdz/btsIBLLDN3f/nawERIusSwCMjPwljHgXZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9WIdz%2FbtsIBLLDN3f%2FnawERIusSwCMjPwljHgXZ0%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;900&quot; height=&quot;917&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q1Hbc/btsIBJNOSOu/l3F22iL5QQ5MjkzF88kFD1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q1Hbc/btsIBJNOSOu/l3F22iL5QQ5MjkzF88kFD1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;915&quot; data-filename=&quot;output_2908885964.jpg&quot; style=&quot;width: 49.4726%;&quot; data-widthpercent=&quot;50.05&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q1Hbc/btsIBJNOSOu/l3F22iL5QQ5MjkzF88kFD1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq1Hbc%2FbtsIBJNOSOu%2Fl3F22iL5QQ5MjkzF88kFD1%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;900&quot; height=&quot;915&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;SE-C921AA96-DCB3-40A5-9375-22CD5C30ED94&quot; data-a11y-title=&quot;나란히 놓은 사진&quot; data-compid=&quot;SE-C921AA96-DCB3-40A5-9375-22CD5C30ED94&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-C921AA96-DCB3-40A5-9375-22CD5C30ED94&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-00E01CBB-0307-4C1E-9733-DE89342C6A00&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-00E01CBB-0307-4C1E-9733-DE89342C6A00&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-00E01CBB-0307-4C1E-9733-DE89342C6A00&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-fd43c8d9-bba9-4c7a-9a13-ba6720b3cc04&quot;&gt;
&lt;p id=&quot;SE-BD48692F-DB95-40CC-A29C-265049953905&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험 전 날인 4/8에는 그냥 1회 모의고사 푼 거 다시 풀어보기 + 2회 모의고사 풀고 잘 모르겠는 개념을 정리했다. 그리고 시험날 아침에 가면서 보려고 A4 용지 두 장에 간단하게 정리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;output_3028151339.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFZAqa/btsIBzxKIcu/SzXt5upJYe4DENnXQ07NR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFZAqa/btsIBzxKIcu/SzXt5upJYe4DENnXQ07NR0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFZAqa/btsIBzxKIcu/SzXt5upJYe4DENnXQ07NR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFZAqa%2FbtsIBzxKIcu%2FSzXt5upJYe4DENnXQ07NR0%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;900&quot; height=&quot;1164&quot; data-filename=&quot;output_3028151339.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;SE-F375538E-33DD-47AF-A73E-6760904C13EB&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-F375538E-33DD-47AF-A73E-6760904C13EB&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-F375538E-33DD-47AF-A73E-6760904C13EB&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-4850d931-1fb1-46d2-bbe5-1ba85c07b8c8&quot;&gt;
&lt;p id=&quot;SE-46F47030-17F7-4985-9013-51037B0C68F6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시험은 운이 좋았던 것 같다. 생각보다 내가 공부했던 부분에서 문제가 나왔고, 오답인 것 같은 보기 들이 눈에 보였다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-68D4531F-346F-4E65-AE49-0198CFD4B0F4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1, 2, 4과목은 어느 정도 술술 풀렸는데 3과목에서 고민을 좀 많이 했다,,, 계산하는 문제들과 수식들이 나와서 ㅎㅎ.. &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-5F6F7809-AE8E-4613-B58B-0D64083E1BF9&quot; data-a11y-title=&quot;스티커&quot; data-compid=&quot;SE-5F6F7809-AE8E-4613-B58B-0D64083E1BF9&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-5F6F7809-AE8E-4613-B58B-0D64083E1BF9&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;시험이 끝나고 오픈 카톡 방에 들어가 후기를 들어보니 책에 없는 개념들도 많이 나온 모양이었다. 시험이 끝나고 사람들이 카페에 복기를 해놔서 대충 기억나는 대로 채점을 해봤는데 3과목에서 과락을 당할 것만 같았다 ^^,,&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-5A5FA77B-68A9-4110-ADED-866D55749774&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-5A5FA77B-68A9-4110-ADED-866D55749774&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-5A5FA77B-68A9-4110-ADED-866D55749774&quot; data-unitid=&quot;&quot;&gt;
&lt;div id=&quot;SE-671b8900-85b2-4196-8e94-ab29953a3482&quot;&gt;
&lt;p id=&quot;SE-673D1F21-FD13-4500-835D-AFF32D1D73C7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-7C2FB37D-185B-473C-861E-5F3F6FD46F0E&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그래서 운이 좋으면 과락 안 당하고 간당간당하게 합격하겠다 했는데,, 기출 빈도가 있는 개념들은 확실히 잡고 넘어간 것이 어느 정도 도움이 된 것 같다. (3v, 혼동행렬 같은 것들..) 대학생 때 들은 수업도 도움이 된 듯? 문제를 보니 조금씩 기억이 났다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;output_1692040827.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zlpcU/btsIy1C9spg/espfDhiby7goW3l4a97aO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zlpcU/btsIy1C9spg/espfDhiby7goW3l4a97aO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zlpcU/btsIy1C9spg/espfDhiby7goW3l4a97aO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzlpcU%2FbtsIy1C9spg%2FespfDhiby7goW3l4a97aO1%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;900&quot; height=&quot;1192&quot; data-filename=&quot;output_1692040827.jpg&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;얃호&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증/빅데이터분석기사</category>
      <category>빅데이터분석기사</category>
      <category>필기</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/110</guid>
      <comments>https://najiwon.tistory.com/110#entry110comment</comments>
      <pubDate>Mon, 15 Jul 2024 23:25:01 +0900</pubDate>
    </item>
    <item>
      <title>[React] react-datepicker 달력 외부 클릭시 이벤트 전달 막는 방법</title>
      <link>https://najiwon.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;01. 문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2일동안 찾아보던 버그&amp;hellip;&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;회사 프로젝트에서 react-datepicker를 사용해서 달력을 만들었다.&amp;nbsp;그런데 달력을 닫으려고 배경을 클릭했을 때, 달력이 닫히고 이벤트가 종료되어야 하는데.&lt;span&gt;&amp;nbsp;&lt;/span&gt;클릭한 위치에 버튼이나 어떤 이벤트가 달린 컴포넌트가 있으면 그 이벤트가 실행되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czZF9S/btsIx3mZcED/WI9zWKOKCI1j0gMJYrWEik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czZF9S/btsIx3mZcED/WI9zWKOKCI1j0gMJYrWEik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czZF9S/btsIx3mZcED/WI9zWKOKCI1j0gMJYrWEik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczZF9S%2FbtsIx3mZcED%2FWI9zWKOKCI1j0gMJYrWEik%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;841&quot; data-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;841&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mhY17/btsIygTGjXh/YNWIFqRavnyM8wns4kFtak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mhY17/btsIygTGjXh/YNWIFqRavnyM8wns4kFtak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mhY17/btsIygTGjXh/YNWIFqRavnyM8wns4kFtak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmhY17%2FbtsIygTGjXh%2FYNWIFqRavnyM8wns4kFtak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;856&quot; height=&quot;139&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;139&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ProductItem에 있는 버튼 이벤트가 실행되는 것을 로그를 통해 확인할 수 있었다.&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;02. 해결과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DatePicker에 있는 onClickOutside에 버블링을 중단하는 코드를 넣어줬다. &lt;b&gt;-&amp;gt; (X) 해결되지 않음&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;pf&quot;&gt;&lt;code&gt;    &amp;lt;CalendarWrapper&amp;gt;
      {/* {isOpen &amp;amp;&amp;amp; &amp;lt;Overlay id=&quot;wldnjs&quot; onClick={handleOverlayClick} /&amp;gt;} */}
      &amp;lt;DatePicker
        selected={startDate}
        onChange={(date) =&amp;gt; {
          console.log(&quot;111&quot;);
          setStartDate(date);
          setIsOpen(false);
        }}
        onCalendarOpen={() =&amp;gt; {
          console.log(&quot;222&quot;);
        }}
        onCalendarClose={() =&amp;gt; {
          console.log(&quot;333&quot;);
          setIsOpen(false);
        }}
        onClickOutside={(e) =&amp;gt; {
          console.log(&quot;444&quot;);
          e.stopPropagation();
        }}
        withPortal
      /&amp;gt;
    &amp;lt;/CalendarWrapper&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (4).png&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AM13Y/btsIx6Ykm98/DrxDOslH4cAoGHQ5jVJabK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AM13Y/btsIx6Ykm98/DrxDOslH4cAoGHQ5jVJabK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AM13Y/btsIx6Ykm98/DrxDOslH4cAoGHQ5jVJabK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAM13Y%2FbtsIx6Ykm98%2FDrxDOslH4cAoGHQ5jVJabK%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;959&quot; height=&quot;237&quot; data-filename=&quot;Untitled (4).png&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;237&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;DOM요소에 직접 접근하여 CalendarWrapper 내부에 event.target이 포함되어 있지 않는 경우 &lt;/b&gt;&lt;b&gt;event.stopPropagation(); 으로 버블링을 중단하는 코드를 넣어줬다. -&amp;gt; (X) 해결되지 않음&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;livescript&quot;&gt;&lt;code&gt;  const calendarRef = useRef(null);
  
  useEffect(() =&amp;gt; {
    const handleClickOutside = (event) =&amp;gt; {
      console.log(&quot;handleClickOutside&quot;);
      console.log(calendarRef.current);
      console.log(event.target);

      if (calendarRef.current &amp;amp;&amp;amp; !calendarRef.current.contains(event.target)) {
        console.log(calendarRef.current.contains(event.target));
        event.stopPropagation();
        event.preventDefault();
        setIsOpen(false);
      }
    };

    document.addEventListener(&quot;mousedown&quot;, handleClickOutside);
    return () =&amp;gt; {
      document.removeEventListener(&quot;mousedown&quot;, handleClickOutside);
    };
  }, [calendarRef]);
  
    &amp;lt;CalendarWrapper ref={calendarRef}&amp;gt;
      &amp;lt;DatePicker
        selected={startDate}
        onChange={(date) =&amp;gt; {
          console.log(&quot;111&quot;);
          setStartDate(date);
          setIsOpen(false);
        }}
        onCalendarOpen={() =&amp;gt; {
          console.log(&quot;222&quot;);
        }}
        onCalendarClose={() =&amp;gt; {
          console.log(&quot;333&quot;);
          setIsOpen(false);
        }}
        onClickOutside={(e) =&amp;gt; {
          console.log(&quot;444&quot;);
        }}
        withPortal
      /&amp;gt;
    &amp;lt;/CalendarWrapper&amp;gt;
  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (5).png&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNI53E/btsIxFsTNdA/2RR3Bwd5ZNGfjT6wEWHK90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNI53E/btsIxFsTNdA/2RR3Bwd5ZNGfjT6wEWHK90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNI53E/btsIxFsTNdA/2RR3Bwd5ZNGfjT6wEWHK90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNI53E%2FbtsIxFsTNdA%2F2RR3Bwd5ZNGfjT6wEWHK90%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;962&quot; height=&quot;331&quot; data-filename=&quot;Untitled (5).png&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;331&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 data-ke-size=&quot;size23&quot;&gt;03. 해결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;react-datepicker 깃 레포지토리에서 한번 코드를 보면서 원인을 찾아보기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Issues 탭이 있길래 이런 문제가 나만 발생하는건가 싶어서 검색을 해봤더니 같은 문제에 대한 내용이 올라와 있었다. !!&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://github.com/Hacker0x01/react-datepicker/issues/2524&quot;&gt;https://github.com/Hacker0x01/react-datepicker/issues/2524&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에 해결 방법이 있었다. !!! 엉엉 감사합니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;document.addEventListener(&quot;touchstart&quot;, handelTouchStart, true);&lt;/b&gt;로 touchstart 이벤트가 발생할 경우&lt;b&gt;e.stopPropagation();&lt;/b&gt;으로 이벤트 버블링을 중단할 수 있도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;달력이 닫히면 이벤트 리스너를 제거한다. 달력을 닫을 때 리스너가 제거되지 않아 원치 않는 문제가 발생할 수 있기 때문이다. 다시 렌더링할 때 함수를 재정의하는 것을 방지하기 위해 removeEventListener로 이벤트리스너를 제거해줬다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;const Calendar = () =&amp;gt; {
  const [startDate, setStartDate] = useState(new Date());

  const handelTouchStart = useCallback((e) =&amp;gt; e.stopPropagation(), []);

  const hadleCalendarOpen = () =&amp;gt; {
    console.log(&quot;open&quot;);
    document.addEventListener(&quot;touchstart&quot;, handelTouchStart, true);
  };

  const hadleCalendarClose = () =&amp;gt; {
    console.log(&quot;close&quot;);
    document.removeEventListener(&quot;touchstart&quot;, handelTouchStart, true);
  };

  return (
    &amp;lt;CalendarWrapper&amp;gt;
      &amp;lt;DatePicker
        selected={startDate}
        onChange={(date) =&amp;gt; {
          setStartDate(date);
        }}
        onCalendarOpen={hadleCalendarOpen}
        onCalendarClose={hadleCalendarClose}
        withPortal
      /&amp;gt;
    &amp;lt;/CalendarWrapper&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (6).png&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv5eEc/btsIycjsYuw/lTLI7Jp7TaX1txnvgZRx9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv5eEc/btsIycjsYuw/lTLI7Jp7TaX1txnvgZRx9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv5eEc/btsIycjsYuw/lTLI7Jp7TaX1txnvgZRx9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv5eEc%2FbtsIycjsYuw%2FlTLI7Jp7TaX1txnvgZRx9K%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;964&quot; height=&quot;99&quot; data-filename=&quot;Untitled (6).png&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;99&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>   Programming/React</category>
      <category>react</category>
      <category>react-datepicker</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/109</guid>
      <comments>https://najiwon.tistory.com/109#entry109comment</comments>
      <pubDate>Sat, 13 Jul 2024 15:10:46 +0900</pubDate>
    </item>
    <item>
      <title>[React] Module parse failed: Unexpected character</title>
      <link>https://najiwon.tistory.com/108</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;01. 오류&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;react-datepicker 라이브러리를 설치하고 화면에서 사용하려고 하니 아래와 같은 오류가 발생했다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N1h4n/btsIyFeBLpB/yYIuOrTl7AtkQxXbdBYlC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N1h4n/btsIyFeBLpB/yYIuOrTl7AtkQxXbdBYlC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N1h4n/btsIyFeBLpB/yYIuOrTl7AtkQxXbdBYlC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN1h4n%2FbtsIyFeBLpB%2FyYIuOrTl7AtkQxXbdBYlC0%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;1174&quot; height=&quot;295&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1720849589685&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ERROR in ../node_modules/react-datepicker/dist/react-datepicker.css 1:0
Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
&amp;gt; @charset &quot;UTF-8&quot;;
| .react-datepicker__year-read-view--down-arrow,
| .react-datepicker__month-read-view--down-arrow,
 @ ./src/components/DatePicker1.jsx 3:0-52
 @ ./src/pages/ProductPage/index.jsx 6:0-55 31:28-39
 @ ./src/App.jsx 1:0-46 3:36-47
 @ ./src/main.js 3:0-24 12:31-34

webpack 5.88.1 compiled with 1 error in 183 ms&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;해당 오류는 Webpack이 CSS 파일을 처리할 적절한 로더를 찾지 못했기 때문에 발생한고한다.&amp;nbsp;React 프로젝트에서 CSS 파일을 로드하고 사용할 수 있도록 CSS 로더를 설정해야 한다.&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;02. 필요한 패키지 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 필요한 로더 패키지들을 설치해야 한다. style-loader와 css-loader를 설치하자.&lt;/p&gt;
&lt;pre id=&quot;code_1720849604434&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install style-loader css-loader&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;package.json에 style-loader와 css-loader&amp;nbsp; 추가된 것을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;1c&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;  &quot;dependencies&quot;: {
    &quot;css-loader&quot;: &quot;^7.1.2&quot;,
    &quot;moment&quot;: &quot;^2.30.1&quot;,
    &quot;react-datepicker&quot;: &quot;^7.0.0&quot;,
    &quot;style-loader&quot;: &quot;^4.0.0&quot;
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;03. Webpack 설정 파일 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Webpack 설정 파일(webpack.config.js)을 수정하여 CSS 로더를 추가해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정은 .sassm, .css 확장자로 끝나는 파일을 처리하기 위해 style-loader와 css-loader를 사용하도록 Webpack에 지시한다.&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;webpack.config.js&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: &quot;babel-loader&quot;,
        },
      },
      {
        test: /\.(sass|css)$/,
        use: [&quot;style-loader&quot;, &quot;css-loader&quot;],
      },
    ],
  },&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;04. CSS 파일 import&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Webpack 설정을 마친 후, React 컴포넌트에서 CSS 파일을 import할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1720850086349&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'react-datepicker/dist/react-datepicker.css';&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beR274/btsIyfHe7fi/Wpt0sMS073rU0D37dQICBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beR274/btsIyfHe7fi/Wpt0sMS073rU0D37dQICBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beR274/btsIyfHe7fi/Wpt0sMS073rU0D37dQICBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeR274%2FbtsIyfHe7fi%2FWpt0sMS073rU0D37dQICBK%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;512&quot; height=&quot;335&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 CSS 로더를 설정하고, CSS 파일을 import하여 스타일을 적용할 수 있다. Webpack 설정 파일에 로더를 추가하고, 필요한 패키지를 설치한 후, React 컴포넌트에서 CSS 파일을 import하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  이것저것/오류 모음</category>
      <category>react</category>
      <category>react-datepicker</category>
      <category>오류</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/108</guid>
      <comments>https://najiwon.tistory.com/108#entry108comment</comments>
      <pubDate>Sat, 13 Jul 2024 14:57:11 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 공공데이터포털 OpenAPI 호출 에러 SSLError: HTTPSConnectionPool(host='apis.data.go.kr', port=443)</title>
      <link>https://najiwon.tistory.com/107</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;공공데이터포털에서 한국장애인고용공단 장애인 구인 실시간 현황 api를 호출해 데이터를 가져오는 과정에서 오류가 발생했다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-06 오후 5.51.09.png&quot; data-origin-width=&quot;2408&quot; data-origin-height=&quot;1540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckhf9w/btsIqw9B4cc/Z6bkc2KOl3aqk03mSuA2xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckhf9w/btsIqw9B4cc/Z6bkc2KOl3aqk03mSuA2xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckhf9w/btsIqw9B4cc/Z6bkc2KOl3aqk03mSuA2xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckhf9w%2FbtsIqw9B4cc%2FZ6bkc2KOl3aqk03mSuA2xk%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;2408&quot; height=&quot;1540&quot; data-filename=&quot;스크린샷 2024-07-06 오후 5.51.09.png&quot; data-origin-width=&quot;2408&quot; data-origin-height=&quot;1540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공공데이터 포털에서 api를 호출했을 때는 성공적으로 호출했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720256059932&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import requests
import pprint
import json

PAGE_NO = '1'
NUM_OF_ROWS= '1000'
API_KEY = '' # Decoding 인증키

url = 'https://apis.data.go.kr/B552583/job/job_list_env'

params = {
    'serviceKey': API_KEY,
    'pageNo': PAGE_NO,
    'numOfRows': NUM_OF_ROWS
}
response = requests.get(url, params=params)
contents = response.text

pprint.pprint(contents)&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;SSLError:&amp;nbsp;HTTPSConnectionPool(host='apis.data.go.kr',&amp;nbsp;port=443)&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;pre id=&quot;code_1720255676431&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;---------------------------------------------------------------------------
SSLError                                  Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)
    467             try:
--&amp;gt; 468                 self._validate_conn(conn)
    469             except (SocketTimeout, BaseSSLError) as e:

18 frames
SSLError: [SSL: SSLV3_ALERT_ILLEGAL_PARAMETER] sslv3 alert illegal parameter (_ssl.c:1007)

During handling of the above exception, another exception occurred:

SSLError                                  Traceback (most recent call last)
SSLError: [SSL: SSLV3_ALERT_ILLEGAL_PARAMETER] sslv3 alert illegal parameter (_ssl.c:1007)

The above exception was the direct cause of the following exception:

MaxRetryError                             Traceback (most recent call last)
MaxRetryError: HTTPSConnectionPool(host='apis.data.go.kr', port=443): Max retries exceeded with url: /B552583/job/job_list_env?serviceKey= xx &amp;amp;pageNo=1&amp;amp;numOfRows=1000 (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_ILLEGAL_PARAMETER] sslv3 alert illegal parameter (_ssl.c:1007)')))

During handling of the above exception, another exception occurred:

SSLError                                  Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    515             if isinstance(e.reason, _SSLError):
    516                 # This branch is for urllib3 v1.22 and later.
--&amp;gt; 517                 raise SSLError(e, request=request)
    518 
    519             raise ConnectionError(e, request=request)

SSLError: HTTPSConnectionPool(host='apis.data.go.kr', port=443): Max retries exceeded with url: /B552583/job/job_list_env?serviceKey= xx &amp;amp;pageNo=1&amp;amp;numOfRows=1000 (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_ILLEGAL_PARAMETER] sslv3 alert illegal parameter (_ssl.c:1007)')))&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;https에서 s를 빼고 &lt;b&gt;http로&lt;/b&gt; &lt;b&gt;호출&lt;/b&gt;하니 성공적으로 실행되었다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720256108532&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;url = 'http://apis.data.go.kr/B552583/job/job_list_env'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-06 오후 5.56.02.png&quot; data-origin-width=&quot;2922&quot; data-origin-height=&quot;966&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rai4C/btsIpzTRQvt/NvTkrIgGKmJ5acK4KDoBQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rai4C/btsIpzTRQvt/NvTkrIgGKmJ5acK4KDoBQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rai4C/btsIpzTRQvt/NvTkrIgGKmJ5acK4KDoBQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRai4C%2FbtsIpzTRQvt%2FNvTkrIgGKmJ5acK4KDoBQ0%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;2922&quot; height=&quot;966&quot; data-filename=&quot;스크린샷 2024-07-06 오후 5.56.02.png&quot; data-origin-width=&quot;2922&quot; data-origin-height=&quot;966&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>  이것저것/오류 모음</category>
      <category>Python</category>
      <category>공공데이터</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/107</guid>
      <comments>https://najiwon.tistory.com/107#entry107comment</comments>
      <pubDate>Sat, 6 Jul 2024 18:00:38 +0900</pubDate>
    </item>
    <item>
      <title>[백준/Python] 12865: 평범한 배낭</title>
      <link>https://najiwon.tistory.com/106</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4dRzg/btsIpg1gK0e/B41w5x0LFR2LyIG8YGR8Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4dRzg/btsIpg1gK0e/B41w5x0LFR2LyIG8YGR8Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4dRzg/btsIpg1gK0e/B41w5x0LFR2LyIG8YGR8Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4dRzg%2FbtsIpg1gK0e%2FB41w5x0LFR2LyIG8YGR8Y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;668&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&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;준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가지는데, 해당 물건을 배낭에 넣어서 가면 준서가 V만큼 즐길 수 있다. 아직 행군을 해본 적이 없는 준서는 최대 K만큼의 무게만을 넣을 수 있는 배낭만 들고 다닐 수 있다. 준서가 최대한 즐거운 여행을 하기 위해 배낭에 넣을 수 있는 물건들의 가치의 최댓값을 알려주자.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 줄에 물품의 수 N(1 &amp;le; N &amp;le; 100)과 준서가 버틸 수 있는 무게 K(1 &amp;le; K &amp;le; 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 &amp;le; W &amp;le; 100,000)와 해당 물건의 가치 V(0 &amp;le; V &amp;le; 1,000)가 주어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력으로 주어지는 모든 수는 정수이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 줄에 배낭에 넣을 수 있는 물건들의 가치합의 최댓값을 출력한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;/h2&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;4 7
6 13
4 8
3 6
5 12
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;14
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;pre id=&quot;code_1720019482609&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys 

n, k = map(int, sys.stdin.readline().split())

dy = [ 0 for _ in range(k+1)]
weight_sum = 0

for _ in range(n):
  w, v =  map(int, sys.stdin.readline().split())
  
  for i in range(k, w-1, -1):
    dy[i] = max(dy[i], dy[i-w] + v)
    # print(dy)
      
print(dy[k])

# 4 7
# 6 13
# 4 8
# 3 6
# 5 12&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dynamic programming 동적계획법&amp;nbsp;&lt;/p&gt;</description>
      <category>  알고리즘/Baekjoon</category>
      <category>12865</category>
      <category>Python</category>
      <category>백준</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/106</guid>
      <comments>https://najiwon.tistory.com/106#entry106comment</comments>
      <pubDate>Thu, 4 Jul 2024 00:16:55 +0900</pubDate>
    </item>
    <item>
      <title>[Python] googletrans를 사용하여 번역 프로그램 만들기 (1)</title>
      <link>https://najiwon.tistory.com/105</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;python.png&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLlzT3/btsIqcKjI2z/fcK2KK5JDFU2ybUaMmLT2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLlzT3/btsIqcKjI2z/fcK2KK5JDFU2ybUaMmLT2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLlzT3/btsIqcKjI2z/fcK2KK5JDFU2ybUaMmLT2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLlzT3%2FbtsIqcKjI2z%2FfcK2KK5JDFU2ybUaMmLT2k%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;486&quot; height=&quot;144&quot; data-filename=&quot;python.png&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;사용 라이브러리&amp;nbsp;&lt;br /&gt;- pandas&lt;br /&gt;- googletrans&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모바일 화면에서 사용하는 한국어 메세지를 영어로 번역하여 등록해야하는 업무를 맡게 되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메세지는 약 300개 정도로 하나씩 번역하기에는 시간도 오래 걸릴것 같고 번거로운 작업이라는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas와 googletrans 라이브러리를 사용하여 csv 파일을 읽고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어를 영문으로 번역하여 다시 csv로 저장하는 프로그램을 만들어 보았다.&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;01. googletrans란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;googletrans는 Google 번역 API를 사용하여 여러 언어 간의 번역을 제공하는 파이썬 라이브러리이다. 이를 통해 쉽게 텍스트를 다양한 언어로 번역할 수 있다. googletrans는 간단한 번역 작업에 유용하며, 다양한 프로젝트에서 손쉽게 다국어 지원을 구현할 수 있게 돕는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주요기능은&lt;/b&gt; 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;언어 감지&lt;/b&gt;: 입력된 텍스트의 언어를 자동으로 감지한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;번역&lt;/b&gt;: 텍스트를 원하는 언어로 번역한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지원 언어 목록&lt;/b&gt;: Google 번역에서 지원하는 언어 목록을 제공한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&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;Google 번역 API의 변경 사항에 따라 googletrans의 동작이 영향을 받을 수 있다.&lt;/li&gt;
&lt;li&gt;무료로 사용할 수 있지만, API 요청에 대한 제한이 있을 수 있다.&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;02. 라이브러리 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, pandas와 googletrans 라이브러리를 설치해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;pip install pandas googletrans==4.0.0-rc1
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;03. CSV 파일 읽기, 번역, 저장하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBeaver의 조회한 메세지를 추출한 .csv 파일을 읽고 한국어 메시지를 영어로 번역한 후 .csv 파일로 저장한다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import pandas as pd
from googletrans import Translator

# CSV 파일 읽기
df = pd.read_csv('ko.csv', encoding='euc-kr')

print(df.head())

# 번역기 초기화
translator = Translator()

# 번역 함수
def translate_text(text):
    try:
        translated = translator.translate(text, src='ko', dest='en')
        return translated.text
    except Exception as e:
        print(f&quot;Error translating {text}: {e}&quot;)
        return text

# MSG 컬럼을 번역
df['MSG_EN'] = df['MSG'].apply(translate_text)

print(df.head())

# 결과를 새로운 CSV 파일로 저장
df.to_csv('en.csv', index=False)

print(&quot;Translation complete. Saved to en.csv&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;CSV 파일 읽기&lt;/b&gt;: pandas 라이브러리를 사용하여 ko.csv 파일을 데이터프레임으로 읽는다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;번역기 초기화&lt;/b&gt;: googletrans 라이브러리에서 Translator 객체를 생성한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;번역 함수 정의&lt;/b&gt;: 텍스트를 번역하는 함수를 정의한다. 이 함수는 주어진 한국어 텍스트를 영어로 번역한다. 번역 중 오류가 발생할 경우, 원래 텍스트를 반환한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MSG 컬럼 번역&lt;/b&gt;: apply 메서드를 사용하여 데이터프레임의 MSG 컬럼의 각 텍스트를 번역한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과를 새로운 CSV 파일로 저장&lt;/b&gt;: 번역된 데이터프레임을 en.csv 파일로 저장한다.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어 메시지를 영어로 번역하고, 번역된 결과를 en.csv 파일로 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;try-except 구믄으로 번역 과정에서 발생할 수 있는 예외를 처리하여 안정성을 높였다.&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;04. crt_dt, updt_dt 에 현재 yyyymmddHHmmss 형식으로 현재 일시 넣기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번역된 시점을 기록하기 위해 crt_dt, updt_dt 컬럼을 추가하여 현재 날짜 및 시간을 YYYYMMDDHHMMSS 형식으로 삽입해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;datetime 모듈을 사용하여 현재 날짜 및 시간을 얻고, 이를 원하는 형식으로 변환해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;업데이트된 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import pandas as pd
from googletrans import Translator
from datetime import datetime

# CSV 파일 읽기
df = pd.read_csv('ko.csv')

# 번역기 초기화
translator = Translator()

# 현재 날짜와 시간 얻기 (YYYYMMDDHHMMSS 형식)
def get_current_datetime():
    return datetime.now().strftime('%Y%m%d%H%M%S')

# 번역 함수
def translate_text(text):
    try:
        translated = translator.translate(text, src='ko', dest='en')
        return translated.text
    except Exception as e:
        print(f&quot;Error translating {text}: {e}&quot;)
        return text

# MSG 컬럼을 번역
df['MSG'] = df['MSG'].apply(translate_text)

# crt_dt와 updt_dt 컬럼에 현재 날짜와 시간 설정
current_datetime = get_current_datetime()
df['crt_dt'] = current_datetime
df['updt_dt'] = current_datetime

# 결과를 새로운 CSV 파일로 저장
df.to_csv('en.csv', index=False)

print(&quot;Translation complete. Saved to en.csv&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;현재 날짜와 시간 함수 정의&lt;/b&gt;: 현재 날짜와 시간을 YYYYMMDDHHMMSS 형식으로 얻기 위해 get_current_datetime 함수를 정의한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;현재 날짜와 시간 변수 생성&lt;/b&gt;: get_current_datetime 함수를 호출하여 현재 날짜와 시간을 가져온다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;crt_dt와 updt_dt 컬럼 설정&lt;/b&gt;: 번역된 데이터프레임에 crt_dt와 updt_dt 컬럼을 추가하고, 현재 날짜와 시간으로 설정한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CSV 파일로 저장&lt;/b&gt;: 변환된 데이터프레임을 en.csv 파일로 저장한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 행에 현재 날짜와 시간을 crt_dt와 updt_dt 컬럼에 추가하여 YYYYMMDDHHMMSS 형식으로 삽입함으로써 데이터의 생성 및 업데이트 시점을 기록할 수 있다.&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/Python</category>
      <category>googletrans</category>
      <category>pandas</category>
      <category>Python</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/105</guid>
      <comments>https://najiwon.tistory.com/105#entry105comment</comments>
      <pubDate>Wed, 3 Jul 2024 01:24:20 +0900</pubDate>
    </item>
    <item>
      <title>[Git] git stash 현재 작업 임시 저장하기</title>
      <link>https://najiwon.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 브랜치에서 작업을 하던 중 다른 요청으로 하던 작업을 멈추고 다른 브랜치로 변경해야 하는 상황이 왔다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 변경하려고 하니 오류가 발생하였다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash1.png&quot; data-origin-width=&quot;1101&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b227m2/btsImiJFVJK/7XkZ74j6tx04hyN6jN0TLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b227m2/btsImiJFVJK/7XkZ74j6tx04hyN6jN0TLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b227m2/btsImiJFVJK/7XkZ74j6tx04hyN6jN0TLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb227m2%2FbtsImiJFVJK%2F7XkZ74j6tx04hyN6jN0TLK%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;1101&quot; height=&quot;347&quot; data-filename=&quot;stash1.png&quot; data-origin-width=&quot;1101&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1719934979941&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;error: Your local changes to the following files would be overwritten by checkout:
				...
Please commit your changes or stash them before you switch branches.
Aborting&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어인 git stash를 사용하여 해결할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;git stash를 사용하여&amp;nbsp;&lt;/span&gt;아직 완료하지 않은 일을 commit 하지 않고 나중에 다시 꺼내와 마무리할 수 있다.&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;01. git stash란?&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;d30cd81d-fe3f-4ec8-a716-c05f52f4993d&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git에서 git stash는 현재 작업 중인 변경 사항을 임시로 저장해 두고, 작업 디렉터리를 깨끗하게 비울 수 있게 하는 명령어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 저장해 둔 변경 사항을 다시 적용할 수 있다. 주로 브랜치를 변경하거나 긴급한 버그 수정을 해야 할 때 유용하다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;git stash 명령을 사용하면 워킹 디렉토리에서 수정한 파일들만 저장한다.&lt;/li&gt;
&lt;li&gt;stash란 아래에 해당하는 파일들을 보관해두는 장소이다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Modified이면서 Tracked 상태인 파일
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Tracked 상태인 파일을 수정한 경우&lt;/li&gt;
&lt;li&gt;Tracked: 과거에 이미 commit하여 스냅샷에 넣어진 관리 대상 상태의 파일&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Staging Area에 있는 파일(Staged 상태의 파일)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;git add 명령을 실행한 경우&lt;/li&gt;
&lt;li&gt;Staged 상태로 만들려면 git add 명령을 실행해야 한다.&lt;/li&gt;
&lt;li&gt;git add는 파일을 새로 추적할 때도 사용하고 수정한 파일을 Staged 상태로 만들 때도 사용한다.&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;h3 data-ke-size=&quot;size23&quot;&gt;02. 주요 명령어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변경 사항 임시 저장&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935205804&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장된 변경 사항 목록 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935229651&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장된 변경 사항 적용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935243215&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash apply&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장된 특정 변경 사항 적용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935261497&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash apply stash@{index}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장된 변경 사항 삭제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935292291&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash drop&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장과 동시에 브랜치 전환&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935309710&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash push -m &quot;작업 설명&quot;
git checkout 다른_브랜치&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장된 변경 사항 적용 후 삭제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935327255&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash pop&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;03. git stash 사용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;stash로 특정 파일만 임시저장후에 stash 목록 보기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935382201&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash push -m &quot;description&quot; 경로

ex) git stash push -m &quot;두개 파일 임시 저장&quot; /src/one.tsx&amp;nbsp;&amp;nbsp;/src/two.tsx
ex) git stash push -m &quot;src 하위 파일 한번에 저장하기&quot; /src/*&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1719936279314&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git stash list&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash2.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLl8V/btsIjepaKwt/b42rUnmMqq5VbfRSoUxRZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLl8V/btsIjepaKwt/b42rUnmMqq5VbfRSoUxRZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLl8V/btsIjepaKwt/b42rUnmMqq5VbfRSoUxRZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLl8V%2FbtsIjepaKwt%2Fb42rUnmMqq5VbfRSoUxRZK%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;1624&quot; height=&quot;228&quot; data-filename=&quot;stash2.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;228&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;stash 적용하기(이전에 했던 작업을 다시 가져오기)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1719935479557&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 가장 최근의 stash를 가져와 적용한다.
$ git stash apply

// stash 이름(ex. stash@{2})에 해당하는 stash를 적용한다.
$ git stash apply [stash 이름]&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&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash3.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;569&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/udxRv/btsIkcdjW0l/owbgqKPl7GZ2n9dqD9bHrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/udxRv/btsIkcdjW0l/owbgqKPl7GZ2n9dqD9bHrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/udxRv/btsIkcdjW0l/owbgqKPl7GZ2n9dqD9bHrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FudxRv%2FbtsIkcdjW0l%2FowbgqKPl7GZ2n9dqD9bHrK%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;1184&quot; height=&quot;569&quot; data-filename=&quot;stash3.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;569&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;수정했던 파일들을 복원할 때 반드시 stash 했을 때와 같은 브랜치일 필요는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 다른 작업 중이던 브랜치에 이전의 작업들을 추가했을 때 충돌이 있으면 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;stash 제거하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apply 옵션은 단순히 stash를 적용하는 것으로, 해당 stash는 스택에 여전히 남아있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택에 남아 있는 stash는 아래 명령어을 사용 하여 제거할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1719935560017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 가장 최근의 stash를 제거한다.
$ git stash drop

// stash 이름(ex. stash@{2})에 해당하는 stash를 제거한다.
$ git stash drop [stash 이름]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash4.png&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzQe1N/btsIkALAkXS/R8K6BI6Bx0kxJjTR7ALiPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzQe1N/btsIkALAkXS/R8K6BI6Bx0kxJjTR7ALiPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzQe1N/btsIkALAkXS/R8K6BI6Bx0kxJjTR7ALiPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzQe1N%2FbtsIkALAkXS%2FR8K6BI6Bx0kxJjTR7ALiPK%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;561&quot; height=&quot;52&quot; data-filename=&quot;stash4.png&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;52&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;stash 되돌리기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실수로 잘못 stash 적용한 것을 되돌리고 싶으면 위의 명령어를 이용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1719935694323&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 가장 최근의 stash를 사용하여 패치를 만들고 그것을 거꾸로 적용한다.
$ git stash show -p | git apply -R

// stash 이름(ex. stash@{2})에 해당하는 stash를 이용하여 거꾸로 적용한다.
$ git stash show -p [stash 이름] | git apply -R&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;TIP. alias&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alias로 편리하게 사용하자. stash-unapply라는 명령어를 등록하여 간단하게 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1719935723117&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git config --global alias.stash-unapply '!git stash show -p | git apply -R'
$ git stash apply
$ #... work work work

// alias로 등록한 stash 되돌리기 명령어
$ git stash-unapply&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;04. vscode ui로 사용하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우측 source control 탭으로 이동하여 ... 버튼을 눌러준다. stash 메뉴에서 원하는 메뉴를 선택하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stage에 올라간 변경사항을 stash 해보자.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_stash5.png&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;811&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmltWY/btsIkux1Hk0/2EfTid6Kt1kFGZQicv2ELK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmltWY/btsIkux1Hk0/2EfTid6Kt1kFGZQicv2ELK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmltWY/btsIkux1Hk0/2EfTid6Kt1kFGZQicv2ELK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmltWY%2FbtsIkux1Hk0%2F2EfTid6Kt1kFGZQicv2ELK%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;869&quot; height=&quot;811&quot; data-filename=&quot;edited_stash5.png&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;811&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;view stash 메뉴를 클릭하면 아래와 같이 저장해둔 변경 사항을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash6.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boPOkw/btsIkZYB9Go/bzaF1lwpIPE1C6pJpdZjH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boPOkw/btsIkZYB9Go/bzaF1lwpIPE1C6pJpdZjH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boPOkw/btsIkZYB9Go/bzaF1lwpIPE1C6pJpdZjH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboPOkw%2FbtsIkZYB9Go%2FbzaF1lwpIPE1C6pJpdZjH0%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;606&quot; height=&quot;71&quot; data-filename=&quot;stash6.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash7.png&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXkERK/btsIlEzGYel/gxE5qrcCy3A10DJW45o8EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXkERK/btsIlEzGYel/gxE5qrcCy3A10DJW45o8EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXkERK/btsIlEzGYel/gxE5qrcCy3A10DJW45o8EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXkERK%2FbtsIlEzGYel%2FgxE5qrcCy3A10DJW45o8EK%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;1284&quot; height=&quot;622&quot; data-filename=&quot;stash7.png&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;622&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;적용과 동시에 스택에서 해당 stash를 제거하기 위해 pop stash 메뉴를 사용해 보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash8.png&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnCgs/btsIkdpJHdK/oXuK7jZqDGWvMpPBaml7Z0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnCgs/btsIkdpJHdK/oXuK7jZqDGWvMpPBaml7Z0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnCgs/btsIkdpJHdK/oXuK7jZqDGWvMpPBaml7Z0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlnCgs%2FbtsIkdpJHdK%2FoXuK7jZqDGWvMpPBaml7Z0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;665&quot; height=&quot;736&quot; data-filename=&quot;stash8.png&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;736&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;pop 할 stash 목록을 선택한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash9.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l72e3/btsImdO8yMB/cni47Ifp7YMnnjnPJJIHq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l72e3/btsImdO8yMB/cni47Ifp7YMnnjnPJJIHq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l72e3/btsImdO8yMB/cni47Ifp7YMnnjnPJJIHq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl72e3%2FbtsImdO8yMB%2Fcni47Ifp7YMnnjnPJJIHq0%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;606&quot; height=&quot;64&quot; data-filename=&quot;stash9.png&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;64&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash10.png&quot; data-origin-width=&quot;227&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0fx3w/btsIkgNytdg/q4AtdK6169Zi110Ur1e8BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0fx3w/btsIkgNytdg/q4AtdK6169Zi110Ur1e8BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0fx3w/btsIkgNytdg/q4AtdK6169Zi110Ur1e8BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0fx3w%2FbtsIkgNytdg%2Fq4AtdK6169Zi110Ur1e8BK%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;227&quot; height=&quot;220&quot; data-filename=&quot;stash10.png&quot; data-origin-width=&quot;227&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stash11.png&quot; data-origin-width=&quot;1465&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/di9yKU/btsIlglxN7O/xRJyocZVA0PCkN0LGv6Oj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/di9yKU/btsIlglxN7O/xRJyocZVA0PCkN0LGv6Oj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/di9yKU/btsIlglxN7O/xRJyocZVA0PCkN0LGv6Oj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdi9yKU%2FbtsIlglxN7O%2FxRJyocZVA0PCkN0LGv6Oj1%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;1465&quot; height=&quot;620&quot; data-filename=&quot;stash11.png&quot; data-origin-width=&quot;1465&quot; data-origin-height=&quot;620&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;</description>
      <category>  이것저것/Git</category>
      <category>git</category>
      <category>stash</category>
      <category>vscode</category>
      <author>najiwon</author>
      <guid isPermaLink="true">https://najiwon.tistory.com/104</guid>
      <comments>https://najiwon.tistory.com/104#entry104comment</comments>
      <pubDate>Wed, 3 Jul 2024 01:05:04 +0900</pubDate>
    </item>
  </channel>
</rss>