전체 글 64

[Oralce] 락 쿼리 (Lock Query), 실행 흐름

락 쿼리(Lock Query) 란?데이터베이스에서 특정 데이터를 수정하거나 삭제하기 전에 미리 Lock을 걸어, 다른 트랜잭션이 동시에 해당 데이터를 변경하지 못하도록 제어하는 쿼리. 왜 락 쿼리가 필요한가?1. 동시 업데이트 충돌A트랜잭션, B트랜잭션이 동시에 같은 데이터를 w 하려고 하고, B가 마지막에 끝난 트랜잭션이라고 가정해보자. 그러면 마지막에 B 트랜잭션이 수정한 값만 DB에 저장된다. 2. r-w 충돌A트랜잭션이 수정 중인 데이터를 B 트랜잭션이 동시에 읽게되면 시점에 따라 수정 전의 값을 조회하게됨. 예를들어, 입금 처리하는 트랜잭션이라고 가정을 해보자. A는 +50원, B는 +30원 을 처리하는 트랜잭션이고 사용자의 잔고에는 100원이 있다고 하자. A와 B가 동시에 트랜잭션 처리를 하..

SQL 2025.10.09

[C] 포인터, 이중 포인터 구조

해도해도 헷갈리는 포인터 & : 메모리 주소int a = 10;printf("%p", &a); : a의 주소 0x7ffeed4cf61c * : 값int a = 10;int *p = &a; // p는 a의 주소를 저장printf("%d", *p); : *p 는 p가 가리키는 주소 안의 값 즉, 10 int *p : 포인터 p#include int main(void) { int a = 10; int *p = &a; printf("a = %d\n", a); printf("&a = %p\n", (void*)&a); printf("p = %p\n", (void*)p); printf("*p = %d\n", *p); return 0;} 이라면a = 10&a = 0x7ffeed..

C 2025.10.09

[C] 메모리 관리 원칙

메모리 관리는 누가 하느냐프로그램이 실행되기 위해서는 메모리가 필요하다. RAM(주기억장치)은 프로그램이 작업을 수행하는 공간이고, 이 공간이 넉넉할 수록 컴퓨터는 더 많은 작업을 빠르게 처리할 수 있다. 한정된 자원을 충돌없이 효율적으로 사용하기 위해서는 정교한 메모리 관리가 필요한데, 이 메모리 관리는 응용프로그램이 수행하지 않고 OS가 전담한다. OS가 메모리를 관리하는 원칙1. 메모리 관리의 주체는 운영체제이다.응용프로그램은 메모리를 직접 제어하거나 임의의 주소에 접근 불가능하다. 대신 메모리가 필요할 경우 os 에 요청한다.윈도우나 리눅스같은 운영체제는 메모리 보호 기능(Segmentation, Paging, Virtual Memory 등등) 으로 각 프로그램 메모리 공간을 격리하고 있으며, 프..

C 2025.07.12

[C] 동적 메모리 할당이란? (Dynamic Memory Allocation)

메모리 할당프로그램이 실행되기 위해서는 메모리가 필요하다. 실행 파일 자체가 메모리에 Load 되어야 실행될수 있고, 프로그램이 작업을 위해 선언하는 변수들도 모두 메모리에 할당된다. int a (4byte)double b (8byte) 라는 변수를 사용한다고 했을 때, 컴파일러가 변수 타입에 맞는 크기만큼 메모리를 할당한다.=> 이런식으로 프로그램 작성 시 미리 메모리 필요량을 알려주는 것이 "정적 할당(Static Allocation)" 동적 메모리 할당이란?프로그램 작성할 떄 (complie time or design time) 메모리 필요량을 지정하는 정적 할당과 달리, 실행중에(run time) 필요한만큼 메모리를 할당하는 기법이다. 동적 메모리 할당은 어느 경우에 필요할까?int a[50]; ..

C 2025.07.12

[C] 구조체 주소체계

