inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

UsernameOnlyDto 에서 오류가 발생합니다.

미해결

실전! 스프링 데이터 JPA

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 클래스로 할때 오류가 납니다 ㅠㅠ UsernameOnlyDto package study.datajpa.repository; public class UsernameOnlyDto { private final String username; public UsernameOnlyDto(String username) { this.username = username; } public String getUsername() { return username; } } MemberRepository List<UsernameOnlyDto> findProjectionByUsername(@Param("username") String username); Test @Test public void projections() { // given Team teamA = new Team("teamA"); em.persist(teamA); Member m1 = new Member("m1", 0, teamA); Member m2 = new Member("m2", 0, teamA); memberRepository.save(m1); memberRepository.save(m2); em.flush(); em.clear(); //when List<UsernameOnlyDto> result = memberRepository.findProjectionByUsername("m1"); for (UsernameOnlyDto usernameOnlyDto : result) { System.out.println("usernameOnlyDto = " + usernameOnlyDto); } //then } 오류내용 java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@66450129 testClass = study.datajpa.repository.MemberRepositoryTest, locations = [], classes = [study.datajpa.SpringDataJpaApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@28f2a10f, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@56cdfb3b, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@35aea049, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7c24b813, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@485966cc, org.springframework.boot.test.context.SpringBootTestAnnotation@b5608ce], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]

  • java
  • spring
  • spring-boot
  • jpa
김철준 댓글 1 좋아요 0 조회수 303

프로젝트 생성시 Srping MVC Project 없음

미해결

스프링 프레임워크는 내 손에 [스프1탄]

구글링해서 설치하려고 해도 안 되네요. 아래 분들 질문 참고해서 설치하려고 해봐도 안 되는데 자세하게 답변 좀 부탁드립니다 ㅠㅠ

  • jsp
  • spring
  • mvc
  • spring-security
엄석대 댓글 1 좋아요 0 조회수 389

DB에서 데이터가 삭제되지 않습니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요 강사님. 강사님의 강의를 들으면서 혼자 프로젝트를 진행 중인데 혹시 이런 에러상황도 있을 수 있는지 여쭤보고 싶어서 질문남깁니다. 웹 사이트에서 특정 데이터 값을 삭제를 진행했고, 서버에서도 삭제가 잘 되었다는 로그와 함께 에러없이 삭제 완료되었는데, DB에서 그 값을 검색하면 그대로 남아있는 경우엔 어떻게 해결해야할까요? 삭제를 할때, 테이블의 PK값으로 해당 데이터를 삭제하는 것이 아니고 레코드의 PK말고 다른 값들을 찾아서 그 값이 있으면 데이터를 삭제하라고 로직을 짰거든요. 그리고 처음에 기능을 완료했을땐, 잘 삭제가 되었는데 나중에 다시 테스트 진행하니 갑자기 DB에서 삭제가 되지않고 있습니다. // 권한 거부 확인 버튼 클릭 이벤트 핸들러 $(document).on('click', '#confirmRevokePermissionButton', function() { const selectedPermission = $('#permissionSelect').val(); const selectedUsers = $('.user-checkbox:checked').map(function() { return $(this).val(); }).get(); const projPK = $('#projectSettingForm').data('proj-pk'); if (selectedPermission && selectedUsers.length > 0) { $.ajax({ url: `/projMgmt/setting/${projPK}/revokePermission`, type: 'DELETE', data: JSON.stringify({ userPKs: selectedUsers, perPK: selectedPermission }), contentType: 'application/json', success: function(response) { Swal.fire({ icon: 'success', title: '권한 삭제 완료', text: '권한이 성공적으로 삭제되었습니다.', confirmButtonText: '확인' }).then((result) => { if (result.isConfirmed) { loadSetting(projPK); $('#permissionModal').modal('hide'); } }); }, error: function(xhr, status, error) { let errorMessage = '권한 삭제 중 오류가 발생했습니다.<br>'; if (xhr.responseText) { errorMessage += xhr.responseText; } Swal.fire({ icon: 'error', title: '권한 삭제 실패', html: errorMessage, confirmButtonText: '확인' }); } }); } else { Swal.fire({ icon: 'warning', title: '선택 없음', text: '권한을 선택해주세요.', confirmButtonText: '확인' }); } }); 이렇게 서버로 코드를 보내고 있고, @DeleteMapping("/setting/{projPK}/revokePermission") @ResponseBody public ResponseEntity<String> revokePermissions(@PathVariable Long projPK, @RequestBody Map<String, Object> requestBody) { try { List<Long> userPKs = ((List<?>) requestBody.get("userPKs")).stream() .map(Object::toString) .map(Long::valueOf) .toList(); Long perPK = Long.valueOf(requestBody.get("perPK").toString()); for (Long userPK : userPKs) { log.info("revokePermission projPK: {}, userPK: {}, perPK: {}", projPK, userPK, perPK); userPermissionService.revokePermission(projPK, userPK, perPK); } return ResponseEntity.ok("권한 거부 완료"); } catch (IllegalStateException e) { return ResponseEntity.status(HttpStatus.CONFLICT).body(e.getMessage()); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("권한 거부 중 오류가 발생했습니다: " + e.getMessage()); } } 서버에서 값을 받으면 @Override @Transactional public void revokePermission(Long userPK, Long projPK, Long perPK) { List<UserPermission> userPermissions = userPermissionRepository.findByUser_UserPKAndProject_ProjPKAndPermission_PerPK(userPK, projPK, perPK); if (userPermissions.isEmpty()) { throw new IllegalStateException("해당 사용자는 부여된 권한이 없습니다."); } userPermissionRepository.deleteAll(userPermissions); log.info("Deleted permissions for userPK: {}, projPK: {}, perPK: {}", userPK, projPK, perPK); } 보내진 값을 확인하고 값이 있으면 그 값을 삭제하고 값이 없으면 에러 메시지를 발송되게 해놨습니다. 추가로 작성하자면, 체크된 사용자를 권한삭제 버튼을 클릭했을 때 권한선택창이 뜨고 수정 권한 삭제를 클릭하면, 완료되었다는 알림창이 뜨고 서버쪽에서는 이렇게 로그가 발송되지만, DB에 찾아보면 여전히 값이 남아있는 것이 확인이 됩니다.

  • spring
  • mvc
  • jpa
Ming K 댓글 2 좋아요 0 조회수 311

HellospringApplication을 실행하고, 중지 했을때 에러가 나옵니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의 초반에 HellospringApplication의 main 을 실행했을떄 다른거는 다 잘나오는데, stop을 했을경우 위와같이 에러가 나옵니다ㅠㅜ 혹시 그냥 중지해서 나오는걸까요? 아니면 어떤 부분이 잘못된건가요?

  • java
  • spring
  • mvc
  • spring-boot
샬롸샬롸 댓글 1 좋아요 0 조회수 216

Memberform 클래스 사용이 필수인가요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] @PostMappping("/members/new") public String create() 여기에 Memberform form 을 파라미터로 넣었는데, Memberform 클래스를 사용하지 않고 이런식으로 그냥 Member 만 사용해서 바로 join이 가능한가요? 가능하지만 MemberForm 클래스를 활용하는 데 장점이 존재하기 때문에 MemeberForm 클래스를 사용하는건가요? 아니면 아예 아래 코드처럼은 불가능한건가요? @PostMapping("/members/new") public String create(Member member) { memberService.join(member); return "redirect:/"; }

  • java
  • spring
  • mvc
  • spring-boot
