320x100

전체 글 435

서버에서 DB로 UTF-8 데이터 삽입시 데이터가 깨지는 문제

C++ 서버에서 "인벤토리 부족"이라는 텍스트를 DB에 삽입하려고 할 때 다음과 같이 저장되는 문제가 있었다. const char* text = u8"인벤토리 부족"; DB Tool로 직접 붙어 수정한 경우에는 정상적인 한글로 표기가 되었다. 단순히 표시만 깨진 데이터인가 했는데 HEX값으로 봤을 때도 다른 데이터였다. 좌> C3ACC29DC2B8C3ABC2B2C2A4C3ADE280A0C2A0C3ABC2A6C2AC20C3ABC2B6E282ACC3ACC2A1C2B1 우> EC9DB8EBB2A4ED86A0EBA6AC20EBB680ECA1B1 해결하려고 시도한 방법들 1. C:\Program Files\MariaDB 10.5\data\my.ini 파일 내용 추가 [client] default-character..

DB/MYSQL 2022.11.08

SELECT FOR UPDATE

일반적인 SELECT만 하게 되면 Shared lock 이 걸리므로 여러 세션에서 동시에 데이터에 접근이 가능하게 된다. Commit 쿼리를 실행하기 전까지 데이터가 변경되지 않으므로, 다른 세션에서 데이터 변경 작업(Update, Delete)이 있는 경우 데이터의 일관성이 깨지게 된다. 대신에 SELECT ~ FOR UPDATE 를 사용하게 되면 반환된 ROW에 대해 row level lock을 걸 수 있다. 다른 세션에서 Select은 가능하나, Update나 Delete 쿼리에 대해 단일 수행과 일관성을 보장하므로 변경할 수 없다. -- SELECT 할 때 LOCK을 제어할 수 없으면 무한정으로 기다린다. SELECT c FROM t WHERE key = 1 FOR UPDATE; -- SELECT..

DB/MYSQL 2022.10.20

[NDC 2014] 분산서버 구축의 ABC

분산이란? Machine의 하드웨어 부하를 분산(Network Traffic, CPU, Memory) 분산 서버는 기본적으로 독립적이여서 서로에게 영향을 주지 않음 A+B=C가 아니라 A A A DB의 Sharding Mapping: share 정보를 테이블에 저장하고 cache를 이용해 성능을 최적화 다만 mapping table은 20byte * 1million 만 해도 20M가 되기 때문에 부하가 생김 Dynamic: 기준 값을 key로해서 data를 분산 저장 하지만 key 분산 값이 바뀌면 resharding 문제 발생 Sharding은 DB에서가 아닌 Code에서 처리해야 한다. 병목 CPU: 파이프라인 구성으로 만들지 말자. 하나의 요청이 A서버->B서버->C서버로 완료가 되면 원활한 확장이..

NDC/Server 2022.10.19

[NDC 2014] 멀티쓰레드 프로그래밍이 왜이리 힘드나요?

멀티쓰레드 프로그래밍의 어려움 - Data Race: 2를 5천만번 더했는데 1억이 안나옴 -> lock을 사용해 해결 - 성능: 싱글 쓰레드보다 느려짐 -> lock을 쓰지 말자 - 컴파일러: 변수를 참조했는데 무시 -> volatile 키워드 또는 atomic으로 해결 - CPU: 프로그램 실행 순서를 자기 마음대로 변조 -> asm mfence 또는 atomic으로 해결 Lock-Free 알고리즘이란? 여러 개의 쓰레드에서 동시에 호출했을 때에도 정해진 단위 시간마다 적어도 한 개의 호출이 완료되는 알고리즘 호출이 다른 쓰레드와 충돌했을 경우 적어도 하나의 승자가 있어서, 승자는 delay 없이 완료 된다. LOCK을 사용하지 않는다고 해서 모두가 lock-free 알고리즘은 아니며, LOCK을 사..

NDC/Dev 2022.10.18

C# & Unity 면접용 질문?

