[about setting command line tools ]


react-native run-ios 로 실행을 시도했을 때 command line tools 없다는 에러가 발생하는데, 


xcode-select --install로 설치를 해도 반응이 없다. 


단순히 설치만 해서는 안되고 xcode preferences에 설정을 해야 한다. 


XCode > Preferences > Locations 화면에서 Command Line Tools 이 비어 있다면 이를 설정하면 된다.

--------------------------------------------------------------------------------------------------------

when it occurs an error there is no command line tools you run "react-native run-ios" command


in my case, it doesn't work even I installed the tool like this "xcode-select --install"


the reason is ... you have to set an information in XCode > Preferences > Locations.





[8081 port problem]


sudo lsof -i :8081 로 해당 프로세스 찾아서 kill.

--------------------------------------------------------------------------------------------------------

Find a process using the port 8081 like this " sudo lsof -i : 8081" and kill it.



[Build failed]

Entry, ":CFBundleIdentifier", Does Not Exist


signing 관련 이슈. 생성한 프로젝트의 xcodeproj 로 xcode 실행 후 General > Signing 설정. 이후 빌드하면 관련 에러없이 애뮬레이터로 실행됨.--------------------------------------------------------------------------------------------------------

The reason is about signing. You have to set a signing information in XCode project > General/Signing on XCode project that you made.



[error : npm update check failed]


sudo chown -R $USER:$(id -gn $USER) /Users/YOUR_USERNAME_HERE/.config





쉽다길래 별 생각 안했는데.. 설정할게 많네 -_-



ERROR. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

ERROR. memory locking requested for elasticsearch process but memory is not locked


위 두 에러가 발생하면 아래 내용을 참고하여 수정하면 된다.


클러스터를 구성하기 위해서는 리소스 사용에 대한 제한을 풀어줘야 한다. 


아래 command로 현재 리소스 제한 사항을 볼 수 있으며, 

ulimit -Sa


vi /etc/security/limits.conf


로 들어가서 아래와 같이 설정한다.


es-user hard memlock unlimited          >> 하드 세팅으로 메모리 락 제한 없도록 설정

es-user soft memlock unlimited           >> 소프트 세팅으로 메모리 락 제한 없도록 설정

es-user hard nofile 65536                   >> 하드 세팅으로 65536번의 파일을 열어 볼 수 있게 설정

es-user soft nofile 65536                    >> 소프트 세팅으로 65536번의 파일을 열어 볼 수 있게 설정

es-user hard nproc 65536                   >> 하드 세팅으로 65536번의 프로시저를 실행 할 수 있게 설정

es-user soft nproc 65536                    >> 소프트 세팅으로 65536번의 프로시저를 실행 할 수 있게 설정

(es-user는 Elasticsearch를 실행할 유저를 말한다. 사용중인 계정으로 수정하여 설정할 것!)

모든 설정이 끝나면 다시 시스템을 리붓한다. 



ERROR. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]


하나의 프로세스가 가질 수 있는 메모리 맵 영역의 최대 수를 말하는데 아래와 같이 수정이 가능함.


sysctl -w vm.max_map_count=262144

(root 권한으로 실행)

재실행 없이 바로 적용됨.


ERROR. failed to send join request to master ... 


network.bind_host, network.publish_host, network.host 세 가지 설정을 적절히 했는지 잘 살펴 볼 것!



config 파일에서 수정해야 할 내용들


config/jvm.options


메모리 관련된 설정인데 역할에 따라 다르다. 찾아보면 다양한 정보가 나오는데 아직 경험하지 못해서 이렇다 저렇다 적기가 뭐 하네. 일단 아래 두 가지를 적절히 수정. 해당 서버의 리소스에 맞춰 수정이 필요. 


-Xms 와 -Xmx 를 master는 2g , data는 4g로 수정해 봄.


-------------------------------------------------------------------------------------------------------------------


config/elasticsearch.yml


cluster.name: es-cluster             << 적절한 이름으로 설정. 클러스터마다 고유해야 함.


node.name: node-master           << 적절한 이름으로 설정. 노드마다 고유해야 함.

node.master : true                    << 마스터 노드인 경우 true 아니면 false

node.data: false                       << 데이터 전용 노드인 경우 true 아니면 false


bootstrap.memory_lock: true      <<  bootstrap 검사. 5버전부터 추가 된 듯. 주요 설정들이 잘못된 경우 상용 모드에서는 서버가 실행되지 않고, 개발 모드에서는 경고 메세지 출력 처리. memory_lock은 jvm 메모리의 swapping lock 여부를 확인한다. 


