전체 글 284

엔터프라이즈 ORM과 1차캐시

DB CRUD 작업을 쿼리없이 ORM을 처리하면 참 편리한데,여러 언어들과 다양한 ORM들의 차이를 이해하지 못하면, 난감한 상황이 발생하곤 한다.기본적인 ORM의 뜻대로, 객체와 매핑이 되는건 동일하지만동적 타입 언어들과 정적 타입 언어들은 확실히 다르다. 난감한 상황으로써, ORM의 1차캐시에 대해 알아보자. Java진영의 JPA를 예로 들면, Persistence Context (Enitity Manager) 에서 1차캐시를 관리한다.같은 객체를 한번만 조회하고, 이후에는 캐시에서 읽는 효율적인 쿼리동작을 가능하게 한다.1차캐시를 기반으로, CRUD가 즉시 실행되지 않는 형태가 많다. (장점이자 단점인 부분) 전제>> 1차 캐시는 "트랜잭션 범위 메모리 캐시"이다. DB와 동기화되기 전까지는 메모리..

dev/database 2026.02.24

C# ConfigureAwait 이해

C#의 비동기 처리는 아주 사용자 친화적으로 구성되어편리하게 Task + async/await로 구성할 수 있다. 사실 내부 비동기 매커니즘은 복잡한데,SynchronizationContext와 Managed Thread Pool 등등 살펴볼 필요가 있다. 이글의 목적은 ConfigureAwait 를 이해하는것이다. 대략 적인 사용법은await SomeTask().ConfigureAwait(false); 같은 방식인데, ConfigureAwait의 역할은 무엇인가?? ConfigureAwait(false)“원래 컨텍스트로 돌아오지 말고 아무 데서나(대개 ThreadPool) 이어서 실행해도 됨”라이브러리 코드에서 데드락 방지/성능에 유리한 경우가 많음UI 업데이트가 필요하면 false 쓰면 안 됨(돌아올..

dev 2026.01.15

MariaDB 트랜잭션 사용시 고려사항

트랜잭션 설계시, 주의, 고려 해봄직한 내용 Java기준, 멀티쓰레드 + 커넥션 풀 환경이라면, 단일 서버 + 단일 DB 환경일지라도, 동시성 제어가 필요한 환경이다. 데이터 유실, 업데이트 누락, Read -> Write 불일치 등등 반드시, 트랜잭션 + 잠금이 필요하다. START TRANSACTION을 해주더라도, 원자성을 보장해주다는 개념이지, 동시성 제어와는 무관하다. 위험한 방법 1START TRANSACTION;SELECT gold FROM player WHERE account_id=?; -- 그냥 읽기-- 애플리케이션에서 계산UPDATE player SET gold=? WHERE account_id=?;COMMIT;전형적인 “SELECT→비즈니스 계산→UPDATE”다른 트랜잭션이 중간에..

dev/database 2025.12.26

SNS와 수익화

일단 인스타그램(Instagram) 그리고 인플루언서(influencer)를 알아보자. 인스타그램(Instagram) 출시일: 2010년 10월 6일창립자: 케빈 시스트롬(Kevin Systrom) & 마이크 크리거(Mike Krieger)최초 플랫폼: iOS (아이폰 전용 앱으로 시작)안드로이드 버전 출시: 2012년 4월 3일이후 2012년 4월, 페이스북(Facebook)이 약 10억 달러에 인스타그램을 인수하며 폭발적으로 성장 인스타그램 -> 광고플랫폼광고 성장 시기 요약1. 2015년: 공식 광고 플랫폼 도입2015년 9월, 인스타그램이 전 세계적으로 **공식 광고 플랫폼(Instagram Ads)**을 열며 광고 산업이 본격 시작됨페이스북 광고 관리자(Facebook Ads Manager)를..

카테고리 없음 2025.05.29

.net string.GetHashCode() 그리고 Unity

string.GetHashCode() 메소드는 프레임워크 버전 별로 구현이 다르다. .NET Core 3.1 / .NET 6.0이상에서는 프로그램 실행시마다, 값이 바뀜 (not unique), 고유값으로 사용할 수가 없다. 하지만,.NET Framework 4.7.2같은 구 버전에는 항상 값이 동일하다. hash code가 같다고 string.Equals는 아니겠지만, 충분히 고유값으로 사용이 가능하다. Unity 6기준, scriptingBackend나 apiCompatibilityLevel에 관계없이 같은 값을 가진다.

dev/unity3d 2025.03.27

안드로이드 개발시 자동복원 기능 주의사항

자동 복원 조건자동 복원이 정상적으로 이루어지려면 아래 조건을 만족해야 합니다.패키지명이 동일해야 함백업된 데이터는 패키지명 기준으로 저장되므로 패키지명이 다르면 복원되지 않습니다.같은 서명(Signing Key)으로 서명된 앱이어야 함Google Drive의 백업 데이터는 **앱 서명 키(SHA-1 해시 값)**도 함께 저장됩니다.즉, 동일한 패키지명이더라도 다른 키로 서명된 앱을 설치하면 복원이 되지 않습니다.예를 들어, 개발 중 디버그 키(debug.keystore)로 빌드한 앱과 배포용 서명 키로 빌드한 앱은 복원되지 않을 수 있습니다.Google 계정이 동일해야 함백업된 데이터는 사용자의 Google Drive에 저장되므로, 같은 Google 계정으로 로그인해야 복원됩니다.백업이 정상적으로 저장..

카테고리 없음 2025.02.20

http 통신시 중복 로그인을 방지하는 방법 고찰.

기본적인 중복 로그인 방지 방법사용자의 마지막 로그인 정보 저장 사용자가 로그인할 때마다 마지막 로그인 시간 및 기기 정보를 저장 새로운 로그인 요청이 오면 기존 세션을 만료기존 세션 강제 종료 동일한 계정으로 로그인할 경우 기존 세션을 삭제 새 로그인만 허용하고 이전 세션을 무효화Redis 또는 In-Memory 캐시 사용 로그인된 사용자의 세션을 Redis에 저장하고 관리 중복 로그인 요청이 오면 이전 세션을 삭제서버에서 세션을 만료,삭제,무효화 시키면, 해당 세션을 사용하는 클라이언트는 로그아웃 된것으로 간주됨. 로그인 시점에 서버에서 관리되는 세션을 핸들링 해주는것이 핵심. 브라우저에서 Cookie를 사용하여, 세션 처리되는 방식처럼,API에서도 비슷한 구현이 필요한 상황이다. 구현 시나리오 1 ..

dev/web 2025.02.13

이벤트 루프 vs 쓰레드풀 매커니즘 비교

이벤트 루프(Event Loop)와 쓰레드 풀(Thread Pool)은 병렬 작업과 동시성을 처리하는 두 가지 주요 매커니즘입니다.이들은 각각 다른 설계 철학과 구현 방식을 기반으로 동작하며, 사용 사례에 따라 장단점이 있습니다.아래에서 두 방식의 작동 원리와 차이점을 비교하여 설명하겠습니다.1. 이벤트 루프(Event Loop)작동 원리단일 쓰레드 기반:이벤트 루프는 하나의 쓰레드에서 모든 작업을 처리합니다.작업이 블로킹되지 않도록 비동기적 방식으로 요청을 처리합니다.작업 큐(Task Queue):작업 요청이 들어오면 작업 큐에 등록됩니다.이벤트 루프는 큐에 저장된 작업을 하나씩 가져와 처리합니다.비동기 I/O:I/O 작업(네트워크, 파일 등)을 비동기로 실행하여 완료 시 콜백이나 프라미스(약속된 작업..

카테고리 없음 2025.01.06