묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결게임 프로그래머 취업 전략 가이드
취준 고민이 있습니다 조언좀 부탁드립니다 ㅠㅠ!!
현재 대학교 4학년 졸업예정이구요 할줄아는건 유니티 조금입니다.. 인프런 루키스님 유니티강의 part3까지듣고 어느정도 할 수있겠다싶어서 뱀서 모작해서 포트폴리오해보려했는데 할만하겠다했는데 난이도가 좀 있어서 멘붕이오더군요 실력이 너무 부족한것같아 학원을 알아보려해도 돈을 쓸 수있는 여건이안되어서 국비지원을 받아 수업을 들으려하는데오늘 알아본 학원 한곳은 언리얼기반으로 강의를 하더군요 저는 c++은 기본이 안되어있어 들으려고해도 기초과정은 국비가안되어서 c c++ directX2D 과정은 독학을해야할것같아 고민입니다.. 학원커리큘럼은 총 1년과정이구요..저는 나이도있고 빨리 취업을 해야하는 상황이기도한데 1년을 열심히해서 못해도 중견 잘하면 대기업을 노리는게 좋을지.. 아니면 그나마 좀 해본 유니티를 계속해서 빨리 중소라도 취업하는게 좋을지 큰 고민입니다 이마저도 사실 번번한 포폴이없어 확실치않긴합니다.. 1년이라는 커리큘럼이 너무 부담이기도하고 금전적인 여유가없어 기초과정은 독학을 해야하는게 문제입니다..미래를 생각하면 c++ 언리얼이 맞는것같아도 상황이 여의치않아 큰 고민입니다 조언좀 해주시면 감사하겠습니다.. 루키스님이라면 어찌하실지..조언좀 해주시면 감사하겠습니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
서비스에서 외래 키 사용에 대해 질문 드립니다
안녕하세요!공부를 하다보니 실제 서비스에서는 외래 키 사용을 안하는 경우가 많다는데 외래 키가 없는 게 이해가 안 되어 질문 드립니다..연관관계 매핑 이런것들을 안 쓰는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Query Parameter 방식에서의 ArgumentResolver 동작 원리에 대해
localhost.com:8080/hello?username=kim&age=20위와 같은 get 방식의 요청이 들어왔을 때,@GetMapping("/hello") public void foo(HelloData helloData) { }제가 이해한 내용을 바탕으로 설명해보겠습니다.컨트롤러에게 HelloData 객체를 만들어 전달해주는 것은 ArgumentResolver 입니다. 만일 HTTP 메시지를 통해 username과 age가 전달되었다면, HelloData 객체를 만들기 위해 HTTP 메시지 컨버터를 사용하였을 것입니다.마찬가지로 Query Parameter 방식으로 값이 전달되었을 때, HelloData 객체를 만드는 주체도 ArgumentResolver 인가요? 이 때는 HTTP 메시지 컨버터를 이용하는 것이 아니라 프로퍼티(constructor, setter)를 찾고, 그것으로 객체를 만드는 것인가요?
-
해결됨블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
[Errno 2] No such file or directory: 오류가 나요..
venv 와 동일한 레벨(위치)파일로 옮겼는데도 동일한 오류가 나요 ㅠㅠfrom ast import keyword from tokenize import maybe import pyperclip,time import chromedriver_autoinstaller import my_data chromedriver_autoinstaller.install() from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) driver = webdriver.Chrome(options=options) def login(driver): driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com") time.sleep(3) my_id, my_pw = my_data.id, my_data.pw # 1.element의 send_keys함수 사용시 네이버 로그인 캡챠가 # id_input.send_keys("아이디 입력하기 여기") # 2. pyperclip.copy~ # 아이디 입력하는 구간 id_selector = "#id" id_input = driver.find_element(By.CSS_SELECTOR, id_selector) id_input.click() time.sleep(0.3) pyperclip.copy(my_id) # ctrl + c 복사기능이 실행됨 time.sleep(0.3) ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform() # ctrl + v 기능이 실행됨 time.sleep(0.5) #비밀번호 입력하는 구간 pw_selector = "#pw" pw_input = driver.find_element(By.CSS_SELECTOR, pw_selector) pw_input.click() time.sleep(0.3) pyperclip.copy(my_pw) # ctrl + c 복사기능이 실행됨 time.sleep(0.3) ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform() # ctrl + v 기능이 실행됨 time.sleep(0.5) #로그인버튼 클릭하는 구간 login_btn_selector = "#log\.login" login_btn = driver.find_element(By.CSS_SELECTOR, login_btn_selector) login_btn.click() time.sleep(0.5) '''3강. 서이추 신청할 블로거들의 아이디 추출하는 기능''' def extract_blog_id(driver, keyword, max_count=50): search_link = f"https://search.naver.com/search.naver?query={keyword}=&where=blog&sm=tab_opt" driver.get(search_link) time.sleep(2) #우선, 스크롤을 계정이 200개 추출될 만큼 밑으로 내린다 max_count = 50 #스크롤해서 추출할 블로거들의 포스팅을 더 불러오게 한다. postings_selector = "#_view_review_body_html > div > more-contents > div > ul > li" postings = driver.find_elements(By.CSS_SELECTOR, postings_selector) cur_posting_count = len(postings) while cur_posting_count < max_count: driver.execute_script("window.scrollBy(0,500);") #스크롤하는경우 time.sleep(0.2) postings = driver.find_elements(By.CSS_SELECTOR, postings_selector) # cur_posting_count = len(postings) print("현재 ul 태그가 가지고 있는 li태그의 개수",cur_posting_count) #블로거의 계정을 추출 blog_ids = [] for idx in range(1, max_count + 1): title_selector = f"#sp_blog_{idx} > div > div > a" title_a_tag = driver.find_element(By.CSS_SELECTOR, title_selector) blog_link = title_a_tag.get_attribute("href") data = blog_link.split("/") target_blog_id = data[-2] blog_ids.append(target_blog_id) print(blog_ids) #추출할 블로거 계정 중복을 제거하기 blog_ids = list(set(blog_ids)) #A집합 #이미 이웃신청을 건 블로거의 계정을 제거 visited_accounts=[] #B집합 with open('./already_done.txt',"r") as f: _visited_accounts = f.readlines() for account in _visited_accounts: account = account.rstrip() visited_accounts.append(account) blog_ids = list(set(blog_ids) - set(visited_accounts)) #추출한 블로거 계정을 텍스트 파일에 추가하기 with open('./blog_id.txt',"a") as f: for blog_id in blog_ids: f.write(f"{blog_id}\n") def initialize(): with open('./blog_id.txt',"w") as f: f.write("") '''4강. 핵심기능 - 서로이웃추가 신청 보내기''' def add_buddy_send(driver): f = open('./blog_id.txt',"a") blog_ids = f.readlines() f.close() for blog_id in blog_ids : blog_id = blog_id.replace("\n" , "") add_buddy_link = f"https://m.blog.naver.com/BuddyAddForm.naver?blogId={blog_id}" driver.get(add_buddy_link) time.sleep(3) # 0.에러상황: 서로 이웃 신청 버튼 자제차 없음: 이미 이웃 신청한 상태 both_add_buddy_btn_selector = "#bothBuddyRadio" try: # 0-1 버튼이 존재할 때 both_add_buddy_btn = driver.find_element(By.CSS_SELECTOR,both_add_buddy_btn_selector) except Exception as e: # 0-2 버튼이 존재하지 않을 때 print(e) continue # 0-1 버튼이 존재할 때 # 1.서로 이웃 신청을 받는 사람인가? both_add_buddy_btn_selector = "#bothBuddyRadio" both_add_buddy_btn = driver.find_element(By.CSS_SELECTOR,both_add_buddy_btn_selector) disabled = both_add_buddy_btn.get_attribute("disabled") if disabled == "true": continue # 2-1아 이제 정상이니까, 서로 이웃 신청 멘트를 작성하고 both_add_buddy_btn.click() time.sleep(1) comment_selector = "#buddyAddForm > fieldset > div > div.set_detail_t1 > div.set_detail_t1 > div > textarea" comment_box = driver.find_element(By.CSS_SELECTOR, comment_selector) comment_box.click() comment_box.clear() time.sleep(0.3) comment = "안녕하세요. 초보블로거에용.... 블로그 잘보고갑니당" pyperclip.copy(comment) #클립보드에 텍스트가 복사됨 time.sleep(0.3) ActionChains(driver).key_down(Keys.CONTROL).send_keys("v").key_up(Keys.CONTROL).perform() # ctrl + v 기능이 실행됨 time.sleep(0.5) # 2-2 서이추 버튼을 누르는 기능을 개발 add_buddy_btn_selector = "body > ui-view > div.head.type1 > a.btn_ok" add_buddy_btn = driver.find_element(By.CSS_SELECTOR, add_buddy_btn_selector) add_buddy_btn.click() #이웃신청을 건 유저를 리스트에 추가한다. with open('./already_done.txt',"a") as f: f.write(f"{blog_id}\n") # 0.5초 딜레이로 이웃을 계속 신청하는 것은 이상함. 사람이 아님 time.sleep(7) driver = webdriver.Chrome() initialize() login(driver) #여러개의 키워드에서 이웃을 추출 keywords = ["배민원","1인창업"] for keyword in keywords: extract_blog_id(driver, keyword, max_count=10) add_buddy_send(driver)
-
미해결Vue.js + TypeScript 완벽 가이드
2번째 리포지토리 url 404 낫파운드뜹니다
2번째 리포지토리 url 404 낫파운드뜹니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findAll 메서드의 리턴값
보통은 새로 생성자를 만들어서 리턴값에 return store;이런식으로 사용했었는데따로 생성자를 만들지 않고new ArrayList<>(store.values()) 라고 사용해도 위와 같이 그대로 리턴이 되는건가요?ArrayList의 타입은 따로 설정해주지 않아도 store 자체가 Map 형태를 가지고 있어서 알아서 Long,Member의 형태로 ArrayList가 생성이 되는건가요?
-
해결됨3D 프린터 모델링 입문
Mesh Workspace
Fusion360 기본 설정에서 Mesh Workspace가 안 보이는데 없는 건 선택을 안 하고 실행해도 문제없는지 아니면 다른 부분을 선택해야 하는지 알고 싶습니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 부탁드립니다!
안녕하세요! skgus0727@naver.com으로 강의 자료를 보내주셨으면 해서 글을 쓰게 되었습니다!강의 열심히 듣겠습니다ㅎㅎ 감사합니다
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
테스트 케이스 실패
import java.util.Arrays; import java.util.Scanner; public class Main { // 결정알고리즘 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int size = scanner.nextInt(); int number = scanner.nextInt(); int[] list = new int[size]; for (int i = 0; i < size; i++) { list[i] = scanner.nextInt(); } Arrays.sort(list); System.out.println(solution(list, number)); } private static Integer solution(int[] list, int minSize) { int max = Arrays.stream(list).max().getAsInt(); int sum = Arrays.stream(list).sum(); int lt = max; int rt = sum; int answer = 0; while (lt <= rt) { int middle = (lt + rt) / 2; if (count(list, middle) <= minSize) { answer = middle; rt = middle - 1; } else { lt = middle + 1; } } return answer; } private static int count(int[] list, int middle) { int count = 1; // 초기 앨범 갯수 int sum = 0; for (int i : list) { if (sum + i > middle) { // 1장이 담을 수 있는 크기 넘어감 sum = i; count++; } else { sum += i; } } return count; } }코드는 동일한테 테스트케이스에서 실패하는 경우가 있습니다.왜그런걸까요?
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
도커 관련 질문
pdf 를 보며 ec2에 배포하는 부분을 보려고 하는데요,docker-compose 부분(후반) pdf가 깨진 것 같아서요!혹시 저만 깨진걸까요? 마지막 pdf 파일 마지막 부분입니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
등록화면에서 new Item() 넣는 이유
안녕하세요. 강의 듣다 궁금한점이 있어 문의드립니다.등록 화면에 들어갈 때 왜 new Item()으로 빈값을 넘기는 이유 중 검증에 실패했을 때 화면단에서 같이 쓰기 위한 목적은 이해했는데요, 또다른 목적이 있다는데 어떤 경우인지요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 요청합니다.
강의신청하였습니다! 강의자료 요청드립니다.하기 메일로 공유부탁드릴게요~~!kwn624@naver.com
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
Jupyter 가상환경에서 mysql 연결오류
안녕하세요 선생님! 다름이 아니라 배포까지 다 마친후 머신러닝 모델을 같이 장고와 같이 돌려보려고 저희 학교 연구실 서버 컴퓨터에서 Jupyter notebook terminal을 통해 python manage.py runserver를 실행을 했는데django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'database-1.ccsbnrbep7aj.ap-northeast-2.rds.amazonaws.com' (timed out)")이러한 오류가 뜨는데 AWS RDS 인바운드 규칙에도 저희 학교 연구실 서버 컴퓨터 포트를 열어 놓았고 학교 연구실 서버 또한 방화벽이 되어있지 않은것을 확인하였습니다.이러한 경우 문제가 무엇일까요?ㅠ
-
미해결빅데이터분석기사 실기대비 (R 활용)
작업형제2유형 질문입니다.
1.평가지표에서 auc를 이용하는 경우는predict에서 type='prob'를 써야 하구요제출파일은 p3[,2]이런 형태여야 하구요2. 평가지표에서 confusionMatrix와 rmse를 이용하는 경우는 predict에서 type='prob'를 쓰지 않구요confusionMatrix는 p1과 p2를 더한 p3는 에러가 나서 p1과p2중에 성능이 더 좋은 걸 골라서 제출하면 되는거죠?confusionMatrix와 rmse의 제출파일형태는 p1 이런 모양이어야 하구요.제가 정리한게 맞을까요...?
-
미해결빅데이터분석기사 실기대비 (R 활용)
rmse질문입니다.
rmse를 구하는 문제에서는 예측값을 팩터형으로 변환하지 않는다는 것은 아는데요. 그 외의 원래 데이터에서 주어진 chr형식을 factor형으로 변환하는 건가요.. 하지 않아도 되는 건가요..보통 분류문제이서는 chr을 전부 팩터형으로 변환시키는데.. rmse,mae,mape 이런 회귀문제에서도 이렇게 변환시켜야 하는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
java.lang.NoClassDefFoundError: javax/persistence/Transient 에러
안녕하세요! 아래 코드 추가 후에 api를 요청하면 java.lang.NoClassDefFoundError: javax/persistence/Transient 에러가 뜨더라고요.@Bean Hibernate5Module hibernate5Module() { return new Hibernate5Module(); }그래서 뭐가 문제인지 확인해봤는데요.아마도 버전 이슈인 것으로 생각이 되어서 질문을 드립니다.저는 지금 spring boot 3버전으로 실습을 따라가고 있고, 확인해보니까 spring boot 3버전에는 hibernate 6이 쓰이고 있더라고요...jackson-datatype-hibernate 라이브러리는 아직은 hibernate 5까지만 지원하는 것 같은데... 혹시 jackson-datatype-hibernate 를 대체할 수 있으면서 spring boot 3 에서 돌아가는 라이브러리가 있을까요???아니면 라이브러리를 사용하지 않고, hibernate5module의 역할을 구현할 수 있을까요?
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요 코드정리에 대해서 질문이 있습니다.
강의에서 배운대로 코드정리를 할때 궁금한게 생겼습니다.강의 프로젝트들과 마찬가지로 최상단에는 StatefulWidget, 코드가 길어진다면lesswidget으로 정리를 해준 후, 추후 관리하기 쉽게 상태코드들은 fulWidget으로 올리는 작업에서만약 Listview와 같이 index도 필요로 할때에도 상단으로 올릴 수 있나요?다음은 간단히 적어본 예시코드인데아래와 같이 onTap()으로 뺄수있는지, 다른 코드정리방법이 있는지 궁금합니다. class HomeScreen extends StatefulWidget { const HomeScreen({Key? key}) : super(key: key); @override State<HomeScreen> createState() => _HomeScreenState(); } class _HomeScreenState extends State<HomeScreen> { @override Widget build(BuildContext context) { return SafeArea( child: Scaffold( body: _Body( onTap: onTap, ), ), ); } onTap() { showToast(context, index.toString()); // index ?? } } class _Body extends StatelessWidget { final GestureTapCallback onTap; const _Body({ required this.onTap, Key? key, }) : super(key: key); @override Widget build(BuildContext context) { List<int> list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; return ListView.separated( itemBuilder: (_, index) { return ListTile( title: Text( '${list[index]}', style: const TextStyle(fontSize: 30), ), onTap: () { // 상단으로 올리는게 가능한지 showToast(context, index.toString()); }, ); }, separatorBuilder: (_, index) { return const SizedBox( height: 20, ); }, itemCount: list.length, ); } } showToast(BuildContext context, String message) { Fluttertoast.showToast( msg: message, toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.CENTER, timeInSecForIosWeb: 1, fontSize: 16.0, textColor: Colors.blue, backgroundColor: Colors.grey[200], ); }
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
class에서 initialize_list Constructor 왜사용하나요?
Test라는 클래스가 있을 때 Test의 ㅑinitialize_list를 인자로받는 생성자를 왜 사용하는 것인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
members.jsp에서 jstl를 사용하려고 하면 500번에러가 .. ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]jsp는 잘 인식하는데, jstl를 사용하기 위해 맨 위에 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 을 추가하면 바로 500번 에러가 납니다. 디펜던시는 잘 추가한거 같은데 ㅠ_ㅠ 왜그럴까요 ?? 에러코드는 두개가 바뀌어가며 나옵니다.org.apache.jsp.WEB_002dINF.views.new_002dform_jspjava.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.views.new_002dform_jsp이거와 하나는 사진처럼요 ..,implementation 'javax.servlet:jstl' implementation group: 'javax.servlet', name: 'jstl', version: '1.2' implementation "org.apache.tomcat.embed:tomcat-embed-jasper"
-
미해결뉴욕 프로덕트 디자이너가 알려주는, 입문자를 위한 UX디자인 개론
UX 사례 - 채용플랫폼 (원티드/ 잡플래닛)
안녕하세요, 멘토님. UX 디자인 원리 관련한 과제를 부족하지만 올려봅니다. 저는 요즘에 자주 사용하는 채용플랫폼 원티드와 잡플래닛의 UX 를 비교하며 개인적인 견해를 작성해보았습니다.원티드(홈 화면 / 채용공고 화면 / 채용공고 상세화면)원티드는 홈화면에 인사이트와 교육 중심의 콘텐츠를 중심으로 배치하였고 채용화면은 두번째화면에 위치시킴으로 원티드가 교육 및 콘텐츠에 조금 더 주력하는 모습을 볼 수 있습니다. 개인적으로 잘되었다고 생각하는 점은,일관성 원리에 맞게 3~4개 정도 레이아웃을 유형화하여일관성도 지키고 UX의 지루함을 탈피했다는 점입니다. 또한 홈 화면과 채용화면의 상단 배너도 일관성있게 배치하여 유저에게 익숙함을 더했습니다. 하지만 아쉬운점은,원티드에 들어오는 유저들은 대부분 채용공고를 조회하고 지원할 목적으로 들어올텐데 콘텐츠 및 인사이트가 홈화면에 있는 것이 아쉬웠습니다.또한 검색 버튼을 누르게 되면 검색창으로 바로 넘어가지 않고 "북마크한 채용공고" 를 보여주는 화면을 거쳐가는것이 행동 유도성의 원리에 조금은 맞지않는 것처럼 보였습니다. 잡플래닛 (채용화면 / 뉴스화면/ 채용공고 상세화면)잡플래닛은 원티드와는 다르게 기업뉴스를 콘텐츠로 제공하고 있었으며 채용공고를 가장 첫번째 화면에 두었습니다.개인적으로 잘되었다고 생각한 점은,채용공고를 첫화면에 노출시킴으로써, 유저들이 잡플래닛에 들어와 채용공고를 보고 지원하고자하는 니즈를 아주 잘 충족시킨 화면구성이라고 생각됩니다. 또한 본인이 관심있는 직종을 가장 상단에 위치시켜 어떤 직종의 채용공고를 보고있는지 볼수 있는 점도 좋았습니다.그리고 개인 프로필화면을 하단의 플로팅처리하여 언제든지 개인 프로필로 이동하여 이력서를 수정할 수 있다는 점, 이력서를 완성도있게 작성할 수 있다는 점이 좋았습니다. 아쉬운 점은,원티드에서 제공하는 ai 추천이나 테마별 추천항목이 없기때문에 채용공고를 스크롤하다보면 지루한 느낌이 약간 들었습니다. 개인적으로 두 플랫폼을 사용해보면서 둘다 아쉬웠던점은, 채용공고를 찾아보는 신입 혹은 이직자입장에서 채용공고별 요구하는 경력기간들이 있는데 그 기간들이 1depth에서 나타나지않고 2depth에서만 나타나는 점이 너무 아쉬웠습니다. 두 플랫폼 모두 보상금/ 지원금이 비스니스 쪽과 연계되어있기 때문에 레이아웃내에 한정된 정보만 제공하기 위해 경력기간을 2depth로 내렸다는 생각도 듭니다.