inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

facade 패턴 질문

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

현재 진행중인 프로젝트에 Aop 구현은 힘들어서 facade를 통해 Redisson lock을 적용해보려고 합니다. facade 패턴을 처음 접해서 그런지 프로젝트에 어떻게 적용해야 할지 고민입니다. service 로직을 건들지 않고, facade 패턴을 사용해서 역할분리 한 거에 대해서는 이해했습니다만, mvc 패턴에서, controller가 결국 동시성 제어가 적용된 서비스를 이용하려면 service(createReservation)가 아니라 facade(createReservation)를 사용해야 하는데, controller가 service로도 동시성 제어가 적용되지 않은(사용해서는 안될) 메서드(createReservation)에 접근이 가능하다는 점에서 문제가 될수도 있다고 생각했습니다. (비슷한 상황으로 컨트롤러가 reposiotry를 가끔 참조하기도 하는데, 이때의 경우는 service에 굳이 해당 로직을 만들지 않을때인데, 지금 같은 경우는 비슷한 로직이 service에도 있고, facade 에도 있는 경우라.. ) 협업에서 어떤 개발자의 실수로 service 계층의 createReservation(사용해서는 안될)가져다 쓸 수 있다는 것이 신경쓸 문제가 아닌지, 아니면 컨트롤러가 그 서비스의 메서드에 접근을 못하게 한다던지, 실제로 어떻게 적용하시는지 궁금합니다.

  • java
  • spring
  • 동시성
donkey 댓글 2 좋아요 0 조회수 193

Redisson lock() vs tryLock()

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

반드시 실행 되어야할 서비스 로직에 lock(3,TimeUnit.SECONDS) 이럭식으로 사용하려고 하는데 tryLock() 대신 써도 될지 궁금합니다. 코드 찾아보면, 다들 tryLock() 쓰시던데, 시스템적으로 저렇게 계속 lock획득 대기 상태로 만들어 놓으면, 안되는건지 궁금합니다. lock 대기 상태일때도 커넥션이 잡혀있나요? lock 대기상태가 많아지면 서버가 다운될 수 있나요?

  • java
  • spring
  • 동시성
donkey 댓글 2 좋아요 0 조회수 197

Controller + RestController 함께 사용

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요! 스프링 로드맵을 수강하고 Spring Boot + Thymeleaf 로 간단한 프로젝트를 진행하던 중 궁금한 점이 있어 질문 남김니다. 좋아요 기능이나 모달창에서 일어나는 동작들은 매번 결과를 view를 넘겨주기 번거롭거나 처리하기 복잡한 것 같아서, 이러한 부분들만 일반 Controller 말고 Rest Controller를 호출하고 처리하도록 구현하고 싶은데 혹시 이런 방식으로 혼용해서 사용해도 괜찮을까요? 아니면 프로젝트의 일관성을 위해 일반 Controller만 사용하는 것이 좋을까요? 감사합니다.

  • java
  • spring
  • spring-boot
  • jpa
스핑 댓글 2 좋아요 0 조회수 276

24년 8월 기준,, SnackBar 부분 변경

미해결

플러터와 장고로 1시간만에 퀴즈 앱/서버 만들기 [무작정 풀스택]

ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( children: <Widget>[ const CircularProgressIndicator(), Padding(padding: EdgeInsets.only(left: width * 0.036), ), const Text("로딩중,,,") ], ), duration: const Duration( milliseconds: 300 ), ), ); 으로 변경됨

  • flutter
dev_dev_dev 댓글 1 좋아요 1 조회수 186

안녕하세요 표 생성이 막힙니다.

미해결

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

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' 이렇게 나오는데 해결할 수 있는 방법 있을까요?

  • python
  • 한컴오피스
한글치트키 댓글 1 좋아요 1 조회수 314

질문있습니다,.

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

