2025/05(49)
-
동시성 제어 : 데이터 일관성을 위한 낙관적 잠금과 비관적 잠금
우리가 프로그램을 사용하다 보면 여러 사람의 요청이 충돌하는 경우가 있다. 예를 들면 한정 판매(콘서트, 극장 예매)나 수강 신청 같은 경우 말이다. 이런 요청들을 데이터베이스 및 시스템 관점에서 트랜잭션(Transaction)이라고 부른다.트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 논리적인 단위다. 프로그램의 데이터는 일반적으로 데이터베이스(DB)에서 관리되는데 이 DB의 데이터에 여러 트랜잭션이 동시에 접근하고 변경할 때, 별도의 조치를 하지 않는다면 여러 오류가 발생할 수 있다. 물건 A의 수량이 1개 남았는데 그것을 2명이 모두 주문에 성공했다면 어떻게 될까? 판매자 입장에선 상당히 난처하겠지만 어느 정도 고객 응대로 해결 할 수 있는 문제다. 하지만 자릿수가 정..
2025.05.31 -
✨ 스프링 빈(Bean) 조회: 컨테이너 객체 활용 가이드
스프링에서 스프링 빈(Bean) 조회는 스프링 컨테이너(Spring Container)에 등록된 객체들을 찾아보는 방법이다. 빈 확인은 주로 테스트(Test) 상황에서 많이 활용한다. 빈 등록 방법은 크게 자동 빈 등록(Automatic Bean Registration)과 수동 빈 등록(Manual Bean Registration)으로 나뉘며, 등록 방법에 따라서 조회 방법 또한 달라진다.🎯 주요 사용 목적스프링 빈 조회는 다음과 같은 목적으로 사용된다.등록된 빈 확인 : 원하는 빈이 제대로 등록(Registration)되었는지 확인하고, 어떤 빈들이 등록되어 있는지 전체적으로 파악(Overall Grasp)한다.문제 해결 : 의존성 주입(Dependency Injection)이 제대로 되었는지 확인하..
2025.05.29 -
스프링 내장 Order 어노테이션 자동 임포트 문제
문제 상황// 의도: 주문 생성 메서드 작성public Order createOrder(long memberId, String itemName, int itemPrice) { // ...}// 결과: IDE가 자동으로 추가한 잘못된 importimport org.springframework.core.annotation.Order;원인Spring Framework에 이미 Order라는 어노테이션이 내장되어 있음IDE가 스프링 관련 클래스를 우선적으로 임포트하는 경향이 있음같은 이름의 클래스가 존재할 때 IDE의 자동 임포트 우선순위 문제문제 식별 방법// 잘못된 참조 시 메서드 시그니처가 이렇게 변환됨public org.springframework.core.annotation.Order createO..
2025.05.27 -
계산기 만들기
인터페이스 정의 단계전체적인 구현을 하는 단계사용하려는 메서드 등 필요한 기능들을 미리 정의interface Calculator { double add(double num1, double num2); //더하기 double subtract(double num1, double num2); //빼기 double multiply(double num1, double num2); //곱하기 double divide(double num1, double num2) throws ArithmeticException; //나누기}계산 메서드용 클래스(BasicCalculator)간단한 사칙 연산 구현class BasicCalculator implements Calculator { @Overrid..
2025.05.22 -
자바의 논리 연산자
기본 이해개념 정의논리 연산자는 boolean 타입의 값을 연산하는 연산자로, 조건문과 제어문에서 복합적인 조건을 처리하는 데 사용된다.일상생활 비유AND(&&) : 도서관 출입 시 "학생증이 있고" + "마스크를 착용해야" 입장 가능OR(||) : 결제 시 "현금 또는 카드" 중 하나만 있으면 가능NOT(!) : "비가 오지 않음" = "맑음"존재 이유와 목적필요성복잡한 조건의 표현다중 조건 검사코드의 가독성 향상실제 개발에서의 역할사용자 입력 유효성 검사보안 권한 확인비즈니스 로직 구현핵심 구성요소주요 연산자AND (&&)모든 조건이 true일 때만 true 반환Short-circuit 평가 지원OR (||)하나라도 true면 true 반환Short-circuit 평가 지원XOR (^)두 조건이 다를..
2025.05.21 -
부동 소수점에 대해서(무한 소수, 소수점 오차)
소수(Decimal Number)란 무엇인가?10진법에서의 소수는 정수가 아닌 분수를 0과 .(소수점) 그리고 1~9까지의 자연수를 활용해서 표현하는 방법이다. 0.1은 1/10을 표현한 것이고 0.5는 5/10를 표현한 것이다. 소수는 기본적으로 분수의 다른 표현법이며, 소수점 왼쪽은 정수부, 오른쪽은 소수부라고 한다. 소수부의 각 자리는 10의 거듭제곱분의 1을 의미한다.그런데 여기서 문제점이 발생한다.컴퓨터에서 소수점 연산 시 오차 문제수학적으로 예상되는 값과 실제로 나오는 값이 다르다. 이유는 프로그래밍 언어가 0과 1로 이루어진 2진법을 사용하기 때문이다.// 부동 소수점 나머지 연산let remainder3 = 3.14 % 2; // 1.14console.log("부동 소수점 나머지:", re..
2025.05.21 -
자바의 비교 연산자
기본 이해개념 정의비교 연산자는 두 피연산자의 크기나 동등성을 비교하여 true/false의 논리값을 반환하는 연산자다.일상생활 비유체육대회에서 달리기 순위 비교시험 점수 합격선 판단쇼핑몰에서 상품 가격 비교존재 이유와 목적필요성프로그램의 흐름 제어데이터 검증조건부 실행 결정실제 역할조건문의 기준 제공데이터 필터링정렬 알고리즘 구현유효성 검사해결하는 문제들데이터 범위 검증입력값 유효성 확인비즈니스 로직 구현핵심 구성요소주요 연산자== : 동등 비교!= : 비동등 비교 : 큼= : 크거나 같음작동 방식int a = 5;int b = 3;boolean result1 = a > b;boolean result2 = a 연산자 우선순위단항 연산자산술 연산자비교 연산자논리 연산자주의사항과 일반적 오류일반적 실수객..
2025.05.21 -
CSS 우선순위와 미디어쿼리 적용 원칙
CSS 우선순위(Specificity) 기본 원칙CSS는 캐스케이딩(Cascading) 원칙을 따른다.cascade는 "a process whereby something, typically information or knowledge, is successively passed on""무언가(일반적으로 정보나 지식)가 연속적으로 전달되는 과정이"라는 의미를 가지고 있다.그런 단어의 의미처럼 캐스케이딩은 "상속과 우선순위를 포함하는 CSS의 스타일 적용 체계"라고 할 수 있다. 실제 CSS의 우선순위는 다음과 같다.!important인라인 스타일ID 선택자 (#)클래스(.)/속성([])/가상(:) 선택자요소(태그) 선택자전체 선택자(*)미디어쿼리 적용 규칙그런데 우리가 CSS를 적용하다보면 반응형 디자인을 ..
2025.05.20 -
자바 산술 연산자와 오버 플로우/ 언더 플로우
기본 이해산술 연산자는 수학적 계산을 수행하는 프로그래밍 언어의 기본 연산자다.계산기의 기본 버튼들(+, -, ×, ÷)과 동일한 역할을 수행한다.작동 방식int a = 10;int b = 3;int sum = a + b; // 덧셈int diff = a - b; // 뺄셈int mult = a * b; // 곱셈int div = a / b; // 나눗셈int mod = a % b; // 나머지자바의 타입 승격(Type Promotion) 규칙을 따른다.///데이터 타입 크기byte: 1바이트 (-128 ~ 127)char: 2바이트 (0 ~ 65535)short: 2바이트 (-32768 ~ 32767)int: 4바이트 (-2^31 ~ 2^31-1)long: 8바이트 (-2^63 ~ 2^63-1)fl..
2025.05.19 -
자바의 부호/증감 연산자
기본 이해개념 정의부호/증감 연산자는 변수의 값을 증가시키거나 감소시키는 단항 연산자다.종류증가 연산자(++): 값을 1 증가감소 연산자(--): 값을 1 감소부호 연산자(+, -): 양수/음수 표현작동 방식int x = 5;x++; // x = x + 1과 동일x--; // x = x - 1과 동일증가 연산자++와 동일한 연산을 하는 방법이 2가지 더 있는데 작동 방식이 조금 다르다.byte b = 127;b = b + 1; // 컴파일 에러b += 1; // 정상 작동 (-128이 됨)b++; // 정상 작동 (-128이 됨) 때문에 특수 상황에서 연산 후 결과 값도 달라진다.b+1의 경우 b가 연산 시 자동으로 int로 승격(promotion)되고 1도 int 타입이..
2025.05.19