network.bind_host: 0.0.0.0         
network.publish_host: 1.1.1.1      << 설치된 서버의 IP
network.host: 1.1.1.1                

transport.tcp.compress: true       << node간 통신하는 데이터의 압축 여부를 설정.
transport.tcp.port: 9300             << node간 통신에 사용하는 포트

http.port: 9200                        << http를 통한 elasticsearch API 지원 노드의 port를 설정한다.

(각 포트는 별도 설정하지 않았는데 기본값을 사용한다고 가정한다. 필요하다면 http.port , transport.tcp.port 옵션을 수정하여 사용할 것!)
discovery.zen.minimum_master_nodes: 1  << 실제 서비스 환경에서는 최소 2대 이상의 마스터를 운영해야 한다.
discovery.zen.ping.unicast.hosts: ["1.1.1.1:9300"]     << node 간 연결을 위해 unicast로 master 노드를 지정하자. 마스터로 등록된 서버의 모든 ip를 기록해야 한다. 기본 포트인 9300을 사용한다면 굳이 기록할 필요는 없고, 포트를 변경한 경우만 이와 같이 기록하며 된다.

-------------------------------------------------------------------------------------------------------------------

이상 Elasticsearch Cluster 를 구성할 때 발생하는 에러 유형과 해결책, 그리고 config 설정 정보를 추가로 정리해 보았다.


 https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-server-refused-our-key/


처음 인스턴스를 생성할 때 다운로드 했던 pem 파일을 찾지 못한다면... 사망!! 처음부터 다시 구축하던가 백업해둔 이미지로 다시 생성!!


1. 해당 인스턴스를 실행 중지 시키고.. 


2. 작업 > 인스턴스 설정 > 사용자 데이터 보기/변경을 선택 (인스턴스가 완전히 종료되지 않은 상태에서 변경 불가)


3. 아래 코드를 붙여넣기 한 다음


#cloud-config
ssh_deletekeys: false
ssh_authorized_keys:
cloud_final_modules:
  - [ssh, always]

4. puttygen을 연 후, load 버튼을 눌러 저장해둔 pem 파일을 연다.


5. 그러면 상단 텍스트 박스에 public key 텍스트가 출력되는데 ssh-rsa로 시작하는 텍스트부터 끝까지 복사를 한다.


6. 붙여넣기 했던 위 코드 중 ssh_authorized_keys:  바로 옆에 복사한 내용을 붙여넣는다. 


7. 저장 하고 인스턴스를 다시 시작한다.


8. 다시 연결되는 것을 확인할 수 있다. 


위 링크의 내용을 그대로 가져왔지만 붙여 넣기 할 때 주의가 필요함. 

POST로 json데이터를 전달할 때,


서버 트리를 가지는 구조를 전달하면 400 bad request 를 리턴한다.


문제가 되는 구조는 아래와 같다. 


{ "msg" : { "to": "you", "from":"me"}}


text/plain으로 지정해서 보내봤지만 에러는 계속 발생한다. 



이를 아래와 같은 단일 구조로 만들어서 보내야 한다.


{"msgTo": "you", "msgFrom":"me"}




출처 링크 : https://developers.facebook.com/bugs/965852950229310/


facebook unity sdk로 제공되는 package 를 다운받아 설치해서 xcode에서 빌드하면 .... in Bulk_Facebook.Unity.Canvas_O.o 가 포함된 에러를 출력한다.


Facebook.Unity.Canvas는 WebGL을 위한 코드인데 이 코드에서 문제가 발생한다.


해결책은 아래.


1. download source. https://github.com/facebook/facebook-sdk-for-unity 2. Open solution VisualStudio (mac or window). 3. Remove all code of namespace. 'Facebook.Unity.Canvas' (WebGL) 4. Rebuild "Facebook.Unity" -> Facebook.Unity.dll 5. Replace new Facebook.Unity.dll to "/Assets/FacebookSDK/Plugins/Facebook.Unity.dll"


VISUAL STUDIO 2017에서 UNITY Lib로 빌드하려면 UnityEngine.DLL을 참조해야 한다.


솔루션 탐색기의 메뉴 중 "추가" > "참조"에서 "찾아보기" 누른 후 "C:\Program Files\Unity\Editor\Data\Managed" (이 경로는 유니티를 설치한 위치에 따라 다를 수 있다.) 에서 UnityEngine.dll을 선택하면 됩니다.