package Practice; import java.util.Scanner; public class class13 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int maxCount = 10; String[] productNames = new String[maxCount]; int[] productPrice = new int[maxCount]; int productCount = 0; while (true) { System.out.print("1. 상품 등록 | 2. 상품 목록 | 3. 종료\n메뉴룰 선택하세요:"); int menu = scanner.nextInt(); scanner.nextLine(); if (menu == 1) { if (productCount >= maxCount) { System.out.println("더 이상 상품을 등록할 수 없습니다."); continue; } System.out.print("상품 이름을 입력하세요:"); productNames[productCount] =scanner.nextLine(); System.out.print("상품 가격을 입력하세요:"); productPrice[productCount] = scanner.nextInt(); productCount++; } else if (menu == 2) { if (productCount == 0) { System.out.println("등록된 상품이 없습니다."); continue; } for (int i = 0; i < productCount; i++) { System.out.println(productNames[i] + ": " + productPrice[i] + "원"); } } else if (menu == 3) { System.out.println("프로그램을 종료합니다"); break; } else { System.out.println("잘못된 메뉴를 선택하셨습니다"); } } } } 요 코드에서 맨 마지막 else문에 continue; 는 없어도 되나요?

  • java
  • 객체지향
동찬 이 댓글 1 좋아요 0 조회수 100

자바의 특징

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

OS에 구애받지 않고 자바가 설치된 곳에서는 다 실행이 된다고 해주셨는데 대부분의 설치가 필요한 언어들도 비슷하다고 생각하면 될까요? 자바만이 가진 특징인건지 궁금합니다.

  • java
  • 객체지향
댓글 1 좋아요 0 조회수 255

스프링 부트의 역할은 쉽게 이해하려면 뭐리고 셍각하면 좋을까요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 자바 초보가 이해하기 쉽게 스프링 부트의 역할을 알고 싶어요.\ 그리고 예전에는 이클립스로 개발을 많이들 하던데, 지금은 어떤 IDE로 개발하는 지 궁금합니다.

  • java
  • spring
  • mvc
  • spring-boot
leey99 댓글 2 좋아요 0 조회수 204

QueryDsl관하여 질문 드립니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 안녕하세요. 근래에 쿼리 DSL을 배우면서 적용을 해보고 있습니다! 쿼리dsl을 사용하면 @OneToMany 등등 연관관계 매핑이 필요 없는지 궁금합니다. 필요하다면 왜 필요한지도 궁금합니다!!

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
정재호 댓글 2 좋아요 0 조회수 157

restaurant_provider 부분에서 에러가 발생합니다.

미해결

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

final resp = await repository.paginate( paginationParams: paginationParams, ); 해당 부분에서 The argument type 'PaginationParams' can't be assigned to the parameter type 'PaginationParams? 가 발생하는데요 타입이 불일치 하다는 것 같은데 제가 repository의 paginate 코드랑 pagination_params 코드도 다시 확인해 보고 강사님 깃에 올라온 코드랑 비교도 해봤는데 왜 에러가 발생하는지 모르겠네요 paginationParams: paginationParams!, paginationParams: paginationParams ?? const PaginationParams(), 이런식으로 바꿔봐도 똑같습니다. 아래는 제 repository 및 pagination_params 코드입니다. import 'package:basic_ui/common/dio/dio.dart'; import 'package:basic_ui/common/model/pagination_params.dart'; import 'package:basic_ui/common/model/cursor_pagination_model.dart'; import 'package:basic_ui/restaurant/model/restaurant_detail_model.dart'; import 'package:basic_ui/restaurant/model/restaurant_model.dart'; import 'package:dio/dio.dart' hide Headers; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:retrofit/http.dart'; import '../../common/const/data.dart'; part 'restaurant_repository.g.dart'; final restaurantRepositoryProvider = Provider<RestaurantRepository>( (ref) { final dio = ref.watch(dioProvider); final repository = RestaurantRepository(dio, baseUrl: 'http://$ip/restaurant'); return repository; }, ); @RestApi() abstract class RestaurantRepository { factory RestaurantRepository(Dio dio, {String baseUrl}) = _RestaurantRepository; @GET('/') @Headers({ 'accessToken': 'true', }) Future<CursorPagination<RestaurantModel>> paginate({ @Queries() PaginationParams? paginationParams = const PaginationParams(), }); @GET('/{id}') @Headers({ 'accessToken': 'true', }) Future<RestaurantDetailModel> getRestaurantDetail({ @Path() required String id, }); } import 'package:json_annotation/json_annotation.dart'; part 'pagination_params.g.dart'; @JsonSerializable() class PaginationParams { final String? after; final int? count; const PaginationParams({ this.after, this.count, }); PaginationParams copyWith({ String? after, int? count, }) { return PaginationParams( after: after ?? this.after, count: count ?? this.count, ); } factory PaginationParams.fromJson(Map<String, dynamic> json) => _$PaginationParamsFromJson(json); Map<String, dynamic> toJson() => _$PaginationParamsToJson(this); }

  • flutter
  • 하이브리드-앱
