묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 데이터 JPA
update 실무
안녕하세요 ㅎㅎ 실무적으로 궁금한게 하나 있어서 질문드립니다 update 쿼리는 실무에서도 100% 더티체캉으로 해결하나요 ??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
강사님 질문입니다!!!
현재 loginService에서 DB에 있는 값 체크할 때 if(member.getPassword().equals(password)) { return member; } else { return null; } 이런식으로 비밀번호만 체크하잖아요? 근데 아이디가 틀릴 수도 있으니 아이디도 체크해줄려고 if(member.getLoginId().equals(loginId)) 이런식으로 조건을 더 추가를 해주면 비밀번호만 체크하고 아이디가 다를땐 500에러를 내거든요? java.util.NoSuchElementException: No value present 이런 에러인데요,.,. 아이디랑 비밀번호가 모두 일치해야 성공로직을 돌고 아이디가 없으면 아이디가 없다고 비밀번호가 다르면 비밀번호가 다르다고 이렇게 구성하려면 어떻게 해야할까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
entity vs form vs dto
entity vs form vs dto 1. 이들은 각각 어떤 특징이 있다고 생각하면 될까요? 2. 이셋을 큰 틀로 보자면 모델로 봐도 되나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
thymeleaf 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
forward에 대해서 궁금합니다.
나중에 가면서 이해되겠지 하고 천천히 돌려보고 자료도 보고했는데 forward 가 되기때문에 렌더링이 마쳐진다는 강사님의 말씀이 이해가지않습니다. forward가 redirect와는 달리 바로 쏴주는거같은데, jsp 에 쏴주게 됨으로써 html이 렌더링 된다는 말씀이신가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
접근지정자의 범위가 궁금합니다.
기본적인 접근지정자의 범위개념은 인지하고있습니다. 예를들어 protected는 해당 패키지외에 상속받은 다른 클레스가 범위인데, 현재 13분 50분경 service 가 protected로 되었습니다. 이때 꼭 저걸 써야되나? 싶은 의문이 들더라구요 그래서 실무에서의 각 접근지정자의 대략적인 범위? 예를들어 private라면 대략 생성자같은 클라이언트가 건들면 안되는곳을 지정한다 처럼요. 부탁드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 VS 폼객체
강의내용 8:30 내용질문입니다. < API를 만들때는 엔티티를 외부에 반환하면 안된다 > 1. 필드가 그대로 노출됨 (ex.userpassword) 2. API 스펙이 변한다. (엔티티에 로직을 추가했는데 api스펙이 변한다) 솔직히 말씀드리면 전부 이해가 안됩니다..ㅠ 이전 강의에서 FORM에 입력되는 데이터를 Member 엔티티를 쓰는게 아니라 따로 만들어준 MemberForm을 쓰는이유는 이해했습니다. (Member객체 코드가 지저분해질수 있고, Valid 기능같은것을 사용하지못해서) 그것과 유사한 이유인것 같은데... 정확히 이해가 안되네요 사실 api라는 개념도 정확하게 잡히지 않습니다. 정리해서 질문 하겠습니다. 1. 저희가 강의에서 만들어준 api가 있나요??? (혹시 MemberController의 메서드들이 모두 api에 속하는건가요?) 2. 필드가 노출된다는게 무슨말인지 모르겠습니다. 예를들어 폼에 password입력칸이 있는데, 이게 어떻게 노출이 가능하다는 것인가요? 3. api의 스펙이 바뀐다는 부분이 이해가안됩니다. api스펙이 무엇을 뜻하며, 그게 바뀌면 무슨 문제가 생기나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
예외테스트 중 저번강의에서 햇던 것과 차이
Exception을 테스트하는 부분에서 궁금한 점입니다. 해당 강의에서는 @Test(expected = IllegalStateException.class) 어노테이션과fail()함수를 이용해서 테스트하셨는데, 이 강의보다 최신강의로 알고있는 spring 기본편에서 테스트하실때는 아래코드와 같이 하셨습니다.두 테스트 차이가 있을까요? @Test public void 회원가입_중복() throws Exception { // given Member member1 = new Member(); member1.setName("인프런"); Member member2 = new Member(); member2.setName("인프런"); // when memberService.join(member1); // then IllegalStateException e = assertThrows(IllegalStateException.class, () -> { memberService.join(member2); }); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
service와 controller의 역할에 대한 질문이 있습니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]service와 controller의 역할에 대한 질문이 있습니다. 강의를 듣고 활용해던 도중 의문점이 생겼습니다. 한참 찾아봤는데 아직도 모르겠어서 질문드립니다. 저의 기존 코드에서는 어떤 컨트롤러의 post 요청에서 A,B,C 엔티티가 반드시 순서대로 생성된후 저장되어야 합니다. (참조관계 떄문에 그렇습니다) 기존에 저는 컨트롤러에서 A 엔티티 생성 -> AService.createA() 한 후 B, C도 동일한 과정을 거칩니다. 이러니까 컨트롤러가 서비스의 역할을 해버린다고 생각했습니다. 그래서 컨트롤러는 그냥 dto를 넘겨주고 서비스에서 위의 작업을 하려했습니다. 그랬더니 몇가지 문제가 생겼습니다. 1. service에서 repository만을 사용하면 코드 중복이 심함(create 할때 복잡한 중복검증 로직이 있는대, 그것까지 전부 다시 해야함) 2. service에서 service를 주입받아서 하자니 순환참조, 나말고 코드 이해도 낮은 다른사람이 손대면 실수할 가능성 높음 등등의 문제가 생김 그래서 그냥 원래대로 냅두려니 controller가 너무 크고 service가 하는게 그냥 repository로 요청 보내기인 경우가 대부분임 그래서 질문은 1. 적절한 방법이 뭘까요? 2. 복잡하고 큰 규모의 서버 코드를 보고싶은데 좋은 예시를 어디서 찾을수 있을까요? 3. 제가 해결방법으로 여러 service를 주입받아서 사용만하는 service를 만들어서 컨트롤러에 있던 코드를 거기로 옮겨서 컨트롤러에 비즈니스 로직이 생기는걸 없에고 순환참조, 코드 중복 등을 제거 해봤는데 이게 맞는건가요? 4. MSA와 상관있는 문제일까요?
-
미해결스프링 핵심 원리 - 기본편
도메인 설계를 잘하고 싶어요 (학습에 대한 고민 상담)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예...아니오...애매합니다ㅠㅠ2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 선생님의 강의를 재밌게 듣고 있습니다. 백엔드에 대한 기초 지식 하나 없다가 자바 기본서 하나 읽고 바로 선생님의 강의를 들었어요. 그래서 중간에 많이 버벅대긴 하지만 레고를 맞추는 듯 즐겁게 진행중입니다. '주문과 할인 도메인 설계' 까지 선생님꽈 쭉 공부를 진행하던 중... 고민이 생겼는데요, 분명 선생님의 설명을 들으면 설계가 정말 기가 막히게! 이해가 되지만, 스스로 설계를 해볼 수 있겠나? 물으면 대답을 못하겠어요. 알고리즘에 대한 공부를 제대로 안 하고 바로 넘어와서 이런 걸까요? 사실 프로그래밍을 배우면서 늘 '보면 이해 되는데 직접 못하겠어' 라고 느낀 적이 상당히 많았는데요... 여태까진 이 막막함을 견디고 하다보면 뭔가 나중에 이해가 되긴 되었지만. 가끔 너무 막막할 땐 어떻게 해야 할지 모르겠네요. 학습을 할 때 나무가 아닌 숲을 바라보는 어떤 비결이 있을까요? 학습법에 대해 조언을 구하고 싶습니다! 선생님의 강의를 좀 더 제대로 곱씹고 이해하고 싶어요. 좋은 강의 감사합니다! 덕분에 저 꽤 멀리까지 왔어요ㅎㅎ 선생님 강의를 듣다가 문득 뒤를 돌아보면 정말 깜짝 놀란답니다!
-
해결됨스프링 핵심 원리 - 기본편
커스텀 어노테이션을 클래스 형태로 등록하는 이유
안녕하세요 강의에서 직접 애노테이션(MyIncludeComponent, MyExcludeComponent) 을 인터페이스로 선언한다고 배웠습니다. 그런데 테스트코드 ComponentFilterAppConfigTest 클래스의 @ComponentScan 내부에서는 MyIncludeComponent.class 로 등록하더라구요, 인터페이스로 선언했는데 왜 .class 를 붙여 등록하는지 궁금합니다..!
-
미해결스프링 기반 REST API 개발
JUnit5에서 prettyPrint() 적용하기
@ExtendWith({RestDocumentationExtension.class, SpringExtension.class})@SpringBootTestclass EventControllerTest { private MockMvc mockMvc; @Autowired private ObjectMapper objectMapper; @Autowired private WebApplicationContext context; @Autowired private EventRepository eventRepository; @BeforeEach void init(RestDocumentationContextProvider restDocumentation) { this.mockMvc = MockMvcBuilders .webAppContextSetup(this.context) .addFilters(new CharacterEncodingFilter("UTF-8", true)) .apply(documentationConfiguration(restDocumentation) .operationPreprocessors() .withRequestDefaults(modifyUris().host("yoonjoy.me").removePort(), prettyPrint()) .withResponseDefaults(modifyUris().host("yoonjoy.me").removePort(), prettyPrint())) .alwaysDo(print()) .build(); } 추가로 addFilters에 UTF-8 설정을 통해 responseBody에서 한글이 깨지는 것을 막고, modifyUris을 통해 호스트 url localhost을 원하는 문자로 바꿀 수 있습니다.
-
미해결실전! 스프링 데이터 JPA
save 질문드립니다.
jpa 커리큘럼 듣고있는 학생입니다. 첫 커리큘럼 강의 merge를 쓰지말라고 하셨는데(*1), 스프링 데이터 jpa의 save를 보면(SimpleJpaRepository구현체) merge를 사용하고 있습니다. 그러면 실무에서 스프링 데이터 jpa를 사용할 때 save기능을 사용하여야 하는것인지 사용하지 말아야 하는것인지 가이드 라인이 있을까요? *1.DB에서 데이터를 가지고 오기때문에 sql이 한번 나가는 문제, DB에서 가지고 온 데이터 수정할 때 일정 필드값이 누락될 경우 누락된 값은 변경감지와는 달리 없어지기 때문 등등의 문제로
-
미해결스프링 핵심 원리 - 고급편
setter에 @Autowired 쓰는 문법은 이제 막힌건가요?
강의는 스프링 2.5버전대지만 현재 스프링 이니셜라이저에서 기본 지정 버전은 2.6버전입니다. 여기서는 CallServiceV1에서 사용한 setter에 @Autowired 붙이는 문법을 사용 할 시에는 생성자로 주입할 때랑 똑같이 순환참조냐고 묻는 오류가 발생하더라구요. 혹시나 싶어서 2.5.6으로 해보니 잘 되더랍니다...ㅠㅠ 갑자기 2.6.0버전부터 무슨 일이 생긴지는 모르겠지만 여기서는 안되네요 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
클래스 필드에서도 Map @Autowired를 사용할 수 있나요?
이번 예제에서 내부 클래스인 static class DiscountSerive에 Map 타입과 List 타입의 멤버변수를 만들고 @Autowired를 설정해 보았습니다. 저는 출력결과가 수업강의에 있었던 예제 처럼 타입에 맞는 빈이 모두 출력될 것이라 기대했는데 결과물은 null이네요. 클래스 필드에서는 @Autowired를 사용할 수 없는것일까요? <코드> <결과물>
-
미해결
반려동물 시장 진출 앱 기획 관련 스프링 개발자 모집
안녕하세요 현재 서로 믿을 수 있는 스타트업 멤버 구축 되었고 추가로 능력있고 참하신 개발자 팀원 두분 더 찾습니다. 관심있으신분 연락 부탁드립니다 1. 주제소개: 반려동물 서비스 중 현재 시장에 없는 서비스. 2. 현재 진행 단계: 시장분석 및 주제와 명확한 방향성까지 잡은 상태 3. 모집분야 및 주요업무: 앱 개발자-하이브리드 앱 (웹앱을 네이티브 형태로 감싼 형태) 유사사이트: https://www.pet-friends.co.kr/main/tab/2 4. 모집경력 및 필요스킬: 앱개발 관련하여 경력이 있거나, 최소 스프링을 자유롭게 다룰 수 있는 스킬 필요 vue.js 옵션 등 5. 참고기타사항: 기획/디자인/개발/마케팅 포지션 다 구성되어 있으나, 추가 개발자가 두분 정도 더 필요한 상황 6. 문의/연락: 010-4590-4917 배대근 카카오:antoniobae1 참고url:IT 웹 앱 마케팅 개발 창업모임 파랑새(Since 2021.10.02 : 네이버 카페 - http://naver.me/FIgA4x8x
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
requestURL 문의드립니다.
response.sendRedirect("/login?requestURL=" + requestURI); 이렇게 되어있는데 requestURL 이라는게 정확히 어떤것을 의미하는걸까요? 코딩을 할 때는 login?requestURL로 하면 원하는 페이지로 이동이 안되고 메인으로 이동되고 login?requestURI로 하면 원하는 페이지로 이동이 되네요.. sendRedirect를 할 때 requestURL로 하는것과 requestURI로 하는것에 차이가 있을까요? requestURL은 전체 주소를 가져오는것이고, requestURI는 도메인을 제외한 경로를 가져오는것으로 알고 있는데 갑자기 햇갈리네요.ㅠㅠ
-
미해결스프링 핵심 원리 - 고급편
레벨이 감소하는 이유.
beginSync() 안에 createNextLevel() 있어 레벨이 증가하는건 이해가 갑니다! 그런데 createPreviousLevel() 을 사용하지 않았는데 어떻게 레벨이 감소하는건가요? 로직 순서가 OrderControllerV2의 1.trace.begin() level:0 OrderServiceV2의 2.trace.beginSync() level:1 OrderRepositoryV2의 3.trace.beginSync() level:2 4.trace.end() level:2 OrderServiceV2의 5.trace.end() level: 1(?) OrderControllerV2의 6.trace.end() level:0(?) [7b341824] OrderController.request() :id = 7b341824 level = 0 [7b341824] |-->OrderService.orderItem() :id = 7b341824 level = 1 [7b341824] | |-->OrderRepository.save() :id = 7b341824 level = 2 [7b341824] | |<--OrderRepository.save() time=1012ms :id = 7b341824 level = 2 [7b341824] |<--OrderService.orderItem() time=1015ms :id = 7b341824 level = ? [7b341824] OrderController.request() time=1018ms :id = 7b341824 level = ?
-
미해결스프링 핵심 원리 - 고급편
혹시 스프링시큐리티 강의 계획이 있나요
1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니요2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요. 영한님 강의 잘 정말 잘듣고있습니다. 아쉽게도 이번강의는 개인적인 일로 바빠서 결제만 해놓고 듣지는 못했지만요. 제가 개인프로젝트를 진행하다가, 스프링시큐리티를 도입할 일이 생겼는데, 정말 어렵더군요. 일단은 열심히 구글링해서 어찌어찌 잘 도입했는데, 너무 어려워서 한번 깊게 공부해야겠다는 생각이 들더군요. 본론으로 들어가서 혹시 스프링 시큐리티를 강의로 내실 계획이 있나요 계획이 있다면, 언제쯤 내실 계획인지 알 수 있을까요. 계획이 없다면, 다른 분의 스프링 시큐리티 강의를 수강하려고 문의 드립니다
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver modelAndView반환에 따른 정상흐름
안녕하세요 , 영한님! 강의잘듣고있습니다! 다름아니라 HandlerExceptionResolver modelAndView반환에 따른 정상흐름이 헷갈리는 부분이 있어서 질문남깁니다. HandlerExceptionResolver 를 구현하고, response.sendError(상태코드,에러메시지) return new ModelAndView(); 가 반환되면 정상흐름으로 설명주셨는데, 결국에 response,sendError를 사용하면 was에서 sendError 호출 기록을 확인하고, ErrorPage에 등록된 경로로 재요청하는 것이 아닌가요? 이를 정상흐름이라고 하는지 문의드립니다! 로그를 확인해보니 resolver에서 빈 modelAndView를 반환해도 errorPageController 에 재요청이 들어간것으로 보이는데 제가 잘못이해한것일까요 ㅠ 너무헷갈립니다!! 2021-11-18 20:39:48.287 INFO 15896 --- [nio-9090-exec-3] h.e.resolver.MyHandlerExceptionResolver : IllegalArgumentException resolver to 400 2021-11-18 20:39:48.288 INFO 15896 --- [nio-9090-exec-3] hello.exception.ErrorPageController : errorPage 404