Blog Logo 블로그 주인장 필명: 노모
필요 시 부담 없이 메일주세요 ^^ ↓
Contact Email
카테고리
분류 전체보기 (127)
이 블로그는... (2)
(0)
먹을거 (9)
게임 (17)
지름 (9)
여행 (1)
정보 (57)
사진 (1)

※ 본 블로그는 종종 영어와 한국어로 동시에 포스팅 합니다.

   한국어로 적은 글은 KB4487038, KB4487017 Windows 업데이트 후, 인터넷 안 됨 증상 경험(https://nomo.asia/384를 참고해주세요.


Problem

After installing the KB4487038, KB4485449 Windows update today,

I got a problem that my computer couldn't connect to the Internet.


It was not connected to the admin page of my router.

That means my computer did not get an IP allocation from the router.



In the network status of setting, it is displayed as below.

Red letters mean No connection.



I tried to diagnose the network through troubleshooting.

Bold letters mean There might be a problem with the driver for the Ethernet adapter.



Of course, before the Windows update, it worked fine.



PC and Router Specifications

OS: Windows 10

Motherboard: ASRock Z170 Extreme4

On-board Lan Card: Inter(R) Ethernet Connection (2) I219-V

Router: ASUS RT-AC56R. I used a fixed internal IP.



How to fix the problem

I tried many different things to resolve this problem,
and finally the issue was resolved by updating BIOS of motherboard through Internet Flash.


As shown in the image below, there was no problem with Internet access in BIOS



If this problem is affected by the router, there is a possibility that the problem has been resolved by DHCP allocation during the Internet flash process, not updating BIOS. But my another laptop did not have any problems after Windows update. So I think this assumption is wrong...


Anyway, try updating BIOS if you use same Motherboard or On-board Lan Card with me.



Many other things I've tried.

  1. I removed Windows updates(KB4487017 KB4480966, KB4483234). But KB4485449 could not be deleted.
  2. I installed several versions of Lan driver update, including the latest version.
  3. I ran cmd.exe as admin and typed the following. ipconfig /release, netsh int ip reset, ipconfig /flushdns, nbtstat -RR
  4. I connected the LAN cable directly to the ISP's modem without a router.
  5. The router's firmware was already the latest version.
  6. I set ipv4 ip configuration to static mode.
  7. I changed mac address in ethernet setting for DHCP reallocation
  8. I turned off all firewall related settings in the router settings.

But all of the above did not resolve the problem.

After these attempts, I tried to update the BIOS.

Leave a comment

문제 발생

오늘 KB4487038, KB4485449 Windows 업데이트를 설치한 후, 인터넷 연결이 되지 않는 증상이 발생했다.

공유기의 관리자 페이지에도 접속되지 않았다. 즉 공유기로부터 IP 할당을 받지 못했다는 소리다.


설정의 네트워크 상태에서는 아래와 같이 표시됐다.



문제 해결을 통해 네트워크 진단을 시도하자 아래와 같이 나왔다.


이더넷 어댑터의 드라이버에 문제가 있는 것 같습니다.



당연히 윈도우 업데이트 전에는 문제 없이 잘 되었다.



PC 및 공유기 사양

OS: Windows 10

메인보드: ASRock Z170 Extreme4

온보드 랜카드: Inter(R) Ethernet Connection (2) I219-V

공유기: ASUS RT-AC56R


업데이트 기록




문제 해결

문제를 해결하기 위해 다양한 방법을 시도해보았고,

결론부터 말하자면, 내 경우 메인보드의 BIOS를 Internet Flash 를 통해 업데이트 하여 해결됐다.


아래의 이미지처럼 바이오스에서 Internet Flash 를 위해 인터넷에 접속하는 데에는 아무런 문제가 없었다.




문제가 해결된 이유에 대해 추측해보자면...

  1. 단순히 BIOS 업데이트를 했기 때문에 (무엇인가가 바뀌거나 고쳐져서) 문제가 해결되었을 수 있다.
  2. 만약 이 문제가 공유기와도 연관이 있다면, Internet Flash 중 DHCP 에 의해 IP가 재할당 되어서 문제가 해결되었을 가능성이 있다.
    그러나 내 다른 노트북의 경우, Windows 업데이트 이후 인터넷 연결에 아무런 문제가 없었다.
    그래서 이 가정은 아닐거라고 생각된다.

BIOS 업데이트로 해결이라니 뭔가 뜬금없기는 했다.

BIOS 업데이트로 해결이 되지 않을 수도 있으나, 나와 동일한 메인보드 or 랜카드를 사용 중이라면 시도해봐서 나쁠 건 없을 것 같다.


참고로 검색해보니 아래와 같이 해결한 경우도 있었다.

1. 윈도우 업데이트 후 공유기 설정에 들어가보니 DDOS 차단 리스트에 내 PC가 등록되어 있어서 해제함.

2. 공유기의 보안 설정을 해제

3. 별도의 외장 랜카드 사용


문제 해결 과정

인터넷 검색을 통해 최근 일주일 안에 올라온 아래와 같은 글들을 찾았다.


https://www.reddit.com/r/Windows10/comments/aq99do/is_there_a_new_windows_10_ethernet_problem/

https://www.reddit.com/r/Windows10/comments/aq66y4/connection_issues_after_1809_none_of_the_common/

https://www.reddit.com/r/Windows10/comments/aoka3e/no_internet_access_after_update/


업데이트 이후, DHCP 를 통해 IP를 받아오는 과정에서 문제가 발생한다는 듯하다.

즉 고정 IP가 아니라면 무조건 문제가 발생한다는 듯했다.


나는 문제 해결을 위해 아래와 같은 것들을 시도했다.

  1. 윈도우 업데이트 삭제하기. KB4487017를 삭제하면 KB4480966가 새로 생성되고, 이걸 지우면 KB4483234가 새로 생성됐다.
    KB4485449 는 아예 삭제가 불가능했다.
  2. 랜카드 드라이버를 최신 버전을 포함해 다양한 버전을 설치 해 보았다.
  3. cmd.exe 를 관리자 권한으로 실행한 후, 아래의 것을 타이핑했다.
    ipconfig /release
    netsh int ip reset
    ipconfig /flushdns
    nbtstat -RR
  4. 랜케이블을 공유기가 아니라 통신사 모뎀에 바로 직결했다.
  5. 공유기의 펌웨어는 이미 최신버전 이었다.
  6. 랜카드 ipv4 설정에서 ip 를 자동할당이 아니라 공유기에서 설정한 고정 내부 ip 로 설정했다.
  7. DHCP 재할당을 목적으로, 랜카드 설정에서 MAC Address 를 변경했다.
  8. 공유기의 모든 방화벽 설정을 껐다.
하지만 위의 것들을 시도해도 증상은 해결되지 않았고 동일했다.
이러한 것들을 시도한 후, 바이오스 업데이트를 하여 문제가 해결됐다.
이후 바이오스를 제외하고 공유기, 랜카드 설정을 기존과 동일하게 돌렸으나, 정상적으로 작동 중이다.


Leave a comment

컨펙션 바이 포 시즌스 - Seasonal Fruit Cake

Posted 2019.02.13 23:43, Filed under: 먹을거

컨펙션 바이 포 시즌스 - Seasonal Fruit Cake



예약

포 시즌스 호텔 서울 홈페이지 - Confections by Four Seasons 설명 페이지


지난 12월 26일, 02) 6388-5520 로 연락해 예약했다.

