묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
애플리케이션 재시작시 테이블 정보 사라짐
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]애플리케이션 재시작시 db정보가 모두 사라지는데 이유가 뭘까요??
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
체크박스 Boolean 질문
체크박스 값을 Boolean으로 받는 장점이 있나요? boolean으로 받으면 값이 null이면 spring에서 자동으로 false로 바꿔준다고 알고있는데요. 실제로도 Boolean을 사용하는지 궁금하네요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MemberRepository.getInstance() 자동 완성 (추천) 안되는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 스프링 MVC 1편 - 서블릿으로 회원 관리 웹 애플리케이션 만들기 12:10 부분 관련 질문드립니다. 12:10 부분 보시면 자동완성, 추천이 안되는 것을 볼 수 있는데, 저도 동일해서요.MemberRepository를 static 으로 선언한 것과 관련이 있을까요?첫 번째 이미지처럼 추천도 안되고, 두 번째 이미지처럼 introduce variable 도 되지않는 것 같습니다.그러나 세 번째 이미지처럼, 타입, 변수명을 먼저 적으면 추천으로 getInstance() 가 나오는 것을 확인 할 수 있습니다.이렇게 되는 이유가 궁금합니다~!!No suggestionIntroduce variable 안 됨타입, 변수명 먼저 적으면 추천 잘 됨.
-
미해결스프링 핵심 원리 - 기본편
CoreApplication 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 6:11 초 내용과 같이 CoreApplication 코드를 실행했는데 강사님과 다르게 아래와 같은 오류가 뜹니다.다른 코드들은 다 똑같이 작성하였는데 혹시 이 오류가 인텔리제이 무료 버전을 사용해서 생기는 오류인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
save.jsp 에서 java파일이 임포트 되지 않는 것 같습니다.
save.jsp build.gadleform 에 작성하고 "전송" 눌러도 결과가 뜨지 않네요 ㅠ
-
미해결견고한 결제 시스템 구축
혹시 코드 리뷰 신청해도 될까요...?
안녕하세요! 강의 너무 잘 봤고 강의에서 학습한 내용을 사이드 프로젝트에 적용했는데요! 뭔가... 찝찝하고... 리팩토링을 어떻게 해야할지 잘 모르겠어서요...당연히 보수는 드릴 예정입니다! 고려해주시면 정말 감사하겠습니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Unable to start embedded Tomcat 에러
ServletApplication을 실행하면 Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat 에러가 나옵니다.어제까지만 해도 잘 실행이 되었는데 원인을 모르겠습니다. 캐시초기화를 해도 같은 오류가 발생하네요
-
해결됨스프링 핵심 원리 - 고급편
createNextId()시 새로운 객체를 반환하는 이유가 있나요?
public TraceStatus beginSync(TraceId beforeTraceId, String message) { TraceId nextId = beforeTraceId.createNextId(); Long startTimeMs = System.currentTimeMillis(); log.info("[{}] {}{}", nextId.getId(), addSpace(START_PREFIX, nextId.getLevel()), message); return new TraceStatus(nextId, startTimeMs, message); }위 코드를 아래와 같이 사용하면 어떤 단점이 있나요?public TraceStatus beginSync(TraceId traceId, String message) { traceId.increaseId(); Long startTimeMs = System.currentTimeMillis(); log.info("[{}] {}{}", traceId.getId(), addSpace(START_PREFIX, traceId.getLevel()), message); return new TraceStatus(traceId, startTimeMs, message); }객체를 새로 만들어서 반환하지 않고 id만 증가시켜서 그대로 사용하는 것은 지양되어야 하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@SpringBootTest 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]에러를 다 찾아서 수정을 하였으나 마지막인 Test단계에서계속 무시해버리네요 왜 그런건지 구글링을 해도 이해가안됩니다. h2를 킨 상태에서도 이렇게 에러가 뜨는데 어떻게 해야할까요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
객체 생성 시 검증 로직에 대해 질문드립니다.
객체를 생성할 때 입력 받는 데이터를 전부 검증하고 객체 필드를 업데이트할 때도 그 데이터가 유효한지 검증하는 방식을 사용한다면, 다른 레이어에서 검증된 데이터를 넣어 객체를 생성할 때도 해당 데이터를 객체 내부에서도 검증하게 되어서 중복으로 체크하는데, 이런 방식이 괜찮을지 아니면 객체에서 데이터 검증을 적당히 처리하고 레이어 별로 검증 책임을 중복되지 않게 처리하는 방식이 괜찮을지 질문드립니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티에는 validatin을 안하는 게 좋나요?
@Column(nullable = false) 이런 것들을 엔티티 클래스에 하는 것 대신에 dto나 도메인 레이어에서 검증을 하는 게 좋다는 말을 들었는데 엔티티내부에서 검증을 하는 것을 안해도 되는 건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
assaultThat의 동등성 비교 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]findByName()의 테스트 부분을 보면 아무리 봐도 member1의 밸류값과 result의 밸류값이 "spring1"로 동일한데 테스트에 실패했다고 뜹니다근데 한 가지 의문인 건 테스트 값 결과를 보면 동등성이 아닌 동일성 비교를 하는 거 같은데, MemoryMemberRepository의 store가 HashMap을 사용하기 때문에 equals()와 HashCode()를 재정의 해줘야 하는 걸까요? 강의 내용엔 따로 기재되지 않아 질문합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
jpa 자바 버전
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제껏 스프링 버전이 3점대라서 자바 버전인source를 쓰지를 못하고 toolchain만 가능 하더라고요그래서 그런지 실행을 하려고 했으나 위에 경고문과 같이18버전이상부터 실행을 할 수 있게 만들어 놓은것 같은데이런 상황에서는 어떻게 처리해야 할까요?
-
미해결스프링 부트 - 핵심 원리와 활용
인텔리J 무료버전 Smart Tomcat 설정관련
해당 경로에 build폴더가 있는데 Deplyment directory에서 아래 사진과 같이 나오지가 않습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
view 분리에 대해 질문이 있습니다!
public class MyView { private String viewPath; public MyView(String viewPath) { this.viewPath = viewPath; } public void render(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } }꼭 viewPath를 인스턴스로 필드로 설정해서 객체로 만든 이유가 있나요? FrontController 내부에 요청,응답 객체와 view의 주소인 String 타입의 파라미터를 받는 메서드로 만들면 안 되나요?
-
미해결Practical Testing: 실용적인 테스트 가이드
Order 단위 테스트
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 박우빈님, 좋은 강의 잘 듣고 있습니다.강의 영상 속에서 Order 단위 테스트 중 orderProducts에 관한 단위 테스트는 실시하지 않아 혼자 직접 진행했습니다.가장 먼저 다음과 같이 단위 테스트를 작성해보았습니다.@DisplayName("주문 생성 시 주문에 해당 상품이 포함된다.") @Test void orderProduct() { // given LocalDateTime registeredDateTime = LocalDateTime.now(); List<Product> products = List.of( createProduct("001", 1000), createProduct("002", 2000) ); // when Order order = Order.create(products, registeredDateTime); // then assertThat(order.getOrderProducts()).hasSize(2) .extracting("Product") .containsExactlyInAnyOrder( createProduct("001", 1000), createProduct("002", 2000) ); }하지만 위 사진처럼 Product 객체가 다르다고 판단되어 단위 테스트가 실패합니다.(createProdcut()를 이용한 새 객체 생성이 원인이라고 생각합니다.)그래서 다음과 같이 createProduct()를 빼서 테스트를 진행하니 성공했습니다.@DisplayName("주문 생성 시 주문에 해당 상품이 포함된다.") @Test void orderProduct() { // given LocalDateTime registeredDateTime = LocalDateTime.now(); Product product1 = createProduct("001", 1000); Product product2 = createProduct("002", 2000); List<Product> products = List.of( product1, product2 ); // when Order order = Order.create(products, registeredDateTime); // then assertThat(order.getOrderProducts()).hasSize(2) .extracting("Product") .containsExactlyInAnyOrder( product1, product2 ); }결론적으로 단위 테스트는 성공했지만 몇 가지 궁금증이 있습니다.orderProducts의 대한 단위 테스트(위 코드)가 적합한지orderProducts는 Order(this), Product를 갖고 있는데 Order(this)도 함께 검증하는게 맞는지긴 글 읽어주셔서 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
@PostConstruct 사용 목적
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@PostConstruct를 사용하는 근본적인 이유는 빈 등록 이후에 빈 객체의 필드를 초기화 하기 위함인가요? 아래 코드와 같이 동작하는 것이 맞을까요?//빈으로 등록하자 마자 init() 메소드를 호출해서 repositoryName 초기화 @Repository public class DatabaseMemberRepository{ private String repositoryName; @PostConstruct public void init(){ this.repositoryName = "DatabaseMemberRepository "; } }만약 1번 내용이 맞다면 아래 코드처럼 @PostConstruct를 사용하지 않고 그냥 main 메소드에서 setter로 초기화 해도 같은 로직이라고 보면 될까요?public class Application { public static void main(String[] args) { ApplicationContext ac = new AnnotationConfigApplicationContext(DatabaseMemberRepository.class); final MySqlMemberRepository bean = ac.getBean(DatabaseMemberRepository.class); bean.setRepositoryName("DatabaseMemberRepository"); } }그럼에도 불구하고 @PostConstruct를 사용하는 이유는 빈으로 등록되고 @PostConstruct가 붙은 메소드가 자동으로 실행되므로 개발자가 실수로 필드 초기화를 까먹고 NPE 같은 오류가 발생하지 않도록 방지하기 위함인가요?
-
미해결스프링 시큐리티 OAuth2
동의 후 인증 절차의 구현이 변경됐습니다.
Scope 동의단계2, 즉 최종사용자의 동의가 이루어졌을 경우이 요청은 POST /oauth2/authorize 로 보내지는데요이 과정에서 내부구현의 차이가 강의 버전과 맞지 않아서 코드를 확인해봤습니다.1. 0.4.0 버전부터이때 작동하는 AuthenticationConverter 는 OAuth2AuthorizationConsentAuthenticationConverter 입니다.여기서 OAuth2AuthorizationConsentAuthenticationToken 가 구성됩니다.2.OAuth2AuthorizationConsentAuthenticationToken 의 처리는 OAuth2AuthorizationConsentAuthenticationProvider 가 맡게 됩니다.여기서 code 생성 절차가 진행되는 차이가 있습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MTV, MVC 질문
원래는 장고 프레임워크를 주로 이용했었습니다.MTV와 MVC의 View가 장고는 비즈니스로직을 처리해서 Template에 주고, M은 스프링의 Repository와 비슷하다고 생각했습니다. 조금 헷갈리는게,MVC일 때 V는 확실히 랜더링 부분만 담당하는 것이 이해가 갑니다. 다만 Controller가 비즈니스 로직을 담당하는데, Service와 의미가 겹치지 않나 싶었고보통 django에서는 view에서 처리한 데이터를 Model을 통해 넣는다던지 아니면 model을 통해 가져온 데이터를 view로 하여금 template에 전달한다는 느낌이었는데 오늘 강의의 그림을 보니 controller -> model -> view 인 것 처럼 보여서 그러면 MTV의 M과 MVC의 M은 또 많이 다른건가 싶었습니다. 심지어 이것을 더욱 헷갈리게 하는 것이 Repository인데... MVC인데 뭔가 MVC+Service+Repository인건가 싶기도 하고 헷갈리네요 ㅠㅠService - Controller : 프로젝트가 거대해지면 비즈니스로직은 서비스에서 처리하고 컨트롤러는 서블릿 형태의 역할로만 남는건가 싶기도 하고(추측)Model-Repository : 레포지토리가 아무리 봐도 후에 JPA ORM을 사용할 수 있는 영역일 것 같은데, 그렇다면 오늘 강의의 그림에서 보여진 Model은 단순히 컨트롤러에서 View로 데이터 전달을 위한 임시보관소인가 싶습니다. Model은 그림상 DB랑 연결되는 느낌은 없는데.. 아니면 Model은 껍데기고 Model이 리포지토리에 구축된 JPA ORM을 이용해서 DB랑 통신하는 개념일지... 질문이 장황한데... 헷갈려서 그렇네요 답변 주시면 감사하겠습니다:)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
글로벌 Validatior, Bean Validation
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요. 선생님 학습 도중 이해가 되지 않아 질문 드립니다. 1. 스프링 부트는 자동으로 글로벌 Validator로 등록한다.위 말은 즉, 글로벌 Validator가 Bean Validation인가요 ?2. 필드 타입 오류의 발생유무의 상관없이 글로벌 Validator는 적용되고 Bean Validation(ex : itemValidator)는 적용이 되거나/안되거나 인가요?