묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드캠프] 시작은 프리캠프
언어 설정 -> 한글
vscode 다운받았는데 언어를 한국어로 바꾸고 싶은데 설정 어디서 해야되나요 ?
-
해결됨스프링 핵심 원리 - 기본편
static inner class 관련 과거 질문 글을 보고 추가적으로 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://www.inflearn.com/questions/257297/testconfig-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%EC%84%9C-static%EC%9D%84-%EB%96%BC%EB%B2%84%EB%A6%AC%EB%A9%B4 이 질문 글의 답변을 보고 저도 궁금한 점이 있습니다. 아마 이 질문과 관련된 코드는 아래 코드인 것 같습니다. public class ApplicationContextExtendsFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); . . . (생략) . . . @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy FixDiscountPolicy() { return new FixDiscountPolicy(); } } } 답변 내용 중에 다음과 같은 내용이 있습니다. "Test 클래스 내 TestConfig 클래스에 static 키워드를 뺀다면 Test 클래스가 생성되어야 TestConfig를 사용할 수 있습니다. 그러나 Test 클래스 내에서는 이미 TestConfig가 생성되기도 전에 스프링 컨테이너에서 TestConfig 빈이 있는지 찾아오려고 합니다. 당연히 스프링에서는 그런 빈이 없다고 합니다." 여기서 스프링 컨테이너에서 TestConfig 빈이 있는지 찾아오려고 한다는 부분이 잘 이해가 안 됩니다. AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); 이 코드는 TestConfig를 빈으로 등록하는 거로 알고 있습니다. 그러면 TestConfig 빈이 있는지 찾는 거랑은 다르지 않나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
model.addAttribute
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.이미지와 같이 model.addAttribute("data","hello!!"); 입력했을 때, 아래와 같은 오류가 발생합니다.Cannot resolve method 'addAttribute' in 'Model'
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
DB에서 Comment 테이블이 안불러와지는 것 같습니다.
// posts.jsrouter.get("/", async (req, res, next) => { // GET /posts console.log(Comment); try { const posts = await Post.findAll({ limit: 10, order: [["createdAt", "DESC"]], include: [ { model: User, attributes: ["id", "nickname"], }, { model: Image, }, { model: Comment, include: [ { model: User, attributes: ["id", "nickname"], }, ], }, ], }); res.status(200).json(posts); } catch (error) { console.error(error); next(error); } }); module.exports = router;LOAD_POST_REQUEST 액션이 dispatch돼서api 요청을 통해 data를 받아오면 data안에 Comments의 값이 Comments 테이블에 들어있는 값이 들어있을 것으로 예상이 되는데 빈배열인 상황입니다. 혹시 다른 살펴볼만한 곳이 있는지 알려주시면 감사하겠습니다. 감사합니다.
-
미해결
파이썬matplotlib import오류
파이참으로 파이썬 하는 학생입니다matplotlib을 인터프리터에 설치하고 import matplotlib.pylot as plt로 import하려고하니Traceback (most recent call last): File "C:\pythonProject\test.py", line 1, in <module> import matplotlib.pyplot File "C:\pythonProject\venv\Lib\site-packages\matplotlib\__init__.py", line 272, in <module> checkversions() File "C:\pythonProject\venv\Lib\site-packages\matplotlib\__init__.py", line 266, in checkversions module = importlib.import_module(modname) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\johan\AppData\Local\Programs\Python\Python312\Lib\importlib\__init__.py", line 90, in import_module return bootstrap.gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\pythonProject\venv\Lib\site-packages\kiwisolver\__init__.py", line 8, in <module> from ._cext import (ImportError: DLL load failed while importing _cext: 지정된 모듈을 찾을 수 없습니다. 오류가 생깁니다. pip버전 업데이트 해봤고 파이썬 3.12.2말고 3.12도 다시 깔아서 해봤고 파이참도 다시깔아서 해봤는데 안되네요 내 pc초기화로 초기화해보고 다시 설치했는데도 안됩니다참고로 노트북입니다 pc환경에서는 잘만되는데 다 밀어버리고 초기화 했는데도 안되네요뭐가 문제일까요?
-
해결됨Airflow 마스터 클래스
공공데이터 받아오기 - XML형식 표시하기 질문
항상 강의 감사드립니다.SimpleHttp오퍼레이터로 공공데이터 받아오기 실습부분에 질문이 있습니다. 강의에서는 Json형식의 데이터를 받아와 load함수를 사용하셨는데요, 제가 받아온 데이터는 xml형식이어서 코드를 수정해가며 실습을 진행했습니다. 구글링을 통해 필요한 라이브러리를 가져와 다음과 같이 코드를 수정했습니다.import pendulum from airflow import DAG from airflow.operators.bash import BashOperator from airflow.providers.http.operators.http import SimpleHttpOperator from airflow.decorators import task with DAG( dag_id='dags_simple_http_operator', start_date=pendulum.datetime(2024, 3, 1, tz='Asia/Seoul'), schedule=None, catchup=False ) as dag: '''서울시 공공데이터 정보''' # http://openapi.seoul.go.kr:8088/(인증키)/xml/TnJbhntBassOpen/1/5/ get_hr_data = SimpleHttpOperator( task_id='get_hr_data', http_conn_id='openapi.seoul.go.kr', endpoint='{{var.value.apikey_openapi_seoul_go_kr}}/xml/TnJbhntBassOpen/1/10/', method='GET', headers={ 'Content-Type':'application/json', 'charset':'utf-8', 'Accept':'*/*' } ) @task(task_id='python_2') def python_2(**kwargs): ti = kwargs['ti'] rslt = ti.xcom_pull(task_ids='get_hr_data') # SimpleHttpOperator가 가진 데이터를 가져오기 import xml.etree.ElementTree as ET from pprint import pprint root = ET.fromstring(rslt) print(f'root : {root}, root/tag : {root.tag}, root/attrib : {root.attrib}') # for child in root: # print(child.tag, child.attrib) for child in root: print(f'Tag : {child.tag}, Content : {child.text}') get_hr_data >> python_2() (pprint라이브러리는 오류가 생겨 사용하지 않았습니다) python_2 태스크의 Logs결과입니다 :[2024-03-25, 00:18:05 KST] {logging_mixin.py:188} INFO - Tag : list_total_count, Content : 827 [2024-03-25, 00:18:05 KST] {logging_mixin.py:188} INFO - Tag : RESULT, Content : [2024-03-25, 00:18:05 KST] {logging_mixin.py:188} INFO - Tag : row, Content : [2024-03-25, 00:18:05 KST] {logging_mixin.py:188} INFO - Tag : row, Content :결론적으로 내용들이 표시가 되지 않는데, 이유가 무엇인가요?(child.attrib함수도 시도해보았지만, 역시 담는 내용이 없었습니다)문서는 다음 문서를 참고하였습니다 :https://docs.python.org/ko/3/library/xml.etree.elementtree.html#xml-tree-and-elements
-
미해결스프링 핵심 원리 - 기본편
IoC 컨테이너와 DI 컨테이너의 차이점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]IoC 컨테이너와 DI 컨테이너의 차이점이 궁금합니다.IoC 기능의 대표 동작원리가 DI이다.라는 것은 구글링을 통해 알게되었습니다. 그렇다면 DI 컨테이너는 IoC 컨테이너의 하위 개념인가요?
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
flyway 컨테이너가 동작하지 않습니다.
안녕하세요! 강의 잘 듣고 있는 중에 문의드립니다.현재 컨테이너 기반 테스트 환경을 구성한 상태로, 실제 데이터로 테스트를 진행하기에 앞서 맥북으로 진행하던 내용을 pc에서도 진행하고자 코드를 그대로 pull해온 상태입니다. 근데 컨테이너들이 정상적으로 동작하는 것 같지 않아 문의드립니다...ㅠ스프링 로그에서는 마이그레이션 성공시 출력될 로그를 확인하는 정규식 표현에 매칭되는 로그를 찾지 못해 timeout이 나는 것으로 나오고, 도커 데스크탑을 보고 있으면 다른 컨테이너들은 정상적으로 실행되는데에 반해 flyway 컨테이너(local-db-migrate)만 계속 Exited와 Restart를 반복하고 있습니다. 해당 컨테이너 로그를 살펴보면 계속해서 아래와 같이 출력됩니다 ㅠㅠ /flyway/conf/flyway.conf는 컨테이너의 볼륨에서 해당 파일을 찾지 못했다는 것인가요? 혹시 해결 방안을 아시면 답변 부탁드리겠습니다. 참고로 OS는 윈도우입니다.infra/test/docker-compose.yaml 파일db/flyway.conf 파일
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트가 올바르게 되지 않는 것 같아요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @AfterEach public void afterEach() { memberRepository.clearStore(); } @Test public void 회원가입() throws Exception { //Given Member member = new Member(); member.setName("hello"); //When Long saveId = memberService.join(member); //Then Member findMember = memberRepository.findById(saveId).get(); assertEquals(member.getName(), findMember.getName()); } @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //When memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));//예외가 발생해야 한다. assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }강의를 따라하다가 좀 잘 안되서 pdf내용을 그대로 긁어왔는데 import org.junit.jupiter.api.AfterEach;가 빠져있더라구요. 그것만 수정하면 될 줄 알았는데, get()과 assertThrows에서 문제가 발생하고있는것 같습니다 왜그럴까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-P 질문 있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/e5455ffb96284f2d983e2afeae83ec1c 선생님이랑 비슷하게 문제를 풀었습니다.하지만 궁금한 부분이 있어서 질문드립니다.선생님께선 flower부분에 이중 for문을 돌리실 때 i, j =0으로 하셨는데 제 코드의 go함수를 봐주시면 sy, sx를 사용했고 sx가 for문을 벗어나면 sx=1로 초기화해서 i++이 되어도 첫칸부터 탐색할 수 있도록 하였습니다. 이렇게 작성한 이유가 i,j를 0으로 설정해서 탐색을 하면 탐색을 했던 부분을 또 탐색을 해서 시간초과가 나오지 않을까 생각했기 때문입니다. 혹시 다른 문제가 나와도 현재 제가 올린 코드처럼 sy, sx를 사용해서 코드를 짜도 큰 문제가 없을지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다.
안녕하세요 선생님. 선생님 강의와 함께 학교랑 병행하면서 알고리즘 공부한지 한달 정도 됐네요. 시작과 비교했을때 bfs, 완전탐색 개념이 조금씩 쌓이고 문제를 혼자서 다 풀 수는 없지만 80퍼는 그래도 혼자 코드를 짤 수 있는 실력이 생긴 걸 보아 실력이 조금씩 느는것 같긴 하네요..!1,2학년때 다른 공부를 준비한다고 현재 3학년되서 알고리즘을 첨하지만 열심히 하고 있는데 내년엔 4학년이라 늦은 것 같아서 불안해지네요,,
-
미해결모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 2 - 랭체인(LangChain)으로 나만의 ChatGPT 만들기
Rag 사용시 전혀 관계없는 데이터를 가져오는 이슈
안녕하세요 rag를 공부하고 실제로 테스트를 하기위해서open ai를 사용하여 서비스 이름과 서비스 담당자 관련한 정보가 존재하는 csv 데이터를 아래처럼 임베딩 한 뒤 index_name = "manager" # CSV 파일 로딩 loader = CSVLoader(file_path="manager.csv", encoding="utf-8") docs = loader.load() # text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=0) # docs = text_splitter.split_documents(documents) embedding_model= OpenAIEmbeddings(openai_api_key=OPENAI_KEY) vectorstore = ElasticsearchStore( embedding=embedding_model, index_name=index_name, es_url=es_url ) vectorstore.add_documents(docs) 데이터는 아래 형태로 embedding 하여 text에 들어가 있습니다.이름: (서비스 이름)메인 담당자:개발 담당자: 정(XXX) 부(XXX, XXX, XXX, XXX)SE 담당자: 정(YYY3) 부(ZZZ)DBA 담당자:아래처럼 프롬프트를 작성하고 rag를 사용하여 relevant_document를 통하여 확인하면,실제로 text에 들어가있는 데이터를 안가져오고 엉뚱한 데이터를 가져오거나실제로 관련 담당자가 text에 포함되는 데이터가 여러개가 실제로 존재하더라도 한 개만 가져오고 나머지는 엉뚱한 document만 가져오는 경우가 많은 것 같습니다.rag_prompt = """ You are an expert AI on a question and answer task. Use the "Following Context" when answering the question. If you don't know the answer, reply to the "Following Text" in the header and answer to the best of your knowledge, or if you do know the answer, answer without the "Following Text". If a question is asked in Korean, translate it to English and always answer in Korean. Following Text: "주어진 정보에서 답변을 찾지는 못했지만, 제가 아는 선에서 답을 말씀드려볼게요! **틀릴 수도 있으니 교차검증은 필수입니다!**" Following Context: {context} Question: {question} Helpful Answer:""" prompt = ChatPromptTemplate(input_variables=['context', 'question'], messages=[HumanMessagePromptTemplate(prompt=PromptTemplate( input_variables=['context', 'question'], template= rag_prompt)) ]) # LLM from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI llm = ChatOpenAI(model_name="gpt-3.5-turbo-0125", temperature=0, openai_api_key=OPENAI_KEY) retriever = vectorstore.as_retriever( search_type="similarity", return_source_documents=True ) resp = retriever.get_relevant_documents("XXX가 담당하는 서비스 알려줘") print(resp)혹시나 엉뚱한 document를 안가져오고 해당되는 값이 포함되는 document만 가지고 올 수 있도록 할 수 있는지 여쭤봅니다! 정리하자면 1:n으로 연관되어있는 내용에서 1에 대한 정보를 물어보면 내용을 잘가져오는 것 같은데 n에 대한 질문을 하면 정보를 전혀 못가져 오는 것 같은데 이를 해결하는 방법론이 있을지 여쭤봅니다!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
단순 궁금증) 멀티쓰레드가 아니라 싱글 쓰레드라면 sendQueue에 1개만 쌓이나요?
안녕하세요 루키스님단순히 제가 잘 이해하고 있는건지 궁금해서 여쭤보고자 합니다만약 멀티쓰레드가 아니라 싱글쓰레드라면 sendQueue에 1개 이상 쌓이지 않나요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
save시 500에러가 뜹니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 4분28초 부분까지 내용 따라하는데 코드 다른것도 없는데 상품 등록을 누르면 500에러가 발생합니다. @PostMapping("/add") public String save(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model model) { Item item = new Item(); item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity); itemRepository.save(item); model.addAttribute("item", item); return "basic/item"; }2024-03-24T23:35:00.277+09:00 ERROR 924 --- [item-service] [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.] with root cause java.lang.IllegalArgumentException찾아보려 해도 이유를 모르겠습니다.
-
해결됨실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
오가닉 서치로 유입된 유저의 검색어
안녕하세요, 강사님좋은 강의 넘 잘 듣고 있습니다.질문이 생겨서 여쭤봅니다!Source/medium에서 오가닉으로 유입된 사람들이 어떤 키워드로 유입되었는지 궁금해서 session manual term 열을 추가해서 같이 보고 있었는데요.이렇게 not set 으로 잡히는것은 왜 그런걸까요?전부 그런것은 아니고 예를 들어 naver/ organic으로 유입된 데이터는 키워드가 보이더라구요.혹시 제가 뭘 놓치고 있는걸까요..?
-
해결됨스프링 핵심 원리 - 기본편
ac.close()를 호출하지 않고 프로세스가 종료될 때의 스프링 컨테이너
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]public class SingletonTest { @Test public void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); SingletonBean singletonBean2 = ac.getBean(SingletonBean.class); System.out.println("singletonBean1 = " + singletonBean1); System.out.println("singletonBean2 = " + singletonBean2); assertThat(singletonBean1).isSameAs(singletonBean2); //ac.close(); } @Scope("singleton") static class SingletonBean { @PostConstruct public void init() { System.out.println("SingletonBean.init"); } @PreDestroy public void destroy() { System.out.println("SingletonBean.destroy"); } } } 이 코드에서 ac.close() 부분을 주석 처리하고 실행하면 다음과 같이 SingletonBean.destroy는 출력되지 않습니다. 왼쪽에 SingletonTest를 누르든, singletonBeanFind()를 누르든 SingletonBean.destroy는 출력되지 않습니다. ac.close()를 호출하는 게 스프링 컨테이너를 종료하는 거라고는 알고 있는데 ac.close()를 호출하지 않더라도 테스트가 끝나면 알아서 스프링 컨테이너가 종료되고, 종료되기 직전에 종료 메서드도 호출될 거라고 생각했는데 왜 SingletonBean.destroy가 보이지 않는지 궁금합니다. ac.close()를 호출하지 않으면 프로세스 실행이 끝나기 전에 알아서 컨테이너를 종료시켜 주진 않는 건가요? 질문 쓸 땐 궁금했는데 막상 다 적고 나니깐 ac.close() 하지 않으면 스프링 컨테이너가 알아서 종료되지 않는 건 당연한 건가? 싶기도 하네요..
-
미해결[리뉴얼] 처음하는 파이썬 머신러닝 부트캠프 (쉽게! 실제 캐글 문제 풀며 정리하기) [데이터분석/과학 Part2]
3강 강의 자료 코드 관련 질문입니다
- 섹션 3 타이타닉 문제로 시작하는 EDA: 범주형 데이터 분석 패턴1 11분 13초에 나오는 코드를 수정하지 않고 실행하였는데 ValueError: could not convert string to float: 'Braund, Mr. Owen Harris'가 떴습니다. 해결 방법을 알 수 있을까요
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
하위 패키지의 상위 패키지 참조
안녕하세요 강의 잘 듣고있습니다.1분 42초쯤에 말씀하신 치명적인 실수에 대해서 질문드립니다. 강의에서는 후반부에 CertificationService가 자연스럽게 사라짐에 따라 하위 패키지인 UserServiceImpl이 상위 패키지인 CertificationService를 참조하지 않게 변경됐지만, 만약 CertificationService이 계속 존재했다면 UserServiceImpl은 어떠한 형태로 올바르게 CertificationService을 참조할 수 있을까요?
-
미해결[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
restoreAccessToken 이라는 함수를 새로만드는 이유가 있을까요??
안녕하세요. 강의 내용중에 restoreAccessToken이라는 함수를 만드는데 내용이 getAccessToken을 리턴해주는 함수입니다.restoreAccessToken({ user }: IAuthServiceRestoreAccessToken): string { return this.getAccessToken({ user }); } getAccessToken({ user }: IAuthServiceGetAcessToken): string { return this.jwtService.sign( { sub: user.id }, { secret: '나의비밀번호', expiresIn: '10s' }, ); }인터페이스도 두번 작성하게 되는데export interface IAuthServiceRestoreAccessToken { user: IAuthUser['user']; } export interface IAuthServiceGetAcessToken { user: User | IAuthUser['user']; } 이런경우에는 그냥 restoreAccessToken이라는 함수를 새로 안만들고, getAccessToken을 바로 사용하는게 코드의 중복을 제거하는 측면에서 더 좋다고 생각하는데,restoreAccessToken이라는 함수를 새로 만드는 이유가 있을까요??
-
미해결스프링 핵심 원리 - 기본편
@Configuration과 싱글톤 강의에 대한 질문
안녕하세요 현재 싱글톤 강좌를 시청하고 있습니다.AppConfig에서 호출관계의 관한 싱글톤 확인 부분에 중 예외가 발생하였고 MemberServiceImpl OrderServiceImpl 확인을 했는데 어떤 부분에서 오류가 발생한지 잘 모르겠습니다. 예외는 다음과 같이 나왔으며org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'memberRepository' available아래는 MemberServiceImpl OrderServiceImp 그리고 테스트 코드입니다.public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Override public void join(Member member) { memberRepository.save(member); } @Override public Member findByMember(String userId) { return memberRepository.findById(userId); } public MemberRepository getMemberRepository(){ return memberRepository; } }public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } @Override public Order createOrder(String userId, String itemName, int productPrice) { Member member = memberRepository.findById(userId); int discountPrice = discountPolicy.discount(member , productPrice); return new Order(userId , itemName , productPrice , discountPrice); } public MemberRepository getMemberRepository() { return memberRepository; }void configurationTest(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); MemberRepository memberRepository1 = memberService.getMemberRepository(); MemberRepository memberRepository2 = orderService.getMemberRepository(); System.out.println("memberService -> memberRepository = " + memberRepository1); System.out.println("orderService -> memberRepository = " + memberRepository2); System.out.println("memberRepository = " + memberRepository); }