그 전에 23일, 24일, 25일 3일 동안 낮시간에 연락해도 받질 않아서, 뭔가 잘못됐나 싶었다.

아마 주말/크리스마스라 영업 시간이 아니었거나, 타이밍이 안 맞았던 것 같다.

여튼 공휴일/요일/시간에 따라 전화를 받지 않을 수도 있으나, 꾸준히 걸다 보면 받는다.


이른 시간에 예약 · 방문해서, 방문했을 때 다른 케이크가 어떤 것들이 있는지 구경은 못했다.

오전 11시는 되어야 케이크 등의 제품류를 진열한다고 한다.



시즈날 후르츠 케이크 Seasonal Fruit Cake

원래 망고무스케이크를 예약하려고 했는데,

컨펙션 바이 포 시즌스는 시즌마다 다른 케잌을 준비해서, 내가 연락했을 때 망고무스케이크는 없다고 했다.

그래서 추천을 받아 시즈날 후르츠 케이크를 선택했고, 사이즈는 중간, 큰 사이즈 중 큰 사이즈를 주문했다. 가격은 55,000원.



크림에 거뭇거뭇한 점들이 박혀있는데, 바닐라 빈 인 것 같았다.

케이크 위에 하얀 비즈는 초콜릿 코팅된 바삭한 과자이다.

