안녕하세요. 백엔드 개발자로 회사업무에 ai를 좀 더 잘 사용해보기위해서 해당 강의를 들어보려고합니다 1) 2026년 현재 기준으로(10월말) 하네스다 뭐다 ai버전도 많이 바뀌었는데 현재 해당 강의가 아직도 도움이 될까요? 2) 해당 강의를 어떻게 수강하는게 효율적인가요? 구현을 한다면 직접 손으로 해야할까요?
build.gradle.kts id("com.google.cloud.tools.jib") version "3.4.5" 기존 3.4.4에서 3.4.5로 변경한 후 빌드가 정상적으로 완료되었습니다. Jib 3.4.5 변경 사항 Fixed fix: address windows deadlock issue when determining docker environment info #4267
안녕하세요 강사님 강의 들으면서 상세 설정 내용을 설명해주시는 거 들으면서 매강마다 감탄하면서 듣고 있는데 어떻게 상세 설정 내용을 전부 다 아시는거죠? 😅 물론 따로 준비를 하셨겠지만 준비를 한다고 해도 이렇게 모든 설정 및 코드를 이해하고 설명을 한다는게 놀랍습니다. 혹시 비결이 있으실까요? 🤣 비밀 아니라면 공유 부탁드립니다. -- 괜한 질문 남긴거 같네요. 삭제는 않겠습니다. 😅
서비스에 적용하는 @Valid는 사용을 위해서 클래스에 @Validated를 붙어주었는데? 컨트롤러에는 @Valid만 사용하셨습니다? 서비스와 같이 @Validated를 붙여줘야 하는것 아닌가요? 서비스와 컨트롤러의 사용방법 차이에 대해서 궁금합니다. --- 정확하게는 모르지만 검증 주체의 차이로 달라지는 것으로 알고 있습니다.
안녕하세요, 강의 잘 듣고 있습니다. 공유드릴 내용이 있어서 남깁니다. Apple Silicon(M3)에서 kind로 실습하다가, CI(GitHub Actions)가 빌드한 이미지가 계속 Running 0/1 에서 재시작되는 문제를 겪었습니다. 원인 sns-app 레포의 build.gradle.kts 에 있는 jib { from { platforms { ... } } } 블록이 빌드 머신의 아키텍처를 따라가도록 되어 있었습니다. ```kotlin architecture = if (System.getProperty("os.arch") == "aarch64") "arm64" else "amd64" ``` GitHub Actions 러너는 x86이라 amd64 이미지가 만들어졌고, 이게 arm64 노드(Apple Silicon의 kind)에서 에뮬레이션으로 돌면서 기동이 너무 느려 liveness 프로브에 계속 죽었습니다. 저는 이렇게 해결했습니다. sns-app 레포 루트의 build.gradle.kts 파일에서 jib { from { platforms { ... } } } 부분을 아래처럼 수정했습니다. 기존에는 platform { ... } 하나에 if 분기가 들어 있었는데, 이를 지우고 두 플랫폼을 모두 지정했습니다. jib { from { image = "eclipse-temurin:25-jre-alpine" platforms { platform { architecture = "amd64" os = "linux" } platform { architecture = "arm64" os = "linux" } } } // to, container 블록은 그대로 } amd64와 arm64를 둘 다 지정해서 멀티 플랫폼 이미지로 빌드했더니 정상 동작했습니다. 같은 환경에서 따라 하시는 분들께 도움이 될 것 같아 남깁니다. 감사합니다.
AI 시스템 디자인 실습 6주 챌린지: AI 에이전트로 백엔드 설계 실습 + 기술 면접 대비
안녕하세요. 미션 제출 방식 건의 드립니다. 마감기한을 정해두지 않고 받을 수 있게 해주심은 어떠신지 여쭙니다. 왜냐하면, 지금 회사 야근으로... 과제를 못 하고 있습니다. 주말에 몰아서 할 수 있는데, 그때되면 여러 과제가 이미 마감되어 제출할 수 없게 됩니다. 아니라면 제출 가능한 기간에 이전에 했던 과제도 겹겹이 쌓아서 제출하도록 하겠습니다.
안녕하세요, 강사님 강의 잘 듣고있습니다. 들으면서 궁금한 점이 한가지 있는데요, Redis 연산의 경우 이것도 I/O 작업일텐데 트랜잭션 내부에서 사용해도 되는것인지 궁금합니다. (ex HTTP Client 와 같이 I/O 작업의 경우에는 트랜잭션 내부에서 호출하는걸 지양하는것처럼..)
AI 시스템 디자인 실습 6주 챌린지: AI 에이전트로 백엔드 설계 실습 + 기술 면접 대비
혹시 ai-handson의 각 주차별 모듈이 구현이 완료된 상태로 제공된 것이 맞는지 확인 부탁드립니다. 지난 주차는 해설 강의를 먼저 들어서 몰랐는데, module-3의 테스트가 코드가 에이전트로 구현하기 전부터 통과하고 있었고, 4, 5 모듈도 마찬가지였습니다. 미리 구현된 상태로 제공된 것(금지 조항도 추가되어 있음)이라면 CLAUDE.md를 수정하면서 결과물을 만들어내는 것이 어려울 것 같아서요. 제가 진행 방식을 잘못 이해한 것이라면 알려주시면 감사하겠습니다.
paymentCreator 쪽을 보니 사용자가 결제를 진행하지 않고 결제창을 닫았다가 다시 열거나 새로고침 하면 db unique 단에서 에러가 날 것 같더라구요. creator 로직에서 조회를 먼저하고 있으면 반환 없으면 생성하는 방식으로 분기문을 둔다. db unique를 타게하고 try catch 등으로 처리한다. 가독성이나 복잡도 측면에서 각각의 장단점이 있을 것 같습니다! 또한 결제창을 닫고 쿠폰이나 포인트 사용을 변경하고 다시 여는 경우도 있을 것 같은데 주문에 대해서 결제가 유니크 하나로 제한해두신 이유도 궁금합니다 이런 경우가 payment 생성 말고도 다양한 로직에서 자주 나오는 상황일 것 같은데 제미니님은 주로 어떤 스타일로 개발하시는지 궁금합니다!
spring boot 3.4.3버전에 CRUD를 완성해서 로그인 로직을 추가하기로 하였습니다. 문제는 build.gradle 의 dependencies에 dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' testImplementation 'org.springframework.security:spring-security-test' } 를 추가하면 기존의 화면에서 데이터에서 값을 가져오는 부분이 처리 불가 상태가 되어버립니다. 그래서 데이터없이 빈 화면가 표시하는 상태가 되어버리는데, 이런 문제는 어떻게 대처해야 하나요?
안녕하세요 강사님! 2-6강(18번째 강의) 관련 질문입니다. 3분 20초쯤에 파킹 페이지와 대기열 큐를 앞에 두어 유입되는 사용자를 줄인다고 말씀하셨는데, 이 부분에 대해 궁금한 점이 있습니다. 1. 어떻게 구현하셨나요? 직접 만드셨는지, 기성 솔루션을 쓰셨는지도 궁금합니다. 2. 대기열은 어디에 있나요? 레이트 리미터처럼 WAS 앞단(게이트웨이나 별도 서버)에 있는지, WAS 안에서 필터 같은 형태로 처리하는지 궁금합니다. 3. 앞서 입장한 사용자가 나가야 다음 사람이 들어가는 구조라면, 사용자가 나간 것(결제 완료나 창 닫기 등)은 어떻게 감지하셨나요? 아니면 동시 접속 인원과 상관없이 초당 몇 명씩 입장시키는 방식이었나요? 감사합니다!
안녕하세요 재민님! 강의를 들으면서 코드베이스를 보니, 조회 메서드에는 대부분 @Transactional(readOnly=true) 을 걸지 않으시더라고요. (물론 findById() 같은 건 Spring Data JPA 내부에 알아서 걸려있긴 하지만요) 예를 들어서, fun findByCategory(categoryId: Long, offsetLimit: OffsetLimit): Page<Product> { val categories = productCategoryRepository.findByCategoryIdAndStatus(categoryId, EntityStatus.ACTIVE, offsetLimit.toPageable()) val products = productRepository.findAllById(categories.content.map { it.productId }) .map { Product( id = it.id, name = it.name, thumbnailUrl = it.thumbnailUrl, description = it.description, shortDescription = it.shortDescription, price = Price( costPrice = it.costPrice, salesPrice = it.salesPrice, discountedPrice = it.discountedPrice, ), ) } return Page(products, categories.hasNext()) } productCategory를 조회하는 시점의 스냅샷과 product를 조회하는 스냅샷이 위 케이스에선 일치하지 않아도 별 문제가 생기지 않겠지만, 때로는 정합성과 같은 이유로 같은 시점의 스냅샷을 유지해야 하는 경우도 있을 것 같다는 생각이 들었습니다! 물론 이는 @Transactional 뿐만 아니라 DB 격리수준까지 엮인 문제라, 단순히 @Transcational 의 판단 기준으로만 보기는 어렵지만, 조회 시점에 @Transactional(readOnly=true) 를 사용하는 것에 대한 재민님만의 기준이 있는지 궁금합니다!