[개발 일기] 2025.02.14 - 우선순위 큐
·
개발 일기
💡 개요오늘은 코딩테스트 문제를 풀 때 자주 사용되는 우선순위 큐에 대해 정리해 보자.   📕 우선순위 큐우선순위 큐란 Queue 인터페이스의 구현체로, Queue의 특징인 선입선출 방식이 아니라, 우선순위 큐에 설정된 우선순위가 높은 요소가 먼저 나오는 방식으로 동작하는 자료구조이다.  다양한 방법으로 구현 가능한데, 주로 힙(Heap)을 사용한다.   🚀 최소 힙 최소 힙은 부모 노드가 자식 노드보다 작은 자료구조를 말한다.  그렇기 때문에 최소 힙의 루트 노드는 힙에 있는 노드 중에서 가장 작은 값이다.   🚀 최대 힙 최대 힙은 부모 노드가 자식 노드보다 큰 자료구조를 말한다.  그렇기 때문에 최대 힙의 루트 노드는 힙에 있는 노드 중에서 가장 큰 값이다.   🚀 우선순위 큐와 최대 힙,..
[개발 일기] 2025.02.13 - 자바 record
·
개발 일기
💡 개요오늘은 자바의 record 타입에 대해 정리해 보자.   📕 record자바 record 란, 자바 16 버전에 새롭게 출시된 타입으로, 불변 객체를 쉽게 만들기 위해 사용되는 타입이다.  아래 코드는 record 를 사용하지 않고 Member 클래스를 구현한 것이다. public class Member() { private String name; private int age; private Address address; public Member() {} public Member(String name, int age, Address address) {...} public void setName(String name) { this..
[개발 일기] 2025.02.12 - 스티키 세션
·
개발 일기
💡 개요로드밸런서에 대해 공부하다가 스티키 세션이란 기술에 대해 알게 되었다.  오늘은 스티키 세션을 정리해 보자.   📕 세션스티키 세션을 알기 위해선 세션에 대해 알고 있어야 한다.  세션이란 클라이언트와 서버 사이에 상태를 유지하는 방법 중 하나이다.  세션이라는 기술이 사용되는 이유는 HTTP는 클라이언트의 이전 요청을 기억하지 않는 무상태 프로토콜이기 때문이다.  세션이 유지되고 있다는 것은 서버가 클라이언트의 정보를 저장소에 보관하고 있다는 의미이다.  그렇기 때문에 세션이 유지되고 있는 상태에선 별도의 사용자 인증 없이 요청을 처리할 수 있다.  보통 세션 저장소는 인메모리나 데이터베이스에서 보관한다.  구조는 다음과 같다.  클라이언트 측의 쿠키에 저장된 세션 ID를 HTTP 요청에 포..
[개발 일기] 2025.02.11 - SockJS
·
개발 일기
💡 개요아래의 코드는 chat-service 의 WebSocketConfig.registerStompEndpoints() 메서드를 사용해 WebSocket 엔드포인트를 지정하는 부분이다. @Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws") .setAllowedOrigins("") .withSockJS();} 오늘은 저 SockJS에 대해 정리해 보자.   📕 SockJSSockJS란 WebSocket을 사용할 수 없는 환경에서도 양방향 통신을 사용할 수 있도록 지원하는 기술이다.  만약 클라이언트와 서버 모두 WebSoc..
[개발 일기] 2025.02.10 - 디미터의 법칙
·
개발 일기
💡 개요오늘은 객체 지향 프로그래밍에서 사용되는 이론인 ‘디미터의 법칙’에 대해 정리해 보자.   📕 디미터의 법칙디미터의 법칙이란 ‘친구의 친구는 내 친구가 아니다’ 를 나타내는 법칙으로 자신이 조작하는 객체의 내부 구현 내용을 최소한으로 알아야 한다는 것이다.  이를 통해 객체 간의 불필요한 의존성을 줄이고 결합도도 낮추는 것이다.  말로만 들으면 이해하기 어려우니 아래의 디미터 법칙이 적용되지 않은 코드로 설명하겠다. public class Car { private CarName carName; private Position position; ... // getter 아직 없음}public class CarName { private final String name; ..
[개발 일기] 2025.02.09 - IP보안
·
개발 일기
💡 개요 많은 서비스의 로그인 화면에서 저렇게 ‘IP보안’을 선택할 수 있다. 그런데 저 ‘IP보안’은 뭘 의미할까?   📕 IP 보안IP보안이란, IP 정보를 토대로 사용자의 네트워크 환경에 맞게 보안 수준을 제공하는 기술이다.   🚀 1단계 주로 IP의 대역을 토대로 서비스 사용을 허용할지 결정한다. (=IP 대역 제한)  로그인한 IP가 192.168.1.100 이면, 192.168.1.101 ~ 192.168.1.255 는 허용 가능하지만, 192.168.2.xxx 부터는 차단되는 것이다.  가장 흔히 사용되는 보안 방식이다.   🚀 2단계 2단계는 IP가 변경될 경우 재로그인이 필요한 보안 단계이다.  하지만 반드시 재로그인을 해야 하는 것은 아니고, 변경된 IP가 최근에 로그인할 때 사..