안녕하세요 8강 강의에서 멀티모듈 구조 만드실때 각 서비스에 디렉토리를 추가하는 과정에서 new -> directory 클릭했을 때 강사님은 경로명 입력하는 칸 밑에 gradle source sets가 떠서 쉽게 src와 test디렉토리 등을 추가하셨는데 저는 뜨지 않습니다.. 왜 그런걸까요??
강사님 안녕하세요! 강의를 듣다가 궁금한 부분이 있어서 질문드립니다. 다름이 아니라, 검색을 해보면 코틀린에서 Entity 정의 시, data class는 권장하지 않고 사용하지 말라는 글들도 나오는데 강의에서는 data class를 사용하셔서 조금 혼란이 오는데요 ㅠㅠ 혹시 실제 코틀린을 사용하는 회사들은 Entity를 정의할 때, 일반 class가 아닌 data class를 사용하나요?
Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)
remark-gfm 설치 이후 모든 css 가 망가지고 글자와 이미지만 렌더링 되는데 뭐가 문제일까요? global css 에서 import 한것도 아니고 영상과 같이 Plugin 으로 했어요. next-mdx-remote 깃헙 보니까 업데이트도 1년 지났고 버그 로그 많던데 그거 때문이려나요? https://github.com/hashicorp/next-mdx-remote next 공식문서에서도 next-mdx-remote 는 더이상 없고 next-mdx-remote-client 만 있던데 그거 쓰면 되는걸까요?
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 2-10 여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 코드의 어떤 로직이 이해가 안 되시나요? 어떤 개념이 헷갈리시나요? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 강의 잘 보고 있습니다. 이전 강의에서 로컬이 아니라, 리소스가 제한된 클라우드 환경에서 성능 테스트를 하는 것이 좋다고 이해했습니다. 그런데 인텔리제이에서 제공하는 Profile이 기능은 클라우드 환경에서는 따로 사용할 수가 없지 않나요?? 해당 기능을 어떻게 클라우드 환경에서 애플리케이션 성능 측정을 위해 사용할 수 있을까요? 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
62. 검색 엔진 최적화(SEO)에서 보면 상세페이지의 메타데이터 설정하는 부분에서 이전시간에 적용한 인터셉트/패러렐 라우트 때문인지 모달 형태로 뜨면 book/[id]에 설정한 메타 태그가 적용되지 않고, 최상위 (with-searchbar) 부분에 적용한 부분이 뜹니다. 하지만 새로고침해서 최초 접속 상태로 상세페이지에 접근하면 book/[id]에 설정한 meta태그랑 오픈그래프가 보입니다! 이게 의도하신 부분 맞을까요? 어차피 링크로 공유할때는 맨 처음 접속하는 것과 마찬가지니까 크게 상관 없는 부분일까요!? 강의 잘 수강하고 있습니다! 감사합니다.
안녕하세요, class 안에 띄어쓰기 및 특수문자가 있는 경우 선택자를 만드는 방안에 대하여 설명해주셨는데요, 사진과 같이 dt > a를 활용하여서도 제목과 링크주소를 뽑아낼 수 있는 것으로 확인하여서요! 혹시 꼭 class명을 활용하여 선택자를 만들어야 하나요? dt >a 로도 원하는 내용을 추출할 수 있다면 사진과 같은 방향으로 해도 크롤링 진행에 문제가 없는지 궁금합니다.
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 4-8 여기까지 이해하신 내용은 무엇인가요? mysql 내부에서 자체적으로 공유락과 배타락을 사용 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 코드의 어떤 로직이 이해가 안 되시나요? 어떤 개념이 헷갈리시나요? 코드상에서 직접적으로 락을 사용하지 않아도 결론적으로 mysql 내부에서 락을 사용하는데 왜 동시성 테스트는 실패하는건가요?? 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
안녕하세요 강사님. 강의자료 소스코드 메소드 각각에 대한 세부적인 설명은 자세히 없는 것 같아 질문드립니다. 혹시 틀리거나 부족한 부분이 있다면 설명 부탁드립니다! https://gist.githubusercontent.com/allieus/6134497ba5e0f0aa541a18b700fe9a0e/raw/212aff65dd66095455b2bc87564470f4ba8a5219/IPv4AddressIntegerField.py 1. to_python, get_prep_value, from_db_value 세가지 메소드의 공통점은 value값을 적절한 형식으로 변환하는 것 같은데요. 차이점은 아래와 같이 이해하면 될까요? -get_prep_value: save(), create() 메소드 사용시 호출되는 내부 메소드 -from_db_value: 데이터베이스에서 오브젝트/쿼리셋을 가져올 때 호출되는 내부 메소드 -to_python: ModelForm을 통해 입력받거나 모델.<필드명> = "192.168.56.1" 처럼 직접 필드값을 할당할 때 호출되는 내부 메소드.
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, ... 다 문제 원인을 파악하지 못하더라고요 ㅎㅎ
안녕하세요 강사님, 복습하는 과정 중에 Page Router 기준으로 SSR + 프리패칭 + Hydration 흐름을 제가 이해한 대로 정리해보았는데, 이게 맞는지 확인 부탁드립니다. 사용자가 /a 페이지에 있을 때 <Link href="/c" prefetch> 가 있으면, 브라우저는 백그라운드에서 /c.js (코드 스플리팅된 JS 청크)만 미리 받아 캐시에 저장해둔다. → 이 단계에서는 HTML이나 데이터( getServerSideProps 결과)는 가져오지 않는다. 사용자가 실제로 /c 를 클릭하면, 서버가 getServerSideProps 를 실행해서 데이터를 패칭하고, 그 결과를 반영한 SSR HTML + JSON을 브라우저에 내려준다. 브라우저는 HTML을 먼저 렌더링해서 FCP가 나오고, 이어서 캐시에 있던 /c.js 를 실행한다. 그 후 React가 HTML과 JS를 매칭시켜 Hydration을 수행하여 이벤트 핸들러를 연결한다. 즉, SSR 페이지 전환 시 1. User 클릭 → (서버) HTML 생성 및 데이터 패칭 → (브라우저) HTML 렌더링 → JS 실행 → Hydration 이고, 프리패칭은 그 전에 JS만 준비해 두는 과정으로 이해했습니다. 제가 이해한 흐름이 맞을까요? 머메이드로 도식화하자면 다음과 같습니다 . 위가 맞다면, 빠른 페이지 전환을 위해하는 프리패칭을 했지만 결국 데이터 패칭 및 HTML을 서버에서 다시 그려오는데 빠른 전환이 가능한건지 궁금합니다. 혹시 여기서 놓치고 있는 부분이나, 실제 네트워크 요청에서 다른 점이 있다면 알려주시면 감사하겠습니다!