요즘 svelte랑 tailwind css 사용해서 조금씩 뭔가 만들어 보고 있는데

드롭다운 메뉴를 만들어 보려고 하던 와중

document is not defined 이런 에러가 나타났다.

문제가 되었던 코드는

1
2
3
4
5
6
7
$: {
    if (isOpen) {
      document.addEventListener('click', handleClickOutside);
    } else {
      document.removeEventListener('click', handleClickOutside);
    }
  }
cs

이 부분이었다

 

이 에러는 JavaScript가 브라우저 내에서 실행되는 환경에서만 document 객체가 정의되기 때문에

 Node.js 환경에서 실행될 때 발생하는 에러였다 SvelteKit 프로젝트에서는 서버에서 실행 중인

노드 코드에서는 document 객체를 사용할 수 없기 때문이었다.

그래서 스택오버플로우를 찾아보니 onMount를 사용해 해결 하는 방법이 있었다

 

1
2
3
4
5
6
7
8
9
10
11
import { onMount } from 'svelte';
 
$: {
    if (isOpen) {
      document.addEventListener('click', handleClickOutside);
    } else {
        onMount(() => {
            document.removeEventListener('click', handleClickOutside);
        });
    }
  }
cs

 

이렇게 온마운트 안에 다큐먼트를 사용하는 코드를 넣으면 해결이 된다.

onMount는 컴포넌트가 처음으로 DOM에 렌더링 될 때 실행되는 함수이다.

아마 위 코드를 사용할때 다큐먼트가 정의되지 않은 상태에서 에러가 발생하는듯 하다.

스벨트의 라이프 싸이클에 대해서 나중에 한번 정리를 해봐야겠다.

 

 

[atlas] MongoError: user is not allowed to do action [find] 에러 해결 방법

 

파서도 고치고 비밀번호 특수문자도 고쳤는데 또 에러가 난다.

스택오버플로우를 뒤져보다 어떤 사람의 답변을 보니

 

atals쓰는 모든 사람들에게 처음 나타나는 오류란다.

 

atals에서 사용자 권한설정을 안해줘서 나타나는 오류라는 것

 

atals 웹사이트에 들어가서 로그인 후

 

클러스터의 Database Access 를 클릭해 사용자 Edit를 누르면

 

 

저기 동그라미 친 부분에서 어드민으로 주거나 알아서 권한을 부여해주면 된다.

 

읽기만 허용시킨다던가 읽기쓰기 둘다 해도 된다거나 혹은 아예 나처럼 관리자권한으로 준다던가 하면 해결이 되고

 

또 저 외에도 에러가 난다면 

 

본인이 화이트리스트에 설정을 제대로 했는지 확인해보도록 하자

 

Network Access에서 나는 기본적으로 모든 아이피에서 허용을 시켜놨는데

그걸 지우고 따로 화이트리스트로 IP관리를 하다가 다른 IP에서 접속을 시도 했을때도

위와같은 에러가 나타난다고 한다.

 

 

 

 

[mongoose] MongoParseError: URI does not have hostname, domain name and tld 오류

 

파서 까지 설정을 했는데 또 오류가 난다!

역시 이럴땐 스택오버 플로우 형님들한테 찾아가야 한다.

비밀번호에 특수문자가 들어간 경우에 나타나는 오류였다.

 

! 이나 # 같은 문자가 들어간 경우엔

 

%21 이나 %23 으로 바꿔서 입력 해야 한다.

 

만약 비밀번호가

개발자123## 이라면 개발자123%23%23  으로 적어야 한다는것.

 

 

[mongoose] DeprecationWarning: current URL string parser is deprecated 오류 해결 방법

 

몽구스 버전 업데이트 이후 다시 접속을 하려 해보니

오류메세지가 바뀌었다

 


Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
(node:2672) Warning: Accessing non-existent property 'MongoError' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2672) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

 

파싱 문제였다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import mongoose from 'mongoose';
 
mongoose
  .connect("mongodb+srv://[사용자]:[암호]@cheesustudy.ujge0.mongodb.net/[db]?retryWrites=true&w=majority", {
    useNewUrlParser: true,
    useCreateIndex: true,
  })
  .then(() => {
    console.log("Connected to MongoDB");
  })
  .catch((err) => {
    console.log(err);
  });
