안녕하세요 Wyatt님! 정리 공유 감사합니다 👍👍 다만 원인만 조금 다시 생각해보자면, 우선 이 강의 설정에서는 인증정보가 필요 없습니다. base image는 public이고, jibDockerBuild는 push를 안 하니까요. 즉 키체인에서 못 가져와서 실패하는 게 아닙니다. 원인은 helper 바이너리가 Gradle 데몬의 PATH에 없는 것일 수 있습니다. Jib은 config.json에 credsStore가 있으면 public 이미지라도 일단 helper를 실행해서 물어봅니다. 이때 helper 실행 자체를 못 하면 예외가 나면서 빌드가 중단되는데요. 그래서 먼저 아래 명령을 진행해보세요. ./gradlew --stop ./gradlew jibDockerBuild IntelliJ에서 먼저 빌드하면 데몬이 IDE의 PATH를 캐시해두고 계속 재사용합니다. 이걸로 풀리면 build.gradle.kts는 안 건드리셔도 됩니다. 그래도 안 되면 조사해주신 방법 1을 쓰시면 좋을 것 같아요. 참고로 helper 바이너리는 Docker Desktop 설치 시 함께 깔리구요. 최근 Docker Desktop은 credsStore가 osxkeychain 이 아니라 desktop 라서 확인해보시고 맞춰 지정해주시면 좋습니다! 좋은 공유 감사드립니다!
안녕하세요. 인호님! 좋은질문 감사합니다. 테스트 코드로도 가능합니다. 스크립트로 할 수 있는 건 보통 코드로도 할 수 있어요. 강의에서 처음 스크립트를 도입한 이유는, k6 같은 툴을 통해 부하테스트를 편하게 사용하기 위함이었어요. k6용 js 파일이 필요하니, 자연스럽게 스크립트 폴더를 만들었고 테스트에 필요한 준비도 스크립트로 같이 준비했습니다. 실무에서는 단위 및 통합 검증은 테스트 코드로 작성하고, 대량 요청이나 동시성 검증은 k6 같은 부하 테스트 도구를 활용합니다. (물론 팀마다 다르고 주관적일 수 있습니다) 강의에서는 부하테스트와 더불어 장애 발생과 데이터 정합성 확인까지 한 묶음으로 만들기 위해 별도 스크립트가 적합하다고 판단해서 사용했다고 생각하시면 됩니다. 감사합니다.
안녕하세요! 케시님, 결론부터 말하면 그 시점 코드에서는 Redis 재고가 2장 줄어들게됩니다. (1장만 줄어야 하는데) 다만, 현재 강의 시점(섹션3, 브랜치는 part-2)에서는 그렇습니다. 바로 다음 강의 (섹션4, 27강, 요청이 몰리면 API가 느려지는 진짜 이유)에서 수정하실 때, 이 부분이 해결됩니다. (part-2 Redis Lua) 1. 남은 재고를 읽는다 2. 0이면 매진으로 반환한다 3. 재고를 1 깎는다 (part-3의 Redis Lua) 1. 이 사용자가 발급받은 사용자 목록(Set)에 이미 있는지 본다. 있으면 여기서 바로 중복으로 리턴 2. 남은 재고를 읽는다 3. 0이면 매진으로 반환한다 4. 재고를 1 깎는다 5. 이 사용자를 발급받은 사용자 목록에 넣는다 part-3 에서는 Redis 원자연산에서 스크립트 하나가 통째로 실행되고, 그 사이 다른 요청이 끼어들 수 없습니다. 그래서 두 번째 요청은 1번에서 걸러져 재고 차감을 아예 타지 않습니다. 엣지케이스를 잘 생각해서 말씀해주셨네요! 좋은 질문감사합니다.
안녕하세요! 지성조님. 프리티어 EC2라면 메모리가 적어서 이런 현상이 발생하는 경우가 있습니다. 스왑 메모리를 추가한 뒤 조금 나아졌다면 메모리 부족이 원인이었을 가능성이 높습니다. 스왑 메모리로 부족한 메모리를 보충해 지금처럼 진행해보시고, 그래도 계속 같은 증상이 있다면 free -h 와 top 으로 메모리 및 CPU 사용량을 한 번 확인해 보시고, 저희 애플리케이션과 관련없는 프로세스는 제거해주시면 도움이 됩니다. 감사합니다.
안녕하세요 weogle님! docker 에서 MySQL 이 실행중인지 확인부탁드립니다. 아래 명령어로 확인할 수 있어요. docker ps MySQL (mysql-twitter) 컨테이너가 떠있어야 하고, 3306 포트가 열려있어야 합니다. 잘 떠있다면 그 후 spring boot 애플리케이션을 실행하면 잘 실행이 될 겁니다. docker run --name mysql-twitter \ -e MYSQL_ROOT_PASSWORD=root123 \ -e MYSQL_DATABASE=twitterdb \ -e MYSQL_USER=dev \ -e MYSQL_PASSWORD=dev123 \ -p 3306:3306 \ -d mysql:9.3 위 명령어로 도커 컨테이너를 실행할 수 있습니다. 감사합니다.☺️
안녕하세요 Aurora 님 JpaPostRepository 에 findAllPaged 메소드만 재정의한 이유는, PostRepository 에 있는 save, findAll, findById, deleteById 는 JpaRepository 의 기본 구현체가 이 메소드를 지원하는 반면, findAllPaged 는 그렇지 않기 때문에 재정의했습니다. 즉, PostRepository 라는 인터페이스를 그대로 사용하고 싶은데, JpaRepository 의 기능 추가하여 사용하고 싶어서 JpaPostRepository 라는 중간 인터페이스를 사용한 형태입니다. PostRepositoryImpl 같은 구현체를 직접 만들어서 사용하셔도 됩니다. 다만 강의의도는 위에서 말씀드린 것처럼 Spring Data Jpa 가 지원하는 JpaRepository 인터페이스를 사용하기 위함이 크다고 생각해주시면 됩니다. 감사합니다.
안녕하세요 Aurora 님. 섹션2의 ' Query String 과 함께 Pagination 해보기' 부분에서는 메모리에 posts 를 저장해놓고, 페이지네이션 조회를 하고 있습니다. 네 말씀하신 부분처럼 DB 에서 데이터를 가져온다면 페이징 쿼리를 주로 사용합니다. 섹션6에서 다루고 있으니 확인해보시면 좋을 것 같습니다 감사합니다!
안녕하세요! khs1003k 님. 해당 오류는 말씀하신대로 ec2-user 계정이 Docker 권한이 없어서 발생합니다. Docker는 root 또는 docker 그룹 사용자만 접근할 수 있습니다. 해결 방법은 직접 sudo 사용해서 명령하시거나 (질문자님 하신것처럼) 또는 ec2-user 계정을 docker 그룹 사용자로 만드시면 됩니다. # 현재 사용자(ec2-user)를 docker 그룹에 추가 (sudo 없이 가능하게) sudo usermod -aG docker ec2-user # 반영을 위해 로그아웃 후 다시 로그인 하거나 아래명령어 실행 newgrp docker 제 환경은 docker 그룹 설정이 되어 있었던 경우이고, 현재처럼 sudo를 계속 사용하는 것도 가능하지만 그룹에 추가해서 사용하는 것이 편리할 수 있습니다. AWS EC2 서버에 애플리케이션 배포하기 - 00:46 이 부분에 있는 강의자료 내용 한번 확인보시면 좋을것같습니다 감사합니다.
안녕하세요 khs1003k 님! 인메모리로 해서 외부 의존성없이 가볍게 java 애플리케이션을 실행하고자 했던 의도였습니다. 이전 챕터 강의에서 mysql 을 미리 잘 설정해놓으셨다면, mysql 을 연결하여서 java 애플리케이션을 실행하셔도 됩니다. 질문 감사합니다! 좋은하루 보내세요.
안녕하세요! 질문자님 그리고, 배상진님 감사합니다. 저도 Spring Boot 4.0.0 에서 동일한 현상을 경험했습니다. spring.h2.console.enabled에 노란 밑줄이 뜨고 인식되지 않는 이유는, Spring Boot 4.0부터 자동 설정(auto-configuration)이 모듈별로 분리되면서 H2 Console 관련 설정이 별도 모듈로 빠졌기 때문입니다. 스프링부트 기존(3.x)에는 runtimeOnly("com.h2database:h2") 의존성만 추가하면 H2 Console이 자동 설정되었지만, 4.0부터는 implementation("org.springframework.boot:spring-boot-h2console") 모듈을 명시적으로 추가해야 합니다. build.gradle.kts implementation("org.springframework.boot:spring-boot-h2console") 이 의존성을 추가하면 spring.h2.console.enabled 속성이 정상 인식되고, /h2-console 경로로 접속할 수 있습니다. runtimeOnly("com.h2database:h2") 는 위 의존성안에 있기 때문에 별도 추가하지 않으셔도 됩니다. 공식 문서 참고: https://docs.spring.io/spring-boot/reference/data/sql.html#data.sql.h2-web-console 질문자분 그리고, 관심을 가지고 추가 답변해주신분 모두 감사드립니다!