inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

Interceptor 여러번 호출

해결됨

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()); } } @Slf4j public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info(" >> preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info(" >> postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info(" >> afterCompletion"); } } 호출이 여러번 되는 현상이 발생합니다. preHandle 로그가 3번 찍혀요. 검색하여 기본 + 2번 더 호출된다는 글을 보았으나, 제게는 해결책이 아니었습니다. ( https://okky.kr/articles/598386 ) 2번 더 호출 될 때에는 request.getParameter null로 넘어옵니다. (acceessToken까지 진행해보다가 롤백했어요 ... 이거부터 해결이 되어야해서 ㅠ.ㅠ) 도와주세요 호돌맨님! (git 주소 가렸어요 ! :D)

  • vue.js
  • spring-boot
  • spring-boot
  • vuejs
  • jpa
  • Spring Security
  • aws
  • spring-security
  • JPA
Rechel 댓글 1 좋아요 1 조회수 2557

감사합니다!!!

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

시간 가는 줄 모르게 마지막 수업까지 마쳤습니다. 열띤 강의로 수고 많으셨습니다. 감사합니다!!!

  • JPA
  • spring
  • spring-boot
  • java
  • jpa
  • aws
  • mysql
Won Baek 댓글 1 좋아요 1 조회수 288

포스트 목록 페이지 수정하기2 중에서 막히는 부분이 있습니다. (미분류)

미해결

Do It! 장고+부트스트랩: 파이썬 웹개발의 정석

안녕하세요 선생님. 강의 열심히 듣고 있습니다^^; 다름이 아니라 아래와 같이 미분류 카운트가 입력되지 않아 오류가 발생하는 부분때문에 계속 찾아보았으나, 답답한 마음에 질문글을 남깁니다. 우선 카테고리 분류에서 프로그래밍, 문화&예술 까진 카운트가 잘 입력됩니다. 그렇지만 "미분류" 부분은 계속 () 으로 표시됩니다. 분명 미분류 부분이 존재함에도 불구하고, 카운트가 되지 않는 건 무엇이 잘못되었는지 도저히 알기가 어렵습니다. 혹시 확인이 가능할까요?^^;; test.py 실행시 오류화면 미분류() 카운트 부분을 주석처리하면 테스트는 잘 완료됩니다. 총 4개의 페이지에 대한 코드를 올려봅니다. test.py base.html views.py post_list.html test.py from 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.py from 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="#!">&larr; Older</a> </li> <li class="page-item disabled"> <a class="page-link" href="#!">Newer &rarr;</a> </li> </ul> {% endblock %}

  • html/css
  • django
  • HTML/CSS
  • docker
  • tdd
  • javascript
  • python
  • bootstrap
  • aws
몽상가 댓글 1 좋아요 0 조회수 468

AWS에서 S3 객체 선택해서 작업하려고 할 때 'ACL을 사용하여...' 이 버튼은 왜 비활성화 돼있나요?

미해결

Amazon S3에서 버킷 생성한 다음에 파일을 업로드하고 객체 선택해서 위에 작업 버튼 눌렀는데 맨 밑에 ' ACL을 사용하여 퍼블릭으로 설정 ' 이 버튼이 비활성화 돼있어서 클릭이 안됩니다. 왜 그런건지 알 수 있을까요? 그리고 버튼을 활성화 시키려면 어떻게 해야 하는 지 알려주세요..!

  • aws
  • s3
  • amazon
  • bucket
chanullity 댓글 1 좋아요 0 조회수 685

[해결완료]nginx root 경로 변경 404 not found

미해결

비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지

경로 설정은 잘 된거같은데 not found가 나오네요 ㅠ nginx restart도 해봤습니다. 문제가 뭘까요? https://github.com/memilmooki/FoodMap

  • html/css
  • rest-api
  • aws
  • HTML/CSS
  • javascript
  • mysql
  • rest-api
  • git
  • github
한현묵 댓글 3 좋아요 0 조회수 10663

스프링 컨테이너 한 클래스 내에서 두개의 @Repository 사용하기

해결됨

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

BookController 내에서 서로 다른 Repository를 사용하려고 한다면 어떻게 사용해야 하나요? 1번인 saveBook에서는 BookMemoryRepository의 saveBook()을 사용하고 2번인 saveBook1 에서는 BookMySqlRepository의 saveBook()을 사용하고 싶다고 하면 사용할 수 있는지? 사용할 수 있다면 어떻게 사용해야 하나요??

  • spring-boot
  • aws
  • spring
  • JPA
  • mysql
  • jpa
  • java
이동진 댓글 1 좋아요 2 조회수 838

`node_modules` 폴더는 마운트 해서 사용하지 않는 이유가 무엇인가요?

해결됨

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

node_modules 폴더는 마운트 해서 사용하지 않는 이유가 무엇인가요? 특별한 이유가 있는지 궁금합니다.

  • travis-ci
  • 데이터 엔지니어링
  • ci/cd
  • cicd
  • github
  • aws
  • 데이터-엔지니어링
  • docker
mkp0131 댓글 1 좋아요 0 조회수 564

CSP 관련 질문입니다

미해결

Jenkins를 이용한 CI/CD Pipeline 구축

안녕하세요 강의 잘 듣고 있습니다. 현재 강의에서 AWS, NCP에 관련한 정보를 알려주신다고 하는데, NHN에서의 사용을 불가한지 궁금합니다~

  • ansible
  • kubernetes
  • jenkins
  • ci/cd
  • cicd
  • NHN
  • sonarqube
  • 클라우드
  • aws
  • ncp
이기혁 댓글 1 좋아요 0 조회수 417

베이스이미지가 `node:10` 이라는 것을 어떻게 검색할 수 있나요?

해결됨

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

베이스이미지가 node:10 이라는 것을 어떻게 검색할 수 있나요? 도커허브에서 검색을 해보았는데 from 에서 어떻게 사용하는지? 또한 버전은 몇부터 몇까지 있는지 명확하게 나온게 없는 것 같습니다. https://hub.docker.com/_/node

  • 데이터 엔지니어링
  • cicd
  • ci/cd
  • travis-ci
  • github
  • 데이터-엔지니어링
  • aws
  • docker
mkp0131 댓글 1 좋아요 0 조회수 520

JdbcTemplate 생성자 만드는데 에러나요. JdbcTemplate 타입의 bean을 찾을 수 없다고 하는데 어떻게 해결해야 하나요?

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

JdbcTemplate 생성자 만드는데 에러나요. JdbcTemplate 타입의 bean을 찾을 수 없다고 하는데 어떻게 해결해야 하나요? 강의를 더 보니까 19강에서 설명해주고 계신 build.gradle 때문인거 같은데요. 저는 해당 파일이 비활성화 되어 있는 것 같아요. 위 캡쳐처럼 코드가 알록달록(주황, 보라, 노랑..) 하지 않고, 모두 회색으로 보이는데 그래서 일까요?

  • spring-boot
  • JPA
  • spring
  • java
  • spring-boot
  • jpa
  • mysql
  • aws
슝슝 댓글 1 좋아요 1 조회수 1720

실전 문제풀이8 - 문제8번

미해결

AWS Certified Solutions Architect - Associate 자격증 준비하기

안녕하세요, 좋은 강의 제공해주셔서 감사드립니다. 실전 문제풀이8의 문제8번에 대한 질문입니다. S3로 데이터를 저장하려면 애플리케이션 코드 변경이 필요하다는 설명이 있었는데, 이 부분에 대해서 조금 더 첨언해주실 수 있을까요? + EFS는 어떤 상황에서도 코드 변경이 필요없는 건가요? 잘 부탁드립니다.

  • 네트워크
  • network
  • aws
ㄱㄱㄱ 댓글 1 좋아요 0 조회수 387

안녕하세요 강사님

미해결

AWS Certified Solutions Architect - Associate 자격증 준비하기

제가 기한이 있다는걸 모르고 구매 후 학교 수업 먼저 우선 하다보니 해당 강의 공부를 좀 늦게 시작하게 되었습니다 해당 강의를 끝까지 다 듣고 자격증 시험도 보고 싶은데 기한이 얼마 안남은 상황이라.. 기한 연장해주실 수 있을까요..? 부탁드립니다

  • 네트워크
  • aws
  • network
MIN 댓글 1 좋아요 0 조회수 303

도커 이미지(컨테이너) 하나에 여러개의 앱을 설치해도 되나요? (mysql, express, react 등)

해결됨

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

도커 이미지(컨테이너) 하나에 여러개의 앱을 설치해도 되나요? 만약, 웹을 만든다고하면 대부분 DB 가 필요할텐데, mysql, express, react, nginx 를 한번에 같은 컨터이너에 띄우는게 좋은가요? 아니면 각각 구분해서 띄우는게 좋은가요?

  • travis-ci
  • 데이터 엔지니어링
  • ci/cd
  • cicd
  • docker
  • 데이터-엔지니어링
  • github
  • aws
mkp0131 댓글 1 좋아요 0 조회수 524

git 내부에서 secret.js 삽입 후 node index.js 에러

미해결

비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현상은 다음과 같이 나오고 있습니다. secret.js에는 다음과 같이 잘 들어가있습니다. 저의 git에도 database라는 js파일이 존재합니다. 왜그럴까요! 에러메세지 첨부합니다. root@ip-172-31-85-206:/home/ubuntu/FoodMap/back# node index.js internal/modules/cjs/loader.js:818 throw err; ^ Error: Cannot find module '../../back/config/database' Require stack: - /home/ubuntu/FoodMap/back/src/controllers/indexController.js - /home/ubuntu/FoodMap/back/src/routes/indexRoute.js - /home/ubuntu/FoodMap/back/config/express.js - /home/ubuntu/FoodMap/back/index.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15) at Function.Module._load (internal/modules/cjs/loader.js:667:27) at Module.require (internal/modules/cjs/loader.js:887:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.<anonymous> (/home/ubuntu/FoodMap/back/src/controllers/indexController.js:1:18) at Module._compile (internal/modules/cjs/loader.js:999:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) at Function.Module._load (internal/modules/cjs/loader.js:708:14) at Module.require (internal/modules/cjs/loader.js:887:19) { code: 'MODULE_NOT_FOUND', requireStack: [ '/home/ubuntu/FoodMap/back/src/controllers/indexController.js', '/home/ubuntu/FoodMap/back/src/routes/indexRoute.js', '/home/ubuntu/FoodMap/back/config/express.js', '/home/ubuntu/FoodMap/back/index.js' ] }

  • html/css
  • git
  • aws
  • rest-api
  • javascript
  • github
  • HTML/CSS
  • mysql
한현묵 댓글 3 좋아요 0 조회수 847

자료받아서 푼다음 실행하면 오류코드가 다 다르게 나옵니다.

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

자료받고 푸니까 실행시킬때마다 오류코드가 다르게 나옵니다. MYSQL 8.0을 원래 있던 거 사용하고 있었는데 MYSQL 문제일수도 있나요?? 오류코드가 똑같으면 알겠는데 이건 뭐 실행시킬때마다 다르게 나와서 당황스럽네여...

  • spring
  • java
  • JPA
  • aws
  • jpa
  • spring-boot
  • mysql
정원준 댓글 2 좋아요 1 조회수 421

빈의 개념

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

클래스를 빈이라 하지 않고, (컨테이너 안에 들어 있는) '클래스의 객체'를 빈이라 하지 않는지요?

  • mysql
  • aws
  • spring-boot
  • JPA
  • spring
  • java
  • spring-boot
Won Baek 댓글 2 좋아요 2 조회수 1023

Promise.all에 대한 질문

미해결

이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)

