묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
CountDownLatch
다른 스레드에서 작업이 끝날 때 까지 기다리는 CountDownLatch를 이용해야한다고 하셨는데 왜 Race Condition이 발생하는지 궁금합니다. 결국은 CountDownLatch를 안써도 되는 것이 아닌가요?
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
분산락이라고 할 때 분산이
어플리케이션 서버가 여러개 라는 뜻일까요?DB 서버가 여러개라는 뜻일까요? 멀티 스레드 테스트를 통해여러 애플리케이션 서버가 동시에 요청이 들어오는 경우는비관,낙관적 락으로도 해결이 가능한걸 확인했고DB가 분산서버일때 분산락을 이용해야한다고 이해했는데 맞을까요? namelock도 결국엔 문자열에 건다해도 그 문자열 == 특정 데이터 인데특정 데이터에 락== 비관적 락이랑 다를게 없는데 정확한 차이를 모르겠습니다.문자열로 하면 뭐가 다른건지...
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
현재 제가 겪고 있는 상황인데 조언 부탁드립니다.
SpringBoot 에서 멀티 스레드로 크롤러가 돌아가는 프로젝트 입니다. junit 테스트 코드를 통해 크롤러가 10개 정도 게시판 페이지를 정상적으로 가져오는지 확인하려고 하는데요. 현재 작성된 테스트 케이스는 아래와 같습니다.@Testvoid crawlerTest() {// 크롤링 시작crawlerRun(); while(스레드풀 작업 종료됐나??) {// 작업이 안끝났으면Thread.sleep(5000);}} while 문이 있으면 정상적으로 10개의 게시판 페이지를 크롤링한 이후 DB에 적재됩니다. 다만 강의를 보면서 while 문이 없어도 되지 않을까 생각해서 삭제하거나 주석처리하면 올바르게 동작하지 않습니다. [while 문 제거 후]디버깅을 통해 값이 제대로 들어오는지 확인하면서테스트 케이스를 돌리면 4~5 개정도만 DB 에 크롤링한 데이터가 저장되고 갑자기 오류도 없이 테스트가 종료됩니다. 디버깅없이 그냥 실행시키면 6개 정도 DB에 저장되고 테스트가 종료됩니다. crawlerTest() 라는 테스트 코드가 Main Thread 라고 쳤을 때 다른 Thread 들은 정상적으로 동작 중이어야 하지 않나요..? 아니면 Spring 환경이라서 이런 문제가 발생하는 것인지junit 테스트 코드라서 이런 문제가 발생하는건지 궁금합니다!( Daemon Thread 는 아닙니다! )
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
synchronized 활용 시 StockServiceTest의 일부 테스트가실패하는 이유
synchronized를 이용해서 동시성 이슈를 해결한 후StockServiceTest를 실행 했을 때 왜 둘 중 하나의 테스트가 실패하는지 궁금합니다.테스트 메소드 각각 따로 실행하면 각자 성공하는데, 함께 실행하면 둘 중 하나의 테스트가 실패합니다.실패 시 다음과 같은 에러가 발생합니다.java.lang.NullPointerException: Cannot invoke "com.example.stock.domain.Stock.decrease(java.lang.Long)" because "stock" is null@BeforeEach, @AfterEach로 테스트 실행 전 Stock을 저장/삭제를 하고 있기 때문에 함께 실행해도 문제 없을 것으로 생각되어 질문 남깁니다.
-
미해결iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해
serial 큐 질문드립니다.
안녕하세요. 기본 구조는 A 스레드에서 SQ라는 serial queue에 async하게 task를 합니다.전달한 task의 마지막 부분에 @escaping 하는 completionHandler()를 호출하는 구조입니다. 만약 A 스레드에서 SQ에 task1, task2 두개를 보내면 completionHandler가 호출되는 순서는 보장받을 수 없는거죠? task1 { serialqueue.async { ...... completionHandler() } } task2 { serialqueue.async { ...... completionHandler() } }
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
AWS Lightsail SSL handshake failed 오류 문의드립니다.
AWS Lightsail에 git clone을 하고, 콜렉터스 북북이 초기 페이지까지는 잘 들어가졌는데,검색어를 입력하고 엔터를 하면 오랜 시간이 지나고 아래와 같은 오류문이 나옵니다. INFO: 211.234.195.243:54254 - "GET /search?q=Sss HTTP/1.1" 500 Internal Server ErrorERROR: Exception in ASGI application... <ServerDescription ('ac-ljyn7zm-shard-00-02.v7fc0ev.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect("SSL handshake failed: ac-ljyn7zm-shard-00-02.v7fc0ev.mongodb.net:27017: [('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert internal error')] (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)")>]> 이런 오류가 나오면서 Internal Server Error가 뜹니다.혹시 어떻게 해결을 해야할지 알 수 있을까요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
CPU 라고 언급하시는게 실제 CPU 개수인가요? CPU Core를 의미하나요?
아마 Core 를 의미할 것 같은데, 많은 도서, 글과 강의들에서 CPU 라는 언급을 많이해서 명확히 알고 싶습니다 ㅠ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
동시성 문제점
동시성 문제가 생기는 부분이 재고를 감소하고 쿼리가update stock set quantity = :quantity where product_id = :id 이렇게 날라가서 문제가 되는것 같은데decrease를 없애고 쿼리를 update stock set quantity = quantity - :quantity where product_id = :id 이런식으로는 안되는건가요?JPA로는 불가능한가요?
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
다음 강의는 언제 출시되는지 알 수 있을까요?
다음 강의가 너무 기대되는데 출시 예정은 언제인지 알 수 있을까요?
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
안녕하세요 분산환경 질문이있습니다
스프링서버 3대가 scale-out 되어있는 상황이고 DB는 하나를 쓰고있습니다. 3대의 스프링서버에서 5분에 한번 실행되는 스케줄링 서비스로, DB에서 좋아요 많은순으로 5개씩 가져옵니다이때 3대의 서버가 동일한 게시글을 가져와야해서, 락의 필요성을 느꼈는데 저는 redis 분산락 말고는 해결방법이 잘 떠오르질 않더라구요. 서버1 select -> 그 사이에 좋아요 update -> 서버2 select -> 서버3 select위같은 상황이 발생해 서버 1과 2,3이 다른 결과를 select 할수도 있을것 같은데 비관,낙관적 락과 네임드락으로 해결할수 없다고 판단했는데 생각이 맞을까요?
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
TODO List Coredata 질문입니다.
강의중 궁금한것이 있어서 질문 남깁니다.TodoList 엔티티 정의를 했는데. ToDoList 의 클래스를 찾을수 없다고 나옵니다. 어떻게 해야할지 모르겠습니다. 알려주시면 감사하겠습니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
'Synchronized 이용해보기' 강의에서 질문이 있습니다.
제가 이해한 바는 다음과 같습니다. Transactional 어노테이션을 사용시해당 메서드나 클래스 내의 모든 메서드가 하나의 트랜잭션으로 묶여 처리 synchronized를 사용시동시에 같은 객체의 특정 메서드를 여러 스레드가 호출하지 못하게 하는 데 사용 그런데 1분 29초부터 설명을 들어보면decrease 함수 안에서, endTransaction을 수행하기 전에 다른 스레드가 decrease 메소드를 호출할 수 있다고 하셨습니다. 그런데 이 부분이 이해가 안됩니다. synchronized 키워드를 붙였다면, 동시에 같은 객체의 메서드를 다른 스레드가 호출하지 못하는것 아닌가요? Transactional 어노테이션을 주석처리하면 동작하던데, 이 여부와 관계 없이 동작해야하는것 아닌가요?
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
작업영역 질문
기존에 경로(폴더)에 파이썬 파일들이 있는데, 이것과 상관없이 선생님 강의 따라서 만든 가상환경파일은 작업환경이 아예 다르다고 봐도 되나요?아래와 같이 일단은 두개 만들어뒀는데, 서로 충돌하거나 문제되진 않는걸까요?요즘 주식api받아서 이것저것 해보려하는데, 32비트로 이렇게 가상환경 만들어서 하더라구요. 혹시 충돌되나 궁금해서 여쭤봅니다!음.. 이전에 사용하던 환경이 있어서인지 수업에서 진행하신것처럼 venv폴더에 있는 파이썬으로 연결해도 하단에 선생님처럼 venv라고 안뜨네요ㅜㅜ이렇게 뜨고있습니다.
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
cmd에서 code작성시 기존에 깔아둔 vscode에서 이상한 화면이 뜨네요
cmd에서 아래처럼 code라고 쳤는데 기존에 지정해둔 경로가 사라지고 아래처럼 알수없는 글만 잔뜩 뜨네요.. 왜그런걸까요? 다행히도 최근파일열기(컨트롤+r)로 기존경로에 있던 프로그램들 다시 불러오긴했는데, 이건 왜그런걸까요?
-
미해결운영체제 공룡책 강의
자바 Bounded-Buffer 코드 질문 있습니다.
안녕하세요. 좋은 강의 잘 듣고 있습니다. 다름이 아니라 해당 부분 자바 코드에서 의문점이 있어 질문 드려봅니다. synchronized 식별자를 붙인 메서드가 여러 개 있을 때 모니터 락이 각 메서드별로 생기는지 혹은 전체를 관리하는 하나의 모니터 락만 생기는지가 전 강의에서 언급이 되었는지 모르겠지만, 잘 기억이 안나서,, 두 케이스 모두 질문이 드립니다. 모니터 락이 각 메서드별로 생기는 경우take와 give는 count라는 공유 변수에 접근하고 있다고 생각됩니다. synchronized를 통해 각 메서드별로 mutual exclusive가 지켜지지만, take와 give 사이에서는 race condition 문제가 발생하지는 않나요 ?? 예를 들어 buffer size = 3, count = 1인 경우 give와 take가 동시에 실행될 수 있고, count++과 count--에서 race condition 문제가 발생할 수 있다고 생각했습니다. 직접 테스트 해 본 결과 해당 문제는 발생하지 않았는데, 왜 그런지가 궁금합니다. 모니터 락이 전체를 관리하는 하나만 생기는 경우하나의 메서드에서 무한정 대기하는 경우가 생길 것 같습니다. 아마 첫 번째 케이스가 맞다고 생각하지만 혹시라도 두 번째 케이스라면, take에서 count=0일 때 while문 안에서 wait()을 하는데, give 메서드가 실행이 되지 않으니 무한정 대기할 것이라고 생각됩니다. 쓰다보니 굉장히 길어졌습니다 ㅜㅜ.. 읽어주셔서 감사합니다.
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[join() 강의] join() 작동 방식 정리 관련 질문이 있습니다.
안녕하세요. 선생님 join() 강의를 듣다가 11:09 내용 [join() 작동 방식] 관련해서 질문이 생겨서 질문을 남기게 되었습니다! 해당 페이지 첫번째 줄에 의하면 join()을 실행하면 현재 스레드는 대기 상태가 되고 join()을 수행중인 스레드에게 CPU를 사용하도록 한다라고 말씀 해주셨는데요.여기서 말씀을 해주신대로라면 join()을 수행중인 스레드가 바로 RUNNING 상태가 되면서 CPU를 할당받는 것인가요?아니면 그냥 스케줄러에 의해서 RUNNABLE 상태에 있던 join()을 수행중인 스레드 가 자기 차례가 되어서 RUNNING 상태가 되는 것인지 궁금합니다.현재 스레드가 자신의 차례를 join()을 수행중인 스레드에게 양보를 함으로써 join()을 수행중인 스레드가 즉시 실행이 되도록 하는것인지, 아니면 현재 스레드가 자신의 차례를 그냥 넘기게 되고 join()을 수행중인 스레드는 OS 스케줄러에 의해서 추후에 실행이 된 것인지 의문이 들어서 여쭤보게 되었습니다.5번째 내용을 보면 join()을 수행중인 스레드 에게 인터럽트가 발생할 경우, 현재 스레드는 대기에서 해제되고 실행상태로 전환되어 예외를 처리한다고 되어있습니다.join()을 수행중인 스레드 에게 인터럽트가 발생하는 것이 아니라 현재 스레드에게 인터럽트가 발생해야 현재 스레드가 대기에서 해제되고 실행상태가 되어서 예외를 처리하는게 아닌지 궁금합니다.30:00 내용을 보면 Main 스레드에게 인터럽트를 걸어야 대기에서 빠져나온다고 말씀을 해주셨습니다.1번 질문과 결이 비슷한 질문입니다.join()을 해제시키기 위해서 특정 스레드에게 인터럽트를 걸게 되면 해당 스레드는 WAITING 상태에서 RUNNING 상태로 바로 가는 것이 아니라, RUNNABLE 상태로 바뀐 후 자신의 차례에 RUNNING이 된다고 이해를 하면 되는 것일까요 ??
-
해결됨운영체제 공룡책 강의
window10 이 아니면 안되나요??
윈도우10보다 이상이면 리눅스 프로그래밍 안되는걸까요??
-
미해결자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
다중화된 서버일 경우 비동기 처리 관련 문의
안녕하세요! 비동기 프로그래밍을 해야되는데 너무 어려워서 강의를 등록했습니다!개인적인 궁금증인데 다중화된 서버일 경우, 비동기 호출하게 되면 리턴을 호출한 서버가 받게 되는걸까요?아니면 다른 서버가 받을 수도 있는걸까요?혹시 호출 서버가 받는게 보장된다면 그건 어디서 보장을 해주는 걸까요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[keepAliveTime - 스레드 유휴 시간 설정] - 설명에 대한 의문점
안녕하세요 선생님, 강의를 듣다가 의문점이 드는 설명이 있어서 질문 올립니다.[keepAliveTime - 스레드 유휴 시간 설정] 강의03:56 ~ 04:20 의 설명을 듣고 나서 처음에는 끄덕였는데,강의를 다 듣고 나니까 뭔가 의문점이 생겼습니다.해당 시간대에 설명에서는 Thread.sleep(3000) 메소드가 유휴상태를 일으키고, 이것 때문에 keepAliveTime 에 의해서 쓰레드가 제거된다고 설명해주십니다.이때 듣고 나서 아래와 같은 생각을 하게 되더라구요."그러면 Thread.sleep(3000) 을 하고, KeepAliveTime 을 2초를 줘서 정말 저 3초가 지나기 전에 쓰레드가 삭제되야 된다면 쓰레드가 제거되기 전에 InterruptedException 같은 걸 던지려나?" ... 라는 생각을 하게 되더라구요.그리고 제가 한 테스트 결과는 그렇지 않더군요...이상해서 이리저리 찾아보니 다음과 같은 설명을 jdk 소스 파일에서 발견했습니다. 여기서 제가 주목한 구절은 "Timeout in nanoseconds for idle threads waiting for work." 입니다.이 말은 Thread 가 sleep 같은 상태에서 멈추더라도,해당 Thread 는 "다음 일을 받기 위해서 대기하는 쓰레드" 가 아니기 때문에 keepAliveTime 에 의해서 제거되는 타겟이 아니지 않나요?더 정확히는...keepAliveTime 의 유휴시간은==> Thread.sleep(3000) 에서 유휴시간 Check X==> 쓰레드가 자기의 task 를 모두 끝난 직후부터 유휴시간 Check O... 인 게 맞지 않나요?
-
해결됨자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]
[sleep() 강의] sleep(0) 메서드 관련 질문이 있습니다.
안녕하세요. 선생님 sleep() 강의를 듣다가 sleep(0) 메서드 관련해서 질문이 생겨서 질문을 남기게 되었습니다! sleep() 강의 중 12:25 내용을 보면, sleep을 진행하려는 Thread의 priority가 5라서 동일한 우선순위인 5인 Thread가 있는지 찾아본다고 말씀을 해주셨는데요. 제가 여기서 궁금한 점은 반드시 동일한 우선순위의 Thread만을 확인하는지가 궁금합니다. 만약 동일한 우선순위인 우선순위가 5인 Thread는 없더라도, 더 높은 우선순위의 Thread가 존재해도 컨텍스트 스위칭이 일어나지 않는 것일까요 ??