묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
@Bean 설정 정보를 통한 빈 생명주기 콜백 등록 질문드립니다
@Configuration public class LifeCycleConfig { @Bean(initMethod = "init", destroyMethod = "close") public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); ... } }위와 같이 @Bean에 initMethod와 destroyMethod를 명시하여 빈 생명주기 콜백을 등록하는 방식에서, 중요한 장점으로 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다는 점을 꼽아주셨습니다. 그런데 혹시 그게 어떻게 가능한가요?명시한 initMethod와 destroyMethod를 반환되는 빈 객체 내부 메소드에서 찾는 것 같은데, 그러면 그 외부 라이브러리 클래스 내부에 메서드를 작성해서 해당 메서드 명을 명시해주어야 할 필요가 있지 않은가요?아니면 혹시 해당 외부 라이브러리 클래스를 상속 받는 별도의 클래스를 작성한 뒤, 해당 클래스에 init, close 메소드를 구현한 뒤, 그 클래스를 빈으로 등록하는 방식일까요? 아니라면 어떤 식으로 등록할 수 있나요? 만약 상속해서 구현하는 방식이라면, InitializingBean, DisposableBean 인터페이스를 구현하는 방식도, 외부 라이브러리 클래스를 상속 받는 클래스를 작성한 뒤, 해당 클래스가 InitializingBean, DisposableBean을 구현하게끔 하고 그 클래스를 빈으로 등록하면 안되나요? (@PostConstruct와 @PreDestory로 등록하는 방식도 마찬가지로 외부 라이브러리 클래스를 상속 받은 뒤 구현할 수 없는 건가요?) 이러한 경우 어떠한 문제가 발생하나요? 직접 코드를 수정할 수 없는 외부 라이브러리에 빈 생명주기 콜백을 등록할 수 있는지 여부로 장단점이 나뉘었는데, 상속해서 등록하는 방식이라면 모두 다 가능하지 않은가 싶어서 질문 드리게 되었습니다. 잘못 이해한 부분이 있다면 알려주시면 감사드리겠습니다. 관련 강의'섹션 8. 빈 생명주기 콜백' - 빈 등록 초기화, 소멸 메서드
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
D,E이미니사이즈
안녕하세요 d,e타입 슬라이드 이미지 사이즈는 포토샵에서 몇으로 작업해야하는지 알 수 있을까요~??
-
미해결AWS Certified Advanced Networking - Specialty 자격증 준비하기
안녕하세요, 업데이트 문의드립니다.
현재 덤프 기준으로 문제풀이까지 업데이트 된 걸까요?최근 문제와는 일치하지 않아서 업데이트 이후에 다시 학습하려고 질문드립니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
PermissionError: [WinError 5] 액세스가 거부되었습니다
안녕하세요 강의에서 알려주신 내용 바탕으로 해보고 있는데 어느순간부터 'PermissionError: [WinError 5] 액세스가 거부되었습니다' 라는 메세지가 나옵니다.해당 메세지가 가르키는 줄을 보면 아래 코드중 service 부분에서 발생합니다. 어떻게 하면 수정할수있을지 도움말씀 부탁드립니다.service = Service(executable_path=ChromeDriverManager().install()) browser = webdriver.Chrome(service=service, options=chrome_options)
-
미해결Flutter 초입문 왕초보편
에뮬레이터 실행
왜 에러가 발생하죠? 코드분석하려고 실습파일을 가져와서 불러왔는데 에뮬레이터실행이 안됩니다
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
업로드 관련 문의
선생님, 안녕하세요 :)부트캠프 참여 전, 자바 개념을 잡기 위해 본 강의를 열심히 수강 중인 학생입니다.우선 양질의 강의 진행해 주심에 진심으로 감사드립니다! 더불어, 깃허브와 블로그에 학습 내용 정리와 관련하여 문의드립니다.해당 질문 관련 1월과 3월에 답변 주신 내용이 다소 상이하여 재문의 드리는 점 양해 부탁드리며,하기 조건에 유의할 경우 클래스 이후 강의까지 업로드 가능한지 궁금합니다.답변 기다리겠습니다, 감사합니다! :) 강의 내용을 응용한 코드를 작성해 깃허브와 블로그에 개인 복습용으로 업로드하고자 합니다.제가 아직 기초 단계인지라 강의 진행 흐름과 풀이 과정이 다소 유사할 수 있으나,클래스 강의부터는 제가 이해한 내용을 정리하는 차원에서 최대한 정제해 업로드할 예정입니다.'[Inflearn] 나도코딩의 자바 기본편' 출처를 필수 기재할 예정입니다.블로그의 경우, 이익 창출과 전혀 무관합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
test파일의 application.yml 내용 없는경우
test디렉토리의 resouces패키지를 만들고, 그 안에 application.yml 을 생성해서 인메모리모드를 보여주셨습니다.아무 코드가 없는 백지상태여도 인메모리모드로 돌아간다고 하셨는데요, 그래도 내용만 빌 뿐이지, 인메모리 환경을 위해서는 꼭 application.yml파일이 test디렉토리의 해당경로에 존재해야하는게 맞나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원조회가 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원등록을 하지 않았으 때 회원 조회를 하게되면 # 이름은 뜨게 되는데 회원등록을 하고 난 후 회원조회를 하게되면 오류가 뜹니다. 도와주시면 감사하겠습니다!https://github.com/JongchanJeon/starter_Spring 감사합니다.
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
nom update check failed는 어떠한 이유로 뜨는 것인 지 궁금합니다.
안녕하세요 선생님 덕분에 강의 잘 수강하고 있습니다.다름이 아니라 back-end project를 실행하는데npm run dev 를 실행하면 정상적으로 서버도 돌아가고 /api/docs 경로도 잘 조회가 됩니다. 다만 저 경고문구는 왜 뜨는지 궁금합니다..!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@Component, @RequestMapping에 관하여
@Controller를 클래스 레벨에 붙이면 스프링에서 애노테이션 기반 컨트롤러로 인식한다고 학습했습니다.강의 10분 쯤에서 @RequestMapping과@Component를 같이 클래스 레벨에 쓰면 @Component에 의해 스프링 빈에 등록돼서 매핑정보로 인식된다고 하셨는데 그렇다면 이것도 애노테이션 기반 컨트롤러로 인식되는 건가요? 그렇다면 스프링 빈에 등록될 때 빈 이름은 무엇으로 등록되나요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
chapter_2 , build 파일 실행불가...
기존에 이미 작성되어있던 코드를 지우고 제가 영상보면서 연습 차 다시 작성했는데..-_-;저장하고 그 후에 ./build 실행하니 다양한 오류가 뜨더라구요... raineesm@DESKTOP-VLU7A79:~/Matbi_VerilogHDL_Season1/chapter_2$ ./buildWARNING: [XSIM 43-3479] Unable to increase the current process stack size.INFO: [VRFC 10-2263] Analyzing Verilog file "/home/raineesm/Matbi_VerilogHDL_Season1/chapter_2/tb_clock_generator.v" into library workINFO: [VRFC 10-311] analyzing module tb_clock_generatorERROR: [VRFC 10-8414] extra comma in port association list is not allowed [/home/raineesm/Matbi_VerilogHDL_Season1/chapter_2/tb_clock_generator.v:56]ERROR: [VRFC 10-8530] module 'tb_clock_generator' is ignored due to previous errors [/home/raineesm/Matbi_VerilogHDL_Season1/chapter_2/tb_clock_generator.v:21]Vivado Simulator v2022.2Copyright 1986-1999, 2001-2022 Xilinx, Inc. All Rights Reserved.Running: /home/raineesm/tools/Xilinx/Vivado/2022.2/bin/unwrapped/lnx64.o/xelab tb_clock_generator -debug wave -s tb_clock_generatorMulti-threading is on. Using 2 slave threads.ERROR: [XSIM 43-3225] Cannot find design unit work.tb_clock_generator in library work located at xsim.dir/work.ERROR: Please check the snapshot name which is created during 'xelab',the current snapshot name "xsim.dir/tb_clock_generator/xsimk" does not exist
-
미해결[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
코랩 실행여부 관련
코랩 실행시 에러메시지가 자주 뜹니다 ㅠㅠ가령 보스턴 집값 예측하기(4-1)강의를 수강 중인데첫줄부터 실행을 누르면 아래와 같이 에러메시지가 뜨고,하위 코드도 전부 에러가 뜹니다. [Errno 2] No such file or directory: '/content/gdrive/My Drive/deeplearningbro/pytorch' /content
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
aws 포트지정
노드버드 프로젝트를 하나의 인스턴스에서 프론트와 백 서버 둘다 올리기 위해서aws 인스턴스 3000번 포트와 3065번 포트를 열어놓으려고 하는데 사용자지정tcp에서 열어놓으면 되는걸까요?
-
미해결
테스트
테스트
-
미해결토비의 스프링 부트 - 이해와 원리
5:40분초 쯤에... 프로퍼티클래스의 분리 강의에서
@Bean @ConditionalOnMissingBean public ServletWebServerFactory jettyServletWebServerFactory(ServerProperties serverProperties){} 이부분에 ServerProperties 을 따로 주입을 안받아도 되나요..? 빈으로 띄워서 그런건가..?매개변수에 딱 저렇게 누가 넣어주는건가요..?@Autowired없이..? 헷갈리네요 ㅠㅠㅠ
-
해결됨[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
이클립스에서 javascript 람다 사용이 가능한가요??
안녕하세요. 11분 15초 쯤부터 Javascript의 람다식을 사용하면 된다고 말씀해주셨습니다. $(document).ready(function() { $("#regBtn").click(()=> { location.href="<c:out value='/register.do'/>"; }); });이클립스에서 ES6 문법 사용이 가능한가요???람다식은 ES6부터 나온 기능으로 알고 있습니다. 이와 같은 버전에 나온 백틱(`)을 사용하려고 했는데, 이클립스에서 에러 표시를 내서 사용을 안 하고 있었습니다.19년 3월 버전의 이클립스 환경에서 보면, Legacy 프로젝트를 생성했는데 ECMA 3 Browser Support Library라고 되어있길래 ES6은 지원이 안 되나 싶었습니다.(다시 보니 ECMA Script가 아니라 ECMA 3 Browser네요 ㅎㅎ; 제가 잘못 예측한 것일 수도 있겠네요)이클립스에서 ES6 버전의 JS를 쓰면 Ajax 결과로 나오는 흔한 JSON 데이터를 편하게 불러올 수 있을텐데 말이죠 ㅠㅠ항상 친절한 답변 감사합니다. 강의 잘 보고 있습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
따로 분리한 getAccessToken() 함수 result의 타입
강의를 보고 똑같이 따라했지만 저는 result에 타입이 unknown이라고 뜨네요. 이때문인지는 모르겠지만 로그인 후 넘어간 페이지에서 버튼 누르는 과정에서 오류가 뜹니다.ㅜ아래는 아폴로 세팅입니다. 문제가 무엇일까요?import { ApolloClient, ApolloLink, ApolloProvider, fromPromise, InMemoryCache, } from "@apollo/client"; import { onError } from "@apollo/client/link/error"; import { createUploadLink } from "apollo-upload-client"; import { useEffect } from "react"; import { useRecoilState } from "recoil"; import { getAccessToken } from "../../../commons/libraries/getAccessToken"; import { accessTokenState } from "../../../commons/store"; const GLOBAL_STATE = new InMemoryCache(); interface IApolloSettingProps { children: JSX.Element; } export default function ApolloSetting(props: IApolloSettingProps) { const [accessToken, setAccessToken] = useRecoilState(accessTokenState); // 3. 프리랜더링 무시 - useEffect useEffect(() => { console.log("지금은 브라우저다"); const result = localStorage.getItem("accessToken"); console.log(result); if (result) setAccessToken(result); }, []); // 에러를 캐치하고 캐치한 에러가 토큰만료면 재발급 받은 후, 기존의 쿼리를 포워드해서 다시 날려준다. const errorLink = onError(({ graphQLErrors, operation, forward }) => { // 1-1. 에러를 캐치 if (graphQLErrors) { for (const err of graphQLErrors) { // 1-2. 해당 에러가 토큰만료 에러인지 체크(UNAUTHENTICATED) if (err.extensions.code === "UNAUTHENTICATED") { return fromPromise( // 2-1. refreshToken으로 accessToken을 재발급 getAccessToken().then((newAccessToken) => { // 2-2. 재발급 받은 accessToken 저장하기 setAccessToken(newAccessToken); // 3-1. 재발급 받은 accessToken으로 방금 실패한 쿼리의 정보 수정하기 if (typeof newAccessToken !== "string") return; operation.setContext({ headers: { ...operation.getContext().headers, // 만료된 토큰이 추가되어 있는 상태 Authorization: `Bearer ${newAccessToken}`, // 토큰만 새것으로 바꿔치기 }, }); }) ).flatMap(() => forward(operation)); // 3-2. 방금 수정한 쿼리 재요청하기 } } } }); const uploadLink = createUploadLink({ uri: "https://backendonline.codebootcamp.co.kr/graphql", // https 로 변경(토큰 정보를 쿠키에 담을 수 있게) headers: { Authorization: `Bearer ${accessToken}` }, credentials: "include", // https 변경으로 추가된 조건 }); const client = new ApolloClient({ link: ApolloLink.from([errorLink, uploadLink as unknown as ApolloLink]), // cache: new InMemoryCache(), cache: GLOBAL_STATE, }); // prettier-ignore // 주석으로 prettier-ignore 해주면 한줄로 바뀌는걸 막아준다 return <ApolloProvider client={client}> {props.children} </ApolloProvider>; }혹시 이부분때문일까요??link: ApolloLink.from([errorLink, uploadLink as unknown as ApolloLink])
-
미해결플러터(Flutter) 앱 개발 입문부터 프로젝트 완성까지
개발환경 구축에서 프로그램 다운로드 어디서 하나요?
설명란에 링크 있다고 했는데 링크가 없어요...3개 파일 어디서 다운 받을 수 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.remove 동작 안함 이유?
Member.classpackage dev.devpool.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private long id; @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) List<Child> children = new ArrayList<>(); public List<Child> getChildren() { return children; } public void setChildren(List<Child> children) { this.children = children; } private String name; private String nickName; private String email; private String password; public Member() { } public Member(String name, String nickName, String email, String password) { this.name = name; this.nickName = nickName; this.email = email; this.password = password; } public long getId() { return id; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public String getName() { return name; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } Child.classpackage dev.devpool.domain; import javax.persistence.*; @Entity public class Child { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; public long getId() { return id; } public void setId(long id) { this.id = id; } public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } }로 부모를 Member 자식을 Child로 만들고 delete 시 cascade가 적용되는지를 체크하려 하였습니다. MemberRepository에서 delete 쿼리를 아래와 같이 작성하였습니다.Test 코드는 아래와 같습니다.@Test public void ss() { Member member = new Member(); member.setName("김우"); member.setEmail("rereers15@naver.com"); member.setPassword("taeu4"); member.setNickName("귀요미"); Child child = new Child(); child.setMember(member); member.getChildren().add(child); memberService.join(member); em.flush(); em.clear(); System.out.println("================"); memberService.delete(member.getId()); System.out.println("================"); } SQL 하지만 em.remove 부분이 동작하지 않습니다.이유가 무엇인가요? ** save메서드에서 저장 후 remove()를 하는 것을 실험해보았는데 이 경우는 delete 쿼리까지 정상 출력됩니다. 영속성 컨텍스트와 @Transaction과 관련된 이슈인 것같은데 이와 관련해서 설명해주시면 감사하겠습니다.
-
해결됨코딩은 실전이다! - Git알못을 위한 깃린이코스(Git, Github 실습위주)
slack 초대 부탁드립니다.
seliscos@gmail.com입니다.