종마루 댓글 1 좋아요 0 조회수 117

설명이 잘 이해가 안 가는 부분이 있습니다

해결됨

실전! Querydsl

강의 2분 45초에서 left join이니 team 기준으로 데이터를 전부 조회해온다고 말씀하셨는데, 그 team 기준이라는 말씀이 무슨 의미인 건지 잘 모르겠습니다. 제가 생각하기로는 이 테스트의 경우 member와 team의 left join이니 member의 데이터들을 기준으로 조인된 team의 데이터를 조회해오는, 즉 member 기준으로 데이터를 조회하는 것 같은데, 제가 설명을 잘못 이해한 건지 아니면 제가 잘못 알고 있는 부분이 있는 건지 궁금합니다. 감사합니다.

  • java
  • jpa
Jin 댓글 1 좋아요 0 조회수 199

comparable, comparator

미해결

김영한의 실전 자바 - 중급 2편

얼핏 봤을때에는 comparable 과 comparator 차이가 크게 없어 보이는데, 만약 String ID 알파벳 순이라 아니라 String Id 의 length 순으로 정렬해서 배열을 만들고 싶다고 했을때에는 comparable 은 기본적인 자연적인 배열 순서로 정의를 해주기 때문에 comparator 를 쓰는게 올바른 것인가요 ?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
ghuhan18 댓글 1 좋아요 0 조회수 185

comparable, comparator

미해결

김영한의 실전 자바 - 중급 2편

강의를 보면 ID 를 통한 Array 배열을 정렬할때 IdComparator 를 만드셨는데, 사실 comparable 에서도 충분히 정의할 수 있는 것 아닌가요 ? 단순히 Comparator 를 통해서도 할 수 있다라는 것을 보여주기 위함인가요 ? 또한 언제 comparable 을 쓰는 게 낫고 언제 comparator 를 쓰는게 나은가요 ?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
ghuhan18 댓글 2 좋아요 0 조회수 151

delivery 인식 불가 ㅠ

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)에 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 위 강의를 듣고잇는데, delivery가 제 개발환경에서는 인식이 안됩니다... 선언부 미인식 문제 자주 하는 질문을 참고해서 IDE 초기화도 해보고 했는데, 안되서 질문드립니다. 뭔가 설정을 잘못한거 같아서 JDK와 Gradle 설정 부분도 제대로 되어 있는 것 확인했습니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
이건희 댓글 2 좋아요 0 조회수 111

Riverpod을 하려고 하는데 질문이 있습니다!

해결됨

Flutter 앱 개발 실전

