분류 전체보기 555

순수 자바로 Spring MVC 구현하기

이번 포스팅에선 Spring MVC를 깊이있게 파헤쳐보고 정리해보도록 하겠습니다. 코드는 깃허브를 참고해주시면 감사하겠습니다. 코드는 웬만하면 적지 않을 예정입니다. 제 블로그 포스팅은 기본적으로 코드를 되도록 적지 않는데 그 이유는 코드가 많아지면 설명해야할게 많아지고 그럼 가독성이 떨어진다고 생각하기 때문입니다. 또한, 저도 공부하면서 포스팅을 수백개 봤지만 사실 코드를 잘 안봅니다... 그리고 깃허브를 들어가서 실제 코드를 보면 아시겠지만 변수명과 함수명이 실제 스프링 프로젝트와 다른 부분이 있습니다. 그 이유는 실제 스프링 프로젝트는 훨씬 더 복잡한 계층 구조와 다양한 팩토리 클래스를 가지고 있습니다. 그래서 제 프로젝트는 최대한 가볍게 만들기 위해서 변수명을 조정했습니다. 사실 코드는 별로 중..

순수 자바로 ApplicationContext 구현하기

이번 포스팅에선 AnnotationApplicationContext를 깊이있게 파헤쳐보고 정리해보도록 하겠습니다. 코드는 깃허브를 참고해주시면 감사하겠습니다. 코드는 웬만하면 적지 않을 예정입니다. 제 블로그 포스팅은 기본적으로 코드를 되도록 적지 않는데 그 이유는 코드가 많아지면 설명해야할게 많아지고 그럼 가독성이 떨어진다고 생각하기 때문입니다. 또한, 저도 공부하면서 포스팅을 수백개 봤지만 사실 코드를 잘 안봅니다... 그리고 깃허브를 들어가서 실제 코드를 보면 아시겠지만 변수명과 함수명이 실제 스프링 프로젝트와 다른 부분이 있습니다. 그 이유는 실제 스프링 프로젝트는 훨씬 더 복잡한 계층 구조와 다양한 팩토리 클래스를 가지고 있습니다. 그래서 제 프로젝트는 최대한 가볍게 만들기 위해서 변수명을 ..

순수 자바로 스프링 만들기 : 시작

공부를 시작한지는 만으로 4년 3개월 햇수로는 5년차에 접어들면서 이것저것 많이 공부해봤는데요. 그래서 블로그 포스팅도 어느새 600개를 향해 가고있습니다. 물론 그 중에서 코딩 테스트나 영어 공부, 면접 준비를 뺀 진짜 포스팅은 500개 남짓이지만요. 처음엔 코딩하는게 재밌었습니다. 프로젝트 만드는게 재밌었거든요. 영한님 강의 들으면서 복습할겸 사이드 프로젝트로 하나 만들어보고 강의 듣고 사이드 프로젝트 만들고를 반복했습니다. 그렇게 2년정도를 공부하니 웬만한 프로젝트는 만들 수 있겠더군요. 그리고 그 때 이론이 부족한 것을 자각하고 코딩은 하지 않고 이론 공부만 매진했습니다. 특히 데이터베이스를 위주로 네트워크, 운영체제, 보안, 아키텍처, 데브옵스 가리지 않고 공부했죠. 제가 가장 이상적이라고..

깔끔쟁이 MySQL (InnoDB) vs 게으름뱅이 PostgreSQL

데이터베이스에서 가장 중요한 작업은 뭘까요? Create? Read? 어느것 하나 중요하지 않은게 없죠. 그럼 데이터베이스에서 가장 리소스가 많이 드는 작업은 뭘까요? HDD에선 헤드를 여러번 움직여야하고 SSD에선 erase 후에 write 를 해야하는 CUD가 아닐까 싶습니다. 이번 포스팅에선 데이터베이스에서 리소스가 가장 많이 드는 작업인 CUD를 데이터베이스들이 어떻게 최적화하는지에 대해서 공부해본 내용을 정리해볼까합니다. Dirty Page데이터베이스는 삽입, 변경, 삭제 쿼리 (이하 쓰기 쿼리) 가 들어오면 곧장 이를 물리적인 저장소에 저장하는 것이 아니라 Page라고 부르는 메모리에 저장해뒀다가 한번에 flush라는 명령어를 통해 밀어넣습니다. 이렇게 쿼리가 실행되고 메모리에 올라와있..

PostgreSQL의 1순위 장애 이유 Auto Vacuum Bloating

PostgreSQL은 이제 명실상부 RDBMS의 대표주자로서 자리를 잡았습니다. 다양한 인덱스 설정으로 RDBMS 중에서도 읽기 성능은 상위권에 있으면서, 개발자가 원한다면 CP 데이터베이스 AP 데이터베이스로 스왑이 가능하고, 오픈소스라는 특징 때문에 엄청나게 방대한 커뮤니티를 가지고 있다는 것이 바로 그 이유이죠. 이런 팔방미인 PostgreSQL에게 약점이 있으니 바로 Vacuum입니다. PostgreSQL은 튜닝할 수 있는 설정이 굉장히 많아서 잘만 사용하면 뛰어난 성능의 데이터베이스로 만들 수 있지만 자칫 잘못 사용하면 겉잡을 수 없이 커지는 장애가 발생하게 되는데요. 오늘 포스팅에서는 PostgreSQL의 1순위 장애 이유인 Auto Vacuum Bloating에 대해서 공부해본 내용을 정..

내가 성장했는지 확인하는 가장 좋은 매개체 '블로그 쓰기'

