펑션 사용 질문

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 베이스/채팅/데이터베이스/월드 SDK 버전 :
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

뒤끝 개발팀을 통한 별도의 기술지원이 작업이 필요한 요청은 help@backnd.com 으로 문의해주시기 바랍니다.

펑션을 여러 프로젝트로 만들어서 관리 중입니다. 상점 구매 펑션, 레벨 보상 펑션 등…
코드를 작성하면서 중복되는 로직(ex, 특정 chart를 읽어와 변수로 저장할때)이 발생하면서
번거로움이 느껴져서 따로 shared 프로젝트 하나 만든 뒤 그 프로젝트에 chart를 읽어와 변수로 저장해놓는
코드를 작성하여 여러 다른 펑션 프로젝트에서 사용가능 하도록 하기 위해
연결해서 테스트 해봤는데
timeout 오류가 발생하더라고요
뒤끝 펑션 프로젝트는 다른 dll파일과의 연결이 안되나요?
아니면 따로 방법이 있는지 궁금해요.

안녕하세요 개발자님,
BackendFunction.dll 을 다른 프로젝트에서 참조하여 사용하시는 경우 내부 환경 변수, 설정이 제대로 되지 않아 작동이 되지 않을 수 있습니다.
보다 정확한 확인을 위해 프로젝트 구조와 상세한 오류 정보를 보내 공유해주시면 확인하여 안내드릴 수 있도록 하겠습니다.

Shared Project: 뒤끝 프로젝트가 아닌 일반 .Net 8.0 클래스 라이브러리
Main Project: 뒤끝 펑션(BackendFunction:Create으로 만든) 프로젝트

Shared Project에도 뒤끝 api 코드를 작성할수 있게 Main Project에 있는 dll파일 자체를 복사하여
Share Project 폴더 경로에 붙여넣고 Main Proejct csproj 파일에 있는 ItemGroup 내용을
Shared Project csproj 에 똑같이 복붙 한 상태.

그 결과 ShareProject에도 using BackEnd 사용 가능한 상태,

그리고 MainProject에 SharedProject 코드를 사용하기 위해 csproj에 ProejctReference를 통해 연결했습니다.
그 뒤로 build한뒤 압축 결과물을 확인해보니 SharedProject의 dll이 들어있는것을 정상적으로 확인한 상태입니다.

발생하는 오류: 10초 Timeout(테스트로 shared project의 코드 전부 주석 처리 및 본 프로젝트에도 코드 제거했지만 똑같이 발생)

추가로 외부 dll을 로드하지 못하는 문제라고 생각해서 참조를 끊고
csproj에 Compile Include(파일링크) 방식으로 우회해서 시도해봤는데 여전히 같은 오류였습니다.
(이 해결방식은 ai 도움을 받았습니다.)

아 죄송합니다. 해결한 것 같습니다. 최종적으로 몇개 더 확인해보고 말씀드리겠습니다.

좋아요 1

타임아웃 오류 건은 제 개인 실수였습니다.
수정 뒤에 테스트로 dll파일에는 문제가 없는거 같으나 뒤끝 api 사용에 대한 문제로 확인됩니다.
shared project에서 뒤끝 관련 api 코드 없이 일반 코드로만 구성했을때는 문제 없으나

using System.Collections.Generic;
using BackEnd;

namespace BackendSharedLib
{

    public class ItemBaseEntry
    {
        public int ItemID;
        public int MaxStack;
        public char Rarity;
        public string Param = "";
    }

    public class ItemBaseTable
    {
        public static List<ItemBaseEntry> ItemBaseEntries = new();
        private static string m_CacheChartID = "";

        public static string Set(string chartID)
        {
            if (m_CacheChartID == chartID || ItemBaseEntries.Count != 0)
                return string.Empty;

            ItemBaseEntries.Clear();
            var bro = Backend.Chart.GetChartContents(chartID);
            if (!bro.IsSuccess())
                return bro.ErrorCode;
            var rows = bro.FlattenRows();
            for (int i = 0; i < rows.Count; i++)
            {
                var row = rows[i];
                var entry = new ItemBaseEntry
                {
                    ItemID = int.Parse(row["ItemID"].ToString()),
                    MaxStack = int.Parse(row["MaxStack"].ToString()),
                    Rarity = char.Parse(row["Rarity"].ToString()),
                    Param = row["Param"].ToString()
                };
                ItemBaseEntries.Add(entry);
            }

            m_CacheChartID = chartID;
            return string.Empty;
        }
    }

}

와 같이 코드를 구성 했는데 오류가 발생했습니다. chartID는 정상 확인 했습니다.

아래는 발생한 오류 메세지 입니다.
ReturnValue : {“result”:"{\n “errorType”: “FileNotFoundException”,\n “errorMessage”: “Could not load file or assembly ‘Backend, Version=5.18.1.0, Culture=neutral, PublicKeyToken=null’. The system cannot find the file specified.\n”,\n “stackTrace”: [\n “at BackendSharedLib.ItemBaseTable.Set(String chartID)”,\n “at BackendFunction.BFunc.Function(Stream stream, ILambdaContext context)”,\n “at lambda_method1(Closure, Stream, ILambdaContext, Stream)”,\n “at Amazon.Lambda.RuntimeSupport.HandlerWrapper.<>c__DisplayClass8_0.b__0(InvocationRequest invocation) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/HandlerWrapper.cs:line 68”,\n “at Amazon.Lambda.RuntimeSupport.LambdaBootstrap.<>c__DisplayClass26_0.<b__0>d.MoveNext() in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/LambdaBootstrap.cs:line 369”\n ]\n}\n"}

결론은 Compile Include방식으로 해결한 상태 입니다.
dll로 연결해서 사용하는 방식은 아직은 모르겠네요.