묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
IntelliJ 초기 설치 파일 설치 실패
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]IntelliJ에서 hello-spring 프로젝트 열고 혼자 알아서 설치하더니 갑자기 이렇게 오류 뜨면서 아무것도 안되길래,,, 챗지피티한테 물어봤어용 그랬더니 build.gradle 파일에서 java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}이 부분을 주석 처리 하라길래 주석 처리하고 재시작했더니 오류가 안뜨네욤 그냥 주석처리 해도 괜찮은 부분인가요?
-
해결됨스프링 핵심 원리 - 기본편
@Qualifier로 관리하기 힘들어지는 경우에 대한 질문
@Qualifier를 통해 특수한 경우에 대해 @Primary보다 우선적으로 빈 주입을 하게 되는데, 만약 DiscountPolicy가 수십~수백개를 넘어가고 예외 사항 또한 그만큼 늘어나는 상황에서는 @Qualifer로도 처리하기 힘든 상황이 오지 않나요?이런 상황에서는 어떻게 해결하게 되는지 궁금합니다. 혹은, 이런 상황 자체가 실제로는 잘 나오지 않는 사례인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HTML 문법
HTML 문법을 잘 모르는데 타임리프를 잘 사용하려면 HTML 문법을 알아야 한다고 생각이 들어서 질문드립니다. HTML 문법을 따로 공부하고 듣는게 좋을까요 ?
-
미해결스프링 부트 - 핵심 원리와 활용
localhost:8080/hello-servlet 404오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]제가 윈도우 환경에서 강의 내용 대로 container/AppInitcontainer/AppInitV1Servletcontainer/MyContainerInitV1servlet/HelloServletservlet/TestServlet를 작성하고 그 외 html이나 jarkarta.servlet.ServletContainerInitializer도 물론 다 작성한 상태에서 localhost:8080/hello-servlet 해당 url로 이동하면 404 오류가 뜹니다 혹시나 제가 잘못 코드르 작성했나 싶어서 강의 자료의 complete안의 server를 압축 풀고 앞서 말씀드린 해당 클래스만 남기고 다 지우고 gradlew explodedWar을 실행하고 톰캣 설정했는데도 똑같이 404오류가 떠서 질문드립니다 바뀐 점은 스프링 3.x버전 그리고 gradle 8.5인데 왜 이렇게 되는 걸까요...?(물론 클래스가 다 작성된 상태에서는 잘 호출됩니다)
-
미해결실전! 스프링 데이터 JPA
bulk연산 후 flush하는 이유를 모르겠어요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 bulk연산을 하면 영속성 컨텍스트의 내용을 flush하는 동시에 영속성 컨텍스트의 내용을 변경하지 않고 DB에서 값을 변경해버려서 1차 캐시와 데이터가 다르게 된다고 이해했습니다.그렇다면 bulk연산 할 때 기존에 1차캐시 값들을 flush한다고 이해를 했습니다. 그런데 저희 코드에서 벌크한 뒤에 flush와 clear를 해주는데 clear만 해주면 되는 것 아닌가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]HTML 코드나 다른 코드에서도 Item 클래스 내부에 있는 regions 에 값을 따로 넣어주는게 없는데 체크박스 체크를 한 상태로 전송하게 되면 list에 값이 들어가는데 이게 어떤 로직을 통해 값이 채워지는지 궁금합니다
-
미해결스프링 부트 - 핵심 원리와 활용
내장톰캣2 서블릿 톰켓 실행이 안됩니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.섹션 4 내장톰켓2 -서블릿 강의를 진행중인데요 강사님하고 똑같이 진행하는데 run이 실행되지 않습니다gpt에 물어봐도 내장 톰캣을 실행할 때, 웹 애플리케이션 리소스 경로(webapps 디렉토리)를 찾지 못해서 발생한 에러하는데 해결이안되는데 어떻게 하나요?이건 내장 톰캣을 실행할 때, 웹 애플리케이션 리소스 경로(webapps 디렉토리)를 찾지 못해서 발생한 에러예요.정확히 말하면 다음과 같은 톰캣 리소스 설정 오류입니다.❗ 요약해서 말하면톰캣이 시작되긴 했지만, 웹 애플리케이션 루트를 지정한 경로가 실제로 없어서 톰캣 내부에서 시작 실패 → 전체 애플리케이션 실패가 된 상황입니다.🔍 대표 에러 메시지Caused by: java.lang.IllegalArgumentException: The main resource set specified [C:\Users\c91sy\IdeaProjects\boot-source-20230228\start\embed\tomcat.8080\webapps\] is not a directory or war file, or is not readable 톰캣이 저 경로(webapps)를 "웹 루트"로 사용하려 했는데:디렉토리가 없거나,접근 권한이 없거나,읽을 수 없는 파일이거나 해서톰캣의 StandardRoot 객체 생성이 실패한 겁니다.🛠 이 에러 이름을 붙이자면:✅"Tomcat 리소스 경로 오류 (Missing or invalid docBase for embedded Tomcat)"또는✅"내장 톰캣 구동 실패 - 웹 리소스 경로 없음 오류"✅ 해결 방법 (정리)경로 확인 및 생성다음 경로 확인:C:\Users\c91sy\IdeaProjects\boot-source-20230228\start\embed\tomcat.8080\webapps 이 경로가 존재하지 않으면 만들어줘야 함.mkdir C:\Users\c91sy\IdeaProjects\boot-source-20230228\start\embed\tomcat.8080\webapps 또는 코드 수정EmbedTomcatServletMain.java 내에 톰캣에 docBase를 지정하는 부분이 있다면, 그 경로를:String webAppPath = "src/main/webapp"; context.setDocBase(new File(webAppPath).getAbsolutePath()); 처럼 실제 존재하는 디렉토리로 바꾸는 것도 방법입니다.✨ 참고로이건 빌드 에러나 문법 오류가 아니라, 실행 시 발생한 런타임 에러입니다.따라서 코드 컴파일은 잘 됐지만, 톰캣 구동 중 내부 리소스 설정 오류로 인해 실패한 것이죠.강사님 코드랑 달리 경로를 추가하라는것 같은데 ,,,에러 메시지는 너무 길어서 천자가 넘어서 어떻게 해야할지 모르겠습니다 ....
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Category 엔티티 계층 질문드립니다.
@Entity @Getter @Setter public class Category { @Id @GeneratedValue @Column(name = "catagory_id") private Long id; private String name; @ManyToMany @JoinTable(name = "category_item",joinColumns = @JoinColumn(name = "category_id"),inverseJoinColumns = @JoinColumn(name = "item_id")) private List<Item> items = new ArrayList<>(); @ManyToOne @JoinColumn(name = "parent_id") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); }이 부분에서, 카테고리의 계층? 을 표현하기위해 카테고리 엔티티를 위와 같이 하셨는데요. 여기에서@OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>();이 부분이 무슨 의미로 사용되는지 이해가 잘 되지않습니다.. 연관관계의 주인이 아닌쪽이기 떄문에 mappedBy를 적어준거같은데, 해당 코드가 필요한 이유와 사용되는 목적이 무엇인지 질문드립니다. 그리고 private Category parent와 private List<Category> child = new ArrayList<>();가 어떤 연관관계가 있길래 연관관계를 맺는것인지 이해가 잘 되지않아서 질문드립니다. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
자동 빈 등록 vs 자동 빈 등록시 충돌이 안 생기는 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.OrderServiceIMpl에서의 Component("service")와 MemberServiceImpl에서의 service 실행시 로그화면 service가 하나만 등록되면서 충돌이 안생기네요 ㅜㅜ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
테스트 코드 save 함수의 반환값
itemRepository 클래스에서 save() 함수 반환 타입을 item 으로 만들었는데 테스트 코드에서 itemRepository.save(item1)itemRepository.save(item2)에서 에러가 왜 안나오는 건가요?Item saveItem1 = itemRepository.save(item1);이라고 해야 되는거 아닌가요 ? GPT한테 물어봐도save() 메서드가 원본 인스턴스를 그대로 변형 후 반환하도록 구현돼 있기 때문에, 반환값을 무시해도 되는 것입니다이라고 하는데 인스턴스를 반환하도록 구현했으면 반환값이 있어야 오류가 안 생긴다고 생각하는데 왜 무시해도 된다는지 잘 모르겠습니다..
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?
3000 ms 인 줄 알았는데 그냥 second 던데 저렇게 길게 설정해도 괜찮을까요?
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRepository의 JPA 종속성에 관하여
쉽게 이해할 수 있게 설명해주셔서 강의 잘 봤습니다. 👍 강의 후반부(39. 문서와 코드 다듬기)에 MemberRepository에 @Query를 사용하면서 JPA 종속성이 추가되었는데 이 부분에 대해서 언급 없이 2가지 조인 방식과 관련하여 설명하고 넘어갔습니다.강의 중반부(23. 회원 애플리케이션의 포트 정의)의 MemberRepository 설명과 같이 spring-data-commons의 Repository라는 마커 인터페이스를 사용하는 것은 동의하나 application layer에 기술 종속성이 추가된 내용 관련하여 부가 설명 요청 드려도 될까요? 물론 다음 강의에 해당 설명이 있을것으로 생각되지만.. MemberQueryRepository로 분리하고 adapter layer에서 구현하는 방향이 더 좋아보이는데 개선 방향도 같이 부탁드립니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
sql 연결 오류
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]이러한 오류가 뜨는데 어떻게 해결해야 할지 잘 모르겠습니다 ㅠㅠ application.yml 코드는 다음과 같습니다 spring: datasource: url: "jdbc:mysql://localhost/library" username: "root" password: "" driver-class-name: com.mysql.cj.jdbc.Driver
-
해결됨죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
processorNonTransactional 멱등성 질문
강의 잘 보고 있다. 잘 정리된 자료 덕분에 배치 작업을 이해하고 있는 중이다. 다만 설명 중 이해 안되는 부분이 존재한다. 바로 이 부분 멱등하지 않은 ItemProcessor를 내결함성(FaultTolerance) 기능과 함께 사용해야 하는 상황이라면, 반드시 processorNonTransactional를 설정하도록 하자. 오히려 멱등하지 않은 ItemProecessor의 경우에는 이 설정을 비활성화 해야 하는 거 아닌가? 나의 부족한 영어실력과 GPT를 통해 스프링 배치는 ItemProcessor가 트랜잭션이나 멱등성을 가져야 한다고 되어 있는 것으로 이해하였다. It must be either transactional or idempotent.출처: https://docs.spring.io/spring-batch/reference/transaction-appendix.html 떠라서 멱등하지 않은 ItemProcessor는 processorNonTransactional()을 지양해야 하는 것으로 나는 이해된다... 답변 부탁한다. (존대로 질문하면 rm -rf 하신다길래 이렇게 남겨요 ㅎㅎ..)
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
상품 등록 처리, 포스트 맵핑,addItem 메서드에서 리턴값(view 질문)
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 세션8 웹페이지 만들기를 영한님 강의를 보면서 혼자서 output까지 할수 있는상황을 만들려고 코드를 보고,따라 치고 그러는 와중 이었습니다.그러는 와중 상품 등록 처리에서 완료하고, 상품 상세 폼으로 가지 말고, 그냥 전체 상품을 보여주자 라는 생각이 들어서 코드의 리턴값(뷰값을) 을 "basic/item" 에서 "basic/items"로 변환을 하였습니다. (사진 참조)그리고 인터넷으로 상품 등록을 시키고 결과 화면이.이렇게 나오는것이었습니다.그래서 결과가 잘나오는지 확인하기 위해서 localhost8080:/basic/items을 인터넷으로 쳐보니 등록된 상품이 나오는 것을 확인할 수 있었습니다.그래서 어떻게 해야 결과가 나올까 생각하다가 리다이엑트가 생각나서 리다이엑트를 적용하고 등록하니 위에 화면처럼 다시 갈수 있는것을 확인할 수 있었습니다. 그래서 질문이 왜 리다이렉트를 쓰면 결과가 정상적으로 나오고 그냥 리턴값을 basic/items으로 하면 화면은 정상적으로 아이템즈 화면인데, url값은 basic/items/add 가 추가된것인지 궁금합니다. 답변부탁드립니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
db 연결 url 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]h2데이터베이스를 사용해보고 난 후 직접 mysql을 연결하여 해보고 싶어져 연동을 시도하였습니다.<오류화면><application.properties>그런데 이때 사진과 같은 오류가 발생합니다. application.properties에 mysql에 대한 정보를 정확히 적었으나 해당 오류가 발생합니다. application.properties의 위치는 src/main/resources에 위치하고 있습니다.사진과 같이 build.gradle에 의존성도 추가해 두었습니다.이 때, 영상에서 말씀해주신대로 빌드를 intelliJ로 설정해두면 해당 오류가 발생하나 gradle로 변경하면 정상적으로 db와 연결되어 작동합니다,,intelliJ가 속도가 빠르다고 하셔서 사용하고 있었으나 intelliJ로 빌드하면 오류가 발생하는지 모르겠습니다...ㅜ코드가 정확히 작성되어도 해당 오류가 발생할 수 있는 것일까요? 이대로 gradle로 빌드하면서 나아가도 나중에 문제가 없을지 궁금합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
FK 제약조건 관련해서 자동 키생성 문제
해당 강의를 수강하고 하루죙일 찾아봤지만 실질적으로는 문제를 해결하지 못했습니다. ㅜㅜ 문제가 왜 발생했는지 추적한 결과실제로 xml를 불러들일때, fk 관련 속성을 잘 갖고 오지만,@JoinColumn 을 생성할 때 fk 속성을 삽입하는 코드가 실질적으로 존재하지 않고,fk제약 조건 생성을 위해 alter 시에@JoinColumns로 지정됩니다. 실제 어노테이션 기법으로 작성 할 경우 @JoinColumn으로 수집이 되지만,-참고-@JoinColumns 으로 수집 시xml 스펙에서 join-column 태그는 Unbounded로 스펙이 정해져 그렇게 처리 된 거 같아요. 하이버네이트 6.6 버전에서는 jpa 매핑 관련해서 xml 3.1 버전으로 관리되고, 7.0 버전부터는 xml 7버전으로 매핑이 관리될 것 같습니다. 하이버네이트 6.6 버전에선 실질적으로 버그라고 생각되고, 7.0 버전에는 JPAXMLOverridenAnnotationReader 클래스가 사라진 상황이라 7 버전으로 올려서 확인해봐야 할 것 같지만, 스프링 부트 3.x.x버전은 아무래도 하이버네이트 6.6 버전 기준으로 버저닝이 될 거 같아 해당 문제의 해결 방법은 실질적으로 찾진 못했습니다. ㅜ
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
조회 시 엔티티를 조회하는 것이 아닌QueryDSL을 많이 사용 시 Dto는 어떻게 하나요?
일반적인 JpaRepository를 사용할 경우Entity -> Domain model 객체로 변환하는데보통 상세 조회, 목록 조회 시에는 QueryDSL를 사용하고, 또한 조회 시 Projections을 이용하여 Dto로 반환하는데요. 이 때, 조회된 Dto는 User와 마찬가지로 UserDetail, UserList(목록 Dto 명칭이 마땅히 생각나질 않네요.) 와 같은 도메인 모델을 추가로 만들어서 사용하는 건가요? 위와 같은 질문을 드리는 이유는 만약 User가 Team라는 도메인과 연관 관계가 있을 때 Team 정보를 포함하여 응답할 경우 User 따로 조회, Team 따로 조회 하여 응답 dto로 변환해야 할 것같은데 그럼 성능적인 이슈가 생기지 않을까 해서 질문드립니다. (위 예시는 간단해서 성능적 이슈는 크게 없지만 복잡한 도메인에서는 여러 도메인의 정보를 조회해와야 하기 때문에 충분히 성능적 이슈가 있을걸로 판단됩니다.)
-
해결됨스프링 부트 - 핵심 원리와 활용
최대 Tomcat 스레드 수를 확인하는 지표
[질문 내용]여기에 질문 내용을 남겨주세요."최대 Tomcat 스레드 수를 확인하는 지표는 Spring Boot 3.x부터는 웹 서버의 종류(Tomcat, Jetty 등)에 상관없이 동일한 이름으로 모니터링할 수 있도록 메트릭 이름이 표준화되었습니다." 라고 하는데 맞나요?아무리 검색 후 설정을 바꿔봐도 prometheus 지표에 tomcat thread 관련 지표가 보이지 않습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러, 어댑터 사용하는 이유
지금까지 만든 컨트롤러들MemberFormController, Save,List 전부 궁극적인 기능은 똑같은데 로직이 달랐던 거고, 각 버전마다 프론트 컨트롤러 만들어서 점점 좋게 리팩토링 시켜갔는데 .. 결국 궁극적인 목표가 같은 컨트롤러들을 (로직은 다르지만) 여러 개 만들고 어댑터를 사용하면서 바꿔가야 하는 상황이 어떤 상황인지 이해가 안가요..(최종으로 리팩토링된 컨트롤러 쓰면 되는거 아닌가요? ) 그리고 v5 프론트 컨트롤러에서, v3 버전이든 v4 버전이든 들어오는 경로에 따라서 v3,v4로 컨트롤러가 결정되는데개발자가 각 컨트롤러에 맞게 구현한다 라는 표현도 이해가 안가요.. (이미 요청하는 경로로 정해지는데 뭘 구현한다는건지..?)들어오는 요청이 같은데 컨트롤러를 골라서 한다던가.. 그런것도 아닌거같고 그리고 v4도 깔끔하게 코딩해서 ModelView를 직접 생성하지 않게 해서 만든건데 왜 굳이 어댑터를 사용해서 modelview를 만들고 v3나 v4나 같게하는건지...? ai 답변말고 지식인분들의 답변을 기다립니다