과거에는 컴퓨터 네트워크 아키텍처가 여러 가지가 존재했는데, 지금은 그 아키텍처가 인터넷으로 통일되었다. 이 인터넷의 동작을 규정 및 정의하는 규칙을 프로토콜이라 한다. 인터넷이란? A Inter-Connected Network of Networks : 네트워크(Subnet)들이 상호 연결된 네트워크 네트워크 (Network) 다양한 유형의 호스트와 스위치들을 통신 링크로 연결한 분산 시스템 호스트 (Host) 인터넷의 끝에 연결된 종단 장치(End-system) - 어떤 사용자가 어떤 프로그램을 사용하기 위한 실제 장치 PC, 서버, 스마트 폰, IoT 센서 등 종류가 여러 가지 통신 링크 (Link) 통신 장치들 간에 정보 전달 단위인 패킷을 전달하는 유, 무선 매체 패킷은 정보 전달 단위를 통칭해서..
이 글에서는 SOP, CORS, CORS 동작 방식에 대해 설명한다. 프로젝트에서 코드로 CORS 정책 설정하는 방법에 대해서는 아래 포스팅을 참고하기 바란다. Spring boot 환경에서 CORS 정책 설정하기 (Feat. Spring Security) 이번 글에서는 Spring Boot 환경에서 CORS 이슈를 경험하고 해결한 과정을 정리했다. 혹시 CORS를 모르거나 관련된 배경지식에 대해 궁금하다면 아래 포스팅을 참고하면 좋을 것 같다. SOP와 CORS 최근 bool-flower.tistory.com SOP (Same Origin Policy) 어떤 origin에서 불러온 문서 또는 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 보안 방식 여기서 origin은 출처를 의미..
인터넷 이메일 시스템 구조 시스템 구성 요소 User Agent - 사용자 장치에서 메일 작성, 읽기 관리 기능 수행 Mail Server - 다수 사용자들의 메일박스 관리, 메일 송, 수신 제어 SMTP - Mail Server 간 통신을 지원하는 메일 전송 프로토콜 User Agent와 Mail Server 정보는 메일주소에 나타난다. 메일 주소에는 Local Part와 Domain Name 영역이 나뉜다. 아래 예시를 보면 쉽게 이해할 수 있을 것이다. Local Part - 사용자 메일 박스의 이름 Domain Name - 목적지 메일 서버의 도메인 이름 Local Part @ Domain Name ex) inhan1009 @ naver.com 이메일 전송 과정 송신자 UA에서 메일 작성 후 메일..
Comparator와 Comparable는 자바로 알고리즘 문제를 풀다 보면 반드시 접하게 된다. 나도 최근 알고리즘 공부를 진행하면서 이 인터페이스들을 구현할 필요가 있었고, 아직 완전히 숙지하지 못한 것 같아 정리해본다. 정렬 어떤 문제에서는 임의로 클래스를 생성해서 객체 간의 값을 비교할 수 있도록 정렬 기준을 정의할 필요가 있다. 이때 사용하는 것이 이 글의 주제인 Comparator 인터페이스와 Comparable 인터페이스이다. 보통 자바에서는 아래 코드로 배열 또는 리스트를 정렬한다. Arrays.sort(arr); Collections.sort(list); 자바에서 정렬은 특별한 정의가 되어 있지 않으면 오름차순을 기준으로 한다. Comparable Comparable 인터페이스는 comp..
HTTP(HyperText Transfer Protocol) Text는 의미를 전달하는 목적을 가지고 글 또는 문서를 표현하는 것이다. 우리는 Text에 순차적으로 접근하고, 순차적으로 정보를 습득한다. 왼쪽에서 오른쪽으로 읽고, 위에서 아래로 내려가면서 읽는다. HyperText는 이러한 특성을 뛰어넘는다는 의미다. 링크를 클릭해 다른 페이지로 이동한다던지, 같은 페이지의 다른 데이터로 이동하는 등 순차적인 접근을 뛰어넘어, 비순차적인 접근을 표현할 수 있는 것을 HyperText라고 한다. HTML을 이용해 이 HyperText를 표현한다. 이 HyperText를 주고 받는 것에 대한 약속이 바로 HTTP이다. 다시 말해 HTTP는 HTML 리소스를 주고받기 위한 소통방식 또는 약속이다. HTTP 특..
Web Server 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠를 제공하는 서버. 클라이언트의 요청을 가장 앞에서 서비스 정적인 컨텐츠(HTML, CSS, JavaScript)를 제공해야 하는 경우 WAS를 거치지 않고 바로 자원 제공 동적인 컨텐츠를 제공해야 하는 경우 클라이언트의 요청(Request)을 WAS로 보내고, 이 후 WAS가 처리한 결과를 클라이언트에게 전달(Response) ex) Apache, Nginx 등 WAS(Web Application Server) DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 에플리케이션 서버 DB 연동, 클러스터링, 로드밸런싱 등을 처리 Web Server로부터 전달받은 요청을 처리하여 다시 Web Ser..
객체지향 설계의 5대 원칙 객체지향에는 흔히 SOLID라고 불리는 5가지 원칙이 있다. 이 원칙들을 지키면서 개발한다면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 된다. 단일 책임 원칙(Single Responsibility Principle, SRP) 하나의 클래스는 하나의 책임만 가져야 한다. 또한 클래스는 하나의 이유만으로 변경되어야 한다. '책임'에 대해 명확한 이해가 되지 않는다면, 일단은 '기능' 정도로만 이해하고 코드를 보면서 개념을 잡아보자. 어떠한 역할에 대해 변경사항이 발생했을 때, 영향을 받는 기능만 모아둔 클래스라면 동일한 책임을 지닌 기능만 모여 있다고 볼 수 있다. 만약 어떤 클래스가 여러 책임을 지닌 기능을 가지고 있다면, 여러 기능으..
싱글톤 패턴이란? 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 즉, 하나의 클래스에 오직 하나의 인스턴스만 가진다. public class Singleton { private static Singleton INSTANCE = new Singleton(); private Singleton() { // 생성자는 외부에서 호출못하게 private 으로 지정해야 한다. } public static Singleton getInstance() { return INSTANCE; } public void say() { System.out.println("hi, there"); } } 생성자를 private으로 선언하고 static 변수에 객체를 담아 그 객체만을 반환하는 메서드를 구현한다. 싱글톤 패턴을 ..