canach3 댓글 2 좋아요 0 조회수 342

오늘 결제 했습니다!

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

오늘 결제 했습니다! 잘 들을게요

  • java
  • spring
  • spring-boot
  • jpa
이용규 댓글 2 좋아요 1 조회수 183

오늘 결제 했습니다!

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

오늘 결제 했습니다! 잘 들을게요

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
이용규 댓글 2 좋아요 0 조회수 242

오늘 결제 했습니다!

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

오늘 결제 했습니다! 잘 들을게요

  • spring
  • mvc
이용규 댓글 2 좋아요 1 조회수 182

감사합니다!

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

오늘 결제 했습니다! 잘 들을게요

  • spring
  • mvc
이용규 댓글 2 좋아요 0 조회수 157

학습 페이지 가 열리지 않아서 강의 시청이 안 됩니다.

미해결

윤재성의 만들면서 배우는 Spring MVC 5

안녕하세요. 학습 페이지 가 열리지 않아서 강의 시청이 안 됩니다. 모바일에서는 되는데 PC 에서는 안 됩니다. 1 시간 째 계속 안 되고 있습니다. 사용 브라우저는 Chrome, FireFox 입니다. 점검 부탁합니다. 사이트 오류인지요?

  • java
  • spring
  • mvc
  • xml
박종성 댓글 1 좋아요 1 조회수 313

수정, 삭제 기능 관련 질문있습니다

미해결

3. 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크]