cs

 

이렇게 바꿔주면 된다.

 

 

얼마전 예전에 공부용으로 만들어 뒀던 프로젝트에서 사용하는

MLab mongoDB 서비스가 atlas로 통합된다고

atlas로 마이그레이션 하지 않으면 데이터가 다 날아갈 것이라는 내용의 메일이 날아 왔었다.

 

당장 데이터가 날아간다는데 부랴부랴 마이그레이션 문서 찾아서 하라는대로 해서 

 

데이터를 옮겨놓고 클러스터 만들어서 굴려놓긴 했는데 

서비스하는곳이 바뀌면서 접속 URL이 달라져버렸다

 

기존엔

 

mongodb://[사용자]:[비밀번호]@ds145389.mlab.com:45389/[DB]

이런식이었는데

Atlas로 바뀌면서

mongodb+srv://[사용자]:[비밀번호]@cheesustudy.ujge0.mongodb.net/[DB]?retryWrites=true&w=majority

이렇게 형식이 많이 바뀌었다

url만 바꾸면 되는줄 알고

nodejs db 커넥트 하는 부분에서 URL을 바꿨는데

에러가 뜬다

 

대충 에러 내용은 접속 url형식이 +srv << 이렇게 된건 못쓴다는 내용이었다.

 

구글링을 해보니 mongoose 예전 버전에서는 저 url방식으로 접속이 불가능 하다는 것.

 

다른 방법은 없고 일단 몽구스 버전부터 올려야 했다.

 

3년전인가 4년전에 만들어 놓고 놔뒀던 소스라 잘 될까 했는데

 

역시 안된다.

몽구스 버전 업데이트를 하는데 의존성에 엮여있는것들이 나오고

 

그것들도 버전이 낮아서 제대로 안된다는 내용..;;

 

어차피 예전에 쓰던 노트북에 있던 프로젝트였고

 

현재 집에서 쓰는 데스크탑에선 셋팅한적이 없으므로 아얘 

 

데스크탑에서 새로 셋팅을 하기로 했다.

 

node설치하고 npm으로 새로 싹다 받아서 

 

예전에 깃에 올려뒀던 소스 받고 몽구스 버전만 바꾸어 주었다.

 

혹시 나처럼 mlab 쓰다가 atlas로 강제 이전하게 되었는데

 

디비 접속 오류 나는 사람은 그냥 싹 밀고 버전업 하면 될 것이다.

 

 

[세븐나이츠2] 세나2 오류 접속,다운,앱플레이어[호환되는 기기가 아닙니다]

 

세나2 하려고 하는데 호환되는 기기가 아니라고 뜨면서 다운이 안되시는 분들 많으실거에요

기존 앱플레이어가 안드로이드5버전이라서 안될 가능성이 큽니다. 이건 다른 LD플레이어나 블루스택도 

마찬가지일겁니다.

해당 오류 해결 방법에 대해서 설명해 드리겠습니다.

 

1. 안드로이드 7업그레이드

 

 

녹스 멀티플레이어 실행 하셔서 저부분 누르시고 7버전으로 새로운 앱플레이어를 생성해주시면 됩니다.

기존 앱플이 대부분 안드로이드5였기 때문에 호환되는 기기가 아니라는 오류가 떠서 다운받지 못했던거에요

 

2. 기기설정

 

 

설정모드로 들어가셔서 CPU는 4코어로 해주시고 휴대폰 모델은 갤럭시 노트10+로 해주세요

 

그 이후 앱플레이어를 재시작한 후 다시 스토어에 들어가서

 

세븐나이츠2 검색하시고 다운받으시면 잘 구동이 되는걸 볼 수 있습니다.

[JAVA] VO리스트에 add로 값 넣고 싶을때


프로젝트마다 다른 방식이겠지만


나는 주로


1
2
List<dataVO> result  = null;
result =  service.loadData(vo);
cs


이런식으로 가져 오는 방식을 선호한다


그런데


1
2
3
4
5
6
7
8
9
10
11
 
List<dataVO> result = null;
 
List<dataVO> data1 = null;
List<dataVO> data2 = null;
List<dataVO> data3 = null;
List<dataVO> data4 = null;
data1 =  service.loadData(vo1);
data2 =  service.loadData(vo2);
data3 =  service.loadData(vo3);
data4 =  service.loadData(vo4);
cs


