묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Airflow 마스터 클래스
어느순간 dags에 업로드해도 업로드가 되지않네요
airflow에서 잘되다가 윈도우 업데이트 이후 dags에 파일을 새로 생성해도 airflow에 추가가 되지 않습니다.해결을 어떻게 해야할까요?vlomes에 경로도 수정했이미 올라와있는 dags는 코드를 수정하면 반영은 되더라고요,
-
해결됨실리콘밸리 데이터 리더가 알려주는 기초 SQL
만약 데이터 웨어하우스에서 분석한 내용을 다시 고객에게 서빙하고 싶다면 어떻게 하나요?
안녕하세요 한기용 강사님! 궁금한 내용이 있어 질문드려요 OLTP에 저장되어 있는 데이터를 OLAP로 가져와서 내부 직원들이 테이블을 분석하던 중 고객들에게 제공하면 좋을 새로운 데이터(예: 통계 데이터 등)가 재가공된다면 이 데이터를 어떻게 서빙하나요?재가공된 데이터를 OLTP 데이터 저장소(Postgres 등)에 다시 저장해서 이를 API에 연결해서 서빙하는지 궁금합니다.
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
docker-compose 가 Docker Desktop 에서 빠진건가요? command not found 라고 뜨네요
m1 pro 사용 중이고 docker desktop 설치되어 있습니다. 찾아보니 docker desktop 설치 시 docker compose 도 같이 설치된다고 하던데.. 커맨드 자체가 없는거보니 뭔가 바뀐것 같네요. 아래처럼 수동으로 설치도 잘 안돼서 진행을 못하고 있습니다..
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
카프카의 도입 시기를 결정하는 노하우가 더 있을까요?
안녕하세요, 좋은 강의 너무나 감사드립니다.조금 추상적인 질문이어서 곤란하실 것 같아 죄송하네요..ㅎㅎ구체적으로는 말씀드리진 못 하지만, 현재 저희 회사에서 어떠한 하드웨어 장비를 통해 실시간으로 데이터를 수집/통계생성/조회 등의 서비스를 제공하려고 준비 중에 있습니다. 강의 중에 GPS 서비스에 대해 종종 언급하셨는데 그 경우와 유사한 IoT 서비스입니다.지금은 하드웨어 쪽에 투자를 하는 상황이라 간단하게 HTTP 통신으로 하드웨어 몇 대의 데이터를 수집하고 Spring Boot 서버가 데이터를 받아서 처리하고 있습니다.실제 제품 환경에서는 부하 등 여러 요소를 고려하여 MQTT 를 사용한 데이터 수집을 하려고 계획하고 있습니다. 그러던 차에 Kafka 에도 관심을 가져서 강의를 수강해봤는데 Kafka 가 생각보다도 훨씬 대형 서비스에서 써야 할 것 같아서 저희 회사 서비스에서 사용할 만한 건 아닌가...고민하다가 직접 여쭤보려고 합니다.하드웨어는 2초에 1번씩 데이터를 수집하고 전송합니다. 추측하건대 이후에도 1초에 수십 번의 트래픽이 발생하지는 않을 것 같습니다. 만약 그렇게 해야 하더라도 수십 번 수집한 데이터를 1~2초에 1번씩 전송해도 괜찮습니다.수집하고 전송할 데이터, 그러니까 Record 의 Value 는 JSON 형태이며 약 100byte 정도입니다.하드웨어 장비는, 하드웨어 담당자의 의견을 따르자면 최대 100만 대까지 생산하려는 것 같습니다.서비스는 물론 확장이야 할 수 있겠지만, 현재 이와 관련하여 구체적으로 구상된 사업 아이템은 없는 것 같습니다. 즉, 수집한 데이터를 사용하는 서비스는 하나만 있습니다.그러면 단순 계산해서 최대 1초에 100MB 의 요청 / 1초에 100만 번의 요청을 처리해야 한다면, 이정도면 Kafka 도입이 의미가 있을까요?강의에서 언급한 대로, Kafka 를 IaaS 로 운영한다고 하더라도 서버 비용이 월 몇 십만 원씩 내면서 도입할 가치가 있냐고 하면, 솔직히 그렇게 보이진 않거든요 결론적으로 질문은 아래와 같습니다.웬만한 대기업, 대형 서비스가 아니고서야 Kafka 도입은 오버스펙일까요?저희 회사처럼 단일 서비스에 대한 데이터 처리와 고가용성을 확보하려고 하더라도 Kafka 도입이 의미가 있을까요? 강의에서 언급된 인스턴스 스펙보다 낮은 수준의 인스턴스에서 Kafka 를 실행하는 건 괜찮을까요?Kafka 는 어느 정도의 트래픽이 발생해야 도입이 유의미할까요?Kafka 도입을 고려하는 시점에 대한 의사결정 요소에 어떤 것들이 있을까요? 키워드 위주로만이라도 설명해주시면 제가 한 번 조사해보도록 하겠습니다.
-
해결됨Airflow 마스터 클래스
data_interval_start가 배치일로 나오는 이유 문의
안녕하세요.우선 강사님, 좋은 강의 잘 듣고 있습니다. [섹션 5. Template Variable > Airflow 날짜개념] 강의 관련하여 질문 드립니다. Airflow 2.10.0 버전 사용 중이며, 강의와 같이 테스트를 진행하였는데, data_interval_start이 이전 배치일이 아닌 배치일로 나와서 문의드립니다.DAG의 start_date를 2024년 9월 1일로 설정 후 소급 처리하였습니다. 아래와 같이 dag_run이 배치일일텐데, 왜 data_interval_start가 이전 배치일(2024.08.31)이 아닌 배치일로 나올까요?'dag_run': <DagRun dags_python_show_templates @ 2024-09-01 00:30:00+00:00: scheduled__2024-09-01T00:30:00+00:00, state:running, queued_at: 2024-09-06 09:11:26.187022+00:00. externally triggered: False>,'data_interval_end': DateTime(2024, 9, 2, 0, 30, 0, tzinfo=Timezone('UTC')),'data_interval_start': DateTime(2024, 9, 1, 0, 30, 0, tzinfo=Timezone('UTC')),'ds': '2024-09-01',
-
해결됨[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
(맥환경) workbench 이용할 때 패스워드 입력 안해도 자동으로 활성화 가능해져요..
본문제목 그대로 워크 벤치 이용할 때, 항상 패스워드를 입력한 후 활성화 되는 것으로 알고 있었는데, 현재 패스워드 입력 안하고 그냥 클릭만 해도 활성화됩니다. 보안상으로 좋지 않은 것 같은데, 혹시 이런 경우 어떻게 변경이 가능할까요? 오랜만에 mysql을 공부하는데 몇년 전에는 항상 패스워드 입력했던 것 같은데 이번에 새로 깔아보니 패스워드 입력 안해도 실행이 되어 불안합니다. 참고로 저는 맥 환경에서 사용하고 있습니다.
-
미해결[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
db.movies.aggregate() 질문
MongoDB Aggregateion 기본 명령 이해하기1 수업 3분쯤에 db.movies.aggregate([{$match:{year:1995}]) 문법을 그대로 따라 쳤는데, 에러같은건 전혀 나지 않고이 화면이 나옵니다. movies콜렉션에 데이터가 아무것도 안들어있는건가요?? 뭐가 문제인건지 모르겠습니다 ㅠㅠ 이것저것 찾아보니 제가 설치한 movies 컬렉션에는 데이터가 0건인거 같은데 왜 이런건가요? 강의에서 하라는대로 그대로 따라했습니다 ㅠ 몇 번 삭제하고 다시 해봐도 똑같이 데이터가 0건인거같아요
-
미해결[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
아나콘다 설치가 어려운데 아나콘다가 꼭 필요 할까요 ?
강의 내용을 듣는데 아나콘다를 필수로 설치 해야 할까요? 아나콘다 없이 강의를 들을 수 있는 방법도 있을까요?
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
강의 커리큘럼 질문 있습니다.
안녕하세요 저는 선생님이 만들어놓으신 플스택 개발자 로드맵을 따라가고 있는 학생입니다. 지금까지 파이썬 입문과 크롤링 기초, 처음하는 SQL과 데이터베이스 강의 완강했는데요, 이 다음 로드맵이 MongoDB 강의인데, MongoDB 강의를 잠시 뒤로 미루고 그 다음 강의인 가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1] 를 수강해도 괜찮을까요?? 제가 백엔드 개발자가 되고싶어서 해당 강의를 먼저 빨리 좀 들어보고 싶은 마음이 큰가봅니다 ㅠㅠ 추가적으로 한가지 더 질문이 있습니다.선생님 커리큘럼이 파이썬을 기반으로 진행되는데, 한국 백엔드 시장에 파이썬 기반 백엔드 개발자에게 주어지는 기회가 적더라구요. 파이썬 기반 백엔드 개발자는 대부분 AI쪽이라 석박들과 경쟁해야 하는 이유도 있고, 대부분의 기업에서 JAVA기반 백엔드 개발자를 채용하는게 그 다음 이유인 것 같습니다.그래서 저는 아무래도 기회의 폭이 넓은 java기반 백엔드 개발자가 되고싶은데, 그러려면 선생님 커리큘럼을 어떻게 활용 하는게 가장 좋을지 궁금합니다. 주변에 이쪽 분야인 사람도 없고 인터넷에는 정보가 너무나도 다양한데, 어떤 정보가 진실인지 거짓인지 구별할 힘이 아직 저에겐 없습니다. 선생님께서 꼭 좀 조언을 해주셨으면 좋겠습니다. 감사합니다. 강의 정말 좋은 것 같습니다. 좋은 강의를 찍어주시고 합리적인 가격에 팔아주셔서 감사합니다.
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
강의 자료 이미지가 보이지 않습니다.
섹션2 [데이터베이스와 RDBMS] 수강을 하면서 다운받은 강의 자료를 보려고 열면 다음과 같이 삽입된 이미지가 보이지 않습니다. 어떻게 해결할 수 있을까요?
-
미해결Airflow 마스터 클래스
email operator dag 수행 시 오류
강의 내용대로 진행하여 dag파일 수행 시 아래와 같은 오류가 뜹니다.ㅠ 해결방법 알려주세요!!credential 에러인 듯한데, IMAP설정, 앱 비밀번호 설정, yaml파일 수정은 모두 완료했었습니다.! 6645fe320334 *** Found local files: *** /opt/airflow/logs/dag_id=dags_email_operator/run_id=manual__2024-09-01T09:02:54.442821+00:00/task_id=send_email_task/attempt=1.log [2024-09-01, 09:02:58 UTC] {local_task_job_runner.py:123} ▶ Pre task execution logs [2024-09-01, 09:02:59 UTC] {warnings.py:112} WARNING - /home/**/.local/lib/python3.12/site-packages/***/utils/email.py:155: RemovedInAirflow3Warning: Fetching SMTP credentials from configuration variables will be deprecated in a future release. Please set credentials using a connection instead. send_mime_email(e_from=mail_from, e_to=recipients, mime_msg=msg, conn_id=conn_id, dryrun=dryrun) [2024-09-01, 09:02:59 UTC] {email.py:272} INFO - Email alerting: attempt 1 [2024-09-01, 09:03:00 UTC] {taskinstance.py:3301} ERROR - Task failed with exception Traceback (most recent call last): File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 767, in executetask result = executecallable(context=context, **execute_callable_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 733, in executecallable return ExecutionCallableRunner( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/operator_helpers.py", line 252, in run return self.func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/baseoperator.py", line 406, in wrapper return func(self, args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/operators/email.py", line 79, in execute send_email( File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 80, in send_email return backend( ^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 155, in send_email_smtp send_mime_email(e_from=mail_from, e_to=recipients, mime_msg=msg, conn_id=conn_id, dryrun=dryrun) File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 282, in send_mime_email smtp_conn.login(smtp_user, smtp_password) File "/usr/local/lib/python3.12/smtplib.py", line 739, in login (code, resp) = self.auth( ^^^^^^^^^^ File "/usr/local/lib/python3.12/smtplib.py", line 641, in auth response = encode_base64(initial_response.encode('ascii'), eol='') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeEncodeError: 'ascii' codec can't encode character '\xa0' in position 26: ordinal not in range(128) [2024-09-01, 09:03:00 UTC] {logging_mixin.py:190} INFO - Task instance in failure state [2024-09-01, 09:03:00 UTC] {logging_mixin.py:190} INFO - Task start:2024-09-01 09:02:59.026829+00:00 end:2024-09-01 09:03:00.894255+00:00 duration:1.867426 [2024-09-01, 09:03:00 UTC] {logging_mixin.py:190} INFO - Task:<Task(EmailOperator): send_email_task> dag:<DAG: dags_email_operator> dagrun:<DagRun dags_email_operator @ 2024-09-01 09:02:54.442821+00:00: manual__2024-09-01T09:02:54.442821+00:00, state:running, queued_at: 2024-09-01 09:02:54.472998+00:00. externally triggered: True> [2024-09-01, 09:03:00 UTC] {logging_mixin.py:190} INFO - Failure caused by 'ascii' codec can't encode character '\xa0' in position 26: ordinal not in range(128) [2024-09-01, 09:03:00 UTC] {taskinstance.py:1225} INFO - Marking task as FAILED. dag_id=dags_email_operator, task_id=send_email_task, run_id=manual__2024-09-01T09:02:54.442821+00:00, execution_date=20240901T090254, start_date=20240901T090259, end_date=20240901T090300 [2024-09-01, 09:03:00 UTC] {taskinstance.py:340} ▶ Post task execution logs
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
min.insync.repllicas, acks옵션, 그리고 리더 파티션 승급
안녕하세요. 강의 잘 듣고 있습니다. 아래 상황을 가정하고 질문 드립니다. replication factor : 3acks옵션 : -1min.insync.replicas : 2리더 파티션을 가지고 있던 브로커에서 장애가 발생하였고, 프로듀서는 정상적으로 적재되었다고 응답을 받은 상황이라고 가정하겠습니다.여기서 리더 파티션으로 승급되는 기준은 acks와 min.insync.replicas옵션에 의해 데이터를 복제받은 파티션일 것 같은데요. 제 생각에 가장 simple하게 승급시키는 기준이 팔로워 파티션 중 offset이 가장 큰 팔로워 파티션을 승급시키는 방법인 것 같은데요. 카프카에서는 어떤 기준으로 팔로워 파티션을 리더로 승급시키는지 궁금합니다.
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
debezium connector schema 찾지 못하는 오류
안녕하세요.강의 잘 들어보고 AWS cloud 환경에서 msk를 이용하여 connector 생성하고 있습니다. 다만, db(mysql)의 binlog가 오래되어 삭제시켰고, 새롭게 debezium connector를 생성 중에 schema isn't known to this connector 라는 오류가 발생하는데요. 제가 이해가 잘못된 것인지 ddl 이 존재하지 않으면 schema를 못가져오는걸로 아는데요. 혹시 이럴 경우는 어떻게 해결하셨는지 궁금합니다.
-
미해결Airflow 마스터 클래스
dag_seoul_api dag은 실행이 되는데 파일이 저장이 안되네요
json으로 데이터로 잘불러왓고 dag도 성공적으로 마쳤다고 했는데 정작 files 폴더에는 저장이 안되어 있습니다.그래서 docker inspect로 mount 속성을 보니{ "Type": "bind", "Source": "/home/jspark9703/airflow/files", "Destination": "/opt/airflow/files", "Mode": "rw", "RW": true, "Propagation": "rprivate" }propagation이 rprivate으로 되있더군요 아마 이 속성때문에 그런거같은데... volumes 속성을 바꾸는 방법은 없을까요? 아님 다른 문제가 있는 것일까요?
-
미해결Airflow 마스터 클래스
EmailOperator 강습 중에 실행 오류 관련 문의 드립니다.
강사님*** !!!! Please make sure that all your Airflow components (e.g. schedulers, webservers, workers and triggerer) have the same 'secret_key' configured in 'webserver' section and time is synchronized on all your machines (for example with ntpd) See more at https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#secret-key *** Could not read served logs: 403 Client Error: FORBIDDEN for url: http://e1efbc97ae25:8793/log/dag_id=dags_email_operator/run_id=manual__2024-08-24T06:22:20.118495+00:00/task_id=send_email_task/attempt=1.log [2024-08-24, 06:22:25 UTC] {local_task_job_runner.py:123} ▶ Pre task execution logs [2024-08-24, 06:22:25 UTC] {warnings.py:112} WARNING - /home/***/.local/lib/python3.12/site-packages/***/utils/email.py:155: RemovedInAirflow3Warning: Fetching SMTP credentials from configuration variables will be deprecated in a future release. Please set credentials using a connection instead. send_mime_email(e_from=mail_from, e_to=recipients, mime_msg=msg, conn_id=conn_id, dryrun=dryrun) [2024-08-24, 06:27:49 UTC] {taskinstance.py:3301} ERROR - Task failed with exception Traceback (most recent call last): File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 767, in executetask result = executecallable(context=context, **execute_callable_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/taskinstance.py", line 733, in executecallable return ExecutionCallableRunner( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/operator_helpers.py", line 252, in run return self.func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/models/baseoperator.py", line 406, in wrapper return func(self, args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/operators/email.py", line 79, in execute send_email( File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 80, in send_email return backend( ^^^^^^^^ File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 155, in send_email_smtp send_mime_email(e_from=mail_from, e_to=recipients, mime_msg=msg, conn_id=conn_id, dryrun=dryrun) File "/home/airflow/.local/lib/python3.12/site-packages/airflow/utils/email.py", line 280, in send_mime_email smtp_conn.starttls() File "/usr/local/lib/python3.12/smtplib.py", line 779, in starttls self.sock = context.wrap_socket(self.sock, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/ssl.py", line 455, in wrap_socket return self.sslsocket_class._create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/ssl.py", line 1042, in create self.dohandshake() File "/usr/local/lib/python3.12/ssl.py", line 1320, in do_handshake self._sslobj.do_handshake() TimeoutError: _ssl.c:983: The handshake operation timed out 위 문구와 함께 현재 smtp.gmail.com에 접속이 안되는데.. (worker에서도 접속이 안됨)혹시 다른 설정이 필요할게 있을까요?
-
미해결다양한 사례로 익히는 SQL 데이터 분석
특정 스키마에서 생성한 편집기의 쿼리를 판다스에 삽입하는 방법
안녕하세요,디비버 실습시 nw스키마에서 SQL편집기를 생성하여 코드를 작성중입니다.따라서 select * from orders; 와 같이 nw.orders대신 그냥 orders로 테이블을 지정(?)하고있습니다.해당 쿼리를 그대로 복사하여 query객체에 넣고싶은데이럴땐 conn_string에 어떤 추가적인 사항을 넣어줘야 할까요?
-
미해결Airflow 마스터 클래스
Dag Start_date 에 현재 시간 넣을때 사이드 이펙트가 있을까요?
안녕하세요,인강 수강후 현업에서 Airflow 를 통해서 Dag 을 수행하고 있는데요,서비스 PM 등의 이유로 수시간(3~5시간) 정도 pause 를 진행하고 다시 unpause 를 하게 되는 경우가 있습니다.이럴때 unpasue 를 클릭하게 된다면 비록 Dag 에 catchup = false 로 지정해 놓더라도, 가장 최근에 수행 되었어야 할 Dag Run 은 수행되게 되는데요 Ex )schedule_interval = 10,20,30 1,2,3 * * * *Dag.catchup = Falsepause = 01:15unpause = 03:25수행되는 Dag run 의 data_interval_end = 03:20 그런데 여기서 3시 20 분 dag_run 을 수행시키지 않기 위해서 생각을 하다가, Dag 의 default_args 의 start_date 값을 datetime.now 로 주는것에 대해서 생각을 해봤는데요, 당장 간단하게 테스트를 했을때는 큰 문제가 없었는데, 혹시 해당 케이스가 문제가 되는 케이스가 있을까요? 그리고 start_date 를 now 로 하는것 말고도 다른 방안이 있다면 좋은 방안 부탁 드립니다감사합니다!
-
미해결Airflow 마스터 클래스
SSHOperator, BashOperator차이
강의에서는 BashOperator을 이용해서 DAG를 만들었는데,제 실무에서는 SSHOperator을 사용하더라구요.어떤 차이가 있는지 궁금합니다.
-
미해결Airflow 마스터 클래스
EmailOperator OSError
안녕하세요. EmailOperator 실습과정에서 오류가 발생해서 질문을 남깁니다!설정을 한 후 실행을 하니. OSError: [Errno 99] Cannot assign requested address 가 발생해서 도움이 필요합니다..!docker-compose.yaml 파일에 이렇게 설정을 하였고, 에러는 다음과 같습니다!
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
Join 구문에서 메인 테이블
SELECT provider FROM items JOIN ranking on ranking.item_code = items.item_code 여기서 items 위치를 메인 테이블ranking 위치를 서브 테이블이라고 칭할게요! 메인테이블과 서브테이블을 어떤걸로 해야할지 항상 헷갈려요기본적으로 보고 싶은 컬럼인 provider가 원래 속한 테이블을 메인에 두려고는 하는데 예제 풀어주시는 걸 보면 아닌 경우도 있어서요! 어차피 테이블을 조인하는거니까 하나의 테이블이 되면 뭐가 메인이 되어도 상관이 없지않나 싶은데..메인 테이블 지정하는 기준이 있나요??