본문 바로가기

Back-end139

sychronized, Atomic sychronized 란? synchronized 는 자바에서 멀티스레드 환경에서 공유된 자원에 대한 동시 접근을 제어하기 위한 키워드이다. synchronized을 이용하여 특정 블록 또는 메서드를 동기화 시켜 한 번에 하나의 스레드만 해당 블록 또는 메서드를 실행할 수 있다. synchronized 를 사용하면 스레드들이 대기하고 경합하며, 이로 인해 성능 저하가 발생할 수 있다. 또한, 여러 스레드가 서로 락을 획득하고 기다리다가 데드락 상태에 발생할 수 있다. 서버 이중화시 동기화 문제점 만약 서버가 이중화 되어 있다면, 각 서버에서 별도의 자원을 가지게 됨으로, synchronized 문제가 발생할 가능성이 줄어들지만, 이중화된 서버들 사이에서 동기화된 자원을 공유하려면 동기화 문제가 발생할 수.. 2023. 8. 24.
Servlet, ServletContainer vs DispatcherServlet Servlet 이란? 서블릿이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술 입니다. 즉, 클라이언트의 요청에 대해 동적으로 처리하고 응답을 생성하는데 사용되는 자바 클래스입니다. 왜 필요한 것인가? 서블릿은 클라이언트의 요청에 대해 동적으로 응답을 생성하여, 웹 애플리케이션의 동작을 제어합니다. 또한, 웹 애플리케이션의 로직을 자바 클래스로 구현하므로, 서버 측에서 로직을 처리하고 결과를 반환할 수 있다. 정적인 웹 페이지만 제공하는 것이 아닌, 동적인 기능과 데이터 처리가 필요한 경우에 사용된다. 없으면 어떻게 되는가? 서블릿이 없을 경우 동적인 기능을 추가할 수 없어, 정적인 웹 페이지만 제공 가능하다. 또한, 웹 애플리케이션의 비즈니스 로직을 서버에서 처리할 수.. 2023. 8. 24.
volatile volatile이란? volatile은 자바의 키워드 중 하나로, 변수 선언 시 사용되며, 해당 변수의 값을 메인 메모리에 직접 읽고 쓰도록 지정 하는 역할을 한다. 이는 다중 스레드 환경에서 변수의 값이 스레드 간에 정확하게 동기화되도록 보장하기 위해 사용된다. 하지만 동기화가 보장되는 것으로 인해 가시성 문제는 해결할 수 있지만, 동시 접근 문제는 해결할 수 없다. 왜 필요한가? volatile 키워드를 사용하면 변수를 항상 메인 메모리에 쓰기 및 읽기를 하므로, 다중 스레드 환경에서 값의 일관성과 가시성을 보장할 수 있다. 공유 변수나 상태 정보 등이 여러 스레드에 의해 접근되는 경우 사용한다. 가시성 보장 : 하나의 스레드에서 변경한 값을 다른 스레드에서 바로 읽을 수 있도록 한다. 순서 보장 :.. 2023. 8. 23.
Thread(Java/OS) 스레드란? 자바 프로그램을 실행하면 JVM 프로세스가 실행되고, JVM 프로세스 안에서 GC를 포함한 여러 개의 스레드가 실행된다. 각 스레드마다 Java Stack, PC, Native Method Stack 이 존재한다. 자바는 동일한 메모리를 읽지만 각각 작업을 수행하는 스레드들이 동시에 여러 작업을 수행한다. 스레드의 등장 배경 프로세스를 생성하려면 많은 시간과 자원이 필요하다. JVM은 벤더마다 다르지만 최소 32MB의 메모리가 필요하고, 스레드는 1MB 메모리가 필요하다. 그래서 스레드를 경량 프로세스라고도 부른다. 스레드의 종류 스레드에는 사용자 수준 스레드와 커널 수준 스레드가 있다. 사용자 수준 스레드는 사용자 라이브러리를 통해 사용자가 만든 스레드로, 스레드가 생성된 프로세스의 주소 공.. 2023. 8. 23.
동기식 vs 비동기식, Blocking vs Non-Blocking 동기 vs 비동기 동기/비동기는 작업 순서 처리 차이에 관점을 둡니다. 동기 작업은 요청한 작업에 대해 순서가 지켜지는 것을 말하고, 비동기 작업은 순서가 지켜지지 않을 수 있다는 것을 말합니다. 동기(Synchronous) 동기(Synchronous)는 작업이 순차적으로 진행되며, 한 작업이 시작되면 해당 작업이 완료될 때 까지 다음 작업이 대기합니다. 요청한 작업에 대해 완료 여부를 따져 순차적으로 처리합니다. 비동기(Asynchronous) 비동기(Asynchronous)는 작업의 완료를 기다리지 않고 다음 작업을 바로 실행할 수 있습니다. 요청한 작업에 대해 완료 여부를 따지지 않고 자신의 다음 작업을 그대로 수행합니다. I/O 작업 같은 느린 작업이 발생할 때, 기다리지 않고 다른 작업을 처리하.. 2023. 8. 23.
2023.08.22 TIL 네트워크 프로그래밍 사용자들이 바로 옆에 있는 장비와 데이터를 주고 받는 작업을 네트워킹 이라한다. 네트워킹인 레이어로 구분되어 있다. 애플리케이션 레이어 → 트랜스포트 레이어 → 인터넷 레이어 → 네트워크 인터페이스 레이어 애플리케이션 레이어 중 가장 대표적인 HTTP, FTP, Telnet들은 모두 TCP 통신을 한다. 자바에서 TCP 통신을 한다면, 자바에서 제공하는 API를 사용하면 된다. 애플리케이션 레이어에서 프로그래밍만 하면 트랜스포트 레이어에서의 처리는 자바에서 다 알아서 처리해준다. TCP, UDP TCP 통신은 연결 기반 프로토콜 이라 부른다. TCP는 데이터를 보내면 성공 여부를 알려준다. 즉, 상대방이 데이터를 받았는지 확실히 보장한다. UDP는 TCP와 다르게 성공 여부를 알지 못.. 2023. 8. 22.