inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

AtomicInteger.get()을 CAS 연산 후 반환값으로 사용하면 안 되는 이유 공유

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

AtomicInteger.get()을 CAS 연산 후 반환값으로 사용하면 안 되는 이유 🚨 핵심 문제: 원자성에 대해서 다시 생각해보기 CAS 연산의 원자성은 compareAndSet() 호출 자체에만 적용됨 CAS 성공 후 get() 호출 은 완전히 별개의 연산 두 연산 사이에 다른 스레드가 개입 가능 멀티스레드 환경에서는 언제든지 다른 스레드가 개입 가능 개발자는 OS가 중간에 어떤 스레드를 호출할지 알 수 없음 🔍 문제 발생 메커니즘 1. 시간적 틈(Time Gap) 존재 result = atomicInteger.compareAndSet(getValue, getValue + 1); // ✅ 원자적 // ← 이 시점에서 다른 스레드가 값을 변경할 수 있음 return atomicInteger.get(); // ❌ 별개의 연산, 원자성 보장 안됨 2. 스레드 스케줄링의 불확실성 sleep(100) 동안 CPU가 다른 스레드로 전환 CAS 성공 직후에도 스케줄러가 해당 스레드를 중단 시킬 수 있음 먼저 시작된 스레드가 먼저 완료된다는 보장 없음 📊 실제 문제 시나리오 초기값: atomicInteger = 0 Thread A: getValue = 0 Thread A: compareAndSet(0, 1) 성공! → atomicInteger = 1 Thread A: CPU 스케줄러에 의해 중단됨 Thread B: getValue = 1 Thread B: compareAndSet(1, 2) 성공! → atomicInteger = 2 Thread A: 재개됨 Thread A: atomicInteger.get() 호출 → 2 반환 ❌ 결과 : Thread A가 실제로는 0→1로 증가시켰지만, 2를 반환하게 됨 ✅ 올바른 해결책: getValue + 1 사용 동작 원리 private static int incrementAndGet(AtomicInteger atomicInteger) { int getValue; boolean result; do { getValue = atomicInteger.get(); // 현재값 저장 result = atomicInteger.compareAndSet( // CAS 연산 getValue, getValue + 1 ); } while (!result); return getValue + 1; // CAS에서 사용한 기댓값 + 1 } 장점 CAS 연산 시점의 값 고정 : getValue 는 CAS 연산에서 사용한 정확한 기댓값 다른 스레드 개입 무관 : 이후 다른 스레드가 값을 어떻게 변경하든 영향받지 않음 메서드 의미 보장 : "이 메서드가 실제로 설정한 값"을 정확히 반환 🎯 핵심 교훈 ❌ 잘못된 가정 "CAS 성공 후 바로 get()을 호출하면 방금 설정한 값을 가져올 것이다" ✅ 올바른 이해 원자성은 단일 연산에만 적용 연산 간의 순서나 연속성은 보장되지 않음 멀티스레드 환경에서는 언제든지 다른 스레드가 개입 가능 개발자는 OS가 중간에 어떤 스레드를 호출할지 알 수 없음 💡 실무 적용점 AtomicInteger의 내장 메서드 활용 // 직접 구현하지 말고 내장 메서드 사용 int result = atomicInteger.incrementAndGet(); CAS 패턴 사용 시 주의사항 연산 결과는 CAS에서 사용한 값을 기준으로 계산 별도의 get() 호출로 "현재값"을 가져오려 하지 말 것 원자성의 범위 명확히 이해 단일 메서드 호출 = 원자적 여러 메서드 호출의 조합 = 원자적이지 않음

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
개발하는쿼카 댓글 1 좋아요 1 조회수 87

내부 클래스의 바깥 클래스 참조

해결됨

김영한의 실전 자바 - 중급 1편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 교재 챕터7(중첩클래스, 내부클래스) 16쪽에서 "실제로는 내부 인스턴스는 바깥 인스턴스의 참조를 보관"이라고 나와있는데, 정확히 어느 공간에 저장하는건가요?

  • java
  • 객체지향
