[이펙티브 자바] 아이템3 - private 생성자나 열거 타입으로 싱글턴임을 보증하라
·
☕JAVA/이펙티브 자바
Singleton 패턴 싱글턴 패턴은 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 주로 무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트에 사용되는 방식이다. 싱글턴 패턴을 사용할 때 주의할 점은 인터페이스로 정의하지 않은 싱글턴은 테스트에서 대체할 수 없다는 것이다. 싱글턴 클래스는 하나의 인스턴스를 생성하고 이를 재사용하는 방식으로 동작한다. 이로 인해 테스트 시 해당 객체를 가짜(Mock) 구현체나 다른 인스턴스로 교체할 수 있는 방법이 없어서 유연한 테스트가 어려워진다.  Singleton을 사용하는 방식 이러한 싱글턴을 만드는 방식은 크게 두가지가 있다. 아래에서 살펴보자. 필드방식public class Elvis { public static final Elvis INSTA..
[이펙티브 자바] 아이템2 - 생성자에 매개변수가 많다면 빌더를 고려하라
·
☕JAVA/이펙티브 자바
객체를 생성하는 방법 3가지 정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다. 점층적 생성자 패턴생성자를 호출하여 객체를 생성하는 방식에는 필수 매개변수를 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 2개를 받는 생성자... 형태로 생성자를 늘려나가는 점층적 생성자 패턴이 있는데 이 패턴은 매개변수가 많아지면 클라이언트 코드를 작성하기 어렵고 실수로 매개변수를 잘못 전달하여 런타임에 엉뚱한 동작을 하는 경우가 빈번하다. JavaBeans 패턴이 대안으로 매개변수가 없는 생성자로 객체를 만들고 setter 메서드를 호출해 원하는 매개변수의 값을 설정하는 JavaBeans 패턴이 존재하는데 이 방식은 점층적 생성자 패턴의 단점은 보완해주지만 객체 하나를 만들 때..
Spring Cloud의 Gateway, 로드밸런서
·
❓고민 해결/Spring Framework
서론MSA에 대한 이해를 위해 Spring Cloud를 공부하던 중 Spring Cloud의 API Gateway와 로드 밸런서에 대한 개념을 접하게 되었다. 그런데 기존에 알고 있던 API Gateway, 로드밸런서와 뭔가 다르다는 걸 느꼈는데 이 차이를 명확하게 구분하지 못해 이 글로 정리하게 되었다.  클라우드 서비스의 API Gateway와 로드밸런서기존에 알던 클라우드 서비스에서 API Gateway는 인프라 계층에서 운영되는 서비스로 클라이언트의 모든 API 요청의 단일 진입점 역할을 하며 여러 기능(리버스프록시, 인증/인가, SSL/TLS, 요청 검증, 응답 캐싱, 속도 제한, 모니터링 등)을 내부적으로 처리해준다. 로드밸런서 또한 인프라 계층에서 운영되는 서비스로 외부에서 유입된 트래픽을 ..
자바 개념 정리
·
☕JAVA
아래 내용은 면접을 준비하면서 정리한 자바 기본 개념들이다. 내용은 계속해서 추가/수정된다.   객체지향 프로그래밍(OOP -Object-Oriented Programming)객체지향 프로그래밍은 코드와 데이터를 객체 단위로 분리해서 이들의 상호작용으로 프로그램을 작성하는 프로그래밍 기법이다.객체지향 프로그래밍은 절차적 프로그래밍과 다르게 행위가 아닌 명사에 초점을 맞춰 프로그래밍을 하게 된다.실제세계의 사물을 객체로 표현하기때문에 프로그램을 이해하고 디버그하기 쉽게 만들어준다.객체지향 프로그래밍의 특징객체 - 객체는 클래스라는 속성과 기능을 가진 설계도를 바탕으로 메모리 영역에 할당된 것을 말한다. 객체는 인스턴스와 동일한 의미로 사용되기도 하는데 인스턴스는 클래스와 객체 간의 관계를 더욱 강조하고 싶..
[이펙티브 자바] 아이템1 - 생성자 대신 정적 팩터리 메서드를 고려하라.
·
☕JAVA/이펙티브 자바
자바 언어에서 클래스의 인스턴스를 얻으려고 할 때 일반적으로 new 생성자를 사용하게 된다. 여기에 익숙해지면 어떤 상황이든 new 생성자만 사용하게 되는데 정적 팩터리 메서드 개념 또한 익혀 상황마다 적절한 방법으로 인스턴스를 얻도록 해야한다.생성자 대신 정적 팩터리 메서드를 사용함으로써 생기는 장점과 단점을 알아보자. 장점1. 이름을 가질 수 있다.정적 팩터리 메서드는 이름을 가질 수 있다. 생성자를 사용할때는 new 클래스명을 사용하기 때문에 해당 인스턴스가 구체적으로 어떤것을 의미하는 것인지 알 수 없다 하지만 정적 팩터리 메서드를 사용한다면 CreateAdult() CreateTeenager()와 같은 식으로 어떤 타입의 객체를 생성하는 것인지 알 수 있다. 2. 호출될 때마다 인스턴스를 새로 ..
테스트 코드(Test Code)
·
❓고민 해결
서론개인 프로젝트를 진행하면서 테스트 코드를 명확한 이해 없이 대략적인 느낌대로 작성하고 있다고 느꼈다.이 글을 통해 테스트 코드에 대한 개념을 명확히 하여 체계적이고 효과적인 테스트 코드를 작성하고자 한다. 테스트 코드의 정의테스트 코드는 소프트웨어의 특정 기능이나 모듈이 예상대로 작동하는지 검증하기 위해 작성하는 코드다.이러한 테스트 코드의 단위는 어떻게 나누고 구성하냐에 따라 다양하게 존재한다. 여기서는 주요 테스트 단위를 3가지를 설명한다.  테스트 코드의 종류출처 - https://academy.pega.com/topic/test-pyramid/v1  위 이미지는 테스트 피라미드의 사진이다. 아래에 있는 테스트일수록 범위가 작고 실행 속도가 빠르며 비용이 적다. 반대로 위로 갈수록 범위가 넓고 ..
CI/CD(지속적 통합 및 지속적 제공/ 배포)
·
♺인프라
서론 CI/CD는 코드 변경 사항을 자동으로 빌드, 테스트, 배포하여 소프트웨어를 신속하고 안정적으로 제공하는 개발 방식이다. CI는 지속적 통합으로 빌드와 테스트를 자동으로 수행해주고 CD는 지속적 제공/배포로 배포를 자동으로 수행해준다.처음 위 정의를 봤을 때 자동으로 특정 작업을 수행해준다고 하니 개발 과정에서 도움을 주는 것 같기는 했지만, 구체적으로 어떻게 적용되는 것이고 어떤 이점을 주며 어떻게 사용할 수 있는지와 같은 부분을 이해할 수 없었다.위 과정을 보다 효율적으로 이해하기 위해서 CI/CD과정이 개발자 입장에서 어떠한 순서로 흘러가는지 먼저 알아보자. CI/CD 과정 1. 개발자가 작성한 코드를 원격 저장소에 commit/push2. CI도구(jenkins, GitHub Actions ..
프록시서버 캐시
·
❓고민 해결/http
의문점?프록시 캐시 서버가 존재함으로써 데이터 접근 시간을 단축시킨다는 내용을 알게되었고 여기서 의문점이 하나 생겼다. 프록시서버는 모든 경우에서 데이터 접근 시간을 단축시켜줄까? 프록시서버는 예를들어 한국에서 인도의 유튜브 영상을 보려면 인도의 원서버까지 갈 필요 없이 한국 프록시서버에 존재하는 캐시값을 가져다 써 인터넷 트래픽을 줄여주고 데이터전송시간을 단축시킨다. 나는 여기서 든 의문점이 과연 모든 경우에 원서버를 거지치 않을까?였다 내가 이해한 바로는 대부분의 경우에 원서버를 거쳐야 했기 떄문이다 의문 해결나는 경우를 크게 3가지 생각해보았다. 프록시서버에 있는 캐시의 유효기간이 유효할때, 유효하지 않을 때, 캐시가 존재하지 않을때 1. 프록시 서버에 있는 캐시의 유효기간이 유효하면 유효한지는 프..
stateful stateless
·
❓고민 해결/http
http 강의를 들으면서 Stateful, Stateless, 지속적 연결, 비연결성의 개념이 헷갈렸다.처음 내가 이해한 내용으로 Stateful은 서버가 클라이언트의 상태를 보존해야하므로 하나의 응답서버를 사용해야한다.(하나의 응답서버를 사용하지 않을 경우에는 정보를 다른 응답서버로 넘겨줘야하기때문에 기억해야한다는 사실은 변하지 않음) Stateless는 서버가 클라이언트의 상태를 보존하지 않아도 된다. 그러므로 응답서버의 제약이 없지만 클라이언트가 추가 데이터를 전송해야한다. Persistent Connection클라이언트와 서버의 처음 연결을 재사용하여 연결하는데 필요한 3-way-handshake와같은 오버헤드를 줄여줘 요청-응답시간을 줄여준다. 하지만 하나의 응답서버와 통신을 해야한다 Conne..