분류 전체보기(86)
-
[PCCP 기출문제] 1번 / 붕대 감기
문제https://school.programmers.co.kr/learn/courses/30/lessons/250137풀이function solution(bandage, health, attacks) { const [castTime, healPerSec, bonusHeal] = bandage; const maxHealth = health; let currentHealth = health; let consecutiveHealing = 0; let lastAttackTime = 0; // attacks를 Object로 변환하여 빠른 검색이 가능하게 함 const attackMap = {}; attacks.forEach(([time, damage]) => {..
2024.12.02 -
[PCCP 기출문제] 1번 / 동영상 재생기
문제https://school.programmers.co.kr/learn/courses/30/lessons/340213풀이// "mm:ss" 형식의 시간 문자열을 초 단위로 변환function timeToSeconds(timeStr) { const [minutes, seconds] = timeStr.split(":").map(Number); return minutes * 60 + seconds;}// 초 단위를 "mm:ss" 형식의 시간 문자열로 변환function secondsToTime(totalSeconds) { const minutes = Math.floor(totalSeconds / 60) % 60; const seconds = totalSeconds % 60; re..
2024.12.02 -
락 전략 with Laravel
1. 낙관적 락 (Optimistic Lock)개요낙관적 락은 데이터 충돌이 거의 발생하지 않을 것이라는 가정하에 동작합니다. 실제로 데이터를 수정할 때만 충돌을 확인합니다.사용 상황읽기 작업이 쓰기 작업보다 훨씬 많은 경우동시 수정 가능성이 낮은 경우높은 동시성이 요구되는 경우라라벨에서의 구현라라벨에는 version 컬럼을 사용하여 낙관적 락을 구현합니다.use Illuminate\Database\Eloquent\Model;class Product extends Model{ use \Illuminate\Database\Eloquent\Concerns\HasAttributes; protected $fillable = ['name', 'price', 'version'];}// 사용 예시$pro..
2024.10.21 -
[Laravel] beginTransaction, lockForUpdate 활용 (일관성, 동시성) with. ORM
[문제 상황]특정 endPoint에 거의 동시간(1초 이내 시간) 통신요청이 들어와 DB에 중복적인 데이터가 처리됨 [문제 당시 코드]단순한 upsert 코드였지만 1초 이내에 아래 로직을 실행 시 동일한 pk_id를 가진 행이 실행 수 만큼 생성이 되었습니다. $pkId], [$upsertVo]); DB::commit(); } catch (Exception $ee) { DB::rollBack(); } transaction으로 해당 로직을 묶었지만 transaction은 일관성을 유지할 뿐 선택 된 행에 대해 동시성 문제를 해결하지 못하는 상황이 연출되었습니다. [해결 코드]updateOrCreate(['pk_id' => $pkId], [$upsertVo]); ..
2024.08.12 -
DTO DAO 정리 with 라라벨
DTO와 DAO는 데이터베이스와 상호 작용하는데 사용되는 패턴입니다. DTO(Data Transfer Object) - DTO는 데이터베이스와 통신하는 데 사용되는 객체 - 속성과 그 속서에 접근하기 위한 getter / setter 메소드를 이용 - 데이터 저장 및 타입변환 기능 class UserDTO { private $id; private $name; private $email; private $age; public function __construct($id, $name, $email, $age) { $this->id = $id; $this->name = $name; $this->email = $email; $this->age = $age; } public function getId() { re..
2023.04.21 -
아키텍쳐 패턴과 디자인 패턴
[아키텍쳐 패턴] - Application의 전반적인 구조를 설계하는 패턴 - 대표적으로 MVC, MVP, MVVM, SOA(서비스 지향 아키텍쳐), EDA(비동기 방식으로 메세지 전달: Kafka, RabbitMQ).. [디자인 패턴] - Application의 전반적인 구조를 개선하기 위해 사용하는 패턴 - 객체 지향 프로그래밍에서 클래스 및 객체 간의 상효 작용 방법, 책임 분담, 관계 등을 고려하여 문제를 해결 - 대표적으로 Singleton, Factory Method, Observer.. [요약] - 아키텍쳐 패턴은 개발을 시작하기 전 구조를 생각할 때 도입 - 디자인 패턴은 개발 후 효율적인 코딩을 할 때 도입
2023.04.21