[Java] Java에서의 Set이란? - HashSet, LinkedHashSet, TreeSet
·
Java
자바를 사용하면서 Set 자료구조를 한 번도 안 써본 개발자는 거의 없다고 생각합니다.그런데 "HashSet, LinkedHashSet, TreeSet" 이 세가지가 뭐고 어떻게 다른지 공부하고 알아가볼려고 합니다. 1. Set 이란?Set은 수학의 집합 개념을 그대로 프로그래밍에 도입한 것입니다. 가장 중요한 특징은 바로 "중복된 값이 하나도 없다"라는 점입니다. 1-1. 자바에서의 Set은?일단 자바에서 Set은 인터페이스이다. Set 인터페이스는 Collection 인터페이스를 상속하고 있습니다. Collection 인터페이스는 자바에서 다앙햔 컬렉션, 즉 데이터 그룹을 다루기 위한 메서드를 정의합니다. List, Set, Queue 와 같은 다양한 하위 인터페이스와 함께 사용되며, 이를 통해 ..
[Spring] Caffeine Cache란? Spring Boot에서 사용해보기
·
Spring Framework
1. Cache를 공부하게 된 계기최근 사내 프로젝트를 진행하면서 캐시를 사용하게 됐습니다. Spring Boot에서 캐시가 어떻게 저장되는지, Caffeine 캐시가 뭐고 왜 선택했는지 알아보겠습니다. 2. Spring Boot가 어떻게 Cache를 사용하고 어디에 저장을 하는지Spring Boot는 @EnableCaching 애너테이션을 통해 캐시 기능을 손쉽게 활성화할 수 있도록 지원합니다.개발자는 @Cacheable, @CachePut, @CacheEvict 등의 애너테이션을 활용하여 메서드 레벨에서 캐시 동작을 선언적으로 제어할 수 있습니다.Spring Boot의 캐시는 기본적으로 추상화된 캐시 매니저(CacheManager)를 통해 동작하며, 실제 데이터는 다양한 캐시 구현체에 저장됩니다.저장..
Spring Boot + Nginx 환경에서 redirect 시 HTTPS가 HTTP로 변경되는 문제 해결하기
·
Error Log
안녕하세요!최근 서버 개발을 하면서 발생했던 트러블 슈팅과 왜, 무엇이 원인이였는지 공유하고자 합니다. 현 상황은 이러했습니다.사용자는 HTTPS로 웹 애플리케이션에 접속하여 일명 PRG(Post Redirect Get) 프로세스를 진행하고 있었습니다.Post 요청 후 Spring Boot 애플리케이션은 사용자를 결과 페이지로 리디렉션하도록 설계되어 있었습니다. 그러나 사용자가 Safari 브라우저를 사용할 때는 아래의 사진처럼 '사파리가 해당 페이지를 열 수 없습니다. 네트워크에 연결할 수 없습니다' 라는 메시지가 표시되는 문제가 발생했습니다. 다른 브라우저에서는 문제가 없었지만, 유독 Safari에서만 이런 현상이 나타났습니다. 제가 개발하고 있던 서버 아키텍처는 다음과 같았습니다.[클라이언트] ..
[Spring] 자바 리플렉션으로 알아보는 JDK 동적 프록시와 CGLIB
·
Spring Framework
프록시를 사용해서 부가기능을 추가하려고 하면 대상 클래스 수 만큼 프록시 클래스를 만들어야 하는 단점이 있었다. 하지만 자바가 기본으로 제공하는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어 낼 수 있다.  JDK 동적 프록시를 이해하기 위해서는 먼저 자바의 리플렉션 기술을 이해해야 한다. 리플렉션리플렉션이란?자바 프로그램이 런타임(실행 중)에 클래스, 메서드, 필드 등의 정보에 접근하고 조작할 수 있도록 해주는 메커니즘을 말한다.리플렉션 기술을 사용하면 클래스, 메서드의 메타정보를 동적으로 획득하고 코드도 동적으로 호출할 수 있다.예제를 통해서 알아보자.리플렉션 예제 @Slf4j static class Hello { ..
[Spring] 스프링 액츄에이터(actuator)로 살펴보는 프로덕션 준비 기능
·
Spring Framework
전투에서 실패한 지휘관은 용서할 수 있지만, 경계에서 실패하는 지휘관은 결코 용서할 수 없다.애플리케이션 운영 환경에서도 마찬가지로 장애가 발생하는 것은 어쩔 수 없다 해도 이를 모니터링하고 빠르게 대응하는 ‘경계 태세’만큼은 항상 갖추고 있어야 한다.  프로덕션 준비 기능이란?개발자가 애플리케이션을 만들 때는 단순히 기능 요구사항만 만족시키는 것에 그치지 않는다. 서비스가 실제 운영 단계에 올라가면 문제가 발생하지는 않는지, 지표들을 잘 수집하고 있는지, 로그 정보는 정상적으로 쌓이고 있는지 등을 지속적으로 모니터링하고 감시해야 한다.  이처럼 운영 환경에서 애플리케이션을 운용하기 위해 비기능적 요소들을 준비하고 구성하는 과정을 가리켜, 우리는 흔히 프로덕션 준비 기능(Production-Ready F..
IP 주소와 서브넷 마스크란 무엇일까?
·
Network
IP 주소란?IP 주소 (Internet Protocol Address)는 컴퓨터 네트워크에서 장치들이 서로 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다.  보통 IP 주소를 줄여서 'IP' 라고 부르기도 하지만 IP는 인터넷 규약(프로토콜) 자체를 가르키는 말이기 때문에 IP와 IP 주소는 엄밀하게 구별해야 한다.IP주소에는 IPv4와 IPv6가 있는데 IPv6는 인터넷이 발달함에 따라 필요한 IP주소가 증가했고, IPv4 주소 표기법으로 표현할 수 있는 주소의 한계를 극복하고자 도입한 IP 주소 표기법이다. 해당 글에서는 IPv4 표기법에 대해서만 다루겠다.  IPv4IP 주소는 32비트로 구성되어 있다. 8개의 비트로 나눠서 4개의 '.'으로 구분한다. 이때 4개로 나눈 각각의 수를 "옥텟..
도대체 OSI 7 Layer과 TCP/IP는 무엇일까?
·
Network
OSI 7 Layer이란?OSI 7 Layer는 네트워크 프로토콜을 설계하기 위한 지침이다. 표준 프로토콜을 사용하여 다양한 통신 시스템이 통신할 수 있도록 국제 표준화기구에서 만든 개념 모델이다. 예를들어, A라는 회사의 네트워크 장비와 B라는 회사의 네트워크 장비가 서로 다르더라도 이러한 지침 덕분에 상호 호환이 이 가능하게 됐다. 7Layer라는 단어에서 알 수 있듯이 일곱가지 계층으로 나뉘어져 있으며, 응용, 표현, 세션, 전송, 네트워크, 데이터 링크, 물리 계층으로 이루어져 있다.각 계층은 특정 작업을 처리하고 그 위와 아래의 계층과 통신한다.  7계층 - 응용 계층 (Application Layer)응용 계층은 사용자가 직접 사용하는 프로그램이 네트워크 기능을 사용할 수 있도록 인터페이스를 ..
[Spring] 예제를 통해 프록시(Proxy), 데코레이터(Decorator) 패턴에 대해 알아보기
·
Web
프록시를 알아보기 전 먼저 클라이언트와 서버에 대한 개념을 알아보자. 클라이언트와 서버클라이언트와 서버라고하면 보통 서버 컴퓨터를 생각한다. 사실 클라이언트와 서버의 개념은 상당히 넓게 사용된다. 클라이언트는 의뢰인이라는 뜻이고, 서버는 '서비스나 상품을 제공하는 사람이나 물건' 을 뜻한다.클라이언트: 서버에 필요한 것을 요청서버: 클라이언트의 요청을 처리클라이언트는 일반적으로 서버를 호출하고 직접 결과를 받는다. 이것을 직접 호출이라고 한다.클라이언트가 요청을 서버에 직접하는 것이 아니라 어떤 대리자를 통해서 대신 간접적으로 서버를 요청할 수 있다. 이것을 프록시(Proxy)라고 한다.   프록시(Proxy)여기서 중요한점은 객체에서 프록시가 되려면, 클라이언트는 서버에게 요청한 것인지, 프록시에게 요..
[Spring] 예제를 통해 전략 패턴(Strategy Pattern)에 대해 알아보기
·
Web
개요템플릿 메서드는 상속을 이용한 패턴이다보니 상속에 관한 단점들을 그대로 안고갔다. 이러한 문제를 전략 패턴을 통해 풀어보겠다.템플릿 메서드 패턴을 알고싶다면 여기 를 클릭하면 된다.  전략 패턴(Strategy Pattern)이란?실행 중에 알고리즘을 선택할 수 있게 하는 디자인 패턴이다. 캡슐화한 특정 계열의 알고리즘들을 정의하고 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 쉽게 설명하자면 변하지 않는 부분(Context)라는 곳에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는  것이다.  예제를 통한 전략패턴 알아보기말로 이해하기 어려우므로 예제를 통해 알아보자. Strat..