본문 바로가기

java34

[Java] 프로그래머스 - 옷가게 할인 받기 1. 문제 설명특정 금액 이상 구매 시 차등 할인 적용 (5%, 10%, 20%)소수점 이하를 버린 정수(int)를 반환해야 함. 2. Trouble Shootinganswer = price * 0.95;위와 같이 작성했을 때 컴파일 에러가 발생했다.Java에서 실수를 곱하는 순간 결과값은 기본적으로 double 타입이 되기 때문이다. 3. 해결 방법answer = (int)(price * 0.8);계산된 전체 결과값에 (int)를 붙여 강제로 소수점을 떼어내고 정수로 변환했다.이를 명시적 형변환이라고 한다. 4. 최종 코드class Solution { public int solution(int price) { int answer = 0; if(price >= 100000 .. 2026. 2. 9.
[고성능 선착순 쿠폰 발급 시스템] #3. synchronized의 배신과 비관적 락(Pessimistic Lock) 적용 1. JMeter을 활용한 부하 테스트지난 포스팅에서 기본적인 쿠폰 발급 로직을 구현했고 curl을 이용해 단일 요청(Single Thread) 환경에서 테스트했을 때는 정상 작동을 확인했지만, 접속자가 늘어났을 때는 어떻게 작동하는지 확인할 필요가 있다고 느꼈습니다. 우선 제 서버가 얼마나 연약한지 확인해보기 위해 JMeter을 활용해서 테스트를 진행해보려 합니다.시나리오: 쿠폰은 딱 100장.공격: 100명의 유저가 동시에 발급 요청을 보낸다.기대 결과: 재고는 0이 되고, 발급 내역은 정확히 100개여야 한다.부하 테스트를 위해 Apache Jmeter 공식 사이트에 접속해서 Binaries 항목에 apache-jmeter-5.6.3.zip(윈도우 기준)을 다운로드 했습니다.편한 위치에 압축 해제 .. 2026. 1. 9.
[고성능 선착순 쿠폰 발급 시스템] #2. 프로젝트 세팅 및 기본 발급 로직 구현 1. 패키지 구조: 유지보수를 위한 계층형 구조그동안 공부할 때는 기능을 구현하기만 급급하여, 한 패키지에 모든 클래스를 몰아넣곤 했습니다.이번 프로젝트는 유지보수와 확장성을 고려하여 스프링의 표준적인 계층력 구조를 선택했습니다. vanilalatte.couponsystem 이라는 패키지 경로 하위에 아래와 같이 역할을 분리했습니다.- 패키지 구조controller: 외부 요청을 받는 창구 (Web Layer)service: 비즈니스 로직을 수행하는 핵심 (Service Layer)repository: DB에 접근하는 역할 (Data Access Layer)domain: 핵심 도메인 객체 (Entity)dto: 계층 간 데이터 교환을 담당하는 객체현재는 간단한 예제라 사용하지 않았지만, 추후 응답 데이터.. 2026. 1. 7.
[고성능 선착순 쿠폰 발급 시스템] #1 프로젝트 기획 및 기술 스택 선정 1. 프로젝트 선정 이유단순한 CRUD(게시판) 기능을 구현해 보면서 백엔드의 기초를 다졌습니다. 하지만 실제 서비스에서는 수만 명이 동시에 접속할 때 서버가 버틸 수 있는가라는 문제에 직면하게 됩니다. 이번 프로젝트는 단순히 데이터를 저장하는 것을 넘어, 대용량 트래픽 상황에서의 동시성 제어와 시스템 안정성을 확보하는 백엔드 개발자의 핵심 역량을 기르기 위해 시작했습니다. 2. 프로젝트 개요명칭: 고성능 선착순 쿠폰 발급 시스템목표: 초당 1만 건 이상의 요청에도 데이터 부정합 없이 정확히 1000개의 쿠폰을 발급하는 시스템 구축.3. 기술 스택 및 선정 이유단순히 유행하는 기술이 아니라, '왜 이 기술이 필요한가'에 집중했습니다.Java 17 & Spring Boot 3.5.9: 최신 Java 환경에.. 2026. 1. 5.