December 20, 2024
SMTP란 SMTP(Simple Mail Transfer Protocol)는 인터넷에서 이메일을 전송하는 데 사용되는 표준 프로토콜입니다. 이 프로토콜은 서로 다른 이메일 시스템 간의 메시지 전달 및 중계를 가능하게 해 주며, TCP/IP를 기반으로 동작합니다. SMTP 구성요소 MUA (Mail User Agent): 이메일 클라이언트로, 사용자가 …
December 18, 2024
제 의견이 아닌 TDD에 대한 자료들을 정리했습니다. Bob Martin(클린 코드 저자)과 Jim Coplien이 테스트 주도 개발(TDD)에 대해 심층적으로 토론 출처 https://www.youtube.com/watch?v=eRxc4PD6RN0&ab_channel=%EB%8D%B0%EB%B8%8C%EC%9B%90%EC%98%81DVWY TDD의 가치…
November 24, 2024
Redis 버전 7.0.15 기준으로 설명합니다. Redis Master Slave Architecture 기본적인 Redis Replication 구조는 Master-Replica 구조로 이루어져 있습니다. Master는 데이터를 저장하고, Replica는 Master의 데이터를 복제합니다. 레디스는 비동기(asynchronous) 복제를 합니다. …
November 23, 2024
웹 소켓 웹 소켓은 웹 서버와 웹 브라우저가 서로 실시간 메시지를 교환하는 데에 사용됩니다. 핸드셰이크를 한 후, 지속적인 연결이 유지됩니다. 웹 소켓은 처음엔 HTTP 프로토콜을 시작으로 하되, 연결이 성립된 후에는 WS(WebSocket) 프로토콜로 전환됩니다. 아래는 웹 소켓 연결을 위한 과정입니다. TCP 연결 수립 TCP 3 way handsha…
October 30, 2024
데이터베이스가 2대 이상 있는 상황이나 NoSQL과 서로 다른 DBMS을 사용하는 상황일때, 트랜잭션 하나를 앞서 비관적락이나 낙관적락으로 해결할 수 없는 상황이 많습니다. 이런 분산데이터베이스 혹은 분산환경에서 CAP 이론이 적용됩니다. CAP 이론이란 Consistency(일관성): 모든 노드가 동일한 시점에 동일한 데이터를 볼 수 있습니다. 즉 데…
October 29, 2024
데이터베이스에서 트랜잭션을 하나씩 순차적으로 실행하면 동시성 문제가 발생하지 않습니다. 그러나 이 방법은 성능 저하를 초래할 수 있습니다. 현실적으로는 여러 서버에서 네트워크를 통해 다수의 트랜잭션이 동시에 데이터베이스에 접근합니다. 따라서 동시성 문제를 해결하는 다른 방법이 필요합니다. 동시성 문제를 해결하면서 성능을 유지하는 방법 동시에 여러 트랜잭션…
October 28, 2024
자바에서의 동기화 기법 - 메모리 영역 자바에서 하나의 프로세스는 메모리를 점유하고 있으며, 그 프로세스 내의 여러 스레드가 자원을 공유하게 됩니다. 여기서 공유되는 자원은 주로 힙 영역에 존재하는 객체와 변수 값입니다. 이 코드의 기대 결과는 이지만, 실제로는 20000보다 작은 값이 나올 수 있습니다. 이유는 두 스레드가 방식으로 겹쳐 실행되기 때…
October 27, 2024
0. 클래스 식별 Spring 컨테이너가 애플리케이션을 시작할 때, 먼저 클래스패스를 스캔하여 @Configuration, @Component, @Bean과 같은 어노테이션이 붙은 클래스를 찾아서 등록합니다. 이 과정에서 @ComponentScan을 사용해 패키지 범위를 설정할 수도 있고, 해당 어노테이션을 통해 애플리케이션 내에서 사용할 빈을 탐색하게 …
October 27, 2024
동시성 이슈가 뭐고 발생하는 원인이 뭔가요? 동시성 이슈는 다음 세 가지 조건이 충족될 때 발생할 수 있습니다. 공유 자원에 접근한다. 동기화 없이 접근한다. 적어도 하나의 스레드가 자원을 변경한다. 이 세 가지 조건이 충족되면 스레드가 변경한 값을 다른 스레드가 읽으면서 발생하는 문제, 데드락, 기아 현상 등 다양한 동시성 이슈가 발생할 수 있습니다. …
September 16, 2024
클라이언트에서 처음 Swagger 페이지를 GET 요청했을 때 흐름을 적어봤습니다. DispatcherServlet 요청 흐름 클라이언트의 요청은 서블릿 컨테이너에서 필터들을 지나 스프링 컨텍스트내 이 가장 먼저 요청을 받습니다. 의 메소드에서 웹 요청 처리가 진행됩니다. 이때 에 여러 속성들을 넣는 작업을 한 후, 를 호출합니다. 작업에서는 먼…