[기타] 콜백과 비동기
·
프로젝트 기록/기타
"끝나면 알려줄게"는 대체 어떻게 동작하는 걸까? 콜백이라는 단어가 어디서 왔는지부터 시작해서, 동기와 비동기, 블로킹과 논블로킹까지 정리해보려 한다.1. 콜백이란?나중에 실행할 함수를 미리 맡겨두고,상대가 작업하다가 필요한 시점에 그 함수를 다시 호출하는 것 내가 직접 부르는 게 아니라, 남한테 "이거 가지고 있다가 적당한 때 대신 불러줘" 하고 건네주는 함수다. 이름은 전화 통화의 "call back"에서 유래한다고 한다."지금은 안 되니 번호 남겨주시면 다시 전화드릴게요"의 그 call back이다. 내가 번호를 남기고 끊으면(함수를 넘김),준비됐을 때 상대가 나한테 다시 건다(상대가 함수를 부름). 처음엔 내가 걸었는데 두 번째 통화는 상대가 거는, 거는 방향이 뒤집히는 게 핵심이다. 비유: 식당..
[기타] 원자성이란 무엇일까
·
프로젝트 기록/기타
원자성이란 무엇일까개발을 하다 보면 원자적(atomic)이라는 말을 자주 만난다.데이터베이스 트랜잭션을 설명할 때도 나오고,멀티스레드 환경에서 동시성을 이야기할 때도 나오고,Redis 같은 도구를 쓸 때도 등장한다. 자주 쓰는 말이지만 막상 "원자성이 정확히 뭐냐"고 물으면 두루뭉술하게 답하게 되는 경우가 많다.한번 제대로 정리해보려고 한다.단어의 뜻부터원자를 뜻하는 atom은 원래 더 이상 나눌 수 없는 것이라는 의미를 가진다.그래서 원자성도 비슷한 맥락이다.어떤 연산이 원자적이라는 것은 그 연산이 더 이상 쪼갤 수 없는 하나의 단위로 실행된다는 뜻이다. 전부 실행되거나 아니면 전혀 실행되지 않는다. 중간에 절반만 실행된 어정쩡한 상태는 존재하지 않는다. 여기서 흔히 오해하는 점이 있다.원자적이라는 말..
[모니터링] 서버에서 top 명령어를 치고 뭘 봐야할까?
·
프로젝트 기록/기타
서버에서 top 명령어를 치고 뭘 봐야할까?top - 09:47:46 up 59 days, 23:05, 2 users, load average: 0.03, 0.05, 0.00Tasks: 287 total, 1 running, 286 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.1 hi, 0.1 si, 0.0 stMiB Mem : 27804.6 total, 1219.3 free, 14153.3 used, 13305.5 buff/cacheMiB Swap: 16384.0 total, 16266.0 free, 118.0 used. 13651.3 avail Mem위의 ..
[Spring] AOP 가 뭘까
·
프로젝트 기록/spring
AOP 파헤치기스프링에서 AOP (Aspect Oriented Programming) 는 정말 많이 사용된다.일반적으로 공통된 부가 기능들이 여러 곳에 분포하게 되고 이 중복을 해결하기 위해 사용된다.public void order() { long start = System.currentTimeMillis(); try { transaction.begin(); // 트랜잭션 시작 // === 진짜 핵심 로직 === validateUser(); savePayment(); transaction.commit(); // 트랜잭션 커밋 } catch (Exception e..
[회고] 내가 돌아왔다
·
회고
최근의 일오랜만에 글을 쓴다? 사실 매번 이래왔지만 어떤 글을 써야할지..?영감이 떠오르지 않아 글을 쓰지 않았다. 하지만, 최근! 정말 큰 이슈가 있었고이 경험을 기반으로 글에 대한 영감이 마구마구 들었기 때문에 써야겠다는 생각이 들어 글을 몇자 적어본다. 일단 시작해라최근 나는 이직을 준비하고 있었다.사실 언제는 해야지 언제가는 해야지... 하고 마음만 먹은 상태였고실제로 본격적으로 시작은 최근에 하게 되었다. 항상 모든 사람이 자주 하는 말이 있다. 이말도 누군가가 매우매우 많이 하는 말이지만 준비가 100% 된 상태는 없다.일단 질러봐라!(그래도 어느정도는 준비해야한다는 생각) 그래서 최근에 정말 시작하였고 지원을 하고 운이 좋게 면접을 보게 되었다.정말 기쁘고 그랬지만 결과는 개인적으로 참담 그..
무중단 배포에 대해 공부해보자
·
인프라
들어가기 전배포는 운영 과정에서 중요한 과정중 하나이다.왜냐하면 아무리 코드를 잘 짜도, 사용자에게 전달되지 않으면 아무 의미가 없기 때문이다.그리고 배포가 늦어지거나, 배포 후 장애가 발생하면?사용자는 바로 화가 난다.왜냐하면 불편하니까 배포가 불안정하면 서비스 신뢰도도 함께 떨어진다.겉으로 보면 배포는 “코드 다 짰으니까 서버에 올리면 끝 아닌가?” 처럼 보일 수 있다.하지만 실제로는 다음과 같은 요소들을 고려해야 한다.서버 환경 구성빌드 및 이미지 관리설정 분리 (local / prod)로그 및 모니터링롤백 전략무중단 배포 전략배포는 단순한 실행이 아니라,서비스를 안정적으로 운영하기 위한 엔지니어링 영역이다. 따라서, 이번 글에서는 그중에서도 무중단 배포에 대해 정리해보려 한다.1. 가장 간단한 배..
인프라 구성 로드 밸런서의 이해
·
인프라
들어가기 전이번 글에서는 인프라에서 매우 중요한 역할을 하는 로드 밸런서(Load Balancer) 에 대해 정리해보려고 합니다. 이름 그대로 "Load(부하)"를 "Balance(균형)" 있게 분산시키는 장비 또는 소프트웨어인데요. 서비스 트래픽이 많아질수록 하나의 서버만으로는 감당할 수 없는 경우가 발생합니다.이때 여러 서버로 트래픽을 분산시켜 안정성을 확보해주는 것이 바로 로드 밸런서다. 특히 이번 글에서는 L4, L7 로드 밸런서의 차이와 동작 원리를 중심으로 정리하고,실무에서 왜 중요한지에 대한 나의 생각도 함께 정리해보겠습니다. 부하는 왜 분산이 필요할까?컴퓨터 서버도 사람과 비슷한데요.한 사람이 모든 일을 처리하려고 하면 결국 과부하가 걸리고, 실수가 늘어나거나 쓰러질 수 있습니다.이러한 일..
[인프라] 서버의 고가용성을 높여보자
·
인프라
들어가기 전안녕하세요. 오랜만에 글을 작성하게 되었습니다.최근에 이것저것 바쁘기도 했고, 마땅히 정리해서 적고 싶은 주제가 잘 떠오르지 않아 한동안 글을 쉬게 되었네요. 요즘은 단순한 개발을 넘어서 인프라 쪽에 조금 더 관심을 가지고 공부하고 있습니다. 특히 서버(서비스)의 가용성을 높이기 위한 고가용성(High Availability) 에 대해 학습하고,서버에 적용해보는 작업을 자주 하고 있어요. 그래서 이번 글에서는 서버 고가용성을 구성하는 방식 중Active-Active, Active-Standby와 같은 서버 이중화 구조에 대해 정리해보려고 합니다.서버의 고가용성이 왜 중요할까?개발을 하고 서비스를 배포하는 것으로 모든 작업이 끝나는 것은 아닙니다. 서버가 안정적으로 운영되면 사용자는 끊김 없이 ..