선생님 안녕하세요. 이번 강의에서 사용된 Promise.all이 뭔지 몰라서 찾아보니 async-await를 사용하면 비동기 동작의 상태가 완료될 때까지 기다린 후 다음 코드를 순차적으로 읽어나가다보니 이렇게 기다리는 시간을 개선하기 위해 Promise들을 병렬로 처리해 주는 것으로 확인됩니다. 근데 이번 강의에서 Promise.all을 빼고 이미지를 업로드해보면 아래의 사진처럼 네트워크의 preview에서 아무 값도 담기지 않게 됩니다. Promise.all이 처리속도를 개선해 주기 위한 기능이라면 Promise.all을 사용하지 않아도 우선 값은 담겨야 하는게 아닐까 하는 생각이 드는데 왜 값이 담기지 않게 되는지 궁금합니다.

  • aws
  • node.js
  • react
  • mongodb
  • nodejs
  • express
  • lambda
khhan1990 댓글 1 좋아요 0 조회수 449

mysql.server start 에러

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

M1 Macbook Pro입니다. brew로 mysql 설치 후 mysql.server start를 하면 아래 메시지가 반겨주네요. ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/Wons-MacBook-Pro.local.pid). 어찌해야 될까요? 설 연휴에 죄송합니다^^

  • spring-boot
  • java
  • mysql
  • aws
  • spring
  • JPA
