묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
예외처리가 된 건가요? 아님 에러인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.package hello.hellospring.service; import hello.hellospring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.Optional; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberService memberService = new MemberService(); @Test void join() { //given Member member = new Member(); member.setName("hello"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); Assertions.assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); try { memberService.join(member2); fail(); } catch (IllegalAccessError e) { //예외가 터져서 정상적으로 성공한 것 assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } //then } @Test void findMembers() { } @Test void findOne() { } } java.lang.IllegalStateException: 이미 존재하는 회원입니다. at hello.hellospring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:26) at java.base/java.util.Optional.ifPresent(Optional.java:178) at hello.hellospring.service.MemberService.validateDuplicateMember(MemberService.java:25) at hello.hellospring.service.MemberService.join(MemberService.java:18) at hello.hellospring.service.MemberServiceTest.중복_회원_예외(MemberServiceTest.java:45) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Process finished with exit code -1 이렇게 빨간 느낌표가 뜨면 테스트 자체가 잘못된다는 건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
MappedBy는 읽기 전용으로 사용하는게 좋다고 하셨는데 CASCADE는 어떻게 등장한건가요?
[질문 템플릿]1. 예2. 예3. 예[질문 내용]CASCADE와 고아 객체 둘다 관계의 주인이 아닌 MappedBy 속성을 갖는 객체를 통해 주인 객체에 영향을 주는 것 같은데CASCADE가 수행하는 작업방식 보다주인 쪽에서 Insert를 수행하고 List쪽에 업데이트 된 주인 객체의 리스트를 읽어오는 게 더 자연스럽지 않나 의문이 들었습니다.고아 객체 또한 주인 쪽에 DELETE를 수행하고변화된 List를 읽어들이는게 저에겐 더 자연스럽게 느껴집니다.왜 CASCADE와 고아객체를 활용하면서 까지 주인 객체가 아닌 반대편에서 DB를 수정하는 작업을 수행하는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문할 경우 null값으로 member에 행이 추가되는
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 주문할 경우 따로 오류는 발생하지 않는데 주문 목록을 보면 회원명이 보이지 않습니다. 또한 주문할때마다 member 테이블에 null값으로 행이 하나씩 추가가 됩니다. 오류가 따로 안떠서 어떻게 해결해야할지 몰라 질문드립니다. 구글 드라이브에 파일올립니다..https://drive.google.com/drive/folders/1faJLS1AmApbM9t_cW_olFKj3YLvaBfQg?usp=drive_link
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
pyhwpx를 가지고 사용법을 공유해주실수는 없을까요?
pyhwpx를 가지고 사용법을 공유해주실수는 없을까요?블로그는 다 비공개인데 강의에 있는줄 알고 강의 샀는데pyhwpx에 대한 내용은 없네요. ㅠ.ㅠ
-
미해결파이썬 기초 라이브러리부터 쌓아가는 머신러닝
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 코드를 못가져오고 하드코딩해야할까요?