현재 강의에서 주로 사용하신 provider와 mvvm패턴을 활용해서 팀프로젝트와 개인프로젝트를 끝낸 상태입니다. 근데 자꾸만 할수록 riverpod에 대한 필요성을 느끼게 되어서 상태관리를 바꿔보려고 생각중인데 현재 강사님이 강의하신 내용으로도 충분할까요? 아니면 추가적인 강의나 학습이 필요할까요? 제 계획은 1. 강사님이 짧게 다루신 riverpod에 대한 내용을 복습하고 깃허브에 작성하신 riverpod으로 적용된 쇼핑몰 프로젝트를 보면서 클론코딩을 해볼 생각입니다. 이후에는 그걸 제 개인프로젝트에 적용할 생각이구요. 그걸로 충분할까요? 아니면 추가적인 학습 후에 1번과 2번을 하는 게 좋을까요?

  • flutter
김동혁 댓글 2 좋아요 1 조회수 156

ManyToOne 에서 fetch join 에 대해 질문 있습니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

강의 1분쯤에 아래와 같은 내용이 있습니다. "ManyToOne이나 OneToOne 같은건 fetch join을 하거나 DB 입장에서는 left out join해서 한번에 데이터를 다 끌고와도 성능에 무리가 없는데 컬렉션 조회 같은 경우에는 조회를 하는 순간 DB 입장에서는 데이터가 뻥튀기 된다." 궁금한 부분은 ManyToOne 관계에서 fetch join에서도 DB 입장에서 데이터가 뻥튀기 되지 않나 라는 생각입니다. 예를들어 member1, member2, member3이 teamA에 속해 있다고 했을때 이 상황에서 fetch join을 해도 어차피 내부적으로는 join으로 바뀌게 되므로 결과적으로는 아래와 같이 출력이 되므로 DB 입장에서 결국 이 상황도 데이터 뻥튀기 이지 않나 라는 생각이 듭니다. member1 : teamA member2 : teamA member3 : teamA

  • java
  • spring
  • spring-boot
  • jpa
감바스 댓글 1 좋아요 0 조회수 112

24년 8월 기준 flutter_swiper import 관련

미해결

플러터와 장고로 1시간만에 퀴즈 앱/서버 만들기 [무작정 풀스택]

flutter_swiper_view: 로 변경되었음.

  • django
  • flutter
dev_dev_dev 댓글 2 좋아요 4 조회수 228

안녕하세요. 파트 소개 글을 보다가 브루트 포스와 구현 문제에 대해

해결됨

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

참고로, 단순 구현 문제와 브루트 포스 관련 문제만 잘 풀어도 어렵지 않은 코딩테스트는 합격을 노려볼만합니다. 해당 내용이 언급 되어 있던데, 이부분은 제 코테 전략은 아래와 같습니다. 백준 브루트포스 알고리즘별 문제모음 https://www.acmicpc.net/problemset?sort=ac_desc&algo=125 백준 시물레이션(구현) 알고리즘별 문제모음 https://www.acmicpc.net/problemset?sort=ac_desc&algo=141 알고리즘별 문제 모음으로 브루트 포스 : 100문제 시물레이션 : 100문제 각각 100문제 정도 풀어보고 해당 강의에 있는 문제들을 완전 이해와 학습 복습을 하는것인데 이정도면 스타트업 코딩테스트 정도 노려볼만한가요?

  • python
  • 코딩-테스트
  • 알고리즘
rhkdtjd_12 댓글 1 좋아요 0 조회수 185

24년 8월 기준,, 버튼 변경

미해결

플러터와 장고로 1시간만에 퀴즈 앱/서버 만들기 [무작정 풀스택]

24년에 퀴즈 앱 만들기 참여하신 분들께 도움이 되고자 남깁니다. 마지막 퀴즈 풀기 버튼 은 아래와 같이 변경되었습니다. child: ElevatedButton( style: ElevatedButton.styleFrom( foregroundColor: Colors.white, backgroundColor: Colors.deepPurple, ), onPressed: () {}, child: const Text( '지금 퀴즈 풀기', style: TextStyle(color: Colors.white), ), ),

  • flutter
dev_dev_dev 댓글 1 좋아요 1 조회수 269

인기 태그

인프런 TOP Writers

주간 인기글