<?xml version="1.0" encoding="UTF-8" ?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
	<channel>
		<title>Home</title>
		<link>https://me.hoto.dev/</link>
		<description></description>
		<atom:link href="https://me.hoto.dev/rss" rel="self" type="application/rss+xml" />
		<language>ko</language>
		<pubDate>Fri, 08 May 2026 21:21:03 +0900</pubDate>
		<generator>Rhymix</generator>
			<item>
			<title>비속어 마스킹 기능</title>
			<link>https://me.hoto.dev/portfolio/452</link>
				<description>&lt;h2&gt;&lt;strong&gt;개요&lt;/strong&gt;&lt;/h2&gt; &lt;p&gt;- 사용자가 직접 보기 싫은 단어를 회원 정보에서 설정.&lt;/p&gt; &lt;p&gt;- 타 회원이 내가 설정한 단어를 포함한 게시글을 업로드 할 경우 &amp;quot;필터링 한 단어가 포함된 글입니다.&amp;quot;라는 제목으로 대체되어 표시되며, 그 글에 들어가려고 할 경우 한 차례 더 경고창이 나타남.&amp;nbsp;(확인을 눌러 들어갈 수 있음)&lt;/p&gt; &lt;p&gt;- 회원을 차단하는 기능이 아니라, 게시글을 마스킹하는 기능입니다. 따라서 기존의 욕설 필터링이나 회원 분리와는 다른 기능입니다.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;이미지&lt;/h2&gt; &lt;p&gt;1. 회원 메뉴에 &amp;#39;사용자 단어 필터&amp;#39; 선택&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;스크린샷 2024-11-03 오후 8.27.35.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/11/03/951ae3492df42cb0f0107a5d09a98cc9.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;2. 사용자별 단어 필터 설정 페이지&lt;/p&gt; &lt;p&gt;- 필터링 기능 사용여부&lt;/p&gt; &lt;p&gt;- 필터링 단어 입력&lt;/p&gt; &lt;p&gt;- ink 레이아웃에 맞는&amp;nbsp;디자인 적용 완료&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;스크린샷 2024-11-03 오후 8.29.16.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/11/03/732942bbdc73232b185a98e0f2cbf0c5.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;3. 게시글 목록에서 필터링 된 단어가 포함된 글 클릭시 메세지 출력&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;스크린샷 2024-11-03 오후 8.30.19.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/11/03/fabac8a0d1512623bbd3317ab16d581e.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;4. 필터 모듈 설정 페이지&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;스크린샷 2024-11-03 오후 8.33.12.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/11/03/7e02659e62977e765e4b96f5e9e4e06a.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>외주</category>	<category>PHP</category><category>Rhymix</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/452</guid>
	<comments>https://me.hoto.dev/portfolio/452#comment</comments>			<pubDate>Sun, 03 Nov 2024 20:35:19 +0900</pubDate>
		</item><item>
			<title>ChatGPT를 이용한 게시글 태그 추출</title>
			<link>https://me.hoto.dev/portfolio/443</link>
				<description>&lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/06/30/c62cc5b4d7ad9ae6dd6ac05ff393e886.png&quot; style=&quot;width: 500px; height: 324px;&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;게시글 등록시 게시판 태그를 자동으로 생성해주는 모듈이다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; class=&quot;am-image-edit-ready&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/06/30/49cbc3dab4f65a024f6099c67446512a.png&quot; style=&quot;width: 500px; height: 328px;&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;게시글당 약 1천 토큰이 사용되며, OpenAI API 테스트 결과 약 5건당 0.01$가 사용된다.&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>Rhymix</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/443</guid>
	<comments>https://me.hoto.dev/portfolio/443#comment</comments>			<pubDate>Sun, 30 Jun 2024 21:02:32 +0900</pubDate>
		</item><item>
			<title>타임라인 모듈 - 조건 만족 시간대별로 리스트업</title>
			<link>https://me.hoto.dev/portfolio/439</link>
				<description>&lt;p&gt;&lt;img alt=&quot;image.png&quot; class=&quot;am-image-edit-ready&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/06/30/82129b822e1779b78a5f954a396530b0.png&quot; style=&quot;width: 300px; height: 300px;&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;타임라인 모듈에서 설정해둔 조건을 만족한 시간 순서대로 게시글을 보여주는 기능이다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;기존 타임라인 모듈은 게시글 작성 시간대로 보여줘, 오래된 글이 추천수를 만족한 경우 최신글 위로 올라오지 못해 묻히는 현상이 있다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ex)&lt;/p&gt; &lt;p&gt;10시) 게시글 A 작성&lt;/p&gt; &lt;p&gt;11시) 게시글 B 작성&lt;/p&gt; &lt;p&gt;12시) 게시글 A 추천수 20개 달성&lt;br /&gt; 13시) 게시글 B 추천수 20개 달성&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;최종 출력 순서&lt;/p&gt; &lt;p&gt;- 게시글 B (13시 추가)&lt;/p&gt; &lt;p&gt;- 게시글 A (12시 추가)&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>외주</category>				<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/439</guid>
	<comments>https://me.hoto.dev/portfolio/439#comment</comments>			<pubDate>Sun, 30 Jun 2024 20:59:54 +0900</pubDate>
		</item><item>
			<title>원하는 기간만큼 결제 &amp; 글 쓰기</title>
			<link>https://me.hoto.dev/portfolio/436</link>
				<description>&lt;p&gt;1. 글쓰기 버튼 클릭시 결제 페이지로 이동&lt;/p&gt; &lt;p&gt;2. 결제 페이지에서 원하는 기간 선택&lt;/p&gt; &lt;p&gt;3. 결제 완료 후 글쓰기. 값은 확장 변수로 게시글에 대입.&lt;/p&gt; &lt;p&gt;3-1. 만약 결제 완료 후 창을 닫았을 경우, 다시 글쓰기 페이지에 들어가면 해당 결제 데이터와 연동하여 이어서 글 쓰기 가능&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;스크린샷 2024-05-19 오후 9.20.25.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2024/05/19/9827ff9fac835963f508564fb20810eb.png&quot; /&gt;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>외주</category>	<category>Rhymix</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/436</guid>
				<pubDate>Sun, 19 May 2024 21:22:53 +0900</pubDate>
		</item><item>
			<title>접속자 유량제어 시스템</title>
			<link>https://me.hoto.dev/portfolio/422</link>
				<description>&lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/12/19/99288f52b90bdd525b5a2374e99ed392.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://blog.naver.com/matthew218/222871549104&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;0&quot; id=&quot;emcard0&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://blog.naver.com/matthew218/222871549104&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=alJ1b2ZIWFlyR2ZHczBCOTJFWkp3MUJqYnMwT0l5UHpxVEVtTC9XdXoxZjF5SWFWOTF2MFJ3dnVhakIwTjBYY3FONVVXeUN3SDljWUN0MjJqNHNlWVE5Z0pCcXlBYXdYenRCN2xzeGlhVG11WnVROWhsV1czN1htTndQeCtPNFNIUWlWUGJrUFdNdmU1SzlPL2ViRFlvay9EQW4xVE1lMysxQmxoRGt2ZTljaWN4TTJyTG1FZFlKbitrMGFodTVnWk8vMWVldzBVMWVneTdRNGkrSUNFMlRRaXRtc2g4dGJLL2ZyUnB6b2paSHVsRnluWE9zNUpMem9Nam1ORmRnMA&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/222871549104&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;접속자 유량제어 시스템 테스트 #1&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;테스트 시스템 : Oracle Cloud A1 - 1core 6gb ram (Seoul) 평균 핑 : 17.03 ms 테스트 도구 : JMete...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/222871549104&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=dUhLRDhIc3pwOVdteVlHTzNNN1Z0dlFrMXVLU0RCY0VVRWVoT2cxcnc5enFtS2JmMDhFL1BwTDdnWDdENGhmSQ&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://blog.naver.com/matthew218/222871549104&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://blog.naver.com/matthew218/222871549104&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022 &lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://blog.naver.com/matthew218/222872110553&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;1&quot; id=&quot;emcard1&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://blog.naver.com/matthew218/222872110553&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=alJ1b2ZIWFlyR2ZHczBCOTJFWkp3MUJqYnMwT0l5UHpxVEVtTC9XdXoxZXNydFpnaDJmczF3b2ZpREZxenp5TnM4NVFIZXJYNktNbU9lMWdPZHc0UTFEUFpvd0wzM0xUc0p1RVpjYWNjMVgrWnhZRkVJcFJaTHZuMmtvU2FDbDBUQzlhQVJRbEVqS3ZRTFVTeW5uV0RRQ3ZHVVFxSlI4N1BhaFRUa0R6NFRYb0h3d0FsSXEvYWdWRTFIdkt6Y0NsRmgycDFNTUdCejFPZnRXSEhkL1o0OTN2cmUydDN1aWpBd0dkVDFWNjZENG5wVjFvOVBLKzZLRUtUNjBmUlNkMA&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/222872110553&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;접속자 유량제어 시스템 테스트 #2&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;Byte String Copy 문제 Golang에서 Byte를 String으로 바꾸거나, 그 역변환을 취할 경우 메모리가 복...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/222872110553&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=dUhLRDhIc3pwOVdteVlHTzNNN1Z0dlFrMXVLU0RCY0VVRWVoT2cxcnc5enFtS2JmMDhFL1BwTDdnWDdENGhmSQ&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://blog.naver.com/matthew218/222872110553&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://blog.naver.com/matthew218/222872110553&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022 &lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/12/20/922f0771382aa5e5f77b56cdca774b4e.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/12/20/eef0b12c5f707f38d4393bb429c7e162.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/12/20/95afbe8d61bcdcd5fafba127f9b7f0f7.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/12/20/36419530dc4fc9e4972fd306962deab7.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://youtu.be/rqw-wkacHqg?t=1741&lt;/p&gt; &lt;div class=&quot;emcard vctor em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;2&quot; id=&quot;emcard2&quot;&gt; &lt;div style=&quot;left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;&quot;&gt;&lt;iframe allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture;&quot; allowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;https://www.youtube.com/embed/rqw-wkacHqg?rel=0&amp;amp;start=1741&quot; style=&quot;top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>Go</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/422</guid>
	<comments>https://me.hoto.dev/portfolio/422#comment</comments>			<pubDate>Mon, 19 Dec 2022 20:38:15 +0900</pubDate>
		</item><item>
			<title>비밀번호 취약점 체크 애드온</title>
			<link>https://me.hoto.dev/portfolio/387</link>
				<description>&lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-7ae76830-85f4-46af-836d-a34ad8acbae5&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-8e618b7e-f005-4ccf-8f05-7936fceee2fe&quot; style=&quot;&quot;&gt;https://haveibeenpwned.com/Passwords&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;0&quot; id=&quot;emcard0&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://haveibeenpwned.com/Passwords&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=YnlWaEswSmcxWm9JRjFUQ1p4cllOQzdhM2RDeVM5dVZlSGtObXN0ay9Gem05ZEJmQVJ0b3BHMGlBam5mTG5XOTBZaWFvOXcrM04yMHc0Zlg1eFRLN0E9PQ&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://haveibeenpwned.com/Passwords&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Have I Been Pwned: Pwned Passwords&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;Have I Been Pwned allows you to search across multiple data breaches to see if your email address or ...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://haveibeenpwned.com/Passwords&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=YnlWaEswSmcxWm9JRjFUQ1p4cllOQ3FPMTVnbStJUU9VUVV6QVdONy8yT3djN3NhU3E0NnJKSVI0OXlEV09ZTA&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://haveibeenpwned.com/Passwords&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;aveibeenpwned.com&lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-52a6186c-63d9-4af5-8749-958f4c1ed4e3&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-b4a4ec6b-1d9d-42de-b492-c3863b71e795&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c8d4d20b-e986-4e3b-bb5b-9543e8a64b80&quot; style=&quot;&quot;&gt;비밀번호가 유출되었는지 알려주는 사이트이다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/67b42902c6fcde019dbbe083241b248d.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c2fdb6d4-e9f0-4c6c-bea2-e99f6e3f0aef&quot; style=&quot;&quot;&gt;거대한 데이터에 구미가 댕겨 이걸 사용해 비밀번호가 유출이 되었는지 회원가입 과정에서 알려주는 프로그램을 짜보고자 했다.&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/d2d3b7e7a563679cd67d155bad7c6613.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-5f1891fe-cf7a-457d-a4af-2a50dd6f1aaf&quot; style=&quot;&quot;&gt;압축을 풀어보니 25GB 상당의 거대한 데이터가 나왔다.&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/d6f6172ed0c4c9c4344e2bbead100b4b.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-d1391492-a4ee-402b-b072-ed35e35ad823&quot; style=&quot;&quot;&gt;너무 거대해 일반적인 텍스트 에디터로는 열리지 않아 HEX 에디터를 사용해 열었다.&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/f8eb741a0a9f2d0df197f9571e166402.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-02264b71-fb44-4087-81b2-8da52ec2cfbb&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-e7b2a0fb-e342-4cc7-91ac-1d9d6a482da9&quot; style=&quot;&quot;&gt;데이터 구조는 이와 같게 생겼다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-27ba580e-8fb0-4550-8c12-2bdd12412882&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-502abe18-6fb1-4b7a-9a48-fe2c48cb2102&quot; style=&quot;&quot;&gt;SHA1(40byte):유출횟수(int)&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/3ca76f4abe20e9d6f11ed2eb63529849.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-d3014a63-3771-44b6-8d19-a0591b8943d5&quot; style=&quot;&quot;&gt;이를 분석하여 DB에 직접 넣어주었다. (초당 2천줄 꼴로 들어갔다.)&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;+) 데이터를 집어넣을때는 인덱스를 먼저 넣을경우 엄청 느려진다..&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;데이터를 전부 집어넣고 인덱스를 후에 설정해줘야한다.&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/3f5b23b8e6205abe289d61f9b502ec70.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/e293b8815b6f129c901892507ea5fc82.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-6e433c6d-ed5a-496d-ac67-d723fa291acd&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-3397012e-6e68-4948-8629-83dd05d0d4ba&quot; style=&quot;&quot;&gt;INSERT는 오래걸리더라도 바로바로 원하는 값이 존재하는지 찾아주어야 하기에 약간의 생각을 하였다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-40a0b0c9-140e-48ba-8e24-e0e05c56130d&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-38e2c881-e2b2-4ffb-bad0-3dcf64c39b8f&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-6ebff54c-3eca-4914-b1fd-51692803ab70&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-23bea281-7e13-4363-aed0-63db3a025196&quot; style=&quot;&quot;&gt;SHA_FIELD 항목에 앞 다섯 글자를 빼내어 인덱스로 해준다면 LIKE 를 사용해 빠르게 쿼리를 할 수 있을것이라고 생각을 하였고, 이를 위해 SHA_FIELD(5) 만큼 빼내어 인덱스로 지정해주었다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-159d333d-c6e0-4744-a0f6-ed40a14b1e3c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-541470bc-ce0e-4fd5-b450-54584c798dfe&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-eee69c78-4a9a-4156-ad28-32c0dbbdd548&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-ce63d645-8203-4819-87cd-1bfbccebe176&quot; style=&quot;&quot;&gt;인덱스는 해당 컬럼의 분산도(카디널리티)가 높을 수록 유용하게 쓰이기 때문에 해시값에 적당하다고 판단하였다.&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;hr /&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-dbd137f1-4378-4a9d-a519-e41f0c8aeba1&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-009707be-fd6f-4235-9803-ca82ac7bb649&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-09e3ee2c-23fa-4056-8aef-dffcd947d55c&quot; style=&quot;&quot;&gt;실시간으로 DB에서 해시값을 가져와야 하기 때문에 쿼리가 매우 중요하다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-f1722ff4-cb26-46f0-903b-a2f3ea0e6571&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-ef9b6ca5-f1c9-458c-becd-b73541593638&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-65b3827c-7d40-4a6c-9e4b-8022a77af404&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-561db97e-e1f3-49ea-b7be-b5bd12171fa6&quot; style=&quot;&quot;&gt;먼저 쿼리를 가져오는 부분을 코딩할 때 데이터들은 INSERT작업중이였고 아직 COMMIT이 되지 않은 데이터들이라 불러오는 것이 불가능 했다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-0a6bfbc9-3b2a-4972-9b11-a57fbb323d2b&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f1940686-13ae-46b5-8841-4a7562816abc&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-b93a141d-17c8-4652-a57b-5aab1d60512b&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-1585d387-4664-4774-97d7-09e9d6ebb2b7&quot; style=&quot;&quot;&gt;이는 그냥 몇 일 기다리면 해결되는 문제였으나 나중에 많은 커넥션이 동시에 들어오면 DB가 block상태가 되어 뻗어버리는 일도 일어날 수 있다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-3da4d6e9-e0a5-4ee8-9d0b-7ae1bf83ff00&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c76d75d2-fea9-4c66-b28b-467fc4f799a6&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-778947f3-39a2-42a6-9b8f-e0b212009489&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-711e50af-ec4a-499b-ab81-17ab9cf05618&quot; style=&quot;&quot;&gt;위 두 문제를 해결하기 위해 트랜잭션 레벨이라는 것을 알게 되었다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-82ceb71d-6919-48e7-94d6-995208d5b40c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-a5c3038d-417a-4fd8-9f3c-f2bfcf97ab64&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-table se-l-default __se-component&quot; id=&quot;SE-75b29658-0d73-46e3-98b6-3e4ae4022681&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-table se-l-default se-section-align-&quot; style=&quot;width: 100%;&quot;&gt; &lt;div class=&quot;se-table-container&quot;&gt; &lt;table class=&quot;se-table-content&quot; style=&quot;&quot;&gt; &lt;tbody&gt; &lt;tr class=&quot;se-tr&quot;&gt; &lt;td class=&quot;se-cell&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;width: 26.8%; height: 43.0px; &quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-ef79fe8a-3894-4cd0-9e22-d12ede2540ae&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs-fs15 se-ff- &quot; id=&quot;SE-b335fd2e-375b-4946-bac9-287a6fe172c9&quot; style=&quot;&quot;&gt;&lt;b&gt;READ UNCOMMITTED&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/td&gt; &lt;td class=&quot;se-cell&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;width: 73.2%; height: 43.0px; &quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-c202eea6-251b-449b-8f77-4deedf57748f&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-cdb26862-87a0-4066-a277-58c32d283a1b&quot; style=&quot;&quot;&gt;1) COMMIT 되지 않은 데이터에 다른 트랜잭션에서 접근할수 있다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-20aaf28a-4093-4857-a5bf-12173170c8ef&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-d3b80b20-4ecc-418a-86b2-7295aa68e869&quot; style=&quot;&quot;&gt;2) INSERT, UPDATE, DELETE 후 COMMIT 이나 ROLLBACK에 상관없이 현재의 데이터를 읽어온다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-57f8e986-1607-4e54-a954-ec949de4b43e&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-a75fff71-9984-4284-83af-9f56412900cf&quot; style=&quot;&quot;&gt;3) ROLLBACK이 될 데이터도 읽어올 수 있으므로 주의가 필요하다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-59cc6263-6f66-4eed-97d5-086b462d81a7&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-70d1d6cd-5f48-4b91-ae42-7150d7099c58&quot; style=&quot;&quot;&gt;4) LOCK이 발생하지 않는다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&quot;se-tr&quot;&gt; &lt;td class=&quot;se-cell&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;width: 26.8%; height: 43.0px; &quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d21e0119-21b8-439f-889e-81768ddd6374&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs-fs15 se-ff- &quot; id=&quot;SE-925e30ca-3d09-4028-9471-7f76ddac2b61&quot; style=&quot;&quot;&gt;&lt;b&gt;READ COMMIITED&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/td&gt; &lt;td class=&quot;se-cell&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;width: 73.2%; height: 43.0px; &quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-7c3e5123-ed10-474e-93b5-4104b19842db&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-3be955fb-f195-4fcf-8807-f700fe23d406&quot; style=&quot;&quot;&gt;1) COMMIT 된 데이터에 다른 트랜잭션에서 접근할 수 있다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-ddb912b1-ff71-4579-9863-4073a74ae29a&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f1fb7278-46a3-4535-b3ca-1551de68ffed&quot; style=&quot;&quot;&gt;2) 구현 방식이 차이 때문에 Query를 수행한 시점의 데이터와 정확하게 일치하지 않을 수 있다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-0fe4f759-2a24-4f50-9735-d97969160108&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f6f4d652-2911-4f08-bef9-2eeaffb52e43&quot; style=&quot;&quot;&gt;3) LOCK이 발생하지 않는다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-989fc41e-44e7-4254-8989-342162a9d956&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-46ac562a-0e2d-48bd-8e27-bc478e15b1ef&quot; style=&quot;&quot;&gt;4) MySQL에서 많은 양의 데이터를 복제하거나 이동할 때 이 LEVEL을 추천한다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&quot;se-tr&quot;&gt; &lt;td class=&quot;se-cell&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;width: 26.8%; height: 43.0px; &quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-00414154-f810-46fc-a4ed-5a70ccca5b65&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs-fs15 se-ff- &quot; id=&quot;SE-611f54c1-9c16-4def-bc43-914677067c63&quot; style=&quot;&quot;&gt;&lt;b&gt;REPEATABLE READ&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/td&gt; &lt;td class=&quot;se-cell&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;width: 73.2%; height: 43.0px; &quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-9b1314cb-3fd3-47dd-93e9-518b806ee904&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-93edca4c-2b46-4ef9-bcab-41e62f9082b5&quot; style=&quot;&quot;&gt;1) Default LEVEL이다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-9a5cff5a-2dab-4569-9a7d-f45e4b7623b2&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-b224ba72-8db0-47dd-a110-93f4a6972508&quot; style=&quot;&quot;&gt;2) SELECT시 현재 시점의 스냅샷을 만들고 스냅샷을 조회한다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-928ccd91-49df-4166-81c2-ff9670ab67a8&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-6f743d25-8d6b-4012-95e3-0ba0f382a268&quot; style=&quot;&quot;&gt;3) 동일 트랜잭션 내에서 일관성을 보장한다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-a32ff703-98d7-4c72-b20a-d96d188cb444&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-ebc1333e-2211-47c3-8d51-5a8a4df5ab5d&quot; style=&quot;&quot;&gt;4) record lock과 gap lock이 발생한다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-4e6d2aaa-f802-4b7d-a4b0-9f44c2917a6f&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-283c4493-ef81-4b3f-a28a-05c89c75a257&quot; style=&quot;&quot;&gt;5) CREATE SELECT, INSERT SELECT시 lock이 발생한다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-0807206c-0c46-4133-879d-185a6afe1398&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-9179d2ec-8df3-4fbf-9127-c220fb424e55&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-847a304e-e41b-468b-b515-02ec6e58462e&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-50befa88-4a9a-41a1-a6b3-4a99a3093425&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-74411493-c90a-49e7-857e-2420dd389b92&quot; style=&quot;&quot;&gt;원래는 SELECT던 INSERT던 해당 상태를 스냅샷한 부분에서 데이터를 읽어온다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-5713deb2-740b-4ffc-9cd6-73c75457552b&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-849682b1-ae87-485b-99ce-7b19f9c93dc0&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-075d7986-d00d-48c6-9026-4ccdda1f1c00&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c433007a-145c-434c-9e6d-8c18cceb5cd9&quot; style=&quot;&quot;&gt;순차적으로 처리하기 위해서인데, 이렇게 되면 한 세션에서 데이터를 읽거나 쓰고 있다면 해당 DB는 블럭상태가 되어버린다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-c85b3d63-69e7-4669-9dc3-5c89a18089df&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-27095cf3-c885-4b9a-9ace-affb58ebaaa1&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-eed359ed-6dcb-4cad-92db-d3776ae571f1&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c40cfe99-1fc5-49d9-a00c-d7e1faae0b0e&quot; style=&quot;&quot;&gt;그러면 해당 DB에서는 블럭상태일동안 읽지 못하게 되고, 이를 해결하기 위해 READ UNCOMMITTED를 사용하기도 한다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d12c2eaa-03b0-4f41-9812-8ada975a81c8&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-943d24ec-da2f-41ef-bbe5-4cc60bd64484&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-fdf72971-cf27-419f-a3be-f62128c27bc5&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-e503b6de-544f-4afe-982b-6e9049fdc7a3&quot; style=&quot;&quot;&gt;물론 이렇게 해결하는것이 절대 좋은 방법이라고 할 수는 없으나, 내가 데이터를 저장한 테이블에 경우 INSERT가 초반을 제외하고는 없으며 단순히 읽기만 하면 되기 때문에 위 방법을 사용하기로 했다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-873b7ebe-2535-4e64-a7bf-b42c1682a35c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-09b77279-69c8-4308-9f49-a971f9e61904&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-code se-l-code_stripe __se-component&quot; id=&quot;SE-1eddac81-aedf-457b-b3fa-8e73dbe02bad&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-code se-l-code_stripe&quot;&gt; &lt;div class=&quot;se-module se-module-code se-fs-fs13&quot;&gt; &lt;div class=&quot;se-code-source&quot;&gt; &lt;div class=&quot;__se_code_view language-javascript&quot;&gt;&lt;span class=&quot;token se-code-constant&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;SESSION&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;TRANSACTION&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;ISOLATION&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;LEVEL&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;READ&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;UNCOMMITTED&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-b6ca35f2-8ff6-44a1-bf46-98d471502c9f&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-f00f045c-d236-43d9-abdd-8c7fa06c5ded&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-889ecf0c-b2c1-4cc6-a754-8bd173aa74c3&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-17e3995e-786c-4492-9b09-9637854c4e5e&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-2e82d647-1b3f-462c-a730-91f933d5a609&quot; style=&quot;&quot;&gt;위와같이 설정해주면 된다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-e50aa3f0-6b49-4e1e-9919-0f358a7d5b5c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-aba62889-c2ef-442f-9358-12ed842ea67b&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d979d157-2160-4c48-8cbe-712a723b46e8&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-71793aa7-e3dc-46c4-9290-ad6379db8298&quot; style=&quot;&quot;&gt;다음으로 데이터를 가져올때 쿼리이다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-code se-l-code_stripe __se-component&quot; id=&quot;SE-f5b6815a-b1c3-4401-a87d-039510515d56&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-code se-l-code_stripe&quot;&gt; &lt;div class=&quot;se-module se-module-code se-fs-fs13&quot;&gt; &lt;div class=&quot;se-code-source&quot;&gt; &lt;div class=&quot;__se_code_view language-javascript&quot;&gt;&lt;span class=&quot;token se-code-constant&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;SHA_FIELD&lt;/span&gt;&lt;span class=&quot;token se-code-punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;DATACNT&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;FROM&lt;/span&gt; PasswordHash &lt;span class=&quot;token se-code-constant&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;SHA_FIELD&lt;/span&gt; &lt;span class=&quot;token se-code-constant&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;token se-code-operator&quot;&gt;?&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-293fac34-9ea4-473c-8832-7b5635dc1e77&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-e1eaea24-ddfb-4fd1-b62a-299a5d42a21c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-05b25a58-0879-4ef0-8cb4-5ff1bfb7bf50&quot; style=&quot;&quot;&gt;위와 같이 SHA_FILED와 LIKE를 활용하여 인덱스를 탈 수 있도록 하였다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-e22d3425-8c6f-4c45-aa4b-c8c49bc92741&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-1ff581af-b576-41cf-8f6d-0e09023450ce&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-b056718e-47ce-46fc-95c9-f29724213f2a&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-8d807c26-a67b-47d5-9bf1-f3e3c88f4995&quot; style=&quot;&quot;&gt;&amp;#39;?&amp;#39; 에는 SHA 쿼리에 앞 5글자를 잘라낸 다음 뒷자리에 %를 썼음&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-800d93aa-410a-423f-8e20-49c22a1a7fa4&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-4f0c1e0f-2314-4961-85f4-fc00e46a6e84&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-5cb4cf10-121f-4932-ac1d-12d5a973dc5c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-bc595507-698e-4629-a169-04fd165aa61f&quot; style=&quot;&quot;&gt;ex) &amp;#39;ABCDE%&amp;#39;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-horizontalLine se-l-line1&quot; id=&quot;SE-db7a9f36-a362-495a-8555-151720c97f33&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-horizontalLine se-l-line1 se-section-align-&quot;&gt; &lt;div class=&quot;se-module se-module-horizontalLine&quot;&gt; &lt;hr class=&quot;se-hr&quot; /&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/6aabaeb6350eb082b6e52959819d2bee.png&quot; /&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-16ee5e84-b99a-46fb-8b68-c530ac1b118f&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-5ca82c99-dbc5-4d9e-8fe7-35bb631f45a4&quot; style=&quot;&quot;&gt;위와같이 check.php를 넣었다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-3c1cbeb6-8097-42ff-8a04-125eb4d629c1&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-02049e56-73b6-457f-816c-157ba4b0292c&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/f68ae8d267ae5f3e048ecfed64aae445.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-4fd2d0d2-0ed5-4d8b-91c4-79689d32be6a&quot; style=&quot;&quot;&gt;데이터를 가져오기 성공&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/87f29b7c3911fd0dd2ace3eea8ea7053.png&quot; /&gt;&lt;/p&gt; &lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-9d5a45fc-50ae-4be3-a9a0-f11a1bb63948&quot; style=&quot;&quot;&gt;JSON으로 보내주었다.&lt;/span&gt; &lt;hr /&gt; &lt;p&gt;※ 클라이언트&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/8a27d34d9ee18a0d431d629d04bf79f2.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-589c0a2f-d56e-4017-ae12-ecdd35b710af&quot; style=&quot;&quot;&gt;1차 비밀번호 체크&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/79f2344c21fe4444e93f682a6cf3de4d.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-d2e5d6be-ae8f-4e77-b950-36b42fa94e2a&quot; style=&quot;&quot;&gt;ajax를 통한 비밀번호 유출 확인&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;hr /&gt; &lt;p&gt;※ 결과&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/a004d90e3b9de4beba708c7b3957d6c8.png&quot; /&gt;&lt;/p&gt; &lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-2f1a40fd-29b9-439f-9aa8-5f4a458a4629&quot; style=&quot;&quot;&gt;기본적으로 비밀번호 폼은 위와같이 생겼다.&lt;/span&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/e60b80e70c45a590e012db17c4bc0455.png&quot; /&gt;&lt;/p&gt; &lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-2342ffa2-fe1b-4680-ae13-5082ebc1a804&quot; style=&quot;&quot;&gt;비밀번호 조건을 만족하지 못했을 경우 &amp;#39;비밀번호를 확인해주세요.&amp;#39; 라는 메세지가 나온다.&lt;/span&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;3.gif&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/748245315b97ab4c40eff66c5e5c76dd.gif&quot; /&gt;&lt;/p&gt; &lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-46b16491-0fa7-4322-a0ad-87eee2e58e0e&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-8703c3ea-a335-4d73-84b1-35cd4148ac50&quot; style=&quot;&quot;&gt;비밀번호 조건을 만족했을 경우 sha1 암호화를 하여 서버로 쿼리를 날리게 된다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-00fb2fe1-9d08-4727-8d7f-eb6578ba2538&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-d2304bd3-94c6-42a3-85a7-74c35aea2f26&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-7b5d4487-5371-403d-b391-fbe831f5941c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-46393ba5-5792-4aff-9607-9a49574cc641&quot; style=&quot;&quot;&gt;쿼리를 체크하여 비밀번호 해시값이 존재하면 &amp;#39;이 비밀번호는 위험합니다! 유출 횟수: xxx회&amp;#39; 와 같이 위험 메세지가 나온다.&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/60c0f3d85e0bb27091fbaf754e9c04bd.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-e04c17d3-b4ed-4281-b7f3-aa825fcde962&quot; style=&quot;&quot;&gt;그리고 안전한 비밀번호를 입력했을 경우 이 비밀번호는 안전합니다 라고 뜨며 초록색으로 바뀌게 된다.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;hr /&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/3d50a7411899bd9b8bfcf83aaded7a06.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/67581f1a8be736a86caeff53c45f82c0.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;4일간 데이터를 집어넣었다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/a9c1d88e06cb93e5a07fd7ca3af716ef.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;쿼리타임 0.2초&lt;/p&gt; &lt;hr /&gt; &lt;p&gt;https://xetown.com/tips/1591828&lt;/p&gt; &lt;div class=&quot;emcard&quot; contenteditable=&quot;false&quot; data-id=&quot;0&quot; id=&quot;emcard0&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://xetown.com/tips/1591828&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=bStlY3J1TkRVemM3VDArNElTQ0RkYUFLSTBURjhDblhpZC80UUh4enM0SUg5S01PUG0zOGNhTktyeGpuQkRLZTkzVERBVkVwcmJ5a2tESDV3WGtNcUdMcWQxc0NVenBEMUtYanFwUVp6bGVOMXh5OTZxdlpNamFVdnUxSXlkQm0&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://xetown.com/tips/1591828&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;비밀번호 취약점 체크 애드온&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;https://xetown.com/topics/1591321 위 글을 보고 도움이 될 것 같아 만들었습니다 기본적으로 회원가입 폼...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://xetown.com/tips/1591828&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=bStlY3J1TkRVemM3VDArNElTQ0RkYUFLSTBURjhDblhpZC80UUh4enM0THVFL3hqYWZKaUw1L2lrSUFYSzdVK1FuYzFOUm5VeURPM2Q1U1RlN1BubThWN1hST001VHRFOHB1eGJlK29ha289&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://xetown.com/tips/1591828&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;XETOWN&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://xetown.com/tips/1591828&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;리버스 &lt;/a&gt;&lt;span class=&quot;t&quot;&gt; / 2021-07-12&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>XpressEngine</category><category>Rhymix</category><category>PHP</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/387</guid>
	<comments>https://me.hoto.dev/portfolio/387#comment</comments>			<pubDate>Mon, 14 Feb 2022 21:38:56 +0900</pubDate>
		</item><item>
			<title>배터리/시간 호버 표시 프로그램</title>
			<link>https://me.hoto.dev/portfolio/369</link>
				<description>&lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/1d44729e5b2826209bbbaba697af6218.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-f816543a-064b-48bf-ae80-a729cb633011&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-02f968d1-87e9-47bf-bafb-efc1bd1954ae&quot; style=&quot;&quot;&gt;먼저 디자인은 위와같이 정했다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-779caf15-89dc-4884-a6e9-e7dbeb9c72c8&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-3a9c51bf-345f-4d77-aadd-0351a79c7442&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-6699184c-05d8-44fe-a312-cb23ff7ba456&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-d169b532-8f1e-4710-a93d-601cbc276ddb&quot; style=&quot;&quot;&gt;처음엔 배경도 투명하게 했다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-4a2f96a7-c774-4df2-9388-76abdbfbb7f4&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-e9f4dc3b-6396-4830-8c69-8a4c5ddf82cc&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-c5122608-529e-4503-9ba3-8fd1e4ec6540&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-5394b041-8761-48de-bcce-4aa2ac1d6ec4&quot; style=&quot;&quot;&gt;그래서 배경없이 글자만 나와서 방해되는 요소가 거의 없었다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-c9112d60-5b16-496f-b0eb-8f1c592287f3&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-0e0f6c33-c920-49ea-92fa-983bc3651767&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-8a2d7390-0248-48d3-a9f5-c21ae1274bd8&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-7e09f665-38b4-47fd-8609-b6aeae77d035&quot; style=&quot;&quot;&gt;다만 가독성이 별로였고, 폰트 테두리가 이상하게 더러워서 심플한 약 민트색 배경을 넣었다.&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/fbfd85965b7517acd181885bff606609.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-0af4eac0-4e2d-4cc8-9c27-cf4c56fdb471&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-d24744ad-f631-42e3-b73e-402f2a0b5f0d&quot; style=&quot;&quot;&gt;배터리 상태는 위와같이 구해왔다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-4957d553-6492-497d-b452-c0a9506d7dbf&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-41d7449d-f013-4128-8a0f-16661f0f633d&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-89890b07-a8fb-41dd-ab48-d266ecbcebc6&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-e5647cb5-963b-4a0d-8524-3d0f48f4fe0d&quot; style=&quot;&quot;&gt;신기하게 ObjectQuery라는것을 알게 되었다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-6d2a906f-653a-44cd-b222-f8e7560aeb55&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-3e1bbfd9-850d-4ec4-9803-70f1892644f6&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-c3572565-651b-48ff-9785-25b0dc6b3c2a&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c539eafe-0002-4618-872a-48243008f8c0&quot; style=&quot;&quot;&gt;윈도우 시스템의 데이터를 저장하는 DB라는데, SQL문으로 가져올 수 있다는게 신기한거 같다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-26e7edac-30e8-4487-abaf-6f34172b0b16&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-914382fd-8c09-41ec-9602-ee9d27fffe24&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-5d600506-f758-4d1f-a1d7-349a5d23f2cb&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-0ec79b36-c8f2-45a3-b767-a925bb27dacf&quot; style=&quot;&quot;&gt;확실히 윈도우 프로그래밍은 C#이 막강한거 같다&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;hr /&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/d3d363fa19800b077ff96865022bc649.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-F2A7EE25-9FB8-4D36-9CAA-A75E00C4A230&quot; style=&quot;&quot;&gt;위 상태는 충전기를 꼽지 않은 상태&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/1fc33a64ba2cce20c5cc1e7d3e857cb3.png&quot; /&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-F2960A8A-1023-4760-9FB9-B83AFC68C7D4&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; style=&quot;&quot;&gt;위와같이 약간 진하게 변경되면 충전기가 연결된 상태이다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-B4E9167C-4996-498B-B356-F79BC553289C&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-923AA3A6-CD86-4E6E-A2A1-F6255F6681AA&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-2CAFCBF3-1670-4EC7-92C8-A8A5AA12817B&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-3A3DE377-D2A2-4444-B487-484D658425C3&quot; style=&quot;&quot;&gt;다만 정상적으로 연결되었는지, 아니면 낮은 전류로 충전되고 있는지는 알 수 없다.&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/3e58e50dd6b41622774f4d85c0bcaa26.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-98BF769F-2386-412A-8463-67B017D53B40&quot; style=&quot;&quot;&gt;잠시뒤 위와같이 붉은 색으로 변경되면 낮은 전류로 충전되고 있다는 뜻이며&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/5ca6eb02a323de4b72784de46cb571f1.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align-left &quot; id=&quot;SE-EC5D79C1-21BF-4799-B54C-7A81C346C434&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-F646FD2A-F5E6-491F-BC30-D7536BBEDB94&quot; style=&quot;&quot;&gt;초록색으로 변경되면 정상적으로 충전이 되고있다는 소리다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align-left &quot; id=&quot;SE-D03935C7-03FF-4D8B-BE7F-3ABD13A9BA56&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-EC313E7E-9C2D-4377-9E91-7ABE430AE0FC&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/693a6e85d3b3a432f3ed3dfb8908cb9b.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-0CC51B02-4AAF-44B9-BD2E-F1BE67303C3D&quot; style=&quot;&quot;&gt;1.2A 가까이 나오면 정상 출력이며&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/f1ed07108690b64e24fa4306f00057a9.png&quot; /&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-701ED6FA-2939-4D29-86B0-1D14CF7DD496&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-35ABE7AC-90BD-438E-A30C-000A49D711B5&quot; style=&quot;&quot;&gt;이렇게 0.2A 이하로 나오면 비정상 출력이다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-0B8DF15F-A88D-4D0D-910A-545DB4D60305&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-7036E2B6-7F1A-4DAB-844F-7024FB0255E4&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt; &lt;hr /&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-9547FF7F-F2D6-4EC3-BAF4-580B8E51A839&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-E90F883C-A31C-4045-AF67-B0322681950C&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-CACD3E4B-61D9-4381-AB26-A5C2F5FE8DD2&quot; style=&quot;&quot;&gt;C# 문서를 찾아보니 배터리 충전 전류를 알아볼 수 있는 방법이 없어 보였다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-B8F8BA9C-BAAA-47D7-B4EF-DFF98D402390&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-13763414-18AA-4CE7-80E2-AF0727D2CAAD&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-B51B0483-387B-4AB1-AF70-FB10D7C65944&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-6E02AD55-046D-42D8-BD5B-288107EB4810&quot; style=&quot;&quot;&gt;그래서 배터리 충전량으로 분기를 하였다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-D52871B8-1B33-409D-AE55-5BD9D0C3B46D&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-944C30AE-B8E5-486E-9061-70D585CBA3B5&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-53EBC2C4-E708-4B5B-98DD-4948457F0CFA&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-BF072F37-82F3-4712-81D8-2F4FAAF90420&quot; style=&quot;&quot;&gt;충전기를 연결했는데 배터리가 줄어들면 저속 충전이며, 충전기를 연결해서 배터리가 늘어나면 정상 충전이다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-28B9B2D8-8534-4C29-86E2-520FB528EDB2&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-AAFBE729-1BCC-43AE-84A6-50F6CA62B547&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-2DF1DA76-D3DC-4B44-B1CA-0E240CA84748&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-E674EC3C-2B03-4DA7-8F64-EE9176764F79&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-4F6ACB54-CBB3-463B-8C79-E7D69C59D8EE&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-E6255BDA-BBF4-41EF-BCA6-F16FA2032D39&quot; style=&quot;&quot;&gt;커밋:&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-129ED83C-E0CB-4E17-AAE7-9C79D1454DF9&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-267B7396-B949-4B2F-BB69-37B09BF0DAEA&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-CCCFBC8E-0B5B-465E-B4F9-AA92A23E44FF&quot; style=&quot;&quot;&gt;&lt;a class=&quot;se-link&quot; href=&quot;https://github.com/Waterticket/BatteryOverlay/commit/fa81e34d90a7c40e30610a01ef50450c9b1a602d&quot; target=&quot;_blank&quot;&gt;배터리 충전량에 따라 분기 &amp;middot; Waterticket/BatteryOverlay@fa81e34 (github.com)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;hr /&gt; &lt;p&gt;+) 추가로 제작한 충전기&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://blog.naver.com/matthew218/222419669887&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;0&quot; id=&quot;emcard0&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://blog.naver.com/matthew218/222419669887&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=alJ1b2ZIWFlyR2ZHczBCOTJFWkp3MUJqYnMwT0l5UHpxVEVtTC9XdXoxZVYyY3hQV3B6RGo0dWZLYVBoZ0o3UytnUlVRWW55a0pwbmhoNjl3TnUrdXlKY1pQaUh2MEE5QTFrOGNURk5INXVoZlZIdE8xRUdnZXlyL0IyYVhhZndDc3hpZTFkZGFKRGF0MnpCNGovNXZ5VnhYd1pKNm96VHJMeHEzckZqbm5qRnNubXlXaDFZczBLTFdILzJZcm1iVkFnbDh4U0I4OFNBRmRIM2p4SE1xSEN6VzJ1cVRlNWpEUDkrcXhPdWRBdDlTVFkyajNQWHA3dUlmbWpzUXZMMTQ3dWpWYUZsQVoyUHlLdVRnZ0VyR0E9PQ&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/222419669887&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;충전기 제작&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;다이소산 USB 3.0 연장케이블 을 잘라서 +, -극을 벗겨주었다 그리고 해당 선만 남기고 절단 꼬다리는 ...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/222419669887&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=dUhLRDhIc3pwOVdteVlHTzNNN1Z0dlFrMXVLU0RCY0VVRWVoT2cxcnc5enFtS2JmMDhFL1BwTDdnWDdENGhmSQ&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://blog.naver.com/matthew218/222419669887&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://blog.naver.com/matthew218/222419669887&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022 &lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>C#</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/369</guid>
	<comments>https://me.hoto.dev/portfolio/369#comment</comments>			<pubDate>Mon, 14 Feb 2022 21:25:12 +0900</pubDate>
		</item><item>
			<title>유동 IP 주기적 체크 시스템</title>
			<link>https://me.hoto.dev/portfolio/350</link>
				<description>&lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-4fdb05ee-ee20-41d7-b195-493631c91cc9&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-cb694d8b-13d2-4850-b070-1a5111a00033&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-9f973489-411d-4aa1-867c-e0ac38b7f2d8&quot; style=&quot;&quot;&gt;홈서버는 구성하기 매우 어렵다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-e2bae9dc-af6b-4b58-8527-fcf3e4082b18&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f6dab97b-8e8e-4c29-976d-8d6c8d90f74f&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-92b55a76-3593-4a4b-b19e-4bb7d4a00d1c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-2635eeb1-360f-4155-8f09-3f6057188827&quot; style=&quot;&quot;&gt;공유기도 잘 따라줘야 하고, 네트워크 상황도 받쳐줘야 하고..&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-72cd3956-eab7-4f36-b3a9-cdcd2a605cec&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-def06a02-e5da-46b0-9612-624ebe81245c&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-235661c9-23bc-44b9-8868-d887c70df2fc&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-181bcb7a-d5c1-4b14-814d-4237dc7954ee&quot; style=&quot;&quot;&gt;만약 이 모든 환경이 잘 맞아서 어째저째 구성했다고 가정하자&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-944aabbe-27a3-4738-97eb-67e16654b5b1&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c953f6b7-b527-4048-b345-35b8833f0ec3&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-ec5772e5-8d4b-4c78-b332-0d298a443a64&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-86da6c21-e017-455d-9b61-3949244edba6&quot; style=&quot;&quot;&gt;이제 문제는 유지 보수로 넘어간다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-b9a5c9c8-27f8-4c71-8d75-b8e5181d85bd&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-bbc38e10-27c4-4294-8599-701fb0bcd5ae&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-2603e35a-6b84-4ae2-a534-0d6cda6686d4&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-7ece40ee-380f-4f42-8254-6ad2f9703670&quot; style=&quot;&quot;&gt;일반적인 가정용 네트워크에 경우 유동 ip일 확률이 높다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-b2138d9a-8f2c-4d83-9209-1f4f319e35e5&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-122ae2a4-0399-4435-a922-76c4aaa6b55d&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-f75ceb18-baf7-4b0b-942d-0a9887127d03&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-7ad17664-0419-45c1-a6c3-c9a03883141d&quot; style=&quot;&quot;&gt;보통은 유동 ip라도 공유기가 켜져있다면 ip가 잘 바뀌지 않으나, 갑자기 정전이 된다던지 무슨 일이 있을지 누가 알겠는가&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-e90a47f1-2e6f-4823-833e-a8be450f405e&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-9103f7cf-e0ec-416b-a13e-6187dc5fc2c0&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-85598140-4a1d-4c1a-a062-f45e03f5849f&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f0f07ffb-4f74-4f95-9d1a-361c19087fd8&quot; style=&quot;&quot;&gt;그래서 ip를 자동으로 체크하는 앱을 만들게 되었다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-37b9ae3a-3da2-45b3-adaa-e56bc515893f&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-bf61cdc5-b08f-440e-892b-f4e4422bcebf&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-b7aa8286-4efa-4d47-aa13-d648e97a02da&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-60060e84-9b7f-494b-bb53-6fde09d24040&quot; style=&quot;&quot;&gt;먼저 나는 맥을 집에 설치하고, 해당 맥의 ip 주소를 받아오는 식으로 진행하였다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-9cd0c19e-d942-4197-af3c-02523f725c1c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-dd8c0d35-34af-4afc-b117-5c41c59a4544&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-de1e3701-c5ba-4196-8575-f92f8dfa8268&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-3bc05ff5-c058-4160-ba4b-bd87a7a1d25f&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-7457cb49-6e3b-4fa9-a7ec-7e72abb73fba&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-186a0b65-c287-49b2-a0f6-16a9cf022455&quot; style=&quot;&quot;&gt;일단 이번에는 C#을 통해 설정을 하였다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-f3a4f0bd-ecbd-4511-aaa8-dc57248329ca&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-b8cf7a45-27a1-4aea-a6e3-a574b7c9ef69&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d061e7ee-76b4-498a-ba79-3da0be0bd841&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-efe6f57c-dcec-49c4-a9a6-b00ed53d6746&quot; style=&quot;&quot;&gt;콘솔 프로그램을 생성해주고 cron을 통해 주기적으로 ip를 체크하는 방식이다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-0fdc6f1c-7101-4c76-aa8c-b2e2967c418a&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f7dba778-948e-48d8-b124-fe62ab2f9f13&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-9715f060-37e7-4c7c-a63a-111249fc001f&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-fit&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-9715f060-37e7-4c7c-a63a-111249fc001f&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMjcg/MDAxNjE1MTcxNjI1OTkw.tUjt9QVWjrMPJC3KfpPr_xKzDFRYKQvsBljpVsSf0xMg.MffaCqzBWHTyD-zOX4DS4c2n014sZvPBxZhVhB6hFGog.PNG.matthew218/SE-9715f060-37e7-4c7c-a63a-111249fc001f.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/a&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/c16d4ab687d1930dbd105f11280f94e7.png&quot; /&gt;&lt;/p&gt; &lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-9715f060-37e7-4c7c-a63a-111249fc001f&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMjcg/MDAxNjE1MTcxNjI1OTkw.tUjt9QVWjrMPJC3KfpPr_xKzDFRYKQvsBljpVsSf0xMg.MffaCqzBWHTyD-zOX4DS4c2n014sZvPBxZhVhB6hFGog.PNG.matthew218/SE-9715f060-37e7-4c7c-a63a-111249fc001f.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt; &lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-f83991fb-4511-4ef7-be10-5a9c625c2055&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-12472bd1-ee1a-4b61-891c-b42def957ddb&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-26d65e1e-a018-438a-aa10-518da282f80c&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-81257b6e-ba13-497c-8514-32269c9499ed&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-ffba1498-8fe9-4625-9f60-5d3bbb1f244e&quot; style=&quot;&quot;&gt;먼저 GetLocalIP() 라는 함수를 통해 맥의 IP 주소를 받아온다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-8a355e95-09a1-4515-aa40-b96b2e387820&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-68110d63-1d0d-4e22-ba5b-fb13d3866dc4&quot; style=&quot;&quot;&gt;공유기를 거칠경우 해당 방식으로 진행할 경우 공유기 내부 ip 주소를 받아오겠지만 나는 직통으로 꽂아서 별로 상관없다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-840178b7-8f88-4a85-8db6-1f7bb1973127&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-274add53-1062-475a-908d-4f7a9fefd45a&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-3940be43-45c8-4f31-b9d4-5478baa6f130&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-23eb5b42-a412-4e4b-b17c-3a86a7c857b1&quot; style=&quot;&quot;&gt;그리고 해당 IP를 post로 웹 서버에 전송한다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-81ef82ea-c6f6-4f09-91cf-9cfcf9388291&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-25bd830c-bca9-4123-91ee-5ea71ccd25e6&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-3d573275-24a1-402b-8573-103e429a66e1&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-8bbebd21-f10c-4be2-b31c-ceefbd56f9f3&quot; style=&quot;&quot;&gt;그럼 서버에서는 아래처럼 처리한다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-e1da94e0-b9b5-4400-8f96-834292b714c4&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-normal&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot; style=&quot;max-width:665px;&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-e1da94e0-b9b5-4400-8f96-834292b714c4&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMTIw/MDAxNjE1MTcxNzczMzk3.Bylo53IQVOFreHTo-8q4OirI4qJ1U3s2eYAeALa-uSgg.BwYUxHOND23w8iZEjLxFsZrBMTslYX24vDPrk9UML2gg.PNG.matthew218/SE-e1da94e0-b9b5-4400-8f96-834292b714c4.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/a&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/b6882b017b535fd40b653d35426f15f2.png&quot; /&gt;&lt;/p&gt; &lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-e1da94e0-b9b5-4400-8f96-834292b714c4&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMTIw/MDAxNjE1MTcxNzczMzk3.Bylo53IQVOFreHTo-8q4OirI4qJ1U3s2eYAeALa-uSgg.BwYUxHOND23w8iZEjLxFsZrBMTslYX24vDPrk9UML2gg.PNG.matthew218/SE-e1da94e0-b9b5-4400-8f96-834292b714c4.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt; &lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-5eb41ef9-46c4-4867-b0a1-77ee4563ef00&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-6431a162-9cde-42e1-8115-6689a4a73767&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-0c9a996e-c4e4-46c7-adbe-88074d3c1a67&quot; style=&quot;&quot;&gt;보안을 위해 PDO를 사용하였다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-47a27fdc-b5db-45c6-940c-5aafa4d668fc&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-da0a1edf-f959-476d-acae-c025e7161324&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-af0f496f-cd11-4ef2-9ac4-13bc36708d55&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-67cd65cb-f91f-49c2-9bad-e0e0d3ccc0cb&quot; style=&quot;&quot;&gt;ip_table에 가장 최근 데이터를 받아오고, ip가 달라졌다면 새로운 row를 등록, ip가 같다면 update_time을 지금으로 고쳐서 데이터가 최근이라는 것을 증명해준다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-e948fe36-2061-4040-bec8-78fd63423e0f&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-10c8baee-0c30-4351-b3c6-0c9be1650b7a&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d09d3eab-f012-40c3-a086-dd33b18bc9dc&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-4cbb7bd1-5865-4554-bf5c-9a24af4affc0&quot; style=&quot;&quot;&gt;ip_table의 구조는 아래와 같다.&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-8ae0aaa8-6088-49e1-8281-e2b0ab8425fc&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-fit&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-8ae0aaa8-6088-49e1-8281-e2b0ab8425fc&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMTEw/MDAxNjE1MTcxODI2Mjcw.mm5njPlM7gt7LNUjv3TyDubl6feqwYBEOlWz1k7HEBog.79EDxNO2RBY2TkBLyeTqZfBdFbbSh6yHFiiml1RKsYwg.PNG.matthew218/image.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/a&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/6e2190e2a5dc5fb8dcb5b0c0aab020f8.png&quot; /&gt;&lt;/p&gt; &lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-8ae0aaa8-6088-49e1-8281-e2b0ab8425fc&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMTEw/MDAxNjE1MTcxODI2Mjcw.mm5njPlM7gt7LNUjv3TyDubl6feqwYBEOlWz1k7HEBog.79EDxNO2RBY2TkBLyeTqZfBdFbbSh6yHFiiml1RKsYwg.PNG.matthew218/image.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt; &lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-bae53f23-bb47-4546-9747-471498ac7e5b&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-ea18039d-38a4-410c-967b-d6323be4ba60&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-e1227c84-86a9-4472-a0b0-7ced070703b3&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-a3e32040-a082-44c9-84fa-c61e812e9882&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-58e57f84-4bab-4d44-a107-43f1cb3efb52&quot; style=&quot;&quot;&gt;이렇게 처리해주고 이제는 표시해줄 파일이다&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-00dda4ba-f5d3-4622-9bf8-d0e7d8edf248&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-fit&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-00dda4ba-f5d3-4622-9bf8-d0e7d8edf248&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfNzkg/MDAxNjE1MTcxOTUzMTQz.txw1thkE8GgzL8fk-dTjL-DRi91UkBkkkfIwR5Evh1Ug.xQCweAEEwVd03Tl1Kulnduwgi-7ocwiiZgTN_zMU9dQg.PNG.matthew218/SE-00dda4ba-f5d3-4622-9bf8-d0e7d8edf248.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp; &lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/62ecaa5636bd8b6b937d23f14e638e52.png&quot; /&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-bbfebe1c-d1d6-4b10-a4d7-b8a5c7c67694&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-3cd29ca3-3169-40b1-96c6-b1e2dd372bee&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-79f709cf-a009-4eea-b13d-f1abfed3354f&quot; style=&quot;&quot;&gt;이렇게 가장 최근 데이터를 받아와서 단순히 표시를 해준다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-cacd0109-acfd-4bcf-af4c-15a80bdb121b&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-ad249ba2-3069-446e-8d52-bd4a7f135e8d&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-597211c3-23ce-4ab6-95cd-093081e833e6&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-normal&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot; style=&quot;max-width:459px;&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-597211c3-23ce-4ab6-95cd-093081e833e6&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMTQx/MDAxNjE1MTcxMzM2NDQw.6avV1T6vkr-A8PjwKPUqXcIC-BO1kg_dm0YdVqht9sAg.i8AepoI7XL0ElQOWMQLD4-KLAy55FPiDsKICzuslb7kg.PNG.matthew218/SE-597211c3-23ce-4ab6-95cd-093081e833e6.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/a&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/f55c565189d5c0da646fd065a351340e.png&quot; /&gt;&lt;/p&gt; &lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-597211c3-23ce-4ab6-95cd-093081e833e6&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMTQx/MDAxNjE1MTcxMzM2NDQw.6avV1T6vkr-A8PjwKPUqXcIC-BO1kg_dm0YdVqht9sAg.i8AepoI7XL0ElQOWMQLD4-KLAy55FPiDsKICzuslb7kg.PNG.matthew218/SE-597211c3-23ce-4ab6-95cd-093081e833e6.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt; &lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-0a21532d-676e-4458-aae3-80cf470868af&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-25f58244-51d1-485e-ac97-c2f02d8235e5&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f34f2e3e-5fd7-4cea-bda8-06f7866fb0d8&quot; style=&quot;&quot;&gt;그러면 쨘하고 현재 ip와 몇초전에 갱신이 되었는지 알 수 있다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-9b14ed29-f7e8-4309-b65b-f8329e386b9a&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-f0ece63e-cb99-4ce3-9d42-aa22dc59d3e7&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-91092ae6-4e04-405a-92bf-381a7eff0021&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-9f3cc37b-0507-4388-be87-a957b7cb3562&quot; style=&quot;&quot;&gt;서버단에서 이렇게 해주고, 맥에서 crontab에 아까 만든 C# 프로그램을 등록해준다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-ffb2e996-e09c-4bcc-9fef-c53b4b52dc52&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-5cc59bc5-450b-415d-82bc-b259055aeb47&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-9445578c-29e4-413e-83d6-2cacd7649dd1&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-fit&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-9445578c-29e4-413e-83d6-2cacd7649dd1&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMjk5/MDAxNjE1MTcyMDgxNDk5.wlszVTvHthbyVSJ5gYaqHVWyB2IcsHyd4IWudR65nBgg.xGp3KIbSlBSjJSpIuEcQTlsyY6FK6JVs9j9PVQXeClog.PNG.matthew218/SE-9445578c-29e4-413e-83d6-2cacd7649dd1.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/a&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/6b2fd47217f02f64b1106fd28e66f591.png&quot; /&gt;&lt;/p&gt; &lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-9445578c-29e4-413e-83d6-2cacd7649dd1&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMTAzMDhfMjk5/MDAxNjE1MTcyMDgxNDk5.wlszVTvHthbyVSJ5gYaqHVWyB2IcsHyd4IWudR65nBgg.xGp3KIbSlBSjJSpIuEcQTlsyY6FK6JVs9j9PVQXeClog.PNG.matthew218/SE-9445578c-29e4-413e-83d6-2cacd7649dd1.png&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt; &lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-d3dea801-a599-4a9c-8674-58b332aaf67f&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-e469f1f9-ee42-4b85-b639-a8a641e4f89f&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-88d457ad-1044-4a7d-b5b7-2b9edd56e422&quot; style=&quot;&quot;&gt;매 10분마다 해당 프로그램을 실행시켜준다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-5334bca2-68b2-4f56-819c-50aabc07af01&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-b45a8cd7-765e-4d70-882d-a52e492f8220&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-235a4057-d681-48dd-8c5b-84706feb4de8&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-98120694-87aa-41de-8f82-925cea85b9af&quot; style=&quot;&quot;&gt;+) 맥에서 exe는 실행 못하는줄 알고 컴파일 했는데 exe가 나와서 당황했다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-c78dbc4e-eb47-40dd-904a-5e5d6dbd2a6d&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-11a924eb-57d4-4c64-802a-a2b1ab7b6f30&quot; style=&quot;&quot;&gt;C#으로 만들어진 프로그램에 경우 mono라는 .net framework속 프로그램을 사용하면 잘 돌릴 수 있다!&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-20d6f3c8-0c5b-4e40-97f8-7962b83b6783&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-94f1c32b-63b2-4ba7-9bfb-83a84bee17ff&quot; style=&quot;&quot;&gt;복잡한 프로그램도 돌아갈지는 모름&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-08667f73-2913-4fbb-ac72-6f00278fdf43&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-0d43f5a5-0e92-466a-9c56-bbbebdee70c9&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-50ee3dc4-8d21-47c3-8bab-7684a0151538&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-aeb8ea20-d520-496f-b55a-ef13f36abb96&quot; style=&quot;&quot;&gt;집에서 돌아가는 맥미니는 어차피 전원이 꺼지지 않는 이상 계속 10분마다 cron을 실행할 것이고, ip가 바뀌어도 알아서 잘 알려줄것이다&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>C#</category><category>PHP</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/350</guid>
	<comments>https://me.hoto.dev/portfolio/350#comment</comments>			<pubDate>Mon, 14 Feb 2022 21:05:24 +0900</pubDate>
		</item><item>
			<title>웹 브라우저 키보드 북마커</title>
			<link>https://me.hoto.dev/portfolio/341</link>
				<description>&lt;div class=&quot;se-component se-quotation se-l-quotation_line&quot; id=&quot;SE-349dd98b-e600-4033-9273-495be1c7d96a&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-quotation se-l-quotation_line&quot;&gt; &lt;blockquote class=&quot;se-quotation-container&quot;&gt; &lt;div class=&quot;se-module se-module-text se-quote&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-84dd955c-2be4-4cb1-b572-84b82bbfee71&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-c1bab2a5-ee2d-4e89-8570-5cdac6c8cac4&quot; style=&quot;&quot;&gt;코딩 계기&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/blockquote&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-38e1912f-dd6e-4a5c-82ec-23bc05e6a383&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-normal&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot; style=&quot;max-width:465px;&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-38e1912f-dd6e-4a5c-82ec-23bc05e6a383&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMDEwMjRfOCAg/MDAxNjAzNDY1NjgxNjcw.wtTNN0Z6hbaYJ0X8T4AC4A2ir1c9cZcNAViTfjAUidsg.dNrFhPAJ8_7lgciTXCkarojFoAlAG11mGSR-rbYiJ0Ag.PNG.matthew218/image.png&amp;quot;, &amp;quot;originalWidth&amp;quot; : &amp;quot;465&amp;quot;, &amp;quot;originalHeight&amp;quot; : &amp;quot;92&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp; &lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/2c72e90c4822d4d4060d41e09905a6a7.png&quot; /&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-312bacad-c99c-4b26-aa7e-a330c90da8d4&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d1089229-28ea-4f06-adb5-bfb34616f25c&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-72a23435-4524-40d8-a424-bb7d3d418525&quot; style=&quot;&quot;&gt;우리가 인터넷을 할때 자주 들어가는 사이트는 이런식으로 na만 쳐도 네이버 주소가 완성된다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-3a8892b4-9253-4379-9be1-90255721dc0a&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-1a05e088-40e5-489e-9e81-c41cd43678d6&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-dd316fd4-d5de-4af5-b18b-6227cc7262bc&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-normal&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot; style=&quot;max-width:444px;&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-dd316fd4-d5de-4af5-b18b-6227cc7262bc&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMDEwMjRfMjYy/MDAxNjAzNDY2MjUxMjIx.r8fKb8N_678-_Fiuf8cQEQp1Jpi4weWH-DPb6uNQgMYg.nCNw-X9qP2XW4R_HrklCv0haUBuVQ6rKY5ue-Hh7JT0g.PNG.matthew218/image.png&amp;quot;, &amp;quot;originalWidth&amp;quot; : &amp;quot;444&amp;quot;, &amp;quot;originalHeight&amp;quot; : &amp;quot;90&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp; &lt;/a&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/1b927df5980545b70c45259e71a9038b.png&quot; /&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-4a515f4a-355f-4672-a66e-02b08adbea4d&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d5f8d5d3-3372-4933-b25c-f5353fb703fe&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-463c3ade-504b-4128-8ada-f975de22d6af&quot; style=&quot;&quot;&gt;하지만 예를들어 나무위키를 들어가려고 하면 위에처럼 nam까지 쳐줘야 나무위키 주소가 뜨게 된다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d38c41d3-bd35-4e44-bb79-9e697fafc8bc&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-a340675b-1d26-47f3-8e62-b54c4835a1f0&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-image se-l-default&quot; id=&quot;SE-eeeac243-d673-4398-bbd8-b3c59e1dd252&quot;&gt; &lt;div class=&quot;se-component-content se-component-content-fit&quot;&gt; &lt;div class=&quot;se-section se-section-image se-l-default se-section-align-&quot;&gt; &lt;div class=&quot;se-module se-module-image&quot; style=&quot;&quot;&gt;&lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-eeeac243-d673-4398-bbd8-b3c59e1dd252&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMDEwMjVfMjgg/MDAxNjAzNTk4ODMzMjQ5.1rg1VDfFoqOjn_uyeAiWOAugSDMywe2aqz9Aln4KmDcg.R3wvldA8xb2AZYu_BtpOAXvwyvTR80QT-C31ZGMSJSog.PNG.matthew218/SE-eeeac243-d673-4398-bbd8-b3c59e1dd252.png&amp;quot;, &amp;quot;originalWidth&amp;quot; : &amp;quot;1593&amp;quot;, &amp;quot;originalHeight&amp;quot; : &amp;quot;328&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt;&amp;nbsp;&lt;/a&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/278363bf895a85dc7197f0cf715f6aa7.png&quot; /&gt;&lt;/p&gt; &lt;a area-hidden=&quot;true&quot; class=&quot;se-module-image-link __se_image_link __se_link&quot; data-linkdata=&quot;{&amp;quot;id&amp;quot; : &amp;quot;SE-eeeac243-d673-4398-bbd8-b3c59e1dd252&amp;quot;, &amp;quot;src&amp;quot; : &amp;quot;https://postfiles.pstatic.net/MjAyMDEwMjVfMjgg/MDAxNjAzNTk4ODMzMjQ5.1rg1VDfFoqOjn_uyeAiWOAugSDMywe2aqz9Aln4KmDcg.R3wvldA8xb2AZYu_BtpOAXvwyvTR80QT-C31ZGMSJSog.PNG.matthew218/SE-eeeac243-d673-4398-bbd8-b3c59e1dd252.png&amp;quot;, &amp;quot;originalWidth&amp;quot; : &amp;quot;1593&amp;quot;, &amp;quot;originalHeight&amp;quot; : &amp;quot;328&amp;quot;, &amp;quot;linkUse&amp;quot; : &amp;quot;false&amp;quot;, &amp;quot;link&amp;quot; : &amp;quot;&amp;quot;}&quot; data-linktype=&quot;img&quot; onclick=&quot;return false;&quot; style=&quot;&quot;&gt; &lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class=&quot;se-component se-text se-l-default&quot; id=&quot;SE-50da08da-8179-4d5b-a4a5-cfc00e112f9e&quot;&gt; &lt;div class=&quot;se-component-content&quot;&gt; &lt;div class=&quot;se-section se-section-text se-l-default&quot;&gt; &lt;div class=&quot;se-module se-module-text&quot;&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-08a469fb-4839-4e31-a15e-f3b3f3184ec9&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-b2639a88-11c4-47d0-b070-c3f9686abbc6&quot; style=&quot;&quot;&gt;그리고 D모 사이트에 경우, URL이 길어서 자동완성을 사용하기가 힘들다&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-fbd43b7a-7277-48f0-b0e8-68c7b4a4124d&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-a39ee611-3863-46c1-9195-ced2a3b285c1&quot; style=&quot;&quot;&gt;심지어 위에 사진을 보면 내가 원하는 URL은 제일 아래에 있으나, 자동완성으로는 다른것이 떠서 키보드를 몇번 더 입력해야 하는 불상사가 발생한다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-820cae51-5b4a-47be-a2ce-417d295a4fbd&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-5d16d85d-b74d-4c97-8248-cc162fd2d4d9&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-5a62b420-8189-47cb-aca0-febde2ec1c45&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-73981b0e-328e-41e4-a30d-4c62d7be6de2&quot; style=&quot;&quot;&gt;이것처럼 일일히 URL을 입력하기 귀찮은 나머지, 갑자기 아이디어가 떠올라 프로그램을 만들게 되었다.&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-d37be858-6157-4675-8873-10115d3cbba7&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-34043e27-2c41-40a3-be27-082178c0dff8&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-ce61794a-127c-49bc-acbe-2d61a4d33bb7&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-182f58ea-6a0d-40a1-8c39-f678691c37e7&quot; style=&quot;&quot;&gt;사용법 목표)&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-ccee8899-94f8-4f7f-85db-48d31cc3f531&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-63166c5b-b901-4bee-b7a4-072bd6d2dccd&quot; style=&quot;&quot;&gt;주소창에 내가 원하는 예약어를 치면 자동으로 그 사이트로 이동되게 하자!&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-253a623e-118a-436e-b4a1-5f1e8cf82971&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-de0c946d-5657-486d-a70c-fc80137a9bb0&quot; style=&quot;&quot;&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;se-text-paragraph se-text-paragraph-align- &quot; id=&quot;SE-8a73fdae-a488-457a-93bf-460a401fdfc7&quot; style=&quot;&quot;&gt;&lt;span class=&quot;se-fs- se-ff- &quot; id=&quot;SE-a888fe7b-490c-4323-987d-bb9cd2d86e7e&quot; style=&quot;&quot;&gt;그리고.. SpeedRun 코딩을 도전해보기로 했다&lt;/span&gt;&lt;/p&gt; &lt;div class=&quot;autosourcing-stub-extra&quot; style=&quot;opacity: 1;&quot;&gt;&amp;nbsp;&lt;/div&gt; &lt;hr /&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/721fd47f7bc3be98308f27cb2d47beee.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;img alt=&quot;wa!.gif&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/361075f8630a0eed4181300fd23f1383.gif&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/2f7f92d1cec193f1686d2b220840ba59.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>C#</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/341</guid>
	<comments>https://me.hoto.dev/portfolio/341#comment</comments>			<pubDate>Mon, 14 Feb 2022 21:01:09 +0900</pubDate>
		</item><item>
			<title>타자 연습 리듬 게임</title>
			<link>https://me.hoto.dev/portfolio/330</link>
				<description>&lt;p&gt;&lt;img alt=&quot;image.png&quot; class=&quot;am-image-edit-ready&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/01967d8b11ee96a322aa740b827f63f0.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;▲ 기본 레이아웃&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;combo : 콤보 (틀리지 않고 맞출 경우 한글자마다 올라감)&lt;/p&gt; &lt;p&gt;max combo : 최대 콤보&lt;/p&gt; &lt;p&gt;good : 정상적으로 친 갯수&lt;/p&gt; &lt;p&gt;bad : 오타, 치지 못한 갯수&lt;/p&gt; &lt;p&gt;kpm: key per minute (1초에 입력할 수 있는 글자 수)&lt;/p&gt; &lt;p&gt;acc : 정확도 (good/good+bad)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/c2b8e8a7b6c4bc9f1ac1c59872cfd240.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;▲ 게임 플레이 상세&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/7570ae319261490dad39b3403fbbd1d1.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/c0ad2df90c84bef177e5320577804414.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;video controls=&quot;&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/c2c099d1cef5f7d2c25e4fd2c2340336.mp4&quot;&gt;&amp;nbsp;&lt;/video&gt; &lt;/p&gt; &lt;p&gt;▲ 영어 예시(Son of kick - Hours)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;video controls=&quot;&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/14/e0a2cfafa1a00456d93f690372a1e279.mp4&quot;&gt;&amp;nbsp;&lt;/video&gt; &lt;/p&gt; &lt;p&gt;▲ 한글 예시 (IZONE-FIESTA)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>PHP</category><category>JavaScript</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/330</guid>
	<comments>https://me.hoto.dev/portfolio/330#comment</comments>			<pubDate>Mon, 14 Feb 2022 20:49:33 +0900</pubDate>
		</item><item>
			<title>그누보드 하이브리드 앱</title>
			<link>https://me.hoto.dev/portfolio/311</link>
				<description>&lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/29af9dc3148ffb7f3ecb50e571da5549.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/a8756f3274dbc5c17863075ef6ee69e4.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/f77026cd2a777961796654e48edd2be9.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/3b1a135991143d9b2e08d9c73841f53e.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/4363b3c5df12d2941a2ed050ad59c6e0.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/e169616a41a999e5f22f126db75d05b2.png&quot; /&gt;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>그누보드</category><category>Android</category><category>Java</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/311</guid>
	<comments>https://me.hoto.dev/portfolio/311#comment</comments>			<pubDate>Wed, 02 Feb 2022 03:57:54 +0900</pubDate>
		</item><item>
			<title>C++ RDBMS 개발</title>
			<link>https://me.hoto.dev/portfolio/306</link>
				<description>&lt;p&gt;C++만을 활용하여 RDBMS를 제작하였습니다&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;데이터 저장은 csv 포맷을 사용하며, CRUD 외 부가적인 기능은 제공하지 않습니다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/9712df6d8bf7207b5623fa44a42fb26b.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://blog.naver.com/matthew218/221790737378&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;0&quot; id=&quot;emcard0&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://blog.naver.com/matthew218/221790737378&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=UjJydFJHWjZ5UkFsZnBoWVE5MFdFZUYxek1nenduVWs4d043cW8zVSszbXZmNkUxb0V4eHhJU3BLRlhKckFkYUNFN3VXbUt3RGt1Y20rLzFCeWhzbFdyVzdMd0d1THFGY0V5U2JHb1hUTTRiaWN5eW5WbDhVZGlJMzRxSDZvdk5MRWpFQWZZOXk4R1JJQmRXb0tQWXBRPT0&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/221790737378&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;C++로 데이터베이스 만들기!!&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;C++로 데이터 베이스를 완성하였습니다! 아직 SELECT밖에 없지만, 좀더 발전시켜서! 제가 원래 만드...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/221790737378&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=dUhLRDhIc3pwOVdteVlHTzNNN1Z0dlFrMXVLU0RCY0VVRWVoT2cxcnc5enFtS2JmMDhFL1BwTDdnWDdENGhmSQ&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://blog.naver.com/matthew218/221790737378&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://blog.naver.com/matthew218/221790737378&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022 &lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://blog.naver.com/matthew218/221794141426&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;1&quot; id=&quot;emcard1&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://blog.naver.com/matthew218/221794141426&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=UjJydFJHWjZ5UkFsZnBoWVE5MFdFZUYxek1nenduVWs4d043cW8zVSszbTZDRk5DdVo4bDNGZTlmT2xjc0hqR1psNEVJQTl1dmtYWjVha0toNDcxa2l1VTJvQ0hsQkxHSTYrd3VtNlFhazFaRCtpQWpuNlc2ZGlWanNYdFF3ckp6b0pIUEp4Z0VReDVCenZYbFR5ZE5RPT0&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/221794141426&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;C++ DB 제작 기록 #2&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;DB 용량 45메가 데이터 셋: 약 80만개 컬럼: 9개 데이터 크기 : 800,000 * 9 = 약 7,200,000개 로...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/221794141426&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=dUhLRDhIc3pwOVdteVlHTzNNN1Z0dlFrMXVLU0RCY0VVRWVoT2cxcnc5enFtS2JmMDhFL1BwTDdnWDdENGhmSQ&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://blog.naver.com/matthew218/221794141426&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://blog.naver.com/matthew218/221794141426&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022 &lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>C++</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/306</guid>
	<comments>https://me.hoto.dev/portfolio/306#comment</comments>			<pubDate>Wed, 02 Feb 2022 03:52:54 +0900</pubDate>
		</item><item>
			<title>C언어 콘솔 건반형 리듬게임</title>
			<link>https://me.hoto.dev/portfolio/288</link>
				<description>&lt;p&gt;한국디지털미디어고 2019년 프로그래밍교과 콘솔게임 만들기 대회 노력상 수상&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/543981b09dde38ad464223167343ea23.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;video controls=&quot;&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/f59e01b508550f5a05f0580d18cc3697.mp4&quot;&gt;&amp;nbsp;&lt;/video&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://blog.hoto.dev/45&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;1&quot; id=&quot;emcard1&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://blog.hoto.dev/45&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=SlF3czFlUlYvVnUxUTl6MnJuTURhdlRxVEJieThPWko0VGdSbmpMelV5RjVweGExMlY4TkY5SFhVVCtLcTh4UEZrYkRsbU45RFNqM2FzSEZldFVybDBpMTdpaVd2ZjBRYTdmYTJGclFEYzlnMUJBUDJldWx2MHdZek12VVdCcHRjOVlQSGUwbHJYdm8yS3EvT1BDMTk1OVk2N0puMWZuVDg4cUx2R0hWVHdwZkF6ejM4Ymc1KzM3eGdWK0FPakRKN0phZWl0aXJNYzdqeE5xdVVJbGZsQT09&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://blog.hoto.dev/45&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Native C로 리듬게임 만들기 #1&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;내가 다니는 학교 한국디지털미디어 고등학교에서는 1학년때 C언어 프로그래밍 교과를 배운다. C를 미리 알...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://blog.hoto.dev/45&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=SlF3czFlUlYvVnUxUTl6MnJuTURhbzk5cG5uR0pGczRzZVFOeUFENEVoOFkvRGlwZ1FXT3lzbmdtalVqNnk0MHpEMUJvRkpPVUYzT08wTDhSOUg4N3QwZXJ6OGVPUVpOeDJ0NGZhRDJnWkpZTDc0Z3c5aVFuYmp3K2lZUTlUY3RLSVlZS0JsV0VobitiK0Y5RXA4MXA3clZyM1NSRzlkU2hiakFYNGNOMUkvUnFaMUM2dlRpM2g5TUxueG94bjhJRGp4S3VVWFNlL3RHQzR5NThJQmRjQT09&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://blog.hoto.dev/45&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;초보 프로그래머의 프로그래밍&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://blog.hoto.dev/45&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;수표 &lt;/a&gt;&lt;span class=&quot;t&quot;&gt; / 2020-01-27&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://blog.naver.com/matthew218/221831439936&lt;/p&gt; &lt;div class=&quot;emcard em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;0&quot; id=&quot;emcard0&quot;&gt; &lt;div class=&quot;c lmo&quot;&gt;&lt;a class=&quot;p&quot; href=&quot;https://blog.naver.com/matthew218/221831439936&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=alJ1b2ZIWFlyR2ZHczBCOTJFWkp3MUJqYnMwT0l5UHpxVEVtTC9XdXoxY1ZxenlUYklic3Bjc2FBWUtvbStBN3BtNGU1NFNqb2I5UUFOWWxmSXlSNHlKc05QMkl6SVdBMUQ4bWw2L2N4Mldxb1k5aElaZ01KZ29Yc0hhRDhOYVZUbk1kVTJKRGRwT2RDdFBTYnN4aXRnM29JRWpFdDlVdVVEbTAvdElUZjFTWS9DWncwUHNkSXdINEc0ZVp2dlpqbzVIRi9jcUlXY0ZIbXNhem1yRXFDQlJWR3dZRXhUOExnRWd0WW9scHoxTU01Q25xeEYvSkRROElLckJNTml5TnRScWVtbUdyK0Q5Ui9mQjRFRDVKd3c9PQ&quot; /&gt;&lt;/a&gt; &lt;div class=&quot;b&quot;&gt; &lt;div class=&quot;h fwb fsn&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/221831439936&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;C언어로 리듬게임 만들기!&lt;/a&gt;&lt;/div&gt; &lt;div class=&quot;d&quot;&gt;생각해보니 블로그에 리듬게임 만든 글을 안쓴거 같네요.. 기술적인 부분은 기술블로그에 썼으니, 여기서는...&lt;/div&gt; &lt;div class=&quot;f&quot;&gt;&lt;a href=&quot;https://blog.naver.com/matthew218/221831439936&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;i&quot; src=&quot;https://me.hoto.dev//modules/automention/lib/img_read.php?url=dUhLRDhIc3pwOVdteVlHTzNNN1Z0dlFrMXVLU0RCY0VVRWVoT2cxcnc5enFtS2JmMDhFL1BwTDdnWDdENGhmSQ&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;w &quot; href=&quot;https://blog.naver.com/matthew218/221831439936&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022&lt;/a&gt;&lt;span class=&quot;m&quot;&gt; - &lt;a class=&quot;a&quot; href=&quot;https://blog.naver.com/matthew218/221831439936&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;네이버 블로그 | Waterticket&amp;acute;s Dev 2022 &lt;/a&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;https://www.youtube.com/watch?v=HiLFmYDcmAE&lt;/p&gt; &lt;div class=&quot;emcard vctor em-selected&quot; contenteditable=&quot;false&quot; data-id=&quot;0&quot; id=&quot;emcard0&quot;&gt; &lt;div style=&quot;left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;&quot;&gt;&lt;iframe allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture;&quot; allowfullscreen=&quot;&quot; scrolling=&quot;no&quot; src=&quot;https://www.youtube.com/embed/HiLFmYDcmAE?rel=0&quot; style=&quot;top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>C</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/288</guid>
	<comments>https://me.hoto.dev/portfolio/288#comment</comments>			<pubDate>Wed, 02 Feb 2022 03:22:12 +0900</pubDate>
		</item><item>
			<title>온라인 URL 단축기</title>
			<link>https://me.hoto.dev/portfolio/272</link>
				<description>&lt;p&gt;긴 URL을 효과적으로 줄이기 위해 제작한 URL 단축기&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/8f326cfc065f5320b624f8130f4eb8bb.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;URL을 입력하고 Convert 버튼을 클릭하면 https://s.hoto.dev/r/랜덤글자 처럼 변환되어 나오게 된다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/9e8733efa6ad9145b6b75077223ddc4f.png&quot; /&gt;&lt;/p&gt; &lt;p&gt;또한 정상적이지 않은 경로로 접근할 경우 404에러를 띄우게 된다&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;video controls=&quot;&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/12ecb8bb6fe608ebf2b6ecb7b2c97efc.mp4&quot;&gt;&amp;nbsp;&lt;/video&gt; &lt;/p&gt;</description>
		<category>Portfolio</category>	<category>개발</category>	<category>PHP</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/272</guid>
	<comments>https://me.hoto.dev/portfolio/272#comment</comments>			<pubDate>Wed, 02 Feb 2022 03:03:46 +0900</pubDate>
		</item><item>
			<title>웹사이트 차단 프로그램</title>
			<link>https://me.hoto.dev/portfolio/267</link>
				<description>&lt;p&gt;&lt;img alt=&quot;image.png&quot; height=&quot;438&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/9a7cc5badee84baaabc3b27fc3f88bef.png&quot; width=&quot;970&quot; /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;원하는 사이트를 차단하는 프로그램이다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;서버에서 restrict_url.json에 원하는 사이트를 추가하면, 주기적으로 컴퓨터에서 해당 데이터를 받아와 hosts파일을 수정한다.&lt;/p&gt; &lt;p&gt;hosts 파일을 선점하는 방식으로 열기때문에 다른 프로세스에서 수정이 불가능하며, 무슨 방법을 동원해도 해당 페이지에 접속할 수 없다.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;또한 강제종료와 삭제를 막기위해 총 3개의 프로세스가 동시에 동작하며, 서로 실행 여부를 감시하여 이변이 발생하면 블루스크린을 띄워 작업을 정지시킨다&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt=&quot;image.png&quot; src=&quot;https://me.hoto.dev/files/attach/images/2022/02/02/15c2a7cebe0859de3831a9dd0305d090.png&quot; /&gt;&lt;/p&gt;</description>
		<category>Portfolio</category>	<category>외주</category>	<category>C#</category>			<dc:creator>Waterticket</dc:creator>
			<guid isPermaLink="true">https://me.hoto.dev/portfolio/267</guid>
	<comments>https://me.hoto.dev/portfolio/267#comment</comments>			<pubDate>Wed, 02 Feb 2022 02:50:01 +0900</pubDate>
		</item>	</channel>
</rss>
