본문 바로가기

분류 전체보기72

『Network』 HTTP(HyperText Transfer Protocol) HTTP(HyperText Transfer Protocol)는 월드 와이드 웹(WWW)에서 하이퍼텍스트 문서를 전송하기 위한 표준 프로토콜이다.  현대의 HTTP 프로토콜은 단순히 하이퍼텍스트(HTML) 문서를 전송하는 데 그치지 않고 JSON(JavaScript Object Notation), XML(eXtensible Markup Language), HTML, 파일 전송 등의 데이터 전송에 활용되고 있다. 클라이언트(웹 브라우저)와 서버 간의 통신을 담당하며 OSI 7 계층 중 응용 계층에 속한다.  하이퍼텍스트란? 하이퍼텍스트는 문서 내에서 다른 텍스트나 리소스로의 참조(링크)를 포함하는 텍스트를 의미한다.   HTTP 특징 클라이언트-서버 모델클라이언트가 요청을 보내면 서버가 응답을 반환하는 구조.. 2024. 11. 28.
『Java』 Map, Stack, Queue, Deque Map Map은 키-값의 쌍을 저장하는 자료 구조다. 키는 맵 내에서 유일해야 한다. 그리고 키를 통해 값을 빠르게 검색할 수 있다. 키는 중복될 수 없지만, 값은 중복될 수 있다. Map은 순서를 유지하지 않는다. 자바는 HashMap, TreeMap, LinkedHashMap 등 다양한 Map 구현체를 제공한다.이들은 Map 인터페이스의 메서드를 구현하며 각기 다른 특성을 가지고 있다. HashMap구조해시를 사용해서 요소를 지정한다. Key 값은 해시 함수를 통해 해시 코드로 변환되고 해시 코드는 데이터를 저장하고 검색하는 데 사용된다. 특징삽입, 삭제, 검색 작업은 해시 자료 구조를 사용하므로 일반적으로 상수 시간 O(1)의 복잡도를 가진다. 순서순서를 보장하지 않는다.   LinkedHashMa.. 2024. 11. 28.
『Network』 www.google.com을 주소 창에 쳤을 때 일어나는 과정 웹 동작 방식브라우저에서 www.google.com(URL)을 입력하면, DNS lookup을 통해 해당 도메인의 서버 IP 주소를 알아낸 후 서버와 TCP 연결을 설정한다.IP 주소로 HTTP 요청 메시지(request message) 전송 요청을 한다.생성된 HTTP 요청 메시지를 TCP/IP층에 전달한다.HTTP 요청 메시지에 헤더를 추가해서 TCP/IP 패킷을 생성한다.해당 패킷은 전기 신호로 랜선을 통해 네트워크로 전송되고 목적지 IP에 도달한다.server에 도착한 패킷은 unpacking을 통해 message를 복원하고 server의 process로 보낸다.server의 process는 HTTP 요청 메시지에 대한 response data를 가지고 HTTP response message를 생.. 2024. 11. 27.
『Spring MVC』 필터, 인터셉터 공통 업무에 관련된 코드를 각 페이지마다 작성한다면 중복 코드가 많아지고 프로젝트 규모가 커질수록 유지 보수가 어려워진다. 그래서 Spring Framework에서는 다음과 같은 기능들을 제공한다.Filter (필터)Interceptor (인터셉터)AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)위의 세 가지 기능은 모두 특정 작업을 실행하기 전에 선처리하거나 실행한 후에 후처리 하는 데 사용된다. 이번 글에서는 필터와 인터셉터가 무엇인지 그리고 그 차이점에 대해 알아보자.  필터란?필터는 클라이언트의 요청과 응답을 거르는 역할을 한다.  DispatcherServlet에 요청이 전달되기 전에 실행되며 URL 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기.. 2024. 11. 26.
『Spring MVC』 메시지, 국제화 Spring MVC에서 메시지 관리와 국제화(i18n)를 적용하는 방법에 대해 알아보자.  메시지 관리의 필요성개발 과정에서 UI에 표시되는 텍스트를 변경해야 하는 상황이 자주 발생한다.  예를 들어, "상품명"이라는 레이블을 "상품이름"으로 변경해야 한다고 가정하자. 이때 여러 곳에서 하드 코딩된 텍스트를 일일이 수정하는 것은 비효율적이다. 이러한 문제를 해결하기 위해 메시지 관리 기능을 사용하여 모든 텍스트를 한 곳에서 관리할 수 있다.  메시지 파일 생성 및 적용메시지 파일 생성메시지 관리를 위해 messages.properties 파일을 생성하고 키-값 쌍으로 텍스트를 관리한다. 국제화를 위한 메시지 파일 생성다국어 지원을 위해 각 언어별로 메시지 파일을 관리한다.  Spring에서 메시지 소스 .. 2024. 11. 26.
『Network』 한 번에 끝내는 DNS 인터넷을 사용할 때 www.naver.com과 같은 도메인 이름을 주소창에 입력한다. 하지만 실제로 컴퓨터는 이러한 도메인 이름이 아닌 IP 주소를 통해 통신한다.  그렇다면 어떻게 도메인 이름이 IP 주소로 변환될까? 이때 중요한 역할을 하는 것이 바로 DNS(Domain Name System)다.  DNS란 무엇인가?DNS는 분산 구조형 데이터베이스로 도메인 이름을 IP 주소로 변환해 주는 서비스다. 마치 전화번호부에서 사람의 이름으로 전화번호를 찾는 것과 비슷하다.  도메인 네임의 구조와 관리도메인 네임은 트리 구조로 되어 있으며 각 영역(Zone) 별로 구분되어 분산 관리된다.  예를 들어, www.naver.com에서 com은 최상위 도메인(TLD)이고 naver는 그 하위 도메인이다. 마지막으.. 2024. 11. 26.
『Spring Boot』 Spring Boot Annotation 정리 스프링 부트를 사용하여 RESTful API를 개발할 때 주로 사용하는 어노테이션을 알아보자. 특히 JSON 형식의 데이터를 처리할 때 유용한 애노테이션들을 중심으로 살펴보자. 어노테이션을 사용할 때에도 내부 동작 원리나 해당 어노테이션을 사용하게 된 배경을 아는 것 또한 중요하지만 Deep Dive 하기 전에 40개 정도만 가볍게 한번 훑어보자.  @RestController @Controller와 @ResponseBody를 결합한 애노테이션으로 컨트롤러의 메서드들이 JSON 형식의 데이터를 반환하도록 한다.   @ResponseBody 메서드의 반환 값을 HTTP 응답 본문으로 변환한다. @RestController에서는 기본적으로 적용된다.  @RequestMapping 클래스나 메서드 수준에.. 2024. 11. 25.
『Java』 Java 8, Stream 기본 Java 8에서 도입된 스트림(Stream)은 컬렉션 데이터를 필터링, 변환, 집계 등의 기능을 통해 처리할 수 있다. 스트림을 사용하면 선언적이고 간결한 코드를 작성하여 데이터 처리 로직을 구현할 수 있다. 이번 글에서는 스트림의 생성부터 가공, 그리고 결과 생성까지 단계별로 알아보자.   생성하기배열 스트림 생성 배열을 스트림으로 변환하려면 Arrays.stream() 또는 Stream.of() 메서드를 사용할 수 있다.  컬렉션 스트림 생성 컬렉션 프레임워크의 클래스들은 기본적으로 stream() 메서드를 제공하여 스트림을 생성할 수 있다.  빈 스트림 생성 빈 스트림은 Stream.empty()를 사용하여 생성할 수 있다.  Stream.builder()수동으로 개별 요소를 추가하여 스트림을 생성.. 2024. 11. 24.
『Java』 내부 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스 Java에서 중첩 클래스(Nested Class)는 다른 클래스 내부에 정의된 클래스를 의미한다.  중첩 클래스의 종류중첩 클래스는 다음과 같이 네 가지로 분류된다.내부 클래스(Inner Class)정적 중첩 클래스(Static Nested Class)지역 클래스(Method Local Inner Class)익명 클래스(Anonymous Class)각각의 중첩 클래스는 사용하는 방법과 특징이 다르므로 아래에서 자세히 살펴보자.  내부 클래스 (Inner Class)내부 클래스는 외부 클래스의 멤버로 선언되는 클래스이며 Non-Static Nested Class라고도 한다.외부 클래스의 인스턴스에 종속적이다.외부 클래스의 모든 멤버(인스턴스 변수 및 메서드)에 접근할 수 있다.외부 클래스의 인스턴스를 생성.. 2024. 11. 24.