묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
nx,ny를 조건문에서 거르는 대신 반복문의 시작을 1부터 n-1까지 하면 되지 않나요?
nx,ny를 조건문에서 거르는 대신 반복문의 시작을 1부터 n-1까지 하면 되지 않나요?강사님처럼 조건문에서 거르신 이유가 궁금합니다.
-
미해결제대로 파는 Git & GitHub - by 얄코(Yalco)
커밋 내용 실수 수정
섹션 4 충돌해결하기에서 main 브랜치에서 Tigers의 manager를 Kenneth로 변경Leopards의 coach를 Nicholas로 변경Panthers의 coach를 Shirley로 변경커밋 메시지: Edit Tigers, Leopards, Panthers을 했어야했는데 main 브랜치에서 전부 manager의 이름으로 변경해버려서 이후 conflict-2에서 충돌이 일어나지 않는 상황이 발생했습니다..이 커밋 내용만 수정하는 방법이 있을 까요?
-
미해결Microservice 설계(with EventStorming,DDD)
다른 BC 또는 마이크로서비스 담당 정보를 어떻게 이용하나요?
컨텍스트 매핑 강의를 듣는 중입니다.대여를 처리하려면 도서 정보, 회원 정보도 필요합니다.다른 BC 또는 마이크로서비스가 관리하는 정보를 어떻게 이용하나요?- 대여할 도서(도서 정보 필요)- 대여할 사용자(회원 정보 필요)
-
해결됨Flutter 앱 개발 실전
CartItem 추가시
extension ImmutableHelper<T> on Iterable<T> { List<T> toImmutable() => List.unmodifiable(this); }이걸 이용해서 전에 있던 코드를 응용해서 List<CartItem> get selectedCartItemList { return state.where((cartItem) => cartItem.isSelected).toImmutable(); }이렇게 이용해도 괜찮을까요 ???
-
미해결
CartItem 시에 불변성을 보장하기 위한 함수
// immutable_helper.dart extension ImmutableHelper<T> on Iterable<T> { List<T> toImmutable() => List.unmodifiable(this); }이걸 만들어서 cart item 추가, 수정, 삭제 시에 써도 괜찮을까요 ????
-
미해결스프링 배치
Batch 성능 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이 강의를 들으면서 프로젝트에 Batch를 도입하려고합니다.Jenkins에서 파라미터로 Spring Batch에 pageNo이라는 인자에 주입하고 Tasklet 인터페이스를 implements한 커스텀 tasklet에서 공공데이터 포털 api를 호출하여 데이터를 가져오고 이를 db에 적재를 하려고 합니다. Job을 1번 실행하면 Step도 1번 실행하는 방식인데 1번 배치 사이클이 끝나면 pageNo을 1 증가해서 다시 배치를 돌리는 방식입니다. 그래서 아래와 같이 2가지 구현을 생각했습니다. Job은 1번 호출하지만 Step을 반복 실행 VS Job을 반복 호출=======================================전자 방식-장점: 메타 테이블에 JobExecution 등 db에 삽입 및 조회가 많이 일어나지 않는다.-단점: 특정 pageNo이 오류가 날 시 몇번째 pageNo에서 오류가 났는 지 확인을 해야하는데 이를 StepExecutionContext에서 디코딩 후 자바 역직렬화를 해야한다.(DB에서 조회만으로 확인하기 힘듦)=======================================후자 방식-장점: DB에서 조회만으로 pageNo이 몇번째에서 오류가 발생했는 지 쉽게 확인 할 수 있다.-단점: DB에 접근이 많다.=======================================제가 직접 느낀바로는 위와 같습니다. 저도 아직 공부한지 얼마 안되어서 잘 모르기에 Chat GPT에게 물어봤습니다. 아래와 같이 Job을 반복 호출하는건 성능상 좋지 않다고 합니다. GPT의 답변이 정답이 아닐 수 있기에 확인도 받고싶고 만약 Step을 반복적으로 호출하는게 더 낫다면 API용 Spring 서버에서 관리자가 로그인하면 이를 StepExecutionContext에서 가져와서 역직렬화 후 브라우저에 보여주는게 더 나은가싶습니다. 선생님께 자문을 구하고싶습니다.
-
해결됨초보자를 위한 BigQuery(SQL) 입문
강의 자료를 블로그 작성에 활용해도 될까요?
안녕하세요 카일스쿨님!PM 강의부터 빅쿼리 SQL까지 너무 좋은 강의 덕분에 잘 공부하고 있습니다. 해당 내용을 블로그에 정리하고 싶은데요. 장표를 활용해도 될지 궁금합니다. 상업적인 광고는 달려 있지 않으며, 정리 용도로 제 생각을 덧붙여 정리 예정입니다. 저작권 관련 예민한 부분이라 미리 여쭤보며, 혹 불가능 하더라도 충분히 이해되는 부분입니다. 감사합니다!!
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
다작이 가능한 아이디어와 그렇지 않은 아이디어란?
안녕하세요 그 좋은 아이디어인지 여러가지 기준을 가지고 판단할 수 있다고 가르쳐주셔서 감사합니다. 그 중에 확장(다작)이 가능한 아이디어인지?를 고민해본다고 하셨는데 어떤 게 확장이 가능한거고 어떤게 확장이 어려운 아이디어인지요?
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
쿠팡 open api에 관해서
안녕하세요 쿠팡 open api가 규정만 빼면 좋다는 말씀에 저도 관심이 많이 생기는데 상품이 앱내 타겟과 일치하는 경우에 활용하면 좋다는 말씀이 잘 이해가 안돼서 질문드립니다. 상품이 내려가거나 가격이 변동된 경우에 싱크가 안 맞는 문제는 아무리 상품과 앱이 일치해도 동일하게 문제일 것 같다고 생각이 들어서 헷갈리는 것 같습니다. 예를 들어서 제가 개발한 앱이 낚시 커뮤니티 앱이기 때문에 키워드를 "낚싯대"로 한담에 뿌려주면 된다고 쳐도 서치 횟수 제한을 피하려고 캐싱 혹은 DB화 하는 순간 싱크 안맞는 문제는 발생할 것 같은데 그리고 같은 맥락에서 다작을 하더라도 앱마다 거기에 맞는 상품을 서치해서 보여주면 되는데 앱이 많은 거랑 써치하면 싱크가 안 맞는거랑 무슨 상관인지도 잘 모르겠어서 질문드립니다. 감사합니다!
-
미해결
gpt를 한 10번 돌려도 안고쳐져 져서 문의남깁니다선생님 ㅠㅠ
import React, { useState, useEffect } from "react"; import axios from "axios"; import { motion } from "framer-motion"; import { FiPhone, FiMail, FiMapPin } from "react-icons/fi"; import Swal from "sweetalert2"; import contactData from "../../Locale/contact.json"; // ✅ JSON 불러오기 const fadeInVariants = { hidden: { opacity: 0, y: 30 }, visible: (i) => ({ opacity: 1, y: 0, transition: { duration: 0.6, delay: i * 0.2 }, }), }; const buttonVariants = { hover: { scale: 1.05, transition: { duration: 0.3 } }, tap: { scale: 0.95 }, }; const Contact = () => { const [language, setLanguage] = useState( localStorage.getItem("language") || "ko" ); const [localizedData, setLocalizedData] = useState(contactData[language]); const [forceRender, setForceRender] = useState(0); // ✅ 리렌더링 트리거를 위한 상태 추가 // ✅ `localStorage` 변경 감지 및 `forceRender` 상태 업데이트 useEffect(() => { const handleLanguageChange = () => { const newLanguage = localStorage.getItem("language") || "ko"; setLanguage(newLanguage); setLocalizedData(contactData[newLanguage]); setForceRender((prev) => prev + 1); // ✅ 리렌더링 강제 실행 }; window.addEventListener("storage", handleLanguageChange); return () => { window.removeEventListener("storage", handleLanguageChange); }; }, []); const getLocalizedText = (key) => { const keys = key.split("."); return keys.reduce((obj, k) => obj?.[k], localizedData) || key; }; const [formData, setFormData] = useState({ name: "", email: "", phone: "", message: "", status: "in progress", }); const handleChange = (e) => { setFormData({ ...formData, [e.target.name]: e.target.value, }); }; const handleSubmit = async (e) => { e.preventDefault(); try { const response = await axios.post( "http://localhost:3000/api/contact", formData ); if (response.status === 201) { Swal.fire({ icon: "success", title: getLocalizedText("contact.alerts.success"), confirmButtonColor: "#3085d6", confirmButtonText: "확인", }); setFormData({ name: "", email: "", phone: "", message: "", status: "in progress", }); } } catch (error) { Swal.fire({ icon: "error", title: getLocalizedText("contact.alerts.error"), confirmButtonColor: "#d33", confirmButtonText: "확인", }); } }; return ( <motion.div key={language} className="min-h-screen bg-white py-32" initial="hidden" animate="visible" > <motion.div className="container mx-auto px-4 max-w-6xl" variants={fadeInVariants} custom={0} > <motion.div className="text-center mb-16" variants={fadeInVariants} custom={1} > <h1 className="text-4xl lg:text-5xl font-bold text-gray-800 mb-6"> {getLocalizedText("contact.title")} </h1> <p className="text-xl text-gray-600 max-w-3xl mx-auto"> {getLocalizedText("contact.subtitle")} </p> </motion.div> <motion.div className="grid lg:grid-cols-2 gap-12 items-start" variants={fadeInVariants} custom={2} > <motion.div className="bg-white rounded-2xl shadow-xl p-8" variants={fadeInVariants} custom={3} > <form onSubmit={handleSubmit}> <div className="space-y-6"> {["name", "email", "phone"].map((field, index) => ( <motion.div key={index} variants={fadeInVariants} custom={index + 4} > <label className="block text-gray-700 font-medium mb-2"> {getLocalizedText(`contact.form.${field}`)} </label> <input type={field === "email" ? "email" : "text"} name={field} className="w-full p-4 py-3 rounded-lg border border-gray-300 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-all duration-300" placeholder={getLocalizedText( `contact.form.placeholders.${field}` )} required value={formData[field]} onChange={handleChange} /> </motion.div> ))} <motion.div variants={fadeInVariants} custom={6}> <label className="block text-gray-700 font-medium mb-2"> {getLocalizedText("contact.form.message")} </label> <textarea name="message" className="w-full p-4 py-3 rounded-lg border border-gray-300 focus:border-blue-500 focus:ring-2 focus:ring-blue-200 transition-all duration-300 h-40" placeholder={getLocalizedText( "contact.form.placeholders.message" )} required value={formData.message} onChange={handleChange} /> </motion.div> <motion.button className="w-full bg-blue-600 text-white py-4 rounded-lg font-medium hover:bg-blue-700 transition-colors duration-300" variants={buttonVariants} whileHover="hover" whileTap="tap" > {getLocalizedText("contact.form.submit")} </motion.button> </div> </form> </motion.div> {/* 연락처 정보 */} <motion.div className="space-y-8" variants={fadeInVariants} custom={7} > <motion.div className="bg-white rounded-2xl shadow-lg p-8" variants={fadeInVariants} custom={8} > <h3 className="text-2xl font-bold text-gray-800 mb-6"> {getLocalizedText("contact.contact_info.title")} </h3> <div className="space-y-6"> {["phone", "email", "address"].map((key, index) => ( <motion.div key={index} className="flex items-center gap-4 p-4 border rounded-lg shadow-md hover:shadow-lg transition-all duration-300" variants={fadeInVariants} custom={index + 9} > {key === "phone" && ( <FiPhone className="text-blue-600 text-3xl" /> )} {key === "email" && ( <FiMail className="text-blue-600 text-3xl" /> )} {key === "address" && ( <FiMapPin className="text-blue-600 text-3xl" /> )} <div> <h4 className="text-lg font-semibold text-gray-800"> {getLocalizedText(`contact.contact_info.${key}.title`)} </h4> <p className="text-gray-600"> {getLocalizedText(`contact.contact_info.${key}.info`)} </p> <p className="text-sm text-gray-500"> {getLocalizedText(`contact.contact_info.${key}.desc`)} </p> </div> </motion.div> ))} </div> </motion.div> <motion.div className="bg-white rounded-2xl shadow-lg overflow-hidden" variants={fadeInVariants} custom={10} > <iframe src=" width="100%" height="400" loading="lazy" className="w-full h-[400px] md:h-[600px] lg:h-[600px]" ></iframe> </motion.div> </motion.div> </motion.div> </motion.div> </motion.div> ); }; export default Contact;gpt를 한 10번 돌려도 안고쳐져 져서 문의남깁니다선생님 ㅠㅠ다른 페이지는 모두 변경완료 했습니다. 하지만 문의하기 페이지만 계속 새로고침 해야만 언어가 변경이 되네요.왜그런지 자세히 알려주시면 감사하겠습니다..(지도 src는 지웠습니다.)
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
5.2강의에서 header태그 에러
const Header = () => { return { <header> <h1>header</h1> </header> }; }; 위의 코드 작성시속성 할당이 필요합니다.선언 또는 문이 필요합니다.식이 필요합니다.선언 또는 문이 필요합니다.이 4가지 에러가 표시됩니다.
-
미해결Airflow 마스터 클래스
Email operator로 메일 전송하기 오류 내용에 대한 도움 부탁드립니다.
안녕하세요. 선생님.Email operator 메일 전송 dag 수행 시 아래 오류 발생합니다.시간 되실 때 내용에 대해 도움 부탁드립니다.*** /opt/airflow/logs/dag_id=dags_email_operator/run_id=manual__2025-02-19T05:59:40.395069+00:00/task_id=send_email_task/attempt=1.log ▲▲▲ Log group end [2025-02-19, 14:59:44 KST] {local_task_job_runner.py:123} ▼ Pre task execution logs [2025-02-19, 14:59:44 KST] {taskinstance.py:2613} INFO - Dependencies all met for dep_context=non-requeueable deps ti=<TaskInstance: dags_email_operator.send_email_task manual__2025-02-19T05:59:40.395069+00:00 [queued]> [2025-02-19, 14:59:44 KST] {taskinstance.py:2613} INFO - Dependencies all met for dep_context=requeueable deps ti=<TaskInstance: dags_email_operator.send_email_task manual__2025-02-19T05:59:40.395069+00:00 [queued]> [2025-02-19, 14:59:44 KST] {taskinstance.py:2866} INFO - Starting attempt 1 of 1 [2025-02-19, 14:59:44 KST] {taskinstance.py:2889} INFO - Executing <Task(EmailOperator): send_email_task> on 2025-02-19 05:59:40.395069+00:00 [2025-02-19, 14:59:44 KST] {warnings.py:112} WARNING - /home/**/.local/lib/python3.12/site-packages/***/task/task_runner/standard_task_runner.py:70: DeprecationWarning: This process (pid=117) is multi-threaded, use of fork() may lead to deadlocks in the child. pid = os.fork() [2025-02-19, 14:59:44 KST] {standard_task_runner.py:72} INFO - Started process 118 to run task [2025-02-19, 14:59:44 KST] {standard_task_runner.py:104} INFO - Running: ['***', 'tasks', 'run', 'dags_email_operator', 'send_email_task', 'manual__2025-02-19T05:59:40.395069+00:00', '--job-id', '121', '--raw', '--subdir', 'DAGS_FOLDER/dags_email_operator.py', '--cfg-path', '/tmp/tmp4a9ijz8k'] [2025-02-19, 14:59:44 KST] {standard_task_runner.py:105} INFO - Job 121: Subtask send_email_task [2025-02-19, 14:59:44 KST] {task_command.py:467} INFO - Running <TaskInstance: dags_email_operator.send_email_task manual__2025-02-19T05:59:40.395069+00:00 [running]> on host 4742acded404 [2025-02-19, 14:59:44 KST] {taskinstance.py:3132} INFO - Exporting env vars: AIRFLOW_CTX_DAG_OWNER='***' AIRFLOW_CTX_DAG_ID='dags_email_operator' AIRFLOW_CTX_TASK_ID='send_email_task' AIRFLOW_CTX_EXECUTION_DATE='2025-02-19T05:59:40.395069+00:00' AIRFLOW_CTX_TRY_NUMBER='1' AIRFLOW_CTX_DAG_RUN_ID='manual__2025-02-19T05:59:40.395069+00:00' [2025-02-19, 14:59:44 KST] {logging_mixin.py:190} INFO - Task instance is in running state [2025-02-19, 14:59:44 KST] {logging_mixin.py:190} INFO - Previous state of the Task instance: queued [2025-02-19, 14:59:44 KST] {logging_mixin.py:190} INFO - Current task name:send_email_task state:running start_date:2025-02-19 05:59:44.157879+00:00 [2025-02-19, 14:59:44 KST] {logging_mixin.py:190} INFO - Dag name:dags_email_operator and current dag run status:running [2025-02-19, 14:59:44 KST] {taskinstance.py:731} ▲▲▲ Log group end
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)
화살과 몬스터 버그와 관련한 질문입니다
몬스터, 화살 이동 전부 독립적인 갱신 주기를 갖게 한 이후로 버그가 생긴 것 같습니다. 화살을 쏘는 동안에는 캐릭터가 안 움직여요.원인은 화살이 50ms 단위로 일감을 예약하고 몬스터는 200ms로 일감을 예약하다 보니까 화살이 날아가는 중에는 화살의 Update만 호출될 수밖에 없더라고요. 최소 힙으로 예약 일감을 처리하니까요.이를 쉽게 해결하는 건 몬스터랑 화살 둘 중에 하나를 TickRoom의 room.Update()에 넣어놓는 것인데 이건 임시방편 같고요. 헤딩해봐야 하겠지만 각 화살, 몬스터에 각각 잡큐를 두는 방식밖에 없는 것 같은데, 이런 식의 해결이 일반적인 방법에 가까울까요? 각 오브젝트마다 잡큐를 두는 것이? 실무에서 더 복잡하고 많은 오브젝트들이 처리돼야 할 때 해당 Zone에 하나만 잡큐를 두는 건 굉장히 비효율적인 것 같습니다.뭐 어떻게든 돌아가면 되긴 하지만 정답은 없어도 오답이란 건 있으니까요. 지금처럼 GameRoom에 잡큐를 두었을 때는 투사체랑 다른 오브젝트들을 순차적으로 처리하는 건 무조건 문제가 생길 것 같고, room.Update()에 빼놓으면 갱신 주기를 조절하기 어려우니, 각각 잡큐를 두는 게 이상적인 것 같아서요.
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-9 마지막 테이블 피벗 해보기
안녕하세요 카일님강의 마지막에 주신 연습문제 해보았습니다. PIVOT에 어떤 연산자를 사용할 것인가?MAX로 할 경우 -> 별도의 연산된 결과값이 있는 base`가 필요할 것 같음. 이 경우 강의 중 작성된 cnt를 참조하여 작성할 수 있을 것 같으나 3중 쿼리라는게 마음에 걸림.SUM으로 할 경우 -> 강의 중 작성한 base 만으로 충분할 것 같음. 2중 쿼리로 충분해보임.따라서 B안으로 작성해보았습니다.WITH base AS ( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, platform, -- event_param, MAX(IF(event_param.key = 'firebase_screen',event_param.value.string_value, NULL)) AS firebase_screen, -- MAX(IF(event_param.key = 'food_id',event_param.value.int_value, NULL)) AS food_id, MAX(IF(event_param.key = 'session_id',event_param.value.string_value, NULL)) AS session_id, FROM advanced.app_logs CROSS JOIN UNNEST(event_params) AS event_param WHERE -- event_date = '2022-08-01' -> 적은 데이터로 쿼리를 작성하기 위해 입력한 임시 조건 event_date BETWEEN '2022-08-01' AND '2022-08-18' GROUP BY ALL -- LIMIT 100 -> 기초 구문 작성 완료 시 삭제 필요! ), filter_event_and_concat_event_and_screen AS ( -- name, screen concatate (필요한 이벤트만 WHERE 조건 걸어 사용) SELECT * EXCEPT(event_name,firebase_screen, event_timestamp), CONCAT(event_name, '-', firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM base WHERE event_name IN('screen_view', 'click_payment') ) # PIVOT 연습문제 SELECT event_date, SUM(IF(event_name_with_screen = 'screen_view-welcome',1,0)) AS `screen_view-welcome`, SUM(IF(event_name_with_screen = 'screen_view-home',1,0)) AS `screen_view-home`, SUM(IF(event_name_with_screen = 'screen_view-food_category',1,0)) AS `screen_view-food_category`, SUM(IF(event_name_with_screen = 'screen_view-restaurant',1,0)) AS `screen_view-restaurant`, SUM(IF(event_name_with_screen = 'screen_view-cart',1,0)) AS `screen_view-cart`, SUM(IF(event_name_with_screen = 'click_payment=cart',1,0)) AS `click_payment-cart`, FROM filter_event_and_concat_event_and_screen GROUP BY ALL ORDER BY event_date ASC
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
application.properties
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]application.properties에 등록한 아래 내용 동작하지 않습니다.spring.mvc.view.prefix=/WEB-INF/views/ spring,mvc.view.suffix=.jspServletApplication@Bean InternalResourceViewResolver internalResourceViewResolver(){ return new InternalResourceViewResolver("/WEB-INF/views/", ".jsp"); }위 내용 등록시 동작합니다.버전 차이인가요? 아니면 인텔리제이 유료/무료 차이인가요?
-
미해결한 입 크기로 잘라먹는 타입스크립트(TypeScript)
instanceof 관련 질문
안녕하세요!다름이 아니라 타입 좁히기 도중 type Person을 어떻게 해야 instanceof와 같이 쓸까 고민 중 아래와 같이 직접 인스턴스를 만들어 봤습니다.class IPerson { constructor(public name: string, public age: number) {} } func (new IPerson("User", 36));위 처럼 작성 시 정상작동은 하더라구요.instanceof에 관해 조금 더 찾아보니 보통 interface와 같이 사용한다 하여 기존 Person 타입도 interface Person { name: string; age: number; }위처럼 바꿔주었는데요. 실수로 제가 age: number; 부분을 지우고 파일을 실행 시켰는데도 불구하고 정상적으로 "User은 36살 입니다." 라고 출력이 되더라구요. 궁금해서 더 찾아보니 instanceof는 생성자를 기준으로 판단한다고 하였는데,여기서 제가 궁금한 것은 instanceof는 타입 별칭과 별개로 생성자를 기준으로 판단하면 value instanceof IPerson 부분에 value의 타입은 Person이 아닌 IPerson으로 좁혀져야 하는게 아닌지 궁금합니다!!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Mvc , Api 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 스프링 관련 로드맵을 거의 다 들은 후에 mvc 2편으로 돌아왔습니다. 궁금한 점이 생겼는데요, 대부분의 협업에서는 프론트엔드와 백엔드로 분리하여 맡은 역할을 수행하고 ,이때 api 를 통해서 필요한 데이터를 받고 전송하는 것으로 알고 있습니다. 강의에서 mvc 패턴을 사용하는 이유는 렌더링의 편의성을 위해서이고, 해당 강의에서 배우는 예외처리, 로그인, 파일 업로드 등은 비단 mvc에서 뿐만 아니라 api 방식에서 또한 근본은 같다라고 이해하였는데 제가 이해한 내용이 맞을까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
테스트 코드 실행에서 URL을 인식 못하면서 500 에러 발생 시 관련 참고 글
https://velog.io/@ghwns9991/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-3.2-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98-%EC%9D%B4%EB%A6%84-%EC%9D%B8%EC%8B%9D-%EB%AC%B8%EC%A0%9C스프링 3.2 부터 uri 관련 매개변수 어노테이션을 잘 인식하지 못한다고 하나 봅니다. 저는 윗 글의 두 번째(-parameters) 방법으로 해결했습니다.
-
해결됨React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
코드 다시 만져보면서 추가질문입니다.
문의하기에서 접수 완료 후 (현재 기본 로컬~문의완료되었습니다.) 알럿 뜨는거 저번에 배운 게시글 처럼 넣어서 이쁘게 꾸며도 사용상 문제없는거 맞죠?만약에 참고할만한 알럿 다른 라이브러리나 깃허브 같은건 보통 실무에서 어떻게 참조하나요?몽고DB랑 AWS_S3로 저희가 이미지 및 데이터를 저장하잖아요, 그럼 실무에서는 그냥 도메인 및 호스팅만 따로 구매해서 넘겨드리고 사용 하시면 된다고 하면서 넘겨드리고, 몽고DB 및 AWS_S3는 제가 한 계정(제 개발계정)에 같이 폴더만 나눠서 관리하는 식으로 많이하나요? 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
오타 제보드립니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]JPA 기본편 강의 pdf 파일 (10. 객체지향 쿼리 언어 p.57)위 사진에서 화살표로 가리키고 있는 부분에 Team 엔티티의 별칭 t가 누락되었습니다..!