<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Home</title>
		<link rel="alternate" type="text/html" hreflang="ko" href="https://me.hoto.dev/"/>
	<link rel="self" type="application/atom+xml" href="https://me.hoto.dev/atom"/>
	<updated>2026-05-08T21:21:29+09:00</updated>
	<id>https://me.hoto.dev/atom</id>
	<generator>Rhymix</generator>
		<entry>
		<title>비속어 마스킹 기능</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/452"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/452#comment"/>		<id>https://me.hoto.dev/portfolio/452</id>
		<published>2024-11-03T20:35:19+09:00</published>
		<updated>2024-11-03T20:35:56+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">개요 - 사용자가 직접 보기 싫은 단어를 회원 정보에서 설정. - 타 회원이 내가 설정한 단어를 포함한 게시글을 업로드 할 경우 &quot;필터링 한 단어가 포함된 글입니다.&quot;라는 제목으로 대체되어 표시되며, 그 글에 들어가려고 할 경우 한 차례 더 경고창이 나타남. (확인을 눌러 들어갈 수 있음) - 회원을 차단하는 기능이 아니라, 게시글을 마스킹하는 기능입니다. 따라서 기존의 욕설 필터링이나 회원 분리와는 다른 기능입니다. 이...</summary>
	<content type="html">&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;</content>	<category term="175" label="외주" />	<category term="PHP"/><category term="Rhymix"/>	</entry><entry>
		<title>ChatGPT를 이용한 게시글 태그 추출</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/443"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/443#comment"/>		<id>https://me.hoto.dev/portfolio/443</id>
		<published>2024-06-30T21:02:32+09:00</published>
		<updated>2024-06-30T21:03:46+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">게시글 등록시 게시판 태그를 자동으로 생성해주는 모듈이다. 게시글당 약 1천 토큰이 사용되며, OpenAI API 테스트 결과 약 5건당 0.01$가 사용된다.</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="Rhymix"/>	</entry><entry>
		<title>타임라인 모듈 - 조건 만족 시간대별로 리스트업</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/439"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/439#comment"/>		<id>https://me.hoto.dev/portfolio/439</id>
		<published>2024-06-30T20:59:54+09:00</published>
		<updated>2024-06-30T21:00:29+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">타임라인 모듈에서 설정해둔 조건을 만족한 시간 순서대로 게시글을 보여주는 기능이다. 기존 타임라인 모듈은 게시글 작성 시간대로 보여줘, 오래된 글이 추천수를 만족한 경우 최신글 위로 올라오지 못해 묻히는 현상이 있다. ex) 10시) 게시글 A 작성 11시) 게시글 B 작성 12시) 게시글 A 추천수 20개 달성 13시) 게시글 B 추천수 20개 달성 최종 출력 순서 - 게시글 B (13시 추가) - 게시글 A (12시 추가)</summary>
	<content type="html">&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;</content>	<category term="175" label="외주" />		</entry><entry>
		<title>원하는 기간만큼 결제 &amp; 글 쓰기</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/436"/>
			<id>https://me.hoto.dev/portfolio/436</id>
		<published>2024-05-19T21:22:53+09:00</published>
		<updated>2024-06-30T21:03:38+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">1. 글쓰기 버튼 클릭시 결제 페이지로 이동 2. 결제 페이지에서 원하는 기간 선택 3. 결제 완료 후 글쓰기. 값은 확장 변수로 게시글에 대입. 3-1. 만약 결제 완료 후 창을 닫았을 경우, 다시 글쓰기 페이지에 들어가면 해당 결제 데이터와 연동하여 이어서 글 쓰기 가능</summary>
	<content type="html">&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;</content>	<category term="175" label="외주" />	<category term="Rhymix"/>	</entry><entry>
		<title>접속자 유량제어 시스템</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/422"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/422#comment"/>		<id>https://me.hoto.dev/portfolio/422</id>
		<published>2022-12-19T20:38:15+09:00</published>
		<updated>2022-12-20T11:30:27+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">https://blog.naver.com/matthew218/222871549104 접속자 유량제어 시스템 테스트 #1 테스트 시스템 : Oracle Cloud A1 - 1core 6gb ram (Seoul) 평균 핑 : 17.03 ms 테스트 도구 : JMete... 네이버 블로그 | Waterticket´s Dev 2022 - 네이버 블로그 | Waterticket´s Dev 2022 https://blog.naver.com/matthew218/222872110553 접속자 유량제어 시스템 테스트 #2 Byte String Copy 문제 Golang에서 Byte를 String으로 바꾸거나, 그...</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="Go"/>	</entry><entry>
		<title>비밀번호 취약점 체크 애드온</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/387"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/387#comment"/>		<id>https://me.hoto.dev/portfolio/387</id>
		<published>2022-02-14T21:38:56+09:00</published>
		<updated>2022-02-14T21:40:14+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">https://haveibeenpwned.com/Passwords Have I Been Pwned: Pwned Passwords Have I Been Pwned allows you to search across multiple data breaches to see if your email address or ... aveibeenpwned.com 비밀번호가 유출되었는지 알려주는 사이트이다. 거대한 데이터에 구미가 댕겨 이걸 사용해 비밀번호가 유출이 되었는지 회원가입 과정에서 알려주는 프로그램을 짜보고자 했다. 압축을 풀어보니 25GB 상당의 거대한 데이터...</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="XpressEngine"/><category term="Rhymix"/><category term="PHP"/>	</entry><entry>
		<title>배터리/시간 호버 표시 프로그램</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/369"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/369#comment"/>		<id>https://me.hoto.dev/portfolio/369</id>
		<published>2022-02-14T21:25:12+09:00</published>
		<updated>2022-02-14T21:27:44+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">먼저 디자인은 위와같이 정했다. 처음엔 배경도 투명하게 했다. 그래서 배경없이 글자만 나와서 방해되는 요소가 거의 없었다. 다만 가독성이 별로였고, 폰트 테두리가 이상하게 더러워서 심플한 약 민트색 배경을 넣었다. 배터리 상태는 위와같이 구해왔다. 신기하게 ObjectQuery라는것을 알게 되었다. 윈도우 시스템의 데이터를 저장하는 DB라는데, SQL문으로 가져올 수 있다는게 신기한거 같다 확실히 윈도우 프로그래밍은 C#이 ...</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="C#"/>	</entry><entry>
		<title>유동 IP 주기적 체크 시스템</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/350"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/350#comment"/>		<id>https://me.hoto.dev/portfolio/350</id>
		<published>2022-02-14T21:05:24+09:00</published>
		<updated>2022-02-14T21:06:18+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">홈서버는 구성하기 매우 어렵다 공유기도 잘 따라줘야 하고, 네트워크 상황도 받쳐줘야 하고.. 만약 이 모든 환경이 잘 맞아서 어째저째 구성했다고 가정하자 이제 문제는 유지 보수로 넘어간다 일반적인 가정용 네트워크에 경우 유동 ip일 확률이 높다. 보통은 유동 ip라도 공유기가 켜져있다면 ip가 잘 바뀌지 않으나, 갑자기 정전이 된다던지 무슨 일이 있을지 누가 알겠는가 그래서 ip를 자동으로 체크하는 앱을 만들게 되었다....</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="C#"/><category term="PHP"/>	</entry><entry>
		<title>웹 브라우저 키보드 북마커</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/341"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/341#comment"/>		<id>https://me.hoto.dev/portfolio/341</id>
		<published>2022-02-14T21:01:09+09:00</published>
		<updated>2022-02-14T21:01:09+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">코딩 계기 우리가 인터넷을 할때 자주 들어가는 사이트는 이런식으로 na만 쳐도 네이버 주소가 완성된다 하지만 예를들어 나무위키를 들어가려고 하면 위에처럼 nam까지 쳐줘야 나무위키 주소가 뜨게 된다 그리고 D모 사이트에 경우, URL이 길어서 자동완성을 사용하기가 힘들다 심지어 위에 사진을 보면 내가 원하는 URL은 제일 아래에 있으나, 자동완성으로는 다른것이 떠서 키보드를 몇번 더 입력해야 하는 불상사가 발생한다. ...</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="C#"/>	</entry><entry>
		<title>타자 연습 리듬 게임</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/330"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/330#comment"/>		<id>https://me.hoto.dev/portfolio/330</id>
		<published>2022-02-14T20:49:33+09:00</published>
		<updated>2022-02-14T21:10:00+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">▲ 기본 레이아웃 combo : 콤보 (틀리지 않고 맞출 경우 한글자마다 올라감) max combo : 최대 콤보 good : 정상적으로 친 갯수 bad : 오타, 치지 못한 갯수 kpm: key per minute (1초에 입력할 수 있는 글자 수) acc : 정확도 (good/good+bad) ▲ 게임 플레이 상세 ▲ 영어 예시(Son of kick - Hours) ▲ 한글 예시 (IZONE-FIESTA)</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="PHP"/><category term="JavaScript"/>	</entry><entry>
		<title>그누보드 하이브리드 앱</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/311"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/311#comment"/>		<id>https://me.hoto.dev/portfolio/311</id>
		<published>2022-02-02T03:57:54+09:00</published>
		<updated>2022-02-02T03:58:24+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text"></summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="그누보드"/><category term="Android"/><category term="Java"/>	</entry><entry>
		<title>C++ RDBMS 개발</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/306"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/306#comment"/>		<id>https://me.hoto.dev/portfolio/306</id>
		<published>2022-02-02T03:52:54+09:00</published>
		<updated>2022-02-02T03:53:26+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">C++만을 활용하여 RDBMS를 제작하였습니다 데이터 저장은 csv 포맷을 사용하며, CRUD 외 부가적인 기능은 제공하지 않습니다. https://blog.naver.com/matthew218/221790737378 C++로 데이터베이스 만들기!! C++로 데이터 베이스를 완성하였습니다! 아직 SELECT밖에 없지만, 좀더 발전시켜서! 제가 원래 만드... 네이버 블로그 | Waterticket´s Dev 2022 - 네이버 블로그 | Waterticket´s Dev 2022 https://blog.naver.com/matthew2...</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="C++"/>	</entry><entry>
		<title>C언어 콘솔 건반형 리듬게임</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/288"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/288#comment"/>		<id>https://me.hoto.dev/portfolio/288</id>
		<published>2022-02-02T03:22:12+09:00</published>
		<updated>2022-02-02T03:43:54+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">한국디지털미디어고 2019년 프로그래밍교과 콘솔게임 만들기 대회 노력상 수상 https://blog.hoto.dev/45 Native C로 리듬게임 만들기 #1 내가 다니는 학교 한국디지털미디어 고등학교에서는 1학년때 C언어 프로그래밍 교과를 배운다. C를 미리 알... 초보 프로그래머의 프로그래밍 - 수표 / 2020-01-27 https://blog.naver.com/matthew218/221831439936 C언어로 리듬게임 만들기! 생각해보니 블로그에 리듬게임 만든 글을 안쓴거 ...</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="C"/>	</entry><entry>
		<title>온라인 URL 단축기</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/272"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/272#comment"/>		<id>https://me.hoto.dev/portfolio/272</id>
		<published>2022-02-02T03:03:46+09:00</published>
		<updated>2022-02-02T03:04:13+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">긴 URL을 효과적으로 줄이기 위해 제작한 URL 단축기 URL을 입력하고 Convert 버튼을 클릭하면 https://s.hoto.dev/r/랜덤글자 처럼 변환되어 나오게 된다. 또한 정상적이지 않은 경로로 접근할 경우 404에러를 띄우게 된다</summary>
	<content type="html">&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;</content>	<category term="174" label="개발" />	<category term="PHP"/>	</entry><entry>
		<title>웹사이트 차단 프로그램</title>
		<link rel="alternate" type="text/html" href="https://me.hoto.dev/portfolio/267"/>
	<link rel="replies" type="text/html" href="https://me.hoto.dev/portfolio/267#comment"/>		<id>https://me.hoto.dev/portfolio/267</id>
		<published>2022-02-02T02:50:01+09:00</published>
		<updated>2022-02-02T02:55:39+09:00</updated>
		<author>
			<name>Waterticket</name>
		</author>
		<summary type="text">원하는 사이트를 차단하는 프로그램이다. 서버에서 restrict_url.json에 원하는 사이트를 추가하면, 주기적으로 컴퓨터에서 해당 데이터를 받아와 hosts파일을 수정한다. hosts 파일을 선점하는 방식으로 열기때문에 다른 프로세스에서 수정이 불가능하며, 무슨 방법을 동원해도 해당 페이지에 접속할 수 없다. 또한 강제종료와 삭제를 막기위해 총 3개의 프로세스가 동시에 동작하며, 서로 실행 여부를 감시하여 이변이 발생하면 ...</summary>
	<content type="html">&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;</content>	<category term="175" label="외주" />	<category term="C#"/>	</entry></feed>