khcho1492 댓글 1 좋아요 0 조회수 84

gradlew.bat이 되지 않습니다.

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요?아니오 [질문 내용] libs파일이 없어서 gradlew.bat을 해봤는데 결과창이 나오질 않고 아무런 반응이 없습니다..

  • java
  • spring
  • mvc
  • spring-boot
예진 댓글 2 좋아요 0 조회수 174

빌드 오류

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오 [질문 내용] 경로까진 들어왔는데 gradlew.bat, gradlew, ./gradlew을 해도 아무것도 되지 않고 내부 또는 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아니라고 뜹니다.

  • java
  • spring
  • mvc
  • spring-boot
예진 댓글 2 좋아요 0 조회수 189

스타일이 적용 안되는 문제

미해결

Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)

안녕하세요, 선생님. 현재 블로그 상세 목차 UI까지 강의 수강했는데 코드 수정한 후 local에 띄어보니 스타일이 적용 안되는 문제가 발생했습니다. 선생님 github에서 해당 강의 관련 코드 다 가져와서 복붙 했는데도 저러네요... 제가 왕초보라서 도와주시면 감사하겠습니다!

  • react
  • 블로그
  • next.js
  • cursor
  • cursorai
댓글 2 좋아요 0 조회수 131

안되서 스트레스 받아요

미해결

실습으로 배우는 선착순 이벤트 시스템

다 따라 했는데 안되니깐 스트레스 받네요

  • java
  • docker
  • spring-boot
  • kafka
  • redis
kimoon Hong 댓글 2 좋아요 -3 조회수 133

샤드 할당 관련 질문 드립니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. AssignedShard 클래스의 목적이 샤드를 균등하게 분배하는 것이라고 보이는데요 저는 처음에 스레드가 처리할 일을 분할해주는 거라고 생각했는데 찾아보니까 앱 인스턴스를 기준으로 샤드를 나누는 것이라고 하더라고요. 근데 앱 인스턴스는 말하자면 각각의 서버? 예를 들어서 포트 9000번을 A,B,C 서버에서 실행하면 그 각각을 앱 인스턴스라고 부른다고 봤습니다. 그리고 이렇게 각각 다른 서버에서 하나의 포트를 실행하려면 운영 환경에서 서버의 부담이 커질때 서버를 늘려주는 로드밸런싱?같은 기법을 쓸때 필요한 샤드 분배 기능같은데 나중에 운영환경에서 이런때를 대비해서 미리 구현하신건가요? 아니면 이런 지금 강의 환경 안에서도 이렇게 앱 인스턴스가 늘어나는? 상황이 있는건가요.. 아직 공부중이고 모르는 부분도 좀 있다보니 설명이 두서없었습니다 ㅠ

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
김규혁 댓글 2 좋아요 0 조회수 84

casacade 사용 주의점 질문

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] casacade 사용시 주의할 점으로 특정 엔티티가 개인소유하는 자식일 경우에만 쓰는게 좋다 라고 말씀하셨는데, 여기서 특정 엔티티라는것이 엔티티의 구분을 말씀하시는건지 아니면 하나의 레코드를 말씀하시는건지 헷갈립니다. 아마 특정 레코드를 말씀하신것 같은데, 멤버와 페런트 엔티티가 child라는 같은 엔티티를 참조 한다고하지만, 결국에는 멤버와 페런트가 각각 개인의 child 레코드만을 참조한다면 문제가 없을것 같은데 맞을까요? 같은 레코드를 참조하는게 아니니까요!

  • java
  • jpa
RealTake 댓글 1 좋아요 0 조회수 123

80포트 8080포트

미해결

비전공자도 이해할 수 있는 Docker 입문/실전

보안 설정하실 때 80포트에 대해서 다 허용하신 걸로 아는데 8080포트로 하는데 왜 잘 작동하는지 궁금해서 질문드립니다!

  • docker
  • docker-compose
  • docker-volume
  • docker-image
  • container
  • ecr