안녕하세요. 지금까지 강의따라가면서 조회, 등록 페이지는 구현을 했는데 (boardView, boardWrite) 수정이랑 삭제하는 기능도 구현하고 싶습니다 (boardEdit, boardRemove) 강의에서는 수정,삭제를 다루는 부분이 없는거 같은데 맞을까요? 아니라면 강의 어디를 보면 되는지 알려주시면 감사하겠습니다! 그리고 게시글을 한글로 작성하면 저장이 안되고, 영어+숫자는 되는데 혹시 이 문제 해결하려면 어떻게 해야할까요...??

  • spring
  • 전자정부프레임워크
스스로 스터디 댓글 2 좋아요 0 조회수 280

orElseThrow에 관해서

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요 강의 11:15초에 있는 예외 던지는 것에 대해서 질문이 있습니다. orElseThrow로 테이블에 데이터 없는 경우 예외가 터진다고 하셨는데 예외처리는 따로 안 해도 되는 건가요?

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
마이티 댓글 1 좋아요 2 조회수 147

안드로이드, iOS에서 sdk를 사용할 때 어떻게 해야할까요?

미해결

스프링 시큐리티 OAuth2

앱에서 sdk를 사용하면 인증 코드 또는 엑세스 토큰을 발급받는 과정에서 클라이언트(spring boot)와 통신을 하지 않는데요. 이 때는 스프링 oauth2 client를 활용할 수 없는걸까요? sdk에서 발급 받은 인증 서버(구글, 카카오 등)의 엑세스 토큰을 앱 -> 클라이언트로 넘겨서 회원가입 및 로그인 처리를 해야하는 건지 궁금합니다.

  • java
  • spring
  • spring-boot
  • oauth
화이팅 댓글 2 좋아요 0 조회수 230

학습 전에 데이터베이스 학습을 하고 들어야 할까요?

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

정처기 기출 정도만 본 적 있는데 어렴풋이 기억이 나는 상태입니다. MVC 1,2편 를 데이터베이스를 잘 모르는 상태로 들어도 될까요?

  • spring
  • mvc
qowlgur121 댓글 1 좋아요 0 조회수 156

안녕하세요, Spring Legacy Project 생성 시 오류 문의드립니다.

미해결

[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]

전자정부프레임워크는 eGovFrame-4.0.0을 사용하고 있으며, https-content.xml 파일을 알려주신 C:\eGovFrame-4.0.0 \workspace.ed u\.metadata\.plugins\org.springsource.ide.eclipse.commons.content.core 경로에 넣어 Spring MVC Project는 나오는 상태입니다.

  • spring
  • mvc
  • ajax
  • pojo
chic0813 댓글 1 좋아요 0 조회수 382

HandlerExceptionResolver 질문입니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요. HandlerExceptionResolver에서 ModelAndView 를 반환하는 이유가 마치 Exception을 정상 흐름처럼 변경하는 것이 목적이라고 하셨는데, 빈 ModelAndView를 반환하면 해당 페이지가 존재하지 않아 또 다른 에러가 생기는 것이 아닌가요? 아니면 빈 ModelAndView를 반환하기 전에 response.sendError(xxx)로 서블릿에서 처리하도록 또는 response.getWriter.println("xxx")를 호출하기 때문에 빈 ModelAndView를 반환해도 이상이 없는건가요? 감사합니다.

  • spring
  • mvc
oniic 댓글 1 좋아요 0 조회수 171

통합테스트

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 내용] 안녕하세요 수업과 직접적으로 관련된 질문은 아니지만 궁금한 점이 있어서 질문 드립니다. 영한님 강의에서는 controller통합테스트를 postman으로 진행하는데 restTemplate을 이용해 직접 통합테스트 코드를 짜는것과 포스트 맨을 이용해 테스트하는 것 중 어느것을 더 추천하시는지 궁금합니다 또한 직접코드를짜지않고 포스트맨으로 테스트하면 스펙상 불이익이 있는지도 궁금합니다!!

  • spring
  • mvc
해톨 댓글 1 좋아요 0 조회수 227

질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

강의 내용 중 엔티티에 비즈니스 로직을 포함시키셨는데 여러 사이트를 보면서 내용을 이해하려고 노력하면서 최종적으로 이런 결론을 지었습니다. Q. 어떤 비즈니스 로직을 서비스 계층에서 구현해야 하고 어떤 비즈니스 로직을 도메인에서 구현하는 것이 맞을까? A. 상품과 관련된 비즈니스 로직(주문 접수에 따른 재고 감소, 주문 취소에 따른 재고 증가)에서는 하나의 도메인만 활용이 되므로 하나의 도메인만으로 비즈니스 로직을 구현할 수 있다고 판단되는 상황이라면 도메인에 비즈니스 로직을 구현해도 괜찮지만 여러 도메인을 활용해야하는 복잡한 비즈니스 로직을 구현하거나 회원가입이나 로그인과 같이 리포지토리와 직접적 관련을 맺고 있는 비즈니스 로직의 경우라면 서비스 계층에서 구현하는 것이 맞다. 질문에 대한 대답이 이게 맞는지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
피곤한개발자 댓글 1 좋아요 0 조회수 140

