강의에서 @Transactional 을 테스트코드에 붙여서 테스트를 진행하였는데요 @AfterEach 어노테이션으로 void clean() { 메서드를 만들어 리파지토리를 정리하는거랑 차이가 있나요? 코드가 간결해지는 이점으로 @Transactional 를 자주 사용하게 되는건가요? 실무에서 어떻게 쓰이는지 궁금합니다.
따라하며 배우는 리액트 A-Z 강의 중 리액트를 위한 도커 파일 작성하기 강의 중 궁금한 것이 있어 질문 드립니다 COPY 부분에 package.json 파일을 복사를 하는데 package-lock.json 파일은 왜 복사를 하지 않나요? package-lock.json 파일이 더 버전 명시가 확실히 되어있어 안전하지 않나요?
안녕하세요, 일코님. 강사로서 콘텐츠를 만드는 모습과 수업의 열정에 저도 한 수 배웁니다. 강의를 들으면서 제 상황과 함께 몇 가지 문의드립니다. 요새 Langchain과 엮어서 hwp 파일을 자동화하는 프로그램을 만들고 있습니다. LLM 활용하여 업무를 효율화 하는 콘테스트 같은 것에 참여하는데 한글 파일을 수정해야하는 난관이 있어서 수업을 듣게 되었어요. 개발 기간이 한 달 남짓 남은 상황이라서, 질문으로 가장 효과적인 방법을 알 수 있을까하여 강사님께 조언을 요청드립니다. (hwp 5.0 파일 전체 구조를 분석할 시간이 안되네요..) 질문 3가지 드립니다. 1. 도표의 특정 부분, 내용의 특정 부분에 어떻게 문자열을 삽입할 것인가. 제가 개발하고 있는 프로세스는 이렇습니다. 보고서나 기획안을 작성해야 할 문장을 길게 받는다. 프롬프팅을 해서 LLM에 넣어서 리턴을 받는다. 대제목, 중제목, 소제목으로 포맷팅하여 HWP파일에 끼워 넣어서 export한다. 현재 FastAPI로 개발을 하고 있고, HWP 파일에 끼워 넣기 전 단계까지는 어떻게 개발이 끝난 상황입니다. 대제목의 갯수, 중제목의 갯수, 소제목과 내용은 배열로 받든 JSON 형태로 받든 규격화된 형태로 받아서 제가 일일이 끼워 넣을 예정입니다. 문제는 이겁니다. 현재 제가 가지고 있는 양식에 내용을 채워 넣으려고 합니다. (양식이 이것 외에 여러 개 입니다.) 누름틀로 자동화하는 강좌도 영상과 글로 보았고, 파일 내용을 읽어오는 것도 배웠는데 회사 로고나 도표가 함께 섞여있는 복잡한 문서를 처리하기에는 예제 대비 너무 어려운 상황입니다. 양식이 정해진 파일을 읽어와서, 해당 문자열 위치에 다시 규격화해서 넣을 수 있는 가장 효과적인 방법을 찾고 있습니다. ㅁ, ㅇ, - 등은 제가 넣을 때 임의로 삽입해서 넣으려고 합니다. 여기에서 저 특정 부분(대제목, 중제목, 소제목, 내용 모두)의 위치에 LLM에서 받은 문자열을 규격화해서 넣으려고 하는데, 가장 좋은 방법은 무엇일까요? (폰트와 글자 크기가 전부 다름) 2. 현재 가지고 있는 hwp 파일을 쉽게 분석할 수 있는 방법? txt파일이나 마크다운 파일 같은 것은 특정 파일 포인터를 읽거나, 원래 가지고 있는 문자열을 대충 정리해서 밀어 넣으면 정리가 가능했는데, hwp 파일은 이 자체가 워낙 규격화가 특이하게 되어있어서 분석이 어렵습니다. 제가 처리할 양식이 5개가 됩니다. 그 중에는 도표가 많은 것도 있고, 저 위에 있는 것 처럼 단순한 것도 있습니다. 어떻게 해야지 기존의 양식을 분석하고, 해당 부분에 문자열이나 문구를 정확하게 삽입할 수 있을까요? 3. 서버에서 한글 프로그램을 띄워놓고 새롭게 생성한 파일을 서빙하는 방법 현재 한글 프로그램을 실행시킨 이후에 그 내부에서 작업을 하는 것처럼 보이는데요. (크롬을 크롬드라이버로 자동화하는 것처럼) 하나의 양식을 여러 클라이언트에서 요청 받아서 생성을 완료하고 리턴해주려면 어떤 방식이 좋을까요? 예) 누름틀로 모든 영역을 다 분리해놓은 상태에서 하나 클라이언트를 띄우고, 해당 문서에 내용을 모두 바꾼 뒤에 다른 이름으로 저장하고 해당 파일을 return? 혹시 좋은 예제나 방법이 있을까 하여 여쭤봅니다. 가장 위의 2가지 질문은 같은 계열의 질문입니다만, 혹시나하여 첫 번째 질문에 예제를 같이 넘겨드립니다. 선배 개발자님이자, 강사님의 고견 여쭙습니다. 감사합니다. 답변 기다리겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. addPathPatterns을 사용하여 모든 경로에 인터셉터를 추가하고 excludePathPatterns에 제외하고 싶은 경로를 작성하여 제거하여 인터셉터를 특정 URL에만 적용할 수 있다는 점을 배웠습니다. 제가 궁금한 점은 여기서 만약에 서버에서 지원하지 않은 URL 즉, 404 에러를 발생시키는 URL에 접근할 경우에도 로그인 페이지가 나오고 로그인을 완료하면 그 후에 404 페이지가 나옵니다. 이렇게 컨트롤러가 지원하지 않은 URL에는 인터셉터를 적용시키 않으려면 어떻게 설정을 해야하는건가요?
from selenium import webdriver driver = webdriver.Chrome() 강의랑 동일하게 입력하였는데요. Traceback (most recent call last): File "C:\Users\tjdwl\anaconda3\Lib\site-packages\selenium\webdriver\common\driver_finder.py", line 38, in get_path path = SeleniumManager().driver_location(options) if path is None else path ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\tjdwl\anaconda3\Lib\site-packages\selenium\webdriver\common\selenium_manager.py", line 89, in driver_location args = [str(self.get_binary()), "--browser", browser] ^^^^^^^^^^^^^^^^^ File "C:\Users\tjdwl\anaconda3\Lib\site-packages\selenium\webdriver\common\selenium_manager.py", line 73, in get_binary raise WebDriverException(f"Unable to obtain working Selenium Manager binary; {path}") selenium.common.exceptions.WebDriverException: Message: Unable to obtain working Selenium Manager binary; C:\Users\tjdwl\anaconda3\Lib\site-packages\selenium\webdriver\common\windows\selenium-manager.exe The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm Community Edition 2024.1\plugins\python-ce\helpers\pydev\pydevd.py", line 1535, in _exec pydev_imports.execfile(file, globals, locals) # execute the script ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\JetBrains\PyCharm Community Edition 2024.1\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile exec(compile(contents+"\n", file, 'exec'), glob, loc) File "C:\Users\tjdwl\PycharmProjects\Selenium\section6\selenium_basic.py", line 3, in <module> driver = webdriver.Chrome() ^^^^^^^^^^^^^^^^^^ File "C:\Users\tjdwl\anaconda3\Lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 45, in init super().__init__( File "C:\Users\tjdwl\anaconda3\Lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 49, in init self.service.path = DriverFinder.get_path(self.service, options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\tjdwl\anaconda3\Lib\site-packages\selenium\webdriver\common\driver_finder.py", line 41, in get_path raise NoSuchDriverException(msg) from err selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for chrome using Selenium Manager.; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location python-BaseException 해당 오류가 발생합니다.
개발자분에게 이벤트 측정을 부탁드렸는데 백엔드에서 수집하는 경우에는 프론트에서 client_id를 받고, 또 비동기적으로 처리될 때에는 이를 저장해놨다가 이벤트를 호출해야하다보니까 client_id를 무조건 보내줘야하는건지 궁금해하시더라구요. (거래내역에 대한 이벤트를 수집한다고 하면 거래내역 전부에 client_id를 달아줘야하는건데 이게 좀 그렇다고..) 측정 프로토콜에서 이벤트를 수집할 때에는 client_id는 무조건 보내줘야하는건지, 아니면 대체할 수 있는 방법이 있는 건지 궁금합니다!
[질문 내용] 강사님이 save를 할때는, 데이터가 디비에서 한번 갔다온(디비에서 조회된) 친구들은 수정시 save호출시 merge가 일어난다고 하셨는데, 영속성 컨텍스트에 그 조회한 데이터가 있으면, merge가 안 일어나지 않나욤?? 디비에서 데이터를 가져왔을 때, 해당 데이터의 변경이 일어나면, 그냥 트랜잭션이 끝날때, flush()가 일어나니까, 놔두면 알아서 더티체킹이 일어나서 업데이트가 되는 것으로 알고있습니다. 그래서, 한번 테스트로 데이터를 변경시키고, 해당 데이터를 save하니 디비에서 한번 더 select가 안 날라가더라고요. 이랬을땐, 아무것도 안 일어나는 건가여? 그리고 트랜잭션이 끝날때 더티체킹이 일어나서 업데이트가 되는 건가여? 영한님이 말하신 건, 영속성 컨텍스트에 해당 데이터를 clear했을 때를 말하는 건가여? 아래 사진 첨부입니다. @Test public void test(){ Member member = memberRepository.findById(2L).orElseThrow(); member.setUsername("ㅎㅎ"); memberRepository.save(member); } @Test public void test(){ Member member = memberRepository.findById(2L).orElseThrow(); member.setUsername("gg"); em.flush(); em.clear(); memberRepository.save(member); }
안녕하세요 선생님 !! 강의 잘보고 있습니다. Provider : 수신측에 변경 사항을 알리지 않음 라고 하셔서 코드를 작성해보았습니다. countprovider안에서 ref.watch(towProvider) 사용해봤는데요 우선 여기서 watch를 써서 상태가 바뀐건 이해합니다. 그래서 "counter 생성자" 가 계속 출력되고요 . 근데 main함수에서 counterProvider 를 ref.watch 했는데 화면이 계속 갱신 되는 건 이해가 가지 않습니다. 수신측에 변경 사항을 알리지 않음 이라고 하셔서 여기서는 호출해도 변함이 없겠구나 라고 생각했습니다... import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final towProvider= NotifierProvider<Two, int>( (){return Two();} ); final counterProvider = Provider<Counter>((ref) { print("hello"); int num=ref.watch(towProvider); return Counter(num:num);}); class Two extends Notifier<int>{ Two(){ print("Two 생성자"); } @override int build() => 0; int add() => state++; } class Counter { Counter ({required this.num}){ print("Counter 생성자"); } int num; int getIncreasedNumber() => num ++; } void main() { runApp( const ProviderScope( child: MaterialApp( debugShowCheckedModeBanner: false, home: MyApp(), ), ), ); } class MyApp extends ConsumerWidget { const MyApp({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { print("build"); Counter counter = ref.watch(counterProvider); return Scaffold( body: Center( child: Text( "${counter.num}", style: const TextStyle( fontSize: 24, ), ), ), floatingActionButton: FloatingActionButton( onPressed: (){ref.read(towProvider.notifier).add();}, child: const Icon(Icons.add), ), ); } }
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의에 예외처리로 0 을 출력하도록 되어 있는데 출력문 대신 return 0; 으로 해도 상관없는지 궁금합니다!
http://boj.kr/1768eef2fba64e16bc9bbbca272a7caa 우선 모든 경우의수가 2*N이니 1~2^2*N까지 반복시킨후에 각 경우의수마다 어떤 행과 열을 뒤집을지 고르는 방식으로 진행했습니다. 이게 경우의수가 너무 커서 틀린거지 로직은 맞을까요?? 아니면 로직도 바꿔야할지 궁금합니다.
질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다! [질문 전 답변] 1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요] 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요] 3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요] ( https://www.inflearn.com/blogs/1719 ) 4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [질문 하기] [4.5] - 익스포터의 종류의 데이터베이스 항목에서 MongoDB,MySQL,PostgreSQL,Redis가 있는데, k8s의 Pod형태가 아닌 Dedi 서버로 구축된 경우도 익스포터를 통해 모니터링이 가능할까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 에러 내용 현재 CoreApplicationTests를 돌리면 오류가 나서 질문 올려봅니다. 잘은 모르지만 고치려고 제 코드와 오류를 살펴보니 MemberServiceImpl과, OrderServiceImpl 둘의 클래스 각각 @Autowired 어노테이션이 적용된 생성자에 주입해지는 MemberRepository 타입 객체가? 빈에 등록된게 두개라 둘 중 뭘 넣지 못한다는 형식의 오류 같습니다. (확실하지 않아서 모르겠어서 질문 드립니다). 시도한 부분 자주묻는 질문란에 스프링 부트 3.X 매개변수 이름 인식 문제에 대해서 인식하고 @Autowired 관련 문제 해결방안 3인 인텔리제이의 설정 부분에서 Build and run using를 Gradle로 설정하고 돌려도 똑같더라구요. 그래서 아직까지 문제가 정확히 무엇인지 파악하지 못하겠습니다. 하단에 에러 메세지와 코드 덧붙였습니다. 한번 봐주신다면 정말 감사하겠습니다. ㅠ 코드압축본 https://drive.google.com/file/d/1WdsaN07LSBwaHzlae8WMEj-0wwYnOM5c/view?usp=sharing 에러메세지 (게시글 용량때문에 중요해 보이는 에러만 가지고 와봤습니다) 테스트 실행했을 때 Test Results - CoreApplicationTest - contextLoads의 에러 내용입니다 Failed to load ApplicationContext for [MergedContextConfiguration@36681447 testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@192d74fb, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@66ce957f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@efde75f, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7894f09b, org.springframework.boot.test.context.SpringBootTestAnnotation@fd6d726d], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@36681447 testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@192d74fb, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@66ce957f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@efde75f, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7894f09b, org.springframework.boot.test.context.SpringBootTestAnnotation@fd6d726d], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,MemberRepository Error creating bean with name 'memberServiceImpl' defined in file [/Users/sun/workspace/intelliJ/spring/study/core/build/classes/java/main/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,MemberRepository org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [/Users/sun/workspace/intelliJ/spring/study/core/build/classes/java/main/hello/core/member/MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,MemberRepository Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,MemberRepository
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 중첩 클래스를 복습하다가, 동영상 강의 에서 여기 있는 코드를 보고, 정적 중첩 클래스랑, 내부 클래스 이렇게 같이 사용된 적이 있을까? 라는 생각을 하게 되었습니다. 실무 에서 정적 중첩 클래스랑, 내부 클래스 이렇게 두가지 경우가 같이 사용하신 적이 있으신가요? 답변 부탁 드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 화면상에 오류메시지가 뜨지 않고 Whitelabel Error Page로 넘어가는데 잘못된 부분을 찾을 수가 없어서 질문드립니다. 이전 강의에서는 제대로 되었다가 안되었다가 했었는데 이제는 아예 Whitelabel로 넘어가버리네요 다음은 코드입니다. https://drive.google.com/file/d/1hLNHWRMH4_SYUxFWYiLkUdg7O6EEWKuy/view?usp=sharing