마지막기회 댓글 2 좋아요 0 조회수 362

컨테이너의 Stateless 제약 관련 질문

해결됨

개발자를 위한 쉬운 도커

안녕하세요! 강의 재밌게 잘듣고 있습니다 :] 컨테이너의 Stateless 제약 -> 상태가 업식 때문에 저장 및 공유가 필요한 데이터는 무조건 외부에 저장해야합니다. 라는 내용을 보다가 실무에서는 어떤지 궁금증이 생겼습니다. 실무에서는 DB를 도커로 띄어서 운영을 하는 경우에, DB의 정보들을 별도로 외부에 저장을 하는 것인지 궁금합니다! 제가 생각한 바로는 1. 배치 또는 스냅샷을 사용해서 일정주기마다 백업을 한다. (이 방법을 사용하면 컨테이너가 사라졌을 때와 가장 최근 백업 사이에 간격이 어쩔 수 없이 발생할 것 같다는 생각이 들었습니다.) 2. DB는 RDS 같은 서비스가 있기 때문에 도커를 굳이 사용하지 않는다. 강사님의 의견을 여쭤보고 싶습니다!

  • docker
  • 가상화
  • ci/cd
  • docker-compose
  • github-actions
  • docker-volume
  • docker-image
  • container
teho.lee200 댓글 1 좋아요 0 조회수 123

맥 m3 쿠버네티스 클러스터 설치오류

미해결

대세는 쿠버네티스 (초급~중급편)

[ 👍 좋은 질문을 했을 때 좋은 답변이 돌아 옵니다] 1. 실습 중 본인의 환경이 가이드와 다른 부분이 있었다면 말씀해주세요. 2. 해당 문제의 발생 빈도(재설치 여부)와 문제 해결을 위해 시도해본 케이스를 말씀해 주시면 원인 파악에 큰 도움이 됩니다. 3. 에러 메시지만 봐서는 저도 모르는 경우가 많아요. 그전에 했던 작업이 포함된 캡쳐 화면도 부탁 드려요. 4. 영상 내용에 대한 질문 시 해당 시간을 같이 올려 주시면 답변을 드리는 시간이 더 빨라집니다. 5. 긴 로그는 제 메일로 보내주세요. ( k8s.1pro@gmail.com ) 강사님의 깃헙 참고하여 맥 m시리즈 가이드를 보고 쿠버네티스 클러스터 설치 부분을 따라하고 있는데 Rocky와 UTM 연동이 안되는 것 같습니다. 권한 문제일 수 있다고 해서 터미널에서 권한 추가했는데도 안되네요. 재생버튼을 누르면 터미널이 한 1초 떴다가 다시 저 화면으로 돌아갑니다. 아무런 오류 메시지도 없습니다. 해결하는 방법이 있을까요?

  • docker
  • kubernetes
  • devops
  • container
hahahello777 댓글 2 좋아요 1 조회수 103

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

미해결

김영한의 실전 자바 - 중급 2편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의 보기 전에 미리 만들어 본 코드입니다. 3번째 줄에서 afterNode를 안 만들고 주석처리한 코드를 afterNode 자리에 넣으니 오류가 발생하네요 그리고 수업중 코드에서도 2번째줄 코드 위치만 바껴도 위와 똑같은 오류가 발생하네요 왜그런걸까요?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
박혁진 댓글 3 좋아요 0 조회수 119

sout에는 변수가 하나만 들어가야 하나요?

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 변수 선언과 초기화 챕터를 보는 중에 궁금증이 생겨 질문합니다. System.out.println() 이 괄호 안에는 무조건 변수가 하나만 들어가야 하나요? 두개 이상은 들어가지 못하나요? 예를 들면 int c = 3, d = 4; System.out.println(c,d) 이렇게 하면 안되는건지요 만약 못한다면 왜 안되는것인가요? 궁금합니다!

  • java
  • 객체지향
송영진 댓글 1 좋아요 0 조회수 153

퍼블릭 IP 연결 거부

미해결

