💡 최상용님의 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 듣고 정리한 내용입니다 어떤 작업이 오래 걸려 서비스 응답 속도에 영향을 주는 경우, 애플리케이션의 성능 향상을 위해 멀티 스레드 환경을 고려할 수 있다. 멀티 스레드를 통해 여러 작업 스레드가 동시에 실행되어 응답 속도와 처리량을 개선할 수 있다. 그러나, 여러 스레드가 동시에 동일한 데이터에 접근하고 수정할 경우 데이터 일관성이 깨지거나 레이스 컨디션(Race Condition)과 같은 문제가 발생할 수 있다. 이는 작업이 의도한 대로 처리되지 않게 만들어, 데이터 무결성을 손상시킬 위험이 있다. 강의에서는 상품 재고를 관리하는 간단한 재고 시스템을 구현하여 멀티 스레드 환경에서 발생하는 동시성 문제를 마주하고 발생 원인을 분석한다. ..
체크 예외와 인터페이스서비스 계층은 가급적 특정 구현 기술에 의존하지 않고, 순수하게 유지하는 것이 좋다. 이렇게 하려면 예외에 대한 의존도 함께 해결해야한다.예를 들어서 서비스가 처리할 수 없는 SQLException에 대한 의존을 제거하려면 어떻게 해야 할까?? 서비스가 처리할 수 없으므로 리포지토리가 던지는 SQLException 체크 예외를 런타임 예외로 전환해서 서비스 계층에 던지자. 이렇게 하면 서비스 계층이 해당 예외를 무시할 수 있기 때문에, 특정 구현 기술에 의존하는 부분을 제거하고 서비스 계층을 순수하게 유지할 수 있다. 지금부터 코드로 이 방법을 적용해 보자. 체크 예외와 인터페이스 체크 예외를 사용하려면 인터페이스에도 해당 체크 예외가 선언되어 있어야 한다. 예를 들면 다음과 같은 ..
예외 계층스프링이 제공하는 예외 추상화를 이해하기 위해서는 먼저 자바 기본 예외에 대한 이해가 필요하다.예외는 자바 언어의 기본 문법에 들어가기 때문에 대부분 아는 내용일 것이다. 예외의 기본 내용을 간단히 복습하고, 실무에 필요한 체크 예외와 언체크 예외의 차이와 활용 방안에 대해서도 알아보자. 예외 계층 그림 Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다.Throwable : 최상위 예외이다. 하위에 Exception 과 Error 가 있다.Error : 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 애플리케이션 개발자는 이 예외를 잡으려고 해서는 안된다.상위 예외를 catch로 잡으..
문제점들애플리케이션 구조 여러 가지 애플리케이션 구조가 있지만, 가장 단순하면서 많이 사용하는 방법은 역할에 따라 3가지 계층으로 나누는 것이다. 프레젠테이션 계층UI와 관련된 처리 담당웹 요청과 응답사용자 요청을 검증주 사용 기술: 서블릿과 HTTP 같은 웹 기술, 스프링 MVC서비스 계층비즈니스 로직을 담당주 사용 기술: 가급적 특정 기술에 의존하지 않고, 순수 자바 코드로 작성데이터 접근 계층실제 데이터베이스에 접근하는 코드주 사용 기술: JDBC, JPA, File, Redis, Mongo ...순수한 서비스 계층 여기서 가장 중요한 곳은 어디일까? 바로 핵심 비즈니스 로직이 들어있는 서비스 계층이다. 시간이 흘러서 UI(웹)와 관련된 부분이 변하고, 데이터 저장 기술을 다른 기술로 변경해도, 비..