전체 글
-
GraphQL 장단점, 사용법spring 2025. 7. 19. 17:33
고민..한번의 api 요청으로 10개의 테이블의 쿼리를 날려서 100개 이상의 값을 가져와야 했다.또, 원하는 필드값만 요청하고 싶어도 불필요한 값들도 같이 가져오는 문제가 있었다. 이를 피하기 위해 여러 엔드포인트를 만들어야 했다.이럴 바에는 하나의 엔드포인트를 사용하며 요청 양식을 유연하게 변경 가능한 GraphQL이 더 적합할 것 같았다. GraphQL의 장점1. 네트워크 비용을 줄일 수 있다.클라이언트가 필요한 데이터만을 정확히 요청 가능하여 over fetching(필요 이상의 데이터를 받는 것), under fetching(필요한 데이터를 충분히 받지 못하는것)을 방지한다. 2. 엔드포인트, DTO를 여러개 만들지 않아도 된다.단 하나의 엔드포인트로 모든 요청을 커버할 수 있다. 3. 버전..
-
FCM 과 OneSignal 비교카테고리 없음 2025. 7. 6. 19:04
앱 푸시 알림을 구현하기 위해 관련 플랫폼을 찾아보니 FCM(Firebase Cloud Messaging)과 OneSignal이 많이 쓰이고 있어 둘을 비교해보았다. (2025년 7월 기준)가격두가지 모두 기본 푸시 알림 전송은 무료이며, 별도 서비스에 따라 과금된다. 보안 관련OneSignal의 무료 플랜은 사용자 데이터가 제3자에게 제공될 수 있으므로, 개인정보 보호가 중요한 서비스는 유료 플랜을 써야 한다. FCM은 자체적으로 데이터 판매를 하지 않아 안전하다. 지원 플랫폼두 서비스 모두 안드로이드, iOS, Web을 지원한다.OneSignal은 이메일, SMS도 추가 지원한다. 무조건 도착 보장 가능한가?두 플랫폼 모두 "최선의 노력(best effort)" 기반의 시스템이기 때문에 절대적인 1..
-
[Spring] 애플리케이션 이벤트spring 2025. 6. 29. 13:42
이벤트는 컴포넌트 간의 결합도를 감소시키고 도메인 간의 의존성을 감소시켜 재사용성을 높이기 위해 사용한다.스프링에서 이벤트는 도메인 이벤트와 애플리케이션 이벤트로 나뉘는데, 이 중 구현이 쉬운 애플리케이션 이벤트에 대해 알아보겠다.스프링 이벤트 구조는 이벤트 퍼블리셔(Publisher), 이벤트 리스너(Listener), 이벤트 핸들러로 나뉜다. 실행 흐름 1. 퍼블리셔가 이벤트를 발행2. 이벤트를 모든 적합한 리스너에게 이벤트를 전달3. 리스너의 핸들러 메서드가 동기적/비동기적으로 처리 구현하기게시글(Post) 저장시 알림을 보내는 로직을 작성해보려고 한다.이벤트 클래스 정의이벤트 클래스는 이벤트를 구분하는 식별자 역할을 한다. 이를 이용하여 적합한 리스너를 매칭한다.또한 이벤트 핸들러에서 필요한 정보..
-
동기화 - Race condition, Critical Sections, mutex(lock), deadlock운영체제 2025. 6. 7. 20:55
목차동기화의 목적Race Condition(경쟁 상태)해결법 - Synchronization(동기화)Data Race (데이터 경쟁)Critical Sections (임계 구역)Progress Graphs동기화 방법Atomic Operations - XCHG(), CMPXCHG()Mutual Exclusion (상호 배제) - Mutex, SemaphoreDeadlock, Deadlock 회피법Progress Graphs로 나타낸 Deadlock여러 프로세스가 동시에 공유 메모리에 접근할때 원치 않는 결과가 나타날 수 있다.예를 들어, 두 스레드가 같은 계좌 정보를 메모리에서 읽고 각각 출금하는 경우, 잔액 부족 체크를 통과하고 둘다 출금될 수 있다.이와 같은 문제를 통틀어 Race Condition이라..
-
공유메모리와 캐시 일관성 문제(쓰기 전파)운영체제 2025. 6. 1. 10:20
공유 메모리를 사용하는 형태는 두가지가 있다.1. 같은 프로세스 내의 여러 스레드 간 공유 메모리 ex) 스레드 간 데이터 공유2. 서로 다른 프로세스 간 공유 메모리 ex) 공유 메모리 IPC 이중 두번째 방법에 대해 알아보자. 프로세스 간의 공유 메모리 생성 방법공유 메모리 생성 방법으로는 3가지가 있다.방법1) 익명 메모리 생성 (부모-자식 간) - 부모-자식 프로세스 간의 메모리 공유가 필요할때 사용한다. 단, 다른 프로세스에서 접근이 불가능하다.방법2) 이름 있는(shared) 메모리 생성- /dev/shm 아래에 파일처럼 생성된다. 단, 파일 시스템이 아닌 커널 내부에 존재한다. - 주로 IPC 구현 용도로 사용된다. 방법3) 일반 파일 사용 - 일반 파일을 공유메모리로 사용하는 방식이..
-
IPC - signal(), kill()운영체제 2025. 5. 24. 15:30
Signal이란?IPC의 여러 방법 중 하나다. 즉, 프로세스끼리 통신하는 방법이다.다른 IPC와는 다르게 Signal은 비동기적이라는 특징이 있다.사용 목적프로세스 간의 이벤트 전달을 위한 기능이다. 제어 흐름(control flow) 중 외부에서 개입하기 위한 수단으로 사용된다.예를 들어, 터미널 실행 중 Ctrl+C를 누르면 강제종료되는데, 이때 Signal이 사용된다.사용 예시아래는 프로그램이 무한루프를 돌며, 도중에 Ctrl+C를 누르면 "Caught signal"을 출력하며 강제종료되는 코드다.#include void handler(int sig) { printf("Caught signal %d\n", sig);}int main() { signal(SIGINT, SIG_DFL); /..
-
가상 메모리와, 공유메모리 / COW와 mmap()운영체제 2025. 5. 10. 20:46
가상메모리란, cpu가 실제 메모리처럼 사용하는 추상적인 메모리 공간을 의미한다.즉 물리적으로 존재하는 메모리는 아니다. 사용 이유기술 발전에 따라 실행파일이 물리 메모리보다 더 커지는 문제가 발생했다.이를 해결하기 위해 필요한 부분만 물리 메모리에 올려 실행할 수 있게 만들었다. 물리 메모리만 사용시물리메모리(메인메모리)에 프로그램 전체를 올리는 방법이다.cpu가 물리주소로 직접 물리 메모리에 접근한다. 가상 메모리 사용시위 그림과 다르게 MMU(Memory Management Unit)라는 것이 추가로 생겼음을 알 수 있다.MMU는 가상주소를 물리주소로 변환해주는 하드웨어 장치다.즉 cpu에서 MMU에게 가상주소를 보내면 MMU가 그에 맞는 물리주소로 변환하고, 해당 물리 주소로 접근해 데이터를 가..
-
file descriptor (fd)운영체제 2025. 5. 3. 13:11
file descriptor란? (fd)운영 체제에서 open()한 파일을 식별하는 정수값이다. fd로 줄여서 사용하기도 한다.fd를 통해 해당 파일 읽기/쓰기/삭제/복제 등의 작업을 할 수 있다.기본적으로, fd값 0,1,2는 아래와같이 예약된 값이다. 세 값은 각각 표준 입출력 스트림들을 뜻한다.0: 표준 입력 (stdin)1: 표준 출력 (stdout)2: 표준 오류 (stderr) file descriptor를 받기까지의 과정user모드에서 open() 호출시 파일 경로와 read/write 여부를 인자에 넣고 fd를 리턴받는다.open 호출후 리턴받기까지 커널의 내부 작동 과정을 알아보자.int fd = open("sample.txt", O_RDONLY); - file descriptor 관련 ..