묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
new HashMap 관련한 import 문제
[질문 내용]코드에서 private static Map<Long, Member> store = new HashMap<>(); 부분이 있는데요.. 중간에 코딩시에 HashMap 부분에 빨간줄이 그어져있어서뭔가 문제지 했는데나중에 코드를 보니까import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Optional;처음 작성시엔 위의 코드로 import 가 되어있었는데동영상 후반에 보니까 아래 코드로 변경되어져 있었습니다.import java.util.*;위 import 부분을 강의영상에서 변경된 부분을 못찾았는데어떠한 이유로 그렇게 변경된건지 알고 싶습니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
findAllByString() 실행 시 총 쿼리 7번 날아갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이전 질문 내역에서 하이버네이트6 최적화 문제라는 답변을 봤는데.. 아직 패치가 안된건지 2024 년에도 총 7번 쿼리날아가네요. 디버깅 해보니address = order.getDelivery().getAddress(); // LAZY 초기화이 부분에서select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2024-10-22T14:07:35.134+09:00 DEBUG 6578 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=?이렇게 두번 쿼리가 실행되네요..그래서 List<Order> all = orderRepository.findAllByString(new OrderSearch());여기서 쿼리 한번 name = order.getMember().getName(); // LAZY 초기화여기서 쿼리 한번 address = order.getDelivery().getAddress(); // LAZY 초기화여기서 쿼리 두번 주문 리스트가 2개 있으므로1 + 2 * (1 + 2) = 7 번 실행됩니다.궁금한 점은 select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=?이 쿼리는 왜 추가적으로 실행되는지 모르겠습니다.
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
프로젝트의 구조가 궁금합니다
백엔드는 spring 에 내장 톰캣이 서버이고프론트엔드의 서버는 node js인가요? 그렇다면 aws에다가 백엔드 프론트 엔드 따로 서버를 구축하는게 맞는 방법인가요??
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@Transactional(readOnly = true) 의 트레이드 오프
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 영한님.이 강의를 보고 질문이 생겨 남기게 되었습니다.이전의 강의에서 @Transactional(readOnly = true)가 성능에서 최적화 해주는 부분이 있다해서 조회용 Service 레이어의 모든 조회용 메서드에 @Transactional(readOnly = true)를 붙였습니다.OSIV 라는 개념을 공부하면서 커넥션 풀이 마르지 않게 비활성화 해야된다는것을 보고제 방식대로라면 OSIV 를 비활성화 하더라도 모든 서비스 layer의 메소드가 커넥션을 점유해야 돼서 (CUD api 에서 부르는 서비스 메소드는 @Transactional, R 에서는 @Transactional(readOnly = true)가 붙을테니) 마르지 않을까 하는 고민이 생겼습니다.그렇다고 최소한으로 커넥션을 점유하기 위해 OSIV를 false 로 가져가면서 Repository의 조회 메소드 단위로만 @Transactional(readOnly = true)을 붙이면영속성 컨텍스트의 범위도 그만큼만 가져가서 1차캐시나 지연로딩으로 batch size만큼 가져오는것도 사용을 못할테니영속성 컨텍스트의 사용이 필요할때만 붙이는게 맞을지 아니면 Service layer의 조회용 메서드에 붙여도 될지 잘 모르겠습니다.
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
서버 배포 후 수정하려고 하면
프로젝트 수정새로운 Jar 파일 만들기Dockerfile 실행docker-compose.yml 실행docker 데스크탑에서 이미지 올라갔는지 확인 후 docker hub 에 push만들어둔 vm 인스턴스 ssh 콘솔에 docker-compose.yml 수정 및 up 명령어 사용 이렇게 하면 될까요? 방법을 잘 모르겠습니다...
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
모의과제 소개
모의과제 소개 영상에서 보여주시는 모의과제 요구사항 pdf 파일은 업로드가 안 되어있는 걸까요?
-
미해결견고한 결제 시스템 구축
멱등키에 request를 넘기는 것
uuid만을 사용해도 충분히 유니크할 것 같은데 request 자체를 넘겨서 어떻게 사용하는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
준영속 상태 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]준영속 상태란 persist context 안에서 한번이라도 관리된 적이 있는 entity의 상태를 의미한다고 알고 있습니다.하지만 찾아본 바에 의하면 jpa가 '한번이라도 관리된 적이 있는지' 여부를 추적하는 메커니즘을 가지고 있는 것 같지는 않고, 단순히 식별자 여부로 판단하는 것 같은데그렇다면Member memberA = em.find(Member.class, 1L);Member memberB = new Member("B", memberA.getId());memberB도 준영속 상태라고 보는 것이 맞나요?memberB가 준영속 상태가 아니라면 사실상 준영속 상태를 만드는 방법은 detach()를 호출하는 방법밖에 없는 건가요?감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
(해결) 각 테스트가 상태를 공유하지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]"회원 리포지토리 테스트 케이스 작성" 강의에서 MemoryMemberRepositoryTest를 작성하시며 @AfterEach를 통해 각 테스트 케이스가 끝날 때 마다 repository 필드의 상태를 초기화해야 한다고 말씀하셨습니다.그런데 저는 별 다른 오류가 나타나진 않아서 다음과 같이 작성해봤습니다.@AfterEach void afterEach() { System.out.println(repository.hashCode()); }그랬더니 각 repository의 해쉬가 서로 다르더라구요. MemoryMemberRepository 구현 내부에서 상태를 출력하게 해보면, 매 테스트 케이스마다 새로운 상태가 되는 것으로 보입니다.제가 잘못 작성한 부분이 있는 걸까요? 아니면 스프링, 라이브러리 버전의 문제인가요? 전체 코드는 다음과 같습니다. 읽어주셔서 감사합니다.// MemoryMemberRepository.javapackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; public final class MemoryMemberRepository implements MemberRepository { private final Map<Long, Member> store = new HashMap<>(); private long sequence = 0; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(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 store.values() .stream() .toList(); } public void clearStore() { store.clear(); } }// MemoryMemberRepositoryTest.javapackage hello.hello_spring.repository; import hello.hello_spring.domain.Member; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @AfterEach void afterEach() { System.out.println(repository.hashCode()); } @Test void save() { var member = new Member(); member.setName("spring1"); repository.save(member); var result = repository.findById(member.getId()).get(); assertThat(member).isEqualTo(result); } @Test void findByName() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); var result = repository.findByName("spring1").get(); assertThat(result).isEqualTo(member1); } @Test void findAll() { Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); var result = repository.findAll(); assertThat(result).hasSize(2); } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
혹시 강의에서 오토스케일링은 배울수있을까요?
모든강의를 구매할 예정입니다.스프링 강의를 제외하고 구매하고싶습니다만 현재 까지 강의를 들었을때 제가 스프링 서버를 두개를 뛰운다음에 유레카로 로드밸런싱하는것 같은데 필요에따라서(서비스요청이 많아지면)자동적이게 설정한대로 확장하게 만들수 있나요? 이건 젠키스 강의로봐야하나요?- 오토스케일링 여부또한 하나의 ec2 에 모든 로직을 넣어서 확장하는게 아니라 여려 ec2 에서 스케일링 하는 강의가있나요?스프링 배포까지 공부해야할까요?-ec2 분산 여부
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
mallapi 와 apiserver 프로젝트
각각 vscode, intelliJ로 생성하였는데다른 툴을 사용한 이유가 무엇인가요그리고 두 프로젝트는 역할이 어떻게 다른가요
-
미해결스프링 시큐리티 OAuth2
spring security 6부터 Implicit 지원 안하네요
spring security 6부터 AuthorizationGrantType.IMPLICIT가 제거되어서 OAuth2AuthorizationRequestException이 발생합니다.spring security 6로 실습 따라가면서 학습하시는 분들은 참고하세요https://github.com/spring-projects/spring-security/issues/11506
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
환경변수 이후 build failed
환경변수 까진 다시 설정했습니다만.. build 안되네요
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
정신이 나갈것같아요
ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\JavaPlease set the JAVA_HOME variable in your environment to match thelocation of your Java installation.C:\study\hello-spring>환경변수에 java-home 추가해서 경로 다시쓰고 자바 23버전 설치하고 인텔리제이 자바23 통일하고 다해봤는데. 안되네요
-
미해결스프링 시큐리티
메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/user").hasRole("USER") .anyRequest().permitAll(); http.formLogin(); } }@RestController public class SecurityController { @GetMapping("/") public String index() { return "home"; } @GetMapping("/user") public String user() { return "user"; } }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
명령프롬프트 gradle builder 실행
경로 찾아서 gradle builder 하니 오류가 뜹니다.gradle clean builder 로 해도 오류가 뜨네요. 자바 경로를 찾을 수 없다고 뜨는 것 같은데...
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
서비스를 인터페이스로 구축하는 이유를 여쭙고싶습니다
서비스를 인터페이스로 구축하는 이유를 여쭙고싶습니다!
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
docker-compose 파일 작성하기 질문 있습니다.
docker-compose 실행을 하면 사진과 같은 오류가 발생하는데 어떻게 해결해야할 지 모르겠습니다. 인터넷에 찾아봐도 자료가 많지 않아 질문 드립니다..
-
미해결
spring-data-jpa 연습 중 순환참조 오류가 발생했습니다.
안녕하세요. 최근 spring-data-jpa 를 공부하다 이상한 순환 참조 오류를 발견했습니다.그런데 도통 납득이 되지 않아 여쭤보고자 질문 드립니다.spring-data-jpa 를 사용하기 전, 저는 주로 MyBatis 를 아래처럼 주로 사용했습니다.// 주로 mybatis interface 인 mapper 를 먼저 선언하고 @Mapper public interface MyBatisMapper {/* ... */} /* ------------ */ // DAO 객체에 주입해 사용하는 형태로 사용했습니다. @Repository public class MyBatisRepo { private final MyBatisMapper mapper; public MyBatisRepo(MyBatisMapper mapper) { this.mapper = mapper; } /* 생략 */ }그래서 JPA 에서도 이처럼 사용해 볼까 하는 마음에 연습하던 중, 순환참조 오류가 발생하였습니다. 아래는 spring-data-jpa 에서 오류가 발생한 코드입니다.TestEntity : 연습용 엔티티@Entity public class TestEntity { @Id private Long id; }DAO 인터페이스 : repository 규약public interface TestRepo { // 연습용이라 텅 비어있습니다. }JPA 인터페이스public interface JPATestRepo extends JpaRepository<TestEntity, Long> { // 연습용이라 텅 비어있습니다. }Repository 구현체@Repository public class JPATestRepoImpl implements TestRepo { private final JPATestRepo jpaRepo; public JPATestRepoImpl(JPATestRepo jpaRepo) { this.jpaRepo = jpaRepo; } // 연습용이라 이후 아무 내용도 없습니다. }실행시 발생하는 에러2024-10-19T19:46:00.760+09:00 WARN 66384 --- [testing] [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'JPATestRepoImpl' defined in file [/~~~/Desktop/Coding/testing/build/classes/java/main/core/testing/JPATestRepoImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'JPATestRepoImpl': Requested bean is currently in creation: Is there an unresolvable circular reference? 2024-10-19T19:46:00.761+09:00 INFO 66384 --- [testing] [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-10-19T19:46:00.762+09:00 INFO 66384 --- [testing] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-10-19T19:46:00.807+09:00 INFO 66384 --- [testing] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2024-10-19T19:46:00.811+09:00 INFO 66384 --- [testing] [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-10-19T19:46:00.825+09:00 ERROR 66384 --- [testing] [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: The dependencies of some of the beans in the application context form a cycle: ┌──->──┐ | JPATestRepoImpl defined in file [/~~~/Desktop/Coding/testing/build/classes/java/main/core/testing/JPATestRepoImpl.class] └──<-──┘ Action: Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. Process finished with exit code 1 콘솔 에러에 따르면 JPATestRepoImpl 가 자기 자신을 의존해 순환참조가 발생한다고 합니다.하지만 JPATestRepoImpl 는 (코드에서 볼 수 있듯이) JPATestRepo 를 주입받을 뿐, 자기자신을 의존하고 있지 않습니다. 게다가 더 혼란스러운 점은 만약 JPATestRepoImpl 의 이름을 다른 것으로 바꾸면 (예를 들어 TestRepoJPAImpl) 거짓말처럼 순환 참조 오류가 없어집니다. 제가 추측하기로는 스프링이나 JPA 가 bean 이름을 헷갈려 발생하는 오류 같은데, 이를 헷갈려 하는 이유를 도통 모르겠습니다.당연히 컴퓨터 재시작, 프로젝트 clean, rebuild, 프로젝트 재생성해 시도해봤지만 모두 같은 현상이 나타납니다. 도대체 어떤 이유 때문에 이런 현상이 일어나는 걸까요...?Github repo : https://github.com/jbw9964/testing
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
학습방법 질문드립니다.
3.x 버전 업데이트 해서 구매했습니다.그럼 실습 부분은 아래에있는 3.x 버전만 보면되나요?위의 2.x 는 생략해도되나요?