전체적으로 과하게 달지 않고 맛있다.


백화점이나 서울 시내 유명 제과점/베이커리에서 구매할 수 있는 3~4만원 대 케이크와 비교하면

맛 수준은 비슷했지만 비주얼의 완성도와 마감 수준이 훨씬 뛰어났다.

유명한 가게들 중 판매량이 많은 몇몇 곳은 맛은 있는데 마무리가 깔끔하지 않아서 아쉬웠던 적이 꽤 있었다.



측면에 박혀있는 핑크색 장식은 살짝 딸기향이 나는 것 같은 초콜릿이다.




Leave a comment

최근 어떤 학생으로부터 ANSYS 에 대해 공부하고 싶은데, 자료를 구글이나 Youtube 같은 곳에서 찾아봐도 영어로 된 자료밖에 없고 내용을 이해하기 힘들다며 도움을 줄 수 있냐는 메일을 받았다. 


나는 대학교 3학년 때 학부 수업을 통해 ANSYS를 처음 접했는데 당시에는 나 역시 Youtube, 구글 등에서 자료를 찾아보거나 태성에스엔이에서 나온 'ANSYS 왕초보 따라하기' 시리즈 책을 도서관에서 빌려 본게 다였다. 그 이후 대학원을 진학해 CAE와 관련된 분야를 전공하며 유용한, 특히 한글로 된 ANSYS 학습 자료를 많이 보게 되었다. 그래서 내가 아는 내용을 조금이나마 정리하여 해당 학생에게 전달해 주었다.


이왕 정리한김에, 해석 또는 ANSYS에 관심이 있는 대학생들에게 도움이 될만한 '한글로 된' 학습 자료 찾는 곳을 본 블로그에도 남겨놓고자 한다.



1. 온라인 자료로 학습하기

