묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 데이터 JPA
섹션 5 사용자 정의 레포지토리 구현 질문드립니다.
기본적인 java 개념 부족일수도 있습니다만강의 내용중에 사용자 정의레포지를 만들땐 Impl을 뒤에 꼭 붙여야 한다고 나와있고, 최신화된 강의내용을 봐도 그렇게 알고있는데요,그런데 이게 왜 Spring Data JPA에서 제공해야하는 기능인지 이해가 잘 안갑니다. Spring Data JPA가 지원을 안해주면 왜 오류를 뱉어야 하는지가 궁금합니다. 예를들어public interface RepositoryAInterface 와이를 구현한public class RepositoryA implements RepsitoryAInterface가 있다고 했을때,그리고 RepositoryA를 JPA을 이용하여 구현할때,EntityManager를 DI해서 직접 구현 하잖아요?그럼 끝난거 아닌가요? Spring Data JPA를 사용하는public interface RepositoryBInterface extends JPARepository<>가있다고 하면요.여기서 extends RepositoryA를 하나 추가했다고 해서 왜 에러가 나는 것인가요?그냥 이게 Spring Data JPA가 아니라 일반적인 java라고 생각해봤을때RepositoryBInterface가 있고, 이 인터페이스는RepositoryAinterface를 extends하였고,RepositoryAinterface는 Repository가 구현하고있으니RepositoryBInterface만 구현하면 되는거 아닌가요?그리고 이것은 SpringDataJpa가 해주고요Spring Data Jpa가 RepositoryAinterface에 대해 근본적으로 왜 알아야하는 궁금합니다. 근데 알아야 하니까 Impl을 붙어야 작동하겠죠?만약에 Impl이 없으면 어떠한 동작과정중에 에러가 생겨 동작을 제대로 하지 않는 것일까요..?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
addForm 페이지에 들어가면 오류가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래 코드는 addForm.html 코드이고<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <link href="../css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> <style> .container { max-width: 560px; } </style> </head> <body> <div class="container"> <div class="py-5 text-center"> <h2>상품 등록 폼</h2> </div> <h4 class="mb-3">상품 입력</h4> <form action="item.html" th:action method="post"> <div> <label for="itemName">상품명</label> <input type="text" id="itemName" name="itemName" class="form- control" placeholder="이름을 입력하세요"> </div> <div> <label for="price">가격</label> <input type="text" id="price" name="price" class="form-control" placeholder="가격을 입력하세요"> </div> <div> <label for="quantity">수량</label> <input type="text" id="quantity" name="quantity" class="form- control" placeholder="수량을 입력하세요"> </div> <hr class="my-4"> <div class="row"> <div class="col"> <button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록</button> </div> <div class="col"> <button class="w-100 btn btn-secondary btn-lg" onclick="location.href='items.html'" th:onclick="|location.href='@{/basic/items}'|" type="button">취소</button> </div> </div> </form> th:onclick="|location.href='@{/basic/items}'|" type="button">취소</button> </div> <!-- /container --> </body> </html>package hello.itemservice.web.basic; import hello.itemservice.domain.item.Item; import hello.itemservice.domain.item.ItemRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller @RequestMapping("/basic/items") /** * basic/items로 get 방식으로 오면 @GetMapiing 메소드가 실행이 된다. */ @RequiredArgsConstructor /** * @RequiredArgsConstructor을 쓰면 * final이 붙은 멤버에게는 * @Autowired * public BasicItemController(ItemRepository itemRepository) { * this.itemRepository = itemRepository; * }라는 생성자를 자동으로 만들어준다. */ public class BasicItemController { /** * 1.BasicItempContorller가 스프링 빈에 등록이 되면서 * 2.생성자 주입으로 스프링 빈으로 등록되어 있는 ItempRpository가 스프링 빈에서 주입이 된다. * * 1.Spring 컨테이너 초기화: 애플리케이션이 시작될 때 Spring 컨테이너가 초기화되고 구성 파일을 로드합니다. * 이 때 @Autowired 어노테이션을 확인하고 의존성 주입을 준비합니다. * 2.빈 객체 생성: Spring은 컨테이너에서 관리하는 빈(bean) 객체를 생성합니다. * 빈 객체는 @Component, @Service, @Repository, @Controller 등과 같은 어노테이션으로 표시된 클래스들을 기반으로 생성됩니다. * 3.의존성 주입: @Autowired 어노테이션이 적용된 생성자, 필드 또는 메서드를 확인하고 해당 의존성을 주입합니다. * 이때, BasicItemController 클래스에 있는 @Autowired 어노테이션이 적용된 생성자가 호출되면서 ItemRepository의 인스턴스가 주입됩니다. * @Autowired란 스프링 컨테이너에 등록한 빈에게 의존관계주입이 필요할 때, * DI(의존성 주입)을 도와주는 어노테이션이다. 스프링 컨테이너에 빈들을 모두 등록한 후에, 의존성 주입 단계가 이루어진다. * 4.애플리케이션 실행: 모든 초기화 작업이 완료되면 Spring은 애플리케이션을 실행합니다. */ private final ItemRepository itemRepository; @GetMapping public String items(Model model){ List<Item> items = itemRepository.findAll(); model.addAttribute("items",items); return "basic/items"; // Return 되는 뷰 위치. } @GetMapping("/{itemId}") public String item(@PathVariable long itemId,Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item",item); return "basic/item"; } /** * 실제로 데이터를 넣는 것이 아닌 form만 보여준다. * * form을 열때는 get * 실제 저장을 할 떈 post 사용 * URL을 똑같게 지정한다. 이떄, 같은 URL로 오더라도 Get이나 post에 따라 addForm을 실행하거나 save를 실행한다. */ @GetMapping("/add") public String addForm(){ return "basic/addForm"; } /** * * addForm.html form에 있는 name과 변수명을 동일하게 해야한다. * 이 코드에서 @ModelAttribute 가 html 의 name 속성과 Item class 를 매칭시켜주고 * 그래서 itemRepository에 저장 로직에서 사용된다는 거까지는 이해했습니다 */ // @PostMapping("/add") public String addItemV1(@RequestParam String itemName, @RequestParam int price, @RequestParam Integer quantity, Model model){ Item item=new Item(); item.setItemName(itemName); item.setPrice(price); item.setQuantity(quantity); itemRepository.save(item); model.addAttribute("item",item); return "basic/item"; } // @PostMapping("/add") public String addItemV2(@ModelAttribute("item") Item item,Model model){ itemRepository.save(item); // model.addAttribute("item",item); return "basic/item"; } //@PostMapping("/add") public String addItemV3(@ModelAttribute Item item){ itemRepository.save(item); // model.addAttribute("item",item); return "basic/item"; } // @PostMapping("/add") public String addItemV4(Item item){ itemRepository.save(item); return "basic/addForm"; } /** * PRG - Post/Redirect/Get */ @PostMapping("/add") public String addItemV5(Item item) { itemRepository.save(item); return "redirect:/basic/items/" + item.getId(); } @GetMapping("/{itemId}/edit") public String editForm(@PathVariable Long itemId,Model model){ Item item = itemRepository.findById(itemId); model.addAttribute("item",item); return "basic/editForm"; } @PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId,@ModelAttribute Item item){ itemRepository.update(itemId,item); // @ModelAttribute Item item라고 작성을 하면 item객체를 가져옴 return "redirect:/basic/items/{itemId}"; // 이렇게 리다이렉트로하면 PathVariable에 있는 것을 사용할 수 있음. //리다이렉션 부분 상품 수정 7분부터 다시 들어보기 이해안됨 /** * 상품명을 itemD로 변경하면 edit이 호출되고 http 상태가 302가 된다 * 이때, location은 items/2로 되는데 이것은 eidt의 결과가 리다이렉트라서 웹 브라우저가 2번으로 실제 item 2번으로 간다. */ } /** * 테스트용 데이터 추가 */ @PostConstruct public void init(){ itemRepository.save(new Item("itemA",1000,20)); itemRepository.save(new Item("itemB",2000,40)); } } 이것은 BasicItemController 코드입니다. 상품 등록 버튼을 누르면 위와 같은 오류가 발생합니다.그리고2023-09-18T23:32:41.550+09:00 ERROR 29201 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "/basic/items/add" (template: "basic/addForm" - line 17, col 30)] with root cause 라는 오류가 발생합니다.아무리 봐도 오류를 따라가서 수정을 해도 무엇이 문제인지 모르겠습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JdbcMemberRepository 와 JdbcTemplateMemberRepository 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]https://drive.google.com/file/d/1YQ9xwVxwzAN7xvYTOm0Jbky6vjB2e0cd/view?usp=share_link안녕하세요, repository 파일 내 JdbcMemberRepository 와 JdbcTemplateMemberRepository 가 지속적으로 implement 가 되지 않습니다. SpringConfig도 문제없고 데이터베이스도 실행중임을 확인하였는데, 무엇이 문제인지 여쭙습니다. 상단의 프로젝트 링크 참고 부탁드립니다.
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
함수 관련 질의
안녕하세요.제네레이터 예제 강의듣다가 궁금한 점이 있어아래와 같은 코드를 작성해서 실행해보았는데요. 여기서 궁금한게, 제가 c라는 변수에 test함수의 결과를 반환했는데, 이때 c = test()를 실행했을때, 왜 test함수의 print('Called test')가 실행이 되는 건가요?해당 프로세스가 궁금합니다.
-
미해결스프링 핵심 원리 - 고급편
프록시 기능
프록시 주요 기능중접근제어 캐싱 지연로딩이건프록시 없이는 불가능한 기술인가요??프록시 기술이 꼭 필요한 기술인지 궁금해서요 !
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
3강 Spring Cloud Gateway - Custom Filter 적용 Bean 관련 질문있습니다.
안녕하세요 수업 잘 듣고 있습니다. 수업중 내용에 관해서 질문이 있어서 질문을 남깁니다. 수업 5분50초쯤에 Gateway Filter를 Bean으로 하나 등록한다고 하셨는데 @Component어노테이션이 붙은 클래스의 아래의 메소드의 반환값은 자동으로 Bean으로 등록되나요? @Bean어노테이션을 붙여줘야 등록이되는 줄 알았는데 제가 잘못이해하고있었는지 궁금해서 질문을 남깁니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
07-01 선택정렮
코드보다는 알고리즘의 사용이유입니다. sort()를 사용하면 간단하게 구현 할 수 있는데, 선택정렬을 사용하는 이유가 궁금합니다.
-
미해결Atlassian Jira & Confluence 관리자 교육 (Cloud 버전)
편집권한 없은 Epic의 하위에 Task 생성(Epic Link) 방법.
팀장이 메인업무 "Epic A" 생성 후, 팀원별로 자신의 업무를 관련 메인업무 "Epic A" 하위에 "Story B" / "Task C"로 생성하고자 합니다.해당 프로젝트의 권한에서 "이슈편집 = 팀장, 보고자"로 설정되어 -- "Epic A" 생성 : 팀장. 이슈편집 권한 : 팀장 -- "Story B"/"Task C" 생성: 팀원1, 이슈편집 권한 : 팀장, 팀원1와 같습니다. 이때, 팀원1이 "Epic A" 하위에 "Story B"를 생성했으나, "Epic A"와 Link 되지 못합니다. 하나의 큰 메인업무를 Epic으로 생성하고, 팀원별로 자신의 업무를 그 하위 이슈 (Epic Link)하고 싶은데, 방법이 없을까요? 모두에게 "이슈편집" 권한을 주면 해결이 되지만, 클릭시 편집모드로 변경.... 다른 사람의 이슈 잘못 수정 등의 사유로 .. 그 방법은 피하고자 합니다. Epic을 카테고리 분류 처럼 사용하려다 보니, 위와 같은 문제가 생겼습니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
안녕하세요. Response 안쓰고 진행중입니다..
아래와 같이 코드를 작성했습니다. Response를 안쓰고 진행했는데 뉴스기사는 출력이 되지만 연예기사가 출력이 안됩니다 ㅠㅠ from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from bs4 import BeautifulSoup # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager import time import pyautogui import pyperclip import csv # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 크롬창 안뜨게 함 chrome_options.add_argument('--headless') # headless 모드 활성화 chrome_options.add_argument('--disable-gpu') # GPU 가속 비활성화 # Mozilla 웹 브라우저에서 온 것처럼 인식 / 자동화된 요청을 감지하고 차단하는 것을 우회 chrome_options.add_argument("--user-agent=Mozilla/5.0") # 불필요 메세지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 드라이버 업데이트 service = Service(executable_path=ChromeDriverManager().install()) # 옵션 적용 browser = webdriver.Chrome(service=service, options=chrome_options) news = pyautogui.prompt('뉴스기사 입력 >>> ') print(f'{news} 검색') # 웹페이지 해당 주소 이동 path = f'https://search.naver.com/search.naver?where=news&sm=tab_jum&query={news}' # url 대화 browser.get(path) # 네이버에서 html 줌 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출 for article in articles: links = article.select("a.info") if len(links) >= 2: # 링크가 2개 이상이면 url = links[1].attrs['href'] # 두번째 링크의 href 추출 # 다시 한번 받아옴 browser.get(url) html = browser.page_source soup = BeautifulSoup(html, 'html.parser') # 연예뉴스라면 -> ? div 모양이 다름 if 'entertain' in url: title = soup.select_one(".end_tit") content = soup.select_one('#articeBody') else: title = soup.select_one("#title_area") content = soup.select_one('#dic_area') # 해당 링크 본문의 아이디값 가져옴 print("=============링크==========\n", url) print("=============제목==========\n", title.text.strip()) print("=============내용==========\n", content.text.strip()) time.sleep(0.7) print('\nDvlp.H.Y.C.Sol\n') 출력은 이렇게 나옵니다.=============링크========== https://n.news.naver.com/mnews/article/382/0001075938?sid=106Traceback (most recent call last): File "c:\Users\cksth\OneDrive\바탕 화면\Career\크롤링\심화\02.연예뉴스.py", line 71, in <module> print("=============제목==========\n", title.text.strip())AttributeError: 'NoneType' object has no attribute 'text
-
미해결최반장의 엑셀 피벗테이블 마스터 클래스
실습용 파일 부탁드립니다.
실습용 파일 부탁드립니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
try, catch 문이 애매한 이유가 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] @Testpublic void 중복_회원_예약(){//givenMember member1 = new Member();member1.setName("spring");Member member2 = new Member();member2.setName("spring");//whentry{memberService.join(member2);fail();}catch (IllegalStateException e){assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다. ");}//then}try, catch 문을 사용하기에 애매한 이유가 정확하게 뭔지 궁금합니다. 사용하면 안되는 이유가 있나요?
-
미해결스프링부트 시큐리티 & JWT 강의
/loginForm?error가 발생하며 로그인이 안 됩니다.
4강을 수강하는 중에 생긴 오류입니다. 회원가입은 정상적으로 작동하는데 로그인을 하려고 하면 아래 사진처럼 오류가 발생합니다.강의를 여러번 돌려보며 코드는 똑같이 따라했고, 콘솔에 찍히는 것을 보면 제가 로그인 하고자 하는 username도 잘 찍힙니다. (회원 정보를 찾는 것까지는 정상적인 거 같습니다)import org.springframework.boot.web.servlet.view.MustacheViewResolver; // 이 import문에서 reactive로 하라고 하셨는데 그걸로 바꾸면 아래의 setCharset, setContentType 등에서 오류가 발생하여 servlet으로 하였습니다. import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry) { MustacheViewResolver resolver = new MustacheViewResolver(); resolver.setCharset("UTF-8"); resolver.setContentType("text/html;charset=UTF-8"); resolver.setPrefix("classpath:/templates/"); resolver.setSuffix(".html"); registry.viewResolver(resolver); } }@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public BCryptPasswordEncoder encodePwd(){ return new BCryptPasswordEncoder(); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/manager/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_MANAGER')") .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')") .anyRequest().permitAll() .and() .formLogin() .loginPage("/loginForm") .loginProcessingUrl("/login") .defaultSuccessUrl("/"); }
-
해결됨따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
missing script: "backend"
{ "name": "client", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "add": "^2.0.6", "axios": "^1.5.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.16.0", "react-scripts": "5.0.1", "web-vitals": "^2.1.4" }, "scripts": { "start": "node server/index.js", "backend": "nodemon server/index.js", "test": "react-scripts test", "dev": "concurrently \"npm run backend\" \"npm run start --prefix client" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } } 이게 클라이언트쪽입니다
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
스타트코딩님 코드 질문
스타트코딩님이 댓글에 올려주신 코드 중에새창을 바라보게 만들기라는 부분이 있는데이 코드가 없으면 정상적으로 작동되지 않더라구요.쇼핑 탭을 눌러서 새로운 탭이 생긴 것은 맞는데 원래 쇼핑 탭을 눌러서 새로운 탭이 생겼으면 새로운 탭을 바라보는 거 아닌가요?
-
해결됨
Unexpected string in JSON at position 25 에러가 뜹니다.
[인프런x코드캠프] 부트캠프에서 만든 고농축 백엔드 코스에서 섹션22에 03-03 수업중// const express = require("express"); // 옛날방식 => commonjs import express from 'express'; // 요즘방식 => module const app = express(); app.use(express.json());// 옛날에는 bodyParser 사용 app.get('/boards', function (req, res) { // 1. DB에 접속후, 데이터를 조회 => 데이터를 조회했다고 가정 const result = [ { number: 1, writer: "철수", title: "철수입니다~~", contents: "내용이에요!!!", }, { number: 2, writer: "영희", title: "영희입니다~~", contents: "영희내용이에요!!!", }, { number: 3, writer: "훈이", title: "훈이입니다~~", contents: "훈이내용이에요!!!", }, ]; // 2. DB에서 꺼내온 결과를 브라우저에 응답(response) 으로 주기 res.send(result); }); app.post('/boards', function (req, res) { // 1. 브라우저에서 보내준 데이터 확인하기 console.log(req); console.log("==============================="); console.log(req.body); // 2. DB에 접속 후, 데이터를 저장 => 데이터를 저장했다고 가정 // 3. DB에 저장된 결과를 브라우저에 응답(response) 주기 res.send("게시물 등록에 성공하였습니다."); }); app.listen(3000); 여기서 app.use(express.json()) 을 추가한후 postmasn에서 post 했을때 SyntaxError: Unexpected string in JSON at position 25 에러를 띄웁니다. 다 잘 따라 한것 같은데 왜이런걸까요 이건 터미널 에러 전문입니다.
-
미해결Airflow 마스터 클래스
맥북으로 실습 진행이 가능한지 궁금합니다.
안녕하세요, 현재 M2 macbook을 사용하고 있습니다.강의에서 윈도우 환경에 WSL을 설치한 후 그 위에 airflow를 설치하여 실습을 진행하는 것으로 이해했습니다.구글링을 좀 해보니 맥북에서도 airflow 설치는 충분히 가능한 것으로 보이는데, 만약 맥북에서 설치했다고 하더라도 뒷부분 실습과정에서 많은 차이가 있는지 궁금합니다!
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
animation 질문- 하나의 @keyframes로 특정 이벤트없이 한번, hover이벤트시 한번 적용 방법 문의.
animation 질문- 하나의 @keyframes로 특정 유저 이벤트없이 한번, 마우스 hover 이벤트시 한번 적용하는 방법 문의 드립니다. css 강의 ‘animation 실습’ 강의 40분 전후의 쇼핑몰 배너 애니매이션 코드를 변경해서 아래 코드처럼/* html 부분 */ <section class="mainBanner"> <h1 class="text">Welcome to my shop</h1> </section> /* css 부분 */ .text { font-size: 42px; font-weight: 700; color: white; text-shadow: 9px 6px 5px rgba(0, 0, 0, 0.5); animation: titleText 1s ease-in-out; } .mainBanner:hover .text { animation: titleText 1s ease-in-out; } @keyframes titleText { 0% { transform: translateY(70px); } 92% { transform: translateY(-10px); } 100% { transform: translateY(0px); } }@keyframes에 titleText란 이름으로 정의한 애니메이션을, 페이지 로드시에 1번, 마우스 hover 시 1번 재생시키려고 css를 작성했더니 로드시에만 적용되고 호버시엔 적용이 안되더군요. 그래서 아래처럼 동일 keframes를 복사 붙여넣기 하고 이름만 바꿔서 hover에 적용하였더니 잘되더군요.{ font-size: 42px; font-weight: 700; color: white; text-shadow: 9px 6px 5px rgba(0, 0, 0, 0.5); animation: titleText 1s ease-in-out; } .mainBanner:hover .text { animation: titleText2 1s ease-in-out; } @keyframes titleText { 0% { transform: translateY(70px); } 92% { transform: translateY(-10px); } 100% { transform: translateY(0px); } } @keyframes titleText2 { 0% { transform: translateY(70px); } 92% { transform: translateY(-10px); } 100% { transform: translateY(0px); } } 이런식의 중복 css가 발생하는 비효율적인 방법말고, 하나의 @keyframes로 특정 유저 이벤트없이 한번, hover이벤트시 한번 적용하는 방법 중 html, css만으로 적용하는 방법이 없을까요?도움 부탁드립니다~
-
해결됨스프링 핵심 원리 - 기본편
No qualifying bean of type 'basic.core.member.MemberService' available 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, 컴포넌트 스캔과 의존관계 자동 주입 시작하기 강의를 잘 보고 있었는데 AutoAppConfigTest 부분에서 막혀서 질문드립니다. No qualifying bean of type 'basic.core.member.MemberService' available 에러가 발생하는데요, AutoAppConfig 위치가 패키지 최상단임에도 불구하고 해당 에러가 발생하고 있습니다. ㅠㅠ 어노테이션도 강의 페이지를 보고 제대로 달았는데 어떤 점이 문제인지 파악이 어려워 해당 코드 구글 드라이브 업로드합니다. 감사합니다. https://drive.google.com/file/d/1hwrIzJPo6PIdTQ5ACj4PBrIOzOXhDbdK/view?usp=sharing
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
DiaryItem에 있는 onRemove, onEdit, 는 바뀔 수밖에 없지 않나요?
20번째 다이어리를 삭제하는 경우 data 가 바뀌기에onRemove 함수가 재랜더링이 되기에 => DiaryItem 컴포넌트 내부에 있는 props 가 변경되는 원리로 이해가 되어요 ㅜㅜ onEdit 도 마친가지구요. onCreate 함수는 에디터와만 상관이 있어서 다이어리아이템과 상관이 없다는게 이해 갑니다.
-
미해결그림으로 배우는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
현업에서는 컨테이너 어떤걸 가장 많이 쓰나요?
질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다![질문 전 답변]1. 강의에서 다룬 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 법을 읽어보셨나요? 예 (https://www.inflearn.com/blogs/1719)4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다. (https://www.inflearn.com/questions/992407/comment/281901)6. ARM 계열의 m1 , m2 계열은 VirtualBox를 통한 구성이 원할하지 않고, 실습 환경의 다변화는 추후 대처하기 어려워서 현재 과정에서는 지원하지 않습니다. (https://www.inflearn.com/questions/915529) [질문 하기]F사 강의 CI/CD 강의를 듣고 있는데..도커 를 열심히 듣고 있습니다.쿠버네티스, v1.20부터 도커 지원 중단 그래도 도커를 많이 쓰는가요? 아니면containerd, CRI-O 둘 중에 어느 걸 많이 쓰는지 궁금합니다.