inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

혼자서 삭제 구현중에 Request method 'DELETE' not supported 오류 질문드립니다!

해결됨

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

안녕하세요 강의 너무 잘 듣고 있습니다!! CRUD중 D가 없어서 직접 구현하던중에 오류에 부딪혔는데 해결할 수 없어서 질문드립니다 ㅠㅠ 먼저 HiddenHttpMethodFilter를 사용해야 HTML Form에서 PUT, DELETE를 사용할 수 있다고 알고있습니다. 따라서 application.properties에 다음과같이 필터를 추가했습니다. # HTML form에서 GET, POST 뿐 아니라 PUT, DELETE도 사용하기 위해서 설정 spring.mvc.hiddenmethod.filter.enabled=true 이후 editForm.html에서도 다음과 같은 delete input태그 및 삭제 버튼을 추가했습니다. <form action="item.html" th:action method="post"> <input type="hidden" name="_method" value="delete"> . . 중략 . <div class="col"> <button class="w-100 btn btn-primary btn-lg" type="submit" th:formaction="|@{/basic/items/{itemId}/edit(itemId = ${item.id})}|">저장 </button> </div> <div class="col"> <button class="w-100 btn btn-primary btn-lg" type="submit" th:formaction="|@{/basic/items/{itemId}/edit/delete(itemId = ${item.id})}|">삭제 </button> </div> </div> </form> 이후 다음과 같이 @DeleteMapping 컨트롤러를 작성했습니다. @DeleteMapping("/{itemId}/edit/delete") public String deleteForm(@PathVariable Long itemId, RedirectAttributes redirectAttributes) { Item deletedItem = itemRepository.delete(itemId); redirectAttributes.addAttribute("itemName", deletedItem.getItemName()); redirectAttributes.addAttribute("status", true); return "redirect:/basic/items"; } 문제가 되는 부분은 삭제 버튼은 잘 동작하고, redirectAttribute까지 잘 적용됩니다만, 오히려 저장 버튼을 누르면 Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported] 오류가 발생하네요 아무래도 기존 저장이 POST가 아닌 DELETE로 전송되어 생기는 문제같습니다. 궁금한점은 이렇게 DELETE와 POST를 하나의 폼에서 다른 버튼을 눌렀을때 각각 동작하게 하는 방법은 없고, 각각 다른 폼을 이용해야 하는건지 궁금해서 질문드립니다!! 감사합니다!

  • MVC
  • spring
이호석 댓글 1 좋아요 2 조회수 1959

PasswordChangeForm 재정의 관련 질문

해결됨

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

안녕하세요 강사님, PasswordChangeForm 을 재정의 하는 부분에서 질문이 있어 글 남깁니다. 1. PasswordChangeForm은 SetPasswordForm을 상속받기 때문에 clean_new_password2를 오버라이딩하여 해당 함수가 기존 대로 실행 될때 단순히 old_password와 같은지 비교하는 로직을 추가한게 맞나요? 2. clean_new_password2를 오버라이딩 할 때, super().clean_new_password2()를 하지 않고 self.cleaned_data.get('new_password2')를 하게 기존의 pw1==pw2 확인하는 로직이 사라져 버리기 때문에 문제가 생기는 것이 맞나요? (실험결과 new_pw1, new_pw2 를 다르게 넣으면 new_pw1 으로 변경이 됩니다). 즉 super()... 를 적어줘야 기존 로직을 지킬 수 있는 것이죠? 3. clean_new_password1은 새로운 함수를 정의한 것인데 clean_ 이 앞에 붙었기 때문에 PasswordChangeForm의 로직이 동작할 때 무조건 해당 함수가 실행이 되는 것이 맞나요? 이 함수가 실행되는 시점이 궁금합니다. 감사합니다.

  • react
  • docker
  • python
  • django
zxpjh0323 댓글 1 좋아요 1 조회수 336

스프링 컨테이너와 서블릿 컨테이너

미해결

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

안녕하세요! 강의를 든던중 궁금한 점이 있어서 이렇게 질문 남깁니다. 스프링 컨테이너는 서블릿 컨테이너의 한 종류라고 인식을 해도 되는걸가요?

  • spring
  • MVC
최지환 댓글 2 좋아요 1 조회수 2686

