묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
쿠버네티스 클러스터 구성
안녕하세요, 선생님들.. 입사한지 막 1년이 된 어른이 입니다... 지금 최대 난관에 봉착 되어 있습니다.사내 망 베어메탈 환경에 구축된 쿠버네티스 클러스터에, 사외 망에 있는 VM 10대를 워커 노드로 추가하려고 합니다. 문제가 VM 특성 상 NAT IP 1개에 SSH 접속 포트는 10개로 (1xx01~1xx10) 구별하고 있고, 모든 포트도 오픈 할 수 없는 상황입니다. 이런 조건에서 VM을 워커노드로 추가가 가능한 것인지..., 가능하다면 좋은 방법이 있으신지 질문 드려봅니다. 노드 추가는 Kubespray로 하고 있고, CNI는 calico 환경입니다.추가로, VM에 배포한 Calico Pod의 에러로그를 보니 10.233.0.1 (사내 망의 Master Node의 default service 주소)를 못 찾고 있었습니다. VM Calico Pod -> Master Node k8s default service -> Master Node api server 순으로 찌르는 것 같았습니다. 더불어, VM에서는 curl -k "https://121.134.39.25(master node nat ip):6443/api" 할 때 응답이 오긴 했었습니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
동시성제어
안녕하세요 강의를 듣다가 궁금증이 생겼는데요. kafka는 메시지를 하나씩 처리하기 때문에 동시성 제어도 가능할 것이라고 이해했는데 그렇다면 여기서 레디스를 사용하지 않더라도 카프카만 사용해도 동시성과 관련된 데이터 정합성을 보장할 수 있는건가요?
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker mysql or mariadb 실행 에러 참고하세요
mariadb 최신버전 사용시 Dockerfile 그대로 작성시 실행 에러가 발생합니다.저는 sql 을 백업해서 스키마랑 테이블 새로 만들도록 수정해서 해결했습니다.추가로 실행후 mysql 접속도 mysql 명령어가 아닌 mariadb 로 작성하셔야 됩니다.mariadb -h127.0.0.1 -uroot -pmysqldump -u root -p mydb > mydb.sqlFROM mariadb ENV MYSQL_ROOT_PASSWORD test1357 ENV MYSQL_DATABASE mydb COPY ./mydb.sql /docker-entrypoint-initdb.d/ EXPOSE 3306
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
npm run dev시 password 다르다고 나옴
에러 종류: 위와 같은 환경에서 error: password authentication failed for user "postgres" 로 추정되는 에러 발생아마 서버 연결시 인증 문제로 보입니다.작동 절차: docker-compose up 입력,server 파일로 이동, npm run dev 실행. 에러 발생+1)POSTGRES_HOST_AUTH_METHOD: trust로 설정하고 서버 새로 만들어도 동일한 에러가 발생하여 무슨 문제일지 잘 모르겠네요.. 도움 주시면 감사하겠습니다.+2) 아래에 터미널의 전체 에러 코드 남깁니다.C:\Users\tukim\Desktop\reddit-clone-app\server>npm run dev > server@1.0.0 dev> nodemon --exec ts-node ./src/server.ts[nodemon] 3.0.1[nodemon] to restart at any time, enter rs[nodemon] watching path(s): .[nodemon] watching extensions: ts,json[nodemon] starting ts-node ./src/server.tsserver running at https://localhost:4000error: ����� "postgres"�� password ������ �����߽��ϴ� at Parser.parseErrorMessage (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\parser.ts:369:69) at Parser.handlePacket (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\parser.ts:188:21) at Parser.parse (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\parser.ts:103:30) at Socket.<anonymous> (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\index.ts:7:48) at Socket.emit (node:events:513:28) at Socket.emit (node:domain:489:12) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) at TCP.onStreamRead (node:internal/stream_base_commons:190:23) { length: 107, severity: 'ġ��������', code: '28P01', detail: undefined, hint: undefined, position: undefined, internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'auth.c', line: '329', routine: 'auth_failed'}
-
미해결실습으로 배우는 선착순 이벤트 시스템
MySql Lock을 사용하지 않는 이유
강의에서 설명해주시기로는 쿠폰 개수를 가져오는 것부터 쿠폰 생성까지 lock을 걸어야 한다고 설명 주셨는데 이전 강의인 재고 관리 이슈와는 다르게 row가 아닌 table에 lock을 걸기 때문에 성능 이슈가 발생한다고 보면 될까요?
-
미해결공인 쿠버네티스 자격증 잘 준비하는 법 (CKA, CKAD, CKS)
프로그래밍을 할줄 알아야 쿠버네티스를 공부할 수 있을까요?
강사님 안녕하세요.쿠버네티스를 공부하려고 하는데요.개발자는 아니고 인프라 관련 직종에서 일하고 있습니다.쿠버네티스를 공부하려면 프로그래밍을 할 줄 알아야 할까요? 답변 기다립니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
발급가능 쿠폰개수가 1인당 2개이상일 때
안녕하세요! 강의 재미있고 유익하게 잘 듣고 있습니다 :)확장에 대해 생각해보니, Set을 이용해서는 중복방지 이상 개수 확장에 대해서 처리는 불가능 할 거 같아서요. 혹시, 2개 이상 N개 제한에 대한 확장 방법은 어떤게 있을까요??감사합니다!
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
개인 프로젝트 관련 질문
안녕하세요 드디어 강의 완강했습니다!!^^ 뒷부분 부터는 퀴즈가 없어서 비교적 빨리 수강했네요.강의 후에 해봐야 할 것들을 생각해보았는데 조언을 듣고 싶어서 질문남깁니다.일단은 지금 것 했던 "나만의 ~~프로젝트"를 리팩토링(성능/안정성/가독성/로직개선)하고 api기능추가, 테스트코드 작성, DB쿼리성능개선등을 해보고자합니다.전부 다 하려면 시간이 오래걸리겠지만(ㅠ) 마지막에 취업준비강의에서 말씀하신 3년차개발자로 생각되기 위해선 해야할게 많은 것 같습니다..ㅎㅎ(3년차 같은 신입을 뽑는다니!!ㅠㅠ)그래서 일단 목표는 실제 현업에서 하는 것처럼 코드를 작성해보고자 하는데요, 막상 하려니 좀 막막하네요.질문은:지금 제 생각은 현업에서 쓰는 좋은 코드를 보고 어떤 식으로 설계했는지 테스트코드는 어떻게 작성했는지 등등 참고하고 분석하고 공부해서 제 나름대로 프로젝트를 리팩토링해보고 싶은 생각입니다. 그게 가장 실력도 늘 것 같구요. 그래서 혹시 관련 코드나 책이나 자료등이 있으면 추천해주시면 감사하겠습니다.아! 그리고 백엔드 심화강의에서 마이크로큐와 await의 관계를 굉장히 감명깊게 들었습니다. 비동기과정이 정말 헷갈렸는데 속이 시원해졌습니다.ㅎㅎ 혹시 이런 자바스크립트 원리나 cs관련내용도 추천해주실만한 책이나 자료 있으면 알려주시면 감사하겠습니다.일단 방향은 이렇게 잡았는데 조언해주시면 참고하겠습니다!!끝으로 제가 지금것 들었던 개발강의중 가장 자세하고 친절하고 이해도 잘되고 재밌는 강의였습니다!!퀴즈 할때나 버그나 에러날때 힘들긴 했지만, 그래도 개발이 점점 더 재밌어지고 더 잘하고 싶네요. 궁금한 것있으면 또 질문해도 되겠죠?^^;;; 감사합니다!!
-
미해결
비전공자 프로젝트 서버 아키텍처 관련 질문
안녕하세요 백엔드 개발자로 취업을 준비하고 있는 비전공자 취준생입니다. 현재 프로젝트 설계 중인데, 아키텍처에 관한 지식이 많이 부족해 글을 올려봅니다. 저희는 달력 일정 관리 프로젝트를 설계중인데, NestJS를 사용해서 github actions, docker를 통해 무중단 배포를 하고자 합니다.db는 postgreSQL을 사용하고자 하는데요.여기서 db 대용량 데이터와 트랜잭션에 대한 대비로 멀티 서버 구축이 반드시 필요한지 궁금합니다.저희가 서버 아키텍처 관련 지식이 많이 부족해서 구글링을 해도 잘 모르겠더라고요.만약 멀티 서버 구축을 해야한다면 데이터 서버를 따로 분리해야하는지 아니면 다른 방식을 해야하는지 잘 모르겠어서 글을 올려봅니다. 만약 서버를 분리하지 않는다면 이를 대비할 다른 방법이 있을지도 궁금합니다. 읽어주셔서 감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
admin 에 나타나지 않는 몇몇 필드들
안녕하세요, 강의를 잘 듣고 있습니다. 모델 필드에 있는 몇몇 필드들이 admin에 나타나지 않더군요예를 들면, updated_at, created_at 같은 필드들이요 이를 위해서 admin 페이지에 일일히 모델 필드를 list_display에 등록해줘야 하는게 맞나요? from django.contrib import admin# Register your models here.from .models import *admin.site.empty_value_display = "-empty-"admin.site.register(Product)admin.site.register(CartProduct)class OrderAdmin(admin.ModelAdmin):list_display = ['customer', 'transaction_id', 'total_price']admin.site.register(Category)admin.site.register(UserProfile)admin.site.register(Order)admin.site.register(OrderedProduct)admin.site.register(ShipmentInfo) 그럼 제가 직접만든 모델의 경우에는 그렇다 쳐도..allauth에 있는 site domain 부분이 나오질 않는거에요 ㅠㅠ...제가 뭘 잘못 건드렸는 지 모르겠는데, 맨처음 프로젝트할 때에는 allauth의 소셜 어플리케이션 부분에 사이트 도메인을 입력할 수 있는 커다란 박스가 있었는데, 그것만 또 안난옵니다. 제가 뭘 잘못한건지 ㅠㅠ 원래 잘 나오던건데... 이번에 파이참 커뮤니티 에디션에서 유료버전으로 바꾸고, 프로젝트를 만들고 나니 admin에 몇몇 모델의 필드들이 잘 보이지 않습니다.verbose name을 설정된것들이 특히 그런 거 같은데 무엇이 문제인지 도통 모르겠습니다. 그렇다고 allauth를 제가 admin에 등록해야하는걸까요?2.제가 모르는 무언가가 있는걸까요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
왜 쿠폰수가 너무 많을까요?
분명 현재 없는 상태이고결과가 자꾸 이상하게 나와서 sout 처리를 잠시 해보았습니다 package com.example.api.service; import com.example.api.domain.Coupon; import com.example.api.repository.CouponCountRepository; import com.example.api.repository.CouponRepository; import org.springframework.stereotype.Service; @Service public class ApplyService { private final CouponRepository couponRepository; private final CouponCountRepository couponCountRepository; public ApplyService(CouponRepository couponRepository, CouponCountRepository couponCountRepository) { this.couponRepository = couponRepository; this.couponCountRepository = couponCountRepository; } public void applyV1(Long userId) { Long count = couponRepository.count(); if(count > 100) { return; } couponRepository.save(new Coupon(userId)); } public void applyV2(Long userId) { Long count = couponCountRepository.increment(); System.out.println(count); if(count > 100) { return; } couponRepository.save(new Coupon(userId)); } } @SpringBootTest class ApplyServiceTest { @Autowired private ApplyService applyService; @Autowired private CouponRepository couponRepository; @Test public void applyOnce() { applyService.applyV1(1L); long count = couponRepository.count(); Assertions.assertEquals(1L, count); } @Test public void 여러명응모V1() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i=0; i<threadCount; i++){ long userId = i; executorService.submit(() -> { try { applyService.applyV1(userId); } catch(Exception e) { System.out.println(e); }finally { latch.countDown(); } }); } latch.await(); long count = couponRepository.count(); assertThat(count).isEqualTo(100); } @Test public void 여러명응모V2() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i=0; i<threadCount; i++){ long userId = i; executorService.submit(() -> { try { applyService.applyV2(userId); } catch(Exception e) { System.out.println(e); }finally { latch.countDown(); } }); } latch.await(); long count = couponRepository.count(); org.assertj.core.api.Assertions.assertThat(count).isEqualTo(100); } } 그런데 여러명응모V2 test를 실행시에 count를 출력시다음과 같은 수가 나옵니다. 20003200112001220013200152001620017200182002020022 ??? 한번 할때마다 1000씩 쿠폰의 수가 증가중인데요;;;조회했을때는 empty라 나오는데 이렇게 되는 연유를 잘 모르갰습니다. 테스트 코드라서 rollback이 되야할거 같은데 그렇지 않는것도 잘 모르겟네요;; ㅠㅠ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
wsl2를 사용하여 windows에 ubunto20.04설치
아직 프리캠프부분 수강중인데혹시 완전히 운영체제를 지우지 않고 위와 같은 방식을 사용하면 이후 진도를 나가는데 있어 문제가 생기나요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
SendGird가입
안녕하세요 api 인증키를 발급받기 위해 sendgrid를 가입하려고 하는데 가입이 되지 않아서 질문남깁니다!!
-
미해결초보를 위한 도커 안내서
wordpress 에러- Error establishing a database connection
강의 환경은 MAC이나 저의 실습 환경은 CentOS여서 생긴 에러입니다.host.docker.internal 을 Linux 환경에서 사용하기 위해서는 아래와 같이 실행하시면 정상적으로 워드프레스 동작합니다.mysql 실행하기docker run -d \ --add-host=host.docker.internal:host-gateway \ -p 3306:3306 \ -e MYSQL_ALLOW_EMPTY_PASSWORD=true \ --name mysql \ mariadb:10.9 mysql 데이터베이스 추가docker exec -it mysql mysql create database wp CHARACTER SET utf8; grant all privileges on wp.* to wp@'%' identified by 'wp'; flush privileges; quit 워드프레스 블로그 실행하기docker run -d -p 8080:80 \ --name wordpress \ --add-host host.docker.internal:host-gateway \ -e WORDPRESS_DB_HOST=host.docker.internal \ -e WORDPRESS_DB_NAME=wp \ -e WORDPRESS_DB_USER=wp \ -e WORDPRESS_DB_PASSWORD=wp \ wordpress--add-host host.docker.internal:host-gateway해당 옵션을 mysql/wordpress docker 실행 시 붙여주시면 됩니다. 오류나시는 분들께 도움되셨으면 좋겠습니다.
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
쿠버네티스 설치할 때 에러납니다. 해결 방법 공유합니다. (23.05.30 기준)
한달 전에는 노션에 있는 스크립트대로 해도 잘 됐는데 지금은 안되네요. 강사님이 강의에서 설치 방법이 계속 바뀐다고 하셨는데 그 사이에 바뀐 모양입니다. 다른 질문 작성자 님이 공유해주신 내용 참고해서 문제 해결하였고 저처럼 삽질하지 마시라고 내용 공유드립니다.저는 'kubeadm, kubelet 및 kubectl 설치' 구간의 노션 스크립트를 다음과 같이 변경하여 설치 진행했습니다.#2번, #3번을 변경했습니다.sudo mkdir /etc/apt/keyrings cat <<EOF > kube_install.sh # 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다. sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl # 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다. curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg # 3. 쿠버네티스 apt 리포지터리를 추가한다. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list # 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다. sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl EOF sudo bash kube_install.sh기존 스크립트에서 인증 관련 데이터를 '/etc/apt/keyrings'폴더에 저장하는 것으로 변경되었습니다. 강의에서 실습하는 Ubuntu 22.04 이전 환경에는 default로 '/etc/apt/keyrings' 폴더가 없어 직접 만들어 줘야 인증 키를 받을 수 있습니다.
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
강의 자료 링크
강의 자료 링크가 동작이 안되는데 확인 부탁 드립니다!
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
updateform, A user with that username already exists. 에러
updateform에서 disabled = True로 변경하여 url로 접속해보면 제대로 적용이 되는 것을 확인할 수 있습니다.하지만 비밀번호를 입력하고 제출을 누르면 계속해서 A user with that username already exists. 메시지만 뜨고 있는 상황입니다. ㅠㅠㅠ
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
강의 pdf, 구글 드라이브에 대해 질문있습니다!
안녕하세요강사님의 도커강의 잘 듣고 있습니다.다름이 아니라 제가 현재 도커 강의를 복습하고 있는데, pdf파일이나 구글drive에서 강의 자료 파일을 확인해보면, 반정도 짤려있거나, 깨져있었습니다.혹시 window pdf나 구글 드라이브에 있는 파일 다시 올려주실 수 있으실까요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
강의자료 pdf에서 우분투에서 도커 다운받는 링크 복사할때
도커 다운받는 링크 복사 할때 공백 생겨서 필요 하신분 쓰시라고 링크 올려 두겠습니다.https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
-
미해결쿠버네티스 101 - 클라우드/서버 개발 첫걸음
개발 환경에 소개해주신 것들은 직접 설치 하라는 의미인건가요?
개발 환경 강의에서 VS 에서 Google Cloud Code 이외 설치 영상은 없는데처음에 소개해줄 때 알아서 설치하라는 말씀이신가요? Google Cloud Code 익스텐션 설치 후 where.exe minicube 입력 시정보: 제공된 패턴에 해당되는 파일을 찾지 못했습니다.라고 떠서요.