묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
얕은복사와 깊은복사
2.5) 원시타입 VS 객체타입 약 08:50. 안녕하세요, 강사님의 강의를 만족하며 잘 듣고있는 수강생입니다.해당부분에 다소 오해의 소지가 될 내용으로 추가 강의 업데이트시 반영되었으면 하는부분이 있어서 올려봅니다.'객체의 참조값을 복사함' 이라는 문장은 맞다고 볼 수 있지만, 이를 얕은 복사라 부르기엔 오해의 소지가 많을것으로 보입니다. o2는 o1의 포인터값을 그대로 똑같이 가지고 있을 뿐, o2가 가리키는 값이 o1과 동일하게 '새로운 값이 만들어지지 않았기 때문' 입니다. 또한, '새로운 객체를 생성하면서 프로퍼티만 따로 복사함'이라는 문장또한 맞다고 볼 수 있지만, 이를 깊은 복사라 부르기엔 오해의 소지가 역시 많을것으로 보입니다.실제로 공식문서에서도 이를 논하기에는 쓸모없다고 얘기하고있지만, 그러면서 Shallow copy에 대해서 아래와 같이 강조하고있습니다.For shallow copies, only the top-level properties are copied, not the values of nested objects. 때문에, 추가적인 nested objects에 문제가 따르며 실제로 이때문에 이를 얕은복사라고 많은 개발자들이 소통하고 있는것으로 알고있습니다.특히, '원본 객체가 수정될 수 없어 안전함' 까지 있으니, 더욱더 top-level의 중요성이 강조되지 않는 것으로 보여 모호한것으로 보입니다. 평소 강사님의 강의, 강연등을 즐겨듣고 있는 수강생으로써 약간의 다소 오해의 소지가 있는부분을 언급해 볼 뿐이오니 너그러이 내용을 참조해주시면 감사하겠습니다. 항상 감사합니다.이상입니다.
-
미해결RAG를 활용한 LLM Application 개발 (feat. LangChain)
docx2txt 라이브러리에 대한 질문!
선생님 강의 잘 듣고 있습니다. 강의 내용과 함께 직접 하나하나 따라하고 공식문서도 확인하면서 해보던중, 워드 문서를 loader하기위해 docx2txt라이브러리를 사용하는 것을 봤습니다. 물론 오픈소스 라이브러리이고, 전부터 잘 사용해온것 같아 이걸로 진행해도 이상없지만,LangChain v0.2공식문서에서는 docx파일을 로더하기위해선 Azure AI Document Intelligence으로 예시가 되어 있더라고요. (제가 못찾은 거 일 수도 있어요..)어떤 차이가 있는 건지...비용이 드는 건지, 혹여나 한국어문서이다보니 뭐가 더 잘 loader하는지 궁금합니다!
-
해결됨2시간으로 끝내는 프론트엔드 테스트 기본기
테스트 자동화를 cypress cloud로 하는 이유
안녕하세요, 선생님. 강의를 모두 듣고 개인 프로젝트에 적용해보고 있는 중에 궁금한 점이 생겨 질문 남깁니다.이번 강의에 나온 cypress cloud를 사용해서 테스트 자동화를 해보았는데 문득 cypress가 아니라 cypress cloud를 사용해서 테스트 자동화를 하는 이유가 무엇인지 궁금하더라고요.https://docs.cypress.io/guides/continuous-integration/github-actions위 문서를 찾아보니 cypress cloud는 테스트를 병렬로 진행해서 속도가 더 빠르다고 하는데 병렬 테스트를 위해 cypress cloud를 사용하는 것인지 궁금합니다.아니면 뭔가 다른 이유가 있을까요?
-
미해결12시간 안에 끝내는 파이썬을 활용한 크롤링
selenium 버전이 4.x 대가 되면서 메서드가 달라졌고, 크롬드라이버 다운도 방식이 달라졌습니다(24.09.07 기준)
현재 지원되는 selenium 4.x 버전에서는,driver.find_element_by_id() 메서드가 더 이상 지원되지 않습니다. 라이브러리에from selenium.webdriver.common.by import By을 추가하시고search = driver.find_element(By.ID, 'query')menu = driver.find_element(By.CSS_SELECTOR,'div.dp2 > ul >li:nth-child(1) > a')이렇게 하셔야 현재 24.09 기준으로 selenium 설치하신 분들은 코드가 무리 없이 돌아가실 거에요. 크롬 드라이버 역시 버전 115 이후부터는 통합으로 운영되어https://googlechromelabs.github.io/chrome-for-testing/여기 페이지로 들어가셔서 아래쪽 stable(안정화) 버전에서본인에게 맞는 운영체계의 크롬드라이버의 url을 주소창에 넣으시면 크롬드라이버를 다운 받으실 수 있습니다. 크롬과 셀레니움의 경우 계속해서 버전이 자동적으로 업되는 경우가 많아,바로 전에 되던 코드가 실행이 되지 않는 경우도 있으니 버전들을 잘 확인하셔야 해요.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
포트폴리오 문서작성에 있어서 질문드립니다.
안녕하세요 신입 클라이언트 프로그래머 취업을 준비하고 있습니다.다름이아니라.. 제가 강사님의 강의를 열심히 듣고 3D로 포트폴리오를 프로토타입 수준으로 제작을 완료했습니다.플레이어가 메인씬으로 이동해 상점에서 물품을 구매하고 인벤토리를 통해 장비를 장착하고 NPC를 통해서 스테이지로 들어가서 잡몹을 처리후 보스를 처치하고 스테이지를 클리어 하는 부분까지 구현을 했는데요...이번에 포트폴리오를 제출하려고 하는데 포트폴리오에 얼마나 디테일한 부분까지 작성을 해야할까요?? 그리고 영상을 꼭 필요할까요??? 커뮤니티를 찾아봤는데 말이 다 달라서 질문드립니다...
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-C 코드확인 부탁드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. dfs 의 매개 변수로 vector 를 넘겨줄 때 코드입니다 .http://boj.kr/129282969aaf44f28f97cf1b1024ad1e vector 를 전역변수로 했을 때 코드입니다.http://boj.kr/74480c35c04441f2860defc1634e0e0a 두 코드 모두 예제는 맞추는데 제출하면 틀렸다고 나와서 코드확인 부탁드립니다!
-
미해결[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!
FF + supabase 사용 시 소셜로그인
안녕하세요 선생님! 앞에 다른 질문이 있었는데, 내용이 달라서 따로 질문 드립니다앞의 강의는 FF + firebase 에서 구글로그인뒤의 강의는 FF + firebase 에서 kakao 로그인이 있는데 FF + supabase 사용 시 다른 소셜로그인은 어떤식으로 하시는지 궁금합니다.감사합니다.
-
미해결[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!
플러터플로우 / supabase 사용 시 push 는 어떻게 하시는지 궁금합니다
안녕하세요 선생님! 강의 잘 보고 있습니다.궁금한게 있는데 혹시 FF + supabase 사용 시 push notification 은 어떻게 사용하고 계신지 궁금합니다!감사합니다!
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이분탐색(매개변수 탐색) 질문 있습니다!
while문 조건에서,(lt < rt)와 (lt <= rt) 두 조건 중 어느것을 사용해야 하는지 판단 기준이 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
DB 분리 관련 질문 드립니다.
강의 보다가 h2로 order-service, user-serivce, catalog-service 각각의 서비스마다 db를 따로 쓰다가 동기화 문제 때문에 하나의 mariadb로 써야 된다는걸 봤는데요. 현업에서는 MSA에서 서비스 마다 다른 db를 쓴다고 알고 있는데, 왜 그렇게 하신건지 궁금해서 질문 남깁니다. 서비스가 작아서 그렇게 해도 된다는 걸까요? 그럼 현업에서는 어떤 방식으로 해결하나요 동기화 문제
-
해결됨Flutter 앱 개발 기초
firebase 로그인 및 회원가입 async-await 필요여부
한가지 궁금한 것이 있어 질문 남깁니다.다른게 아니라 로그인이나 회원가입을 만들 때 onPressed를 async-await으로 만든다고 알고 있는데강의에서는 async-await 없이 로그인과 회원가입을 만들더라고요. 그 이유가 궁금합니다.
-
해결됨친절한 블렌더 - [LV.3] 캐릭터 애니메이션
꼬리 모델링 영상 질문있습니다.
막힌 부분의 시간(예를들면 3:24)과 안 되는 부분과 현상을 자세히 써주셔야 해결이 빠릅니다. - 섹션 1 꼬리 모델링 강의 16:49에서 오브젝트 모드에서 꼬리 선택하고 모디파이어에서영상처럼 커브 선택, path까지 선택, Y축으로 변경하면 아래 사진처럼 꼬리 방향이 살짝 틀어져 있습니다.파일을 첨부하면 좋겠는데, 파일 첨부 기능이 없네요.꼬리 방향을 바로 하려면 어떻게 해야 할까요? 문제되는 물체를 선택한 상황에서 일부가 아닌 전체 스크린샷 사진을 첨부해주시면 훨씬 좋습니다. - 아웃라이너나 프로펄티스도 문제 상황 파악에 도움이 되므로 함께 찍어주세요.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
어떤 경우에 get_attribute 이걸 사용하나요?
동적 페이지 크롤링 하고 있는데..어떤 경우에는 select_one를 사용하또 다른 경우에는 get_attribute이걸 쓰더라고요..어떤 때에 각각 쓰는건지 아직 이해를 못했어요.뭔가 알것같기도 하고.. 또 사용도 할 수는 있을 것 같은좀 더 정확하게 이해하고 싶어요. 예를 들면 (맞는 코드는 아니지만)# 제목 가져오기 from bs4 import BeautifulSoup html = driver.page_source soup = BeautifulSoup(html, 'html.parser') items = soup.select('#main-area > div:nth-child(4)') for item in items: title = item.select_one('.article').text.strip() link = item.select_one('.article').attrs['href'] print(title,link) 이런 식으로 쓰기도 하니까 좀 헷깔립니다.단순히 정적페이지/동적페이지에 따라 맞게 쓰는걸까요?
-
미해결
DataSource 자동 구성 클래스강의중 문의
안녕하세요. 테스트과정중 테스트가 일반적으로 작동하지않아 글을 남깁니다.package tobyspring.helloboot; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = HellobootApplication.class) @TestPropertySource("classpath:/application.properties") public class DataSourceTest { @Autowired DataSource dataSource; @Test void connect() throws SQLException { Connection connection = dataSource.getConnection(); connection.close(); } }package tobyspring.config.autoConfig; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.SimpleDriverDataSource; import tobyspring.config.ConditionalMyOnClass; import tobyspring.config.EnableMyAutoConfigurationProperties; import tobyspring.config.MyAutoConfiguration; import javax.sql.DataSource; import java.sql.Driver; @MyAutoConfiguration @ConditionalMyOnClass("org.springframework.jdbc.core.JdbcOptions") @EnableMyAutoConfigurationProperties(MyDataSourceProperties.class) public class DataSourceConfig { @Bean DataSource dataSource(MyDataSourceProperties properties) throws ClassNotFoundException { SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); dataSource.setDriverClass((Class<? extends Driver>) Class.forName(properties.getDriverClassName())); dataSource.setUrl(properties.getUrl()); dataSource.setUsername(properties.getUsername()); dataSource.setPassword(properties.getPassword()); return dataSource; } } package tobyspring.config.autoConfig; import tobyspring.config.MyConfigurationProperties; @MyConfigurationProperties(prefix = "data") public class MyDataSourceProperties { private String driverClassName; private String url; private String username; private String password; public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
-
해결됨[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)
npm run dev 오류 내용을 모르겠습니다
npm run dev 접속이 안되는데 무슨 오류인지 모르겠습니다전체 코드 따라했는데 이렇게 뜹니다layout? middleware? 이쪽 같아서 계속 건드려보다가 안되서 질문 남깁니다
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
리액트 앱을 깃(깃허브) 리포지토리로서 관리하는 법?
안녕하세요?바탕화면에 codecamp-frontend 라는 폴더를 만들고, 그 아래에 class 라는 폴더를 만들어서 리액트 첫 보일러플레이트를 만들었습니다.section01 폴더도 만들고, 차근차근 하고 있습니다.그런데, 깃허브로 바탕화면에 있는 codecamp-frontend 라는 폴더를 관리해주고 싶은데, 배운 대로 git init 을 하고 git add . 을 하니, 터미널에서, 이 폴더의 하위에 있는 class 라는 폴더가 서브모듈이 된다고 경고가 뜹니다. 그래서 검색을 해서 어찌어찌 되돌리고,하위에 있는 class 폴더만 깃허브 리포지토리로서 관리하게 되었습니다.그런데 class라는 이름의 리포지토리가 있는 것이 마음에 안 들고, 몇 가지 질문이 생겼습니다. 리액트 앱은 그 자체를 단독으로, 하나의 리포지토리로서 관리해주는 것이 맞나요?class 라는 이름의 리포지토리가 있는 것이 알아보기 어렵고 중복이 쉬워 이름을 바꾸고 싶습니다. 바꿔주어도 상관없을까요? 깃이 꼬이지 않을까요?깃과 깃허브로 리액트 앱들을 하나의 폴더(리포지토리(저장소))로 모아서 관리하려면 어떻게 관리해 주어야 하는 건지 궁금합니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
update 로직 질문
멤버 업데이트 시memberService.update(id, request.getName());으로 작성해 주셨는데memberService.update(id, request);와 같이 객체를 통째로 넘기지 않는 이유가 있는 것인가요? 위와 같이 객체를 통째로 넘기는 경우 UpdateMemberRequest 클래스를 이너 클래스가 아닌 별도의 클래스로 분리해 줘야 하는 게 맞나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JdbcMemberRepository 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.어떤 점이 문제인지 모르겠습니다 ㅜ jdbcMemberRepositorypackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import org.springframework.jdbc.datasource.DataSourceUtils; import javax.sql.DataSource; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Optional; public class JdbcMemberRepository implements MemberRepository{ private final DataSource dataSource; public JdbcMemberRepository(DataSource dataSource) { this.dataSource = dataSource; } @Override public Member save(Member member) { String sql = "insert into member(name) values(?)"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, member.getName()); pstmt.executeUpdate(); rs = pstmt.getGeneratedKeys(); if (rs.next()) { member.setId(rs.getLong(1)); } else { throw new SQLException("id 조회 실패"); } return member; } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public Optional<Member> findById(Long id) { String sql = "select * from member where id = ?"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setLong(1, id); rs = pstmt.executeQuery(); if(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return Optional.of(member); } else { return Optional.empty(); } } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public List<Member> findAll() { String sql = "select * from member"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); List<Member> members = new ArrayList<>(); while(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); members.add(member); } return members; } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } @Override public Optional<Member> findByName(String name) { String sql = "select * from member where name = ?"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1, name); rs = pstmt.executeQuery(); if(rs.next()) { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return Optional.of(member); } return Optional.empty(); } catch (Exception e) { throw new IllegalStateException(e); } finally { close(conn, pstmt, rs); } } private Connection getConnection() { return DataSourceUtils.getConnection(dataSource); } private void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (pstmt != null) { pstmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { close(conn); } } catch (SQLException e) { e.printStackTrace(); } } private void close(Connection conn) throws SQLException { DataSourceUtils.releaseConnection(conn, dataSource); } } MemberRepositorypackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { Member save(Member member); void finById(Long id); Optional<Member> findById(Long id); Optional<Member> findByName(String name); List<Member> findAll(); void cleatStore(); }MemoryMemberRepositorypackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import java.util.Map; import java.util.Optional; import java.util.*; public class MemoryMemberRepository implements MemberRepository { public static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId((++sequence)); store.put(member.getId(), member); return member; } @Override public void finById(Long id) { } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable((Member) store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } @Override public void cleatStore() { } void clearStore() { store.clear(); } }errorerror: JdbcMemberRepository is not abstract and does not override abstract method cleatStore() in MemberRepository public class JdbcMemberRepository implements MemberRepository{
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
중반부부터 후반부까지의 거의 모든 영상이 다음과 같이 흰 영상으로만 보입니다.
누적합 알고리즘부터, 상당 수 강의가 다음과 같이 보입니다.
-
미해결김영한의 실전 자바 - 중급 2편
제네릭클래스는 타입매개변수를 통해 타입을 결정하는데 이 타입을 메인에서 전달받는다면 의존성 주입과 IoC로 볼수 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제네릭클래스는 타입매개변수를 통해 타입을 결정하는데 이 타입을 메인에서 전달받는다면 의존성 주입과 IoC로 볼수 있나요?제가 생각하는 IoC는 한 오브젝트에서 무언가를 결정해야하는데 이것이 다른 오브젝트에 의해 결정되는 것입니다.이때 제 기준으로는 제네릭클래스는 내부적으로 타입을 결정해야하지만 이 타입이 메인과 같은 함수에 의해 타입을 전달받아 전달받은 타입으로 타입을 결정하므로 IoC에 부합한다고 생각합니다.또한 외부에서 타입을 주입받으므로 의존성 주입에도 부합하다고 생각합니다.혹시 제 생각이 틀렸나요?