PyCharm Professional

미해결

장고 설계철학으로 시작하는 파이썬 장고 입문

안녕하세요. 본 강의에 대한 내용을 실습하는데 PyCharm Professional이 필수적인지 문의 드립니다. 우선 community로 연습해보려고 하는데 실습이 안되는 파트가 있나요?

  • python
  • django
Anderson 댓글 1 좋아요 0 조회수 398

원핫인코딩 관련 궁금증

미해결

[개정판] 파이썬 머신러닝 완벽 가이드

안녕하세요. 강의 듣다가 궁금증이 생겨서 질문 드립니다. 이 Bike Sharing Demand 데이터 실습에서 원핫인코딩을 수행할 때, 인코딩을 먼저 수행 후 train과 test를 분리했는데, 실전을 포함해서 test 데이터가 이미 분리된 상태로 주어진 경우 도 많은 것 같아요. 근데 이럴 때 train과 test 각각 따로 인코딩을 수행하면 특정 칼럼에 대해 서로 없는 범주가 포함될 수 있을 것 같습니다. (예를들어 train에는 개/고양이만 있는데, test에는 개/고양이/원숭이 범주까지 있다던지..) 이 경우에 칼럼 갯수에도 차이가 발생할텐데 이때 모델 학습/예측시에 문제가 발생하지 않나요? 그렇다고 pd.concat 등으로 데이터를 합치고서 인코딩을 수행 후 다시 분리하면 데이터 리키징 문제가 발생한다고 들었습니다. (아니라면 말씀해주세요!) 머신러닝/딥러닝 강의 계속 잘 듣고 있습니다. 감사합니다.

  • 통계
  • python
  • 머신러닝 배워볼래요?
강주형 댓글 1 좋아요 1 조회수 859

강의자료

해결됨

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

영한님이 강의할 때 사용하시는 강의자료(?)는 따로 업로드 안되어있는건가요? 제가 못찾는거인지 궁금합니다.... 베어라고 되어있는데 이 자료가 따로 업로드되어 있는지 궁금합니다..!!

  • java
  • spring-boot
  • spring
  • MVC
WOOKI 댓글 1 좋아요 0 조회수 516

http 요청 데이터 - post html form

해결됨

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

요러케 여기서 전송을 누르면 다음으로 넘어가야하는데, 저는 누르면 이런 식으로 에러 뜹니다. 코드는 따라 타이핑 하였으며, html만 복붙했습니다,

  • spring
  • MVC
댓글 2 좋아요 1 조회수 305

@Transactional generate key 질문

해결됨

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

안녕하세요! '스프링 통합 테스트' 강의 중 궁금한 사항이 생겨서 올립니다. @Transactional 어노테이션을 붙이면 각 테스트 항목 실행 후 롤백한다고 하셨는데, insert문 실행됐을 때 자동 업데이트되는 키 값은 계속 증가합니다. 왜 이 값은 롤백이 되지 않는지 문의드립니다. 감사합니다!

  • MVC
  • spring-boot
  • spring
  • java
나나 댓글 1 좋아요 0 조회수 368

야생형 코스대로 진행하려는데

미해결

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

야생형 커리큘럼 순서가 어떻게되는지 알수있을까요? 구글링해도 안나와서요 ㅠㅠ

  • spring
  • MVC
  • spring-boot
  • java
댓글 1 좋아요 0 조회수 507

실무에서도 이렇게하나요??

해결됨

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

검색하다보니 스프링 시큐리티로 로그인하는방법이 있어서 그런데 로그인에 대한 이론만 알려주시는건지 진짜 이렇게 실무에서도 쓰는지 궁금합니다.

  • MVC
  • spring
대배랙 댓글 1 좋아요 1 조회수 494

@Aspect 사용할수 없음

미해결

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

Aop 섹션 Aop적용 강의에서 @Aspect 를 사용하시는데 저는 사용할수가 없습니다.. 라이브러리를 따로 추가해야하나요?

  • @Aspect
  • aspect
  • MVC
  • java
  • spring-boot
  • spring
유석균 댓글 2 좋아요 0 조회수 365

assertThat.contains

미해결

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

