본문 바로가기

전체 글134

[Socket] 웹소켓 (WebSocket) 웹소켓(WebSocket)?- 양방향 통신 웹소켓은 웹 브라우저와 서버 간의 양방향 통신을 가능하게 하기 위해 설계된 프로토콜 과정1. 핸드셰이크(Handshake)- 웹소켓 연결은 표준 HTTP(S) 요청을 통해 초기화됨.- 클라이언트가 서버에 웹소켓 연결을 요청하고, 서버가 이를 수락하면 HTTP 연결이 웹소켓 연결로 업그레이드됨.  - 클라이언트가 서버에 보낸 HTTP 요청에는 Upgrade: websocket 헤더가 포함  - 서버가 이를 수락하면 응답에 101 Switching Protocols 상태 코드와 함께 웹소켓 프로토콜로의 업그레이드를 명시// 클라이언트 요청 예시GET /chat HTTP/1.1Host: example.comUpgrade: websocketConnection: Upgr.. 2024. 5. 28.
[Socket] 소켓? 소켓(Socket)?- 네트워크 상에서 두 프로그램 간의 통신을 가능하게 하는 소프트웨어 엔드포인트.- 다른 기기, 같은 기기 내의 프로세스 간에 데이터를 주고받을 수 있음.- 소켓은 OSI 모델의 전송 계층(Transport Layer)에 위치, TCP/IP 또는 UDP/IP와 같은 프로토콜을 통해 데이터를 전송.소켓의 종류1. TCP 소켓 (스트림 소켓)- 연결 지향적(연결을 설정하고 통신을 시작)- 신뢰성 있는 데이터 전송 (데이터 순서 보장, 손실 시 재전송)- 예: 웹 브라우징(HTTP), 이메일(SMTP), 파일 전송(FTP) 2. UDP 소켓 (데이터그램 소켓)- 비연결 지향적(연결을 설정하지 않고 통신)- 신뢰성 없는 데이터 전송 (데이터 순서 보장 없음, 손실 시 재전송 없음) 예: 실시.. 2024. 5. 28.
[Redis] 레디스를 메시지 브로커로 사용하기 메시지 브로커의 필요성- 여러 모듈이 서로 느슨하고 적절하게 연결시킨 구조를 선호하는데, 이떄 탄탄한 상호작용이 필요해 메시지 브로커를 필요로 한다.- 서비스 간 커넥션이 실패하는 상황은 언제나 발생할 수 있으며, 되도록 비동기 통신하는 것을 권장한다.- 메시지를 어딘가에 쌓아 둔 뒤 나중에 처리할 수 있는 채널을 만들어 주는 것, 이것이 메시지 브로커의 핵심 역할이다. 메시지 브로커 타입1. 메시징 큐- Producer: 데이터를 생성하는 쪽- Consumer: 데이터를 수신하는 쪽  2. 이벤트 스트림- Publisher: 데이터 생성- Subscriber: 데이터 조회 이벤트 큐 vs 이벤트 스트림1. 방향성- 메시지 큐는 생산자가 소비자 큐로 데이터를 직접 푸시. 2곳에서 필요하면 생산자는 2곳으.. 2024. 5. 27.
[망상] AI 시대에서 살아남는 방법 고민 망상글입니다.AI 발전과 대체얼마전 GPT-4o 출시 후 적지 않은 충격을 받았다. 사용해보니 대답 속도도 빠르고 정보 질도 좋으니 사람보다 나을 수 있겠더라. AI가 아직은 특정 부문에서 인간을 대체하기 이르다는 것에 동의한다. 다만 시간이 흘러도 그럴까? 나는 머지 않은 미래에 대부분의 인간은 대체할 수 있을 정도로 기술, 성능이 발전할 것이라 생각한다. (정책과 규제를 제외하고) 로봇과 전쟁로봇 공학 역시 AI와 결합하여 기술 발전 속도가 빨라지고 효용도 늘고 있다. 그릇 수거, 서빙 로봇은 이미 상용화되어 사용되고 있지 않은가? 근데 이것이 인류에게 좋게 작용을 할까? 기술이란 건 결국 필요한 곳에 쓰이기 마련이고 제약은 더 강한 동기가 있다면 의미가 사라지는 것이라 생각하는데... 이 기술은 좋.. 2024. 5. 18.
[회고] 백번 깨우침보다 한 번 행함이 낫다 *백문이 불여일견(百聞而 不如一見)이요, (*백번 듣는 것보다 한번 보는 게 낫고,)*백견이 불여일각(百見而 不如一覺)이며, (*백번 보는 것보다 한번 깨우침이 나으며,)*백각이 불여일행(百覺而 不如一行)이라. (*백번 깨우침보다 한번 행함이 낫다) 완벽한 계획보다 한 번 행함이 낫다. 나는 계획 세우는 걸 꽤 좋아하는 편이다. 인생에서 가장 재미있는 순간이 계획 세울 때 아닐까? 다만 살아온 날을 되짚어보니 꽤 많은 계획들이 시간이 흘러 쓸모가 사라지거나 부채감으로 남아있더라. 그래서 가끔은 내가 세운 계획에 짓눌려 위축되기도 했던 거 같다.  몰입을 위한 큰 그림은 필요하다. 다만 너무 깊은 고민과 계획은 사치라는 것이 내 결론이다. 인생도 애자일하게 살아야한다. 헷갈리지 말자, 계획을 세우지 말자는.. 2024. 5. 18.
[iOS] rsync error: some files could not be transferred 증상아카이브 시 아래 에러 출력rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/4f964b34-e7b8-11ee-80f6-fe8bc7981bff/Library/Caches/cohttp://m.apple.xbs/Sources/rsync/rsync/mai 해결1. Readlink 코드 수정https://jpointofviewntoe.tistory.com/157 2. Cocoapod 버전 업그레이드https://github.com/NativeScript/NativeScript/issues/10259#issuecomment-1514613194 2024. 5. 12.
[iOS] error: SDK does not contain 'libarclite' at the path 증상빌드 시 아래 에러 발생error in Xcode File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a 해결팟 타겟 버전을 특정 버전 이상으로 올려서 해결 https://forums.developer.apple.com/forums/thread/728021 Podfile 하단post_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| target.build_c.. 2024. 5. 12.
[Redis] 5장. 레디스를 캐시, 세션으로 사용하기 TL;DR레디스는 캐시, 세션 용도로 사용되며 캐시는 데이터 저장소의 서브 셋, 세션은 정해진 시간동안 저장되는 정보라는 차이점이 있다.레디스는 평균 읽기 및 쓰기 작업 속도가 1ms이기 때문에 성능 개선이가능하며, 데이터베이스 커넥션 I/O 를 줄여 CPU, 메모리 리소스를 줄일 수 있다.장애 대응 기능을 갖춘 고가용성 솔루션이며, 스케일 아웃을 지원한다.캐시데이터의 원본보다 더 빠르고 효율적으로 액세스할 수 있는 임시 데이터 저장소효과적인 케이스원본 데이터 저장소에서 원하는 데이터를 찾기 위해 검색하는 시간이 오래 걸리거나, 매번 계산을 통해 데이터를 가져오는 것쓰기보다 읽기에 특화된 데이터인 경우캐시에 저장된 데이터가 잘 변하지 않는 데이터인 경우캐시에 저장되는 데이터가 자주 검색되는 데이터인 경우.. 2024. 5. 8.
[Redis] 4장. 레디스 자료 구조 활용 사례 실시간 리더보드배경리더보드: 경쟁자들의 순위와 현재 점수를 보여주는 순위표절대적 리더보드모든 유저를 정렬시켜 상위권만 표시하는 것을 absolute leaderboard 라고 함상대적 리더보드사용자마다 다른 데이터를 보여줌구로 직장인 대상 순위필요상대적 리더보드의 경우 다양한 관점에서 데이터 계산하고 통계 내야하기 때문에 여러 가지 수학적 계산이 빠르게 수행되어야 함관계형 데이터베이스 사용할 경우 항상 정렬해서 가져와야 한다.해결Sorted set 은 항상 정렬해서 저장하기 때문에 매번 정렬할 필요가 없다.ZUIONSTORE로 스코어 합한할 수 있음특정 SET 에 가중치 줄 수 있음최근 검색 기록배경최근 검색 기록유저별로 다른 키워드 노출검색 내역은 중복 제거가장 최근 검색한 5개 키워드만 사용자에게 노.. 2024. 5. 5.
[Redis] 3장. 레디스 기본 개념 TL;DRRedis는 range 검색할 때 end index 를 포함함String최대 512MBBinary-safe 하게 처리되어 이ㅁ지 같은 바이트 값 등 다양한 데이터 저잦ㅇ 가능key-아이템 1대1 연결되는 유일한 자료 구조 → 나머지 자료 구조를 보면 된다커맨드SETOptionsNX: 키 없는 경우XX: 키 이미 있는 경우GETINCR, INCRBY, DECR, DECRBY원자적으로 처리 가능Race condition 방지타이밍 순서에 따라 요청 무시됨SET hello wolrdGET helloList순서를 가지는 문자열 목록최대 12억개스택, 큐로 사용된다특징LPUSH, RPUSH, LPOP, RPOP 커맨드는 당연 O(1)인덱스 들어가면 O(n)커맨드추가LPUSH, RPUSHLINSERT데이터.. 2024. 5. 5.