비전공자도 이해할 수 있는 Docker 입문/실전

자꾸 위와 같은 오류가 뜹니다. 보안 그룹은 아래와 같이 되어있는데 뭐가 문제일까요..

  • docker
  • docker-compose
  • docker-volume
  • docker-image
  • container
  • ecr
댓글 2 좋아요 0 조회수 93

wsl2로 실행 시 오류

해결됨

바로쓰는 CI/CD on K8S

질문이 있으시다면 주저하지 마시고 물어보세요! 윈도우 환경에서 wsl2로 bash bootstrap.sh 실행했는데 원인과 해결방안이 궁금합니다.

  • docker
  • jenkins
  • kubernetes
  • vagrant
  • argocd
댓글 1 좋아요 0 조회수 126

도커불륨 mysql_data

미해결

비전공자도 이해할 수 있는 Docker 입문/실전

이것저것 해보다 궁금한게 있습니다 ㅇㅅㅇ 로컬에서 볼륨 디렉토리가 없을때 컨테이너에서 볼륨 데이터를 덮어쓰는것 까지 이해를했는데요. 강의에서 볼륨 mysql_data로 설정을 해주잖아요. 그래서 컨터이너의 볼륨의 데이터들이 로컬에서 mysql_data 디렉토리를 만들고 그 데이터들이 호스트의 mysql_data에 들어가는데 여기서 궁금합니다. 컨테이너에는 mysql_data 디렉토리는 보이지 않는데 컨테이너 입장에서는 어디에서 로컬과 연결된 볼륨의 디렉토리 위치을 어떻게 할 수 있을까요. ㅇㅅㅇ;;

  • docker
  • docker-compose
  • docker-volume
  • docker-image
  • container
  • ecr
CodeKimbap 댓글 2 좋아요 0 조회수 105

강의 전부 수강했는데 퀴즈 활성화가 안되는 것 같습니다.

미해결

떠먹여주는 객체지향 디자인 패턴 - by 얄코

올라온 강의들을 전부 수강한 상태에서, 퀴즈를 풀려고 하는데 수강하지 않은 수업이 있다는 화면이 나오네요. 이유를 알려주시면 감사하겠습니다.

  • java
  • 객체지향
  • 디자인-패턴
geumsung7769 댓글 1 좋아요 0 조회수 136

실습시 docker desktop 대신 할 프로그램

미해결

비전공자도 이해할 수 있는 Docker 입문/실전

안녕하세요 docker 설치를 진행했더니, 사내PC에 라이센스 관련 이슈로 설치가 불가하다고 합니다. 혹시 해당 프로그램 대신 다른 프로그램으로 대체가 가능한지 문의드립니다.

  • docker
  • docker-compose
  • docker-volume
  • docker-image
  • container
  • ecr
윤상두 댓글 3 좋아요 0 조회수 657

utf-8, char

미해결

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

utf-8로 지정해서 IO 작업을 하더라도, utf-16인 (char)로 형 변환이 가능한 이유가 궁금합니다. char는 ascii와 호환이 안되지않나요..? StringBuilder content = new StringBuilder(); FileReader fr = new FileReader(FILE_NAME, UTF_8); int ch; while ((ch = fr.read()) != -1) { content.append((char) ch); } fr.close();

  • java
  • 네트워크
  • 객체지향
티티티 댓글 1 좋아요 0 조회수 73

렌즈에서 config파일 불러올 떄 오류납니다.

해결됨

바로쓰는 CI/CD on K8S

질문이 있으시다면 주저하지 마시고 물어보세요 윈도우에서 git bash로 작업햇습니다 포트포워딩이 문제인지... 방화벽이문제인지.. 머가 문제인지 모르겠습니다... 멀해도 해결이안되네요... 아님 처음부터 다시 설치하는게 나을까요..

  • docker
  • jenkins
  • kubernetes
  • vagrant
  • argocd
기우현 댓글 2 좋아요 0 조회수 120

인기 태그

인프런 TOP Writers

주간 인기글