묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
서비스 로직에서 saveAndFlush 질문입니다.
안녕하세요. 먼저 알차고 좋은 강의 만들어 주셔서 감사하단 말씀을 드리고 싶습니다 ㅎㅎ 강의를 보다보니 서비스 로직에서 saveAndFlush 를 해주고 있는데 @Transactional 어노테이션이 있어서 디비에 반영이 잘 될거 같은데 saveAndFlush 를 해주는 이유가 따로 있을까요?그리고 저는 보통 save 를 사용했는데 saveAndFlush 를 사용하는 다른 특별한 이유가 있는지 궁금합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
분산락 관련 질문입니다.
안녕하세요 좋은 강의 감사드립니다.이전까지 알아보았던 락들은 분산락이 아닌 것인가요?만약 아닌 것이라면 다중 서버 환경에서 동시성 문제를 해결하기 위해서는 위의 방법들이 아닌 분산락을 사용하여야 하는 것인지 궁금합니다. 추가로 동시성 관련 질문이 하나 있습니다.다중 서버 환경에서 게시판 등에서 조회수 기능을 동시성 문제 없이 해결하고 싶으며, 다음과 같이 구현하고자 합니다.(조회수라 어느정도 누락되어도 상관 없다고 하실 수 있겠지만, 목표는 하나도 누락되지 않게 하는 것입니다!)조회 요청이 들어오면 레디스에 조회수 증가분을 올린 이후, 특정 시간마다 배치처리를 통해 반영하고자 합니다.이때 다음 두 의문점이 있습니다.먼저 다중 서버 환경에서 레디스 증가분을 올리는 경우, 이 경우에도 동시성 문제가 발생할 수 있을 것 같습니다. 이를 해결하기 위해서는 이곳에도 분산락을 걸거나 increment()를 사용하여 동기적으로 처리해야 할 거 같은데 저의 생각이 맞는 것인지, 맞다면 다른 방법은 없는지 궁금합니다.두번째는 레디스 조회수 증가분을 배치처리를 통해 반영시키는 경우, 해당 작업 사이에 조회수 증가가 되어버리면 해당 증가분은 누락될 것 같습니다. 이를 해결하기 위해서는 배치처리를 할 때 레디스에 Lock을 걸어야 할 것 같습니다. 그런데 그렇게 된다면, 배치처리가 진행되는 그 순간동안은 레디스가 블로킹되어 있기에 게시글 조회가 이루어지지 않을 것 같습니다. 이정도는 감수하고 사용하거나, 혹은 카프카 등을 활용하여 이벤트로 처리하는 방법도 있을 것 같은데, 이러한 방법이 모두 사용 가능한 것인지, 더 나은 방법은 없는지 궁금합니다. 너무 많은 질문을 하는 것 같아 죄송합니다. 좋은 강의 정말 감사합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
Propagation.REQUIRES_NEW 를 사용하는 이유가 무엇인가요?
안녕하세요! 선생님.다른 락에서는 트랜잭션에 Propagation.REQUIRES_NEW 를 사용하지 않았는데 namedLock 에서는 왜 사용하나요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
네임드락을 활용할 때 데이터소스를 분리해야하는 이유가 궁금해요!
안녕하세요 최상용 엔지니어님~~ 강의 너무 잘 보고 있어요! 다음강의도 기대기대됩니당 답변 부탁드립니다~~~
-
해결됨파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
Scraping code 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ---------- ---------- # 감사의 인사 안녕하세요! 먼저 좋은 강의 만들어주셔서 감사합니다. 파이썬 문법을 기본적인 것을 떼고 프레임워크와 함께 무언가 만들어볼라고 하던 찰나 FastAPI와 함께 크롤링까지 학습할 수 있어서 좋은 강의인 것 같습니다 : ) 스크랩핑의 경우, json.load 관련하여 학습하다보니 serialize 개념에서 시작하여 json.dump와 json.loads 등등 과 parser 개념에 대해 학습할 수 있어서 너무 좋았습니다. 이것저것 학습하다보니 하루가 쑤욱 갔네요... ---------- ---------- # 질문 1 먼저 구글링을 하고 나서 질문드립니다. 1) 아래 코드에서 response 앞에 await이 올 수 있는 이유 async def fetch(session, url): print(f"{os.getpid()} | {threading.get_ident()} thread | url: {url}") async with session.get(url) as response: return await response.text 공식 문서에 따르면 await 뒤에는 코루틴, 태스크 또는 퓨처가 와야한다고 하는데, 위 코드에서 await이 올 수 있던 것은 여기서 response가 async with session.get(url)의 alias 여서 가능한건가요??? 만약 그렇다면 with문은 context manager인 걸로 알고 있습니다. 자원을 할당해주고 다 사용하면 반환하는 역할인 것으로요. 그러면 이 with문이 어째서 코루틴에 속하는지 잘 모르겠습니다. ------- # 질문 2 2) html.parser 이 질문은 제가 이해한 게 맞는 건지 여쭤보는 질문입니다. beautifulsoup(html, "html.parser") code 부분에서 html을 구문분석할 parser를 "html.parser"로 정한다는 의미인가요? 그리고, HTML parser란 HTML 코드를 읽고 취해서 DOM tree 구조를 생성하는 프로그램이라 이해하면 되나요?? 이 부분은 구글링하여 학습했으나, 강사님의 내포하는 지식과 일치하는지 확인받을려는 질문입니다. ------- # 질문 3 3) await을 넣는 위치 코루틴이란 진입점과 탈출점이 여러 개인 routine인 것으로 이해했고, 그 포인트들이 await과 return으로 만들어진다고 강의를 통해 이해했습니다. 그런데, 왜 이 위치에 await을 썼는가? 라는 의문에는 쉽게 답이 나오지 않는 것 같습니다. from bs4 import BeautifulSoup import asyncio import aiohttp async def fetch(session, url): async with session.get(url) as response: html = await response.text soup = BeautifulSoup(html, 'html.parser') cont_thumb = soup.find("div", "cont_thumb") for cont in cont_thumb: print(cont.find("p", "text_thumb")) 위 코드에서 await은 response.text 앞에 있는데요. await의 위치는 작성자가 임의로 위치할 수 있는 건인지, 아니면 별도로 제가 모르는 내용이 있는 건지 알고 싶습니다. ------- #질문 4 4) config.py의 get_secret() 질문 get_secret function 매개변수 3개를 key, default_value, json_path 를 입력하셨습니다. json_path의 경우, BASE_DIR를 전역변수로 입력하셨기 때문에 함수 인자로 입력하지 않아도 인식된다고 이해하면 될까요? 또한, EnvironmenError의 내용을 보면 이 Error 설명을 보면 Base class for I/O related Errors 나와있는데, 왜 I/O 관련 에러인지 모르겠습니다. 이 Error는 key에 대한 대체값인 default_value가 없는 경우 발생되는 걸로 이해했습니다. CPU가 이 값을 읽는건데 I/O 인가요? 그리고, get_secret() 같은 함수를 작성하실 때 어떠한 흐름으로 작성하시는지 궁금합니다. 작성을 하면서 수정하시는 건지, 아니면 처음부터 이 function은 이 역할을 하고, 이 역할을 위해서 별도의 function을 만들고 라는 방식으로 하시는 건지 입문자로서 궁금합니다. ------- # 질문 5 5) 마지막 질문입니다. 이건 학습 관련 질문입니다. 이번 강의를 마치고, 운영체제와 네트워크 공부를 다시 복습하고, 자료구조와 알고리즘 공부를 할려고 하는데, 프레임워크에 대해서 학습하고 싶습니다. FastAPI를 깊이 공부할지, 아니면 Django를 학습할지 고민입니다. 인프런의 Django 강의를 결제하여 듣고 있으나, 너무 꼼꼼하셔서 그런지 강의가 heavy하네요..ㅠㅠ 어떻게 학습하시는 걸 추천하시나요??? -------------- -------------- 질문 읽어주셔서 감사합니다.
-
미해결운영체제 공룡책 강의
Mac OS에서 Docker 이용하여 Ubuntu 20.04 환경설정 방법 공유
1. 도커를 이용하여 Ubuntu 설치 // 도커는 설치되었다고 가정함 // ubuntu 이미지 다운로드 및 컨테이너 실행 $ docker pull ubuntu:20.04 $ docker run -it --name myUbuntu ubuntu:20.04 // 도커 컨테이너 내로 들어옴 $ apt-get update $ apt-get upgrade -y // 교수님 업글 안하긴 하심 $ apt-get install build-essential gdb 2. 편한 개발을 위해 VS Code에서 Container에 연결함 - VS Code 에서 Remote - Container 플러그인 설치 - 설치 후 좌측 하단에 >< 아이콘의 초록색 버튼 클릭 - 메뉴 클릭 Attach to Running Container… 3. 테스트 Vs Code에서 텍스트 파일 생성하고 컨테이너 내에서 확인해보면 파일 생성되어 있음
-
해결됨운영체제 공룡책 강의
안녕하세요 교수님 실습 해봤는데 LINE J가 실행이 됩니다
안녕하세요, 실습 예제 함께 해봤는데 교수님과 다른 결과가 나오는데 혹시 어떻게 이해해야 할까요? 현재 환경은 mac에서 도커를 사용하여 linux 환경에서 c 프로그래밍 하고 있는 상황입니다.
-
미해결운영체제 공룡책 강의
18분 10초경 평균 웨이팅타임에 대해 질문드립니다!
SJF 스케줄링 평균 대기시간에 대해서 구하고 있는데요, 프린트에서는 7.75로 기재되어 있는데 제가 구한 값과 조금 달라서 질문드립니다 ㅠ 0 + (8-1) + (12-2) + (21-3) = 35 35 / 4 = 8.75 로 계산이 나오는데, 어떤 점이 잘못된건지 알려주실 수 있을까요?
-
미해결스프링 핵심 원리 - 고급편
이런 경우에 @RequestScope를 사용하면 어떨까요?
안녕하세요. 초보개발자 명아주입니다! 계속 싱글톤을 강조하면서 말씀해주셔서 이런 문제가 예상되었고 저는 해결책으로 @RequestScope를 이용해서 LogTrace Bean 자체를 request 마다 생성하도록 하는 방법을 생각했었습니다. 실제 테스트해본 결과, 의도한 대로 동작하는 것도 확인하긴 했습니다. 아직 경험이 부족하여 어떤 장단점이 있을지 모르겠어서 이렇게 질문작성하고 마저 다음 강의를 들으러 가겠습니다! 다음 강의에서 그 답이 나올지도 모르겠다는 생각이 들긴 하네요. 감사합니다!
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
비동기성과 동시성 관계
비동기성은 순차적으로 실행되지 않는 것을 의미하고, 동시성은 switching해가며 한 번에 여러 작업을 하는 것으로 이해했습니다. 따라서 비동기성 예제로 보여주신 코루틴의 경우는 싱글 스레드에서 동시성을 구현한 것이라고 이해했습니다. 제가 궁금한 것은 비동기성은 항상 동시성인지, 그리고 동시성이면 항상 비동기성인지 입니다. (필요충분 관계인 것인지) (동시성이면서 동기성일 수도 있는건가요?) 만약 비동기성<->동시성 이 아니라면(필요충분 관계가 아니라면) 두 개념의 핵심적인 차이가 궁금합니다.
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
amend commit 질문
amend commit 실행하고 insert로 바꿨는데 수정모드 끄는건 어떻게하는건가요 나와지질않네요 insert랑 replace 상태여서 :wq를 입력못하고있습니다 ㅠ insert에서 못벗어나서 종료하고 reset하고 다시 했는데 아예 amend commit이 안되네요.. E325: ATTENTION Found a swap file by the name "C:/Users/user/PycharmProjects/git-tes/.git/.COMMIT_EDITMSG.swp" owned by: user dated: Thu Dec 30 09:41:32 2021 file name: ~user/PycharmProjects/git-tes/.git/COMMIT_EDITMSG modified: YES user name: user host name: DESKTOP-C2BR6PG process ID: 1916 While opening file "C:/Users/user/PycharmProjects/git-tes/.git/COMMIT_EDITMSG" dated: Thu Dec 30 10:00:55 2021 -- More --
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
revert 오류
이런 상태에서 git revert하면 아래처럼 오류가뜹니다. $ git revert 7a6a52c error: Your local changes to the following files would be overwritten by merge: a Please commit your changes or stash them before you merge. Aborting fatal: revert failed a가 merge가 되있어서 revert가 안된다는뜻인가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 동시성 문제
안녕하세요. 강의를 보다가 질문 드립니다. 회원가입 중복처리 부분에서, 김영한님 말대로 회원가입하는 사람수가 매우 많으면 validateDuplicateMember만으론 부족하여, 결국 동시성문제가 발생 할 수밖에 없습니다. 그래서 name에 대하여 unique제약조건이 필수인데요. 그런데 생각해보면 그럴거면 굳이 validateDuplicateMember를 할 필요없이 그냥 unique제약조건을 걸어놓기만 해도 충분합니다. 제가 보기에는 에러처리를 괜히 두번해주는 느낌을 받았거든요. 여기서 이렇게 해주는 이유는 1. 단순 예시를 보여주기 위함. 2. 도메인에 unique제약 조건을 거는 것만으론 테스트를 통과하지 못함(@Commit을 추가하지 않는 이상). 이부분이 테스트 할때 좀 거슬리긴 하더라구요. 3. 좀 더 빠른 반응성? 4. db쪽 예외는 나중에 앞단에서 처리해주기 까다로움. 5. 그 외 다른 이유가 있음. 이정도 생각해보았는데요. 어떤 이유에서 인지 알려주시면 감사하겠습니다.
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
8분 19초에 gst는 왜치는건가요?
gst 치는이유 알고싶습니다.
-
미해결모든 개발자의 실무를 위한 올인원 기본기 클래스
git init 오류
0 git init 부터 막혔는데 해결법 계속 찾고 있는데 뭐가 문제일까요..? git : 'git' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + git init + ~~~
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Model을 FrontController의 멤버변수로 생성하지 않는이유
Map객체인 Model을 FrontController의 멤버변수로 선언하지 않는 이유가 궁금합니다. private Map<String, Object> model = new HashMap<>(); 혹시 서블릿 컨테이너에 등록된 서블릿은 싱글톤으로 관리가 되기 때문에 멤버변수에서 생성된 model에는 동시성문제가 있어서 인가요? 싱글톤으로 제공된 서블릿을 클라이언트에게 전달한다면 그 싱글톤인 서블릿의 참조값을 전달하고 참조안 멤버변수 Model객체에 접근해서 값을 변경하면 큰 오류를 발생하기 때문인가요 ?? ps -- 혹시 텍스트 에디터 내부에 미리 템플릿으로 글작성방법 적어두신거 궁금합니다. 글쓰기 요청시 자바스크립트로 dom에 접근해서 상수로 적어논 글을 넣고 보여주시는 건가요 ??
-
해결됨파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
안녕하세요 ~ 파이썬 코루틴 활용 강의에 대해 질문이 있습니다.
안녕하세요. 강의 잘보고 있습니다. request 모듈을 사용할때 session 을 열어 두고 사용하셨는데 세션을 연결하지 않고 사용할때와 세션을 연결하고 사용할때 차이점을 알수 있을까요 ?
-
해결됨파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
uvicorn reload 설정 관련
안녕하세요! 이전에 nest.js 강의를 듣고, 너무나 큰 만족감과 함께 많은 도움을 얻었던 기억이 있어서 fast api 강의도 출시하자마자 구입하여 공부중인 회원입니다! 이번 질문을 통해 문의드리고자 하는 내용은 uvicorn의 reload 설정 문제입니다. 현재 클라이언트로부터 파일(.zip)을 업로드 받아서, 압축 해제 후 subproccess로 실행시키는 API를 만들어서 연습해보고 있습니다. 참고로 압축 결과물은 파이썬 파일(.py) 입니다. 그런데, 압축해제 할 때마다 uvicorn이 변화를 감지하여 서버를 재실행시킵니다. 물론 reload 기능을 OFF하면, 문제가 없습니다. 하지만 uvicorn.run 옵션 중에 reload_excludes가 있어서 사용해보려고 했으나 원하는대로 동작하지 않네요 ㅠㅠ (참고: Settings - Uvicorn) 프로젝트 루트 경로에 있는 server.py 파일은 아래와 같이 작성하였고, 파일 업로드를 받아 압축해제하는 경로는 다음과 같습니다. {{project root}}/app/files import uvicorn if __name__ == "__main__": uvicorn.run( "app.main:app", host="localhost", port=8000, reload=True, reload_excludes=["app/files/"], ) 위와 같이 설정하여도 uvicorn은 app/files 경로내의 변화를 감지합니다..ㅠ_ㅜ uvicorn의 reload 제외 설정을 어떻게 해야할까요! 답변 부탁드리겠습니다..!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
4분 20초에 동시성에 문제가 있을수 있다고 말씀해주셨는데요.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오[질문 내용]4분 20초에 실무에서는 동시성을 고려해야 할수 있다고 말씀해주셨는데요. 저코드에서 동시성에 관련된 문제가 어떻게 발생이 되는지 알려주시면 감사하게습니다.
-
미해결운영체제 공룡책 강의
피터슨 알고리즘쪽질문드립니다 .
강의 너무너무 잘 듣고있습니다 감사합니다 저 강의를 듣다가 코드를 보는데 while문에서 조건이있고 {}가 없는데 따로 실행은 없는건가요 무조건 일단 깃발교체만 하고 sum++로 가는건가요 >? =============================================cpp 에서는 thread가 있길래 이렇게 구현했습니다 #include <iostream> #include <thread> #define true 1 #define false 0 using namespace std; int sum; bool flag[2]; int turn; void producer() { int k; for (int i = 0; i < 10000; i++) { //0번이 producer, 1번이 consumer라고 생각 /*endtry section*/ flag[0] = true; turn = 1; while (turn == 1 && flag[1]) ; sum++; /*exit section*/ flag[0] = false; } } void consumer() { int k; for (int i = 0; i < 10000; i++) { //0번이 producer, 1번이 consumer라고 생각 flag[1] = true; turn = 0; while (turn == 1 && flag[1]) ; sum--; /*exit section*/ flag[1] = false; } } int main() { sum = 0; thread t1, t2; t1 = thread(consumer); t2 = thread(producer); cout << "sum : " << sum << endl; t1.join(); t2.join(); return 0; }