묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
데이터 로드 관련 질문
안녕하세요! 강의 잘 듣고 있습니다.13. 데이터 테이블 관리 시스템 부분을 듣다가 몇 가지 의문점이 있어 질문 드립니다. CSV Reader가 List<Dictionary<string, object>>를 반환하고 있고, 이를 로드 함수에서 실제 데이터로 형변환해 사용하고 있습니다. 그런데 object 타입을 값 타입으로 변환하면 언박싱이 발생해서성능에 좋지 않다고 알고 있습니다. 통일성을 위해서 object 타입으로 쓰신 건지, 로드 과정이 Awake에서 한 번에 일어나기 때문에 괜찮은지 궁금합니다. 그리고 object 대신 string을 반환하는건 어떤지도 여쭤보고 싶습니다. 챕터 데이터를 검색할 때 리스트에서 순회를 하는데 딕셔너리 같은 별도의 자료 구조에 저장하지 않은 이유가 궁금합니다. 감사합니다.
-
미해결윈도우 악성코드(malware) 분석 입문 과정
FLARE VM을 관련 질문
영상 강의 제목처럼 FLARE VM을 설치하기 위하여 강의 순서대로 개발자용 windown10 이미지를 다운받을려고 하였으나, 현재는 해당 다운로드 페이지가 막힌것 같은데, 일반 win10 이미지를 다운받아야하나요? 아님 다른 방법이 있나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K. 팰린드롬 정답 코드 관련 질문
안녕하세요 선생님다름 아니라 설명하신 문제 정답 코드에 대해 질문이 있습니다.선생님 정답 코드에는 아래 두 줄 코드가 아래처럼 되어 있는데 순서를 이렇게 하신 특별한 이유가 있을까요?제가 생각해보기에는 두 줄의 위치를 바꾸는 것이굳이 팰린드롬을 만들 수 없는데 mid가 존재하는 경우에 ret.insert(~~)구문을 실행할 필요가 없어 더 좋아보여 여쭤봅니다.~~if(mid) ret.insert(ret.begin() + ret.size()/2, mid); if(flag == 2) cout << "I'm sorry Hansoo\n";
-
미해결
코딩 레슨 “코드스케이프” 모집
🌟 코딩을 탐험하는 CodeScape(코드스케이프) 🌟 안녕하세요 코드스케이프 스터디입니다! 2학기를 맞이해서 1학기에 이어 새학기 C언어, JAVA 4주 마스터 스터디와 응용 심화 스터디를 준비하고 있습니다! 중간고사 기간 전에 빠르게 기본기 점검, 마스터하고 싶은 분들 모집합니다! 자세한 커리큘럼은 노션 통해서 확인 해주세요~! 📖 <프로그램 및 커리큘럼 소개>https://polar-zydeco-01f.notion.site/CodeScape-17eab7600a9d805bb0a2e0b474d895a8?pvs=4 📝모집기간 및 대상 📍모집 기간 : 09.01 (월) ~ 09.21 (일)📍진행 기간 : 4~5주차 커리큘럼으로 준비중 (클래스마다 조금씩 상이할 수 있음.)📍모집대상 ✅ 서울권 대학생(휴학생도 환영)✅ 서울 거주자 전공자 & 비전공자 상관 없음!✅ 새학기 시작하고 C Langauge 혹은 Java 개념 4주안에 기본기 쌓고 싶은 분!✅ C Langauge 혹은 JAVA 주력언어로 희망하는 개발자 지망생! (심화반은 사이드 프로젝트 진행예정.)✅ 6주차 커리큘럼으로 준비중 (스터디마다 조금씩 상이할 수 있음.) ✉ <신청 및 문의>📤신청링크: https://forms.gle/Nwzj5mqPVDxHAvLr9📤문의링크: 김지석 010-2973-4106
-
미해결Verilog ZYNQ Program 1 (Zynq mini 7020)
Zybo z7에서 실습을 진행할 수 있나요?
만약 할 수 없다면 돌아가게 하려면 어떤 작업을 해야하나요?
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
showAlert 변수 mvi 패턴에서의 사용법
안녕하세요 애구마님!앱 클라이언트 개발 시, 보통 showAlert 같은 UI 동작을 제어하는 변수는 화면(Screen)에서 직접 관리하는 경우가 많다고 들었어요!그런데 만약 진행 할 프로젝트에 MVI 패턴을 적용한다면, 이 showAlert 같은 UI 상태들은 별도의 상태(State) 클래스에서 관리하는 게 맞을까요?즉, MVI 패턴에서는 showAlert를 포함한 모든 UI 상태를 상태 클래스(State)로 중앙 집중 관리하고, 사용자 동작은 Intent로 받아서 상태를 변경하는 방식으로 관리하면 되는 건지 궁금합니다.이 부분에 대해 조언 해주시면 정말 감사드리겠습니다!
-
미해결업무가 100배 빨라지는 엑셀 데이터 활용과 분석 노하우
22강 진금대상자
수료인원,미수료인원은 countifs 조건2개인데진급대상자는 1개인이유가진급대상자 시트자체가 진급한사람만 모아뒀기때문인가요?뭔가 c5셀의경우 근무부서가 개발실이면서 진급한사람 해서 조건이2개같아서요
-
미해결
[Next Step] 코딩 스터디 맨티 모집
[Next Step] 코딩 스터디 맨티 모집👉 혼자가 아닌, 함께 성장하는 코딩의 첫걸음! 안녕하세요 🙌코딩에 관심은 있는데…✔ 어디서부터 시작해야 할지 막막하거나✔ 혼자 공부하다가 금방 동기부여가 떨어지거나✔ 실제로 활용할 경험이 부족해 고민한 적 있으신가요?「Next Step」은 그런 고민을 가진 분들을 위해 만들어진 비전공자·초보자 친화형 코딩 스터디입니다.처음부터 차근차근 배우면서, 함께 성장하고 기록을 남기는 과정을 경험할 수 있어요 🚀👨🏻🏫운영자 소개• ㅇㅅ대학교 컴퓨터공학과 졸업• IT 연구원 인턴 경험• 현) 대학생·비전공자 대상 코딩 스터디/멘토링 다수 진행 💡 운영자의 포부저도 혼자 공부할 때는 늘 벽에 부딪히곤 했습니다.하지만 남을 가르치며 더 깊이 배우고, 함께 공부하면서 서로의 성장을 지켜볼 때 큰 동기부여가 되더라고요.「Next Step」은 저 혼자만의 성장이 아니라, 함께 배우고 익히며 나아가는 과정 그 자체를 소중히 생각하는 스터디입니다. ✅ 스터디 방식• 주 1회 정규 스터디(오프라인: 신촌, 홍대, 서울대입구 / 온라인: 디스코드)• 진행 구조: - 개념 학습 (코딩 기초 설명) - 실습 & 문제 풀이 (직접 따라하면서 이해) - 미니 프로젝트 or 코드 리뷰 (작은 결과물 만들기)• 실제 협업 경험: 깃허브 기록, 코드리뷰, 팀 프로젝트 📚 커리큘럼 (예시)1⃣ 1개월차: - 자바/자바스크립트/파이썬 기초 (변수, 조건문, 반복문 등) - 생활 속 문제를 코드로 풀어보기2⃣ 2개월차: - 간단한 데이터 다루기 (텍스트/숫자 정리하기) - 미니 웹페이지 or 간단한 자동화 프로그램 만들기3⃣ 3개월차: - 팀 프로젝트 (주제 정해서 결과물 만들고 발표하기) - 협업 도구 익히기 (깃허브, 코드리뷰 경험)* 비전공자도 따라올 수 있도록 쉬운 단계부터 진행하며, 세부 커리큘럼은 참여자 수준과 의견에 맞게 조정됩니다! 📍 모집 정보• 모집 마감: ~ 9월 30일(화)• 모집 대상: 대학생 / 휴학생 / 취준생 / 직장인(👉 코딩 처음 시작하는 분도 환영!)• 활동 기간: 2025년 10월 ~ 12월 (3개월)• 모집 인원: 10명 내외• 참가비: 없음 (스터디룸/카페 이용 시 1/N)• 준비물: 노트북 필수• 학습언어 : Java, JavaScirpt, Python 📝 신청하기👉 https://forms.gle/wZNpDxnMyM5tqjbw8 ⚠ 스터디 맛보기https://treealgorithm.notion.site/2025-Code-Study-2613eb454ce980d5bdb2ce4b9ed042a1
-
미해결[4주 과정] <클로드 코드> 완독 챌린지 : 매일 1시간씩 4주 동안 클로드 코드 도서 완독하기!
뭘 해야지 오늘 미션완료가 뜯는건가요?
설문진행, 도서등록, 37페이지까지 결제하고 완료 했습니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
마이그레이션 오류입니다.
강의에서 강사님께서 11에서 17로 바꾸라는 모든 설정 확실하게 수정 완료했고 gradle 코드 수정하여 실행하니 A problem occurred configuring root project 'library-app'.> java.util.concurrent.ExecutionException: org.gradle.api.GradleException: Failed to create Jar file C:\Users\seong\.gradle\caches\jars-9\3baa90cc2341a9ffd1656b87b2a3526e\spring-core-6.2.11.jar.아래와 같은 jar 파일 오류가 떴습니다. 구글링과 GPT를 써보니 캐시 파일 버전 충돌 오류라고 하여 캐시 파일을 삭제 하려고 해도 디렉터리가 비어있지 않다는 오류가 뜨며 삭제되지 않고, 또 .\gradlew wrapper 버전이 현재 7.5인데 스프링 부트 3.5.6은 최소 8.x를 사용한다고 하여 이것 또한 업그레이드 하려고 하였으나 PS C:\Project\Study-SpringBoot\library-app> .\gradlew wrapper --gradle-version 8.3 --distribution-type allStarting a Gradle Daemon, 5 stopped Daemons could not be reused, use --status for detailsFAILURE: Build failed with an exception.* What went wrong:A problem occurred configuring root project 'library-app'.> java.util.concurrent.ExecutionException: org.gradle.api.GradleException: Failed to create Jar file C:\Users\seong\.gradle\caches\jars-9\3baa90cc2341a9ffd1656b87b2a3526e\spring-core-6.2.11.jar.동일한 이런 jar 파일 오류가 떴습니다.이 오류를 어떻게 해결해야 할까요 .... 도와주세요 ㅜㅜ
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
Router 궁금증
<BrowserRouter> <Routes> <Route path="home" element={<AdminHome />} /> <Route path="post" element={<AdminPost />} /> <Route path="update/:id" element={<AdminUpdate />} /> </Route> </BrowserRouter>Q1. 저는 항상 app.js 위에 코드와 같이 작성하는 편인데 강의에서는 주로 CreateBrowserRouter를 따로 이용하시는데 특별한 이유가 있나요?Q2. 간혹 프로젝트 중간중간 Header나 Footer 컴포넌트를 몇몇 페이지에서는 안보이거나 다른 header, footer 컴포넌트가 보이게끔 하고 싶은데 이런 경우 주로 어떻게 하실지 생각(?) 아이디어(?) 가 궁금합니다. 저는 안보이게 하고 싶은 페이지를 url로 구분하는 편인데 다른 좋은 방법이 있을까요?
-
미해결[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
베리어블을 등록했는데 토큰으로 잡히지않아요
베리어블을 등록해서 개발할려고하는데 플러그인으로 해도 등록한 토큰들이 잡히지 않아요.. 뭐가 문제일까요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
제본
제본을하려고 합니다!총 매수가 어느정도 나오나요??
-
미해결[4주 과정] <클로드 코드> 완독 챌린지 : 매일 1시간씩 4주 동안 클로드 코드 도서 완독하기!
26페이지 1번 부터 질문 하게 되네요 ㅠ.ㅠ
윈도우 파워셀을 관리자 권한으로 실행하니까 다음 화면이 뜹니다.
-
미해결직장인 생존 엑셀 - 8개의 실무 프로젝트로 엑셀 마스터하기
기능 범위 지정 시 헷깔리는분
임의데이터 선택ctrl+A 전체선택머릿글포함 선택머릿글빼고선택 케이스마다 다른데 쉽게 외우는법이나 기준이있나요?
-
미해결직장인 생존 엑셀 - 8개의 실무 프로젝트로 엑셀 마스터하기
9강 양수 음수혼합차트
폭포차트로 구현이가능한가요?
-
미해결[VLM101] 파인튜닝으로 멀티모달 챗봇 만들기 (feat.MCP)
좋은 강의 감사합니다. 궁금한게 있어 질의 드립니다.
# 모델을 로드하는 코드 model_id = "/work/checkpoints/hf/Qwen2.5-VL-3B-Instruct" # 사용할 모델 경로 지정 model_org = Qwen2_5_VLForConditionalGeneration.from_pretrained( model_id, # 모델 경로로부터 모델 불러오기 device_map="auto", # 자동으로 장치 설정 (예: GPU 사용) torch_dtype=torch.bfloat16, # 모델의 데이터 타입을 bfloat16으로 설정 (메모리 최적화) ) processor = AutoProcessor.from_pretrained(model_id) # 모델에 맞는 processor 불러오기 ==> 질문 사항 (2개) 질문1) 위 코드에 동일한 모델을 model_org 와 processor 로 정의한 거 같은데 왜 이렇게 정의한 이유는 무엇인가요? 질문2) datacollator 는 모델마다 정의하는 방법이 다른 거 같은데 현재 샘플로 주신 모델은 어디를 참고해야 하나요?
-
해결됨수익형 AI Agent n8n 전문가 강의, 블로그·쇼츠 자동화
18강에서 Blog-Image-Maker 연결시에 에러가 납니다.
JSON parameter needs to be valid JSON위와 같은 에러가 발생하여 이미지 생성에 실패합니다. JSON 내용은 아래와 같습니다.{ "image_prompt": "A clear and inviting workspace showing a modern laptop displaying a simple Python code editor with 'print(\"Hello, Python!\")' and a friendly terminal window ready for input. Bright, high-definition, realistic style.", "image_alt": "파이썬 첫 코드 실행 환경을 보여주는 현대적인 노트북 작업 공간" }Blog-Image-Maker에서 같은 image_prompt로 실행시에는 문제 없이 진행되고 있습니다.
-
미해결스프링 시큐리티 OAuth2
JWT 조회 에 대한 질문
안녕하십니까. 스프링 시큐리티 강의를 듣고 있는 대학생입니다. 현재 강의를 들으면서 팀 프로젝트에 소셜 로그인을 적용하던 중 궁금증이 생겨 글을 작성하게 되었습니다. 현재 사용자가 로그인 후 토큰을 발급받고 MySQL에 리프레시 토큰을 저장한 뒤에, 사용자가 API에 접근할 때마다 매번 사용자 정보를 조회하는 것이 좋은 방법인지 궁금합니다. 현재 매번 조회하는 이유는 토큰의 사용자 정보가 서버 데이터베이스에 올바르게 저장된 사용자인지 검증하기 위해서 이 방식을 채택했습니다 package backend_lingua.linguas.infrastructure.security.filter; import backend_lingua.linguas.infrastructure.security.token.enumerated.TokenType; import io.jsonwebtoken.ExpiredJwtException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; @Slf4j @Component @RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtTokenProvider jwtTokenProvider; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = getBearerToken(request); // 토큰이 있는 경우에만 검증 if (StringUtils.hasText(token)) { try { if (jwtTokenProvider.validateAccessToken(token)) { Authentication authentication = jwtTokenProvider.getAuthentication(token, TokenType.ACCESS_TOKEN); SecurityContextHolder.getContext().setAuthentication(authentication); log.debug("Security Context에 '{}' 인증 정보를 저장했습니다.", authentication.getName()); } } catch (ExpiredJwtException e) { log.error("토큰 인증 실패: {}", e.getMessage()); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authentication failed"); return; } } filterChain.doFilter(request, response); } private String getBearerToken(HttpServletRequest request) { String bearerToken = request.getHeader("Authorization"); if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { return bearerToken.substring(7); } return null; } } public TokenInfo generateToken(Authentication authentication) { String accessToken = createAccessToken(authentication); String refreshToken = createRefreshToken(authentication); Date accessTokenExpiryDate = createExpiryDate(accessTokenExpiration); return TokenInfo.from(accessToken, refreshToken, accessTokenExpiryDate.getTime(), refreshTokenExpiration); } public String createAccessToken(Authentication authentication) { return createToken(authentication, accessTokenExpiration, accessTokenSecret); } public String createRefreshToken(Authentication authentication) { String token = createToken(authentication, refreshTokenExpiration, refreshTokenSecret); Date expiryDate = createExpiryDate(refreshTokenExpiration); // DB에 리프레시 토큰 저장 tokenService.createRefreshToken(token, expiryDate, authentication); return token; } private String createToken(Authentication authentication, long expirationTime, String secretKey) { String authorities = authentication.getAuthorities() .stream() .map(GrantedAuthority::getAuthority) .collect(Collectors.joining(",")); return Jwts.builder() .setSubject(authentication.getName()) // email .claim("auth", authorities) .setIssuedAt(new Date()) .setExpiration(createExpiryDate(expirationTime)) .signWith(createKey(secretKey)) .compact(); } public String getUsernameFromToken(String token, TokenType tokenType) { String secretKey = (tokenType == TokenType.ACCESS_TOKEN) ? accessTokenSecret : refreshTokenSecret; return Jwts.parserBuilder() .setSigningKey(createKey(secretKey)) .build() .parseClaimsJws(token) .getBody() .getSubject(); } public Authentication getAuthentication(String token, TokenType tokenType) { String username = getUsernameFromToken(token, tokenType); UserPrincipal userPrincipal = (UserPrincipal) userDetailsService.loadUserByUsername(username); return new UsernamePasswordAuthenticationToken( userPrincipal, token, userPrincipal.getAuthorities() ); } public boolean validateAccessToken(String token) { return validateToken(token, accessTokenSecret); } public boolean validateRefreshToken(String token) { return validateToken(token, refreshTokenSecret); } private boolean validateToken(String token, String secretKey) { try { Jwts.parserBuilder() .setSigningKey(createKey(secretKey)) .build() .parseClaimsJws(token); return true; } catch (ExpiredJwtException e) { log.error("만료된 JWT 토큰입니다."); throw e; // Filter에서 401 처리하도록 } catch (SecurityException | MalformedJwtException e) { log.error("잘못된 JWT 서명입니다."); } catch (UnsupportedJwtException e) { log.error("지원되지 않는 JWT 토큰입니다."); } catch (IllegalArgumentException e) { log.error("JWT 토큰이 잘못되었습니다."); } return false; } private Date createExpiryDate(long expirationTime) { return new Date(System.currentTimeMillis() + expirationTime); } private SecretKey createKey(String secret) { byte[] keyBytes = Decoders.BASE64.decode(secret); return Keys.hmacShaKeyFor(keyBytes); } @Service @RequiredArgsConstructor public class UserDetailsServiceImpl implements UserDetailsService { private final MemberRepository memberRepository; @Override @Transactional(readOnly = true) public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { Member member = memberRepository.findByEmail(email) .orElseThrow(() -> new UsernameNotFoundException("사용자를 찾을 수 없습니다: " + email)); return UserPrincipal.create(member); } }public class TokenServiceImpl implements TokenService { private final RefreshTokenRepository refreshTokenRepository; private final MemberRepository memberRepository; @Override @Transactional public RefreshToken createRefreshToken(String token, Date expiryDate, Authentication authentication) { String email = authentication.getName(); Member member = memberRepository.findByEmail(email) .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다: " + email)); // 새 토큰 생성 RefreshToken refreshToken = RefreshToken.builder() .token(token) .member(member) .expiryDate(convertToLocalDateTime(expiryDate)) .build(); return refreshTokenRepository.save(refreshToken); } @Override @Transactional public void deleteRefreshToken(String email) { Member member = memberRepository.findByEmail(email) .orElseThrow(() -> new RuntimeException("사용자를 찾을 수 없습니다: " + email)); deleteRefreshTokenByUser(member); } @Override @Transactional public void deleteRefreshTokenByUser(Member member) { refreshTokenRepository.findByMemberId(member.getId()) .ifPresent(refreshTokenRepository::delete); } private LocalDateTime convertToLocalDateTime(Date date) { return Instant.ofEpochMilli(date.getTime()) .atZone(ZoneId.systemDefault()) .toLocalDateTime(); } }
-
미해결[4주 과정] <클로드 코드> 완독 챌린지 : 매일 1시간씩 4주 동안 클로드 코드 도서 완독하기!
클로드 코드 결제시 우측상단 경고창
이 나오면서 결제가 안되는데요.참 어렵습니다. ㅎㅎ