브라우저 마다 URL이 다르게 전송됩니다.

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] hello-form에 폼 action에 분명 "/request-param-v1"으로 입력되어 있는데 크롬으로 전송하면 "/request-param"으로 url이 바껴버리는 증상이 있습니다. 막상 다른 브라우저로 전송하면 정상적으로 작동하는데 원인을 모르겠습니다..

  • spring
  • mvc
김승윤 댓글 1 좋아요 0 조회수 185

엔티티 비즈니스 로직 vs 서비스 비즈니스 로직

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

강의에서 DDD의 개념을 적용하시면서 엔티티에 비즈니스 로직을 넣으셨었는데요. 아직까진 DDD에 대한 개념이 완벽히 정립되지 않아 별도의 자료로 공부를 하고 있습니다. 공부하는 차원에서 서비스 계층에서의 비즈니스 로직 개발로 코드 리팩토링을 스스로 해보고 강의에 나오지 않았던 상품 서비스 테스트 코드 작성 결과 일단 통과가 나오긴 했습니다만... 잘 한 것인지 몰라서 코드 평가를 좀 받아보고 싶어 질문을 올리게 되었습니다. 테스트 코드 역시 각 계층별로 지켜야 하는 테스트 코드 원칙이 있으나 이 부분도 같이 공부하느라 제대로 적용해보기 아직 어려운 단계라 @SpringBootTest 를 사용했습니다. 이 부분은 감안해주세요..! 또 다른 추가 질문이 있습니다. 강의에서 엔티티에 구현한 비즈니스 로직을 서비스 계층에 비즈니스 로직을 개발하는 방식으로 바꾸는 과정에서 엔티티를 직접 이용하는 것보다는 DTO를 만들어서 전달하는게 엔티티에 많은 변화를 가하지않는 유일한 방법일까요? ItemService 코드 package spring.project.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import spring.project.domain.Item; import spring.project.exception.NotEnoughStockException; import spring.project.repository.ItemRepository; import java.util.List; @Service @Transactional(readOnly = true) public class ItemService { private final ItemRepository itemRepository; @Autowired public ItemService(ItemRepository itemRepository) { this.itemRepository = itemRepository; } @Transactional public Long saveItem(Item item, int quantity) { addStock(item, quantity); itemRepository.save(item); return item.getId(); } private void addStock(Item item, int quantity) { item.setStockQuantity(item.getStockQuantity() + quantity); itemRepository.save(item); } @Transactional public void removeStock(Item item, int quantity) { int restStock = item.getStockQuantity() - quantity; if (restStock < 0) { throw new NotEnoughStockException("재고가 부족합니다."); } item.setStockQuantity(restStock); itemRepository.save(item); } public Item findOne(Long itemId) { return itemRepository.findOne(itemId); } public List<Item> findAll() { return itemRepository.findAll(); } } ItemServiceTest 코드 package spring.project.service; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import spring.project.domain.Album; import spring.project.domain.Book; import spring.project.domain.Item; import spring.project.repository.ItemRepository; @SpringBootTest class ItemServiceTest { @Autowired private ItemRepository itemRepository; @Autowired private ItemService itemService; @Test @DisplayName("상품 저장 시 상품 저장과 동시에 재고 수량이 증가해야 한다.") void save() { // given Book book = new Book(); book.setAuthor("홍길동"); // when Long id = itemService.saveItem(book, 3); // then Item item = itemRepository.findOne(id); Assertions.assertThat(item.getName()).isEqualTo(book.getName()); Assertions.assertThat(item.getStockQuantity()).isEqualTo(3); } @Test @DisplayName("상품 주문이 들어가면 재고 수량에서 주문 수량만큼 차감이 되어야 한다.") void remove() { // given Album album = new Album(); album.setName("영원"); Long id = itemService.saveItem(album, 100); // when itemService.removeStock(album, 4); // then Item item = itemRepository.findOne(id); Assertions.assertThat(item.getStockQuantity()).isEqualTo(96); } }

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
댓글 1 좋아요 0 조회수 640

인기 태그

인프런 TOP Writers

주간 인기글