@Test void findAll(){ //given Item item1 = new Item("item1", 1000, 10); Item item2 = new Item("item2", 1000, 10); itemRepository.save(item1); itemRepository.save(item2); //when List<Item> result = itemRepository.findAll(); //then assertThat(result.size()).isEqualTo(2); assertThat(result).contains(item1,item2); } 항상 강의 즐겁게 듣고 있습니다. 강의를 듣던중 contains가 조금 궁금해서 질문드립니다. Item item1 = new Item("item1", 1000, 10); Item item2 = new Item("item2", 1000, 10); item1과 item2는 new로 생성한 객체여서 id가 null로 되어있다고 생각하고 List<Item> result = itemRepository.findAll(); result에는 itemRepository.save의 sequence++와 setId를 통해 Id값이 저장된 [1,Item], [2,Item] 두개의 키와 value가 저장되어 있다고 생각합니다.. 근데 여기서 contain로 비교하면 item1 Item(id=null, itemName=item1, price=1000, quantity=10) result안의 값 Item(id=1, itemName=item1, price=1000, quantity=10) item2 Item(id=null, itemName=item2, price=1000, quantity=10) result안의 값 Item(id=2, itemName=item2, price=1000, quantity=10) 서로 달라서 테스트가 실패해야하지않을까? 라는 생각이 들더라구요.. asseretThat( A ) .contains( B )가 dto를 비교할때 public Item(String itemName, Integer price, Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; } 생성자에 있는 값으로만 비교하는걸까요?(추가해봐도 참이나오네요..) contains는 무엇을 기준으로 판단을 하는걸까요?

  • spring
  • MVC
김재준 댓글 1 좋아요 2 조회수 391

속도의 차이

해결됨

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

Assertions.assertEquals(result,member); 하고 assertThat(member).isEqualTo(result); 에서.. 위 메소드는 실행시간이 23ms이고 아래 메소드는 실행시간이 70ms로 나오는거 같은데.. 아래 문법이 더 좋은점이 있나요?..

  • spring-boot
  • java
  • MVC
  • spring
댓글 1 좋아요 1 조회수 203

MemberServiceTest 회원가입 오류

미해결

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

안녕하세요 질문 사항이 있어 글을 남깁니다. 구글링을 통해 Member findMember = memberService . findOne ( savId ). get (); 부분이 오류가 있다는 것을 알았습니다. 그리고 나서 다시 로직을 보면서 다시 하여도 똑같은 오류가 발생해 글을 올립니다. MemberServiceTest package com.test.inflearn.service ; import com.test.inflearn.domain.Member ; import org.assertj.core.api.Assertions ; import org.junit.jupiter.api.Test ; import java.util.Optional ; //회색 import static org.junit.jupiter.api.Assertions . * ; /회색 class MemberServiceTest { MemberService memberService = new MemberService (); @Test void 회원가입 () { //given ( 뭔가가 주어졌을 때 ) Member member = new Member (); member . setName ( "hello" ); //when ( 이걸로 실행 했을 때 ) Long savId = memberService . join ( member ); //then ( 결과가 이게 나와야 한다 .) Member findMember = memberService . findOne ( savId ). get (); Assertions . assertThat ( member . getName ()). isEqualTo ( findMember . getName ()); } @Test void findMembers () { } @Test void findOne () { } } MemberService package com.test.inflearn.service ; import com.test.inflearn.domain.Member ; import com.test.inflearn.repository.MemberRepository ; import com.test.inflearn.repository.MemoryMemberRepository ; import java.util.List ; import java.util.Optional ; public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository (); /** * 회원 가입 */ public Long join ( Member member ) { // 같은 이름이 있는 중복 가입 X validateDuplicateMemory ( member ); // 중복 회원 검증 memberRepository . save ( member ); return member . getId (); } private void validateDuplicateMemory ( Member member ) { memberRepository . findByName ( member . getName ()) . ifPresent ( m -> { throw new IllegalStateException ( " 이미 존재하는 회원 입니다 ." ); }); } /** * 전체 회원 조회 */ public List < Member > findMembers () { return memberRepository . findAll (); } public Optional < Member > findOne ( Long memberId ) { return memberRepository . findById ( memberId ); } } repository = MemberRepository(인터페이스) package com.test.inflearn.repository ; import com.test.inflearn.domain.Member ; import java.util.List ; import java.util.Optional ; public interface MemberRepository { Member save ( Member member ); Optional < Member > finById ( Long id ); Optional < Member > findByName ( String name ); List < Member > findAll (); Optional < Member > findById ( Long memberId ); // Optional<Member> findById(Long memberId); } repository = MemberRepository (클래스) package com.test.inflearn.repository ; import com.test.inflearn.domain.Member ; import java.util. * ; public class MemoryMemberRepository implements MemberRepository { private Map < Long , Member > store = new HashMap <> (); private static long sequence = 0L ; @Override public Member save ( Member member ) { member . setId ( ++ sequence ); store . put ( member . getId (), member ); return member ; } @Override public Optional < Member > finById ( Long id ) { return Optional . ofNullable ( store . get ( id )); } @Override public Optional < Member > findByName ( String name ) { return store . values (). stream () . filter ( member -> member . getName (). equals ( name )) . findAny (); } @Override public List < Member > findAll () { return new ArrayList <> ( store . values ()); } @Override public Optional < Member > findById ( Long memberId ) { return Optional . empty (); } //test 를 한번 할때 마다 지워준다 . public void clearStore () { store . clear (); } } domain = Member package com.test.inflearn.domain ; public class Member { private Long id ; private String name ; //get, set public Long getId () { return id ; } public void setId ( Long id ) { this . id = id ; } public String getName () { return name ; } public void setName ( String name ) { this . name = name ; } } 오류 메시지 at java.util.Optional.get(Optional.java:135) at com.test.inflearn.service.MemberServiceTest.회원가입(MemberServiceTest.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.util.ArrayList.forEach(ArrayList.java:1259) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.util.ArrayList.forEach(ArrayList.java:1259) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)

  • MemberServiceTest
  • spring
  • java
  • spring-boot
  • MVC
댓글 2 좋아요 0 조회수 347

중복회원예외에서 assertThrows

미해결

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

assertThrows에서 오류가 생기는데 이를 해결할 방법을 알려주시길 부탁드립니다 <Memberservice> package hello.hellospring1.service; import hello.hellospring1.repository.MemoryMemberRepository; import hello.hellospring1.repository.MemberRepository; import hello.hellospring1.domain.Member; import java.util.List; import java.util.Optional; public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository){ this.memberRepository = memberRepository; } /** * 회원가입 */ public Long join(Member member){ //같은 이름이 있는 중복 회원은 x validateDuplicateMember(member); //optional으로 한번 감싸면 optional안에 member객체가 있는거 //옛날에는 ifnull 지금은 optional로 감싸기 //optional로 바로 반환하는거는 추천x memberRepository.save(member); return member.getId(); } private void validateDuplicateMember(Member member) { memberRepository.findByName(member.getName()) //ctrl+alt+v .ifPresent(m -> { //result가 null이 아니면 즉, 값이 있으면 동작 throw new IllegalStateException("이미 존재하는 회원입니다."); }); } /** * 전체 회원 조회 */ public List<Member> findMember() { return memberRepository.findAll(); } public Optional<Member> findOne(Long memberId){ return memberRepository.findById(memberId); } } <MemberServiceTest> -> 중복_회원_예외에서 오류 발생 package hello.hellospring1.service; import hello.hellospring1.domain.Member; import hello.hellospring1.repository.MemoryMemberRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; //import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; //import static org.assertj.core.api.Assertions.*; class MemberServiceTest { //test코드는 실제 코드에 포함 되지 않음 MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach() { memberRepository = new MemoryMemberRepository(); memberService = new MemberService(memberRepository); } @AfterEach public void afterEach() { memberRepository.clearStore(); } @Test void 회원가입() { //given -> 이런게 주어지면 (이 데이터를 기반으로 하는 구나) Member member = new Member(); member.setName("hello"); //when -> 이게 주어졌을 떄 (이걸 검증하는 구나) Long saveId = memberService.join(member); //then -> 이렇게 실행 되어야 돼(여기가 검증부구나) // Member findMember = memberRepository.findById(saveId).get(); // assertEquals(member.getName(), findMember.getName()); Member findMember = memberService.findOne(saveId).get(); Assertions.assertThat(member.getName()).isEqualTo(findMember.getName()); } //test는 정상도 중요한데 예외도 중요함 @Test public void 중복_회원_예외() { //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, ()->memberService.join(member2)); Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); /* try { memberService.join(member2); fail(); } catch (IllegalStateException e){ Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } */ //then } <오류 화면>

  • spring-boot
  • MVC
  • java
  • spring
jangso825 댓글 2 좋아요 0 조회수 623

이제 엄청 초반인데 막혔습니다 ㅠ

미해결

내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)

