묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
ServiceException: Unable to create requested service 뜨는 분들 보세요
ServiceException: Unable to create requested serviceHibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set프로젝트 시작했는데 이런 에러 뜨시는 분들 해결책 공유 드립니다.우선 첫번째로 Mysql 서버가 켜져있는지를 확인해봅니다. Workbench를 켜서 Mysql connect를 해주세요.그래도 안 된다면, 두번째로 application.yaml에 아래처럼 코드를 추가해줍니다.이처럼 database:mysql을 추가해줍니다.이렇게 하면 대부분 해결되실겁니다. ps. 추가적으로 이후에 unknown database라는 주의 문구가 뜨는 분들은 해당 이름으로 database를 아직 만들지 않아서 그렇습니다. url에 들어가는 이름으로 mysql workbench에서 database를 만들어서 진행하세요.
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
경쟁상태,교착상태, 메모리영역
안녕하세요 선생님 !데드락 강의 내용 중 질문이 있어 글 남깁니다.[1] 경쟁상태, 교착상태 개념저는 mutex나 semaphore가 경쟁상태를 예방하기 위해 사용하는 개념으로 알고 있습니다. 그리고 mutex나 semaphore의 사용으로 인해 발생할 수 있는 문제가 교착상태라고 알고 있습니다. 그런데 강의에선 mutex나 semaphore가 경쟁상태나 교착상태를 예방하기 위해 사용된다고 해서잠시 개념의 혼동이 오고 있습니다.어떻게 mutex나 semaphore가 교착상태의 원인이 아니라 교착상태를 해결할 수 있는 개념인지 설명 부탁드립니다.[2] 메모리영역 질문class FakeDataStore: def __init__(self): self.value = 0 에서 저는 value는 스택영역에 쌓이고 0 이라는 숫자 객체는 힙영역에 쌓이는 걸로 이해하고 있는데 강의에선 0이라는 객체가 데이터영역에 올라간다고 하셔서 제가 잘못 알고 있는것인지 문의드립니다.
-
해결됨파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
ProcessPoolExecutor 사용 시 pid 증가
안녕하세요 강사님,ProcessPoolExecutor를 이용해서 아래와 같이 코드를 작성했는데요, return된 pid를 출력해보면 계속 증가하는 모습을 보이는데, python에서 할당받은 pid range 내에서만 circular로 반복되는 걸까요??? 이렇게 계속 증가하는게 별다른 문제는 되지 않을까요?try: while True: with ProcessPoolExecutor(max_workers=6) as ex: processes = {} # submit tasks to the pool processes.update({ex.submit(self.hello, time)}) for future in as_completed(processes, timeout=3): # check for a failure if future.exception(): # report progress LOG.error("Failed get %s", processes[future]) data = future.result() module = processes[future] pid = data
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
ProcessPoolExecutor 사용 시 pid 증가
안녕하세요 강사님,ProcessPoolExecutor를 이용해서 아래와 같이 코드를 작성했는데요, return된 pid를 출력해보면 계속 증가하는 모습을 보이는데, python에서 할당받은 pid range 내에서만 반복되는 걸까요??? 이렇게 계속 증가하는게 별다른 문제는 되지 않을까요?try: while True: with ProcessPoolExecutor(max_workers=6) as ex: processes = {} # submit tasks to the pool processes.update({ex.submit(self.hello, time)}) for future in as_completed(processes, timeout=3): # check for a failure if future.exception(): # report progress LOG.error("Failed get %s", processes[future]) data = future.result() module = processes[future] pid = data
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
multiprocess 환경에서 특정 Process에 문제가 있거나 죽었을때 처리 방법
여러개의 process를 ProcessPoolExecutor 로 돌리거나 multiprocessing.Process 로 만들었을때, 특정 Process에서 문제가 발생하여 죽거나 zombie 가 되었을 때 보통 어떻게 처리하시나요?> 예를 들면 여러 process를 이용해서 컴퓨터를 monitoring 하는 프로그램을 짠다고 했을 때, 특정 monitoring process중 하나가 문제가 생겼을 때 해당 process를 살리거나 다시 실행하거나?여러 process들을 사용하고 있을 때 해당 process들이 잘 돌고 있는지, Queue와 Process를 모니터링할때는 어떤 방법을 사용하시나요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
무한루프
정상적으로 처리되면 무한루프에서 break가 되지만정상적으로 처리되지 않았을 때는 어떤가요?
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
갱신 손실 문제가 일어날 것 같은 로직에는 무조건 동시성 제어를 해줘야할까요?
안녕하세요 선생님, 먼저 좋은 강의 감사드립니다.강의를 들으며 갱신 손실 문제를 해결하기 위한 여러 방법들을 학습하며 문득 이런 고민이 생겼습니다. 갱신 손실 문제가 일어날 것 같은 로직(예: 재고 감소)을 구현할 때, 구현 단계에서부터 동시성 제어를 처음부터 고려해야하는가? 고려한다고 했을 때, 트래픽이 얼마나 될지 모르는 상황에서 어떤 방법을 사용할 것인가?이에 대한 제 생각은 이렇습니다. 처음 로직을 작성할 때부터, 갱신 손실 문제가 운영 중에 발생한다면 큰 문제가 될 수 있으므로 반드시 구현 단계에서 부터 고려한다. 갱신 손실 문제가 아예 일어나지 않는 트래픽이더라도 어차피 성능상 손해보는 것은 없을 것이다.트래픽이 얼마가 될지 모르므로 우선 Optimistic Lock을 우선적으로 사용하고, 성능이 안 나오면 Pessimistic Lock 을 사용한다.저는 이렇게 생각했는데, 선생님께서는 위와 같은 상황이라면 어떻게 구현하실 건지 궁금합니다. 또 일단 갱신 손실 문제를 핸들링 하는 상황이라면 Redis나 Named Lock이 아닌 Optimistic Lock, Pessimistic Lock 을 가장 먼저 고려하실 건지도 궁금합니다.읽어주셔서 감사합니다. :)
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
redisson subscribe
그냥 궁금해서 redis-cli에서 "subscribe 1" 을 하고 Redisson 실습 시 락에 대한 메시지가 날아오는 지 궁금해서 해봤더니 아무 내용도 안 오네여? 아예 상관 없는 내용인가여 ㅋㅋㅋ..
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
ThreadPoolExecutor 에서 max_workers 질문입니다.
max_workers 옵션을 사용할때 작업의 개수가 넘어가면 직접설정이 유리하다고 하셨는데요..!작업의 개수가 넘어간다는 말의 의미가 뭔지 이해가 가지 않습니다 ㅠㅠ 혹시 좀 더 자세하게 설명해주실 수 있을까요?
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
concurrency_1 강의 코드 결과 중 이해가 안가는 부분이 있습니다
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() start() } func simpleWork() { print("doing simple work") } func someWork() async -> Int { try? await Task.sleep(nanoseconds: 1000 1000 1000 * 3) return 10 } func start() { Task { print("start !") let num = await someWork() print(num) print("finish !") } simpleWork() } }concurrency_1 강의를 듣고 위의 코드를 playground가 아닌 project파일을 만들어서 실행시켜보았습니다.저는 아래와 같은 결과가 나올거라 예상했었습니다.start ! doing simple work 10 finish그런데 빌드를 시켜서 터미널에 뜨는 것을 보니 아래와 같은 결과가 나옵니다.doing simple work start ! 10 finish !Task 자체를 통째로 아예 비동기 작업으로 인식해서 이런 결과가 나오는 것일까요??결과가 이렇게 나오는 이유를 잘 모르겠습니다🥲
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
강의 수강관련 질문드립니다!
안녕하세요 강의(재고시스템&선착순) 를 수강할때 도커를 빼고 진행을 하여도 지장이없을까요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
@Transactional, synchronized를 동시에 사용하면 재고수량 감소 로직 동시성이 궁금합니다ㅠㅠ
StockService.decrease 메소드의 경우synchronized 가 붙어있어서 하나의 쓰레드만 들어갈 수 있도록 도와주지만,@Transactional 이 붙어있기에 froxy 객체로 만들어서 동시성이 안됨을 아래 테스트코드로 확인하였습니다. 하지만 똑같은 StockService.decrease를 사용하여CompletableFuture.runAsync를 사용하면 동시성이 보장이됩니다..똑같이 @Transactional을 사용한 decrease메소드라서 froxy객체로 만들어져서 동시성이 보장 안될것이라 예측했는데 왜 CompletableFuture.runAsync는 동시성 보장이 될까 궁금합니다ㅠㅠ
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
Lettuce를 활용한 방법에서 Stock 엔티티에 @Version가 없어도 되죠?
DB의 Named Lock을 활용하기 위한 방법에서 쓰였던 것인데 지워도 되는 거죠?
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
self.navigationBar.topItem?.leftBarButtonItem을 해도 button이 보이지 않습니다
강사님의 코드와 똑같이 코드를 구성했는데 버튼이 보이지 않습니다addsubView방식은 보이는 상황입니다 ㅠㅠ혹시 바뀐부분이있는걸까요
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
Redisson Client Lock
public void buy(String ticketName) throws InterruptedException { RLock lock = redissonClient.getLock(ticketName); try { boolean available = lock.tryLock(5, 1, TimeUnit.SECONDS); if (!available) { return; } ticketServiceWithRedisRedissonClientLock.buy(ticketName); } finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); } } }이 구조에서 tryLock에 대해서 5초동안 Lock 획득을 위해서 대기하고 Lock을 1초동안 점유하고 release하는 형식으로 알고있는데 만약에 쓰레드가 5초 동안 대기를 하더라도 최종적으로 Lock을 얻지 못한다면 return이 됨으로써 buy로직으로 못들어가는거 아닌가요?? 만약에 반드시 Lock을 얻고 buy로 들어가야만 하는 경우 Lock 재획득에 대한 로직을 따로 구현해야 하는건가요. 아니면 tryLock의 재시도에 대해서 제가 모르는 부분이 있는건가요?? public void buy(String ticketName) throws InterruptedException { final RLock lock = redissonClient.getLock(ticketName); final int maxRetryCount = 10; final int retryIntervalMillis = 1000; try { int retryCount = 0; boolean lockAcquired = lock.tryLock(5, 1, TimeUnit.SECONDS); while (!lockAcquired && retryCount < maxRetryCount) { log.info( "--> Thread [{}] Redis Distributed Lock (Redisson Client) 획득 대기", Thread.currentThread().getName() ); Thread.sleep(retryIntervalMillis); lockAcquired = lock.tryLock(5, 1, TimeUnit.SECONDS); retryCount++; } if (!lockAcquired) { log.info( "--> Thread [{}] Redis Distributed Lock (Redisson Client) 획득 실패", Thread.currentThread().getName() ); return; } ticketServiceWithRedisRedissonClientLock.buy(ticketName); } finally { if (lock.isLocked() && lock.isHeldByCurrentThread()) { lock.unlock(); } } }이런 방식으로 최대 재시도 횟수와 재시도 간 간격을 통해서 waitTime동안 Lock을 못얻을 경우 Lock자체를 다시 얻는 방식을 구현해보았고 waitTime=1, unit=ms로 변경하고 테스트했을 경우 정상적으로 retry가 됨을 확인했습니다. 이런 구조가 최선일까요??아니면 더 나은 방식이 있을까요?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
모듈 인식
윈도우10 입니다 강의 영상대로 따라하고 있었는데 flask 실행하는 부분 python hello.py 실행 xpython3 hello.py 실행orequests 실행하는 부분python hello.py 실행opython3 hello.py 실행 x같은 가상환경인데 flask 실행할때는 python에 3을 붙여야 실행하고 requests에서는 python에 3을 붙이지 않아야 실행을 하는데 같은 py파일에 코드만 바꿔서 했는데 이러는데 왜 이러는건가요...?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
cput 바운드 01-1 질문입니다
나오는 값이 너무 많아서 정수형 4300제한이라고 나옵니다 그래서 입력값에 50이 아닌 낮은 숫자를 넣으면 실행은 되는데요 정수형 제한을 풀려면 sys를 써야 하는 걸로 아는데 그 부분은 코드에 없어서 그러는데 혹시 어떻게 하셨나요?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
await 위치 질문
안녕하세요, await 위치를 완전히 이해하지 못한 것 같아 질문드립니다.제가 이해한 await란 비동기 함수 내에서 특정 객체가 끝날때까지 기다려서 결과를 반환하기 위해 사용하는 것인데요. 이를 간단하게 말하자면 비동기 함수 내에서 동시성을 가지고 처리해야 할 부분(= 탈출해야할 부분) 앞에 기다리라는 의미로 await를 쓴다고 이해한 것이 맞을까요?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
실전 프로젝트 최종 디렉토리 문의
안녕하세요,마지막 실전 프로젝트에서 디렉토리가 많은데, 어떤 것이 최종일까요? 9번이 강의 내용으로는 최종인 것 같은데 디렉토리 구조가 좀 다른 것 같아서요.
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
1-3강의 내용중 질문있습니다.
전반적인 내용은 이해를 했는데 포매팅에 대한 이해도가 아직 부족한것 같습니다.. 강의 코드 중 format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")이런 코드가 있었는데요, 왜 date포맷 형식이 출력될때는 먼저 나오나요? asctime이라는 저 포맷 형태가 자동으로 datefmt를 인식해서 그런건가요?