각각의 데이터들을 result에 넣고자 하면


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
List<dataVO> result = null;
 
List<dataVO> data1 = null;
List<dataVO> data2 = null;
List<dataVO> data3 = null;
List<dataVO> data4 = null;
data1 =  service.loadData(vo1);
data2 =  service.loadData(vo2);
data3 =  service.loadData(vo3);
data4 =  service.loadData(vo4);
 
result.add(data1.get(0));
result.add(data2.get(0));
result.add(data3.get(0));
result.add(data4.get(0));
cs

이런식으로 넣으려 할텐데

저러면 에러가 난다


result가 null이기 때문이다


이때


result를


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
List<dataVO> result = new ArrayList();
 
List<dataVO> data1 = null;
List<dataVO> data2 = null;
List<dataVO> data3 = null;
List<dataVO> data4 = null;
data1 =  service.loadData(vo1);
data2 =  service.loadData(vo2);
data3 =  service.loadData(vo3);
data4 =  service.loadData(vo4);
 
result.add(data1.get(0));
result.add(data2.get(0));
result.add(data3.get(0));
result.add(data4.get(0));
cs



이렇게


new ArrayList(); 로 선언해주면


에러없이 값이 잘 들어간다.

 

[달빛조각사] 달빛 조각사 서버

 

 

현재 사전 예약을 받고 있는 달빛 조각사의 서버가

 

엘릭서(Elixir)로 만들어 졌다고 한다.

 

출처: 네이버 포스트

 

https://m.post.naver.com/viewer/postView.nhn?volumeNo=19418083&memberNo=11255530

 

송재경 개발 ‘달빛조각사’, NDC에서 첫 정보공개

[BY 게임인사이트] 엑스엘게임즈가 개발 중인 모바일 MMORPG 달빛조각사가 NDC에서 모습을 드러냈다. 201...

m.post.naver.com

.

 

 

판타지 소설 좋아하는 사람들한테 엘릭서는

 

능력치를 영구히 증가시켜주거나 반시체도 살려내는 마법의 물약으로

 

알고 있는 사람이 더 많을텐데 

 

엘릭서(Elixir)는 얼랭(Erlang) 가상머신(VM) 위에서 동작하는

 

함수형, 동시성 프로그래밍 언어이다.

 

 

 

 

 

2019 개발자 컨퍼런스(NDC)에서 공개한 내용이라고 하는데

 

와 엘릭서로 게임서버를 만들줄이야..

 

저거 서버 뻑나거나 서버 개발자 그만둬버리면

 

다음 개발자 뽑기 좀 빡셀 것 같다

 

엘릭서가 유명한 언어긴 하지만 다른 언어들에 비해서

 

능숙히 다룰줄 아는 사람이 적은데 ㄷㄷ

 

문제는 달빛조각사를 개발한

 

엑스엘게임즈의 김민욱 서버개발 담당자 조차 

 

달빛조각사를 개발하면서 처음으로 접한 언어라고 한다;;

 

물론 아주 대단하신 개발자 분이시고 경험도 많으시니 큰 문제는 생기지 않겠지만

 

음... 사실 개발자 입장에서 처음 접한 언어로의 개발은 가능하긴 한데

 

갑자기 생긴 이슈에 대해선 대처 속도가 느릴 수 밖에 없기에

 

오픈하거나 업데이트 이후 발생하는 오류 처리 속도(여기선 정기점검의 연장 가능성)를

 

얼마나 빠르게 제어할 수 있을지가 궁금하다.

 

 

포스팅을 읽어 보니

 

또한 자동 코딩 포맷팅 기능과 더불어 빠른 컴파일 속도, 경량화된 프로세스(ligh-weight process), 마이크로 서비스, 빠른 이터레이션, 메모리 문제로부터의 해방(단, 메모릭 릭은 해결하지 못함), 타이밍 문제로 인한 고생이 덜하다는 것 등이 강점이다.

 

 

라는 문구가 있는데 저기서 - 메모리 릭은 해결하지 못함 -  이부분이... ㄷㄷㄷ

 

