콘솔에 위와 같이 입력하면 아래와 같이 설정되어 있는 기본 브라우저로 열릴거에요!
MetaTrader 4 시작하기
opencv 를 사용하여 프로그램을 만들 때 보통은 동적 라이브러리(shared dll) 버전을 사용합니다. 그런데, 동적 라이브러리를 사용하면 자신이 만든 프로램을 배포할 때 opencv에 딸린 dll들도 같이 보내야 합니다. 또는 아무 컴퓨터에서나 실행파일 하나만 가지고 프로그램을 돌렸으면 좋겠는데, opencv dll들도 같이 들고 다녀야 하니 여간 불편합니다. 이럴 때, 사용할 수 있는 방법이 opencv 정적 라이브러리(static library) 버전을 사용하는 것입니다.
그런데, opencv에 기본적으로 포함된 static library를 사용할 경우에는 다음과 같은 문제점이 있습니다. ① win32 콘솔 어플리케이션으로 하면 문제가 없지만, mfc 어플리케이션을 생성하면 highgui와 라이브러리 충돌이 발생한다. ② 기본 static library에는 ipp나 tbb와 같은 고속/병렬처리 라이브러리가 포함되어 있지 않기 때문에 매우 느리다.
따라서, 본 글에서는 파일 하나만 있으면 언제 어디서나 실행 가능한 프로그램을 만들어 보려고 합니다. 제가 목표로 하는 최종 프로그램 파일 형태는 다음과 같습니다.
- 실행파일(.exe)외에 어떤 부가 파일도 필요로 하지 않는다.
- opencv가 설치되지 않은 컴퓨터에서도 실행되어야 한다.
- visual studio가 설치되지 않은 컴퓨터에서도 실행되어야 한다.
- win7 뿐만 아니라 vista, win xp 등에서도 모두 실행가능해야 한다.
- opencv의 풀 기능을 사용하여 프로그램이 동작한다 (tbb, ipp 포함)
제가 개발한 프로그램들을 블로그에 올릴 때 사용할 목적으로 이러한 번거로운 변환작업을 시작하게 되었는데 정말 난관이 한두가지가 아닙니다. 정적 빌드를 왜 이렇게 어렵게 해 놓았는지 모르겠습니다. 일단 저의 작업 환경은 다음과 같습니다.
- visual studio 2008 (visual c++ 9.0) with service pack 1
- windows 7 professional 32bit
- opencv 2.4.4 (http://docs.opencv.org/)
- tbb 4.1 update3 (http://threadingbuildingblocks.org/)
- ipp 7.0 (http://software.intel.com/intel-ipp)
- cmake 2.8.3 (http://www.cmake.org/)
※ (2015.7.2) 외부 배포용이 아니라 연구개발용, 테스트용이라면 굳이 아래와 같은 복잡한 과정을 거칠 필요가 전혀 없습니다. 그냥 동적 라이브러리(dll)로 빌드하여 사용하시면 됩니다. 또한 opencv의 함수에 따라서 병렬처리를 지원하는 것도 있고 지원하지 않는 것도 있으며 병렬처리를 지원하는 함수의 경우에만 속도향상이 됩니다. 병렬처리를 지원하는 opencv 함수는 소스코드에 parallel_for_가 포함되어 있습니다.
OpenCV 기본 static library 그대로 이용하기
opencv를 다운받아 압축을 해제하면 미리 컴파일해 놓은 static library 버전이 기본적으로 포함되어 있습니다. 위치는 예를 들어, 저처럼 32비트OS visual c++ 9.0에서 사용할 경우 static library 위치는 opencv2.4.4\build\x86\vc9\staticlib 입니다. 여기에 있는 lib 파일들을 링크시키고 컴파일하면 opencv_XXX.dll들 없이도 실행 가능한 프로그램이 만들어집니다. 이 때, 주의할 사항들은 다음과 같습니다.
- visual studio에서 프로젝트를 생성할 때 win32 어플리케이션으로 생성. mfc 어플리케이션을 생성하면 highgui와 라이브러리 충돌이 발생함 (제 경우는 그런데 다른 컴퓨터에서도 그런지는 잘 모르겠네요. 혹시 되는 분 있음 알려주세요)
- 프로젝트 속성을 /MT(release), /MTd(debug)로 변경 (visual studio 기본 설정인 /MD 나 /MDd를 그대로 MetaTrader 4 시작하기 사용하면 엄청난 라이브러리 충돌 메시지를 보게 됩니다. 설정 위치는 프로젝트속성-C/C++-코드생성-런타임라이브러리입니다)
- 사용할 opencv 모듈들(opencv_corexxx.lib, opencv_imgprocxxx.lib, . ) 뿐만 아니라 IlmImf.lib, libjasper.lib, libjpeg.lib, libpng.lib, libtiff.lib, zlib.lib도 모두 링크시켜야 함. opencv의 staticlib 폴더에 같이 들어있음. (debug 버전이면 뒤에 d 붙은 파일들 링크)
- 추가적으로 vfw32.lib, comctl32.lib도 링크시켜야 함 (highgui 사용시 필요, debug/release 공통)
이와 같이 하면 opencv 없이도 exe 파일 하나만으로 실행 가능한 프로그램이 만들어집니다. 그런데, 문제는 CDialog 등 mfc 개발환경을 이용할 수 없으며 또한 tbb(threading building blocks)나 ipp (intel performance primitives)와 같은 고속 병렬처리 라이브러리를 이용할 수 없다는 점입니다. 특히 요즘 컴퓨터는 대부분 멀티코어이기 때문에 tbb를 사용했을 때와 안했을 때의 프로그램 속도 차이는 엄청납니다 (단, opencv 함수에 따라서 병렬처리를 지원하는 것도 있고 지원하지 않는 것도 있으며 병렬처리를 지원하는 함수의 경우에만 속도향상이 됩니다).
참고로 opencv 2.4.3 버전부터는 병렬처리를 위해 universal parallel_for_를 구현하여 tbb뿐만 아니라 OpenMP, Concurrency를 모두 지원합니다 (그 이전 버전에서는 tbb만 지원했었음). Concurrency는 visual studio 2010, 2012에 내장된 기능으로서 특별히 다른 처리를 안해도 visual studio가 알아서 병렬처리 코드로 컴파일해 준다고 합니다. 저는 아직 visual studio 2008이라서 이런 기능을 체험해 보지는 못했습니다. opencv에서 기본 제공되는 static library 버전을 그대로 사용해서 프로그램을 visual studio 2010 이상에서 컴파일했을 때, opencv 루틴들이 병렬로 처리될지는 아직 확인해 보지 못해서 모릅니다. 만일 그렇다면 굳이 아래와 같은 복잡한 일을 안해도 되겠네요.
본격적으로 설명을 하기 전에 앞서서 기본적으로 알아야 될 사항들이 몇 가지 있습니다.
컴파일 옵션중에 /MT(multi-threaded), /MD(multi-threaded dll)라는게 있습니다 (설정위치: 프로젝트속성-C/C++-코드생성-런타임라이브러리). 특히나, 정적 라이브러리를 사용할 경우에는 이것 때문에 무척 골치가 아픕니다. XXX is already defined in YYY 어쩌구 하는 라이브러리 충돌 컴파일 에러들은 모두 이놈들 때문에 발생합니다. 사용한 라이브러리가 하나는 /MT로 생성되었고 하나는 /MD로 생성되었다면 짤없이 라이브러리 충돌 에러 메시지를 보게 됩니다. http://msdn.microsoft.com/ko-kr/library/2kzt1wy3(v=vs.90).aspx에 보면 /MT, /MD가 설명되어 있지만 핵심 내용은 컴파일시 정적 버전의 C 런타임 라이브러리를 사용할 것이냐(/MT) 아니면 동적 버전을 사용할 것이냐(/MD)의 차이 입니다.
/MT: 응용 프로그램에서 다중 스레드 정적 버전의 런타임 라이브러리를 사용하도록 지정합니다. 즉 응용 프로그램에서 입출력, 메모리 할당과 같은 C 런타임 라이브러리(CRT, C Run-Time library) 기능을 사용할 때 정적 링크 버전인 LIBCMT.lib를 사용하여 프로그램이 빌드됨.
/MD: 응용 프로그램에서 다중 스레드 DLL 전용 버전의 런타임 라이브러리를 사용하도록 지정합니다. 즉 응용 프로그램에서 C 런타임 라이브러리 기능을 사용할 때 이것의 동적 링크 버전인 MSVCRT.lib를 사용하여 프로그램이 빌드됨.
만일 사용하는 외부 라이브러리는 /MT로 빌드되었는데, 현재 응용 프로그램은 /MD로 빌드하면 동일한 기능에 대해 서로 다른 두 버전의 라이브러리가 동시에 사용되기 때문에 XXX is already defined in YYY 어쩌구 하는 무수한 충돌 메시지를 보게 됩니다. 외부에서 가져온 라이브러리라면 /MD, /MT를 맞추거나 /NODEFAULTLIB:library 외에는 별 방법이 없지만(이렇게 해도 해결 안되는 경우가 많음), 자신이 직접 정적 라이브러리를 만들 경우에는 라이브러리든, 응용프로그램이든 모조건 다 /MT 옵션으로 맞추면 됩니다(debug용은 /MTd).
target 윈도우 버전
만든 응용 프로그램이 win7, vista, win xp 관계없이 다 동작하기 위해서는 프로그램 컴파일시 WINVER과 _WIN32_WINNT를 win xp에 맞추어 주어야 합니다. Visual studio로 만든 프로젝트에 보면 targetver.h 파일이 자동 생성됩니다. 여기에서 타겟 윈도우 버전을 다음과 같이 win xp로 수정합니다.
#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
만일 targetver.h 파일이 없을 경우에는 프로젝트속성에서 컴파일 옵션에 /D 매크로를 사용해서 두 상수를 추가로 정의해 주면 됩니다. 각 윈도우별 버전은 win 2000은 0x0500, win xp는 0x0501, windows server 2003은 0x0502, vista는 0x0600, win 7은 0x0601 입니다.
그럼 이제 본격적으로 단독 실행 가능한 프로그램을 위한 opencv 정적 라이브러리 만드는 방법을 차례차례 설명하겠습니다.
1. tbb를 static library로 변환하기
opencv는 병렬처리 라이브러리인 tbb를 지원합니다. 그래서, tbb를 포함해서 opencv를 빌드(build)하면 멀티코어 컴퓨터에서 고속으로 영상처리 루틴의 처리가 가능해집니다. opencv 배포판에 있는 미리 빌드된 파일들(동적/정적 모두 해당됨)에는 tbb가 포함되어 있지 않기 때문에 속도가 느립니다. tbb를 사용할 경우 약 4~10배까지 opencv 속도가 향상됩니다. 그런데, tbb를 사용하기 위해서는 자신이 직접 opencv 소스코드를 다시 컴파일해야 합니다.
tbb는 공개(free) 라이브러리로 http://threadingbuildingblocks.org/에서 소스코드 및 바이너리를 다운받을 수 있습니다. 그런데, 문제는 tbb가 동적 라이브러리(shared dll) 형태로만 배포된다는 것입니다. tbb 홈페이지에 보면 static 버전을 사용하면 원치않는 여러가지 문제가 발생할 수 있기 때문에 자기들은 dll 버전만을 지원한다고 명시되어 있습니다. 따라서, tbb를 사용하면 tbb.dll 파일도 항상 같이 가지고 다녀야 한다는 말이 됩니다.
하지만, 제가 원하는 것은 어떤 부가 파일도 필요없이 exe 파일 하나만으로 실행되는 프로그램이기 때문에 tbb도 직접 static library 버전으로 만들기로 했습니다.
tbb를 static library로 빌드하기 위해 필요한 사항들은 다음과 같습니다.
- tbb 홈페이지에서 tbb 소스코드를 다운로드 받는다.
- visual studio에서 win32 static library 프로젝트를 하나 생성한다.
- tbb가 설치된 경로를 TBB라고 했을 때, dll버전을 컴파일하기 위한 프로젝트 파일인 TBB\build\vsproject\tbb.vcproj을 참조하여 동일하게 소소코드 파일들(cpp, h)을 프로젝트에 포함시킨다. tbb.vcproj를 열면 tbb, tbbmalloc, tbbmalloc_proxy 이렇게 3개의 프로젝트가 한 workspace에 같이 들어있는데, 첫번째 tbb만 참조하면 된다. 리소스 파일은 포함시킬 필요 없음.
- 프로젝트 설정에서 코드생성 옵션을 릴리즈 버전은 /MT로, 디버그 버전은 /MTd로 설정한다(설정위치: 프로젝트설정-C/C++-코드생성-런타임라이브러리).
- 프로젝트 설정에서 preprocessor definitions에 __TBB_BUILD, USE_WINTHREAD, __TBB_SOURCE_DIRECTLY_INCLUDED 이렇게 3개를 추가해 준다. (설정위치: 프로젝트속성-C/C++-전처리-전처리정의). 컴파일 옵션에 /D 매크로를 사용해서 명령행으로 추가해도 됨.
- 프로젝트 설정에서 컴파일 옵션에 WINVER과 _WIN32_WINNT을 모두 0x0501로 정의해 줌. 0x0501은 windows xp에 해당하는 버전번호로서 이걸 해 주지 않으면 tbb가 vista 이상에서만 동작하게 됨. xp에서도 실행되도록 하기 위해서는 target window version을 이렇게 명시해 주어야 함. 컴파일 전처리 옵션에 추가하기 위해서는 /D 매크로를 사용하여 명령행 옵션란에 /DWINVER=0x0501와 /D_WIN32_WINNT=0x0501를 추가해 줌 (설정위치: 프로젝트속성-C/C++-명령행라인-추가옵션)
- tbb_misc.cpp 파일에서 __TBB_machine_store8_slow 함수 부분을 주석처리한다. 요놈 때문에 아무리 해도 컴파일이 안되었었는데 호출되는 곳을 보니 Linux 머신에서 사용할 때 뿐이라서 과감히 삭제했습니다. 실제 프로그램을 돌려보니 삭제해도 이상없이 잘 돌아갑니다.
ipp(intel performance primitives)는 인텔에서 제공하는 라이브러리로서 인텔 cpu 칩에 최적화된 연산 루틴을 제공한다고 합니다. opencv에서 ipp 사용을 지원하고 있는데 ipp를 사용하면 tbb만큼은 아니지만 opencv 루틴의 처리 속도가 어느 정도는 향상됩니다. ipp를 사용하기 위해서는 http://software.intel.com/intel-ipp에서 30일 평가판을 무료로 다운로드 받습니다. ipp에서는 tbb와 달리 static library 버전도 같이 제공됩니다. 평가판이긴 하지만 우리가 필요로 하는 것은 몇몇 static lib 파일들과 include 헤더 파일들이기 때문에 이 파일들만 따로 복사해 놓고 무한히 사용할 수 있습니다. opencv에서 필요로 하는 ipp 파일들은 ippcc_l.lib, ippcore_l.lib, ippcv_l.lib, ippi_l.lib, ipps_l.lib, ippvm_l.lib 이렇게 6개 뿐입니다. 정적 라이브러리 버전이기 때문에 dll 파일도 필요없으니 ipp 설치 폴더의 include 폴더에 있는 헤더 파일들과 이 6개 파일만 있으면 OK 입니다.
☞ (2015.6.15) 그런데 요즘 나오는 최신 ipp 버전에서는 위 static lib들이 사라졌다고 하는 얘기가 있기 때문에 위 6개 lib 파일들을 구하기 위해서는 예전버전(7.XX 이하)을 구해야 할 것 같습니다. 정확히 어떤 버전부터 사라졌는지는 잘 모르겠습니다만 7.0까지는 있었던 것 같습니다.
3. OpenCV 정적 라이브러리(static library) 직접 빌드하기
opencv를 소스코드로부터 직접 빌드하기 위해서는 cmake가 필요합니다. 정적 라이브러리 뿐만 아니라 기본 제공되는 동적 라이브러리 dll 버전도 tbb나 ipp를 포함하고 있지 않기 때문에 어차피 한번은 직접 빌드를 해 주는게 좋습니다.
cmake는 http://www.cmake.org/에서 다운로드 받을 수 있는 free 소프트웨어입니다. cmake 사용법은 다루지 않겠습니다만, opencv를 static library로 빌드하기 위해서 저는 다음과 같이 cmake를 설정했습니다. 중요한 사항은 BUILD_SHARED_LIBS는 체크해제하고(정적 라이브러리를 빌드할 것이므로) BUILD_WITH_STATIC_CRT도 체크해제(아니면 엄청난 라이브러리 충돌이 발생함)합니다. 그리고 BUILD_PACKAGE도 체크해제합니다(MetaTrader 4 시작하기 아니면 컴파일하다가 날 샙니다). WITH_IPP와 WITH_TBB는 사용할 것이기 때문에 체크해 줍니다. 그러면 ipp, tbb에 대한 include, lib 경로를 물어보는데 적절히 세팅해 주면 됩니다. tbb의 경우에는 앞에서 static 버전으로 컨버팅한 lib 파일 경로를 입력해 줍니다. png, tiff, jpeg, zlib 등도 체크해 줍니다.
이렇게 해서 cmake로 생성한 프로젝트에서 build all을 하면 정적 라이브러리 버전의 opencv가 생성되는데, 몇 가지 세팅해 주어야 할 게 있습니다.
- cmake로부터 기본적으로 생성된 opencv 프로젝트는 컴파일러 코드생성 옵션이 모두 /MD, /MDd로 되어 있는데 저는 opencv_core, opencv_highgui, . 등등 opencv 모듈들의 옵션을 모두 일일히 /MT, /MTd로 바꾼 후에 컴파일했습니다.
- 프로젝트 설정에서 MetaTrader 4 시작하기 컴파일 옵션에 /D 매크로를 이용해서 WINVER과 _WIN32_WINNT을 모두 0x0501로 정의해 줍니다. xp에서도 동작하게 하고 싶다면 모든 opencv 모듈을 일일히 설정해 줍니다.
- highgui 소스파일 중 window_w32.cpp파일이 있는데 안에 보면 #include 하는 코드가 있습니다. 이놈을 주석처리합니다. 처음엔 그대로 빌드했는데 계속 라이브러리 충돌이 나서 이놈을 제거하니 잘 되네요. 저만의 문제인지 일반적인 현상인지는 잘 모르겠군요. 주석처리 하지 않아도 잘 동작한다면 굳이 주석처리할 필요 없을 것입니다.
☞ CMake를 사용한 OpenCV 빌드 방법에 대한 글을 최근 올렸습니다: OpenCV 설치 및 CMake GPU+TBB+IPP 빌드(컴파일)하기
4. 독립 실행되는 응용 프로그램 생성하기
이제 마지막으로 지금까지 생성한 static library들을 가지고 독립 실행이 가능한 opencv 응용 프로그램을 만들면 됩니다. 이 때, 주의 사항은 다음과 같습니다.
- 만일 콘솔 어플리케이션이라면 프로젝트 속성에서 standard windows library를 사용하고, mfc 어플리케이션이라면 static library로 mfc를 사용하도록 설정한다.
- 프로젝트 속성에서 코드생성 옵션을 릴리즈 버전은 /MT로, 디버그 버전은 /MTd로 설정한다(설정위치: 프로젝트설정-C/C++-코드생성-런타임라이브러리). 안해주면 엄청난 라이브러리 충돌이 발생합니다.
- opencv static libary 모듈들 뿐만 아니라, IlmImf.lib, libjasper.lib, libjpeg.lib, libpng.lib, libtiff.lib, zlib.lib, vfw32.lib, comctl32.lib, 만들어 두었던 tbb.lib, 그리고 ipp 라이브러리들인 ippcc_l.lib, ippcore_l.lib, ippcv_l.lib, ippi_l.lib, ipps_l.lib, ippvm_l.lib 들을 전부다 링크시킨다. 예를 들어 use_opencv_static.h라는 이름으로 헤더 파일을 별도로 하나 만들어서 #pragma comment(lib,"opencv_core244d.lib"), #pragma comment(lib,"vfw32.lib") 등과 같이 필요한 정적 라이브러리 파일들을 일괄적으로 링크시키면 편리합니다.
이상의 내용을 가지고 아래와 같은 샘플 프로그램을 하나 만들어 보았습니다. opencv에 있는 샘플 프로그램중의 하나인 facedetect.c 예제를 그대로 포팅한 프로그램입니다. face DB 파일과 실행파일만 달랑 하나 있는데 opencv나 visual c++ 없이도 여러분 컴퓨터에서 실행되는지 확인해 보시기 바랍니다.
☞ 쓰고 보니 글이 길어졌네요. 그 만큼 제가 삽질을 많이 했다는 . ^^ 어쨌든 지금은 모든 문제가 클리어되어서 홀가분합니다. 제 글이 opencv를 직접 build하려는 이들, opencv에서 tbb나 ipp를 사용하고자 하는 이들, opencv를 정적 라이브러리로 사용하고자 하는 이들, 자신이 만든 프로그램을 독립 실행 가능한 버전으로 만들고자 하는 이들에게 도움이 되길 바랍니다. 혹 내용중 잘못된 부분이나 관련된 경험, 코멘트 등에 대해서는 댓글로 남겨 주시기 바랍니다.
HONOR NTN-LX1 50 LITE 6GB 128GB 스마트폰 사용 설명서
다음 그림의 지침에 따라 장치를 설정하십시오. 포함 된 배출 핀을 사용하십시오.
카드가 올바르게 정렬되고 홈이 먼저 카드 트레이에 삽입되었는지 확인하십시오.
단일 SIM 카드:
듀얼 SIM 카드:
SIM 카드 관리
필요에 따라 기본 모바일 데이터 카드와 전화 카드를 선택합니다. 자세한 내용은 사전 설치된 팁 앱을 확인하세요.
자세한 내용은
장치를 MetaTrader 4 시작하기 사용하는 동안 문제가 발생하면 다음 리소스에서 도움을받을 수 있습니다.
• 방문 https://www.hihonor.com/ 에 view 장치 정보 및 기타 정보.
• 방문 https://www.hihonor.com/global/support/ 해당 국가 또는 지역의 최신 연락처 정보를 확인하십시오.
• 설정으로 이동하여 검색 상자에 다음 키워드를 입력하여 view 해당 정보. 예
법률, 안전 정보, 인증 정보, 인증 로고.
안전 정보
장치를 사용하기 전에 모든 안전 정보를주의 깊게 읽고 장치가 안전하고 올바르게 작동하는지 확인하고 장치를 올바르게 폐기하는 방법을 알아보십시오.
운영 및 안전
폐기 및 재활용 정보
제품, 배터리, 문서 또는 포장에있는 기호는 제품과 배터리를 수명이 다한 지역 당국에서 지정한 별도의 폐기물 MetaTrader 4 시작하기 수거 지점으로 가져 가야 함을 의미합니다. 이를 통해 EEE 폐기물은 귀중한 재료를 보존하고 인간의 건강과 환경을 보호하는 방식으로 재활용 및 처리됩니다.
자세한 내용은 지역 당국, 소매점 또는 가정용 쓰레기 처리 서비스에 문의하거나 다음을 방문하십시오. web대지 https://www.hihonor.com/.
유해 물질 감소
이 장치 및 해당 전기 액세서리는 EU REACH 규정, RoHS 및 배터리(포함된 경우) 지침과 같은 전기 및 전자 장비의 특정 위험 물질 사용 제한에 대한 현지 해당 규칙을 준수합니다. REACH 및 RoHS에 대한 적합성 선언은 다음을 방문하십시오. web대지 https://www.hihonor.com/global/legal/certification/.
RF 노출 정보
세계 보건 기구는 사용을 제한하거나 단순히 핸즈프리 키트를 사용하여 장치를 머리와 몸에서 멀리 유지함으로써 노출을 줄일 수 있다고 밝혔습니다.
장치 케이스 및 장치 홀스터와 같은 장치 액세서리가 금속 부품으로 구성되어 있지 않은지 확인하십시오. 거리 요구 사항을 충족하려면 장치를 몸에서 멀리 두십시오.
조직 2.0g에 대해 10W/kg의 SAR 제한을 채택한 국가의 경우.
귀 근처 또는 신체에서 0.50cm 떨어진 거리에서 사용할 때 장치는 RF 사양을 준수합니다.
NTN-LX1: 보고된 최고 SAR 값: 머리 SAR: 0.78 W/kg; 신체 SAR: 1.21 W/kg.
NTN-L22: 보고된 최고 SAR 값: 머리 SAR: 0.78 W/kg; 신체 SAR: 1.21 W/kg.
조직 1.6g에 대해 1W/kg의 SAR 한계를 채택한 국가의 경우.
귀 근처 또는 신체에서 1.50cm 떨어진 거리에서 사용할 때 장치는 RF 사양을 준수합니다.
NTN-LX3: 보고된 최고 SAR 값: 머리 SAR: 0.98 W/kg; 본체 SAR: 0.40W/kg; 핫스팟 SAR: 0.65W/kg.
EU 규정 준수(NTN-LX1/NTN-L22에만 적용)
성명서
이에 Honor Device Co., Ltd.는 이 장치 NTN-LX1/NTN-L22가 RED 2014/53/EU, RoHS 2011/65/EU, ErP 2009/125/EC 지침을 준수함을 선언합니다.
EU 적합성 선언 전문, 자세한 ErP 정보, 액세서리 및 소프트웨어에 대한 최신 정보는 다음 인터넷 주소에서 확인할 수 있습니다. https://www.hihonor.com/global/legal/certification/.
이 장치는 EU의 모든 회원국에서 작동 할 수 있습니다.
장치가 사용되는 국가 및 지역 규정을 준수하십시오.
이 장치는 로컬 네트워크에 따라 사용이 제한 될 수 있습니다.
5GHz 대역의 제한 사항 :
5150 ~ 5350MHz 주파수 범위는 AT, BE, BG, CH, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HR, HU, IE, IS, IT에서만 실내 사용으로 제한됩니다. , LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI, SK, TR, UK(NI).
주파수 대역 및 전력
이 무선 장비에 적용되는 주파수 대역 및 송신 전력 (방사 및 / 또는 전도) 공칭 제한은 다음과 같습니다.
NTN-LX1 | GSM 900:35.5dBm, GSM 1800:32.5dBm, WCDMA 900/2100:25.7dBm, LTE 밴드 1/3/7/8/20/28:25.7dBm, Wi-Fi 2.4G:20dBm, 블루투스:13dBm, Wi -파이 5G:5150-5350MHz:23dBm, 5470-5725MHz:23dBm,5725-5850MHz:14dB m, NFC: 42dBμA/m @ 10m |
NTN-L22 | GSM 900:35.5dBm, GSM 1800:32.5dBm, WCDMA 900/2100:25.7dBm, LTE 밴드 1/3/7/8/20/28/38/40:25.7dBm, Wi-Fi 2.4G:20dBm, 블루투스 :13dBm, Wi-Fi 5G:5150-5350MHz:23dBm, 5470-5725MHz:23dBm,5725-5850MHz:14dBm |
FCC 성명
이 장비는 테스트를 거쳐 FCC 규정의 Part 15에 따라 Class B 디지털 장치에 대한 제한을 준수하는 것으로 확인되었습니다. 이러한 제한은 주거용 설치에서 유해한 간섭에 대해 합리적인 보호를 제공하기 위해 고안되었습니다. 이 장비는 무선 주파수 에너지를 생성, 사용 및 방출 할 수 있으며 지침에 따라 설치 및 사용하지 않을 경우 무선 통신에 유해한 간섭을 일으킬 수 있습니다. 그러나 특정 설치에서 간섭이 발생하지 않는다는 보장은 없습니다. 이 장비가 라디오 MetaTrader 4 시작하기 또는 TV 수신에 유해한 간섭을 일으키는 경우 (장비를 껐다가 켜서 확인할 수 있음) 사용자는 다음 조치 중 하나 이상을 사용하여 간섭을 수정하는 것이 좋습니다.
- 수신 안테나의 방향을 바꾸거나 재배치하십시오.
- 장비와 수신기 사이의 거리를 넓 힙니다.
- 수신기가 연결된 회로와 다른 회로의 콘센트에 장비를 연결하십시오.MetaTrader 4 시작하기
- 대리점이나 숙련 된 라디오 / TV 기술자에게 도움을 요청하십시오.
이 장치는 FCC 규정의 Part 15를 준수합니다.
작동에는 다음 두 가지 조건이 적용됩니다. (1)이 장치는 유해한 간섭을 일으키지 않으며 (2)이 장치는 원치 않는 작동을 유발할 수있는 간섭을 포함하여 수신 된 모든 간섭을 수용해야합니다.
주의: Honor Device Co., Ltd.가 규정 준수에 대해 명시적으로 승인하지 않은 모든 변경 또는 수정은 장비 작동에 대한 사용자의 권한을 무효화할 수 있습니다.
법적 고지
상표 및 권한 Android는 Google LLC의 상표입니다.
LTE는 ETSI의 상표입니다.
Bluetooth® 워드 마크 및 로고는 Bluetooth SIG, Inc. 소유의 등록 상표이며 Honor Device Co., Ltd.는 라이선스 하에 이러한 마크를 사용합니다.
Wi-Fi®, Wi-Fi CERTIFIED 로고 및 Wi-Fi 로고는 Wi-Fi Alliance의 상표입니다.
Copyright © (주)아너디바이스 2021. All rights reserved.
장치 색상, 크기 및 표시 내용을 포함하되 이에 국한되지 않는 이 안내서의 모든 그림과 그림은 참조용입니다. 실제 장치는 다를 수 있습니다. 이 가이드의 어떠한 내용도 명시적이든 묵시적이든 모든 종류의 보증을 구성하지 않습니다.
AWS Amplify 톺아보기
AWS Amplify는 AWS 리소스들을 가용하여 손쉽게 프론트-백엔드, 호스팅, 배포까지 풀스택으로 애플리케이션을 개발하도록 돕는 서비스의 집합입니다.
Amplify에 대한 이야기를 하던 중 하상엽 사원님께서 Google사의 Firebase와 비슷한 것 같다는 말을 하셨는데, 저도 듣자 마자 느낌이 딱! 하고 오더라구요.
자세한 기능들을 프로젝트를 구성해보면서 알아가면 좋을 것 같습니다.
시작하기 전에 : Amplify 가이드를 일부 따라하시더라도 리소스를 가용하셨다면 꼭 삭제가 필요합니다. 과금이 발생할 수 있으니 유의해주세요!
본 게시글은 클라우드를 통해 Todo list를 만들어보고 싶다. 또는, amplify를 빠르게 경험해보고 싶다는 분께 추천드립니다.
무스마에는 뛰어난 개발자분들이 많이 계시기 때문에 Amplify를 전적으로 쓰고 있지는 않습니다만,
유저관리, api 요청 시 인증 등 구현 또는 관리에 공수가 많이 들어가는 부분은 Amplify의 기능을 일부 사용하고 있습니다.
아래에서 곧 다룰 내용이니 기대해 주세요!
혹시 스크롤 압박을 느끼셨을 수도 있는데, 코드 스니펫이니 양해 부탁드립니다.
(코드양이 많은 것은 펼치기 버튼을 눌러서 확인해주세요.)
본 가이드에서 다룰 토픽들
- Next.js App
- Web Application Hosting
- Authentication
- GraphQL API
- Authorization
- Deleting the resource
구현할 기능들
- 애플리케이션 호스팅
- 회원가입 및 로그인
- 게시글 작성 및 댓글
위와 같은 기능들로 구현할 애플리케이션의 구성도는 다음과 같습니다.
개발 환경
시작하기전에 아래의 패키지가 설치되어 있어야 합니다.
- Node.js v10.x or later
- npm v5.x or later
- git v2.14.1 or later
- Bash Shell, Browser
- CLI 환경으로 필요한 리소스를 생성하고, 로컬에서 브라우저를 통해 확인합니다.
Get Strated
Create Next App 을 이용하여 새로운 프로젝트를 생성해봅시다.
생성된 디렉토리로 이동해서, aws-amplify 연관 패키지들을 설치해봅시다.
Style
TailwindCSS를 이용하여 스타일을 적용하겠습니다. 개발 환경에서만 사용하기 위해 --dev 옵션을 적용해주세요.
Tailwind을 다음 명령어을 통해 초기화해주세요.
초기화가 잘 진행돠었다면 아래의 파일들이 생성됩니다.
- tailwind.confing.js
- postcss.config.js
tailwind.config.js 파일의 내용을 다음과 같이 변경합니다.
Tailwind의 base, component, utilities 스타일이 사용되도록 next.js에서 생성된 ./styles/globals.css 파일에 아래의 내용을 추가합니다.
테스트를 위한 index page
기본으로 생성된 pages/index.js 를 변경합니다.
이제 문제없이 로딩이 잘 되는 지 확인해봅시다!
yarn dev 명령어로 로컬에 서버를 띄우고 브라우저로 접속을 시도해봅시다!
Amplify CLI 설치 및 AWS Credential
Amplify CLI는 커맨드-라인-인터페이스(터미널, 쉘등)으로 간편하게 amplify와 관련한 클라우드 리소스 관리할 수 있도록 돕는 인터페이스입니다.
AWS Credential
설치가 완료되었다면, 사용전에 준비해야할 부분이 있습니다.
명령만 내리면 클라우드 리소스가 생성되는데, 그렇다면 AWS도 누가 해당 서비스를 사용하는 지, 신원확인이 필요할 것입니다.
그에 대한 설정이 Credential 입니다.
아래의 참고를 보시고 천천히 따라 설정해주세요.
문서로 확인하셔도 되고, 2분 가량의 비디오로 확인하셔도 MetaTrader 4 시작하기 됩니다.
참고로 서울리전은 ap-northeast-2 입니다. 또 IAM 설정은 리전에 국한되지 않습니다.
Amplify Project 초기화
아래의 명령어로 초기화를 진행할 수 있습니다.
Distribution Directory Path 는 꼭 out 으로 변경해주세요.
(next.js 에서 build 후 export 를 하면 out 디렉토리로 결과물이 들어갑니다.)
amplify init 초기화가 끝나면, amplify 폴더가 생성되고 src 폴더아래 aws-exports.js 파일이 생성됩니다.
src/aws-exports.js 는 amplify 의 설정값들이 들어있습니다.
amplify/team-provider-info.json 파일에는 amplify 프로젝트의 back-end 환경(env) 관련 변수들이 들어가 있습니다.
다른 사람들과 동일한 백엔드 환경을 공유하고 싶다면, 이 파일을 공유하면 됩니다.
만약에 프로젝트를 공개하고 싶은 경우라면 이 파일은 빼주는게 좋습니다. (.gitignore 에 추가)
자, 이제 초기화가 잘 되었는 지 확인해 볼까요?
-
amplify 프로젝트의 상태를 보고 싶다면
Next 앱 설정
프로젝트가 생성되고 준비되었으니, 이제 테스트를 해봅시다.
우선 해야할 일은 우리가 만들고 있는 app에서 Amplify project에 대해 인삭하도록 하는 것입니다.
src 폴더 안에 자동생성된 aws-exports.js 파일을 참조하도록 추가해봅시다.
설정을 위해 pages/_app.js 파일을 열고, 다음 코드를 추가합니다.
위 코드가 추가되면, app에서 AWS service를 이용할 준비가 됩니다.
Hosting
Amplify Console은 배포와 CI를 위한 hosting 서비스입니다.
우선 Build 스크립트 변경을 위해 packages.json 안의 내용 중 scripts 부분을 다음과 같이 변경합니다.
위에서 보이는 next export 는 next.js app을 static HTML 파일로 변환해 주기 때문에 node 서버없이 app을 로딩시켜줍니다.
Hosting을 추가하기 위해, 다음 명령어를 실행해주세요.
다음 명령어로 변경사항(add hosting)을 적용해 봅니다.
적용이 되었다면 배포까지 해봅시다.
배포가 완료 되었다면, 브라우저에서 터미널로 출력된 url로 들어가셔서 next.js앱이 정상적으로 로딩되는 것을 확인해주세요.
호스팅까지 잘 완료가 되었네요. 축하드립니다!
이제 원하는 기능을 쇼핑하듯이 하나씩 담아서 사용하시면 됩니다.
로그인(SignUp)
AWS 서비스중 cognito를 사용하여 회원가입, 로그인, 접근 제어등을 관리하는 기능을 추가하겠습니다.
추가하였다면 변경사항을 적용해봅시다.
이렇게 cognito를 사용할 준비가 끝이 났습니다. 이제 앱으로 돌아가서 이를 적용해보도록 합시다.
인증 또는 로그인된 사용자 들만 접근했으면 하는 페이지에
withAuthenticator HOC (Higher Order Component) 를 적용하면 됩니다.
예를 들면, /pages/index.js 페이지에 withAuthenticator 를 적용하면,
사용자는 반드시 로그인을 해야합니다.
로그인이 되어있지 않다면, 로그인 페이지로 이동하게 됩니다.
그렇다면 한번 테스트해볼까요?
pages/index.js 파일을 조금 수정해봅시다.
파일수정을 완료했다면, 브라우저에서 테스트해봅시다.
로그인 페이지가 잘 로딩되나요?
로그인 창이 뜨는 것으로, Authentication 절차가 app에 추가된 것을 확인할 수 있습니다.
다음으로 추가적인 테스트를 위해 계정생성을 해주세요.
계정 생성 요청?을 하면 생성 당시 입력했던 이메일로 확인코드(confirmation code) 가 전송됩니다.
이를 입력해주면서 비로소, 계정이 생성됩니다.
cognito 서비스를 확인해볼 겸 서비스 콘솔로 들어가서 확인해봅시다.
콘솔에 위와 같이 입력하면 아래와 같이 설정되어 있는 기본 브라우저로 열릴거에요!
로그아웃(SignOut)
로그아웃 기능도 구현해보도록 합시다.
기능구현이라는 표현보다는 기능을 배치한다는 것이 맞다고 생각이 될 정도로 간편한 것 같아요.
Luniverse 2.0
Tutorial OpenedBuild a blockchain service in 15 minutes.
With Luniverse, it's easy to issue tokens without complicated coding
and blockchain can be introduced into any services.Luniverse Multichain NFT Bridge
Experience the Luniverse multi-chain NFT service now, Luniverse multi-chain NFT solves both minting fee and environmental problem with free bridge service.
Fuel your digital transformation journey
with Luniverse.A surge of new disruptive technologies has accelerated the pace of innovation over the last few years. Our robust platform, built with dynamic scalability, interoperability, security in mind, can empower organizations across industries to achieve their varying blockchain aspirations. Harness the power of blockchain today with Luniverse, so you can focus on making agile business decisions.
Windows 10을 사용하는 PC의 속도를 향상시키는 10가지 방법
PC 성능이 느려지고 평소와 같이 작동하지 않을 경우, Windows 10 설정을 개선하면 속도 및 PC 효율성 향상에 도움을 줄 수 있습니다. Windows 10은 오늘날 사용되는 최고 성능의 운영 체제 중 하나이지만 PC의 성능을 느리게 할 수 있는 많은 시스템 리소스를 사용하는 여러 기능이 함께 제공됩니다. 더불어 Microsoft는 전반적인 효율성을 향상시키기 위해 Windows 10 최신 버전에 내장 기능을 추가하였습니다. 그럼에도, PC는 성능 저하의 어려움을 계속해서 겪고 있습니다.
저장소 부족, 유지 관리 및 강력한 하드웨어의 부족과 같은 이유가 속도를 더욱 저하시키는 원인일 수 있습니다. 사용하지 않는 프로그램 및 앱 삭제부터 하드웨어 업그레이드까지, Windows 10의 속도를 향상시키고 PC를 새롭게 하여 최적의 성능으로 되돌릴 수 있는 몇 가지 방법이 있습니다.
1. 최신 업데이트 확인
PC에서 최고 성능을 얻기 위한 최고의 방법 중 하나는 설치된 Windows 10을 최신 버전으로 업데이트하는 것입니다. Microsoft는 자주 업데이트를 제공하여 시스템 성능을 저하시키는 일반적인 버그 및 시스템 오류를 수정합니다. 일부 업데이트는 사소한 것일 수 있으나 그 밖의 업데이트는 PC의 성능을 향상시키는 데 도움이 될 수 있는 최신 장치 드라이버를 검색하기 위한 시스템의 주요 변경사항일 수 있습니다.
업데이트를 확인하려면, Windows 메뉴를 열고, 설정 > 업데이트 및 보안 > Windows 업데이트 > 업데이트 확인을 선택하십시오. 업데이트가 사용 가능한 경우, 지금 설치를 선택하십시오. PC를 다시 시작하고 성능이 향상되었는지 확인하십시오.
2. PC 다시 시작
이는 간단한 것처럼 보이겠지만 정기적으로 PC를 다시 시작하면 시스템의 속도 향상에 도움이 될 수 있습니다. 많은 사람들은 PC를 한 번에 몇 주 동안 켜놓고, 컴퓨터를 종료하지 않고 절전 모드로 전환합니다. 이는 PC 메모리에 프로그램 및 워크로드가 쌓이게 만들어 프로그램 구동 및 파일 접근과 같은 일상적인 작업 속도를 저하시킵니다.
매일 PC를 종료하면, PC의 메모리를 새롭게 하고 다음날 최적의 성능을 발휘하도록 준비하게 됩니다. 예를 들어 프로그램을 열거나 파일 또는 문서에 접근하는 것과 같은 간단한 일상적인 작업에서 PC의 속도가 저하된 것을 알게 된 경우, PC를 종료하거나 다시 시작해 보십시오. 컴퓨터를 종료하거나 다시 시작하기 전에 반드시 작업 내용을 저장하십시오.
3. 시작 시 프로그램 실행 비활성화
많은 프로그램 및 앱이 동시에 열려있으면 PC의 성능이 크게 저하될 수 있습니다. 많은 MetaTrader 4 시작하기 설치 프로그램들은 PC를 시작하자마자 Windows에 해당 프로그램을 실행하도록 명령하여 시스템 성능을 저하시킵니다.
시작 시 프로그램 실행을 비활성화하려면, 작업 관리자를 열고 시작프로그램 탭을 클릭하십시오. '시작 영향,’을 확인해보면 어떤 프로그램이 시작 시 미치는 영향이 크거나 낮은지 알 수 있습니다. 높은 영향을 미치는 프로그램이 바로 시스템 성능을 저하시키는 원인입니다.
시작 시 실행되는 프로그램을 중지하려면 선택하려는 프로그램을 마우스 오른쪽 버튼으로 클릭하고 '비활성화’를 클릭하십시오.
4. 디스크 정리
Windows 10의 내장 기능 중 하나는 디스크 정리입니다. 이 기능을 통해 이미지 썸네일, 다운로드받은 프로그램 파일 및 임시 인터넷 파일을 포함하여 PC에 축적된 사용하지 않는 임시 파일을 삭제할 수 있습니다.
Windows 메뉴를 열고 검색 창에 '디스크 정리’를 입력하여 검색하십시오. 삭제할 프로그램 파일의 목록을 보여줍니다. 파일명 옆에 있는 상자에 체크표시를 하여 삭제할 파일을 선택하십시오. 삭제할 모든 파일을 선택한 후, '시스템 파일 정리’를 클릭하십시오. 디스크 정리가 확보할 수 있는 공간의 용량을 계산합니다.
이번에는 여분의 메모리 또는 디스크 공간을 차지하고 있는 기타 파일 또는 앱을 삭제하십시오. 삭제하려는 오래되고 사용하지 않은 파일을 확인하기 위한 좋은 장소는 다운로드 폴더입니다.
5. 오래된 소프트웨어 삭제
PC에는 종종 불필요한 제3자 소프트웨어가 사전 설치되어 있습니다. 이는 블로트웨어라고 하며 크기가 크기 때문에 저장 공간을 차지할 수 있으며 보통 전혀 사용되지 않습니다.
설치되었지만 한번도 사용하지 않는 다른 프로그램이 PC의 속도 저하 원인일 수도 있습니다. 설치된 앱을 확인하려면, 다음으로 이동하십시오.
- 제어판 > 프로그램 및 기능 > 프로그램 제거
- 더이상 필요하지 않은 프로그램을 마우스 오른쪽 버튼으로 클릭하고 '제거’를 선택하십시오.
6. 특수 효과 비활성화
Windows 10에는 사용자 환경이 더욱 멋지게 보여지고 느껴질 수 있도록 해주는 수 많은 특수 효과가 있습니다. 이러한 특수 효과는 Windows의 기본 기능이며 시야에서 선명해졌다가 흐려지도록 설정된 다른 기능도 있습니다. 컴퓨터의 속도를 저하시키는 여러 기타 특수 기능에는 반투명 및 애니메이션 등이 있습니다.
Windows 메뉴를 열고 시스템’을 검색한 후, '고급 시스템 설정’ 탭으로 이동한 다음 '고급’ 탭으로 이동하여 성능 설정’을 선택하십시오. '시각 효과’ 탭을 클릭하고 사용자 지정’에 해당하는 라디오 버튼을 클릭합니다. 시각 효과 목록에서 상자의 체크표시를 해제하여 비활성화할 수 있습니다. 다 했으면 '적용’을 클릭하여 변경 사항을 확인하십시오.
7. 투명 효과 비활성화
Windows 10은 애니메이션과 같은 기능을 표시하기 위해 시스템 리소스를 사용할 뿐만 아니라, 또한 작업 메뉴와 같은 특정 기능을 위해 투명 효과도 사용합니다. 이 가볍고 단순해 보이는 효과는 꽤나 복잡하고 생각보다 더 많은 시스템 리소스를 차지합니다.
투명 효과를 비활성화 하려면, Windows 메뉴를 열고 검색 창에서 '색 설정’을 입력하여 Windows 10에서 색 설정을 여십시오. 여기에서, 투명 효과' 버튼을 찾을 때까지 스크롤을 아래로 내리십시오. 해당 버튼을 클릭하여 투명 효과를 활성화 또는 비활성화하십시오.
8. 시스템 유지 관리 실행
Windows 10은 정기적인 시스템 유지 관리 작업을 수행하는 내장 기능이 탑재되어 있습니다. 여기에는 하드 드라이브 조각모음, 업데이트 검색 및 맬웨어 및 바이러스 검색과 같은 작업이 포함됩니다.
시스템 유지 관리는 대체로 PC가 대기 상태인 동안 백그라운드에서 실행되지만, 시스템에 문제가 있어서 확인하려는 경우 수동으로 실행하도록 선택할 수 있습니다.
이를 실행하려면, 제어판을 열고 '보안 및 유지 관리’를 선택하십시오. 화살표를 클릭하여 유지 관리 옵션을 확장시키고 '유지 관리 시작’을 선택하십시오. 수동 시스템 유지 관리 확인을 수행하도록 할 수 있습니다.
9. RAM 업그레이드
PC의 속도 및 성능을 향상시킬 수 있는 근본적인 방법 중 하나는 RAM을 업그레이드하여 시스템의 메모리 용량을 증가시키는 것입니다. Windows 10이 원할하게 작동하려면 최소 4GB가 필요합니다. 게임 또는 미디어 제작과 같이 집약적인 시스템 워크로드용으로 PC를 사용하는 경우, 더 많은 메모리를 사용하면 좋습니다.
RAM 업그레이드는 PC의 속도와 성능을 크게 향상시킬 수 있습니다. PC에 특별히 필요한 RAM의 종류를 알아보려면, 작업 관리자를 열고(Ctrl + Alt + Delete), '성능’을 클릭하십시오. PC에 사용가능한 메모리 슬롯 수와 DDR4와 같은 RAM의 유형도 알아볼 수 있습니다. RAM 업그레이드에 대해 자세히 알아보십시오.
10. 저장소 업그레이드
저장소 업그레이드는 PC의 속도와 성능을 크게 향상시키는 데 도움이 될 수 있습니다. 대부분의 PC는 회전형 하드 디스크 드라이브(HDD)가 장착되어 있지만 저장소 하드웨어를 솔리드 스테이트 드라이브(SSD)로 개선하면 시스템이 더욱 강력해집니다.
SSD는 일반적으로 HDD보다 고가이지만 부팅 시간, 프로그램 로딩 시간 및 전체적인 시스템 응답성 향상은 투자할 만한 가치가 있습니다.
SSD는 다양한 폼 팩터 또는 크기로 MetaTrader 4 시작하기 출시되며 PC 시스템의 시스템 사양에 따라 달라집니다. 데스크탑 및 노트북의 경우 2.5 및 M.2 폼 팩터로 구성됩니다. 시스템과 호환되는 올바른 SSD를 구입하십시오. 또한 하드 드라이브에서 새로운 SSD로 모든 파일 및 문서를 전송할 수 있으므로, PC의 컨텐츠 손실을 걱정하지 않아도 됩니다. 스토리지 업그레이드에 대해 자세히 알아보십시오.
0 개 댓글