분류 전체보기
-
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 관련 ..
-
IPC - pipe운영체제 2025. 4. 26. 19:48
IPC (Interprocess Communication)프로세스끼리 정보를 주고받는 방법이다. IPC를 구현하는 여러가지 방법- pipe : 한 프로세스의 write() 데이터를 다른 프로세스에서 read()로 읽는 방법- socket : 네트워크 or 로컬에서 데이터 통신하는 방법 (ex 서버-클라이언트)- shared memory : 한 메모리 영역을 둘 이상의 프로세스가 함께 사용하는 방법 (ex .so 라이브러리)- signal : 프로세스 간 이벤트 알림 사용, 비동기적으로 동작해 프로세스의 흐름에 개입하는 방법 (ex 부모가 kill(pid, SIGTERM) 호출시 자식 강제종료됨)- return values : 자식 프로세스 종료시 부모에게 결과값리턴하는 방법 (ex 정상종료시 exit(0..