묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
싱글톤 DIP 위반 관련하여 질문합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의에서 싱글톤 패턴 문제점 중에 의존관계상 클라이언트가 구체 클래스에 의존한다(DIP 위반)라고 하셨는데 제가 제대로 이해하고 있는지 알고 싶습니다.제가 생각하기에는 AppConfig.class파일을 다음과 같이 구성하고, public class AppConfig { public MemberService memberservice(){ return MemberServiceImpl.getInstance(); } public MemberRepository memberRepository(){ return MemoryMemberRepository.getInstance(); } }MemberSeriveImpl은 MemberRepository를 참조하고 있기 때문에 생성자를 통하여 DI를 하기 때문에, 다음과 같이 코드를 작성하였습니다.public class MemberServiceImpl { private final MemberRepository memberRepository; private final static MemberService memberService = new MemberServiceImpl(); public MemberService getInstance(){ return memberService; } private MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = MemoryMemberRepository.getInstance(); } } 그 결과 Client인 MemberServiceImpl 입장에서는 MemoryMemberRepository를 주입하기 위하여 어쩔수 없이 구체 클래스(MemoryMemberRepository.class)를 의존할 수 밖에 없는것 같습니다.(싱글톤 패턴을 유지하기 위해 미리 의존관계등을 미리 세팅해야됨)제가 제대로 이해한건지 맞는지 알고싶습니다
-
해결됨스프링 핵심 원리 - 기본편
CoreApplicationTests 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]CoreApplicationTests 부분에서 오류가 나는데 강사님과는 다른 오류가 나서 질문 드립니다. Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [D:\core\core\out\production\classes\hello\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository memoryMemberRepo를 매칭해야 하는데 2개가 존재해서 그런 것 같은데(맞는지는 잘 모르겠습니다)MemberService에는 아무런 Annotation도 붙이지 않았는데 왜 그런 걸까요? (작성한 코드 이미지 첨부합니다) 추가Appconfig 의 @Bean 이 붙은 메소드에 모두 @Primary를 붙여서 어찌저찌 해결은 했는데무슨 이유로 저 오류가 나는건지 궁금합니다
-
해결됨스프링 핵심 원리 - 기본편
혹시 오타인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]의존관계 자동 주입.pdf의 14페이지에서@Qualifier 수정자 자동 주입 예시 코드 부분에서리턴 타입이 DiscountPolicy로 써져 있는데,setter이니깐 리턴 타입이 void여야 맞지 않나요?혹시 오타인가 싶어서 말씀드립니다. +)15페이지 @Primary 수정자 코드,17페이지 애노테이션 만들기 수정자 코드에서도 똑같이 void가 아니라 DiscountPolicy로 되어 있습니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
Optional에 대한 처리
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강의 잘듣고 있습니다. persistenceLayer 계층 테스트에서 repository 를 테스트할때 Optional<Entity> 형태로 반환하는 함수를 테스트한다고 할때 어떤식으로 테스트를 작성해주어야 되나요? 예를 들어 특정 id를 가진 멤버를 조회한다고 하면 반환값이 Optional<Member>가 될텐데 무조건 찾는 테스트를 한다면 그냥 get()을 붙여서 Optional이 아닌 객체로 꺼내도 되나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
외래키 뺀다는 뜻이 뭔가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]외래키 뺀다는 뜻이 뭔가요? 엔티티 개발할때 어떤식으로하면 외래키가 없어지나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
첫프로젝트 생성 에러가 너무 길어요
응용 프로젝트를 만들어 보려하는데 이렇게 에러가 엄청 긴데 왜이런걸까요? 보통 화이트 에러 페이지는 서너줄 아닌가요 ㅜㅜ이렇게 만들어서 돌려봤습니다
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이미지 서버에 질문하나 드려도 될까요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제가 지금 토이프로젝트로 게시판을 만드려고 하는데,div 태그에 contenteditable 속성을 넣어서 수정 가능하게 만들고,이미지 붙여넣기 하면 img 붙여넣기 되면서 바이너리? base64~~ 하면서 img 태그의 src로 붙는데,다른 게시판 웹사이트 보니까, okky나 tistory같은.붙여넣기 하면 바로 서버에 저장이 되는 모양이더라구요.그러니까, 붙여넣기 하면 https://자기사이트/경로/파일이름 이런식으로 되는 것 같아요.아마 프론트엔드 쪽에서 붙여넣기 하면 저 바이너리 파일 서버로 보내서 그 이미지 서버에서 임의의 이름 붙이고 그 주소 자체를 넘겨줘서 프론트엔드쪽에서 응답받으면 그걸 src로 쓰는 것 같은데, 제가 궁금한게, 그래서 붙여넣기 꾹 눌러서 연속으로 해봤거든요? 근데 모두 다른 이름으로 src에 부여되었어요. 그리고, 게시판 취소를 눌러도 그 url 복사했다가 들어가봐도 계속 들어가져요.근데 이러면 낭비가 될 수 있지 않나요? 만약 게시판 취소해버리면 그냥 서버에 이미지만 저장되고 그거와 링크된 게시물은 없게되잖아요.
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
entity->dto 변환 질문입니다.
data class BookHistoryResponse( val name: String, val isReturn : Boolean ){ companion object { fun of(history: UserLoanHistory): BookHistoryResponse { return BookHistoryResponse( name = history.bookName, isReturn = history.isReturn ) } } }현재 이코드 대신 확장함수를 이용해서fun UserLoanHistory.toDto(): BookHistoryResponse{ return BookHistoryResponse( name = this.bookName, isReturn = this.isReturn ) }user.userLoanHistories.map{it.toDto()} 이와 같은 방식은 잘 사용하지 않는 방식인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[gradle build error] gradle clear build를 할때 모두 자바 17을 사용하고 있음에도 오류가 발생하고 있습니다.
안녕하세요. 다름이 아니고 다음과 같이 gradle은 8.4 버전이고 자바는 17버전을 사용하고 있습니다. 자바 17은 gradle 실행, complie할때 등등 모든 부분해서 11이 아닌 17을 사용하고 있음에도 불구하고 지속적으로 저런 에러가 발생해서 질문드렸습니다. intellij를 껏다 켜보기도 하였구요
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
그리드 리스트 업데이트 관련 질문드립니다.
안녕하세요. 주문게시판-웹개발 부분 수강 중에 문의 사항 있어 글 작성 드립니다. 현재 그리드의 리스트에서 주문 등록, 주문 수정, 주문 삭제까지 pdf자료와 강의 보면서 구현하였는데혼자 심화학습중에 어려운 부분 있어 질문드립니다. 문의 사항은 다음과 같습니다.1) 현재는 주문 등록, 수정 및 삭제 모두 변경 사항을 확인하려면 변경한 후, 조회버튼을 재클릭해야 구현한 세 가지 변경 사항들이 그리드 리스트에서 변경 사항을 확인할 수 있는데주문 등록, 주문 수정, 주문 삭제 하였을 때 "조회버튼 재클릭하지 않고" 변경 사항이 바로 리스트에 반영되도록 구현하려면 어떻게 해야 될지 문의 드립니다. 2) 그리드 리스트에서 현재는 주문번호에 따라 선택한 행 1건씩 주문 삭제가 가능한데 그리드 리스트 내에 체크박스를 만들어서 다건 삭제를 하려면 어떻게 구현해야할지 문의드립니다. 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
수업자료에 수정이 필요한 부분이 보여서 의견 드립니다.
프로젝트 생성시 Project Metadata 에 Java11로 설정하라고 작성되어 있는데요. Project MetadataGroup: helloArtifact: thymeleaf-basicName: thymeleaf-basicPackage name: hello.thymeleafPackaging: JarJava: 11 <<<<<<<<<<<<<이부분 현재 스프링부트 3버전대에서 17사용하라고 다른부분에는 작성되어 있는데 해당 부분에는 수정이 안되어있어서 수정이 필요할것 같아 의견드립니다 🙂 자칫하다 프로젝트 다시받아서 해야할 수 있어 번거로움이 있을 것 같아서요!좋은강의에 늘 감사드립니다 영한님
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인 모델 패턴 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]도메인 모델 패턴을 사용하면 대부분의 비즈니스 로직이 엔티티에 들어가 있기 때문에, 서비스는 단순히 엔티티에 비즈니스 로직 처리를 위임하게 됩니다. 구글링을 해보니 도메인 모델 패턴의 장점 중 재사용성, 확장성 등 좋은 객체지향의 특성을 대부분 가져가고 있는 것 같아 보이는데요. 실제로 코드를 보면 도메인 모델(엔티티)에 비즈니스 로직이 담겨있고, 엔티티 간의 관계 매핑이 필요하기 때문에 특정 기술에 종속될 수 밖에 없지 않나 생각이 들었습니다. 도메인 모델 패턴이든, 트랜잭션 스크립트 패턴이든 비즈니스 로직을 가지고 있는 쪽은 최대한 순수한 자바 코드로 작성해야 한다고 생각하고 있었는데..Item 엔티티를 예시로 들면 JPA를 사용하여 연관관계 매핑이 되어있어 무수히 많은 애노테이션과 설정들이 들어있습니다. 만약 JPA를 걷어내고 다른 기술을 사용해야 할 경우에는 엔티티 로직에 제법 많은 수정이 필요할 것 같아 보입니다. 비즈니스 로직이 변경되는 경우도 마찬가지구요. 이렇게 저희가 지금 진행하고 있는 예제에서 도메인 모델 패턴이 객체지향을 잘 따르고 있다고 할 수 있는 것인지 긴가민가합니다. 질문이 조금 두서가 없었는데, 결론은현재 우리의 예제에서 JPA를 사용한 엔티티 객체들을 활용하여 도메인 모델 패턴을 사용할 경우 해당 설계가 객체지향 원칙들을 잘 지키고 있다고 볼 수 있는지? 입니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberForm에서 setName메소드가 없어도 작동하는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요?예[질문 내용]@PostMapping("/members/new") public String create(MemberForm form){ Member member=new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; }위 코드를 통해서 post요청 처리를 할때 MemberForm속 name변수에 값을 넣어줄때, MemberForm클래스속public void setName(String name) { this.name = name; } 이 코드를 지우더라도 정상적으로 name값이 들어가는 것을 확인했습니다. 이때는 어떤 방식을 통해서 자동으로 name값을 넣어주는 것인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java.lang.ClassNotFoundException: org.h2.driver
h2 db 연동이 되지 않아요... 코드 그대로 입력되어있는거 몇 번이고 확인했는데 안되네요 ㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
start.spring.io 2.xx버전 지원 중단 관련 문의..
이제 스프링부트 사용시 8/11버전은 사실상 사용이 힘들어졌다고 보이는데.. 17/3.xx대를 써도 강의수강에 큰 지장이 없을까요?
-
미해결스프링 핵심 원리 - 기본편
기본 configuration 선택에 대해 질문이 있습니다!
안녕하세요..!현재 섹션7 - 생서자 주입을 선택해라! 듣고있습니다.1.4분 52초 쯤에 OrderServiceImple 테스트 할때 Config 파일을 지정하는 코드가 없는데 자동으로 AppConfig 가 선택된 이유가 무엇인가요? AutoAppConfig도 만들어놨고 OrderServiceImple에 @Component 애노테이션도 붙여줬는데요..! 2.그리고 같은 시점에서,java: constructor OrderServiceImpl in class hello.springbasic.order.OrderServiceImpl cannot be applied to given types; required: no arguments found: hello.springbasic.member.MemoryMemberRepository,hello.springbasic.discount.DiscountPolicy reason: actual and formal argument lists differ in length이 오류가 나는 이유가 무엇인지 궁금합니다! OrderServiceImpl 에는 제가 만들어놨던 생성자를 주석처리해서 기본 생성자(파라미터 없는 생성자) 밖에 없는데, AppConfig에는 (OrderServiceImpl에서 이미 주석처리해버린) 파라미터 2개를 받는 생성자를 호출하고 있어서 에러가 난 게 맞나용?감사합니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
controller의 dto를 repository에서 사용할 수 없는 이유
보통 흐름이 controller -> service -> repository 로 흐르기 때문에 service에서 repository를 의존하는 것은 상관이 없지만 반대로 repository에서 service를 의존하는 것은 문제가 됩니다.(예를들면 service단의 dto를 참조한다던지 등)이렇게 순환 관계가 생길때의 문제가 무엇일까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field가 커맨드 객체가 없는경우
폼 안에서는 th:object로 꺼내오고 th:field="*{}"이런식으로 사용하는데 만약 폼이 아닌 그냥 쓸때는 어떻게 사용해야하나요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이에서 프로젝트를 오픈했을시 failed가 뜹니다
안녕하세요 강사님이 말씀하신대로 프로젝트를 생성하였고 인텔리제이에서 프로젝트를 오픈하였는데사진처럼 오류가 발생했다고 합니다. 어떻게 해야하나요?ㅠㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
계속 스프링부트 실행에 오류가 납니다
알려주신대로 설정하였고 , 초기 설정을 하였는데 저런 오류가 계속 납니다 자바 sdk는 java17로 설정해두었습니다 오류는 A problem occurred configuring root project 'jpashop'.> Could not resolve all files for configuration ':classpath'.> Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.6.Required by:project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.1.6> No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.6 was found. The consumer was configured to find a library for use during runtime, compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.5' but:- Variant 'apiElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.1.6 declares a library, packaged as a jar, and its dependencies declared externally:- Incompatible because this component declares a component for use during compile-time, compatible with Java 17 and the consumer needed a component for use during runtime, compatible with Java 11- Other compatible attribute:- Doesn't say anything about org.gradle.plugin.api-version (required '8.5')- Variant 'javadocElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.1.6 declares a component for use during runtime, and its dependencies declared externally:- Incompatible because this component declares documentation and the consumer needed a library- Other compatible attributes:- Doesn't say anything about its target Java version (required compatibility with Java 11)- Doesn't say anything about its elements (required them packaged as a jar)- Doesn't say anything about org.gradle.plugin.api-version (required '8.5')- Variant 'mavenOptionalApiElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.1.6 declares a library, packaged as a jar, and its dependencies declared externally:- Incompatible because this component declares a component for use during compile-time, compatible with Java 17 and the consumer needed a component for use during runtime, compatible with Java 11- Other compatible attribute:- Doesn't say anything about org.gradle.plugin.api-version (required '8.5') 입니다