이후 Facebook.Unity.Canvas를 삭제 후 Facebook.Unity를 릴리즈 버전으로 재빌드한다. (Gameroom도 같이 삭제해도 됨.)


빌드된 dll을 "Assets\FacebookSDK\Plugins"에 덮어씌운 후 빌드하면 됨.



Assets/Plugins/Android에 있는 AndroidManifest.xml 파일을 열어 아래 붉은 라인을 추가한다.


<manifest

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    package="com.amazonaws.unity"

    android:installLocation="preferExternal"

    android:versionCode="1"

    android:versionName="1.0">



tools로 붙은 태그는 빌드 시 적용되지 않는다. 툴 내부용 혹은 preview에만 적용되는 태그들이다. 


왜 이 태그를 구글에서는 포함하지 않고 AndroidManifest.xml를 만드는지 모르겠지만 (범용으로 사용되는 내용은 아닌 듯...), 구글링 해보면 아래와 같은 문구를 찾을 수 있다. 


It defines the XML namespace of the document. You should put it, otherwise tags like <RelativeLayout> could be not recognied by the parser.


요약하자면 이 테그가 없으면, 툴에서 AndroidManifest.xml 파일을 머지 할 때 문제가 발생하는 듯 하다. 

Facebook Unity SDK 6.0 을 받아 패키지를 설치하고, 샘플을 돌려보는데 아래와 같은 에러가 발생


Could not securely load assembly from 

https://integrated-plugin-canvas-rsrc.fbsbx.com/rsrc/unity/lib/sdk_6.0/CanvasFacebook.dll


FB.cs 파일 line 411에 전처리기 "#if UNITY_4_5" 를 찾아 그 뒤에 " || UNITY_4_6 || UNITY_5_0 || UNITY_5" 를 붙여줄 것! 현재 버전 define만 붙여도 됨.




http://forum.unity3d.com/threads/facebook-sdk-assembly-cannot-be-loaded.264126/


커뮤니티에서 해결책을 찾았는데, 불편하게 개발자가 꼭 수정해야 되나 --; 


배포 버전 수정해서 올려주면 좋을텐데 --

(windows 환경)


nodejs에서 80포트 열어 쓰던 어플이 있는데, 어느날 갑자기


error: listen EACCES 0:0:0:0:80 에러를 뱉으면서 안된다. --a


netstat -ano 하면 ip,port 그리고 해당 포트를 사용하는 PID를 볼 수 있다. 


찾아보니 4 ... System이 쓰고 있다고. -- ㅁ.... 모지..


이래저래 찾아보니.. 최근에 로컬에 mssql을 설치했는데.. 


SQL Server Reporting Services가 내부적으로 80포트를 쓰고 있었네 --;


서비스 중지 시키니 잘 돌아감. 


휴 ~ 



예를들어 sp를 사용할 때, 내가 조회하는 테이블에 seqIndex라는 컬럼이 있고,


쿼리문은 아래와 같다고 가정한다.


insert into tbTable_Backup (seqIndex) select @seqIndex from tbTable where index=@inp_index;


tbTable과 tbTable_Backup은 같은 구조로 되어 있으며,


tbTable은 seqIndex bigint 컬럼 하나만 가지고 있다고 가정한다.


위 쿼리에서 원래는 서브쿼리인 select문은, 아래의 코드가 원래 의도했던 바다.


insert into tbTable_Backup (seqIndex) select seqIndex from tbTable where index=@inp_index;


이 경우, 


Query Browser 든, WorkBench든 문법 오류를 발생하지 않는다.


(컬럼 이름과 변수명이 틀린다고 해도 오류를 발생하지는 않음.)


sp를 사용할 때는 더 황당해 지는데, SQLExecute를 실행해도 오류는 발생하지 않는다.



output 값이 없을 경우, 이런 에러에 대해서는 대처할 방안이 없다. 


또한 output 값이 있어도 정상적인 output값을 리턴하지 않는다.


지정된 output값에는 @seqIndex값이 들어가 있을 것이다. 


output 변수의 이름이 @seqIndex가 아니어도...


단순 오타에서 비롯된 문제긴 했지만, 


mysql에서 어떻게 이런 코드가 output값에 영향을 미쳤는지 찾아봐야 할 듯.









+ Recent posts