구조체 포인터에 대해 알아보자.구조체는 메모리상에 연속된 블록으로 저장되고, 그 주소가 가리키는 포인터를 선언하여 접근할 수 있다. 목표1. 구조체 정의 >> 선언 >> 초기화2. 구조체 포인터 선언 및 멤버 접근3. 각 멤버의 메모리 주소와 값 확인4. 구조체 메모리 레이아웃 해석 간단한 구조체를 선언하고 메모리 구조를 살펴보자.struct Person { char name[20]; // 20bytes int age; // 4bytes float height; // 4bytes}; struct Person p1; struct Person *ptr; // 포인터 변수 초기화 ptr = &p1; // 구조체 멤버 값 설정 strcpy(p1.name, "hr..

C 2025.07.06

[C] 예외처리, 오류처리

1. 예외처리c는 예외처리를 위한 기능이 없다.c++의 try-catch나 JAVA의 throw/catch 구문과 같은 예외처리 메커니즘을 지원하지 않는다..대신 어떻게 처리하냐? 함수의 반환값, 전역변수(errno), 조건검사(if문), assert 등을 이용해 오류를 처리하는 방식이 일반적이다.FILE *fp = fopen("data.txt", "r");if (fp == NULL) { perror("파일 열기 실패"); exit(1);} 우리 회사도 이런식으로 오류처리를 하는데... 오류를 더 잘 처리하는 방법을 알아보자2. 나쁜 오류처리1) 반환값을 무시하는 경우// malloc 실패 여부를 확인하지 않음char *buf = malloc(1024);strcpy(buf, "hello"); ..

C 2025.06.29

[C] 헷갈리는 연산자 우선순위

*p.f. 은 * 보다 우선함.기대 : p가 가리키는 곳의 f필드 (*p).f실제 결과 : p의 f 오프셋이 가리키는 곳의 값 *(p.f) 이를 해소하기 위해 p->f 연산자를 만들었다고 한다 int *ap[][]가 *보다 우선함기대 : ap는 int 배열을 가리키는 포인터 int(*ap)[]실제 결과 : ap는 int를 가리키는 포인터의 배열 int *(ap[]) int *fp()함수 ()가 *보다 우선함기대 : fp는 int 값을 반환하는 함수 포인터 int (*fp)()실제 결과 : fp는 int 포인터를 반환하는 함수 int *(fp()) (val&mask != 0)==와 != 는 비트 연산자보다 우선함기대 : (val&mask) != 0실제 결과 : val & (ma..

C 2025.06.24

[C] 메모리 초기화 함수 bzero(), memset()

1. bzero() 란?bzero함수는 c언어에서 메모리 초기화 함수로 쓰이고, 포인터 s부터 값을 n byte만큼 0으로 초기화 해주는 함수이다. (n이 0이면 아무 동작도 안함) 표준 c 라이브러리에 포함되어 있고, 링커에서 -lc로 링크됨. 2. memset() 란? memset()도 마찬가지로 메모리 초기화 함수인데, bzero()랑 다르게 메모리 블록을 특정 바이트 값으로 채우는 함수이다. 포인터 b부터 시작해서 len 바이트를 c(int 타입인데 내부적으로 unsigned char로 변환)로 채움 3. 주의할 점 1) bzero() 대신 memset() 쓰기bzero()는 POSIX 표준에서 deprecated 됨. memset()은 C 표준에 포함되어있고, 성능 측면에서도 컴파일러가 최적..

C 2025.06.22

[기사] “30년뒤에 시총 3조달러”···‘젠슨황 악재’ 재해석한 아이온큐 韓창업자

250111 [3줄 요약]젠슨 황의 "유용한 양자컴퓨터는 20~30년 뒤 가능" 발언으로 아이온큐 주가가 40% 이상 폭락.엔비디아가 gpu를 90년대에 만든 뒤 인공지능에 활용되기까지 30년이 걸렸으며, 아이온큐 창업자 김정상 교수는 이 발언을 "30년 후 시총 3조 달러 양자컴퓨팅 기업 가능성"으로 재해석.양자컴퓨팅은 장기적인 혁신 분야로, 30년 내 개인이 활용할 수 있는 시대가 올 것이라고 전망.[시사점/개인 의견 3가지]새로운 기술 분야에서 긴 개발 주기를 투자자들에게 이해시키는 전략적 커뮤니케이션도 중요함을 느꼈다.엔비디아의 gpu 사례로 양자컴퓨팅의 성장 가능성을 예측한 만큼, 인프라 시스템 구축이 핵심 과제가 될 것으로 생각한다.양자컴퓨팅은 장기적 투자 관점에서 혁신적인 기회이며, 시장의 ..

경제 2025.01.11