오늘까지만은 없다
전체 글
오늘만, 오늘까지만은 없다
1. 들어가며스프링 부트로 서버 만들고 배포까지 해보면, 처음엔 이런 생각이 든다.“서버 한 대로도 잘 되는데…왜 다들 대규모 트래픽, 인프라, MSA, Kafka 이런 얘기를 하지?”나도 그랬다.근데 트래픽이 늘어나고 기능이 늘어나면, 어느 순간부터는 “서버 한 대로 버티는 게 한계”*가 오더라.오늘은 MSA, Kafka 들어가기 전에,왜 결국 그쪽으로 갈 수밖에 없는지를 이해하기 위한 “인프라 기초”를 단계적으로 정리해보려고 한다. 2. 대규모 트래픽에서 제일 먼저 맞닥뜨리는 문제사용자가 늘면 서버는 단순히 “느려지는” 게 아니라, 이런 것들이 같이 터진다.요청이 동시에 몰려서 CPU/메모리가 버티지 못함DB 조회가 많아져서 DB가 병목이 됨장애 하나가 전체 서비스에 영향을 줌즉, “성능”과 “안정..
1. HTTP란 무엇인가?HTTP는 HyperText Transfer Protocol의 약자다.즉, 하이퍼텍스트를 전송하기 위한 통신 규약(Protocol) 이다.우리가 웹 브라우저로 어떤 사이트에 접속할 때,브라우저(클라이언트)는 서버에게 요청(Request)을 보내고 서버는 그에 대한 응답(Response)을 돌려준다.이때 사용되는 약속된 방식이 바로 HTTP다. 1) HTTP의 특징텍스트 기반 통신 (사람이 읽을 수 있는 평문)상태를 유지하지 않는(stateless) 구조포트 번호: 80 2) 예시우리가 네이버에 접속하면 브라우저는 이렇게 요청한다.GET / HTTP/1.1Host: www.naver.com 서버는 이에 대한 HTML 문서를 응답으로 준다.HTTP/1.1 200 OKContent..
1. 들어가며스프링 + JPA를 공부하다 보면 꼭 듣게 되는 단어가 있다.바로 “영속성 컨텍스트 (Persistence Context)” “엔티티가 영속성 컨텍스트에 저장됩니다.”“영속 상태로 관리됩니다.”“flush가 일어납니다.” 이런 말을 듣고 나면 솔직히 이런 생각이 들었다..“DB에 저장만 하면 되는 거 아닌가?”“굳이 중간에 ‘영속성 컨텍스트’라는 게 왜 필요한 거야?”나도 처음엔 그랬다.new로 객체를 만들고, save() 해서 DB에 넣으면 끝 아닌가?왜 굳이 중간에 “영속성 컨텍스트”라는 걸 거쳐야 하는지 이해가 안 됐다.근데 이걸 이해하게 되면,JPA의 진짜 장점(자동 업데이트, 캐시, 트랜잭션 일관성)이 눈에 보이기 시작한다.즉, “영속성 컨텍스트”는 JPA를 단순 SQL 매퍼가 아닌..
어드민에서 발견한 부동소수점 문제하잇 앱을 어드민에서 유저관리를 하던 도중,어떤유저의 Kcal값이 -8.881784197001252E-16 로 나타나는것을 확인하였다.바로 부동 소수점 문제. 앱을 만들다가 이런 문제를 깜빡하고 배포를 한 나 자신이 너무 한심했다. 원인 분석1. 유저가 식단으로 섭취한 음식을 등록 -> 105.6Kcal 가 DB에 저장2. 유저가 등록했던 음식을 삭제 -> 105.6Kcal 가 DB에 삭제즉 105.6 - 105.6 뺄쎔이 일어나고, 여기서 0.0000000000004 정도의 오차가 발생해,-8.881784197001252E-16 같은 문제가 발생한것이다. 부동소수점부동소수점 오차(Floating Point Precision Error) 란,컴퓨터는 10진수를 ..
1. 들어가며스프링을 쓰다 보면 빈(Bean)이라는 말을 정말 자주 듣는다.“스프링이 빈을 관리해준다”, “빈으로 등록해야 한다”, “빈 주입이 안 된다”…근데 솔직히 처음엔 이런 생각이 든다.“그냥 new로 객체 만들면 되는 거 아닌가?”“굳이 Bean으로 등록해야 하는 이유가 뭐야?”나도 그랬다. (나는 그랬다..비전공자 입장에서 Bean이라는게 싫었다..)그냥 자바 객체니까 new 해서 쓰면 되지,뭘 ‘등록’까지 해야 하나 싶었다.그런데 실제로 스프링을 깊게 쓰다 보면,“Bean으로 관리해야만 하는 이유”가 명확하게 보인다. 2. Bean이란 무엇인가? Bean은 간단히 말해서 “스프링이 대신 관리해주는 객체”다.즉, 우리가 new로 직접 만들지 않고,스프링이 대신 만들고, 대신 주입해주고, 대..
1. OSI 7계층이란?OSI 7계층은 네트워크 통신 과정을 7단계로 나눈 개념적 구조이다.즉, 우리가 인터넷에서 어떤 요청(예: 네이버 검색)을 보낼 때,그 데이터가 어떻게 만들어지고, 어떻게 전송되고, 어떻게 도착하는지를 단계별로 설명하는 모델이다.이 모델은 ISO(국제표준화기구)에서 정의했으며,각 계층은 서로 다른 역할을 가지고 데이터를 순차적으로 주고받는다. 상위 계층은 “무엇을 보낼지”에 집중하고, 하위 계층으로 내려갈수록 “어떻게 보낼지”에 초점이 맞춰진다. 2. OSI 7계층 구조인터넷에서 통신이 이루어질 때, 모든 데이터는 단순히 “한 줄의 요청”으로 오가는 것이 아니다.보이지 않는 내부에서는 수많은 절차를 거쳐 데이터가 만들어지고, 포장되고, 전송되고, 도착한 뒤 다시 해석된다.이 복..
Maltyy
maltyy