묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결피그마(Figma)를 활용한 UI디자인 입문부터 실전까지 A to Z
아이폰 14 프로 프레임 컬럼 수
안녕하세요! 최근에는 모바일 프레임을 아이폰 14프로로 많이 진행하는거같은데 이 경우에는 컬럼 수와 사이즈 및 간격을 어떻게 잡아야 좋을까요?
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
window 사용자를 위한 ssh 접속
https://learn.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_install_firstuse 먼저 로컬 피씨에서 위처럼 진행해주시면 됩니다~
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
프로젝트 구조 질문드립니다.
nodejs는 route, controller, service, repository, entity로 하면 중복 없이 잘 짤 수 있다고 조언하신 글을 봤습니다.nextjs는 프로젝트 구조를 어떻게 짜야 하나요? 구글링하니까 정말 다양한 방법이 많이 있던데 제로초님은 실무에서 어떻게 짜시는지 궁금합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
프론트 npm run build가 안됩니다
ubuntu@ip-172-31-37-255:~/react-nodebird/front$ npm run build > react-nodebird-front@1.0.0 build /home/ubuntu/react-nodebird/front > cross-env ANALYZE=true NODE_ENV=production next build Browserslist: caniuse-lite is outdated. Please run: npx browserslist@latest --update-db info - Using external babel configuration from /home/ubuntu/react-nodebird/front/.babelrc Webpack Bundle Analyzer saved report to /home/ubuntu/react-nodebird/front/.next/server/analyze/client.html Webpack Bundle Analyzer saved report to /home/ubuntu/react-nodebird/front/.next/analyze/client.html info - Creating an optimized production build info - Compiled successfully > Build error occurred Error: Build optimization failed: found page without a React Component as default export in pages/about See https://err.sh/vercel/next.js/page-without-valid-component for more info. at build (/home/ubuntu/react-nodebird/front/node_modules/next/dist/build/index.js:21:115) info - Collecting page data .npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! react-nodebird-front@1.0.0 build: cross-env ANALYZE=true NODE_ENV=production next build npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the react-nodebird-front@1.0.0 build script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/ubuntu/.npm/_logs/2022-12-03T04_13_49_262Z-debug.log 백엔드에서 npm run dev하면 use 80 무슨 오류 떠서 포트번호 85번으로 바꿧어요백엔드쪽 app.js 85번으로 바꾸고vim app.js에서 85번 바꾸고프론트쪽 package.json에서 -p 85로 바꿧어요git status해도 아무것도 안나오고 백엔드 프론트 서버키고 npm run build 하면 오류뜹니다 app.jsfront / package.js
-
미해결빅데이터분석기사 실기대비 (R 활용)
5회 2유형
작업형 1유형은 이 강의 토대로 술술 풀었습니다(3번에서 전체전입전출학생수 칼럼 있는 줄도 모르고 1~6학년 더하고 빼고 그랬네요)2유형에서 요 강의 토대로 풀려고 하는데결측치도 없고 이상치도 없는 것 같고.. 느낌이 쎄한게train에 어떤 method를 써도 안되는 겁니다.. rpart glm lm lda randomForest까지..rpart는 너무 오래 걸리고glm이었나 lda는Accuracy Kappa에 NA값이 있다며(?) 오류가 떴습니다음.. 강의에서 배운 건 다 써봤는데 역시 기본 이해가 없어서인지 다른 해결방법이 떠오르지 않더군요..풀이 강의 부탁드리겠습니다
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
BoardMapper.java 질문입니다.
package kr.bit.mapper;import java.util.List;import kr.bit.entity.Board;//@Mapperpublic interface BoardMapper { public List<Board> getList(); public void insert(Board vo); };강의 잘보고있습니다. 수강하다가 궁금한점이 있어서 질문드립니다. ----> public void insert(Board vo); <----위에 기재한 코드에서 Board vo 이런식으로 처리를 하는데 entity에 @Data 어노테이션 처리를 한 Board.java를 vo의 형태로 insert한다고 생각하면 되는건가요? vo라는 형태로 넣는건지 아니면 vo라는 이름으로 넣는건지 약간 헷갈립니다 ㅠ 입사한지 얼마안되서 spring(EGOV)으로 업무를 보고 있는데 EGOV에서는 VO, DAO로 나누어서 DAO가 MAPPER랑 연결되는? 방식입니다. 선생님 강의에서도 다를것 크게 없긴하죠 BoardMapper.java가 제가 말씀드린 사실상 DAO방식이고 Board.java도 VO의 역할을 하고 있으니까요. 위에 같은 궁금증이 생긴 이유가 평소에 저는 Dao에서 아래와 같은 방식으로 처리했습니다. public void insertWriting(WritngDrwVO writngDrwVO) throws Exception{ insert ("WritngDAO.insertWritingDrw", writngDrwVO);} 코드를 보시면 WritingDrwVO라는 VO 클래스가 생성이 되어있고 public void insertWriting(WritngDrwVO writngDrwVO)라는 코드를 통해 WritngDrwVO를 writngDrwVO라는 이름으로 선언을 하고있고 insert ("WritngDAO.insertWritingDrw", writngDrwVO);} 라는 코드에서 위에서 선언한 WritngDrwVO를 writngDrwVO라는 이름으로 insert한다? 이런식으로 이해를 하고 선생님의 강의를 보니까 위에서 말씀드린 헷갈리는 부분이 나온것 같습니다..... 글이 너무 길었네요 ㅠㅠㅠㅠ 강의 잘보고 있고 스프2탄을 제일 처음 들었는데 완강하고 나프나 스프 올라온거 쭉 완강하도록 하겠습니다.
-
해결됨스프링 시큐리티 OAuth2
username, clientId, registrationId
안녕하세요. 섹션 9. OAuth 2.0 Client - Social Login (Google, Naver, KaKao) + FormLogin 에서의 User 도메인에 대한 질문입니다. username 에 대한 질문 폼 로그인에 사용되는 계정과 OAuth 2.0 로그인에 사용되는 계정을 추상화하는 과정에서제공자 계정의 (변경가능한) 별명에 해당하는 값을 username으로 받는 것으로 보입니다. 하지만 클라이언트 자체 계정에서의 username 은 고유하기 때문에 Q1) 이를 동일한 속성을 갖도록하는게 맞는지 혹은 해도 무방한지Q2) 이를 별도의 속성으로 받아도 괜찮은지 궁금합니다. (e.g. nickname) id + username 에 대한 질문"sub" 혹은 "id" 로 매핑되어있는 값을 id라는 필드에 넣도록 구현되어있는데 public class NaverUser extends OAuth2ProviderUser { @Override public String getId() { return (String)getAttributes().get("id"); // ! } public class GoogleUser extends OAuth2ProviderUser { @Override public String getId() { return (String)getAttributes().get("sub"); // ! }네이버 문서에 아래와 같은 내용이 있습니다.위 설명에 따르면 네이버를 기준으로 id가 클라이언트 자체 계정에서의 username 과 동일한 역할을 하는 것으로 보입니다.Q3) 따라서 1번 질문과 반대로 id 필드에 저장되는 값이 오히려 username 에 적합해보이는데 이에 대한 의견을 듣고 싶습니다. clientId 에 대한 질문 User 클래스에 String ci (clientId) 필드가 포함되어 있는데,Q4) 이는 외부 설정파일로부터 설정하는데 저장해야할 필요가 있나요? 지워도 무방한가요? public class User { private String registrationId; private String id; private String ci; // ! private String username; private String password; private String provider; private String email; private String picture; private List<? extends GrantedAuthority> authorities; registrationId 에 대한 질문 registrationId 가 provider(google...) 를 의미하는 것으로 보이는데,Q6) FormLogin 클래스에 registrationId, provider 두 필드가 모두 존재합니다. 하나는 지워도 무방한가요? public abstract class OAuth2ProviderUser implements ProviderUser { @Override public String getProvider() { return clientRegistration.getRegistrationId(); // ! }public class FormUser implements ProviderUser { private String registrationId; // ! private String id; private String username; private String password; private String email; private boolean isCertificated; private String provider; // !
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
StringUtils.hasText를 쓰는 이유가 궁금합니다 !!
item.getItemName() == null 로 써도 될거 같은데 hasText를 쓴 이유는 뭔가요?
-
해결됨ERC20 깨부수기 (+ truffle, 프론트엔드)
가스비 질문이 있습니다
변수에 선언된 값이 변경될때마다 가스비가 추가적으로 발생하나요?
-
미해결모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)
오픈소스참여-나만의 패키지 만들기(1)
안녕하세요오픈소스 참여 - 나만의 패키지 만들기(1) 질문드립니다수업들으면서 제가 수업을 따라서 코딩한 결과가 오류는 없는데, result 파일에서 이미지들이 하나씩 넘어가는 것이 아니라, 누적이 되어서 겹쳐서 나옵니다.그래서 올려주신 수업자료를 열어서 돌렸는데도 수업처럼 이미지들이 하나씩 넘어가지 않고 이미지들이 누적이 되서 겹쳐서 넘어갑니다.
-
미해결부트스트랩 5(Bootstrap 5) - 기초부터 웹 프로젝트 만들기
kakao map이 mobile에서도 가능하게 하려면 어떻게 할까요?
project -2를 완성하고 보니 mobile에서 kakao map이 작동하지 않음을 알게 되었습니다. web과 mobile에서 다 작동하도록 하려면 어떻게 할까요?
-
미해결배달앱 클론코딩 [with React Native]
위치 게속 변할경우 , watchPosition사용시 null값
이게 바로 가져올떄도있고, null뜰때도 있고그러네요 ? 다른곳 앱들사용하면 3초로딩하고 바로켜지던것같은데 위치를 받아올때있고 null뜰대있고, 이렇게하네요.. 코드는 useEffect에 myposition을 감지하고있게했어요. 그럼 업데이트되면서 게속실행하게끔... 아니면 처음에는 myPosition에 getCurrentPosition으로 myPosition에 담아놓고 watch로 update시켜야하나요? 아니면 커뮤니티 지올로케이션 말구서비스 ? 라이브러리가 유명하던데 그걸안써서 느린건지..
-
미해결실전! Querydsl
where 절에서 alias를 사용하려면 어떻게 해야할까요?
List<UserDto> fetch = queryFactory .select(Projections.bean(UserDto.class, member.username.as("name), ExpressionUtils.as( JPAExpressions .select(item.itemCnt.max()) .from(item), "itemCount")) ).from(member) .fetch();위의 샘플과 같이 member 테이블 안에서 item의 서브쿼리를 사용합니다.위와같이 작성해서 실행을 하는데는 아무런 문제가 없습니다.그런데 문제가 되는 부분이where절에서 서브쿼리로 작성된 itemCount의 범위를 검색을 하려고 하는데 어떤식으로 처리를 해야할지 난감합니다. 이리저리 검색을 해서 아래와 같은 방법으로 비슷하게 구현을 한 방법이 있기는 한데Path<Long> itemCountAlias = Expressions.numberPath(Long.class, "itemCount");적용을 해 봐도 적용이 안됩니다.ㅠㅠ오류가 itemCnt 이름의 칼럼이 없습니다.라는 오류만 뿌려줍니다.private BooleanExpression whereByItemCond(SearchOption searchOption, Path<Long> aliasQuantity) { String cnt = searchOption.getSearchCount(); if(searchOption.getSearchType().equals("itemCount")){ return aliasQuantity != null ? aliasQuantity.eq(String.valueOf(cnt)) : null; } } 서브쿼리에 추가한 Alias를 조건 검색문에서 검색할려면 어떤식으로 처리를 해야할까요? 혹시 제가 접근 방법을 잘못 알고 있다면 어떤식으로 처리를 해야할까요?결론적으로 구현하고 싶은 것은A, B 테이블이 있는데 A테이블에서 서브쿼리로 B테이블의 특정 값을 추가해서 목록으로 뿌려주고 있는데검색 조건을 A테이블에서가 아닌 B테이블에 있는 값(A+B테이블의 조합으로 만들어진 목록 데이터값)을 필터링해서 검색을 하려고 합니다. 제목 | 작성자 | 아이탬 수---------------------첫째 홍길동 4둘째 김길동 5셋째 박길동 2이런식으로 목록을 보여주는 화면이 있는데 제목과 작성자는 member테이블에서, 아이템수는 item 테이블에서 가져왔습니다.쿼리는 위에서 적은것과 같이 기본 member테이블에서 item테이블을 서브쿼리를 사용해서 값을 추가했습니다. ExPressionUtils.as(JPAExpression.select~~)여기서 기본검색(?)조건인 제목, 작성자 검색은 문제가 없는데, 서브쿼리로 추가했던 아이템 수로 검색을 하려고 합니다.B테이블은 A테이블을 ManyToOne으로 설정이 되어 있습니다.
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
ssr 방식과 api 방식의 차이가 궁금합니다
안녕하세요 강사님. 학습을 하다가 궁금한 점이 있어서 질문을 남깁니다.타임 리프와 같이 ssr 방식의 카카오 로그인과 현재 강의와 같은 API 방식의 카카오 로그인 방식이 다른데 구글링을 해도 이해가 잘 가지 않아서요.. ssr 방식의 경우 api 방식과 다르게 카카오쪽으로 요청하지 않는것 같은데 어떤 차이가 있을까요..??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]다른 코드들이 다 맞게 진행됨에도 오류가 발생하여 질문드립니다.java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberRepository': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessProperties(PersistenceAnnotationBeanPostProcessor.java:351) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1415) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:608) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:122) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ... 27 moreCaused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1210) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:565) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:528) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:696) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:669) at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessProperties(PersistenceAnnotationBeanPostProcessor.java:348) ... 44 more MemberRepositoryTestimport jpabook.jpashop.Member; import jpabook.jpashop.MemberRepository; import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.persistence.EntityManager; @RunWith(SpringRunner.class) @SpringBootTest(classes = MemberRepository.class) public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test public void testMember() throws Exception { // given Member member = new Member(); member.setUsername("memberA"); // when Long savedId = memberRepository.save(member); Member findMember = memberRepository.find(savedId); // then Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); } }
-
미해결대세는 쿠버네티스 (초급~중급편)
Network error: Connection timed out 문제
안녕하세요노트북에 ip가 변경되는 무선 공유기 환경일 경우 따로 세팅과 관련된 자세한 방법을 모르겠어서 이렇게 질문드립니다.q&a에 검색해보니 이전에 https://kubetm.github.io/practice/appendix/installation_case5/ 를 참고하라는 답변을 남기신 적이 있으셔서 확인하려고 했으나, 해당 페이지가 삭제된 것 같은데 혹시 방법을 따로 다시 알려주실 수 있을까요?답변부탁드립니다. 감사합니다. (참고한 질문: https://www.inflearn.com/questions/241375/case2-%EC%97%B0%EA%B2%B0%EC%9D%B4-%EC%95%88%EB%90%A9%EB%8B%88%EB%8B%A4-%EC%82%B4%EB%A0%A4%EC%A3%BC%EC%84%B8%EC%9A%94)
-
미해결게임 프로그래머 취업 전략 가이드
취준 고민이 있습니다 조언좀 부탁드립니다 ㅠㅠ!!
현재 대학교 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)