우리나라에서 ANSYS 프로그램을 판매하는 곳은 대표적으로 tSNE(태성에스엔이)가 있고, 이 곳에서 대부분의 교육을 수행한다. 해당 기관에서 수행하는 교육은 모두 한국어 이므로(비록 일부가 영어일지라도) 자료를 참고하기 좋다. 따라서 ANSYS에 관심이 있는 학생이라면 tSNE(https://www.tsne.co.kr) 와 etSNE(https://www.etsne.com) 홈페이지에 가입하는 것이 필수이다. 회원가입은 두 웹사이트에 각각 해야하며, 가입만 하면 별도의 비용 지출 없이 많은 동영상, 강의, 튜토리얼 자료를 볼 수 있다.



1-1. etSNE 강의 동영상으로 기초 이론 학습하기

etSNE의 전문 자료실(https://www.etsne.com/portal/document/list)에서 다양한 강의 및 세미나 동영상을 찾아볼 수 있다. 예전에는 edu.tsne.com 이라는 주소의 웹사이트였는데 최근 개편이 되었다. 그 때나 지금이나 구글에서 검색한다고 나오지는 않는다.


자료가 많기 때문에 검색 기능과 필터를 잘 활용해야 하는데, 검색 결과가 띄어쓰기를 하느냐 마냐에 따라서도 달라지기 때문에 -_-;; 여러번 검색해야 한다는 단점이 있기는 하다. '동영상' 으로 필터를 걸고 찾아보면 좋다.



예를 들어 CFD 기초 이론의 경우, 아래의 링크에서 2015 CFD기초세미나에 관한 자료를 찾아보면 된다.

https://www.etsne.com/portal/document/list?search=CFD%EA%B8%B0%EC%B4%88&mobile_filter=&m_search=&sort=desc


아래는 FEM 기초 이론과 ANSYS 에서 사용되는 다양한 요소(element)에 대한 설명이다

https://www.etsne.com/portal/document/list?search=2014%20Technical%20Day-ANSYS%20Element%20Part&mobile_filter=&m_search=&sort=desc


진동 해석 기초 이론의 경우 아래의 링크를 참고하자

https://www.etsne.com/portal/document/list?search=%EC%A7%84%EB%8F%99%ED%95%B4%EC%84%9D&mobile_filter=&m_search=&sort=desc


그 외 아주 많은 자료가 있으니 직접 찾아보자.



1-2. ANSYS 튜토리얼 자료

tSNE의 기술강좌(https://www.tsne.co.kr/bbs/board.php?bo_table=skillCourse) 에서 ANSYS Meshing, SpaceClaim, FLUENT 에 대한 튜토리얼 동영상을 볼 수 있다.



전부 위와 같이 자막이 달려있다.



1-3. 세미나 강의 자료

TSNE는 매년 태성에스엔이 CAE Conference 라는 것을 개최하는데, 다양한 세미나와 더불어 '꼭 알아야 하는 ~해석' 이라는 이름으로 다양한 기초 해석 이론 강좌를 진행한다. 상당히 체계적으로 정리되어있어 기초 지식을 정리하기 좋다.


아래 이미지는 2017년 컨퍼런스 때의 기초 강의 목록이다.



당시 강의 동영상은 찾지 못했지만, 다음의 링크에서 강의 자료를 다운받을 수 있다. 

2017년 자료의 경우 다음의 링크 (http://www.etsne.com/portal/document/view?DocID=11) 에서 다운로드 받은 압축파일 내 SessionII_꼭알기식.zip 파일을 참고하면 된다. 

2018년 자료의 경우 다음의 링크 (https://www.tsne.co.kr/bbs/board.php?bo_table=eventData&wr_id=145) 에서 다운로드 받은 압축파일 내 1일차 자료를 참고하면 된다.


강의 동영상은 없고 강의 자료밖에 없기 때문에 어느정도 해당 분야 이론의 기본 지식이 있는 사람이 보면 기초 지식을 정리하기 좋다.


1-4. KOCW 로 공부하기

열린 강의 홈페이지인 KOCW에서 몇몇 ANSYS 강의를 찾아볼 수 있다.

ANSYS로 잡는 고체역학 개념 강의 - http://www.kocw.net/home/search/kemView.do?kemId=1253507

기계공학에서의 ANSYS Workbench 활용 - http://www.kocw.net/home/search/kemView.do?kemId=949590

ANSYS 유동해석 - http://www.kocw.net/home/search/kemView.do?kemId=1192111



2. ANSYS 책으로 배우기

태성에스엔이 에서 출판한 ANSYS 관련 서적을 구매 또는 대학/국립 도서관에서 대여하여 공부하면 된다.

책 목록은 다음의 링크에서 확인하자. https://www.tsne.co.kr/shop/list.php


참고로 ~따라하기 시리즈는 구체적인 기능, 메뉴에 대한 설명보다는 어떤 해석을 하기 위해 단순히 어떤 진행 과정, 오퍼레이션을 취해야 하는지에 대한 설명만 주로 되어있어서, 본인이 원하는 것과 관련이 없는 다양한 예제들까지 포함되어 있으니 직접 구매하는 것은 추천하지 않는다.

왕초보 탈출하기 시리즈는 기초 설명을 포함하고 있어서 정말 ANSYS를 아무것도 모르는 사람이 따라하기에는 좋지만, 실제 내가 원하는 해석을 수행하는 단계까지 가기에는 한계가 있다.

Mechanical 의 경우 'ANSYS Mechanical 99+1' 라는 책이 있는데, 나름 기능 설명까지 되어있어서 보기 좋다 (구글에서 검색하면 나온다).


그 외에 태성에스엔이 오프라인 수업 교재도 유용한데 온라인에서 별도로 판매하는 것 같지는 않고, 태성에스엔이 CAE Conference 에 갔을 때 현장에서 판매하는 것을 본적이 있다.


태성에스엔이에서 출판한 책 말고도 그 외 한글로 된 여러 교재도 많은데 내가 본 것은 없어서 어떤 책을 추천하지는 못하겠다. 각자 자기 학교의 도서관 홈페이지에서 ANSYS 를 검색해보자.



3. 마이다스아이티에서 제공하는 자료로 기초 이론 배우기

ANSYS 와 관련된 자료는 아니지만, MIDAS를 개발한 마이다스아이티에서는 정말 기초적인 여러 이론자료들을 제공한다. CAE에 관심이 있다면 교양삼아 보기 좋은 자료들이다.


다양한 해석의 기초 설명 강의http://nfx.co.kr/education/cae_list.asp

CAE 백과사전http://nfx.co.kr/techpaper/keyword.asp

이와 더불어 마이다스아이티에서는 'CAE 표준 용어집'이라는 책을 출판했는데, 교양서라고 생각하고 쭉 읽어보면 재밌으니 관심이 있다면 빌려보는 것을 추천한다.



4. 오프라인 수업으로 배우기

만약 본인에게 금전적인 여유가 있다면 아래 링크로 들어가 원하는 교육에 해당하는 탭을 누른뒤 교육을 신청해 수강하면 된다.

https://www.tsne.co.kr/page/sub5/education_form.php


대학생의 경우 50% 할인이 되므로, Fluent 기본 강의의 예를 들면 대략 220,000원 이다.

강사에게 특정 해석 케이스에 대한 예제를 요청하면, 이미 해당 예제가 있는 경우 해당 자료를 제공해주는 경우를 보기도 했고 (사기업 관련자이기는 했지만...) 다양한 질의응답을 할 수도 있으므로 강사와 직접 진행하는 오프라인 교육의 유용함은 더 이상의 설명이 필요없을 것이다.


나는 태성에스엔이에서 Fluent 수업을 듣지는 않았지만 Mechanical 수업을 들었던 적이 있는데, 학교 수업에서 조교 들을 통해 배우는 것과는 차원이 다르다. 이유는 전문적으로 전산 역학을 다루는 연구실이 아닌 이상 ANSYS의 각 기능과 그 기능을 구현하기 위한 이론을 알기란 어렵다. 전산 역학을 다루더라도 다들 자기 프로젝트 하기에 바빠서 그냥 사용하는 수준?


하지만 내가 지금까지 봐왔던 태성에스엔이의 강사 분들은 기능 하나하나와 그 기능을 구성하는 이론, 여러가지 꿀팁, 매뉴얼에는 나와있지 않은 제약사항 들까지 많은 것을 알고있기에 정말 많은 도움이 된다.



5. ANSYS 사용자 모임 카페

https://cafe.naver.com/kansys/

위 카페에도 많은 자료가 올라와있으니 참고해보면 좋다.




Leave a comment

게시판의 어떤 글 내에 gfycat 주소 형태를 가진 링크가 삽입된 경우,

client 단에서 자바스크립트를 이용하여 자동으로 해당 이미지나 동영상을 동적으로 글에 삽입하는 브라우저 extension 을 만들고 싶었다.

이 과정에서 알게된 것을 정리해보았다.



gfycat api 문서를 좀 읽어보니... 모든 요청에 token이 필요하다고?

gfycat api 문서(https://developers.gfycat.com/api/)를 읽어봤는데, 테스트는 해보지 않았지만 모든 요청에 token 을 넘겨주어야 한다는 것 같다.

동영상 타이틀, 설명과 같은 간단한 동영상 정보를 가져오는 것 조차도 token을 넘겨야 한다는 것 같다.

참고로 Imgur 의 경우 client-id 만 가지고도 이미지 정보 가져오기, 익명으로 업로드, 익명으로 앨범 생성 등 이런저런 요청이 모두 가능하다.


token을 발급받기 위해서는 header 에 client id 와 client secret 을 적어서 api에 요청을 보내야한다.

그런데 client id 는 모두에게 공개되어도 상관 없는 정보지만, client secret 은 비밀키이므로 공개되어서는 안 된다.


대부분의 브라우저 extension 이나 userscript 와 같이 소스코드가 완전 노출되어 있으면서 별도의 서버 없이 client 쪽에서만 돌아가는 코드의 경우, client secret 을 소스코드 내에 삽입해버리면 해당 값이 불특정 다수에게 노출될 수 있다.

이 경우, 선택 가능한 방법은 별도의 서버를 둬서 client secret 을 숨기거나, 아니면 그냥 부작용을 감수하고 client secret 을 노출시키거나, 아니면 별도로 web sdk 접근 권한을 요청하여 부여받는 것 정도인 것 같다.


결국 웹을 뒤지다가 token 발급 없이 적용 가능한 새 방법을 찾아냈다.



익명으로 gfycat 이미지 or 동영상 정보 가져오기

단순히 이미지 or 동영상 정보만을 가져오는 것은 아래에서 소개하는 방법으로 가능하다.

아래 링크로 접속했을 때 내가 원하는 기능이 구현되어 있길래 찾을 수 있었다.

https://www.reddup.co/r/gfycat/comments/a4ii54/problem_with_lowercase_urls/


방법은 단순하다. 아래의 링크에 직접 접속해보면 JSON 형태의 결과를 볼 수 있다.

https://api.gfycat.com/v1test/gfycats/enlightenedpleasedliger


다만 위의 주소에 포함된 test 라는 단어에서 알 수 있는 것처럼 정식 api 는 아닌 것 같다.

단순히 이미지, 동영상 정보만 가져오기 때문인지는 몰라도, client id 나 client secret 모두 필요 없다.


호출 예제는 아래와 같다.

var gfycat_id = "EnlightenedPleasedLiger";
$.ajax({
    url:"https://api.gfycat.com/v1test/gfycats/"+gfycat_id,
    type: "GET",

    success:function(response){
        console.log(response)
    },
    error:function(error){
        console.log(error);
    }
});


응답은 아래와 같다.

{
    "gfyItem": {
        "tags": [],
        "languageCategories": [],
        "domainWhitelist": [],
        "geoWhitelist": [],
        "published": 1,
        "nsfw": "0",
        "gatekeeper": 0,
        "mp4Url": "https://giant.gfycat.com/EnlightenedPleasedLiger.mp4",
        "gifUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-size_restricted.gif",
        "webmUrl": "https://giant.gfycat.com/EnlightenedPleasedLiger.webm",
        "webpUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger.webp",
        "mobileUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-mobile.mp4",
        "mobilePosterUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-mobile.jpg",
        "extraLemmas": "",
        "thumb100PosterUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-mobile.jpg",
        "miniUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-mobile.mp4",
        "gif100px": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-max-1mb.gif",
        "miniPosterUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-mobile.jpg",
        "max5mbGif": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-size_restricted.gif",
        "title": "The perfect cameowflage",
        "max2mbGif": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-small.gif",
        "max1mbGif": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-max-1mb.gif",
        "posterUrl": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-poster.jpg",
        "languageText": "",
        "views": 2344494,
        "userName": "respectmyauth",
        "description": "",
        "hasTransparency": false,
        "hasAudio": false,
        "likes": "2",
        "dislikes": "0",
        "gfyNumber": "503589998",
        "userDisplayName": "RespectMyAuthoriteh",
        "userProfileImageUrl": "https://profiles.gfycat.com/13c23cfc2642bf519ae94d3a41982f6710642a8329ae1fe57afd7607c613a5ad.png",
        "gfyId": "enlightenedpleasedliger",
        "gfyName": "EnlightenedPleasedLiger",
        "avgColor": "#B5977A",
        "width": 640,
        "height": 800,
        "frameRate": 30.014025,
        "numFrames": 428.0,
        "mp4Size": 1049054,
        "webmSize": 945225,
        "createDate": 1544284400,
        "url": "https://www.instagram.com/p/BrAx26DFsm3/",
        "source": 1,
        "content_urls": {
            "max2mbGif": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-small.gif",
                "size": 1755832,
                "height": 250,
                "width": 200
            },
            "webp": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger.webp",
                "size": 3350218,
                "height": 0,
                "width": 0
            },
            "max1mbGif": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-max-1mb.gif",
                "size": 914896,
                "height": 200,
                "width": 160
            },
            "100pxGif": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-max-1mb.gif",
                "size": 914896,
                "height": 200,
                "width": 160
            },
            "mobilePoster": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-mobile.jpg",
                "size": 37312,
                "height": 800,
                "width": 640
            },
            "mp4": {
                "url": "https://giant.gfycat.com/EnlightenedPleasedLiger.mp4",
                "size": 1049054,
                "height": 800,
                "width": 640
            },
            "webm": {
                "url": "https://giant.gfycat.com/EnlightenedPleasedLiger.webm",
                "size": 945225,
                "height": 800,
                "width": 640
            },
            "max5mbGif": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-size_restricted.gif",
                "size": 4591628,
                "height": 312,
                "width": 250
            },
            "largeGif": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-size_restricted.gif",
                "size": 4591628,
                "height": 312,
                "width": 250
            },
            "mobile": {
                "url": "https://thumbs.gfycat.com/EnlightenedPleasedLiger-mobile.mp4",
                "size": 1638937,
                "height": 800,
                "width": 640
            }
        },
        "userData": {
            "name": "RespectMyAuthoriteh",
            "profileImageUrl": "https://profiles.gfycat.com/13c23cfc2642bf519ae94d3a41982f6710642a8329ae1fe57afd7607c613a5ad.png",
            "url": "https://gfycat.com/@respectmyauth",
            "username": "respectmyauth",
            "followers": 266,
            "following": 0,
            "profileUrl": "",
            "views": 178945688,
            "verified": false
        }
    }
}