저 포스팅은 올해 4월에 포스팅된 글이니 지금은 아마 전부 해결 했겠지 하는 믿음을 가져 본다...;;;

 

 

마지막으로

 

엘릭서는 높은 가용성을 가지고 있고 높은 생산성을 가지고 있는 언어 이기 때문에

 

초기 단계에 있는 게임의 빠른 대규모 업데이트라던지 새로운 컨텐츠의 꾸준한 증가를 기대 해 볼 수 있을 것 같다.

 

 

 

 

 

[테라M] 구글 계정연동 오류 해결방법






구글 계정연동 오류 에러 나는 사람들을 위한 해결 방법입니다.


설정 -> 어플리케이션 관리자 에서


GOOGLE PLAY GAME를 찾습니다


거기에 사용제한이 걸려있는 경우 제한을 풀어주시면 됩니다.

[테라M] 에러코드 65538 계정연동 오류, 푸쉬알림 오류



현재 아이폰에서 발생하는 대표적인 오류 두가지는 


에러코드 65538 계정연동 오류, 푸쉬알림 오류 이 두가지일 것이다


푸쉬알림 오류는 일종의 권환오류중 하나라고 생각되어 진다.


녹스에서도 동일한 오류가 발생하고 아이폰에서 발생한다는 점에서


개인적인 뇌피셜로는 권한관련 오류일듯 한데


이건 금방 고쳐질것 같다. 게임하는데 지장도 없으니 큰 문제도 없는데


문제는


에러코드 65538이다


로그인 오류 : 앱에 로그인하시는데 오류가 발생했습니다. 나중에 다시 시도하세요



라는 문구가 나타나는데


안드로이드에서 계정연동 후


아이폰기기로 다시 계정 연동할때 나타나는 에러다



안드로이드에서 키워놓은거 폰바꿔서 아이폰으로 연동하려는데


그게 안되면


얼마나 빡치겠는가.



개인적인 해결 방법은



안드로이드에서 계정 연동을 먼저 했다 아이폰으로


옮겨야 하는경우




1. 아이폰에 설치된 테라의 캐쉬데이터를 전부 지우고 다시 연동을 시도 한다



2. 1번이 안되면  PC에 녹스 설치후 녹스에 테라M을 설치한 다음 녹스에서 페북 연동을해 캐릭터를 가져온다.

   그리고 그 이후 아이폰에서 페이스북 연동을 이용해 캐릭터 정보를 가져온다.(이때 녹스에서 페북연동을 해지하지 않습니다. 그냥

녹스만 종료하고 연동 ㄱㄱ)




위의 두가지 방법이 전부 안된다면...








첫 번째,

1. 설정>게임센터로 가서 현재 로그인하고 있는 Apple ID를 선택한 뒤 로그아웃합니다. 그리고 다시 로그인하세요.

2. iPhone/iPad를 강제로 재시동합니다(iPhone, iPad 또는 iPod touch 재시동하기 - Apple 지원에서 "강제로 재시동하기"를 참조하세요. 사과로고가 보일 때까지 홈버튼+잠자기버튼을 계속 누르고 있으면 강제 재시동이 됩니다.)

3. 설정>일반>날짜와 시간에서 "자동으로 설정(Set Automatically)"을 켬으로 합니다.

이 방법이 듣지 않는 사용자는 다른 방법을 다시 적용해 보세요.

 

두 번째,

1. iPhone/iPad에서 현재 구동중인 모든 앱을 닫습니다.

2. 에어플레인 모드로 변경합니다.

3. 전원을 껐다가 몇 분 기다린 뒤 다시 iPhone/iPad의 전원을 켭니다.

4. 설정>게임센터에서 현재 로그인되어 있는 Apple ID를 선택한 뒤 로그아웃합니다.

5. 에어플레인 모드를 해제하고, 다시 wifi를 활성화합니다.

6. 설정>게임센터에서 다시 로그인합니다.




OR


간단히는 설정>재설정>모든 설정 재설정


OR


아예 다른 Apple ID로 게임센터를 로그인하는 것만으로 문제가 해결되었다는 사람도 있습니다;


위의 방법까지 안된다면....

저도 방법이 없네요 ㅠ_ㅠ


하지만 게임 에러해결 전문가로 방법은 계속 찾아보도록 하겠습니다.


+ Recent posts