묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 스프링 부트 - 이해와 원리
Arrays.copyOf 메서드의 타입 세이프
컬렉션을 어레이로 만들때 3가지 방법을 보여주셨는데, Arrays.copyOf 메서드가 유일하게 타입 세이프가 되지 않는 메서드고 나머지가 타입세이프 되는걸로 알고있어서요. 혹시나 다른 학습자분들 참고 하시길 바랍니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
src 파일에 test파일은 있는데, main파일이 없어요
src 파일에 test파일은 있는데, main파일이 없어요.. 어떻게 하면 될까요ㅠㅠ
-
미해결스프링 부트 - 핵심 원리와 활용
AppInitV3SpringMvc
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]AppInitV3SpringMvc 클래스 구현한 내용이 web.xml에서 DIspatcherServlet 설정하고 동일한거죠??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 실행 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의와 달리 디버깅이 되지 않습니다 무엇이 잘못된 점인지 설명해주셨으면 좋겠습니다
-
미해결스프링 핵심 원리 - 기본편
리퀘스트 스코프를 사용해도 오류가 안 납니다.
강의에서는 아직 리퀘스트 스코프가 만들어지지 않아서 오류가 나는 게 정상이라고 하셨는데, 저는 오류가 뜨지 않고 로그까지 정상적으로 출력이 됩니다. 스프링 부트 버전 3입니다.그리고 애노테이션은 @Scope("request")를 쓰면 log-demo URL로 접속해도 화이트라벨 에러 페이지가 뜨길래 스프링 문서에서 검색해서 나온 @RequestScope를 사용했습니다. 혹시 이것과 관련이 있을까요?
-
미해결스프링 핵심 원리 - 기본편
왜 조합이 아닌 상속을 사용하였을까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 스프링 핵심원리에 부분을 재학습 중인 수강생입니다. 다름이 아니라 스프링 컨테이너인 AppllicationContext 는 다양한 인터페이스를 상속받아서 사용하는 것으로 알려주셔서 더 자세한 내용을 파악하고 싶어서 내용을 찾고 알려주신 코드를 고려하니, 문득 궁금한 점이 생겼습니다.스프링 프레임워크는 당연하게도 철저하게 객체지향적 설계를 위주로 만들어졌을 거라고 생각하는데, 스프링 컨테이너를 만듦에 있어서 다양한 인터페이스를 상속한 이유가 궁금해졌습니다. 관계적 측면에서 스프링 컨테이너와 다양한 인터페이스의 관계는 has-a 관계라고 생각하여 조합을 통한 스프링 컨테이너를 구성하는 것이 더 바람직하다고 생각이 들었는데, 다양한 인터페이스를 상속하여 컨테이너를 구성했음이 왜인지 궁금해졌습니다. 물론 본 강의의 내용과는 밀접한 관련이 없을 수도 있겠지만,, 개인적으로 모르는 부분일 수도 있겠다는 생각이 들었습니다.또한 지금은 개인적인 의문이지만, 분명 다른 분들도 궁금해하시는 분들도 있을 것이라고 생각됩니다. 명확하지 않아도 부디 고려해볼 수 있는 점이나 아시는 부분이 있으실까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Mockito와 JDK가 충돌하는 문제 문의 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Mockito와 JDK가 충돌하는 문제 문의 드립니다.프로젝트 강의 내용과 일치하게 설정하였는데,@SpringBootTest 어노테이션을 사용하면 에러가 뜹니다. 데이터베이스에 Member테이블은 생성이 되는 것으로 보아 DB와 연결은 잘 되는 것 같습니다.여러 자료를 찾아보며 의존성을 추가해봐도 해결이 되지 않아 프로젝트 파일 첨부합니다.감사합니다,파일 링크: https://drive.google.com/file/d/1b_Liz-YjGAuRUzHM0Em5DnhHa0rtQ9Lm/view?usp=sharing
-
미해결스프링 핵심 원리 - 기본편
빈 생성 시점에 url
9:51에 빈이 생성되는 시점에 requestUrl을 알 수 없다고 하셨는데 그 이유가 궁금합니다.
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
FormAuthenticationFailureHandler -> setDefaultFailureUrl 의 Thread safety
안녕하세요 선생님, [커스텀 인증실패 핸들러 - AuthenticationFailureHandler (08:11) ] 강의를 듣다가 의문점이 생겨서 문의드립니다. 현재 AuthenticationFailureHandler 를 extend 해서 사용 중인데 FormAuthenticationFailureHandler.onAuthenticationFailure 메소드에서 아래처럼 defaultFailureUrl 을 변경하는 부분이 있습니다.@Component public class FormAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { String errorMessage = "Invalid Username or Password"; if (exception instanceof BadCredentialsException) { errorMessage = "Invalid Username or Password"; } else if (exception instanceof UsernameNotFoundException) { errorMessage = "User not exists"; } else if (exception instanceof CredentialsExpiredException) { errorMessage = "Expired password"; } else if (exception instanceof SecretException) { errorMessage = "Invalid Secret Key"; } // Thread Safe...? setDefaultFailureUrl("/login?error=true&exception=" + errorMessage); super.onAuthenticationFailure(request, response, exception); } }이 setDefaultFailureUrl 메소드를 호출해서 모든 쓰레드가 접근할 수 있는 defaultFailureUrl 필드를 변경하는 건 Thread Safe 하지 않지 않나요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepository, ItemRepository
[질문 내용]ItemRepository에서 save() 메소드를 만들 때 아직 등록한게 없다면 id 값이 없으니 persist하고 id가 있다면 merge하는 조건문이 있습니다. 그렇다면 MemberRepository에서도 save()메소드에 아직 아무런 회원이 없다면 똑같이 ItemRepository의 save()메소드 처럼 조건문을 넣어야 하지 않을까요? 왜 MemberRepository의 save()메소드는 단지 em.persist(member)만 존재하는 건지 궁금합니다.
-
해결됨토비의 스프링 6 - 이해와 원리
Order에서 JPA 메타데이터 분리 - XML 사용
안녕하세요, 강의에서 올려주신 META-INF/orm.xml을 통해 orders의 table과 id가 만들어지는 것을 확인했습니다. 다만 Order의 no가 고유한 값을 가져야한다는 데이터 정합성 관련 SQL(schema.sql의 2,3번째 줄)이 Hibernate에서 표시되지 않는 것을 확인하여 unique="true"를 다음과 같이 넣어주면 원래의 JPA 어노테이션을 대체한 것으로 볼 수 있을지 문의드립니다. 감사합니다. <basic name="no"> <column name="no" length="255" unique="true"/> </basic>
-
미해결Practical Testing: 실용적인 테스트 가이드
Redis 테스트
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강사님 안녕하세요! 강의를 수강하고 프로젝트에 테스트 코드를 작성하며 적용해보고 있습니다.프로젝트에서 Redis로 저장되는 객체가 있는데, 이를 테스트하기 위해 찾아보니 embedded Redis를 사용하거나 테스트 컨테이너를 사용한다고 합니다.'Redis에서 단순한 저장/조회/수정 로직만 존재하는데, 그냥 테스트하지말고 냅둘까?' 유혹이 생기더라구요.이처럼 만약 테스트를 위해 추가적으로 설정이 필요한 경우, 어느정도 선까지 테스트를 진행하는게 맞을지 고민이 됩니다.시간적으로 가능한 선 내에서는 무조건 다 하는게 맞는걸까요?
-
해결됨스프링 핵심 원리 - 기본편
AnnotationConfigApplicationContext의 용도
1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.스프링 핵심원리 기본편 수업 에서 조회한 빈이 모두 필요할때 ,List,Map수업을 듣고 있는데 AnnotationConfigApplicationContext 에 DiscountService.class도 같이 파라미터로 넘기는데 왜 넘기는 건가요?DiscountService 는 @Component 와같은 어노테이션도 따로 없어서 빈으로 등록 되지 않는건 아닌가요/??AutoAppconfig 에서 basepackage로 스캔 된것들만 빈으로 등록되는 게 아닌가요????
-
미해결실전! 스프링 데이터 JPA
SpringDataJPA 강의따라서 환경설정 후 test코드 실행하면 오류가납니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.Could not initialize plugin: interface org.mockito.plugins.MockMaker에러가 발생합니다.. 환경설정이 문제인걸까요..? 아래의 테스트 코드 실행시 아래와 같은오류가 발생합니다. 도와주세요ㅠㅠ<gradle파일>plugins { id 'java' id 'org.springframework.boot' version '3.4.1' id 'io.spring.dependency-management' version '1.1.7' } group = 'study' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() } <test파일>package study.data_jpa; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class DataJpaApplicationTests { @Test void contextLoads() { } } <오류>Could not initialize plugin: interface org.mockito.plugins.MockMaker Caused by: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker It appears as if your JDK does not supply a working agent attachment mechanism. Java : 17 JVM vendor name : Oracle Corporation JVM vendor version : 17.0.10+11-LTS-240 JVM name : Java HotSpot(TM) 64-Bit Server VM JVM version : 17.0.10+11-LTS-240 JVM info : mixed mode, sharing OS name : Windows 10 OS version : 10.0 DataJpaApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at PluginLoader.java:85 Caused by: java.lang.IllegalStateException at DefaultMockitoPlugins.java:105 Caused by: java.lang.reflect.InvocationTargetException at Constructor.java:499 Caused by: org.mockito.exceptions.base.MockitoInitializationException at InlineDelegateByteBuddyMockMaker.java:254 Caused by: java.lang.IllegalArgumentException at InstrumentationImpl.java:-2
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경 감지를 통한 데이터 수정할 때 추가, 삭제는 어떻게 처리해야 할까요?
안녕하세요. 데이터 수정은 변경 감지로 처리하는게 적절한걸로 강의를 통해 이해했습니다.강의를 학습 후, 상품 정보를 수정하는 API를 개발하고 있습니다.상품 정보 업데이트를 진행할 때 옵션 목록과 같은 하위 데이터에 대해 추가, 삭제는 어떤식으로 로직을 처리해야 하는게 적절한지 판단이 안되어 질문 드립니다. 클라이언트에서 상품 정보 수정 API를 호출할 때, 생각한 프로세스는 아래와 같습니다.- 수정하는 옵션의 경우 ID와 변경되는 데이터를 필드에 담아서 보내줍니다.- 신규 옵션을 추가하는 경우에는 ID를 제외한 추가될 데이터를 필드에 담아서 보내줍니다.- 삭제하는 옵션은 필드에 담지않고, 수정/신규 옵션만 필드에 담아서 보내줍니다. 수정 API 개발할 때, 어떤식으로 처리하는게 좋은 방법인지 궁금하여 질문 드립니다.(수정 옵션) 상품 정보 업데이트 시 기존 옵션 데이터의 경우에는 ID로 데이터를 조회 후 변경 감지로 필요한 데이터만 수정하도록 했습니다.(추가 옵션) 신규 옵션 데이터는 ID 값이 없는걸 식별해서 추가하도록 로직을 짜는게 적절 할까요?(삭제 옵션) 기존 옵션 데이터를 삭제하고 싶습니다. 클라이언트에서 API로 옵션 정보를 넘겨주는데, 삭제되는 옵션은 넘어오지 않습니다. 이런 경우에는 ID가 식별되지 않아 변경 감지로 삭제할 수가 없을거 같은데 어떻게 해야할까요? (삭제는 soft delete 방식으로 처리해야 합니다.)삭제되는 ID 값을 deleteOptionIds 같은 필드로 따로 받아서 처리하는게 적절 할까요? 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
통합테스트가 안되면 실행이 안된다는 뜻인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]CONDITIONS EVALUATION REPORT 라고 에러메시지가 뜨면서 서비스통합테스트가 뜨는데 그럴땐 어디를 봐야 하나요? 서비스테스트랑 코드문은 똑같습니다. plugins { id 'java' id 'org.springframework.boot' version '3.4.1' id 'io.spring.dependency-management' version '1.1.7' } group = 'hhdplus' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' testImplementation 'org.springframework.boot:spring-boot-starter-test' runtimeOnly 'com.mysql:mysql-connector-j' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testRuntimeOnly 'org.junit.platform:junit-platform-launcher' implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl' } tasks.named('test') { useJUnitPlatform() }package hhdplus.hhplus_tdd2.service; import hhdplus.hhplus_tdd2.domain.reserve.Reserve; import hhdplus.hhplus_tdd2.domain.reserve.ReserveCommand; import hhdplus.hhplus_tdd2.domain.reserve.ReserveInfo; import hhdplus.hhplus_tdd2.domain.reserve.ReserveService; import hhdplus.hhplus_tdd2.infra.reserve.ReserveRepository; import hhdplus.hhplus_tdd2.interfaces.controller.ReserveRequest; import hhdplus.hhplus_tdd2.interfaces.controller.ReserveResponse; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.transaction.annotation.Transactional; import java.util.List; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @SpringBootTest //@ExtendWith(MockitoExtension.class) public class ReserveServiceIntergrationTest { @Autowired ReserveService reserveService; @Autowired ReserveRepository reserveRepository; ReserveRequest reserveRequest = new ReserveRequest(); ReserveResponse reserveResponse = new ReserveResponse(); Reserve reserve = new Reserve(); //동작하기 전에 넣어준다 BeforeEach // @BeforeEach // public void beforeEach() { // MockitoAnnotations.openMocks(this); // Mock 객체 초기화 // } // // @AfterEach //테스트 돌때마다 초기화 // public void afterEach() { // Mockito.reset(reserveRepository); // Mock 상태 초기화 // } @Test void 아이디별_예약_내역() { //given 뭔가가 주어졌는데 int userId = 1; ReserveInfo mockReserveInfo = new ReserveInfo(); mockReserveInfo.setId(1); mockReserveInfo.setUserId(userId); mockReserveInfo.setName("테스트 예약 정보"); List<ReserveInfo> mockReserveList = List.of(mockReserveInfo); // Mock 동작 설정 when(reserveService.findReservation(1)).thenReturn(mockReserveList); //when 이거를 실행했을 떄 List<ReserveInfo> result = reserveService.findReservation(userId); //then 결과가 이게 나와야 돼 if(result != null){ System.out.println("이름 : " + mockReserveInfo.getName()); } assertThat(result).isNotNull(); assertThat(result.size()).isEqualTo(1); assertThat(result.get(0).getUserId()).isEqualTo(userId); } @Test void 예약하기() {//40명이 예약 한다 쳐보면 30명만 예약이 되게끔 해보기 //given 뭔가가 주어졌는데 ReserveResponse reserveResponse = new ReserveResponse(); reserveResponse.setId(1); reserveResponse.setUserId(1); reserveResponse.setLectureId(1); //when 이거를 실행했을 떄 ReserveRequest findOne = reserveService.findOne(reserveResponse.getUserId()); findOne.setUserId(1); findOne.setLectureId(1); // Mock 동작 설정 when(reserveService.insertReservation(reserveResponse)).thenReturn(findOne); ReserveRequest result = reserveService.insertReservation(reserveResponse); //then 결과가 이게 나와야 돼 if(findOne != null){ System.out.println("findOne : " + reserveResponse.getLectureId()); } assertThat(reserveResponse.getLectureId()).isEqualTo(1); assertThat(result.getLectureId()).isEqualTo(1); } @Test void 예약수정() { //given 뭔가가 주어졌는데 ReserveCommand reserveCommand = new ReserveCommand(); reserveCommand.setLectureId(1); reserveCommand.setId(1); reserveCommand.setId(1); //when 이거를 실행했을 때 when(reserveService.modifyReservation(reserveCommand.getUserId())).thenReturn(reserveCommand); ReserveRequest findOne = reserveService.findOne(reserveCommand.getUserId()); //then 결과가 이게 나와야 돼 assertThat(findOne).isNotNull(); if(findOne != null){ System.out.println("findOne : " + reserveResponse.getLectureId()); } } @Test void 예약삭제() { //given 뭔가가 주어졌는데 ReserveResponse reserveResponse = new ReserveResponse(); reserveResponse.setId(1); reserveResponse.setUserId(1); reserveService.deleteReservation(reserveResponse.getId()); //when 이거를 실행했을 때 List<ReserveInfo> list = reserveService.findReservation(reserveResponse.getUserId()); //then 결과가 이게 나와야 돼 if(list.isEmpty()){ System.out.println("삭제 완료"); } assertThat(list.size()).isEqualTo(0); } }
-
미해결스프링 핵심 원리 - 기본편
테스트 코드 수행 시 메세지 목록 내용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]테스트코드를 수행하였을때 Creating shared instance of singleton bean xxx 이런 메세지가 나오지 않습니다. 어떻게해야 이 메세지를 확인할 수 있는지 환경 설정과 같은 설정 내용을 안내해 주실 수 있을까요
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
오류발생 NoClassDefFoundError: jakarta/servlet/annotation/WebServlet
[질문 내용]아래와 같은 오류가 발생합니다. Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-12-26T08:17:35.759+09:00 ERROR 30104 --- [servlet] [ main] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1239) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1176) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:288) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:202) ~[spring-context-6.2.0.jar:6.2.0] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) ~[spring-context-6.2.0.jar:6.2.0] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) ~[spring-context-6.2.0.jar:6.2.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) ~[spring-boot-3.4.0.jar:3.4.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.4.0.jar:3.4.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.4.0.jar:3.4.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) ~[spring-boot-3.4.0.jar:3.4.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) ~[spring-boot-3.4.0.jar:3.4.0] at hello.servlet.ServletApplication.main(ServletApplication.java:12) ~[classes/:na]Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-3.4.0.jar:3.4.0] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:60) ~[spring-boot-3.4.0.jar:3.4.0] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-3.4.0.jar:3.4.0] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1273) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:981) ~[spring-beans-6.2.0.jar:6.2.0] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1233) ~[spring-beans-6.2.0.jar:6.2.0] ... 16 common frames omittedCaused by: java.lang.ClassNotFoundException: jakarta.servlet.annotation.WebServlet at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] ... 22 common frames omittedProcess finished with exit code 1
-
미해결3. 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크]
안녕하세요~ 쿠폰 관련해서 질문드립니다
안녕하세요~ 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크] 강좌를 결제하였는데 혹시스프링 프레임워크+전자정부 표준프레임워크 강좌 무료쿠폰도 받아볼수있을까요?
-
해결됨스프링 시큐리티 OAuth2
JOSE 구성요소의 api에 관한 질문
안녕하세요jwt 강의에서 JOSE 구성요소 api들을 이용해서 토큰을 서명하고 검증을 하는도중에요 궁금한게 저희가 보통 가져다쓰는 토큰 발급 외부 라이브러리 jjwt 이런것 들도 결국엔 JWT, JWS, JwtDecoder 이런 것들을 가져다 사용한 건가요.?