requirements.txt 파일에 접근해서 pip install -r requirements.txt 해야하지 않습니까? 근데 이 파일에 접근이 안되는데 혹시 이유좀 알려주실 수 있나용 이것 구글에 쳐봐도 잘 모르겠어요 ㅜ 다운 받은 강의 자료를 지워서 새로 깔아도 안되고 파일 위치를 옮겨봐도 소용없어요. 그리고 dir로 디렉토리 띄워놓고 cd requirements.txt 칠때 탭으로 자동완성도 안되는거 보니 뭔가 연관이 있는거 같은데 알려주시면 감사하겠습니다

  • requirements.txt
  • python
  • 웹-크롤링
댓글 2 좋아요 0 조회수 424

파일 다운로드 부분 중 질문

해결됨

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

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 파일 다운로드 부분에서 궁금한 점이 생겨서 질문을 남깁니다 :) String storeFileName = item.getAttachFile().getStoreFileName(); String uploadFileName = item.getAttachFile().getUploadFileName(); 여기 부분에서 이해가 안가는 부분이 있는데 item.getAttachFile() 이 부분은 item.java에 있는 attachFile을 가져오는걸로 아는데 뒤에 getStoreFileName은 UploadFile.java에 있는 storeFileName인데 이것을 어떻게 부를 수 있는지 궁금합니다.. item으로 받았는데 UploadFile에 storeFileName을 부를 수 있다는게 이해가 잘 안가서여 ㅠ

  • MVC
  • spring
