현재 진행중인 프로젝트에 Aop 구현은 힘들어서 facade를 통해 Redisson lock을 적용해보려고 합니다. facade 패턴을 처음 접해서 그런지 프로젝트에 어떻게 적용해야 할지 고민입니다. service 로직을 건들지 않고, facade 패턴을 사용해서 역할분리 한 거에 대해서는 이해했습니다만, mvc 패턴에서, controller가 결국 동시성 제어가 적용된 서비스를 이용하려면 service(createReservation)가 아니라 facade(createReservation)를 사용해야 하는데, controller가 service로도 동시성 제어가 적용되지 않은(사용해서는 안될) 메서드(createReservation)에 접근이 가능하다는 점에서 문제가 될수도 있다고 생각했습니다. (비슷한 상황으로 컨트롤러가 reposiotry를 가끔 참조하기도 하는데, 이때의 경우는 service에 굳이 해당 로직을 만들지 않을때인데, 지금 같은 경우는 비슷한 로직이 service에도 있고, facade 에도 있는 경우라.. ) 협업에서 어떤 개발자의 실수로 service 계층의 createReservation(사용해서는 안될)가져다 쓸 수 있다는 것이 신경쓸 문제가 아닌지, 아니면 컨트롤러가 그 서비스의 메서드에 접근을 못하게 한다던지, 실제로 어떻게 적용하시는지 궁금합니다.
반드시 실행 되어야할 서비스 로직에 lock(3,TimeUnit.SECONDS) 이럭식으로 사용하려고 하는데 tryLock() 대신 써도 될지 궁금합니다. 코드 찾아보면, 다들 tryLock() 쓰시던데, 시스템적으로 저렇게 계속 lock획득 대기 상태로 만들어 놓으면, 안되는건지 궁금합니다. lock 대기 상태일때도 커넥션이 잡혀있나요? lock 대기상태가 많아지면 서버가 다운될 수 있나요?
안녕하세요! 스프링 로드맵을 수강하고 Spring Boot + Thymeleaf 로 간단한 프로젝트를 진행하던 중 궁금한 점이 있어 질문 남김니다. 좋아요 기능이나 모달창에서 일어나는 동작들은 매번 결과를 view를 넘겨주기 번거롭거나 처리하기 복잡한 것 같아서, 이러한 부분들만 일반 Controller 말고 Rest Controller를 호출하고 처리하도록 구현하고 싶은데 혹시 이런 방식으로 혼용해서 사용해도 괜찮을까요? 아니면 프로젝트의 일관성을 위해 일반 Controller만 사용하는 것이 좋을까요? 감사합니다.
Langchain에서 제공해주는 rag-prompt 기능에 대해 설명해주셨는데요 하나 궁금한게 LLM마다 prompt의 처리도 다를 것으로 생각되는데 prompt를 잘 만들어주는게 langchain 내부적으로 사용한 target model에 맞추어 최적화해주는건가요 ? 아니면 서로 다른 LLM이더라도 공통적으로 최적화된 prompt가 존재할 수 있는건가요 ?
[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
POST 로 사용자 등록하는 예제를 수행하고 나서 DB를 조회해보면 password, ssn은 null 로 되어 있습니다. 이유가 뭘까요? { "name": "User4", "joinDate": "2024-08-23T23:35:48.706+00:00", "password": "test4", "ssn": "444444-1111111" }
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 강좌 17:39 전후로 해서 root element가 n개인 자식 component에서 특정 element에 $attrs를 v-bind 하지 안흐면 run time warning이 발생한다는 설명을 해주셨습니다. 그런데 이 상황에서 inheritAttrs: false를 선언하지 않아도 v-bind="$attrs"가 동작해서 run time warning이 사라졌습니다. inheritAttrs:flase를 선언하여 구조상 상속을 비활성화해야만 v-bind="$attrs"를 설정할 수 있는게 맞지 않나요~? 이 과정에서 제가 잘못 이해한 부분이 있을까 싶어 짐코딩님께 여쭤봅니다.
안녕하세요 애구마님! 6-7) 7:50 쯤에 이미지의 사이즈를 지정해주기 위해 frame() 작성하시는 부분에 질문이 있습니다. bigBanner의 이미지 사이즈 지정 시 AsyncImage(url:URL(string:bigBanner)) { image in image .resizable() .cornerRadius(10) .aspectRatio(contentMode: .fit) // 여기서 사이즈 지정 .frame(width: 300, height: 525) } poster의 이미지 사이즈 지정 시 AsyncImage(url: url) { image in image .resizable() } placeholder: { ProgressView() .tint(Color.white) } // 여기서 사이즈 지정 .frame(width: 100, height: 175) 첫 번째 AsyncImage를 작성하셨을 때 이미지 사이즈는 image에서 직접적으로 작성하셨는데 두번째 포스터들의 이미지 사이즈를 작성하실 때는 placeholder 아래쪽에 작성하신 이유가 궁금합니다. 답변 부탁드립니다. 감사합니다 :)
import win32com.client import os import shutil # 캐시 디렉토리 경로 cache_dir = os.path.join(os.getenv('LOCALAPPDATA'), 'Temp', 'gen_py') # 캐시 디렉토리 삭제 if os.path.exists(cache_dir): shutil.rmtree(cache_dir) # 캐시 재생성 및 한글 객체 생성 hwp = win32com.client.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule") # 문서 시작 위치로 커서 이동 hwp.MovePos(2) # 문서 시작으로 커서 이동 # 표 생성: 행(5), 열(3) act = hwp.CreateAction("TableCreate") pset = act.CreateSet() act.GetDefault(pset) pset.SetItem("Cols", 3) pset.SetItem("Rows", 5) act.Execute(pset) 이게 실행코드고 오류는 --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:255, in GetModuleForCLSID(clsid) 254 try: --> 255 __import__(sub_mod_name) 256 except ImportError: ModuleNotFoundError: No module named 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0.IDHwpAction' During handling of the above exception, another exception occurred: FileNotFoundError Traceback (most recent call last) Cell In[3], line 21 18 hwp.MovePos(2) # 문서 시작으로 커서 이동 20 # 표 생성: 행(5), 열(3) ---> 21 act = hwp.CreateAction("TableCreate") 22 pset = act.CreateSet() 23 act.GetDefault(pset) File ~\AppData\Local\Temp\gen_py\3.12\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\IHwpObject.py:106, in IHwpObject.CreateAction(self, actidstr) 103 ret = self._oleobj_.InvokeTypes(10031, LCID, 1, (9, 0), ((8, 1),),actidstr 104 ) 105 if ret is not None: --> 106 ret = Dispatch(ret, 'CreateAction', None) 107 return ret File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\__init__.py:119, in Dispatch(dispatch, userName, resultCLSID, typeinfo, UnicodeToString, clsctx) 117 assert UnicodeToString is None, "this is deprecated and will go away" 118 dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch, userName, clsctx) --> 119 return __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, clsctx=clsctx) File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\__init__.py:47, in __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, UnicodeToString, clsctx, WrapperClass) 43 from . import gencache 45 # Attempt to load generated module support 46 # This may load the module, and make it available ---> 47 klass = gencache.GetClassForCLSID(resultCLSID) 48 if klass is not None: 49 return klass(dispatch) File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:200, in GetClassForCLSID(clsid) 198 if CLSIDToClass.HasClass(clsid): 199 return CLSIDToClass.GetClass(clsid) --> 200 mod = GetModuleForCLSID(clsid) 201 if mod is None: 202 return None File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\gencache.py:264, in GetModuleForCLSID(clsid) 261 info = demandGeneratedTypeLibraries[info] 262 from . import makepy --> 264 makepy.GenerateChildFromTypeLibSpec(sub_mod, info) 265 # Generate does an import... 266 mod = sys.modules[sub_mod_name] File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\makepy.py:377, in GenerateChildFromTypeLibSpec(child, typelibInfo, verboseLevel, progressInstance, bUnicodeToString) 374 progress.LogBeginGenerate(dir_path_name) 376 gen = genpy.Generator(typelib, info.dll, progress) --> 377 gen.generate_child(child, dir_path_name) 378 progress.SetDescription("Importing module") 379 importlib.invalidate_caches() File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\genpy.py:1363, in Generator.generate_child(self, child, dir) 1361 out_name = os.path.join(dir, an_item.python_name) + ".py" 1362 worked = False -> 1363 self.file = self.open_writer(out_name) 1364 try: 1365 if oleitem is not None: File ~\AppData\Roaming\Python\Python312\site-packages\win32com\client\genpy.py:1049, in Generator.open_writer(self, filename, encoding) 1039 def open_writer(self, filename, encoding="mbcs"): 1040 # A place to put code to open a file with the appropriate encoding. 1041 # Does *not* set self.file - just opens and returns a file. (...) 1046 # don't step on each others' toes. 1047 # Could be a classmethod one day... 1048 temp_filename = self.get_temp_filename(filename) -> 1049 return open(temp_filename, "wt", encoding=encoding) FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\lemon\\AppData\\Local\\Temp\\gen_py\\3.12\\7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0\\IDHwpAction.py.7700.temp' 이렇게 나오는데 해결할 수 있는 방법 있을까요?
궁금한 점이 있습니다. 지금까지는 다음과 같이 app.use 안에 요청 처리를 위한 미들웨어를 작성했는데, app.use((req, res, next) => { console.log("모든 요청에 실행하고 싶어요"); next(); }); 다음과 같이 app.use에 다운받은 미들웨어를 장착하는 건 "이 파일에서 특정 미들웨어를 사용하겠다"는 의도로 사용하는 건가요?? 아니면 둘 다 같은 동작을 하는건데 제가 둘을 다르다고 생각하는 걸까요? app.use(morgan("dev")); app.use(cookieParser()); app.use(express.json()); app.use(express.urlencoded({ extended: true })); 추가로, 위 미들웨어들로 인해 req 이나 res 객체에서 편하게 .cookie 나 .body 를 사용할 수 있게 되는데 그럼 미들웨어 내에서 미들웨어를 사용하는 건가요 🤔 🤔 ?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 자두나무 문제에 대한 설명에서 .이 문제가 탑다운 dp란 설명에서 ' 이 재귀적인 DP는 필요한 부분의 배열만을 만든다는 것이 특징입니다. ' [출처] [알고리즘 강의] 7주차. DP, 동적계획법, 다이나믹프로그래밍 | 작성자 큰돌 라는 문장이 이해가 가지 않습니다. 필요한 부분의 배열만을 만든다는게 정확히 무슨말인가요? 또한, 탑다운 dp와 버텀업dp 위에서 아래로 간다 /아래에서 위로간다 라는 말이 완벽하게 이해가 가지 않습니다.
현재 강의에는 StatComponent로 해서 공통적으로 Npc와 플레이어의 Stat을 관리해주고있는데 경험치총량과 경험치량을 StatComponent에 추가로 만들어놓는다고 할때 Npc의 죽음에있어서 플레이어의 경험치를 올리는 기능을 구현한다면 델리게이트를 사용해 몬스터의 죽음을 알린뒤에 경험치를 올리는 로직을 처리함에 있어서 플레이어의 경험치를 올리는 함수를 호출하는 과정에 있어서 형변환을 통해 결국 의존성이 발생하는 것 같아서 질문드립니다. 의존성을 없애는 최적의 방법은 어떻게 하는게 좋을까요? 또 만약 결국 형변환을 통해서 Npc의 cpp 코드에서 플레이어의 함수를 부른다면 플레이어의 헤더를 추가해서 부르는 것이 아니라 언리얼에 제공되는 현재 빙의된 플레이어를 불러서 플레이어의 함수를 부를수 있는 방법이 있을까요?
BGR 회로의 low-voltage Reference 개선해보기 강의에서 R5의 저항 변수를 BGR_RES로 설정하고 스윕했을 때 1.38V에 가까운 저항값을 어떻게 알 수 있나요? 영상 15분 16초 내용 입니다! 1.38V에 가까운 저항 값이 무엇인지 나오게(?)하는 방법이 있나요? 아니면 범위를 좁혀 나가서 구해야하나요?