본문 바로가기

전체 글

(5)
TCP connection termination TCP 연결 단계의 3번째 단계인 connection termination 에 대해 정리하고자 한다 connection termination 에는 2가지 종류 가 존재한다 1. Three-Way Handshaking 1. client process 로부터 close 명령을 받은 뒤 client TCP 는 FIN flag 가 set 되어있는 FIN segment 를 보내게 된다 2. server TCP 는 FIN segment 를 받고나서 클라이언트로 부터 FIN segment 를 잘 받았다는 확인시키기 위해 동시에 server 쪽 connection을 닫는 다는 것을 알리기 위해 FIN+ACK segment 를 보낸다 3. client TCP 는 FIN segment를 TCP server로 부터 잘 받았..
이메일 인증 처리에 대한 여러가지 방법 남·여 매칭 서비스에 이메일 인증 기능을 도입하면서 인증 처리를 어떻게 하는 것이 좋은지에 대한 고민이 있었다. 먼저 이메일 인증 기능의 흐름은 다음과 같다. 위 흐름을 거쳐 사용자는 자신의 메일함에 도착한 메일에서 인증 코드를 확인하고 서비스에 돌아와 인증코드를 입력하게 된다. 이 때 인증 처리를 하는 방법이 다양하게 존재했고 이 중에서 가장 타당한 방법을 선택하고자 했다. 1. Cient 에서 인증 처리 첫 번째 방법은 HTTP 응답의 body에 인증코드를 담아서 client에게 보내는 것이다. 이 방법을 사용하면 서버에서 따로 인증 처리를 하지 않아도 되서 인증 처리에 대한 API 요청을 줄일 수 있는 장점이 있다. 반면 HTTP 응답을 가로챈다면 누구나 이메일을 가지고 가입을 할 수 있게 되는 보..
이메일 발송 기능 refactoring 남·여 매칭 서비스 개발 중 학교 인증 기능을 위해 이메일 인증 기능을 도입하게 되었다. 기능은 완성하였으나 유지보수·확장 면에서 부족한 부분이 있어 리팩토링을 하게 되었다. @Service @RequiredArgsConstructor public class EmailService { private final JavaMailSender javaMailSender; public void sendEmail(String toEmail) { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); String verificationCode = createVerificationCode(); try { MimeMessageHelper mimeMessageHelp..
Spring 에서 생성자를 통해 의존관계를 주입하는 이유 Spring 에서 DI 컨테이너에 의해 의존관계가 주입될 때 선택할 수 있는 방법은 3가지가 있다. 필드 객체 선언을 통한 주입, setter 메서드를 통한 의존관계 주입, 생성자를 통한 의존관계 주입이다. 이중에서 왜 항상 생성자를 통해서 의존관계를 주입하는 방식으로 코드를 작성해 왔는지 이유를 알아보려고 한다 1. final keyword 사용 가능 필드 객체나 setter 를 통해서는 final keyword 를 사용할 수 없다. 그 이유는 final 로 선언된 필드 객체는 초기화가 되어야 하는데 초기화가 이루어지는 방식이 크게 3가지이다. 1. 선언과 동시에 초기화 2. 인스턴스 블록 3. 생성자 따라서 위 3가지 방법이 아닌 이상 final 로 선언된 필드 객체가 초기화될 수 없으므로 필드 객체..
Java 에서 HashMap 은 어떻게 구현되어 있는가 현 시점의 Java 에서 HashMap 이 어떻게 구현되어 있는지 code level 에서 살펴보겠다 HashMap 의 Field 구성 // key 와 value 값이 저장되는 곳 transient Node[] table; 위 필드들 중 핵심은 table 변수이다. Node 형의 배열로 이루어진 변수로서 우리가 흔히 key, value 로 저장을 할 때 실제로는 Node 형으로 저장되어짐을 알 수 있다. 그렇다면 Node 클래스는 어떻게 구현되어 있는지 확인해보자 HashMap 에서 Node 클래스 field 값으로 hash, key, value 그리고 Node next 를 가지고 있다. 이를 통해 Node[] table 이라는 변수가 어떻게 생겼는지 알 수 있다. table 변수는 기본적으로는 배열이면..