블로그를 시작한지 벌써 4년이 되었습니다. 21년도 7월부터 개발일기로 시작된 블로그 포스팅은 그 이후 550개 가량 쌓이게 되었죠. 이번 회고에선 블로그 포스팅을 쓰면서 느꼈던 점들을 적어보려고합니다. 포스팅을 잘 써놓으면 복습할 때 용이하다블로그 포스팅을 쓸 때 내가 쓸 내용을 하나도 모르는 독자를 대상으로 쓰여진다고 생각하고 작성하게 되면 실제로 아무것도 모르는 사람이 내 블로그를 보고 정보를 얻어갈 때도 물론 도움이 되지만 이 내용을 까먹었을 때의 내가 다시 복습을 위해 포스팅을 볼 때도 용이합니다. 저는 기억력이 그렇게 좋지 않아서 어떤 개념을 공부하면 1개월만 지나도 아 그거 공부했었지 같은 기분만 남아있고 실제 내용은 기억이 안나는 경우가 대부분이었는데요. 어... 이거 뭐더라... 그 ..

기타/회고 2025.04.27

쿠버네티스의 분산 합의 알고리즘 (Raft 알고리즘)

최근에 사이드 프로젝트를 하느라 코딩을 많이해서 그런가 요즘은 이론 공부에 집중하게 되더군요. 조금 딴소리지만 처음 공식문서를 읽게 된게 Baeldung의 로컬 트랜잭션과 글로벌 트랜잭션인데 이걸 처음 읽고 충격에 빠지지 않을 수 없었습니다. 이론공부를 한다는게 이렇게 재밌는 일인가? 싶은 생각이 들었었죠. 그 때가 벌써 2년전이네요. 그 이후로 공식 문서를 보는걸 좋아했는데 짧은 영어로 한글자 한글자 해석하면서 알게되는 변태같은 심연의 지식들이 너무 좋더라구요. 이번 포스팅에선 분산 시스템에서 합의를 이뤄 리더를 선출해내는 분산 합의 알고리즘을 공부해보고 정리해봤습니다. 분산 합의 알고리즘Raft 알고리즘을 본격적으로 들어가기 전에 분산 합의 알고리즘이 어떤 것이며 왜 필요한지 정리하고 넘어가겠습..

DevOps/Kubernetes 2025.04.25

서버간 동기 통신을 더 빠르게! gRPC의 무기들 (+실증테스트)

요즘 사이드프로젝트가 끝나고 어떤 공부를 해야할지 고민중이었는데 평소에 궁금했던 gRPC에 대해서 공부해보았습니다. 이번 포스팅에선 서버간 통신에서 REST API의 대안이 된 gRPC에 대해서 정리해봤습니다. gRPC의 세가지 무기gRPC는 세개의 무기를 가지고 있습니다. 바로 헤더 압축, Protobuf, 멀티플렉싱이죠. 각각의 특징이 gRPC가 왜 서버간 동기 통신에서 선택받았는지 자세히 정리해보겠습니다. 헤더 압축저도 gRPC를 공부하면서 깜짝 놀랐습니다. 헤더 압축? 헤더가 뭐 얼마나 된다고 헤더를 압축해? 근데 엄청나게 차이가 많이납니다. 이번 섹션에선 기존 HTTP/1.1을 사용하는 REST API와 HTTP/2를 사용하는 gRPC에 각각 요청을 직접 날려보면서 패킷을 뜯어보고 헤더 압..

??? : 비밀번호를 암호화 해달라고요? base64로 하면 되죠? (feat. Argon2)

죄송합니다.. 블로그 인생 처음으로 어그로좀 끌어봤습니다... 이번 포스팅에선 비밀번호 암호화, 암호화 된 해시값을 추적하는 해킹 기법들, 그리고 어떻게 웹 개발자로서 방지할 수 있는지에 대해서 공부한 내용을 정리해보도록 하겠습니다. 비밀번호 암호화보통 비밀번호는 평문으로 저장하는건 위험하다고 알려져있습니다. 데이터베이스가 털렸을 때를 대비해서 비밀번호만큼은 지켜낸다는 일념인 것이죠. 데이터베이스를 털릴걸 가정하고 암호화를 한다니? 데이터베이스가 털릴걸 가정하고 암호화를 하는게 아니라 데이터베이스가 '털리더라도' 안전하게 지키는 것이 목적인 것이죠. 그런 의미에서 base64로 인코딩하는건 말도안되는 소리지요. base64는 역연산으로 얼마든지 비밀번호를 얻어낼 수 있으니까요. BCryptBCry..

CS 지식/보안 2025.04.14

우당탕 홈서버 구축하기 회고 (cafe24에서 OAuth Proxy까지)

이번 포스팅에선 cafe24를 거쳐 공유기 포트포워딩으로 홈서버를 구축, 그 이후에 cloudflare를 결합한 OAuth Proxy까지의 여정을 회고식으로 다뤄보려합니다.  호스팅..? 그게 뭐죠 먹는건가요때는 2021년 6월... 벌써 4년전이네요. 개발공부란걸 처음 시작하게 되었습니다. 처음엔 jsp를 이용해서 배포를 했는데 그때 당시를 회상해보면 데이터베이스 커넥션을 맺을 때 name과 password를 어떻게 설정해줘야 하는지도 모르는 새싹이었습니다.  이때 배포라는 단어도 처음 들어보고 꾸역꾸역 만들어서 배포까지 성공을 했습니다. 프로젝트가 간단하게 게시판 있고, 서버에 있는 이미지를 보여주는 단순한 쇼핑몰 느낌이었는데 제가 했던 사이드 프로젝트인 온라인 쇼핑몰처럼 큰 규모는 아니었고 작은 규..

기타/회고 2025.04.13