@Hudi
꾸준히, 의미있는 학습을 기록하기 위한 공간입니다.

애노테이션 기반 DI 컨테이너 구현하기

September 27, 2022

본 포스팅은 우아한테크코스 4기 백엔드 DI 컨테이너 구현하기 실습 수행 과정을 정리한 내용이다. 우리는 객체지향을 왜 사용할까? 많은 이유가 있겠지만, 객체지향의 큰 이점 중 하나는 변화에 유연한 코드를 작성할 수 있다는 점이다. 객체가 구체적인 구현체에 의존하지 않고 인터페이스에 의존하면서(DIP), 의존 대상을 외부에서 주입받는 것, 즉 DI와 Io…


데이터베이스의 확장성과 가용성을 위한 MySQL Replication

September 22, 2022

학습 배경 달록에서 톰캣 튜닝을 위해 성능 테스트 환경을 구축했다. 조금 더 학습해보니 톰캣을 튜닝하고, 로드 밸런싱을 적용해도 결국 데이터베이스에서 병목이 발생하면 시스템 전체 성능 저하가 발생할 수 있다는 것을 알게되었다. 물론, 현재 데이터베이스 인덱싱이나 N+1 문제 해결 등 쿼리 튜닝을 시도하고 있지만, 더 최적화할 수 있는 방법을 찾아보았더니 …


톰캣 튜닝을 위한 달록의 서버 성능 테스트 준비 과정

September 21, 2022

이 글은 우아한테크코스 4기 달록팀의 기술 블로그에 게시된 글 입니다. 배경 우아한테크코스 5번째 데모데이의 필수 요구사항중 하나는 톰캣의 설정 중 , , 를 적절한 값으로 설정하고 그 이유를 공유하는 것 입니다. 이 3가지 설정은 톰캣이 한번에 얼마나 많은 요청을 처리하고, 얼마나 많은 커넥션을 생성하고, 운영체제로 하여금 얼마나 많은 TCP 커넥션을…


자바 리플렉션 (Reflection) 기초

September 17, 2022

리플렉션 (Reflection) JVM은 클래스 정보를 클래스 로더를 통해 읽어와서 해당 정보를 JVM 메모리에 저장한다. 그렇게 저장된 클래스에 대한 정보가 마치 거울에 투영된 모습과 닮아있어, 리플렉션이라는 이름을 가지게 되었다. 리플렉션을 사용하면 생성자, 메소드, 필드 등 클래스에 대한 정보를 아주 자세히 알아낼 수 있다. 대표적으로 여러 라이브러…


서블릿과 서블릿 컨테이너

September 16, 2022

서블릿과 서블릿 컨테이너 서블릿은 요청-응답 프로그래밍 모델의 서버를 구현하기 위해 사용되는 Jakarta 프레임워크의 구성요소이다. 많은 블로그에서 서블릿은 HTTP 요청과 응답을 처리하기 위한 것이라고 설명되어 있다. 더 정확히는 서블릿은 HTTP에 국한되어있지 않다. 다만, 일반적으로 웹 어플리케이션에서 HTTP 요청과 응답을 처리하는데에 많이 사용…


데이터베이스 인덱스 (2) - 클러스터형 인덱스와 비클러스터형 인덱스

September 16, 2022

이번 포스팅은 MySQL(InnoDB) 기준으로 작성되었다. 인덱스가 없을 경우 위와 같이 1위부터 10위까지의 인기있는 프로그래밍 언어가 들어있는 테이블이 있다고 가정하자. 첫번째 열은 순위를 나타내는 열, 두번째 열은 언어의 이름을 나타내는 열이다. 위 순위는 2022 Stackoverflow 개발자 설문의 가장 인기있는 프로그래밍 언어 순위를 …


데이터베이스 인덱스 (1) - 인덱스와 인덱싱 알고리즘 (hash table, b-tree, b+tree)

September 15, 2022

책의 찾아보기 아마, 이 글을 읽고 있는 여러분들은 데이터베이스 인덱스를 설명하며 항상 책 뒷장의 찾아보기(index) 페이지에 비유하는 설명을 많이 들어봤을 것이다. 책 뒷편의 찾아보기 페이지에는 책의 핵심 키워드가 사전 기준으로 정렬되어 있다. 책에 찾아보기 페이지가 없다면, 우리는 몇백장이 되는 책에서 원하는 내용을 찾느라 반나절을 보내게 될지도 …


이유와 솔루션으로 정리하는 객체지향 생활체조 원칙

September 13, 2022

객체지향 생활체조 원칙 "어떤 멍청이라도 컴퓨터가 이해할 수 있는 코드는 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 작성한다. (Any fool can write code that a computer can understand. Good programmers write code that humans can understand)" …


경쟁상태, 임계영역의 개념과 동기화를 위한 여러 상호배제 기법 (mutex, semaphore, monitor)

September 12, 2022

경쟁 상태 (race condition) 경쟁 상태란 둘 이상의 입력, 조작의 타이밍에 따라 결과가 달라질 수 있는 상태를 의미한다. 경쟁 상태의 프로그램은 비결정적(nondeterministic)으로 동작할 수 있으므로, 우리의 예상과 다른 결과를 낼 수 있다. 일반적으로 컴퓨터 과학에서 경쟁 상태는 멀티 태스킹 혹은 멀티 쓰레딩 환경에서 공유 자원을 …


Git의 다양한 브랜치 병합 방법 (Merge, Squash & Merge, Rebase & Merge)

September 12, 2022

학습 배경 우아한테크코스 달록팀에서 브랜치 전략 개선과 배포와 관련된 이야기를 하면서 다양한 병합방법에 대한 이야기가 나왔다. 이야기를 해보면서, 아직 Git의 다양한 병합 방법에 대한 이해도가 낮다는 생각에 공부를 하게 되었다. 막상 공부를 해보니 그리 어려운 내용도 아니었는데, 너무 많이 미뤄뒀던 것 같다. Merge 일반적으로 많이 사용되는 병합이며…