묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결만들면서 배우는 리액트 : 기초
컴포넌트 분리
안녕하세요, 유림님! 올려주신 강의를 완강하고, 말씀해주신대로 컴포넌트를 각각의 js 파일로 쪼개서 import 하는 과정을 거치고 있습니다! cra 같은 경우는 react 를 스크립트로 들고오는게 아니라 모듈 방식으로 사용해야하기 때문에 import 해주는 과정을 거쳐야한다고 영상에서 말씀해주셨는데요! 조금 바보같은 질문일 수 있겠으나, react를 사용하는 것들은 개개의 컴포넌트마다 import React from "react" 를 작성해야하는지 궁금합니다! 저희 프로젝트에서는 React.useState를 Form과 App 컴포넌트에서 사용하기에, 컴포넌트를 개개로 분리한다면 import React from "react" 를 Form 컴포넌트에서 한 번, App 컴포넌트에서 한 번 총 두 번 React를 불러와야 실행이 되는걸로 알고있습니다! 해당 과정을 거치면서 react를 불러와서 사용해야하는 컴포넌트가 많아지면 각각의 컴포넌트마다 상단에 React 모듈을 불러오는 코드를 일일이 전부 작성해야하는건가? 하는 궁금증이 들어서요! 다수의 컴포넌트가 import 해서 사용해야 하는 모듈은 불러오는 코드를 딱 한번만 작성하여 사용할 수는 없나요? 좋은 강의 올려주셔서 너무너무 감사드리고, 언제나 건강 유의하시길 바랍니다:)
-
해결됨그림으로 쉽게 배우는 운영체제
RAM과 ROM 질문있습니다.
1. RAM은 주기억장치 혹은 메인메모리 (프로그램이 실행될 때 사용되는 메모리), ROM은 보조기억장치 혹은 하드디스크 (프로그램이 저장되어 있는 물리적으로 사용되는 메모리)로 이해를 하면 될까요? 2. 만약 1번이 맞다면 감자님께서 ROM은 데이터를 한번쓰면 수정이 불가능하다고 하셨고 부팅과 관련된 BIOS정보를 저장하는데 주로 쓰인다고 하셨습니다. 그런데 프로그램이 사용하다보면 수정이 되는거 역시 불가피한 사실인데 1번의 내용이 틀린건가요? 3. 1번이 틀리다면 RAM과 ROM을 어떻게 이해하면 될까요?
-
미해결FreeRTOS 프로그래밍
로직 어날라이저
안녕하세요. 강사님! 로직어날라이저로 Idle Task의 점유율을 판단하는 구체적인 방법은 무엇일까요? 지금 떠오르는 가장 간단한 방법은 만들어둔 Task마다 GPIO를 토글 시켜 확인하는 방법이 있을 것 같은데, 이것보다 심플한 방법이 있을까요?
-
미해결Vuetify Admin Template 만들기 - 기본편 (Based Vue2)
lint 적용시 코드 줄바꿈 문의 드립니다.
안녕하세요 강의 잘 듣고 있습니다. lint 를 적용 하면 한줄로 작성한 코드도 다음과 같이 수정 되는데 수정 안되게 하는 방법이 궁금 합니다. <v-card class="pa-3" outlined> col2222222222</v-card>
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
헷갈리는게 있어요...
안녕하세요 강의 복습하면서 갑자기 궁금한 점이 생겼습니다. 1. ppo folder 에 들어있는 3DBall.yaml 파일의 내용을 수정하면서 Learning 을 조정하는거라면 유니티 환경에서 굳이 파라메터를 설정할 필요가 있나요? ( ex: behavior parameters: vector observation, stacked vectors, continuous actions...etc) 2. 빌드파일 없이 유니티에서 바로 학습하는 경우 아나콘다 프롬프트로 작업하는 것과 비교했을 때 장단점이 무엇인가요? 3. 유니티에서 학습시켰을 경우 역시 텐서보드로 확인 가능한가요? 4. 다음 강의에서 나오는 python API로 학습시키는 영상이 나옵니다. 이걸 쓰는 이유는 무엇인가요? yaml 을 쓰는 것과 비교했을 때 무슨 장점이 있나요? 5. Python APi 다음 영상에서는 gridworld 예제가 나오는데요, 이 경우에는 유니티 스크립트를 하나하나씩 고치면서 학습을 시킵니다. 이런 경우는 왜 python api 를 안쓰나요? 제가 계속 진도를 따라가다 보니, 각각의 튜토리얼들의 구분이 어떻게 지어지는지 좀 헷갈리네요. 이런 경우에는 이렇게 해라~ 저럴땐 저렇게 한다... 이런게 따로 있는건가요? 개념을 잘 잡지 못한거 같아서요. 답변 주시면 감사드리겠습니다!
-
미해결홍정모의 따라하며 배우는 C++
구초체 초기화에 있어서 비주얼 스튜디오에서는 되는데, 리눅스에서는 에러가 나는 이유를 알고 싶습니다.
#include <iostream> using namespace std; struct { int number; char name[10]; char phone_number[15]; int age; }typedef Employee; int main() { Employee employee[10]; employee[0] = { 1, "test1","010-5555-6666",30 }; int i; for (i = 0; i < 10; i++) { if (employee[i].age >= 20 && employee[i].age <= 30) { std::cout << employee[i].name << std::endl; } } return 0; } 컴파일 g++ a.cpp -std=c++11 에러 a.cpp: In function ‘int main()’: a.cpp:13:14: error: no match for ‘operator=’ (operand types are ‘Employee’ and ‘<brace-enclosed initializer list>’) employee[0] = { 1, "test1","010-2222-3333",25 };
-
미해결실전! 스프링 데이터 JPA
repository는 entity당 개별로 생성해줘야 하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의내용을 보면 Member와 Team 엔티티가 있고 JpaRepository를 상속받은 repository 또한 각각 만들어져 있습니다. 단순한 조회는 이미 정의되어있는 메소드로 가능하지만, 다른 테이블(엔티티)와 조인하는 경우에는 직접 정의해서 사용 가능하다는 내용의 강의였는데요 그럼 만약 4개 5개 복잡한 엔티티들과 연관된 쿼리들을 정의하고 싶다면 어느 repositroy에 정의를 해야할지 고민입니다. 여러 엔티티를 1개의 repository로 관리하고자 해도, 상속받을때 <>속에 특정 엔티티를 넣어줘야하는데, 그럼 어떤 엔티티를 넣어야할까요? 코딩에 정답은 없겠지만은 실무에서는 관례쩍으로 어떤식으로 구현을 하는지 궁금합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
rest_framework_jwt를 임포트할 수 없다는 에러가 발생합니다
안녕하세요? 강의 잘 듣고 있습니다. 강의 11분경 즈음 rest_framework_jwt에러가 발생합니다 가상환경에 알맞게 설치되었는지는 확인했고 / 혹시나 해서 pip uninstall후 다시 install까지 해봣는데도 에러가 발생하네요 찾아보니까 simple-jwt를 써보라는데, 그것도 안되는 것 같았습니다 ㅠ 우선 제 settings.py입니다 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', # 'rest_framework.authentication.TokenAuthentication', 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', ], 그리고 이렇게 해둔 상태에서 runserver를 cmd에서 돌리니까 다음과 같은 에러가 cmd에서 발생합니다. (askcompany) C:\Users\user\yb\django_askcompany\askcompany\Scripts\_askcompany8>python manage.py runserver Watching for file changes with StatReloader Performing system checks... Exception in thread django-main-thread: Traceback (most recent call last): File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework\settings.py", line 177, in import_from_string return import_string(val) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\utils\module_loading.py", line 30, in import_string return cached_import(module_path, class_name) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\utils\module_loading.py", line 15, in cached_import import_module(module_path) File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework_jwt\authentication.py", line 4, in <module> from django.utils.encoding import smart_text ImportError: cannot import name 'smart_text' from 'django.utils.encoding' (C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\utils\encoding.py) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1009, in _bootstrap_inner self.run() File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\threading.py", line 946, in run self._target(*self._args, **self._kwargs) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\utils\autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\core\management\commands\runserver.py", line 124, in inner_run self.check(display_num_errors=True) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\core\management\base.py", line 438, in check all_issues = checks.run_checks( File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\core\checks\registry.py", line 77, in run_checks new_errors = check(app_configs=app_configs, databases=databases) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config return check_resolver(resolver) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver return check_method() File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\urls\resolvers.py", line 448, in check for pattern in self.url_patterns: File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\utils\functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\urls\resolvers.py", line 634, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\utils\functional.py", line 48, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\urls\resolvers.py", line 627, in urlconf_module return import_module(self.urlconf_name) File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "C:\Users\user\yb\django_askcompany\askcompany\Scripts\_askcompany8\_askcompany8\urls.py", line 7, in <module> path('accounts/', include('accounts.urls')), File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\urls\conf.py", line 34, in include urlconf_module = import_module(urlconf_module) File "C:\Users\user\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "C:\Users\user\yb\django_askcompany\askcompany\Scripts\_askcompany8\accounts\urls.py", line 1, in <module> from rest_framework.authtoken.views import obtain_auth_token File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework\authtoken\views.py", line 6, in <module> from rest_framework.schemas import ManualSchema File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework\schemas\__init__.py", line 33, in <module> authentication_classes=api_settings.DEFAULT_AUTHENTICATION_CLASSES, File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework\settings.py", line 225, in __getattr__ val = perform_import(val, attr) File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework\settings.py", line 168, in perform_import return [import_from_string(item, setting_name) for item in val] File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework\settings.py", line 168, in <listcomp> return [import_from_string(item, setting_name) for item in val] File "C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\rest_framework\settings.py", line 180, in import_from_string raise ImportError(msg) ImportError: Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'smart_text' from 'django.utils.encoding' (C:\Users\user\yb\django_askcompany\askcompany\lib\site-packages\django\utils\encoding.py). 가상환경에서 사용되는 버전은 다음과 같습니다. 늘 빠르고 친절한 답변에 감사드립니다.
-
미해결스프링 배치
RetryTemplate 질문 드립니다.
안녕하세요 이번 강의에서 RetryItemProcessor2 클래스에서 new DefaultRetryState(item, rollbackClassifier)를 추가하게 되면서 retry가 1번만 발생하게 되더라고요. Configuration에서 RetryPolicy로 maxAttempts를 2로 줬는데 왜 1번만 retry를 하는걸까요? 제가 디버깅하면서 보니까 처음 재시도때는 RetryPolicy가 Configuration에서 정의한 RetryPolicy가 적용됐는데, 2번째 재시도 하려고 할때 RetryPolicy가 SimpleRetryPolicy가 maxAttempts가 0인상태로, configuration에서 정의한 RetryPolicy가 아니더라고요. 왜 이렇게 된건지 알고싶습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
final 필드
컨트롤러나 서비스 클래스에서 리포지토리를 필드로 선언하고 사용을 하는데 final 로 설정을 안해두니 회원가입,로그인을 시도하면 nullpointerexception 이 발생하더라구요 이유가 궁금합니다!
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
state에서 count값 올릴때 +와 ++차이점이 궁금합니다
안녕하세요! 상태 강의 8:08초쯤 count에서 값을 1씩 올릴때 +1을 하면 오류가 안생기는데 제가 궁금해서 count ++를 써보니 const로 선언돼서 값을 재할당할 수 없다고 오류가 뜨더라구요! +와 ++의 차의점을 알 수 있을까요? 감사합니다! const [count, setCount] = useState(0); const onIncrease = () => { setCount(count + 1); };
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
ssr 개념 관한 질문
강의 진행하다가 앞부분 개념이 헷갈려 다시 듣고 왔는데 궁금한 점이 있어 여쭤 봅니다. ssr시 첫 번째 로딩만 브라우저 -> 프론트 서버 -> 벡엔드 -> 디비 이런식으로 전통적인 방법으로 데이터를 받아오고 이후에는 그냥 spa 방식으로 동작한다 라고 이해했는데 질문 1. 그럼 저희 프로젝트에서 saga에서 api 요청을 보내고 받아오는건 브라우저에서 벡엔드로 요청을 보내고 받아오는 것이라고 이해하는 게 맞는지 궁금합니다. 2. 저희 프로젝트에서 npm run dev 로 프론트 서버 실행후localhost:3060 이런 주소로 프론트 서버에 요청을 보내면 벡엔드에서 데이터 요청 후 데이터가 들어있는 정적 파일을받아 오는게 CSR 와의 차이라고 이해했는데 이 데이터를 받아온다는게 pages 폴더 안에 있는 index.js말하는 건가요? 아님 front 단에 작성된 모든 coponent들과 page들을 전부 들고와서 메모리에 캐싱 한다는 말인가요? 나름 구글링하고 찾아 봤는데 명쾌하게 이해되지가 않네요 혹시 강의 뒷부분에 다루어지는 내용이라면 죄송합니다.. 매번 감사드려요
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
git repository 변경 방법
안녕하세요 제로초님 현재 aws ec2 2개 활용하여, 프론트 및 백 배포하였고 두 서버 모두 nginx를 활용하였습니다. 궁금한 점이 기존 aws에 clone한 repo를 지우고 새로운 repo로 clone해도 배포에 문제가 없을까요? 고려할 부분을 미리 생각해보았는데, nginx와 .env 2가지 가 떠오르는데 배포 전에 질문 드립니다. nginx 설정은 변경이 필요없을까요? .env는 추가 예정입니다. 항상 감사드립니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
Create React App에서 node_modules파일 지워졌을 경우
안녕하세요. create react app 강의 19:30초 부분에서 node_modules 파일이 지워졌을 경우 npm i로 다운 받으면 된다고 하셨는데, 뒤에 다른 명령어 추가되는 것 없이 그냥 root 파일위치에서 npm i 만 입력하면 node_modules 파일이 알아서 생성이 되는건가요? 감사합니다! :D 강의 너무 재밌게 잘 듣고있습니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
전위 연산자
pi++는 곧 answer.add(arr1[pi]); pi++; 이렇게 표현할 수 있지 않나요? 그렇게 적용해서 아래 코드를 실행해보았는데 java.lang.outofMemoryError:java heapspace 에러가 납니다. 에러의 원인이 어디서 발생하는지 고민하다가 파악이 되지 않아서 질문드립니다. public class IfTwoPointer { public ArrayList<Integer> solution(int[] arr1, int[] arr2, int num1, int num2) { ArrayList<Integer> answer = new ArrayList<>(); int pi = 0; int pj = 0; while (pi < num1 && pj < num2) { if (arr1[pi] <= arr2[pj]) { answer.add(arr1[pi]); pi++; // pi 와 pj++ 를 따로 넣으면, out of memory 에러가 발생한다. } else answer.add(arr2[pj]); pj++; } while (pi < num1) answer.add(arr1[pi]); pi++; while (pj < num2) answer.add(arr2[pj]); pj++; return answer; } public static void main(String[] args) { // TODO Auto-generated method stub IfTwoPointer answer = new IfTwoPointer(); Scanner sc = new Scanner(System.in); int num1 = sc.nextInt(); int[] arr1 = new int[num1]; for (int i = 0; i < num1; i++) { arr1[i] = sc.nextInt(); } int num2 = sc.nextInt(); int[] arr2 = new int[num2]; for (int i = 0; i < num2; i++) { arr2[i] = sc.nextInt(); } for (int data : answer.solution(arr1, arr2, num1, num2)) { System.out.print(data + " "); } // System.out.println(answer.printResult(arr1, arr2, num1, num2, result)); } }
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
Referer 질문 드립니다!
안녕하세요 Referer 관련 질문 드립니다! 위키피디아에 들어가셔서 referer을 보니 www.google.com/ 으로 되어 있는데 이전 웹 페이지 주소는 https://www.google.com/search?q=hello 아닌가요? 미리 답변 감사드립니다! 좋은 하루 보내세요 :)
-
미해결스프링 핵심 원리 - 기본편
reader가 config를 읽고 파싱해서 context를 만드는게 아닌건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. xml로 빈 config설정하기 강의를 듣고, reader가 xml택스트를 읽고 파싱해서 applicationcontext를 만드는걸로 이해했습니다. 2. java로 작성된 config의 경우, reader가 텍스트를 읽고 이를 파싱해서 applicationcontext가 생성되는것이 아니라, 실제 java코드가 돌면서 . 즉, appconfig 든 appconfig@cglib이든 순수 자바 클래스가 돌면서 applicationcontext가 생성되는 걸로 이해했습니다. xml이나 json과 같은 config는 텍스트 리더가 파일을 읽고 파싱해서 applicationcontext가 생성되고. java코드로된 config는 config.class 또는 config.class@cglib이 실행되면서 applicationcontext가 생성되는걸로 이해했습니다. 자바코드로된 config도 reader가 텍스트를 읽고 파싱하여 applicationcontext를 생성할 거라 생각했는데, 이 강의를 듣고나니 java코드가 돌면서 생성되는걸로 생각됩니다. 상기한 제 이해들이 올바른 이해들일까요?
-
해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
강사님 get( ) 메소드 질문드립니다
강사님 안녕하세요 (()=>{ try{ const result = await axios.get('https://www.zerocho.com/api/get') console.log(result); console.log(result.data); } catch(error){console.error(error);} })(); get은 URL 뒤에 파라미터를 붙여 보내고,POST는 body에 데이터를 붙여 보낸다고 이해했습니다혹시, get이나 post는 프론트에서 사용하는 메서드고인자로 붙여주는 URL은 프론트에서 요청할 백엔드 서버의 URL 이라고 이해해도 되는지 질문드리고 싶습니다
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
CLASSES 관련 질문입니다.
강의 잘 듣고 있습니다. 감사드립니다. CLASSES = ('Car', 'Truck', 'Pedestrian', 'Cyclist') 데이터셋 클래스를 정의해줄 때 반드시 CLASSES라고 변수명을 정해야 한다고 하셨는데요, 왜 그런 건지 궁금합니다. CLASSES가 어디랑 연동이 되어 있길래 그렇게 해야 하는 것인가요?
-
미해결스프링 핵심 원리 - 기본편
굳이 OrderService class로 바로 안 만들고 OrderService 인터페이스와 OrderServiceImpl로 나눠서
굳이 OrderService class로 바로 안 만들고 OrderService 인터페이스와 OrderServiceImpl로 나눠서 만드는 이유가 무엇인가요?