묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Do It! 장고+부트스트랩: 파이썬 웹개발의 정석
포스트 목록 페이지 수정하기2 중에서 막히는 부분이 있습니다. (미분류)
안녕하세요 선생님. 강의 열심히 듣고 있습니다^^;다름이 아니라 아래와 같이 미분류 카운트가 입력되지 않아 오류가 발생하는 부분때문에 계속 찾아보았으나,답답한 마음에 질문글을 남깁니다.우선 카테고리 분류에서프로그래밍, 문화&예술 까진 카운트가 잘 입력됩니다.그렇지만 "미분류" 부분은 계속 () 으로 표시됩니다.분명 미분류 부분이 존재함에도 불구하고, 카운트가 되지 않는 건 무엇이 잘못되었는지 도저히 알기가 어렵습니다. 혹시 확인이 가능할까요?^^;; test.py 실행시 오류화면미분류() 카운트 부분을 주석처리하면 테스트는 잘 완료됩니다.총 4개의 페이지에 대한 코드를 올려봅니다.test.pybase.htmlviews.pypost_list.html test.pyfrom django.test import TestCase, Client from django.contrib.auth.models import User from bs4 import BeautifulSoup from .models import Post, Category # Create your tests here. class TestView(TestCase): def setUp(self): self.client = Client() # 방문하는 사람의 브라우저다 Client() self.user_trump = User.objects.create_user( username='trump', password='somepassword' ) self.user_obama = User.objects.create_user( username='obama', password='somepassword' ) self.category_programming = Category.objects.create( name='programming', slug='programming' ) self.category_music = Category.objects.create( name='music', slug='music' ) self.post_001 = Post.objects.create( title='첫 번째 포스트입니다.', content='Hello, world, we are the world', category=self.category_programming, author=self.user_trump, ) self.post_002 = Post.objects.create( title='두 번째 포스트입니다.', content='1등이 전부는 아니잖아요. 저는 개발을 좋아할겁니다.', category=self.category_music, author=self.user_obama, ) self.post_003 = Post.objects.create( title='세 번째 포스트입니다.', content='Category 가 없을 수도 있죠.', author=self.user_obama, ) def navbar_test(self, soup): navbar = soup.nav self.assertIn('Blog', navbar.text) self.assertIn('about_me', navbar.text) logo_btn = navbar.find('a', text='Do it Django') self.assertEqual(logo_btn.attrs['href'], '/') home_btn = navbar.find('a', text='Home') self.assertEqual(home_btn.attrs['href'], '/') blog_btn = navbar.find('a', text='Blog') self.assertEqual(blog_btn.attrs['href'], '/blog/') about_me_btn = navbar.find('a', text='about_me') self.assertEqual(about_me_btn.attrs['href'], '/about_me/') def category_card_test(self, soup): categories_card = soup.find('div', id='categories-card') self.assertIn('Categories', categories_card.text) self.assertIn( f'{self.category_programming} ({self.category_programming.post_set.count()})', categories_card.text ) self.assertIn( f'{self.category_music} ({self.category_music.post_set.count()})', categories_card.text ) self.assertIn( f'미분류 ({Post.objects.filter(category=None).count()})', categories_card.text ) def test_post_list_with_posts(self): self.assertEqual(Post.objects.count(), 3) # 1.1 포스트 목록 페이지 (post_list)를 연다. response = self.client.get('/blog/') # 1.2 정상적으로 페이지가 로드된다. self.assertEqual(response.status_code, 200) # 1.3 페이지 타이틀에 Blog 라는 문구가 있다. soup = BeautifulSoup(response.content, 'html.parser') self.assertIn('Blog', soup.title.text) self.navbar_test(soup) self.category_card_test(soup) # 3-2. 포스트 목록 페이지를 새로 고침 했을 때, response = self.client.get('/blog/') soup = BeautifulSoup(response.content, 'html.parser') # 3-3. 메인영역에 포스트 2개의 타이틀이 존재한다. main_area = soup.find('div', id='main-area') self.assertNotIn('아직 게시물이 없습니다.', main_area.text) post_001_card = main_area.find('div', id='post-1') self.assertIn(self.post_001.title, post_001_card.text) self.assertIn(self.post_001.category.name, post_001_card.text) post_002_card = main_area.find('div', id='post-2') self.assertIn(self.post_002.title, post_002_card.text) self.assertIn(self.post_002.category.name, post_002_card.text) post_003_card = main_area.find('div', id='post-3') self.assertIn(self.post_003.title, post_003_card.text) self.assertIn('미분류', post_003_card.text) self.assertIn(self.post_001.author.username.upper(), main_area.text) self.assertIn(self.post_002.author.username.upper(), main_area.text) self.assertIn(self.post_003.author.username.upper(), main_area.text) def test_post_list_without_post(self): Post.objects.all().delete() self.assertEqual(Post.objects.count(), 0) response = self.client.get('/blog/') self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') self.navbar_test(soup) self.assertIn('Blog', soup.title.text) # 2-2. 메인영역에 "아직 게시물이 없습니다." 라는 문구가 나온다. main_area = soup.find('div', id='main-area') self.assertIn('아직 게시물이 없습니다.', main_area.text) def test_post_detail(self): self.assertEqual(Post.objects.count(), 3) # 1.2 그 포스트의 url은 '/blog/1/' 이다. self.assertEqual(self.post_001.get_absolute_url(), '/blog/1/') #.2. 첫 번째 포스트의 상세 페이지 테스트 # 2-1. 첫 번째 포스트의 url로 접근하면 정상적으로 작동한다. (status code : 200). response = self.client.get(self.post_001.get_absolute_url()) self.assertEqual(response.status_code, 200) soup = BeautifulSoup(response.content, 'html.parser') # # 2-2. 포스트 목록 페이지와 똑같은 네비게이션 바가 있다. self.navbar_test(soup) # 2-3. 첫 번째 포스트의 제목이 웹 브라우저 탭 타이틀에 들어있다. self.assertIn(self.post_001.title, soup.title.text) # 2-4. 첫 번째 포스트의 제목이 포스트 영역에 있다. main_area = soup.find('div', id='main-area') post_area = main_area.find('div', id='post-area') self.assertIn(self.post_001.title, post_area.text) # # 2-5. 첫 번째 포스트의 작성자(author)가 포스트 영역에 있다. (아직 구현할 수 없음) self.assertIn(self.user_trump.username.upper(), post_area.text) # # 2-6. 첫 번째 포스트의 내용(content)이 포스트 영역에 있다. self.assertIn(self.post_001.content, post_area.text) base.html<!DOCTYPE html> {% load static %} <html> <head> <title>{% block head_title %} Blog | 하도영 웹사이트 {% endblock %}</title> <link href="{% static 'blog/bootstrap/bootstrap.min.css' %}" rel="stylesheet" type="text/css"> <!-- <link href="./practice.css" rel="stylesheet" type="text/css"> --> <!-- 주석처리 키 ctrl + / --> <script src="https://kit.fontawesome.com/c1d4d1ab30.js" crossorigin="anonymous"></script> </head> <body> {% include 'blog/navbar.html' %} <div class="container"> <!-- 블로그 리스트 페이지 만들기 강의 5:04 blog 글자 부분 container 클래스에 의해 do it django 와 같은 간격으로 맞춰짐 --> <!-- 이 아래는 9:3, 좁을때는 8:4 로 나눌거임 --> <div class="row my-3"> <div class="col-md-8 col-lg-9", id="main-area"> {% block main_area %} {% endblock %} </div> <div class="col-md-4 col-lg-3"> <!-- Search widget--> <div class="card mb-4"> <div class="card-header">Search</div> <div class="card-body"> <div class="input-group"> <input class="form-control" type="text" placeholder="Enter search term..." aria-label="Enter search term..." aria-describedby="button-search" /> <button class="btn btn-primary" id="button-search" type="button">Go!</button> </div> </div> <!-- Categories widget--> <div class="card mb-4", id="categories-card"> <div class="card-header">Categories</div> <div class="card-body"> <div class="row"> <ul> {% for category in categories %} <li> <a href="#!">{{ category.name }} ({{ category.post_set.count }})</a> </li> {% endfor %} <!-- views.py 에 def get_context_data(self, **kwargs): 를 참고한다. --> <li> <a href="#!">미분류 ({{ no_category_post.count }})</a> </li> </ul> </div> </div> </div> </div> </div> </div> {% include 'blog/footer.html' %} <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script> </body> </html> views.pyfrom django.shortcuts import render from django.views.generic import ListView, DetailView from .models import Post, Category class PostList(ListView): model = Post # template_name = 'blog/post_list.html' ordering = '-pk' def get_context_data(self, **kwargs): context = super(PostList, self).get_context_data() context['categories'] = Category.objects.all() context['no_category_post.count'] = Post.objects.filter(category=None).count() # 미분류인 애들이 몇개인지 확인한다. filter기능을 이용해 none 인 애를 확인하고 count() 에 숫자를 담아 no_category_post.count에 넣어준다. return context class PostDetail(DetailView): model = Post template_name = 'blog/post_detail.html' # def index(request): # posts = Post.objects.all().order_by('-pk') # # pk는 순서대로 -pk 는 역순으로 최신 쓰레드가 위로 나오도록 조회 # return render( # request, # 'blog/index.html', # { # 'posts': posts, # } # ) # def single_post_page(request, pk): # post = Post.objects.get(pk=pk) # # return render( # request, # 'blog/single_page.html', # { # 'post': post, # } # ) post_list.html{% extends 'blog/base.html' %} {% block main_area %} <h1> Blog </h1> {% if post_list.exists %} {% for p in post_list %} <!-- Blog Post --> <div class="card mb-4", id="post-{{ p.id }}"> {% if p.head_image %} <img class="card-img-top" src="{{ p.head_image.url}}" alt="{{ p.title }}" /> {% else %} <img class="card-img-top" src="https://picsum.photos/seed/{{ p.id }}/600/200" alt="{{ p.title }}" /> {% endif %} <div class="card-body"> <!-- <div class="small text-muted">January 1, 2022</div>--> {% if p.category %} <span class="badge badge-secondary float-right">{{ p.category }} </span> {% else %} <span class="badge badge-secondary float-right">미분류</span> {% endif %} <h2 class="card-title h4">{{ p.title }}</h2> {% if p.hook_text %} <h5 class="text-muted">{{ p.hook_text }}</h5> {% endif %} <p class="card-text">{{ p.content | truncatewords:45 }}</p> <a href="{{ p.get_absolute_url }}" class="btn btn-primary">Read more →</a> </div> <div class="card-footer text-muted"> Posted on {{ p.created_at }} by <a href="#">{{ p.author | upper }}</a> </div> </div> {% endfor %} {% else %} <h1> 아직 게시물이 없습니다. </h1> {% endif %} <!-- Pagination--> <ul class="pagination justify-content-center my-4"> <li class="page-item"> <a class="page-link" href="#!">← Older</a> </li> <li class="page-item disabled"> <a class="page-link" href="#!">Newer →</a> </li> </ul> {% endblock %}
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
배포 후 로그인 인증이 안됩니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현재 강의대로 배포중인 상태입니다.회원가입도 잘 되어서 로그인도 되는데로그아웃이란 커뮤니티 생성 시 401 (Unauthorized)에러가 뜹니다.. 로컬에서는 아무런 문제 없이 잘 작동하고 있습니다.아무리 찾아봐도 어떤 문제가 있는지를 모르겠습니다 ㅠㅠ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
조언 부탁드립니다. mini-project
현재 puppeteer-crawling해서스타벅스메뉴와 이미지는 잘 긁어 왔는데요.자꾸 MongoDB에 저장되어 있는 img를 불러올 때 에러가 발생하는데, 성공하신 분 있나요?스키마에서 이미지 형식을 Buffer했습니다.import mongoose from "mongoose"; const StarbucksSchema = new mongoose.Schema({ name: String, img: Buffer, }); export const Starbucks = mongoose.model("Starbucks", StarbucksSchema); //이미지 URL로부터 이미지 다운로드 if (!fs.existsSync("img_crawling")) { fs.mkdirSync("img_crawling"); } let fileName = `img_crawling/${menuName}.jpg`; request(menuImage).pipe(fs.createWriteStream(fileName)); console.log(`이미지 ${fileName} 저장 완료`); 저는 fs모듈과 request모듈을 추가로 사용했는데,이미지의 주소를 MongDB에 저장하고,이미지는 별도의 폴더에 저장되게 만들었습니다.질문 요약1. MongDB에 이미지 저장할 때 fs라이브러리와 request라이브러리를 사용하게 맞나요?2. 이미지를 저장은 잘 됐는데, 화면에 뿌려 줄려고 하는데 자꾸 에러가 나요.3.몽고DB에 접속해서 이미지 주소를 가져와서, 그 주소를 기반으로 뿌려줘야 되는지4.아니면 몽고DB에 접속해서 그 메타주소(?)를 기반으로 현재 컴퓨터에 저장된 이미지를 화면에 뿌려줘야 하는지자꾸 구글링하면 몽고DB에 이미지파일을 직접적으로저장하는 것은 DB에 무리를 일으킨다. 그래서 어떠한라이브러리를 사용해서 DB에는 메타주소(?)만을 저장하고,이미지파일을 별도의 localStorage에 저장한다.또한 이미지를 그냥 가져(load) 올 수 없어서 인코딩을 해줘야 한다. 뭔 말인지 모르겠어요 ㅠ.ㅠ
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
docker run -v 옵션이 제대로 적용되지 않는 것 같습니다...; ㅅ;
먼저 정말 상세한 강의 너무 잘 듣고 있습니다!! 감사합니다~그런데 따라 하다가 처음으로 영상대로 되지 않는 부분이 생겼습니다.강의 영상 : docker 주요 명령 익히기 5 (10:50)제공된 html 파일이 들어있는 폴더를 EC2에 업로드 하고docker run -d -p 9999:80 -v /home/ubuntu/2021_DEV_HTML:/usr/local/apache2/htdocs --name apacheweb2 httpd이렇게 동일하게 입력했습니다.그리고 그냥 IP주소:9999 로 입력하면 그대로 "It works!" 가 나옵니다...혹시나 싶어 IP주소:9999/index.html 로 접속해봤더니 정상적으로 업로드한 파일이 보입니다.이건 왜 그런걸까요 ;ㅅ ;?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
TypeORM 에러 및 middleware 설치 이후 cors 에러 문의드립니다.
안녕하세요, 강사님!강의 듣던 도중 해결하지 못한 에러가 있어 조언해주실 수 있으신지 문의드립니다. 1 TypeORM에서 다음과 같은 에러가 뜹니다.Server running at http://localhost:4000 QueryFailedError: tables can have at most 1600 columns at PostgresQueryRunner.query (생략) { query: 'ALTER TABLE "posts" ADD "title" character varying NOT NULL', parameters: undefined, driverError: error: tables can have at most 1600 columns at Parser.parseErrorMessage (생략) { length: 100, severity: 'ERROR', code: '54011', detail: undefined, hint: undefined, position: undefined, internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'tablecmds.c', line: '6819', routine: 'ATExecAddColumn' }, length: 100, severity: 'ERROR', code: '54011', detail: undefined, hint: undefined, position: undefined, internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'tablecmds.c', line: '6819', routine: 'ATExecAddColumn' } <== 이 부분이 계속 반복됩니다 (반복적으로 테이블이 생성되는 듯)stackoverflow를 찾아보니 oneToMany relation이 문제가 된다는 글을 봤는데... 제가 백앤드쪽 지식이 전무하다보니, oneToMany 데코레이터로 설정된 Entity를 어떻게 수정해야하는건지 잘 모르겠고, 강사님 코드와 동일하게 작성한 것 같은데 뭐가 문젠지 잘 모르겠습니다.특히나 아래 코드 중,{ length: 100, severity: 'ERROR', .... }이 부분이 반복적으로 로그에 찍히는데 어떻게 해결해야할지 잘 모르겠습니다.이 글을 보니, nomarlization을 진행하라는데 이게 맞는 솔루션인가요?백앤드 해보고 싶어서 아는 것 없이 무작정 따라하는 중인데, 지식이 부족해서 제대로 된 해결방법이 뭔지 알 수가 없네요.. 2middleware 설치 전까지는 회원가입 기능이 잘 되었었는데, middleware 설치 이후로는, 로컬호스트 3000에서 cors 에러가 뜹니다. (아래 이미지 첨부)로그인, 회원가입 기능 어떤것도 되지 않는 상태이고, token도 생성되지 않습니다.일단 계속해서 강의를 듣고 있는데 에러 해결이 안되어 더이상 진도를 나갈 수가 없어서 문의남깁니다 ㅠㅠAccess to XMLHttpRequest at 'http://localhost:4000/api/auth/me' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. { "message": "Network Error", "name": "AxiosError", "stack": "AxiosError: Network Error\n at XMLHttpRequest.handleError (webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:168:14)", "config": { "transitional": { "silentJSONParsing": true, "forcedJSONParsing": true, "clarifyTimeoutError": false }, "adapter": [ "xhr", "http" ], "transformRequest": [ null ], "transformResponse": [ null ], "timeout": 0, "xsrfCookieName": "XSRF-TOKEN", "xsrfHeaderName": "X-XSRF-TOKEN", "maxContentLength": -1, "maxBodyLength": -1, "env": {}, "headers": { "Accept": "application/json, text/plain, /" }, "baseURL": "http://localhost:4000/api", "withCredentials": true, "method": "get", "url": "/auth/me" }, "code": "ERR_NETWORK", "status": null } 나름대로 검색도 해보고, node_modules 싹 날리고 재설치해봤으나.. ㅠㅠ 답변 기다리겠습니다 감사합니다
-
해결됨따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
`node_modules` 폴더는 마운트 해서 사용하지 않는 이유가 무엇인가요?
node_modules 폴더는 마운트 해서 사용하지 않는 이유가 무엇인가요?특별한 이유가 있는지 궁금합니다.
-
해결됨따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
베이스이미지가 `node:10` 이라는 것을 어떻게 검색할 수 있나요?
베이스이미지가 node:10 이라는 것을 어떻게 검색할 수 있나요?도커허브에서 검색을 해보았는데 from 에서 어떻게 사용하는지?또한 버전은 몇부터 몇까지 있는지 명확하게 나온게 없는 것 같습니다.https://hub.docker.com/_/node
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
혹시 테스트 결제 잘 되나요??
여러 방면으로 시도 중인데,error_code: "NOT_READY"error_msg: "등록된 사용자가 아니거나, 아임포트 관리자 페이지에 설정된 PG정보가 없습니다."해당 에러가 뜨면서 계속 실패하네요;;혹시 하신 분들은 어떻게 성공하셨는지 궁금합니다.일단 제가 예상한 것으로는 강의 화면이랑 제 구 관리자콘솔의 시스템 관리 탭이 다른 점에 눈이 가는데, 이걸 어떻게 처리해야되는지 어디를 찾아봐도 안나오네요...강의에서는 여러 탭이 있는데 저는 두 개의 탭 밖에 보이지 않습니다. 해결 방법을 찾고 싶어도 어디서 찾아야 되는 지 감이 안잡히네요
-
미해결그림으로 배우는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
m1 맥에서 실행할 수 있는 방법은 없나요??
[질문 전 답변]1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요]2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요]3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요](https://www.inflearn.com/blogs/1719)4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.[질문 하기]m1 아키텍처를 이용하여 현재 학습하려고 하고 있는데 Vagrant up이 제대로 실행되지 않습니다. Bringing machine 'm-k8s-1.22' up with 'virtualbox' provider...Bringing machine 'w1-k8s-1.22' up with 'virtualbox' provider...Bringing machine 'w2-k8s-1.22' up with 'virtualbox' provider...Bringing machine 'w3-k8s-1.22' up with 'virtualbox' provider...==> m-k8s-1.22: Importing base box 'sysnet4admin/CentOS-k8s'...==> m-k8s-1.22: Matching MAC address for NAT networking...==> m-k8s-1.22: Checking if box 'sysnet4admin/CentOS-k8s' version '0.7.4' is up to date... 여기서 멈춰요 os : Ventura 13.1virtualbox : 7.0.3 BETAvagrantfile : 강의와 동일추가로 이미지파일 다운받아서 하는것도 cpu가 맞지 않다고 뜹니다
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
npm run dev 실행 오류
npm run dev 로 server.ts 실행시, 에러가 발생합니다.찾아보니, db 연결 시 인증에 관련된 오류 같은데... 어떻게 해야할지 잘 모르겠습니다.오타 꼼꼼히 확인하고 docker-compose도 다시 실행 해봤는데 해결이 되지 않네요.제가 수업 듣기 전에 pg-admin을 설치했었는데, 그것과 관련 있는 걸까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
Connection 부분 질문
따라하고있는데 Connection부분이 저렇게 줄이 찍 가져있고 사용되지않음으로 표시된다고 뜹니다. import부분도 그렇구요. 무엇때문에 이럴까요?
-
해결됨따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
도커 이미지(컨테이너) 하나에 여러개의 앱을 설치해도 되나요? (mysql, express, react 등)
도커 이미지(컨테이너) 하나에 여러개의 앱을 설치해도 되나요? 만약, 웹을 만든다고하면 대부분 DB 가 필요할텐데, mysql, express, react, nginx 를 한번에 같은 컨터이너에 띄우는게 좋은가요?아니면 각각 구분해서 띄우는게 좋은가요?
-
미해결대세는 쿠버네티스 (초급~중급편)
service 를 통한 HA
서비스 - pod1 을 연결하여 서비스를 하다가 pod1을 delete pod --force로 강제삭제한 후에 서비스에 연결된 다른 pod2 바로 넘어가야하는데 넘어가는시간이 1분 정도 걸립니다. application단은 아니고 Layer4에서 넘어가야하는 건데요 더 빠르게 할 방법이 없을까요?
-
미해결그림으로 배우는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
4.5 외부 이름 에서 질문드립니다.
안녕하세요 강사님 질문 하나 드립니다.강의에서k run net --image=~ 이후 k exec net 을 하여 net으로 접근합니다 그 후에 nslookup으로 확인을 하는데요 여기에 질문이 있는데 , 강의에서 클러스터 내부에서 접근해야된다고 말씀해 주셨는데, 이미 마스터노드 안이라 nslookup을 바로 하면 될 줄 알았는데 Net을 통해 접근을 해야 되더라구요..! 첫번째로 마스터 노드에서 net을 통해 클라스터로 접근을 하는 부분이 이해가 안되며, 두번째로 net을 통해 접근하는거 또한 이해가 되지 않습니다. net의 역할이 정확히 무엇인지 개념이 정립이 안되네요 죄송합니다. 제가 생각하기로는 클러스터 안에 노드 그 안에 파드 라고 생각했는데 어떤게 맞는지 정확히 모르겠습니다 .! 감사합니다.
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
django 코드를 보려고 하는데 질문드립니다.
저는 클래스의 self가 클래스의 인스턴스를 만들었을때 그 인스턴스 자신을 self라고 하는것으로 알고있었습니다. 그런데 장고코드에는 클래스기반뷰에서 클래스의 인스턴스를 만들지 않음에(예를들어 a=RedirectVIew()어쩌구 하는게 아니라 a=RedirectView.as_view()를 통해서 함수를 넘기잖아요)도 불구하고 self가 다양하게 들어가는데 이건 어떤 의미인가요?^^;;
-
미해결도커 쓸 땐 필수! 도커 컴포즈
docker compose up 에러 질문드립니다~
강의대로 docker compose up 명령어를 실행했을때 하단에 'docker compose up 에러 메시지' 가 출력됩니다.localhost:8000 으로 접속이 안되고 있으며,Dockerfile-dev 에서 버전을 3.7로 지정을 했는데도 에러메시지에는 python3.11가 찍히는지 잘 모르겠습니다.답변 해주시면 감사드리겠습니다. 개발환경: M1 macbook pro (os버전 :13.1 (22C65)) [docker-compose]https://gist.github.com/Gunwoong-Heo/c50843c7470528e415dc3bacf10cf181[Dockerfile-dev]https://gist.github.com/Gunwoong-Heo/ea64ad78a24f3ed87414c472ad5640a9[docker compose up 에러 메시지]https://gist.github.com/Gunwoong-Heo/29f5ae8026391482b69dc5fcfbdc5112
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
혹시 윈스턴으로 로거 저장하는 파트는 따로 없나요?
윈스턴이던뭐던 로그를 저장하는파트는 따로 없나요? 따라서 만들다보니 로그를 저장할 필요가 있을것같아서 시도중인데 nest는 방법을 잘 모르겠어서혹시 강의에 포함이된부분이있나해서요.
-
미해결따라하며 배우는 MySQL on Docker
HA Fail-over 질문드립니다.
안녕하세요! 평소 궁금했던 내용들이어서 강의 정말 잘 듣고있습니다.HA Fail-over 강의에서 "시스템 장애"라는 상황을 가정해서 실습하는 것으로 이해했습니다. 제가 궁금한 부분은 "시스템 장애"라는 문제를 간략하게 "MasterDB 작동이 중지되었다(실습에서 강제로 중지시키는 부분)." 것으로 시스템 장애 상황을 대체해서 설명해주셨습니다. 해당 부분에서 제가 생각했을 때, "시스템 장애"가 DB가 멈춘 것 외에도 다양하게 있을 것 같습니다.(경험이 없어 정확한 비유일지는 모르겠으나)예를 들어, DB와 서버간의 IO connection이 받쳐주지 못해서 DB에 데이터를 저장하지 못한다던지..? 혹은 DB rollback이 제대로 작동하지 않는다던지? 혹시 "시스템 장애"에 대해 사례가 있다면 답변해 주시면 더 공부해볼 수 있을 것 같습니다. 부족한 질문이지만 끝까지 읽어주셔서 감사합니다! :)
-
미해결따라하며 배우는 MySQL on Docker
CRUD와 Replication 질문 드립니다.
안녕하세요! 질문 드리기에 앞서 강의 정말 잘 보고 있습니다.소중한 강의 너무 감사합니다.강의 수강 중에 CRUD와 Replication 사이에 대해서 궁금증이 생겨 질문 남깁니다.현재 강의내용을 보면 Docker 환경에서 여러개의 MySQL을 띄우고, 각각 관계(Mater-Slave)를 설정하는 것으로 이해했습니다.그렇다면, 실제 DB에 저장되는 Create, Update, Delete, Read는 서버단에서 구현해서 데이터를 다루면 되는걸까요? Question 1. Spring-MySQL 환경에서 Create, Update는 MasterDB 설정(port로)으로 저장하고, Read는 SlaveDB에서 불러오는 방식으로 Spring에서 구현하면 되는 건지 궁금합니다.Question 2. 만약 CRUD마다 접근하는 DB가 다르다면, 데이터 동기화는 따로 mysql.conf 설정과 같은 곳에서 지정해야하는 걸까요? Question 3. 현재 강의에서 Replication을 설정한 것으로 Master-Slave의 데이터는 동기화되나요?조금 부족한 질문이지만 만약 답변 해주신다면 큰 도움이 될 것 같습니다! 긴 질문 읽어주셔서 감사합니다.
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
BadHeaderError at /accounts/signup/
심지어는이런 에러까지 뜨더라구요.이것과 관련하여서는 장고 공식문서에 나온대로 예외처리를class User(AbstractUser): website_url = models.URLField(blank = True) bio = models.TextField(blank = True) def send_welcome_email(self): subject = render_to_string('accounts/welcome_email_subject.txt', { 'user': self }) content = render_to_string('accounts/welcome_email_content.txt',{ 'user': self }) # 여기서 settings는 django.conf라는 곳에서 임포트 해오는 것이고 # 기초 settings.py의 이름이 변하더라도 거기서 가져오는 것 같다. # 문제 생길 시, 추측이 아닐 수 있으니 settings를 common으로 변경해주자. sender_email = settings.WELCOME_EMAIL_SENDER if subject and content and sender_email: try: # 여기서 self.email의 의미는 User마다 email로 가입이 될텐데, 그 주소가 수신주소가 되는것이다. send_mail(subject, content, sender_email, [self.email], fail_silently=False) except BadHeaderError: return HttpResponse('Invalid Header found.') return HttpResponseRedirect('/') else: # In reality we'd use a form class # to get proper validation errors. return HttpResponse('Make sure all fields are entered and valid.') # save할때마다 호출 -> which mean is User가 생성될때마다 # 이런식의 로직 구현이 가능하다. def save(self, *args, **kwargs): is_created = (self.pk == None) super().save(*args, **kwargs) if is_created: pass이렇게 중간에 try, except로 처리해주었는데, 이렇게 해도 진행에 지장은 없을까요?애초에 이 에러가 왜 발생했는지도 이해가 잘갑니다.에러메세지를 읽어봐도 두루뭉술하게 Header values can't newlines 라고 되어있으니, 뭐가 문제인지도 파악이 어렵구요 ㅠㅠ