묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 기초 라이브러리부터 쌓아가는 머신러닝
seaborn에서 연습 데이터셋을 불러오는데 오류가 발생합니다.
안녕하세요. 항상 좋은 강의 감사드리며 질문이 있어 글 남기게 되었습니다. 데이터 시각화 강의에 들어서며 seaborn 모듈에서 제공하는 연습 데이터셋을 불러오려고 하는데아래와 같은 오류가 발생하며 데이터셋 불러오기를 실패하였습니다.tips = sns.load_dataset('tips')
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
배열 리펙토링
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]배열 리팩토링에서 9분34초에 자막 오타 있습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
logging.level.hello.itemserivce.repository.mybatis=trace 로깅레벨적용
강의 후반에 logging level 을 trace로 하여 확인하는데 무슨 문제인지 확인이 되지 않네요.. debug까지만 먹히고 trace는 먹히지 않습니다.
-
미해결Next + React Query로 SNS 서비스 만들기
history stack 에서 특정 item제거하기
상황 :routera-> b-> c-> d-> c 로 이동 했을 때 c에서 뒤로가기 이벤트가 발생하면 (혹은 뒤로가기를 누르면) b 로 이동 하도록 구현하고자 합니다. 다만 d에서 뒤로가기 시에는 c로 이동하길 원합니다. 현재 구현 상태는c : router.push(d)d : router.replace(c)이 방법은 c 에서 뒤로가기를 눌러도 c로 가버리는 한계가 있습니다. 따라서, replace(c) 이전에 history에서 직접 c를 제거해 주는 방법을 생각 중인데, (앱 개발할 때 가능했던 기억이 있어서) 검색을 해도 답을 찾지 못하고 있습니다. 답변 주시면 감사하겠습니다 !
-
해결됨Next + React Query로 SNS 서비스 만들기
next-auth Login 시 middleware 이슈 질문 드립니다.
안녕하세요.next-auth 로그인시 해결되지 않는 부분이 있어서 질문드립니다. 로그인을 계속 실패하고 있습니다.next-auth의 버젼 (4였다가 삭제하고 3으로도 시도 해봤습니다.) "dependencies": { "next-auth": "^5.0.0-beta.3", },로그인을 시도했을때 뜨는 화면:The Middleware "/src/middleware" must export a middleware or a default functionThis error happened while generating the page. Any console logs will be displayed in the terminal window.로그인을 시도했을때 콘솔 화면:로그인을 시도했을때 네트워크 화면 :middleware.ts code 입니다.import { auth as middleware } from "./auth"; // See "Matching Paths" below to learn more export const config = { matcher: ["/compose/tweet", "/home", "/explore", "/messages", "/search"], }; auth.ts code 입니다. import NextAuth from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; console.log("-", process.env.AUTH_URL); export const { handlers: { GET, POST }, auth, signIn, } = NextAuth({ pages: { signIn: "/i/flow/login", newUser: "/i/flow/signup", }, providers: [ CredentialsProvider({ async authorize(credentials) { const authResponse = await fetch(`${process.env.AUTH_URL}/api/login`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: credentials.username, password: credentials.password, }), }); if (!authResponse.ok) { return null; } const user = await authResponse.json(); return user; }, }), ], }); handers.ts의 로그인쪽 코드입니다.import { http, HttpResponse, StrictResponse } from "msw"; import { faker } from "@faker-js/faker"; export const handlers = [ http.post("/api/login", () => { console.log("로그인"); return HttpResponse.json({ id: "zerohch0", nickname: "제로초", image: "/5Udwvqim.jpg" },, { headers: { "Set-Cookie": "connect.sid=msw-cookie;HttpOnly;Path=/", }, }); }), ];
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
영상을 멈추고 한번 풀어 보았습니다.
//query-runner.decorator.tsimport { ExecutionContext, InternalServerErrorException, createParamDecorator, } from '@nestjs/common'; import { QueryRunner } from 'typeorm'; export const QueryRunnerDecorator = createParamDecorator( (data: unknown, context: ExecutionContext): { qr: QueryRunner } => { const req = context.switchToHttp().getRequest(); if (!req.queryRunner) { throw new InternalServerErrorException('queryRunner가 없습니다.'); } return { qr: req.queryRunner, }; }, ); //posts.controller.ts@Post() @UseGuards(AccessTokenGuard) @UseInterceptors(TransactionInterceptoer) async postPosts( @User('id') userId: number, @Body() body: CreatePostDto, @QueryRunnerDecorator() qr: QueryRunner, ) { .... 중략 }트랜잭션을 interceptor로 관리하는것을 배워서 너무 유익하고 100점 만점의 100점 꿀팁이었습니다.https://www.npmjs.com/package/typeorm-transactional해당 라이브러리를 원래 사용 했으나, 마음에 들지 않았었는데 덕분에 interceptor로 대체 할 수 있을것 같습니다 좋은 강의 만들어 주셔서 감사합니다!
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
섹션 8. 배열 - 문제와풀이3
안녕하세요 강사님 productAdminEx 문제에 관련해서 질문이 있습니다.productNames[productCount] = scanner.nextLine(); 이게원래 배우던 형식으로는 두번째 사진처럼 for문 안에서productNames[i] = scanner.nextLine(); 이런식이어서 예를들어 i = 0인경우 productNames 배열의 0번째 인덱스에 scanner.nextLine();으로 사용자가 입력한 값이 들어가는건 이해가 가는데 productNames[productCount] = scanner.nextLine(); 면 productNames배열 안에 있는 productCount에 scanner.nextLine();로 사용자가 입력한 값을 넣는건가요..? 그리고 그 사용자가 입력한 값이 들어가있는 productCount를 productNames배열이 위치를 참조하고 있는걸까요?? 이해가 잘 안가서 질문드립니다. (첫번째 사진) (두번째 사진) productNames[productCount] = scanner.nextLine(); 이게productNames의 배열 자리에 productCount의 값을 넣는다는 의미인가요? 이해가 안갑니다..ㅜ
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 궁금증
@Transactional public void writeDelete(int id) { writeRepository.deleteById(id); } //위에는 서비스 계층입니다 아래는 데이터 접근 계층입니다 public void deleteById(int id) { try { String sql = "delete table member where id=?"; template.update(sql, id); sql="aaaa"; template.update(sql); } catch (DataAccessException e) { throw new RuntimeException(e); } }Q. 이상태에서 실행해봤는데 왜 롤백이 안될까요?? 테스트 코드에서 실행한건 아닙니다.
-
해결됨개발자를 위한 쉬운 도커
이미지안에는 OS 에 관련 궁금한 사항
현재 강좌까지 들은 상황에서 궁금한 점이 있어 글을 쓰게 되었습니다.이미지 안에 OS 도 포함된 것으로 보이는데 그렇다면 이미지를 만드는 주체자는 각 OS 별로 별도로 파일들을 만들어줘야 하나요? 그렇다면 너무 많은 이미지를 생성해야하는 것 아닌가 하는 의문이 듭니다. -- 강의 설명이 아주 친절해서 좋은 것 같아요. :)
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Vitis 프로그램 없이 C 코드를 돌릴 수 있나요??
=================현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================안녕하세요 항상 좋은 강의 감사합니다!! 9장의 LED 점등하기 예제를 응용해서 거의 유사한 프로젝트를 구현했습니다.그런데 이를 실행하기 위해서 강의 영상처럼 Vitis 프로그램 내에서 실행시키지 않고 Flash에 fpga 프로그래밍 정보를 넣어주고 흔히 사용하는 vscode 등의 IDE를 통해서 C 코드를 실행하여서 다른 UART terminal로 Register 정보를 받아오는게 가능할까요?? 감사합니다.
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
transaction interceptor을 사용할때 validation이 안되는 문제
transaction interceptor을 사용할때 body field validation이 안되는 문제가 발생하여 query runner와 transaction interceptor 두코들 제외 하니 validationdl 다시 되었습니다.혹시 어떤문제인지 알수 있을까요?
-
미해결프론트엔드 개발환경의 이해와 실습 (webpack, babel, eslint..)
Error: Cannot find module 'node:crypto'
"devDependencies": { "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.2", "husky": "^8.0.3", "lint-staged": "^15.2.0", "prettier": "^3.1.1", "webpack": "^4.41.5", "webpack-cli": "^3.3.10" },일때module.exports = { env: { node: true, browser: true, }, extends: ["eslint:recommended", "plugin:prettier/recommended"], globals: { Atomics: "readonly", SharedArrayBuffer: "readonly", }, parserOptions: { ecmaVersion: "latest", sourceType: "module", }, plugins: ["prettier"], rules: { "prettier/prettier": "error", }, }; 노드 버전이 원인인가요 ?14 버전 입니다..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
포스트매핑은
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기서 print가 되는것은 제가 등록버튼을 눌렀을 때 되더라구요 postmapping은 등록하는 경우에 실행되게 해주는 것 맞나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
servlet에 대해 제 생각을 한번 정리해봤습니다
강의를 듣고 다른분들도 그렇고 저도 그렇고 이해가 안가는 부분이 있어서 다른분들도 보고 이해할수있도록 최대한 자세하고 쉽게 정리해봤는데 ,맞게 이해했을까요?주제는 -servlet의 동작원리-spring container는 어떻게 생성이되었는지-dispatcherservlet가 singleton으로 관리된다고했는데 그러면 spring container와 어떤연관이있는지 -servlet 동작원리1.web brower에서 요청을받고 web server에 넘겨준다음 WAS에 web server에 넘겨주어 servlet container에 service()가 요청을 처리하고 was의 web server에서 반환을 해주어 응답을 해준다 -spring container의 생성과정1.web application을 실행하면 spring boot에서는 web.xml파일을 생성하고 web.xml파일안에 큰 틀에서 보자면 <param>~</param>부분은 root webapplicationcontext로 <servlet>~</servlet>부분은 web applicationcontext로 나뉘게 되는데 그 이유는 2-layered 아키텍쳐로 presentation Layer와 business Layer로 나뉘어서 개발하게 되기때문이다.2.web.xml파일에 ContextLoderListenr가 applicationcontext.xml 또는 root.xml을 로딩하여 applicationcontext(=spring container)를 만들고 1번에서 언급한 business layer에 필요한 DAO 등 설정을 함으로써 applicationcontext를 생성한다.여러정보를 찾아볼때 xml으로만 tomcat이 구현될때 servlet context와 application context가 생성이 되는줄알았는데 spring boot 3.0? 이상부터 WebApplicationInitializer구현 + AnnotationConfigWebApplicationContext 으로 지원한다고 하여 spring container의 생성과정도 맞지만 더 최신버전으로도 설명하겠습니다. public class WebInitializer implements WebApplicationInitializer{ @Override public void onStartup(ServletContext servletContext) throws ServletException { ... AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation("com.studyspring.basic.config"); ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); ... ... } }1)톰캣을 실행하면 servlet context를 초기화하고 생성해야하는데 tomcat을 실행하면 tomcat이 webapplicationinitializer를 구현한 클래스를 먼저 찾게됩니다. 2)찾고나서 onStartup메소드를 실행하여 Annotationconfigwebapplicationcontext를 통해 applicationcontext를 만들게됩니다. -dispatcherservlet의 생성과정dispatcherservlet같은경우 servlet context가 생성되는 시점(=생성되는 시점도 lazy loading과 pre loading에 따라 달라집니다)에 만들어집니다.(dispatcherservlet은 궁극적으로 servlet이며, servlet은 동적 웹페이지를 만들때 사용되는 웹 프로그래밍 기술입니다. 이모양은 우리가 spring mvc에서 똑같이 볼수있었고 영한님 강의에서도 servlet로 spring mvc를 구현했었습니다. 하지만 하나하나 구현하기에는 어려움이 많았고 이걸 spring boot에서는 간편하게 지원해주기 때문에 spring은 곧 servlet를 쓰기위한 하나의 servlet로 이해할수있습니다. ) -bean은 도대체 왜 나왔으며 servlet container와 spring container는 다른건데 어떻게 쓰이지?위에 코드를 보면 Dynamic dispatcher = servletcontext... 이라고 선언된 부분이 있을텐데 dispatcher은 결국 servlet이고 servlet container에서 관리하는 객체입니다. 저문장의 뜻은 dispatcher을 context(=servlet container)에서 사용하기위해 등록한다는 의미이며 servlet container에서 dispathcerservlet를 spring container에게 보내주어 spring container에서 spring boot가 편리하게제공해주는 기능을 바탕으로 rendering을 한후 다시 return을 해서 dispathcerservlet는 servlet container에 속해있으므로 servlet container가 client에게 view를 보여줍니다. 결국, dispathcerservlet이 spring container에게 보내주어 bean으로 등록되어 spring container가 관리하는 객체가 되고, 결국 싱글톤으로 관리가되며 servlet이 올때마다 같은 인스턴스를 가지고있는 객체로 인식되어 재사용이 가능한 상태로 남게됩니다. 최종적으로 지금까지한 설명을 그림에 빗대어서 마무리하겠습니다. 처음에 설명했던 servlet webapplicationcontext와 root webapplicationcontext는 2-layer 아키텍처로 구현된 모습이며 철저히 구현과 역할이 나누어져있습니다. dispatchersevlet은 spring container가 생성이되고 servlet container에서 사용할수있게 만들어졌고 그로인해 접근이 가능하다. 한객체의 레퍼런스를 두개의 컨테이너에서 들고있어도 문제가 없다는것을 알게되었습니다. 정리후 저의 개인적인 질문입니다!spring container에서 생성이되고 servelt container에서 사용이 됩니다. 하지만 dispatcher servlet은 궁극적으로 servlet이고 관리가 되는 컨테이너는 servlet container라고 생각이되었습니다. 하지만 dispatcher servlet은 싱글톤으로 관리가 되고 인스턴스를 공유할수있다는점에서 spring container와 연관이 있지않나라는 생각도 들었습니다. destory()라는 메소드를 가지고있고 외부에서도 소멸될수있어서 dispatcher servlet이 어떤 container에서 관리가 되는지 궁금합니다
-
미해결스프링 핵심 원리 - 기본편
타입이 아닌 "prototypeBean" 이름으로 빈 조회시 에러
@Test void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean prototypeBean1 = ac.getBean("prototypeBean", PrototypeBean.class); prototypeBean1.addCount(); Assertions.assertThat(prototypeBean1.getCount()).isEqualTo(1); PrototypeBean prototypeBean2 = ac.getBean("prototypeBean", PrototypeBean.class); prototypeBean2.addCount(); Assertions.assertThat(prototypeBean2.getCount()).isEqualTo(1); } @Scope("prototype") static class PrototypeBean { private int count = 0; ... }강의에서는 PrototypeBean.class만 사용하여 타입으로 조회를 했습니다. PrototypeBean 클래스가 컴포넌트스캔되므로, 해당 클래스의 이름은 PrototypeBean을 이름으로 넣어서 조회했으나 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'prototypeBean' available빈을 찾을수 없다고 합니다. prototypeBean으로 첫 글자를 소문자로 변경하여도 동일합니다.해당 클래스의 객체가 빈으로 등록될 때 빈 이름을 지정하는 방식을 제가 잘못 이해하고 있는건지, 이름으로 조회를 하고싶은데 어떻게 히면 좋을지 궁금합니다.
-
미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
html 어디서 가져오나요?
안녕하세요 제로초님 강의를 보면서 느낀게 html 코드들을 어디서 가져오는지 모르겠어서 여쭤봅니다. 2년전 답글에 링크가 있어서 링크 클릭해봤는데 없다고 뜨는데 현재는 html 코드를 못가져오고 하드코딩해야할까요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
반년넘게 C#해도 이해라는게 도저히 안갔는데
C++하니까스택이고 힙이고 참조고 이해가 됩니다진짜 왜 C#을 먼저했을까요? 감사합니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
타임리프 태그??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]<html lang="en">로 해도 정상실행이 되는데 했을 때와 차이는 무엇인가요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[join() 강의] join() 작동 방식 정리 관련 질문이 있습니다.
안녕하세요. 선생님 join() 강의를 듣다가 11:09 내용 [join() 작동 방식] 관련해서 질문이 생겨서 질문을 남기게 되었습니다! 해당 페이지 첫번째 줄에 의하면 join()을 실행하면 현재 스레드는 대기 상태가 되고 join()을 수행중인 스레드에게 CPU를 사용하도록 한다라고 말씀 해주셨는데요.여기서 말씀을 해주신대로라면 join()을 수행중인 스레드가 바로 RUNNING 상태가 되면서 CPU를 할당받는 것인가요?아니면 그냥 스케줄러에 의해서 RUNNABLE 상태에 있던 join()을 수행중인 스레드 가 자기 차례가 되어서 RUNNING 상태가 되는 것인지 궁금합니다.현재 스레드가 자신의 차례를 join()을 수행중인 스레드에게 양보를 함으로써 join()을 수행중인 스레드가 즉시 실행이 되도록 하는것인지, 아니면 현재 스레드가 자신의 차례를 그냥 넘기게 되고 join()을 수행중인 스레드는 OS 스케줄러에 의해서 추후에 실행이 된 것인지 의문이 들어서 여쭤보게 되었습니다.5번째 내용을 보면 join()을 수행중인 스레드 에게 인터럽트가 발생할 경우, 현재 스레드는 대기에서 해제되고 실행상태로 전환되어 예외를 처리한다고 되어있습니다.join()을 수행중인 스레드 에게 인터럽트가 발생하는 것이 아니라 현재 스레드에게 인터럽트가 발생해야 현재 스레드가 대기에서 해제되고 실행상태가 되어서 예외를 처리하는게 아닌지 궁금합니다.30:00 내용을 보면 Main 스레드에게 인터럽트를 걸어야 대기에서 빠져나온다고 말씀을 해주셨습니다.1번 질문과 결이 비슷한 질문입니다.join()을 해제시키기 위해서 특정 스레드에게 인터럽트를 걸게 되면 해당 스레드는 WAITING 상태에서 RUNNING 상태로 바로 가는 것이 아니라, RUNNABLE 상태로 바뀐 후 자신의 차례에 RUNNING이 된다고 이해를 하면 되는 것일까요 ??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
프론트 컨트롤러 생성자는 한번만 실행되는게 맞나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 프론트 컨트롤러에 컨트롤러를 new해주어 객체를 생성하였는데 FrontControllerServletV1() 이라는 생성자가 서블릿 컨테이너에 서블릿이 등록되기 위해 호출되는 것이 맞나요?맞다면 이 생성자는 서블릿을 등록할 때, 딱 한 번만 실행되는건가요?