묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨한 입 크기로 잘라먹는 타입스크립트(TypeScript)
에궁....처음부터 막히네요 ㅡㅡ
"Hello Typescript" 실습을 해봤는데요아래와 같이 마지막에 한번에 실행을 해볼수 있는 명령어를 했는데 다음과 같이 에러가 납니다.윈도우 사용사라서 강사님 말씀처럼 맨앞에 sudo 인가는 입력하지 않고 설치하는게 맞는거지요근데, 설치까지는 되었는데 그 다음에 파일을 확인하려고 하면 아래와 같이 에러가 떠서요말씀하시는데로 그대로 따라하긴 했는데, 뭐가 잘못된건지...타임스크립트는 처음 해보는지라...
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
국내 was서버 및 백엔드 언어관련 문의사항
안녕하세요 선생님!저는 개발자는 아니구, 모의해킹 컨설턴트지만 그래도 웹의 구조를 이해하고 코드 분석하는데 필요해서 강의를 찾던중 선생님 강의 덕분에 큰 도움을 받았습니다^^선생님 강의덕분에 직접 개발하면서 웹의 전반적인 구조를 이해하고 모의해킹을 수행하고 조치가이드를 마련하는데 큰 도움이 되었습니다^^! 그후에도 여러 백엔드언어(php, asp) 및 was(tomcat, apache) 등 여러 언어를 공부하는중인데.. 상당히 방대하더라구요..ㅠㅠ그래서 국내에 많이 쓰이는 백엔드 언어 및 웹서버, was서버를 기준으로 공부하고자 문의드리게 되었습니다! 문의사항1: 국내에서 많이 쓰이는 웹서버(apache, nginx..등등), was서버(jeus, tomcat..등등)가 궁금합니다^^!문의사항2 : 국내에서 많이 쓰이는 대표적인 백엔드 언어(PHP, ASP, JSP, spring(JSPx)...등등)가 궁금합니다^^!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
@Test update, delete 메서드 문의
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 강의 잘 듣고 있습니다. 테스트 코드 update와 delete 메서드를 실행해도 변화가 없어서 검색을 해보니 .retrieve() 뒤에 .toBodilessEntity()를 추가하니 정상적으로 작동됩니다. 강의와 다르게 .toBodilessEntity() 메서드를 추가해야지 작동하여서 이에 대해 어떤 차이가 있는 궁금합니다.
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
Windows에서의 업로드 후 홈화면 상품이미지 오류 해결방법
공익을 위해 첨부합니다... Windows의 경우 Mac과 다른 방식으로 경로가 설정되는 탓인지 상품 업로드 후 홈화면에서 상품이미지가 엑박으로 보이는 오류가 발생합니다. 그동안 질문&답변 게시판에 올라온 모든 질문 및 답변을 참고해 해결을 해보고자 하였는데요, 그 어느 답변을 참고해도 해결이 되지 않아 눈물을 머금고 10분짜리 강의에 몇시간동안 매달려있었습니다. 그렇게 알게된 방법은... 저의 경우(1) 상품 업로드 화면에서 사진을 첨부한 후 개발자 도구의 Network에서 첨부한 사진의 링크를 보면 http://localhost:8080/upload/(상품이름).jpg이런 식으로 뜹니다.(2) 업로드 버튼을 누른 후 홈 화면으로 이동(3) 개발자 도구의 Network에서 새롭게 업로드된 사진의 링크를 보면 http://localhost:3000/upload/(상품이름).jpg 이런 식으로 뜹니다. 이를 해결하기 위해, grab-market-web 폴더 (사용자에 따라 폴더 이름은 다를 수 있음) → src → main → index.js에서 product-card 의 product-img 부분을 확인합니다.<div> <img className="product-img" src={`${API_URL}/${product.imageUrl}`} ></img> </div>src 링크를 다음과 같이 변경합니다. 그럼 상품 업로드 화면에서의 이미지와 홈화면에서의 이미지가 localhost:8080로 동일해지기 때문에 상품 사진이 정상적으로 보입니다. 물론 이렇게 코드를 수정하고 나면 기존에 저장해놨던 상품들의 이미지에 엑박이 뜹니다. (images/products/__ 이런 식으로 폴더 내 이미지와 연결해둔 링크들이 http://localhost:8080/images/products/__ 처럼 변경되니 엑박이 뜨는 것으로 추정됩니다.)어차피 이제 사진을 서버에 직접 업로드하는 방법으로 진행될 예정이니 그냥 기존의 상품들은 삭제하시면 될 것 같습니다. (DB Browser → 데이터 탐색 → 기존 상품 레코드 선택 → 현재 레코드 삭제하기 → 변경사항 저장하기 이용하면 삭제 가능합니다.) 저와 동일한 이유로 엑박 뜨는게 아니라면... 저도 모르겠습니다. 방법을 찾으시면 공유해주세요. 파이팅! +)상품 상세페이지를 들어가면 다시 엑박이 뜹니다.<div id="image-box"> <img src={`${API_URL}/${product.imageUrl}`} /> {console.log(product.imageUrl)} </div>이때는 product 폴더의 index.js에 들어가여 image-box 부분을 다음과 같이 변경해주세요. 원리는 위와 동일합니다. 그러면 상세페이지에서도 정상적으로 작동합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요 인증/ 인가에 대해서 질문 있습니다.
안녕하세요 강의 잘 듣고 있습니다.MSA 환경에서 SPRING CLOUD GATEWAY를 사용할때 예를들어 유저 서비스에서 JWT 서비스(생성, 검증)를 구성하고 SPRING CLOUD GATEWAY feign client로 통신하고 토큰을 검증하고 각 모듈로 헤더를 통해서 userId, role을 전달할때 api별 권한을 관리를 어떻게 하는지는 궁금합니다.스프링 클라우드 게이트웨이에 SecurityConfig에서 모든 모듈에 대한 url에 권한을 설정하기에는 너무 많은 api별 권한을 적어야놔야 할것같아서 이게 맞나 싶습니다혹시 각 모듈마다 ApiGatewayAuthenticationFilter를 만들어서 헤더 값을 통해서 아래 코드와 같이 SecurityContextHolder를 주입시켜서 각 모듈에 대한 SecurityConfig에서 권한을 관리 하거나 @PreAuthorize를 통하여 관리하거나 실무에서는 어떤 방법을 쓰는지 궁금합니다!!!List<SimpleGrantedAuthority> authorities = Collections.singletonList(new SimpleGrantedAuthority(formattedRole));UsernamePasswordAuthenticationToken authentication =new UsernamePasswordAuthenticationToken(userId, null, authorities);SecurityContextHolder.getContext().setAuthentication(authentication);더 좋은 방법이 있다면 알고 싶습니다!!
-
해결됨[입문] 인디해커를 위한 루비온레일즈 8 입문 강의
Formatter 설정도 궁금합니다.
RuboCop과 같은 Formatter 설정도 부록으로 넣어주실 수 있으신가요!?
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
오류..
이 오류 어떻게 해결할 수 있을까요 ㅠㅠ
-
미해결배달앱 클론코딩 [with React Native]
jdk11 버전과 gradle 버전의 호환성 관련 질문드립니다.
안녕하세요?강의관련 환경 설정 중 막힌 부분이 있어서 질문드립니다. 현재 환경 설정은 rn75 폴더에서 시작하여openJDK 11안드로이드 13.0 티라미수 (api 33) 넥서스5 안드로이드 13.0 티라미수 (api 33) x86_44gradle 버전 7.2 위에 3번 환경설정까지 셋팅 후 npm run android를 실행하면 첨부드림과 같이 최신 gradle(8.x) 버전에서는 Java 17을 사용해야 한다고 하여 jdk 11버전을 공식 지원한다고 찾아본 7.x버전으로 낮추어 다시 명령어를 입력해보았지만 동일한 상황입니다.혹시 제가 누락한 부분이 있을지 궁금합니다...!
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
서버 스펙과 비용에 관하여
안녕하세요.서버 스펙과 비용 이미지에서 s3비용이 2.19불 밖에 들어가지 않은걸 봤는데요. 제 생각으로는 어플리케이션을 위해 logo이미지정도를 호출(?)유저들이 파일을 업로드하거나 다운로드 받는 기능은 없을거 같습니다.local storage에 application의 파일들이 저장되어있는거같습니다.앱 1개당 1달러씩 꾸준히 벌어보자라는 생각을 가지고 접근을 했을떄, s3 비용이 걸림돌이 되어 빼야하는 기능이었는지 궁금합니다. 추가적으로 local DB도 셋업을 하시는것 같은데 이것또한 서버에서 데이터를 불러와 api 호출로 셋업을 하시는건가요?
-
해결됨실전! FastAPI 활용(비동기)
비동기 서버 구성하다 알 수 없는 에러에 빠졌는데...
안녕하세요. 좋은 강의 감사합니다.강의를 기반으로 제 방식대로 서버를 구성하다가 알 수 없는 에러에 빠졌습니다.서버는 정상 구동은 되고, postman으로 root url인 localhost:8000/ 에 request를 날리면 정상적으로 결과값을 반환 받는데localhost:8000/api/recommend?userId=1 만 호출하면 바로 에러메세지 없이 500만 응답으로 받고 있습니다.print(1) 도 서버 로그에 찍히지 않고 서버 로그는 아예 나오질 않네요.localhost:8000/ 에서도 동일하게 서버 로그는 찍히지 않습니다우선 의도는 BaseRepository 클래스를 만들어서 find_by_id 같은 중복 코드를 하나로 관리해보려고 했습니다.의존성 주입 부분은 지피티의 도움을 받아서 위치를 조정했습니다.도저히 어디서 문제가 난건지 알 수 없어서 도움 요청 드립니다 ㅜㅜ# main.py from typing import Dict from dotenv import load_dotenv from fastapi import FastAPI from src.app.app import create_app load_dotenv() app: FastAPI = create_app() @app.get("/") async def health_check_handler() -> Dict[str, str]: return {"statusMsg": "good"} # app.py from contextlib import asynccontextmanager from typing import AsyncGenerator import anyio from fastapi import FastAPI from src.app.endpoints.recommend import router @asynccontextmanager async def lifespan(app: FastAPI) -> AsyncGenerator: limiter = anyio.to_thread.current_default_thread_limiter() limiter.total_tokens = 200 yield def create_app() -> FastAPI: app = FastAPI(lifespan=lifespan) app.include_router(router, prefix="/api") # 다른 설정들(예: 미들웨어, 이벤트 핸들러 등)을 추가할 수 있습니다. return app# connection.py import os import urllib from typing import AsyncGenerator from dotenv import load_dotenv from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker, create_async_engine load_dotenv() DB_USERNAME: str = os.getenv("DB_USERNAME", "root") DB_PASSWORD: str = os.getenv("DB_PASSWORD", "root") DB_HOST: str = os.getenv("DB_HOST", "127.0.0.1") DB_NAME: str = os.getenv("DB_NAME", "") DB_PORT: str = os.getenv("DB_PORT", "3306") DB_ECHO: bool = os.getenv("DB_ECHO", "true").lower() == "true" if not DB_NAME: raise ValueError("DB_NAME 환경변수가 설정되지 않았습니다.") # 비밀번호 특수문자 허용 encoded_password = urllib.parse.quote_plus(DB_PASSWORD) DATABASE_URL: str = f"mysql+asyncmy://{DB_USERNAME}:{encoded_password}@{DB_HOST}:{DB_PORT}/{DB_NAME}" engine: AsyncEngine = create_async_engine( DATABASE_URL, echo=DB_ECHO, pool_size=10, max_overflow=0, pool_timeout=30, # second pool_recycle=60, # second pool_pre_ping=True, ) SessionFactory = async_sessionmaker(autocommit=False, autoflush=False, bind=engine) async def get_db() -> AsyncGenerator[AsyncSession, None]: session = SessionFactory() try: yield session finally: await session.close()# user_route.py from typing import Dict from fastapi import APIRouter, Depends, status from src.app.dependency.query_param_denpendency import snake_case_query from src.core.common_type import V from src.core.exception.not_found_exceptions import UserNotFoundExceiption from src.db.connection import get_db from src.entity.user import UserEntity from src.repository.user import UserRepository, get_user_repository from src.dto.response.user_response import UserResponse router = APIRouter(prefix="/recommend") @router.get(path="", status_code=status.HTTP_200_OK, response_model=UserResponse) async def get_recommend_schedule( params: Dict[str, V]=Depends(snake_case_query), user_repo: UserRepository=Depends(get_user_repository) ): print(1) user_id: int = int(params.get("user_id", None)) user: UserEntity | None = await user_repo.get_user_by_id(user_id) if not user: raise UserNotFoundExceiption() user = UserResponse.model_validate(user) return user# base_repository.py from typing import Type from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from src.core.common_type import E class BaseRepository: def __init__(self, db: AsyncSession): self.db = db async def get_entity_by_id(self, model: Type[E], entity_id: int) -> E | None: print(2) entity: E | None = await self.db.execute(select(model).where(model.id==entity_id)) return entity.scalars().first() # user_repo.py from fastapi import Depends from sqlalchemy.ext.asyncio import AsyncSession from src.db.connection import get_db from src.entity.user import UserEntity from src.repository.base_repository import BaseRepository def get_user_repository(db: AsyncSession = Depends(get_db)) -> "UserRepository": return UserRepository(db) class UserRepository(BaseRepository): async def get_user_by_id(self, user_id: int) -> UserEntity | None: print(3) return await self.get_entity_by_id(UserEntity, user_id) # user_response.py from datetime import datetime from typing import Optional from pydantic import BaseModel class UserResponse(BaseModel): id: int name: str nickname: str email: str phone: str join_date: datetime updated_at: Optional[datetime] = None deleted_at: Optional[datetime] = None class Config: from_attributes = True 도대체 어디서 문제가 생긴걸까요...
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
광고 유지 기간
안녕하세요 좀비님. 먼저 좋은 강의 출시해 주셔서 감사합니다. 강의 잘 보고 있습니다.강의와 커뮤니티 질문들을 보다가 궁금한 부분이 생겨서 질문 남기게 됐습니다. 광고를 몇 개월동안 지속해도 적자라면 방치하는 수순을 밟는다는 커뮤니티 답변을 봤습니다. 그러면 반대로 목표했던 수익률을 달성하는 경우는 언제까지 광고를 유지하시나요? 예를 들어 하루 10달러가 목표였는데 개발과 광고를 열심히 해서 목표 수익에 달성했습니다. 그럼 달성한 시점에 광고는 정리하시나요? 아니면 광고 비용을 줄인다던가 잘 되고 있으니 광고비를 더 늘린다던가 같은 다른 전략을 취하시나요? 만약 목표를 달성해도 광고를 계속 유지하는 방향이라면 지출되는 광고비는 앱 개수에 비례해서 계속 커지는 건가요?
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
버튼 컴포넌트에서 불린프로퍼티 아이콘이 안 보입니다.
버튼 컴포넌트에서 불린 프로퍼티를 넣으려고 하는데요, appearance에서 눈 옆에 육각형 아이콘이 안 보입니다. 안 보이는 이유가 뭘까요?
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
컴포넌트 파일에 파운데이션 라이브러리가 연결이 안됩니다!
말씀해주신대로, 파운데이션 파일에서 라이브러리 publish 한 후, 컴포넌트 파일에서 add to file을 했는데 베리어블과 local style에 파운데이션이 뜨지 않습니다!제가 어떤 부분을 누락한 걸까요?
-
해결됨하루 100만 원을 벌게해준 프리랜서 노하우 완벽 정리
초기 컨설팅 비용관련
안녕하세요. 계약전 문의가 많이 오는데, 그 과정에서 가지고 기술이라던지, 향후 플랜등을 논의하는 시간이 꽤 길어집니다. 물론 계약이 될 때도 있는데, 계약이 안되는 경우.. 몇일의 시간이 소요되는데, 이런 경우는 없으셨을까요?처음 상담때부터 비용을 받는것도 어려울 것 같고.. 어느정도까지 같이 논의를 해야할지 끊지를 못하겠네요...
-
해결됨Godot Engine 으로 시작하는 첫 게임 개발
점수표시에 캔바스레이어 없어도 잘되던데
그냥 자식노드로 점수표시화면.tscn 인스턴스로 불러와추가만해도 상단에 표시 잘되고 작동도 잘되던데요. 캔바스레이어를 만들고 하위로 넣는 이유가 있을까요?중요한거면 알려주세요.
-
해결됨김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
데이터베이스를 깊게 배우기 위한 책 추천을 받을 수 있을까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)[질문 내용]안녕하세요, 영한님. 해당 강의 후반부에서 데이터베이스를 깊게 학습하는 것이 좋다고 하셨는데 혹시 이를 위한 책을 추천해주실 수 있을까 해서 글을 남겨봅니다. 제 지식 수준기본적으로 학부에서 오라클을 기반으로 한 데이터베이스 수업을 들어서 설계, SQL 프로그래밍, 인덱스 설계(이론만), locking(이론만) 등에 대해서는 알고 있는 상태입니다. 찾아봤던 책 목록(원서) Elmasri Navathe 저자의 Fundametals of DATABASE SYSTEMS(국내도서) Real MySQL 제가 조금 찾아보면서 정리한 리스트는 위 두 개의 책입니다. 위의 책 중 마음에 드는 책 아무거나 잡아서 학습할지, 또는 영한님이 따로 추천해주실 만한 책이나 학습처가 있는지 의견을 얻을 수 있을까 싶어 글 남깁니다.
-
미해결FastAPI 완벽 가이드
머신러닝 백엔드 강좌 언제나오나요?
머신러닝 강좌는 언제 오픈하나요? 빨리듣고 싶습니다. ㅎㅎ 일 때문에 빨리 듣고싶은데 프리뷰 필요하시면 연락부탁드립니다.
-
미해결
코딩 문외한 질문
코딩 아무것도 모르는 초보자입니다 chatgpt로 해당 색깔을 넣으면 색깔에 범위를 정해주는 코딩을 하고 있는데 def is_within_range(test_color, lower, upper): return all(lower[i] <= test_color[i] <= upper[i] for i in range(3)) color_ranges = { "Nuga": ((200, 120, 50), (220, 160, 100)), "Light green": ((0, 140, 0), (50, 180, 60)), "Medium blue": ((40, 110, 180), (60, 150, 210)), "Apple green": ((100, 180, 0), (140, 220, 50)), "Dark brown": ((30, 20, 10), (70, 50, 40)), "Dark Azur": ((0, 0, 200), (20, 50, 255)), "Lavender": ((180, 150, 200), (220, 200, 240)), "White": ((240, 240, 240), (255, 255, 255)), "Black": ((0, 0, 0), (30, 30, 30)), "Dark Gray": ((50, 50, 50), (100, 100, 100)), "Light Gray": ((140, 140, 140), (180, 180, 180)), "Red": ((180, 20, 20), (210, 60, 60)), "Yellow": ((240, 180, 20), (255, 220, 60)), "Blue": ((10, 100, 180), (30, 140, 220)), "Green": ((20, 100, 30), (50, 160, 70)), "Orange": ((200, 80, 0), (240, 120, 50)), "Tan": ((150, 130, 100), (190, 180, 140)), "Purple": ((60, 20, 100), (100, 60, 160)), "Brown": ((150, 90, 60), (190, 120, 100)), "Dark Red": ((160, 40, 60), (190, 80, 100)), "Earth blue": ((10, 40, 70), (30, 70, 120)), "Sky Blue": ((50, 140, 180), (80, 180, 220)), "Pink": ((200, 150, 200), (220, 180, 240)), "Bright teal": ((0, 120, 120), (30, 160, 160)), "Sand blue": ((80, 120, 150), (110, 160, 190)), "Earth green": ((0, 50, 10), (20, 90, 50)), "Watermelon red": ((230, 80, 70), (255, 130, 120)), "Aqua": ((170, 220, 200), (190, 240, 220)), "Skin White": ((220, 200, 150), (240, 220, 190)),} test_color = (0, 410, 0) matched_color = Nonefor color_name, (lower, upper) in color_ranges.items():if is_within_range(test_color, lower, upper): matched_color = color_namebreak if matched_color: print(f"The color {test_color} belongs to '{matched_color}' range.")else: print(f"The color {test_color} does not match any predefined range.") 이렇게 chatgpt가 하라고 해서 넣었습니다. 근데 자꾸 File "<python-input-632>", line 3 else: ^^^^SyntaxError: invalid syntax 오류가 뜨면서 실행이 안됩니다. 혹시 무엇이 잘못이고 고쳐야하는지 알려주실 분들 있나요?NFT 발행하기
-
미해결Next + React Query로 SNS 서비스 만들기
useEffect의 의존성 배열에 fetchNextPage를 넣는 이유가 궁금합니다
useEffect(() => { if (inView) { hasNextPage &&fetchNextPage(); } }, [inView, hasNextPage, fetchNextPage]);이렇게 useEffect를 작성하셨는데 fetchNextPage를 useEffect의 의존성배열에 넣는 이유가 궁금합니다
-
해결됨(2025) MBTI 테스트 기반 수익형 웹사이트 만들기 - <코딩 배워 사업하자>
호스팅 업체를 결국 AWS 로 정해야 하는 이유가 궁금합니다.
강의를 잘 보고 있습니다.클라우드 플레어가 상당한 장점이 있는 호스팅 업체로 보이는데요, 그럼에도 불구하고 실무에서는 결국 AWS를 선택하는 이유를 아래의 3가지로 정리하면 될까요?커스터마이징 제한느린 성능벤더 종속성이 외에 클라우드플레어에서 AWS로 이전할 수 밖에 없었던 에피소드가 있으신지 여쭤보고 싶습니다.