만약 gfycat id가 존재하지 않는 것일 경우 아래와 같이 뜬다.

{"errorMessage":"ddddddddddddd does not exist."}

object에 동영상의 raw 주소도 적혀있는데, 동영상 raw 주소를 바로 가져와서 사용하는 것은 gfycat 쪽에서 원하지 않는 방법이라고 한다.


ajax call 에 성공하면 width, height 정보를 가져와서 비율을 계산하거나 높이값에만 + 44px 을 하여 iframe 형태로 삽입하면 되고

혹시라도 ajax call 에 실패하고, does not exist 에 해당하는 에러가 아닌 경우 그냥 임의의 비율로 iframe 을 삽입해버리면 된다.



gfycat 링크 및 id 탐지를 위한 정규표현식

임의의 url이 gfycat 링크에 해당하는지를 확인하고, 해당한다면 gfycat id 를 가져오기 위해 정규표현식을 사용한다.

https://regex101.com/r/YscsiZ/1/



심플하면서 잘 작동한다.


실 사용 예제는 아래와 같다.

var reg = /(gfycat\.com\/(?:\w*\/)*)(\w+)/

// href: 검사 대상 url
var res = href.match(reg);

if(res){  // gfycat 링크 탐지된 경우 할 일
    var gfycat_id = res.pop();  // gfycat id 가져오기

    // 이후 gfycat id 를 이용해 할 일을 적으면 됨
    $.ajax({
        url:"https://api.gfycat.com/v1test/gfycats/"+gfycat_id,
        type: "GET",

        success:function(response){
            console.log(response)
        },
        error:function(error){
            console.log(error);
        }
    });
}


