스프링 프레임워크(Spring Framework)
스프링 프레임워크 스프링 프레임워크는 자바 개발을 편리하게 해주는 경량급 오픈소스 애플리케이션 프레임워크로, 개발에 필요한 기능들을 포괄적으로 제공한다. 스프링은 몇 가지 핵심 특징을 갖는다. POJO(Plain Old Java Object) 프레임워크라서 특정 라이브러리에 종속되지 않아 개발이 쉽고, AOP(Aspect Oriented Programming), 즉 관점지향 프로그래밍을 지원하며, DI(Dependency Inject) 의존성 주입도 지원한다. 무엇보다 IoC(Inversion of Control), 즉 제어의 역전을 지원해 제어권이 개발자가 아니라 프레임워크에 있다. 객체의 생성부터 생명주기까지를 프레임워크가 관리하고 제어하며, 이렇게 제어권이 스프링으로 넘어오기 때문에 DI나 AOP 같은 기능들이 가능해진다. 스프링 부트 스프링 부트는 스프링 프레임워크를 사용하는 프로젝트를 간편하게 설정할 수 있는 서브 프로젝트다. 내장 톰캣을 쓸 수 있어 번거로운 개발 환...
상호 배제 (相互排除, Mutex)
상호 배제 특정 공유 자원을 한 순간에 하나의 프로세스만 사용할 수 있을 때, 한 프로세스가 공유 데이터에 접근하는 동안 다른 프로세스는 그 데이터에 접근하지 못하게 막는 것을 상호 배제라 한다. 다중 스레드나 프로세스가 공유 자원에 동시에 접근하는 것을 막기 위한 개념으로, 주로 동기화 문제를 해결하는 데 쓰인다. 상호 배제는 임계 구역(크리티컬 섹션) 문제를 다루는데, 임계 구역이란 여러 스레드가 동시에 접근해서는 안 되는 코드 블록을 말한다. 임계 구역(Critical Section) 임계 구역은 프로그램 안에서 공유 자원(데이터 등)에 접근하는 코드 영역이다. 여러 스레드가 동시에 임계 구역에 들어가면 데이터 일관성 문제가 발생할 수 있다. 진입 섹션(Entry Section) 진입 섹션은 스레드가 임계 구역에 들어가기 전에 실행되는 코드다. 이 섹션에서 스레드가 임계 구역에 들어갈 수 있는지 확인하고, 상호 배제를 보장한다. 퇴장 섹션(Exit Section) 퇴장 섹...