cheatsheet의 개념으로 적어두자. 1. 변수 우클릭 -> Create -> C# Script 첫 글자가 대문자이고 띄어쓰기가 없음 void Start() == init(), 최초 1회만 실행하게 된다. 출력은 print를 사용 class 이름 == 유니티에서 대본 모양의 아이콘 아래 있는 이름과 일치시켜야 한다. =============================== 2. 자료형 정수 - int(-20억 ~ +20억, 4바이트), short(-30000 ~ +30000, 2바이트), long(8바이트), sbyte(-128 ~ +127), byte(0 ~ 255) 실수 - float(f를 꼭 적어라), double, dscimal(끝에 m을 꼭 붙여라) 문자 - string(" "), char(..

프로그래밍/C# 2022.10.03

NUMA

단어: Non-Uniform Memory Access 의 약자로 불균일 기억 장치 접근이라는 의미다. 메모리에는 하나의 프로세서만 접근할 수 있기 때문에 다른 프로세서들은 기다리게 된다. 이 방식은 성능상 느려지기 때문에 각각의 프로세서에 독립적인 별도의 메모리를 제공해서 Access 충돌을 방지해 성능 향상을 꾀하고 있다. 하지만 이 방식은 하나 이상의 프로세서가 동일 데이터를 필요로 하는 경우 메모리 뱅크들 사이로 데이터를 이동시켜야 하는 경우가 발생하는데, 이는 NUMA의 성능을 떨어뜨리는 요인이다. NUMA에서는 원격 메모리를 얼마나 빠르게 접근하는지가 중요 요소이다. 적은 메모리를 사용하며 독립적으로 다중 프로세스를 띄워 사용하는 프로그램 이라면 NUMA를, 대용량 메모리를 사용하며 단일 프로세..

OS/개념 2022.10.03

[워런 버핏 바이블 2021] 2장 기업 인수

버크셔가 고수하는 기업 인수 지침 [2017] 버크셔의 가치를 높이는 4대 기본요소는 1. 대규모 기업 인수 2. 우리 자회사와 어울리는 협력회사 인수 3. 우리 자회사들의 매출 증대 및 이익률 개선 4. 우리 주식 및 채권 포트폴리오에서 나오는 투자 이익 저금리 기조에서는 부채를 통해 인수 합병이 활발해지는데, 보통 인수 대상 기업의 과거 실적이 인수 기준에 못 미치면 '시너지 효과'를 이야기한다. 하지만 실제로 시너지 효과가 발생하는 경우는 많지 않다. 버크셔는 자기자본 기준으로 인수 타당성을 평가한다. 계속해서 전진하는 미국 [2020] 미국이 탄생한 이후 개인들은 아이디어, 야망, 약간의 자본만으로 새로운 것을 만들어내거나 고객의 경험을 개선해 상상 이상으로 성공을 거두었다. 몇몇 회사들의 예시가..

[워런 버핏 바이블 2021] 1장 주식 투자

미분배 이익의 기여 [2017] 버크셔는 배당하지 않는 이익을 재투자 한다. 미분배 이익을 통해 단기적으론 아니여도, 장기적인 우상향을 기대할 수 있다. ‘내기’에서 얻은 뜻밖의 투자 교훈 [2017] 중요하면서 쉬운 결정에 관심을 집중하고 매매를 삼가해라.투자 기간이 짧다면 주식이 단기 국채보다 위험하지만, 잘 분산된 주식 포트폴리오를 구성한다면 투자 기간이 길어질수록 국채보다 안전해질 것이다. 가중 평균 유형 ROE 20% 이상 기업 [2019] 버크셔에서 보유한 기업들 중 시장 평가액이 가장 큰 종목들은 평균 ROE 20% 이상이다. 이 기업들은 과도한 부채를 쓰지 않고서도 이익을 낸다. 우리는 1년, 10년 뒹 금리를 알 수 없기 때문에 안정적인 기업들을 선택한다. 순수 자본력으로 20% 이상의 ..

320x100