iframe 으로 gfycat 동영상 삽입하기

https://gfycat.com/enlightenedpleasedliger 와 같은 링크의 경우, 아래와 같이 삽입하면 된다.


1. 크기 유동형

<div style='position:relative; padding-bottom:calc(이미지_비율_퍼센트% + 44px)'>
    <iframe src='https://gfycat.com/ifr/enlightenedpleasedliger' frameborder='0' 
     scrolling='no' width='100%' height='100%' style='position:absolute;top:0;left:0;' allowfullscreen></iframe>
</div>

크기 유동형의 경우, 위 코드를 둘러싼 element 의 가로 길이에 꽉 차게 iframe 이 특정 비율을 가진채로 삽입되게 된다.

이미지_비율_퍼센트% 에는, 만약 동영상 크기가 16:9 비율일 것이라고 가정하면 56.25% 라고 입력하면 된다.

ajax call 에 성공하여 width, height 로부터 비율을 계산할 수 있는 경우에는 계산된 값을 넣어주면 된다.


2. 크기 고정형

<iframe src='https://gfycat.com/ifr/enlightenedpleasedliger' frameborder='0' 
    scrolling='no' width='가로크기' height='세로크기' allowfullscreen></iframe>

크기 고정형의 경우에는 입력한 가로, 세로 크기로 iframe 이 삽입되게 된다.



