묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java -jar 맥os 터미널에서 실행시킬 경우 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1). 인텔리제이 상에서는 정상적으로 localhost:8080localhost:8080/hello 모두 다 실행이됩니다.터미널에서 할경우 localhost:8080/hello 를 입력할 경우 hello.html이 잘 나오는데, 그냥 localhost:8080 입력하면 웹 브라우저에서는 Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback....가 발생하고 터미널 창에는 2022-10-30 22:24:56.079 INFO 4861 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'2022-10-30 22:24:56.080 INFO 4861 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'2022-10-30 22:24:56.083 INFO 4861 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms 로 로그가 나오는데 어떤 문제일까요 ?? 2). 그리고 build ~~ src 디렉토리 안에 스냅샷.jar 과 스냅샷-plain.jar 2개가 있는데 차이가 무엇일까요 ?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Postman 기술 질문입니다,(스프링 시큐리티)
안녕하세요 강사님강의 감사하게 잘 듣고 있습니다.다름이 아니라 제가 연습 중인 프로젝트에 Spring-Security, Auditing, Envers를 적용해 보고 있습니다.당연히 데이터를 등록, 수정, 삭제 시 DB에 현재 로그인 중인 사용자 정보가 담기게 되는데 postman에서 그냥 테스트를 하게 되면 오류가 나더라고요,1) 이러한 부분을 해결하기 위해 postman에서 따로 설정을 해줄 수 있는 부분이 있는지도 궁금합니다.(이와 비슷한 관련 강의가 있는지도 궁금합니다!)2) 강의 내용을 보면 DTO 클래스를 ApiController에 작성하셨는데 실무에서는 domain 패키지에 따로 따로 생성해주나요? (그렇게 되면 Create, Update, Delete 너무 많아지는 것 같아서요)
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
비관적 락과 update product set stock = stock -1 where id = 1의 차이
update product set stock = stock -1 where id = 1 이렇게 할 경우 읽는 작업과 쓰는 작업이 원자적으로 이루어지고, 이 쿼리가 커밋하기 전까지는 다른 update 쿼리는 블락되기 때문에 비관적 락과 다른 점이 없다고 생각되는데요.제가 잘못 생각한 부분이 있을까요?
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
Redis를 이용한 방식이 MySQL을 이용한 방식보다 느리지 않나요?
제가 생각하기로는 Redis를 이용한 방식은 서버 -> Redis서버 -> MySQL 이렇게 두 번 접근하게 되니 네트워크 타는 시간 때문에 당연히 더 느릴 것이라고 생각했거든요비관적 락을 이용한다면서버 -> MySQL 이렇게 바로 접근한 후에 lock이 풀릴 때까지 기다렸다가 바로 작업을 수행하니 더 빠르지 않나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
리턴값
29:31 처럼 Exception을 터뜨리는게 아니라리턴값 String 으로 보내서 이것을 호출한 컨트롤러가 그 다음 분기처리를 하라는 말씀이신가요 ??
-
해결됨스프링 핵심 원리 - 기본편
Bean Type 이 아닌 이름이 중복시
안녕하세요 강사님. Bean 생성 관련해서 여러가지 Test 를 해보다가 의문점이 생긴 부분이 있습니다. 빈 생성 이름이 중복되는 경우는 어떠한 기준으로 bean 을 생성하는 건가요?? Type 이 중복될 때처럼 실행시에 오류를 발생시키지 않는 것 같아서요!@Bean(name = "discountPolicy") public DiscountPolicy discountPolicy(){ System.out.println("AppSpringConfig.discountPolicy : Rate"); return new RateDiscountPolicy(); } @Bean(name = "discountPolicy") public DiscountPolicy discountPolicy2(){ System.out.println("AppSpringConfig.discountPolicy : Fix"); return new FixDiscountPolicy(); }다음과 같이 시도를 해봤을 때, 실행 창에는 Rate 만 출력이 되고, 만약 단순히 코드 위치를 변경할 경우 Fix 가 출력됩니다. 어떤 것을 먼저 읽었냐에 따라서 먼저 등록된 bean 을 유지시킨다고 봐도 되는 걸까요? 또한, ComponentScan 방법을 사용하여FixDiscountPolicy 에 @Component, RateDiscountPolicy에 @Component 를 달 경우 Bean type 중복된다라는 에러를 호출시켰고, 이에 관련하여 강의해주셨습니다. 그래서 @Primary 를 통해 우선권을 가지는 Bean 을 알려줬습니다. 하지만 위와 같이 Bean 등록을 할 경우 왜 같은 에러가 발생하지 않는지 궁금합니다! 둘다 DiscountPolicy 라는 역할 객체에 대한 구현 객체 두개가 등록되고 있는데, 왜 같은 에러가 발생하지 않는 걸까요? 감사합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 h2.bat실행시 아무 반응이 없습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. h2.bat실행시 아무창도 뜨질 않습니다. 아예 반응이 없습니다.열심히 구글링하여서 3시간가량 할 수 있는 방법을 동원해보았는데 해결이 되지 않아서 질문남깁니다 ㅜㅜh2 버전은 강의에서 말씀하신 1.4.200 버전으로 다운로드 받았습니다아래 해본 방법들을 남깁니다. 모두 결과는 실행하였을 때 반응이 없었습니다.[해본 방법들]cmd창에서 h2.bat 실행 , cmd창에서 "h2.bat" 실행cmd창에서 h2.sh 실행, cmd창에서 "h2.sh" 실행cmd창에서 h2w.bat 실행, cmd창에서 "h2w.bat" 실행다운로드받은 경로 들어가서 마우스로 h2.bat 실행cmd를 관리자권한으로 실행하여 1,2번 방법h2파일 재설치 후 1,2,3,4,5 방법노트북 재부팅 후 1,2,3,4,5 방법프로젝트 폴더 안에있는 application.properties 파일에서 h2데이터베이스 연동설정(이건 아닌것같지만 혹시나해서해봤습니다.)h2포트번호 확인 후 cmd에서 포트번호 전부 확인해봤지만 사용중인 포트번호가 없어서 h2포트번호를 그냥 바꿔본 후 실행환경변수 재설정 열심히 검색중에 하단 링크를 보았는데 해결방법을 못찾으신건가요 ㅠ 답변부탁드립니다!!만약 해결방법이 없다면 Oracle을 연동하여 사용해보겠습니다. 최대한 강의와 비슷하게 진행하고 싶어서 꼭 해결할 수 있었으면 좋겠네요https://www.inflearn.com/questions/175580
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
도메인이라는게 도대체 무엇인가요?
개발공부를 하다보면 도메인, 도메인지식, 도메인네임 등 똑같이 도메인이라는 단어이지만 뜻이 많이 다를 것이라고 유추되는 단어들이 많은데요.. 검색을 해봐도 잘 와닿지 않아서 참고할만한 글이나 답변을 주실 수 있으실까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문드립니다. 갑자기 스프링 아무것도 안됨
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]몇 주 있다가 다시 해보려니까 갑자기 모든 스프링이 에러가 뜨고 안됩니다.. 혹시 이유아실까요
-
해결됨스프링 핵심 원리 - 고급편
[전략 패턴 - 예제 2] 코틀린으로 연습하는 중에 변환이 되지 않아 문의 드립니다.
// ContextV1Test.java @Test void strategyV3() { ContextV1 context1 = new ContextV1(new Strategy() { @Override public void call() { log.info("비즈니스 로직1 실행"); } }); context1.execute(); ContextV1 context2 = new ContextV1(new Strategy() { @Override public void call() { log.info("비즈니스 로직2 실행"); } }); context2.execute(); } @Test void strategyV4() { ContextV1 context1 = new ContextV1(() -> log.info("비즈니스 로직1 실행")); context1.execute(); ContextV1 context2 = new ContextV1(() -> log.info("비즈니스 로직2 실행")); context2.execute(); }// ContextV1Test @Test fun strategyV3() { val context1 = ContextV1(object : Strategy { override fun call() { log.info("비즈니스 로직1 실행") } }) context1.execute() val context2 = ContextV1(object : Strategy { override fun call() { log.info("비즈니스 로직2 실행") } }) context2.execute() } @Test fun strategyV4() { val context1 = ContextV1({ log.info("비즈니스 로직1 실행") }) context1.execute() val context2 = ContextV1({ log.info("비즈니스 로직2 실행") }) context2.execute() }interface 에 메서드가 하나만 있는 경우 람다를 활용할 수 있다. java 코드를 코틀린으로 변환하면서 v3 는 정상적으로 변환에 성공했습니다.하지만 v4 는 정상적으로 되지 않습니다.코틀린에 아직 익숙하지 않다보니 생긴 문제인거 같기도 한데..혹시 강의 범위를 벗어나긴 하지만 도움을 주실 수 있을까요?
-
미해결스프링 시큐리티
spring mvc설정으로 인한 controller-mapping error
spring mvc방식으로 구현해보고 있는데 권한 인증인 403에러는 잘뜹니다. 하지만 controller를 통해서 들어가면 404에러가 뜹니다. 관련되서 질문드립니다.@RestControllerpublic class AdminController { @GetMapping("/admin") public String admin() { return "admin"; }} xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd "> <security:http auto-config="true" use-expressions="false"> <security:intercept-url pattern="/**" access="ROLE_ADMIN"/> <security:form-login/> </security:http> <security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name="admin" password="{noop}1234" authorities="ROLE_ADMIN, ROLE_USER"/> <security:user name="user" password="{noop}1234" authorities="ROLE_USER"/> </security:user-service> </security:authentication-provider> </security:authentication-manager> <mvc:resources mapping="/jsp/**" location="/jsp/"></mvc:resources> <context:annotation-config/> <context:component-scan base-package="com.test"/> <mvc:annotation-driven /> <mvc:default-servlet-handler/> <bean id="viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean></beans> web.xml <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring/context-spring.xml </param-value> </context-param> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/context-spring.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app> 접속 404오류 로그 DEBUG [FilterChainProxy] - Securing GET /adminDEBUG [HttpSessionSecurityContextRepository] - Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=admin, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=B6D437E830FDEBF274A77AF35C51A114], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]DEBUG [SecurityContextPersistenceFilter] - Set SecurityContextHolder to SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=admin, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN, ROLE_USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=B6D437E830FDEBF274A77AF35C51A114], Granted Authorities=[ROLE_ADMIN, ROLE_USER]]]DEBUG [FilterSecurityInterceptor] - Authorized filter invocation [GET /admin] with attributes [ROLE_ADMIN]DEBUG [FilterChainProxy] - Secured GET /adminDEBUG [DispatcherServlet] - GET "/admin", parameters={}DEBUG [SimpleUrlHandlerMapping] - Mapped to org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler@8c32dcDEBUG [DispatcherServlet] - Completed 404 NOT_FOUNDDEBUG [SecurityContextPersistenceFilter] - Cleared SecurityContextHolder to complete request
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
마지막 부분 6:35 질문
이렇게 JPA와 JdbcTemplate을 함께 사용할 경우 JPA의 플러시 타이밍에 주의해야 한다. JPA는데이터를 변경하면 변경 사항을 즉시 데이터베이스에 반영하지 않는다. 기본적으로 트랜잭션이 커밋되는시점에 변경 사항을 데이터베이스에 반영한다. 그래서 하나의 트랜잭션 안에서 JPA를 통해 데이터를변경한 다음에 JdbcTemplate을 호출하는 경우 JdbcTemplate에서는 JPA가 변경한 데이터를 읽기못하는 문제가 발생한다.이 문제를 해결하려면 JPA 호출이 끝난 시점에 JPA가 제공하는 플러시라는 기능을 사용해서 JPA의 변경내역을 데이터베이스에 반영해주어야 한다. 그래야 그 다음에 호출되는 JdbcTemplate에서 JPA가반영한 데이터를 사용할 수 있다.================================같은 하나의 트랜젝션인데변경한 다음에 JdbcTemplate을 호출하는 경우 JdbcTemplate에서는 JPA가 변경한 데이터를 읽기못하는 문제가 발생한다.--이 이유가 데이터를 커밋하지않고 1차 캐쉬에만 변경 한 값을 가지고 있으니까 jdbc 템플릿은 변경 한값을 알 수 없어서 생기는 문제라고 생각하면 되는건가요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
dataSource 빨간줄 에러나요
강의 8:27 부분에서 괄호 안에 dataSource 에러가 납니다.이런 에러가 나는데요 어떻게 고쳐야 하나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
build가 되지 않고 에러가 뜹니다.
intelliJ무료 버전을 사용하고 있어서 아래와 같이 해당 코드를 주석처리하였습니다.2. gradle Setting에서 intellij 로 선택시 아직도 오류가 발생합니다.3. 오류화면Setting에서 gradle로 변경해도 오류가 발생합니다ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew build문제
[질문 내용]cmd창에 gradlew build를 치면 C:\Study\hello-spring>gradlew build> Task :compileJava FAILEDFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':compileJava'.> invalid source release: 11* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 1s1 actionable task: 1 executed 이 에러가 뜨는데 어떻게 해결할 수 있을까요ㅜ
-
미해결스프링 핵심 원리 - 기본편
Proxy My Logger 에 대한 간단한 질문
안녕하세요~! 간단한 질문이 있습니다! 혹시 그러면 Proxy 를 사용하게 되면 Bean Container 에는 진짜 MyLogger.class 가 등록될 일은 없는 걸까요? Proxy 를 사용하지 않으면 Request 가 들어오면 어쨌든 잠깐이라도 Bean Container 에 등록이 되었다가 폐기 되는 것으로 이해 했었습니다. 하지만 Proxy 를 사용하면 가짜 Porxy My Logger 가 싱글톤처럼 Bean 등록이 되고, 필요시 호출될 때마다 진짜 My Logger 를 사용하려는 클래스에 넘겨주게 되는 것이 맞을까요? (관리 객체는 클라이언트 객체: Controller, Service ).
-
미해결스프링부트 시큐리티 & JWT 강의
회원가입 후 loginForm에서 로그인시 홈으로 이동 안될시 확인할 사항
// PrincipalDetail 클래스에서 모두 True로 하고 돌려보세요. // 그러면 잘됩니다. // password 리턴 @Override public String getPassword() { return user.getPassword(); } @Override public String getUsername() { return user.getUsername(); } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { // 1년동안 회원이 로그인을 안하면, 휴먼 계정으로 하기로함 // 현재시간 - 로그인 시간 >= 1년을 초과하면 return false 등등... return true; }
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
Book.java Kotlin으로 변경 후 오류 문의
안녕하세요. 12강 에서 처럼 Book.java를 Book.kt kotlin 코드로 변경하고 나서 테스트코드 수행하면 아래와 같은 오류가 발생합니다. 확인해야 될 사항이 뭐가 있을까요. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookRepository' defined in com.group.libraryapp.domain.book.BookRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class com.group.librayapp.domain.book.Book
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
M1 mac 에서 gradle로 빌드하시려는 분들께 공유 하고싶어 글을 남겨요!
Requirementsstatic/node_module로 package.json에 선언된 의존성을 다운로드 받아야한다gradle build 시 package.json에 선언된 의존성을 확인하고 다시 다운로드 받아야 한다.뭔가 간단하게 끝내고 싶다 !!!Actionhttps://github.com/node-gradle/gradle-node-plugin/blob/master/docs/usage.md다양한 관련 플러그인 들이 있지만, 위의 플러그인을 설치 했습니다.2번의 요구사항은 gradle의 증분 컴파일(?)이 해주는 것 같습니다. (정확하지 않음 추측이에요)3번은 관련 자료를 찾던 도중 processResources 를 발견했고, Copies production resources into the production resources directory. 라고 설명 되어 있습니다.(공식 홈페이지)따라서, npm install 시 node_module 파일을 static 이하로 떨어 뜨리면 되겠구나!그리고 processResources를 "npm install 동작을하는 " Task를 의존하게 하면 되겠구나!-- 주석이 많아 가독성이 떨어지지만, 한번 읽어보시면 더 도움이 될거라 생각해서 위의 깃헙에 있는 주석 그대로 복사 붙여넣기 합니다. 수정한 부분은 nodeProjectDir 부분과processResources.dependsOn 부분 입니다.추가로 package.json 도 아래분이 잘 정리 해주셔서 함께 복사 붙여넣기 합니다.(고맙습니다!!)-인텔리제이 빌드시(gradle로 설정안했을 경우 동작안해요!)-gradle 탭 누르셔서 npm Task 들어오는지 확인해주세요!{ "name": "static", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "@yaireo/tagify": "^3.5.1", "bootstrap": "^4.4.1", "cropper": "^4.1.0", "font-awesome": "^4.7.0", "jdenticon": "^2.2.0", "jquery": "^3.4.1", "jquery-cropper": "^1.0.1", "mark.js": "^8.11.1", "moment": "^2.24.0", "summernote": "^0.8.16" } }plugins { id "com.github.node-gradle.node" version "3.5.0" id 'org.springframework.boot' version '2.7.5' id 'io.spring.dependency-management' version '1.0.15.RELEASE' id 'java' } group = 'me.studyOlle' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } node { // Whether to download and install a specific Node.js version or not // If false, it will use the globally installed Node.js // If true, it will download node using above parameters // Note that npm is bundled with Node.js download = true // Version of node to download and install (only used if download is true) // It will be unpacked in the workDir version = "16.14.0" // Version of npm to use // If specified, installs it in the npmWorkDir // If empty, the plugin will use the npm command bundled with Node.js npmVersion = "" // Version of Yarn to use // Any Yarn task first installs Yarn in the yarnWorkDir // It uses the specified version if defined and the latest version otherwise (by default) yarnVersion = "" // Base URL for fetching node distributions // Only used if download is true // Change it if you want to use a mirror // Or set to null if you want to add the repository on your own. distBaseUrl = "https://nodejs.org/dist" // Specifies whether it is acceptable to communicate with the Node.js repository over an insecure HTTP connection. // Only used if download is true // Change it to true if you use a mirror that uses HTTP rather than HTTPS // Or set to null if you want to use Gradle's default behaviour. allowInsecureProtocol = null // The npm command executed by the npmInstall task // By default it is install but it can be changed to ci npmInstallCommand = "install" // The directory where Node.js is unpacked (when download is true) workDir = file("${project.projectDir}/.gradle/nodejs") // The directory where npm is installed (when a specific version is defined) npmWorkDir = file("${project.projectDir}/.gradle/npm") // The directory where yarn is installed (when a Yarn task is used) yarnWorkDir = file("${project.projectDir}/.gradle/yarn") // The Node.js project directory location // This is where the package.json file and node_modules directory are located // By default it is at the root of the current project nodeProjectDir = file("${project.projectDir}/src/main/resources/static") // Whether the plugin automatically should add the proxy configuration to npm and yarn commands // according the proxy configuration defined for Gradle // Disable this option if you want to configure the proxy for npm or yarn on your own // (in the .npmrc file for instance) nodeProxySettings = ProxySettings.SMART } dependencies { // View Template Engine implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // Security implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' //Web implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'org.springframework.boot:spring-boot-starter-web' implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.7.5' //Persistence implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.mysql:mysql-connector-j' // LomBok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' // Dev developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' //Test Implementation testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' } tasks.named('test') { useJUnitPlatform() } processResources.dependsOn('npmInstall')
-
미해결스프링 핵심 원리 - 기본편
getBean의 타입에 대해 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스프링 컨테이너에있는 스프링 빈을 찾아올때, getBean() 메서드를 통해 찾을수있다고 이해했는데요.메서드를 호출할때 getBean(이름, 타입) 의 형식으로 사용한다고 되어있는데1. 여기서 타입은 어떤 타입을 파라미터로 넣어줘야하는건가요? 예를들면 MemberService memberService = applicationContext.getBean("memberService", MemberService.class); 로 사용할수도있고, MemberServiceImpl memberService = applicationContext.getBean("memberService", MemberServiceImpl.class); 로 사용할수도있는데,어떤 타입을 파라미터로 넣어줘야하는건지 궁금합니다. 스프링빈의 타입인 객체타입(MemberServiceImpl)을 넣어줄수도있고, AppConfig 클래스에있는 memberService메서드의 리턴타입(MemberService) 을 넣어줄수도있는건가요? 일반메소드의 리턴타입처럼 getBean()을 통해서 얻은 객체를 어떤타입으로 받고자한다를 클래스타입으로 적어줘야하는건가요? 2. 그리고 타입을 파라미터로 넣어줄때 .class를 쓰는 이유가 궁급합니다. 예를들면 MemberService의 경우에는 인터페이스라서 MemberService.interface형식으로 넣어줘야할거같은데 .class를 붙여서 넣어주는 이유가 궁급합니다. 3. 1,2번의 질문들을 생각하면서 정리해봤는데, 타입부분에서 파라미터로 넘겨준 MemberService.class는 클래스타입=메서드의 리턴타입 = 역할타입 = 인터페이스타입 이고,MemberServiceImpl.class는 구체타입=객체타입=스프링빈타입이다. 이렇게 정리해봤는데 맞는건가요? 구글링도해보고, 게시판에 비슷한 글이 있나 찾아보기도 했는데 원하는 답변이 없어서 질문드립니다..