얄라차개발자 댓글 1 좋아요 0 조회수 591

현재 테스트예시에서의 BeforeEach 현업에서 사용

미해결

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

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 예시에서는 각 서비스별로 연관되는 부분이 없어 BeforeEach를 사용하지 않아도 되지만, 테스트시 연관을 끊는 의도에서 BeforeEach를 사용하는것으로 이해했습니다. 현업에서도 각 메소드에 연관되는 부분이 없더라도 인스턴스생성시에 나눠주는편이 좀더 바람직하다고 볼수 있을까요? 연관되는부분이 있는지 파악하는것도 시간소요이고 실제 빌드시에 테스트코드는 빠지기 때문에 더하는편이 덜하는편보다 낫지 않을까 하는 판단입니다. 아직 직무경험이 없고 배우는 입장이라 이런식의 사고방향이 맞는것인지 궁금합니다.

  • MVC
  • spring
  • java
  • spring-boot
꼬꼬록 댓글 1 좋아요 1 조회수 423

WebServerCustomizer 클래스에 @Component?

미해결

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

@Component public class WebServerCustomizer implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> { @Override public void customize(ConfigurableWebServerFactory factory) { .... } } ebServerCustomizer 클래스의 @Component를 붙여서 자동으로 빈으로 등록하고나서 이 빈을 주입해서 사용하는 코드가 없는데도 잘 호출되네요.. 제가 알기론 보통 빈으로 등록하고 해당 빈을 주입해서 사용하는걸로 아는데 이렇게 빈으로 등록만 했는데도 스프링이 필요할때 자동으로 사용할 수 있나요? 제가 잘못 알고있는건가요..? 아님 이게 업무 로직 빈이 아니라 공통 기술을 처리하는 기술 지원 빈 그런거라서 가능한 건가요?

  • spring
  • MVC
gil jung 댓글 1 좋아요 0 조회수 527

설치기본 환경설정에서 script가 없습니다.

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

atom에서 script를 설치하라고 하시는데 atom에서 script가 없어서 무엇을 설치해야되는지 잘모르겠습니다. 다른 packages를 설치해야한다면 뭘 설치해야할까요?

  • atom
  • python
  • 환경설정
초코칙촉 댓글 1 좋아요 0 조회수 387

인기 태그

인프런 TOP Writers

주간 인기글