Won Baek 댓글 3 좋아요 1 조회수 4997

서버리스 람다

미해결

지금 당장 데브옵스 AWS

안녕하세요! 혹시 서버리스 람다 관련해서도 업데이트 해주실 의향 있으실까요?

  • aws
jeus0630 댓글 1 좋아요 0 조회수 289

네이버 항공권 관련 제가 작성한 코드 조심스럽게 공유해드립니다.ㅜ

미해결

파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)

안녕하세요 먼저 좋은 강의 해주시는 나도코딩님께 감사드립니다. 이전에 나름 정성들여 글을 작성했는데, 확인이 안돼서 다시 작성해봅니다. 제가 강의를 보고있는 2023년 1월 19일과 강의날인 2020년 8월과 네이버 항공권 인터페이스가 많이 상이하고, 셀레니움과 파이썬 버전이 달라 저의경우 아래와 같이 코드를 작성했습니다. 다른분들께 도움이 되었으면 좋겠습니다. 현재 저의 환경의 경우 python버전 3.10.7 버전이고 selenium또한 강의때 사용하신것 보다 더 높은 것으로 보입니다. 현재 제 경우와 강의내용과 상이한 부분은 아래와 같습니다. 네이버 항공권 진입시, "지금 바로 혜택 확인하기" 광고 팝업창 발생, 해당부분 get_attribute메소드를 사용해 title을 비교해, 팝업이 있다면 팝업을 삭제하는 XPATH를 확인해 해당 엘리먼트를 클릭하도록 구현 browser.find_element_by_class_name과 같이 find_element_by_~~ 메소드 사용불가 => 현재 제가 사용중인 셀레니움 버전이 상위 버전으로 보이는데, 이는 3 line과 같이 import By로 쉽게 수정 가능 find_elements_link_text 메소드 사용 불가 => 2020년대비 2023년 현재 네이버 항공권 웹페이지 인터페이스의 변화때문인지 "가는 날" 및 날짜 선택을 위해 해당 메소드 사용시 빈리스트만 반환 "가는 날"은 XPATH로 엘리먼트를 얻어와 클릭하도록 구현 원하는 날짜의 경우 class이름을 확인해 모든 날짜정보를 갖고와 원하는 날짜정보만 사용하도록 구현 (compute_date 함수 참고 부탁 드립니다.) 추가적으로, 이 경우에 1년치 달력정보를 모두 읽어와 속도가 매우 느린데 더 좋은 방법을 알고계신분은 공유 부탁드립니다. ( _ _ ) compute_date(dates, 30)[1].click() 코드를 이렇게 수정해 오는날을 2월 30일을 선택하려 했으나 3월 30일을 선택해, 코드 오류인줄 알고 디버깅해보니 2월달은 30일이 없었습니다...ㅎ 정상동작 중 입니다. 저와같이 초반에 고생하시는 분들께 조금이나마 도움이 되었으면 좋겠습니다. 감사합니다. import time from selenium import webdriver from selenium.webdriver.common.by import By URL = "https://flight.naver.com/" def compute_date(dates, target) -> list: print("compute entire date information from current month to limit") return [date for date in dates if date.text == str(target)] browser = webdriver.Chrome() # browser.maximize_window() browser.get(URL) time.sleep(1) # remove AD popup find = browser.find_elements(By.CLASS_NAME, "anchor") for f in find: if f.get_attribute("title") == "지금 바로 혜택 확인하기": browser.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[9]/div/div[2]/button[1]').click() print("remove pop up") break # push 가는 날 button also delay 1 sec is necessary, if don't use this, can not read date information. browser.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[2]/button[1]').click() time.sleep(1) # read date information and push 25 day dates = browser.find_elements(By.CLASS_NAME, "sc-evZas dDVwEk num".replace(" ", ".")) compute_date(dates, 25)[0].click() # read date information and push 30 day dates = browser.find_elements(By.CLASS_NAME, "sc-evZas dDVwEk num".replace(" ", ".")) compute_date(dates, 30)[0].click() while True: pass

  • selenium
  • python
  • 웹-크롤링
  • 웹 스크래핑
박재현 댓글 2 좋아요 7 조회수 2584

인기 태그

인프런 TOP Writers

주간 인기글