📗 Effective Java - Item 5 5️⃣ 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 ❓ 의존 객체 주입은 무엇일까? 의존성 주입 (Dependency Injection) 의존성 주입을 설명하기 전에 의존 관계에 대해 먼저 알아야 합니다. 의존 관계(Dependency) A가 B에 의존한다 B의 상태가 바뀔 때 A의 영향을 미치는 것을 의존 관계라고 합니다. public class SpellChecker { private static final Dictionary dictionary = new DefaultDictionary(); private SpellChecker() {} public static boolean isValid(String word) { // TODO 여기 Spel..
🚀 인스턴스화를 막을려거든 private 생성자를 사용하라 ❓ 왜 인스턴스화를 막을려고 하는 걸까 OOP의 핵심은 코드의 재사용입니다. 이 목적을 위해서 우리는, 일단 어떤 틀의 형태인 클래스를 만들고, 그를 통해 인스턴스를 만들어 사용하는 방식을 사용하기로 했습니다.. 그런데 간혹가다 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있습니다. 또는 싱글톤 패턴을 사용하고 싶을 때가 있습니다. ❗️ 싱글톤 패턴 싱글톤 패턴은 객체지향 디자인 패턴의 한 종류로, 어떤 클래스의 인스턴스가 단 하나만 생성되어 시스템 어디에서든지 그 인스턴스에 접근할 수 있도록 보장하는 패턴입니다. 이 패턴은 주로 공유 자원에 대한 접근 제어, 로깅, 데이터베이스 연결, 프린터 스풀러 등과 같이 애플리케이션..
🚀 Item 1 생성자 대신 정적 팩터리 메서드를 고려하라 생성자 대신 정적 팩터리 메서드를 고려하라 왜 그래야할까요? 먼저 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있습니다. 정적 팩터리 메서드(static factory method)는 인스턴스 생성을 위해 new 키워드를 사용하는 대신, 클래스 내부에 정적 메서드(static method)를 정의하여 객체를 반환하는 디자인 패턴입니다. 다음은 정적 팩터리 메서드의 예시입니다. 여기서는 Boolean 타입의 값을 반환하는 valueOf 메서드를 예로 들 수 있습니다. public class Boolean { private final boolean value; private Boolean(bool..
🎯 CORS 🎾 CORS 란? 여러분들이 개발을 하다가 외부 API (ex 네이버지도api, 통합 뱅킹 api, 날씨 api)등을 사용할 때가 있습니다 . 이때 특정한 설정없이 사용하면 다음과 같은 에러가 발생합니다. 왜 이런 에러가 발생하고 어떻게 해결할까요?? 이걸 알기전에 CORS부터 알아야합니다. CORS(Cross-Origin Resource Sharing) 말 그대로 출처(Origin)가 다른 자원들을 공유한다는 뜻입니다. 쉽게 말하자면, 다른 출처(ex. 네이버지도 api , 날씨 api)의 자원에 접근해서 리소스를 사용한다는 뜻입니다. 그렇다면 출처가 다르다의 판단 기준은 무엇일까요? 이를 알기 위해서는 먼저 출처에 대해서 알아보겠습니다. 우리가 흔히 알고 있는 URL에서 도메인만 뜻하는 ..
🎯 쿠키와 세션 1. 🍪 쿠키란? 쿠키는 웹사이트가 나중에 검색할 수 있도록 웹 브라우저 내에 저장되는 웹사이트의 데이터 조각입니다. 쿠기는 사용자가 특정 웹사이트로 돌아왔음을 서버에 알리는 데 사용됩니다. 사용자가 웹사이트를 다시 방문하면 쿠키는 정보를 제공하고 사이트가 선택한 설정과 타켓 콘텐츠를 표시할 수 있도록 합니다. 흔히 웹 상에서 이야기하는 쿠키란 HTTP 쿠키, 웹 쿠키, 브라우저 쿠키라고도 불리며, 웹 브라우저에서 이용하는 정보 파일을 말합니다. 쿠키라는 단어의 어원은 1994년 넷스케이프 한 개발자가 유닉스 프로그래머들이 프로그램 수신 후 변경하지 않고 반환하는 데이터의 패킷을 '매직 쿠키'라고 부르는 것에서 유래했습니다 2. 🍪 쿠키가 저장하는 것들 이 작은 데이터 파일에 어떤걸 저장..
📖 로드밸런싱 1️⃣ 로드밸런싱은 무엇이고 왜 필요 할까? 데이터가 방대해지면서 아무리 좋은 서버라고 해도 이를 수용하는데 있어 무리가 있습니다. 그에 따라 규모가 큰 서비스를 제공하는 회사의 경우 여러 대의 서버를 두고 동일한 데이터를 저장하여 수많은 트래픽을 효과적으로 분산합니다. 수 많은 트래픽을 여러 대의 서버로 분산해줄 수 있는 기술이 없다면 트래픽은 결국 한대의 서버로 집중 될 것입니다. 그렇게 된다면 서비스 속도가 엄청나게 느려질 것이고 최악의 경우 서버가 마비되어 서비스 자체를 제공할 수 없게 될 것입니다. 이러한 경우에 대비하여 여러 대의 서버로 트래픽을 분산 시켜줄 무엇인가가 필요한데 이 기술이 바로 로드 밸런싱입니다. 이렇게 로드 밸런서를 사용하면 수백만명 의 사용자를 동시에 처리하고..
🎯 DNS / 웹 통신 흐름 1️⃣ DNS 기본적으로 DNS(Domain Name System Servers)의 역할은 도메인 주소(example.com)를 IP 주소로 변환하는 역할을 합니다. 사용자가 웹 브라우저에서 입력한 URL을 DNS 서버를 통해 IP 주소를 가져와서 이를 통해 서버와 통신을 하게됩니다. 이러한 흐름을 간략하게 그림으로 보면 다음과 같습니다. 웹 브라우저에서 URL을 입력하면, DNS 서버에 도메인에 대한 실제 IP 주소를 요청하게 됩니다. 그리고 받아온 IP 주소를 통해 웹 서버에 요청할 수 있게 되는 것 입니다. 그리고 위 그림에서의 DNS의 동작을 상세히 그림으로 나타내면 다음과 같습니다. 사용자가 도메인 주소를 입력하여 웹 서버에 요청하기까지의 시나리오는 위 순서대로 흘러..
🚀 OSI 7계층 1️⃣ OSI 모델이란? OSI 7 계층? OSI(Open Systems interconnection) 모델은 다양한 통신 시스템 간에 표준 프로토콜을 통한 통신을 가능하게 하기 위한 개념적 모델로 ISO(국제표준화기구)에의해 만들어졌습니다. 즉, OSI모델은 인간의 공통 언어나 통화 시스템과 마찬가지로 다양한 컴퓨터 시스템에 대해 공통 통신 표준 역할을 합니다. 더 쉽게 말해서 우리가 인터넷 환경에서 여러 사람들과 통신하기 위해 통신 방식에 대한 약속을 했는데 이것이 바로 프로토콜이고 이 프로토콜을 7개의 계층으로 묶어서 통신을 체계화 하고 표준화한게 바로 OSI 7계층입니다. 2️⃣ OSI가 만들어진 배경 아직 가정 소비자에게 널리 보급되지는 않았지만 네트워킹 기술은 1970년대 초..
특정 라이브러리가 최신 node.js 버전과 호환이 되지 않거나 몇몇 버전에서 실제 테스트를 해볼 때는 node.js 버전을 변경해야합니다. 그럼 이때 어떻게 버전을 변경해야 할까요? 몇몇 방법이 있는데 이번에는 `nvm`을 사용해 보겠습니다. ❓ nvm nvm은 Node Version Manager의 약자입니다. 즉 말그대로 노드 버전 관리 매니저입니다. nvm을 통해 특정 노드 버전을 다운 받을 수 있고 이미 받은 노드 버전을로 바로 교체할 수도 있습니다. `nvm` 설치 방법은 공식문서에 자세히 나와있습니다. GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js v..