묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dirty checking 질문드립니다.
안녕하세요. 강의 14분쯤에 말씀해 주신 dirty cheking에 대해서 질문드립니다. order.cancel(); 호출하면,Order의 status 변경되고, 이는 dirty cheking으로 인해 Order에 대해서 update 쿼리가 발생하고,orderitem.cancel()호출하면, Item의 stockQuantity가 변경되고, 이는 dirty checking으로 인해 Item에 대해서 update쿼리가 발생한다.기본편 및 강의 내용에 대해서 생각해보다가 이렇게 생각했는데 이렇게 이해하는게 맞을까요?
-
미해결스프링 핵심 원리 - 기본편
Bean의 필요성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의 잘 수강하고 있습니다. 다름이 아니라, 순수 자바로 작성된 AppConfig 파일을 스프링으로 전환하는 과정에 궁금한 점이 있어 질문드립니다. 일단 해당 과정에서 AppConfig 내부의 모든 메소드들을 Bean으로 등록하셨는데요. memberRepository나 discountPolicy는 orderService 혹은 memberService의 의존성 주입을 위해 만들어진 메소드들로, 외부에서 사용되지 않을 것으로 보이는데 맞을까요?따라서 Bean으로 등록할 필요도 없고 public으로 설정할 필요도 없어보이는데, 강의 내에서는 Bean으로 등록하고 public으로 설정한 다른 이유가 있을지 궁금합니다.
-
해결됨Spring WebFlux + LLM 실전 구현
기본적 동작과정에 대한 이해가 부족해 질문드립니다.
안녕하세요일단 제가 생각은컨트롤러에서 Mono 나 Flux 를 반환하고 webflux 가 이를 구독할 때 실행된다. 인데 어쨌든 구독하는 동작도 이벤트 루프 스레드가 하는 거라고 생각합니다.그렇다면 구독에서부터 Mono 또는 Flux 실행까지 같은 이벤트 루프 스레드가 이어서 동작하는 건가요?만약 제가 생각하는 게 맞다면 컨트롤러에서 수행하는 것과 구독후 수행하는 것의 순서만 다를 뿐 성능 차이를 모르겠는데 제가 어떤 부분을 잘못생각하고있는 걸까요? 개념이 잡히지 않아 질문이 좀 이상한 거 같아 죄송합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
안녕하세요, 강의를 들으면서 궁금한 점이 있어 질문드립니다.강의에서는 모델을 컨트롤러와 뷰 사이에서 데이터를 전달하는 객체로 설명하면서, 컨트롤러는 비즈니스 로직을 직접 수행하기보다는 서비스와 리포지토리에 이를 위임해야 한다고 말씀해주셨습니다.그런데 제가 기존에 알고 있던 개념은 조금 달랐습니다. 모델은 일반적으로 데이터베이스의 테이블을 표현하고, 컨트롤러가 요청을 받아 모델에 명령을 내리면, 모델이 데이터를 조작하거나 비즈니스 로직을 처리한 뒤 컨트롤러와 뷰에 변화를 알리는 구조라고 이해하고 있었습니다. 즉, 모델이 도메인 객체(DTO, 엔티티 등)와 함께 비즈니스 로직, 그리고 DB와의 실질적인 연결까지 담당한다고 생각해왔습니다.따라서 강의에서 제시해주신 설명과 제가 알고 있던 개념 사이에 차이가 있는 것 같아 혼란스럽습니다. 혹시 제가 기존에 이해했던 방식이 잘못된 것인지, 아니면 단순히 접근 방식과 관점의 차이라고 봐야 하는지 조언 부탁드립니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원가입 테스트 중 빈값 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 현재 강의 8분쯤, 회원가입 테스트 할때 "이미 존재하는 회원입니다"를 방지 하기 위해 delete from member; 이후에 정상 작동 되어야 하는데, 오류가 나는 상황입니다. 회원가입 테스트 함수 내에,join 함수 실행 후에, findOne(saveId) 에서 빈값으로 확인됩니다.saveId 의 경우엔 테스트 할때마다 시퀀스가 올라서 11, 12, ... 가 확인됩니다. select * from member; 시에 빈값이고,join(member)가 정상으로 됬기 떄문에 saveId값이 오르고 있는것 같은데,findOne에서 빈값이라고 하니 get()할 값이 없어서 오류가 나는것 같은데,진도를 나가기 위해 어떻게 수정해야 할까요 ? join이 정상실행 됬다는 확인은 해당 소스 위 아래 sout "1" "2" 를 각각 붙였더니 정상 실행 되었고,findOne 위에 sout("3")까지 출력 됬지만, findOne 아래 sout("4")은 출력되지 않고 오류가 떴습니다. 그리고 오류를 찾아가기 위해, 확인하고 싶은 현 시점에 소스 상황입니다.MemberServcie 클래스에서 @Service 와빈 주입을 위한 @Autowired 는 주석처리가 되어 있는데 맞을까요 ? 12분 짜리 강의를 위해 3시간째 ㅠㅠ 버벅이고 있습니다. 도와주세요 ㅠㅠ혹시 제 질문이 부족했다면, 제가 답을 얻기위해 추가 질문이라도 부탁드립니다 ㅠㅠ
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
Gradle Build 시 에러 발생
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?2-7강 여기까지 이해하신 내용은 무엇인가요?git Action CI/CD 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?git push 후 workflow에서 Gradle 빌드 실패코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?git push 후 workflow에서 Gradle 빌드 실패현재 작성하신 코드를 공유해주세요 빌드를 진행할 때 먼저 3개의 테스트에서 실패합니다.SimpleEventListenerTest > 현재 코드 구조에서 @TransactionalEventListener는 작동하지 않는다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111 SimpleEventListenerTest > @TransactionalEventListener는 활성 트랜잭션이 필요하다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111 SimpleEventListenerTest > @EventListener는 트랜잭션이 없어도 정상 동작한다 FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: jakarta.persistence.PersistenceException at AbstractEntityManagerFactoryBean.java:421 Caused by: org.hibernate.exception.JDBCConnectionException at SQLExceptionTypeDelegate.java:49 Caused by: java.sql.SQLNonTransientConnectionException at SQLError.java:111이후, Redis에 Reconnecting 하려고 시도하지만 Connection이 Refused되면서 빌드에 실패합니다.2025-08-21T08:34:32.560Z INFO 2235 --- [xecutorLoop-1-2] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was localhost/127.0.0.1:32770 2025-08-21T08:34:32.570Z WARN 2235 --- [ioEventLoop-8-2] i.l.core.protocol.ConnectionWatchdog : Cannot reconnect to [localhost/<unresolved>:32770]: Connection closed prematurely io.lettuce.core.RedisConnectionException: Connection closed prematurely at io.lettuce.core.protocol.RedisHandshakeHandler.channelInactive(RedisHandshakeHandler.java:91) ~[lettuce-core-6.2.6.RELEASE.jar:6.2.6.RELEASE] // 생략로컬 환경과 AWS EC2 환경에서 동일하게 발생합니다. 해결 방법gradle build를 5번 정도 시도했는데, 5번 중 4번은 SimpleEventListenerTest에서 테스트가 실패하고, 1번은 다른 Test에서 실패하였습니다.그래서, SimpleEventListenerTest에 대해 개별 테스트를 진행해보니 통과하였습니다.전체 테스트 진행에서는 JDBC Connection 관련 오류가 발생했고, 개별 테스트 진행에서는 문제가 발생하지 않는다는 점에서 커넥션 풀 설정 문제를 의심하였습니다. spring: datasource: url: jdbc:mysql://${RDS_ENDPOINT:localhost}:3306/portfolio?useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true&useSSL=false&rewriteBatchedStatements=true username: portfolio_user password: ${RDS_PASSWORD:portfolio1234} driver-class-name: com.mysql.cj.jdbc.Driver hikari: maximum-pool-size: 32@TestConfiguration public class TestDatabaseConfig { @Container private static final MySQLContainer<?> mysqlContainer;application.yml 의 최대 풀 사이즈는 32로 설정되어 있고, mySQL 컨테이너는 전역으로 설정되어 있으므로 병렬 처리 과정에서 커넥션 풀이 부족할 수 있겠다는 판단하에, maximum-pool-size를 100으로 늘려보았습니다.package ding.co.backendportfolio.config; import jakarta.annotation.PreDestroy; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.testcontainers.containers.MySQLContainer; import org.testcontainers.junit.jupiter.Container; @TestConfiguration public class TestDatabaseConfig { @Container private static final MySQLContainer<?> mysqlContainer; static { mysqlContainer = new MySQLContainer<>("mysql:8.0.33") .withDatabaseName("testdb") .withUsername("test") .withPassword("test"); mysqlContainer.start(); // A) 기본 설정 + rewriteBatchedStatements 옵션 String originalJdbcUrl = mysqlContainer.getJdbcUrl() + "?rewriteBatchedStatements=true"; // TODO: BulkInsert 모니터링 - 아래 주석을 해제해야함 // originalJdbcUrl = originalJdbcUrl + "&profileSQL=true&logger=Slf4JLogger&maxQuerySizeToLog=2147483647"; System.setProperty("spring.datasource.url", originalJdbcUrl); System.setProperty("spring.datasource.username", mysqlContainer.getUsername()); System.setProperty("spring.datasource.password", mysqlContainer.getPassword()); // 커넥션 풀 늘리기 System.setProperty("spring.datasource.hikari.maximum-pool-size", "100"); System.setProperty("spring.datasource.hikari.minimum-idle", "10"); } @Bean public MySQLContainer<?> mySQLContainer() { return mysqlContainer; } @PreDestroy public void stop() { if (mysqlContainer != null && mysqlContainer.isRunning()) { mysqlContainer.stop(); } } } 이후 테스트를 진행해보니, 기존에 작성해두신 커넥션 풀 테스트인 EventJoinWithExternalConnectionPoolTest를 제외하고 테스트에 통과하였습니다.따라서, EventJoinWithExternalConnectionPoolTest이 테스트에만 작은 커넥션 풀을 적용하도록 하였습니다.@Slf4j @IntegrationTest // 커넥션 설정 @TestPropertySource(properties = { "spring.datasource.hikari.maximum-pool-size=32", "spring.datasource.hikari.minimum-idle=5" }) class EventJoinWithExternalConnectionPoolTest {문제가 발생한 원인은, Gradle 병렬 테스트 진행 시 커넥션 풀이 부족하여 커넥션이 이뤄지지 않았던 것 같습니다.사실 최대 커넥션 풀을 100개로 늘리는 건 임시방편인 것 같고, 테스트별로 독립적인 컨테이너 환경을 만들어주는게 좋을 것 같다고 생각합니다. P.S.) GPT, 클로드코드, Cursor, ... 다 문제 원인을 파악하지 못하더라고요 ㅎㅎ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
@Lock(OPTIMISTIC)이 필요한 이유
안녕하세요!강의를 복습하던 중 의문이 생겼습니다. JPA에서 @Version을 사용하면 자동으로 낙관적락이 적용되는 걸로 알고 있는데 @Lock(OPTIMISTIC)이 필요한 이유가 궁금했습니다. 그래서 알아보니 @Version의 경우는 엔티티에 수정/삭제가 될 경우에만 version을 체크하기 때문에 읽기만 존재할 때도 다른 곳에서 변경이 됐는지 감지하기 위해서는 @Lock(OPTIMISTIC)을 사용하라고 하던데 이게 맞을가요? 혹시 맞다면 @Lock(OPTIMISTIC)을 사용해서 OptimisticLockException이 발생하는 예시코드 부탁드립니다. 아래와 같이 테스트코드를 작성해봤는데 테스트가 성공하지 않아서요 @Test void optimistic_lock_on_read_conflict() throws Exception { ExecutorService executor = Executors.newFixedThreadPool(2); Callable<Void> task1 = () -> { service.readWithOptimisticLock(productId); return null; }; Callable<Void> task2 = () -> { service.updatePrice(productId, 4000); return null; }; Future<Void> f1 = executor.submit(task1); Future<Void> f2 = executor.submit(task2); f2.get(); assertThatThrownBy(f1::get) // 읽기만 했던 쪽도 커밋 시점에서 충돌 감지 .hasCauseInstanceOf(OptimisticLockingFailureException.class); executor.shutdown(); } //service.readWithOptimisticLock(productId); @Transactional(readOnly = true) public void readWithOptimisticLock(Long id) { productRepository.findByIdWithOptimisticLock(id); try { Thread.sleep(2000); } catch (InterruptedException e) { throw new RuntimeException(e); } productRepository.flush(); } //service.updatePrice(productId, 4000); @Transactional public void updatePrice(Long id, int newPrice) { Product product = productRepository.findById(id).orElseThrow(); product.setPrice(newPrice); productRepository.flush(); // flush 시점에 @Version 체크됨 }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
동시성 관련 질문입니다
링크위 링크 속 질문에서 영한쌤이 아래와 같은 답변을 해줬습니다"서버가 한대만 있고, 자바(JVM)로 웹 애플리케이션을 단 하나만 구동하는 상황이면 자바 만으로 동시성 제어를 할 수 있습니다." MVC 1편 강의에서 배운 내용으로는클라이언트 요청이 들어오면 was 내에 미리 만들어진 쓰레드들이 각 요청을 받고 서블릿 코드를 실행한다고 이해하고 있습니다 그렇다면 서버가 한 대여도 쓰레드는 이미 여러개가 만들어져 있으므로동시에 여러 요청 처리가 가능하기에 자바만으로 동시성 제어가 안 되는거 아닌가요? 잘못 이해한 부분이 있다면 지적부탁드립니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 pc H2 실행 불가
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.H2 설치 및 삭제 여러차례 반복 및 구글링과 인프런에 등록된 F&Q 내용대로 해봐도 H2가 실행되지 않습니다.저거 두 개 다 실행해도 작동이 안 됩니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
CASCADE 질문드립니다.
안녕하세요. Order와 OrderItem엔티티에 있는 CASCADE에 대해 기본편을 복습해도 헷갈린 부분이 있어서 질문드립니다. em.persist(order)를 하면 CascadeType.ALL때문에 Delivery랑 OrderItem도 insert가 되는거 같은데, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "order_id") private Order order; OrderItem에 있는 이 부분에 CASCADE를 적어준게 아니라@OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); 왜 Order에 있는 여기에다가 CASCADE를 적어준것일까요? 어디에다 두어도 상관없을거 같은데, 특별한 규칙이 있는것인지 질문드립니다.
-
미해결스프링 핵심 원리 - 기본편
로그 보이게 하기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? 네[질문 내용]테스트 실행을 했을 때 사진입니다. 그런데 강의에서는 [main] DEBUG org.springframework...같은 로그가 보여서 어떤 스프링 빈이 있는지 같은 확인이 가능한데 저는 아무것도 보이지 않아서 질문드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
console log 출력 관련 질문입니다.
수고 많으십니다.강사님이 하신 것처럼 application properties에서 동일한 메시지 레벨의 출력은 설정은 했는데 로그 메시지가 출력이 너무 달라요. initHandlerMappingMap내부의 URI가 "/front-controller/v3/members/new-form"으로 되어 있어서 실제로 html에 설정이 되어 있는 "/front-controller/v5/v3/members/new-form" 이거랑 달라서 오류가 떠야 하는데 브라우저 창에서는 404오류가 뜨면서 page not found가 뜨는데 로그메시지는 아무것도 출력되는것도 없고 GET 메시지도 안들어와요. 어떻게 하면 좋을까요? 제가 따로 서치를 해봤는데도 해결방법을 모르겠어서 질문해봅니다.
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
강의 연장 문의
안녕하세요:)학습중인데 강의 기간이 얼마 남지 않아 문의 드립니다.강의 연장이 가능한 지, 가능하다면 연장 해주시면 감사하겠습니다!감사합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티로 승인(결정)하는 기준
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 ~ 강의 복습 중 궁금한게 생겨 여쭤봅니다 ! 도메인 설계 시 지금처럼 회원 - 주문 - 상품을 메인 도메인으로 잡지 않고회원이 회원가입, 주문 기능을 수행하는 주체이기에 회원 속에 Embedded로 주문 클래스를 값타입으로 잡아 회원 속에 넣고 회원 - 상품을 메인 도메인으로 잡을 수도 있겠다는 생각이 들었는데, 스프링부트 1 예제처럼 주문과 배송 클래스를 하나의 엔티티로 규정한 이유는 주문과 배송에서 식별자 pk 값이 필요하다고 생각해서 한 것일까요 ?회원 도메인이 회원 가입 관련 역할만 담당하는 도메인이라서 책임 분리를 위해 주문과 배송 클래스를 다른 엔티티로 규정했는지 라는 의문도 들었는데,엔티티로 잡아야하는 기준에 대해 여쭤보고 싶어 질문 남깁니다 !
-
미해결스프링 핵심 원리 - 기본편
62강 내용 중 강의 마지막 부분에 궁금한게 있어요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기서 scope="request"는 빈 생성 되는 시점이 고객이 요청했을때고MyLogger 는 스프링이 컨트롤러랑 서비스단에서 생성자에서 의존성 주입 시점에 일어나므로MyLogger에 생성자에 의한 의존성 주입이 일어나는 시점에 고객 요청이 일어나지 않아 request 가 생성되지 않아 에러가 났고그래서 그 해결책으로 provide를 써서 실제로는 MyLogger의 빈의 생성 시점을 생성자에서 의존성 주입이 일어나는 시점이 아니라 provide를 사용해 강제로 좀 더 뒤로 미뤄서 고객요청이 일어나는 시점에 빈을 생성되게끔 하여 문제를 해결한거죠?
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
unique-constraint 설정 질문드립니다.
orm.xml unique-constraint 설정 부분 설명해주신 부분에서 인덱스로서 성능을 위해서, 데이터 중복저장 문제를 위해서 설정을하면 좋다고 말씀해주셨는데요<index unique="true">설정의 차이점이 뭔지 잘모르겠습니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]Settings -> Build, Execution, Deployment -> Gradle에서 기존의 Gradle 둘 모두 IntelliJ IDEA로 변경한 후, SpringBootApplication이 실행되지 않습니다... 이유가 뭔지 궁금해서 이렇게 질문드립니다!아래 사진은 저의 인텔리제이 콘솔에 출력된 에러 로그 및 build.gradle 입니다. plugins { id 'java' id 'war' id 'org.springframework.boot' version '3.5.4' id 'io.spring.dependency-management' version '1.1.7' } group = 'hello' version = '0.0.1-SNAPSHOT' description = 'Demo project for Spring Boot' java { toolchain { languageVersion = JavaLanguageVersion.of(24) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } tasks.named('test') { useJUnitPlatform() }
-
미해결Practical Testing: 실용적인 테스트 가이드
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
DTO의 검증 필드마다 테스트코드를 작성하는게 실무에서 일반적인가요? 이렇게 되면 DTO가 커질 수록 DTO 한개당 테스트 함수가 10~11개 이렇게 필드개수 만큼 나오게 될텐데 실제로 모두 테스트코드로 검증하나요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
인덱스 설계
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 3-7 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?개인 프로젝트 중 여러 테이블이 where절 조건에 있을 때는 어떤식으로 인덱스를 설계해야 하나요??코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 select o1_0.order_id, o1_0.city, o1_0.street, o1_0.zipcode, o1_0.created_at, o1_0.deleted_at, o1_0.delivery_id, o1_0.member_id, o1_0.name, o1_0.no, o1_0.payment_id, o1_0.tid, o1_0.total_price, o1_0.updated_at from orders o1_0 join member m1_0 on m1_0.member_id=o1_0.member_id join delivery d1_0 on d1_0.id=o1_0.delivery_id join payment p1_0 on p1_0.payment_id=o1_0.payment_id where d1_0.delivery_status=? and o1_0.created_at between ? and ? and o1_0.total_price>=? order by o1_0.total_price limit ?, ?orders테이블과 delivery 테이블 where절에서 조건이 걸려있습니다. 이럴 경우는 어떻게 해야 하나요??쿼리 조건이 좀 이상할 수 있지만 공부하는 겸 여러 조건들을 시도하고 인덱스 설계하는 중입니다. ㅎㅎ제가 시도해본 인덱스들은, orders 테이블에 create_at, total_price 복합 인덱스와 total_price, created_at 복합 인덱스이며 첫 번째 인덱스는 속도가 느려졌고 두번째 인덱스는 속도가 빨라졌습니다. 인덱스 X desc 결과첫번째 인덱스 desc 결과두번째 인덱스 desc 결과 이후 delivery_status로 인덱스를 만들었더니 속도가 더 빨라졌습니다.-> where 절에 여러개에 테이블이 조건으로 있더라도 각 테이블마다 인덱스를 생성해주면 될까요?? 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@EventListener(ApplicationReadyEvent.class) 관련
@EventListener(ApplicationReadyEvent.class)와 같은 기능을 사용하기 위해@Component public class DataInitializer implements ApplicationListener<ApplicationReadyEvent> 를 사용하여 프로젝트를 운영하고 있습니다.혹시 잘못된 것인지 궁금합니다.