api 사용 없이 gfycat 링크 주소만 이용하여 raw 동영상 주소 가져오기 (조건부)

다음으로는 api 를 이용하지 않고, gfycat 링크 주소만 가지고 가능한 방법을 정리해보았다.


gfycat 링크의 경우 lowercase 와 camel case 라는 두가지 형태의 링크가 존재한다. 두 링크 모두 동일한 페이지를 표시한다.

둘의 차이는 gfycat id 가 모두 소문자이냐, 아니면 단어의 첫글자를 대문자로 표시하는 형태이냐 이다.

- camel case link: https://gfycat.com/EnlightenedPleasedLiger

- lowercase link: https://gfycat.com/enlightenedpleasedliger


- camel case 형태의 경우

만약 camel case 형태라면 https://giant.gfycat.com/EnlightenedPleasedLiger.mp4 와 같은 형태로 raw 동영상 주소를 가져올 수 있다.

즉 gfycat 링크 주소만 가지고도 raw 동영상 주소를 찾아 다운받거나, 동영상을 글 내에 video 태그 형태로 삽입할 수 있다.


- lowercase 형태의 경우

하지만 lowercase 의 형태는 https://giant.gfycat.com/enlightenedpleasedliger.mp4 로 접속하면 Access Denied 라고 뜬다.

즉 camel case 형태 주소의 경우에는 raw 동영상을 바로 찾을 수 없다.

lowercase 를 camel case 로 변환하려면 camel case를 구성하는 모든 단어의 리스트를 가지고 있어야 하는데 사실상 어렵고, 추후 단어가 추가될 때마다 리스트를 갱신해야된다는 문제가 있다.



문제는, gfycat 페이지에서 공유 버튼을 눌렀을 때 뜨는 주소가 lower case 형태라서, 사용자는 대부분 lower case 형태의 주소를 가져온다는 것이다.




다만 iframe 으로 삽입할 때는 camel case 와 lowercase 를 구분하지 않는다.

따라서 그냥 iframe 으로 삽입하면 되는데 문제는 동영상 비율을 가져올 수 없어서, 임의 비율로 설정 시 남는 공간은 검은 여백으로 남는다.

contentWindow 로 이미지 or 동영상의 height 를 가져오면 크기 설정이 가능할 것 같기는 한데 테스트 해보지는 않았다.


결국 가장 어썸한 방법은 api 를 이용하는 것이다.

Leave a comment
≪ Previous : 1 : 2 : 3 : 4 : ··· : 26 : Next ≫