CS 3

[CS] 동기화 문제: 똑같이 더하고 뺐는데 왜 sharedData는 0이 안 나올까? (Mutex, Semaphore)

동기화란?: 두 가지 이상의 작업이 동시에 실행될 때 꼬이지 않도록 맞추는 것 여러 개의 작업(스레드/프로세스)이 동시에 실행될 때, 데이터의 일관성을 유지하고 충돌을 막기 위해 실행 순서나 접근을 제어하는 것을 말한다. 즉, 동기화에서 실행 순서와 공유자원 접근은 중요한 문제이다. 1. 실행 순서 문제 (순서 동기화)“A가 끝난 뒤에 B를 실행해야 한다”예:Producer → Consumer초기화 후 사용2. 공유 자원 접근 문제 (임계구역(critical section) 문제)“여러 명이 동시에 만지면 안 된다”예:sharedData++파일 쓰기캐시 수정 아래와 같이 2개의 스레드를 동시에 작동시켜보자.public class Race { static int sharedData = 0; pu..

CS 2025.12.26

[CS] JAVA 싱글톤 패턴과 Spring 싱글톤의 차이, 그리고 thread-safe 오해

싱글톤 패턴이란?오직 하나의 인스턴스만 생성되도록 보장하고,그 인스턴스에 전역적으로 접근할 수 있도록 하는 패턴이다.public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; }} private으로 생성자 접근을 막고, 정적 메소드 팩토리로 만들면 그게 싱글톤인가요? 🙋🏻‍♀️ (모양이 비슷해서..) NO ❌싱글톤은 항상 같은 인스턴스를 반환한다. 싱글톤 패턴은 아래의 2가지를 지켜야한다.생성자를 외부에서 못 부르게 한다 (privat..

CS 2025.12.17

[CS] 왜 HTTP 통신에는 직렬화가 필요할까? JSON과 Spring MVC로 이해하는 직렬화와 역직렬화

직렬화란? 객체, 해시, 딕셔너리 등을 문자/바이트 형식으로 만드는 것이다. 반대로, 역직렬화란?문자/바이트 형식을 프로그램이 사용하는 객체로 바꾸는 것을 말한다. 왜 직렬화/역직렬화가 필요한가요? 🤷🏻‍♀️ 네트워크 전송(HTTP), 파일 저장, 로그 기록 등은 바이트 형식만 가능하기 때문이다. 객체는 메모리 주소와 구조를 가진 덩어리다. 이런 정보들은 모든 사용자 개인의 컴퓨터 환경의 영향을 받는다. 만약, JVM을 사용하지 않는 사용자에게 Java 객체를 전송한다면? 정상적으로 데이터 송수신이 어려울 것이다. 그래서 문자열/바이트 형식으로 데이터를 전송한다. *문자열 : 바이트 스트림을 문자 인코딩 규칙(UTF-8, UTF-16 등) 으로 해석한 것이다. (즉, 바이트 스트림 ⊃ 문자열 스트림이..

CS 2025.12.12