안녕하세요 덕분에 next.js를 깊게 공부할 수 있었습니다. next.js는 기존 리액트와 다르게 jsbundle(청크) 파일을 나누어 받아 옵니다. 강의에서 본 것처럼 청크 파일들이 각각의 유니크한 해쉬 값을 가지는 것도 확인했습니다. 시나리오 next 프로젝트를 빌드 배포 된 웹페이지를 오픈 next 프로젝트를 다시 빌드 기존의 웹페이지를 새로고침 하지 않고, 페이지 이동 기존 리액트 프로젝트에서는 하나의 청크 파일을 처음 한 번에 받아서 새로고침 전까지 1번의 이전 빌드된 웹페이지로 동작이 되는 것으로 알겠는데요. next프로젝트에서는 jsbundle과 rsc_payload를 필요한 시점에 받으니까 새로 빌드한 파일엔 기존 청크해시 값과 달라서 문제가 생기지 않을까? 라는 생각이 들었습니다. 그런데 테스트 해보니 별다른 문제가 생기지 않는 것 같더라구요.. jsbundle과 rsc_payload의 유니크한(해쉬) 파일 이름이 도중에 변경 되더라도 next 서버측에서 찾을 수 있게 조치가 되어 있는 걸까요?
createTest 실행시 오류 발생 createTest에서 500 오류가 떠서 보니 스프링애플리케이션을 실행하면 java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:290) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:123) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:77) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:189) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.11.jar:6.1.11] 2025-03-05T23:27:34.720+09:00 WARN 50007 --- [jamm-board-article-service] [ main] org.hibernate.orm.deprecation : HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) 2025-03-05T23:27:35.162+09:00 INFO 50007 --- [jamm-board-article-service] [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2025-03-05T23:27:35.163+09:00 INFO 50007 --- [jamm-board-article-service] [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2025-03-05T23:27:35.564+09:00 INFO 50007 --- [jamm-board-article-service] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 9000 (http) with context path '/' 2025-03-05T23:27:35.570+09:00 INFO 50007 --- [jamm-board-article-service] [ main] jamm.board.article.ArticleApplication : Started ArticleApplication in 3.381 seconds (process running for 3.717) 다음과 같은 오류가 뜨네요 ㅜ 제가 폴더명을 다르게 했는데 문제가 있는 걸까요 어떤 게 문제인지 잘 모르겠습니다. 분명히 도커로 mysql도 띄었고 jdbc 연결이 안된걸까요 server.port: 9000 spring: application: name: jamm-board-article-service datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/article username: root password: root jpa: database-platform: org.hibernate.dialect.MySQLDialect open-in-view: false show-sql: true hibernate: ddl-auto: none logging: level: org.hibernate.SQL: DEBUG org.hibernate.type.descriptor.sql.BasicBinder: TRACE public class ArticleApiTest { RestClient restClient = RestClient.create("http://localhost:9000"); @Test void createTest() { ArticleResponse response = create(new ArticleCreateRequest( "hi", "my content", 1L, 1L )); System.out.println("response = " + response); } ArticleResponse create(ArticleCreateRequest request) { return restClient.post() .uri("/v1/articles") .body(request) .retrieve() .body(ArticleResponse.class); } @Getter @AllArgsConstructor static class ArticleCreateRequest { private String title; private String content; private Long writerId; private Long boardId; } @Getter @AllArgsConstructor static class ArticleUpdateRequest { private String title; private String content; } } application.yml (article) @RestController @RequiredArgsConstructor public class ArticleController { private final ArticleService articleService; @GetMapping("/v1/articles/{articleId}") public ArticleResponse read(@PathVariable Long articleId) { return articleService.read(articleId); } @PostMapping("/v1/articles") public ArticleResponse create(@RequestBody ArticleCreateRequest request) { return articleService.create(request); } @PostMapping("/v1/articles/{articleId}") public ArticleResponse update(@PathVariable Long articleId, @RequestBody ArticleUpdateRequest request) { return articleService.update(articleId, request); } @DeleteMapping("/v1/articles/{articleId}") public void delete(@PathVariable Long articleId) { articleService.delete(articleId); } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.mysql:mysql-connector-j' implementation project(':common:snowflake') implementation project(':common:outbox-message-relay') implementation project(':common:event') } rootProject.name = 'jamm-board' include 'common' include 'common:snowflake' include 'common:data-serializer' include 'common:event' include 'common:outbox-message-relay' include 'service' include 'service:article' include 'service:comment' include 'service:view' include 'service:like' include 'service:hot-article' include 'service:article-read' docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea2f15b15cee mysql:8.0.38 "docker-entrypoint.s…" About an hour ago Up 4 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp kuke-board-mysql .. 2025-03-05 23:02:20 2025-03-05T14:02:20.281045Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.38' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. 학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요? 좋은 강의 감사 드립니다. 처음 장고 프로젝트를 만들었는데, first 폴더를 만들어 놓았는데 폴더 안에 admin.py, apps.py 등등의 파일이 있는데 파일을 더블클릭을 해서 소스를 보았는데 admin.py 파일 같은 경우에는 from django.contrib import admin 문장이 있는데 django 글자와 admin 글자에 빨간줄이 나타납니다. 답변 부탁 드립니다. 감사합니다.
현재 강의와 관련없는거 알지만 혹시나해서 문의남깁니다. 현재 강의 구매한 분들 대상으로 [코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스 강의 90% 할인해서 구매할 수 있었던 것으로 기억하는데, 이미 기간이 끝난거 알지만 지금이라도 할인된 가격으로 구매할 수 있을까 해서 문의남깁니다.
안녕하세요! 강사님! 처음으로 fastAPI를 접하는데 강사님 수업을 통해 배움을 얻어 가게되어 우선 감사 말씀드립니다. DB Connect 세팅 시 create_engine 함수를 이용하여 엔진 객체만 생성하여 DB에 연결을 하는데 다른 참고 자료들과 비교하면 모델 클래스 생성은 ORM을 사용하지 않으니 생성을 할필요가 없을테고, sessionmaker 함수를 통한 세션 클래스는 따로 생성하지 않더군요. 혹시 sessionmake를 통해 생성된 세션 클래스의 역할과 지금 강의에서는 사용하지 않은 이유를 알 수 있을까요?
강의와 같이 구현한다면 page.tsx 에서 데이터 fetch PostRecommends.tsx 에서 는 다시 데이터를 fetch 하지 않고 HydrationBoundary를 통해 넘어온 데이터를 사용 이렇게 page.tsx 에서만 데이터가 fetch 되어야 맞는거지요 ? 제가 구현한 소스코드에서는 getPostRecommends 쪽에 로그를 찍어서 확인해보니 page.tsx 에서도 한번 호출하고 PostRecommends.tsx 에서도 한번 호출해서 총 2번 로그가 찍히더라구요. 이론대로라면 page.tsx 에서 1번 호출했을 때만 로그가 찍혀야 하는 것이 맞는거죠? 아 강의는 " 클라이언트 react-query" 입니다.
안녕하세요! 6.5 에러 핸들링 강의를 들으며 실습을 진행하고 있는데 브라우저에 http://localhost:3000을 접속하면 "지금 추천하는 도서"에 캐시를 사용안하는데 데이터가 조회가 되고 있습니다. 코드를 잘못적었을까봐 깃허브에 올려주신 소스로 개발서버 실행해도 같은 상황입니다.
sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper[ScheduleEntity(schedules)], expression 'CountryEntity' failed to locate a name ('CountryEntity'). If this is a class name, consider adding this relationship() to the <class 'src.models.schedule.ScheduleEntity'> class after both dependent classes have been defined. cities = relationship("src.models.city.CityEntity", back_populates="country", cascade="all, delete-orphan", lazy="joined") schedules = relationship("src.models.schedule.ScheduleEntity", back_populates="country", cascade="all, delete-orphan", lazy="joined") 이미 이렇게 다 해놨는데 말이죠...
안녕하세요 선생님, 질문이 있어서 남깁니다. 만약 book/4를 URL로 요청하면 과정이 URL로 book/4 요청 시 Link 등이 없으므로 프리페칭은 안됨 - 서버에서 JS 실행 (렌더링) - 렌더링 된 HTML 브라우저에 넘김 - 브라우저에서 화면에 렌더링 - 서버에서 JSBundel, RSC payload 브라우저에 넘김 - 수화과정 - 상호작용 가능 이게 맞나요? book/1~3은 staticPage로 풀라우트캐시되어있으니 URL로 요청하면 풀라우트캐시에서 바로 HIT해서 주는거고요?
안녕하세요, 강의 잘 듣고 있습니다. ^^ 분산 시스템에서 균등 샤딩 부분을 듣다가 궁금한 점이 생겨서 질문드립니다. 각 서버는 자신의 @Scheduled에 의해 레디스 서버로 조회하여 자신의 인덱스를 찾은 후 이를 기반으로 각자 서버 로컬에서 샤딩 범위를 계산하는 것으로 이해했는데요. 여기서 궁금한 점은 각 서버마다 @Scheduled가 동작하는 시점도 다를테고, 레디스의 저장된 서버 리스트가 동적으로 변하기도 하는데, 이러한 이유로 서로 다른 서버가 부분적으로 겹치는 샤딩 범위를 각자 계산하여 카프카로 중복 전송하는 시나리오가 발생하지는 않는 것인가요? ex) A의 @Scheduled 동작 시점에서는 서버가 3개 뿐이었지만 B의 @ Scheduled 동작 시점에는 서버가 5개로 늘어난 경우 서버 A가 계산한 자신의 샤딩 범위 0~20 서버 B가 계산한 자신의 샤딩 범위 13 ~ 27 답변 주시면 감사하겠습니다. 😊
spring boot: 3.3.2 mysql: 8.0.38 강사님과 동일한 버전 사용하고 있습니다. @Test void likePerformanceTest() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(100); likePerformanceTest(executorService, 1111L, "pessimistic-lock-1"); likePerformanceTest(executorService, 2222L, "pessimistic-lock-2"); // likePerformanceTest(executorService, 3333L, "optimistic-lock"); } private void likePerformanceTest(ExecutorService executorService, Long articleId, String lockType) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3000); System.out.println(lockType + " start"); long start = System.currentTimeMillis(); for (int i = 0; i < 3000; i++) { long userId = i + 2; executorService.submit(() -> { like(articleId, userId, lockType); latch.countDown(); }); } latch.await(); long end = System.currentTimeMillis(); System.out.println("lockType = " + lockType + ", time = " + (end - start) + "ms"); System.out.println(lockType + " end"); Long count = restClient.get() .uri("/v1/article-likes/articles/{articleId}/count", articleId) .retrieve() .body(Long.class); System.out.println("count = " + count); } 위 테스트를 실행 시키면 pessimistic-lock-1 start lockType = pessimistic-lock-1, time = 5353ms pessimistic-lock-1 end count = 2991 pessimistic-lock-2 start lockType = pessimistic-lock-2, time = 6667ms pessimistic-lock-2 end count = 2991 count 가 3001이 안나오길래 서버 로그를 확인했는데, com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction 이렇게 데드락이 발생됐다는 로그가 출력됐더라구요.. 강사님과 똑같은 코드로 실행한거 같은데, 왜 데드락이 발생한걸까요?? 의심되는 부분은 @Transactional public void likePessimisticLock1(Long articleId, Long userId) { articleLikeRepository.save( ArticleLike.create(snowflake.nextId(), articleId, userId) ); int result = articleLikeCountRepository.increase(articleId); if (result == 0) { articleLikeCountRepository.save( ArticleLikeCount.init(articleId, 1L) ); } } 여러 스레드가 동시에 result == 0 조건에 진입해서 동일한 article_id 를 insert 하려고 하다가 충돌되는 과정에서 데드락이 발생된 것 같은데... 정확한 원인이 뭘까요? 제가 잘못 친게 있어서 그런걸까요..? PessimisticLock1, PessimisticLock2 둘 다 데드 락이 발생한 원인이 궁금합니다! 게시물 생성 시점에 미리 0으로 count를 생성 해놓으면 괜찮을 것 같은데, 같은 코드로 실행했는대도 결과가 달라 질문남깁니다..
XGBClassifier 를 사용해서 target을 분류하려고 하는데, 아래와 같은 에러가 나타납니다 : ValueError : Invalid classes inferred from unique values of y . Expected: [0 1 2 3], got [1 2 3 4] LabelEncoder를 사용해서 processing 도 다 했고, LGBMClassifier랑 RandomForestClassifier는 다 잘 돌아가는데 XGBClassifier만 저런 오류가 나타나네요;;; 참고를 위해 지금까지 작성한 코드 하기로 공유 드립니다 : import pandas as pd train=pd.read_csv('train.csv') test=pd.read_csv('test.csv') train=train.drop('ID', axis=1) test_id=test.pop('ID') print(train.shape, test.shape) print(train.head()) print(test.head()) print(train.info()) print(test.info()) print(train.isnull().sum()) print(test.isnull().sum()) y=train.pop('Segmentation') y=y.astype('object') y=y.astype('category') print(y.info(), y.shape) int_cols=train.select_dtypes(exclude='object').columns train[int_cols].corr() cat_cols=train.select_dtypes(include='object').columns print(train[cat_cols].describe(include='object')) print(test[cat_cols].describe(include='object')) for i in cat_cols: train[i]=train[i].astype('object') test[i]=test[i].astype('object') for i in cat_cols: print(train[i].value_counts()) print(test[i].value_counts()) from sklearn.preprocessing import RobustScaler scaler=RobustScaler() for i in int_cols : train[i]=scaler.fit_transform(train[[i]]) test[i]=scaler.transform(test[[i]]) from sklearn.preprocessing import LabelEncoder le=LabelEncoder() for i in cat_cols: train[i]=le.fit_transform(train[i]) test[i]=le.transform(test[i]) print(train.head()) print(test.head()) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val=train_test_split(train, y, test_size=0.2, random_state=2025) print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape) y_val=y_val.astype('category') y_tr=y_tr.astype('category') from sklearn.ensemble import RandomForestClassifier rf=RandomForestClassifier(n_estimators=100, max_depth=5, random_state=2025) rf.fit(X_tr, y_tr) y_pred_rf=rf.predict(X_val) from lightgbm import LGBMClassifier lgbm=LGBMClassifier() lgbm.fit(X_tr, y_tr) y_pred_lgbm=lgbm.predict(X_val) from sklearn.metrics import f1_score print(f1_score(y_val, y_pred_rf, average='weighted')) print(f1_score(y_val, y_pred_lgbm, average='weighted')) from xgboost import XGBClassifier xgb=XGBClassifier() xgb.fit(X_tr, y_tr) y_pred_xgb=xgb.predict(X_val)
모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)
_ 를 변수에 사용하는데 있어 질문이 있습니다. 'Property(1) - Underscore' 강의에서 _가 하나를 사용할때는 PROTECTED 변수로, 상속받는 하위 클래스에 이용한다고 하셨습니다. 강사님의 다른 Python 강의에서 (정확히 어느 강의 인지는 기억이 안나네요) 가 붙은 변수를 클래스 변수로 사용하셨거든요. 혹시 두 의미가 상충되는것일까요 아니면 를 하나 사용할때는 두가지 경우 모두 사용가능할까요?