전체 글
Redis redis-cli 명령어 정리
redis-cli 명령어 각 Key는 고유하고, 거기에 대응하는 Value 값에는 Strings, Lists, Hashes 등 다양한 데이터 타입이 저장될 수 있습니다. Redis 커맨드 명령어도 데이터 타입에 따라 쓸 수 있는 것이 달라집니다. Strings # SET : Key에 대응하는 Value에 문자열을 저장합니다. > SET key1 value1 # GET : Key에 대응하는 Value 값을 가져옵니다. > GET key1 "value1" # INCR : Key에 대응하는 Value 값을 Integer로 취급하여 1증가 시킵니다. > SET num 10 > INCR num (integer) 11 # DECR : Key에 대응하는 Value 값을 Integer로 취급하여 1감소 시킵니다. > ..
Redis 간단하고 빠른 In-Memory 데이터 저장, docker에 Redis 설치, Redis 명령어
Redis: Remote Dictionary Server Redis는 메모리 내(In-Memory)에서 데이터를 저장하고 관리하는 오픈 소스 데이터 구조 서버입니다. Redis 특징 1. In-Memory Store Redis는 메모리 내에 데이터를 저장할 수 있는 In-Memory DB 입니다. 디스크보다 메모리에서 데이터를 읽고 쓰는 것이 빠르기 때문에 데이터에 빠르게 액세스 할 수 있습니다. 이러한 특징으로 Redis는 캐시 역할도 하여 다른 DB의 부하를 줄이고 응용 프로그램의 성능을 향상시킬 수 있습니다. Redis는 In-Memory 즉, 휘발성인 RAM에 저장하기 때문에 데이터가 영속성을 갖지 않는 문제가 있습니다. 2. 휘발성 Redis는 메모리 내에 데이터를 저장하기 때문에 시스템을 다시..
MongoDB GROUP BY와 유사한 Aggregation
Aggregation MongoDB의 aggregation은 데이터를 처리하고 변환하기 위한 강력한 도구입니다. Aggregation 파이프라인은 여러 단계의 데이터 처리 단계를 포함하며, 각 단계는 데이터를 조작하고 변환하여 원하는 결과를 생성합니다. 즉 위에서부터 각 단계마다 입력한 Operators에 따라 데이터가 처리되고 처리 된 데이터가 다음 단계로 넘어간다는 것입니다. Aggregation은 SQL의 GROUP BY와 유사한 작업을 수행할 수 있으며, 데이터의 그룹화, 정렬, 필터링, 변환, 계산 등 다양한 작업을 지원합니다. https://www.mongodb.com/docs/manual/reference/operator/aggregation-pipeline/ Aggregation Stage..
MongoDB 배열 다루는 문법
배열 내 숫자 조건으로 필터링: $elemMatch 배열 내의 숫자를 조건으로 필터링하기 위해선 MongoDB의 배열 쿼리 연산자인 $elemMatch를 사용해야 합니다. # 초기 데이터 { "name": "Kim", "numbers": [5, 10, 15, 20, 25] } $elemMatch 사용하지 않은 경우 db.users.find({ numbers: { $gte: 17, $lte: 19 } }) 이 쿼리는 배열 안에 있는 요소들 중 17이상이고 19이하인 요소가 있는 document를 찾고싶습니다. 위 조건대로 본다면 요소엔 17이상 19이하인 요소는 없기 때문에 위 document는 포함되지 않아야한다 생각합니다. 하지만 결과는 위 document가 결과에 포함됩니다. 그 이유는 위 쿼리는 배..
MongoDB MQL(MongoDB Query Language)
SQL vs MQL SQL에 익숙한 사람은 SQL과 비교하여 학습하면 좀 더 MQP을 쉽게 이해할 것이라 생각합니다. https://www.mongodb.com/docs/manual/reference/sql-comparison/ SQL to MongoDB Mapping Chart — MongoDB Manual Docs Home → MongoDB Manual In addition to the charts that follow, you might want to consider the Frequently Asked Questions section for a selection of common questions about MongoDB.The following table presents the various S..
MongoDB MongoDB 배포 형태: Replica Set & Sharded Cluster
MongoDB 배포 형태: Replica Set와 Sharded Cluster Replica Set Replica Set은 고가용성(HA)과 데이터 복제를 위해 사용되는 구성입니다. 여러 각 노드는 독립적인 데이터베이스 인스턴스로서 역할을 수행합니다. 때문에 예를 들어 Primary 노드에 장애가 발생하더라도 Secondary 노드들은 여전히 서비스를 제공할 수 있습니다. 이는 시스템의 가용성을 높이고, 사용자가 중단 없이 서비스를 이용할 수 있도록 해줍니다. Primary 노드 Replica Set 중 단 하나의 노드입니다. Primary 노드는 데이터 Read / Write 요청을 모두 처리할 수 있습니다. 다른 Secondary 노드들에게 데이터를 복제합니다. Secondary 노드 Replica ..
MongoDB MongoDB: 문서 지향 NoSQL
MongoDB MongoDB는 NoSQL로서, 오픈소스 문서 지향(Document-Oriented) 데이터베이스 시스템입니다. 우리가 기존에 접할 수 있는 RDBMS(MySQL, Oracle)와는 다른 데이터 형식을 갖고 있는 NoSQL에 대해 먼저 설명하도록 하겠습니다. MongoDB의 특징 NoSQL NoSQL은 'Not Only SQL' 또는 'Non-Relational'의 약자로, 관계형 데이터베이스(RDBMS)와는 다른 DB 시스템입니다. NoSQL은 다양한 유형으로 나뉘며, 각 유형마다 특정한 데이터 모델과 사용 사례에 최적화되어 있습니다. 아래와 같은 유형은 NoSQL의 대표적인 유형입니다. Document Store: MongDB Key-Value Store: Redis, DynamoDB ..
SQL Transaction(트랜잭션): 데이터의 정합성을 보장하기 위한 방법
트랜잭션: Transaction 트랜잭션은 DB에서 일련의 작업을 논리적으로 묶은 것입니다. 즉 여러 SQL 쿼리문을 하나의 처리로 묶는 것입니다. 유명한 예를 들어보겠습니다. 예제) 고객 A와 B가 있습니다. 고객 A가 고객 B에게 1,000원을 이체하려는 상황입니다. 문제 1. 고객 A가 고객 B에게 1,000원을 이체하게 된다면 고객 A의 잔고는 -1,000원 연산이 이루어져야 하고, 고객 B의 잔고는 +1,000원 연산이 이루어져야 합니다. 하지만 고객 A의 잔고가 줄어드는 연산은 이루어지고, 그 후 오류가 발생하여 B의 잔고가 오르는 연산이 이루어지지 않으면 고객 A의 돈은 감소하고 고객 B의 돈은 증가하지 않게 됩니다. 우리가 바라는 것은 오류가 발생하게 되어 B의 잔고가 오르지 않는다면, 당..
SQL 조회 성능을 위한 인덱스(Index)
인덱스 인덱스(Index)는 DB에서 조회, 정렬, 그룹화 등의 연산을 빠르게 수행하기 위해 사용되는 정렬된 자료구조입니다. 특정 열 또는 열의 조합에 대한 정렬된 키와, 해당 키가 대응한 실제 데이터 레코드의 위치로 이루어져 있습니다. (key-value) 형태 예를 들어 위와 같이 주어진 `user` 테이블에서 나이가 20세 미만인 사용자를 찾는 쿼리(`select * from user where age < 20`)를 실행한다고 가정해봅시다. 해당 쿼리는 모든 데이터를 순차적으로 조회하여 조건을 만족하는 결과를 찾아낼 것입니다. 위 테이블은 데이터가 적게 담겨져 있어서 조회 시간에 큰 문제가 없지만, 만약 테이블에 데이터가 매우 많이 담기게 된다면 조회 기능의 성능은 매우 저하될 것입니다. 우리는 조..
Spring Boot Custom Validation 어노테이션 만들기
Spring Hibernate Validator에 대해서 이해가 부족하다면 다음 글을 먼저 읽는 것을 추천합니다. Spring Boot Hibernate Validator와 Data Binding: 데이터 유효성 검사와 데이터 연결 — INTP 개발자 (tistory.com) Spring Boot Hibernate Validator와 Data Binding: 데이터 유효성 검사와 데이터 연결 Validation이란? 유효성 검증으로 전달 받은 데이터 객체의 내용에서 잘못된 내용이 있는지 유효성을 확인합니다. Spring은 주로 다음 두 가지 방식으로 유효성 검증을 합니다. Java Bean Validation Spring v yeo-computerclass.tistory.com Custom Validat..
Spring Boot Jsoup을 통한 웹 크롤링
웹 크롤링이란? 웹 크롤링은 웹 사이트에서 정보를 수집하고 추출하는 자동화된 프로세스를 의미합니다. 웹 크롤링은 일반적으로 웹 사이트의 robots.txt 파일을 준수하고, 무분별한 크롤링이나 스크래핑이 웹 서버에 부하를 일으키지 않도록 주의해야 합니다. 또한, 웹 사이트의 이용 약관을 준수해야 하며, 합법적인 목적으로만 사용해야 합니다. 크롤링을 할 때는 데이터 소유자의 권리를 존중하고 윤리적인 사용을 지키는 것이 중요합니다. Jsoup Jsoup은 HTML 파싱 및 조작을 위한 자바 라이브러리로, 웹 크롤링 작업에서 많이 사용됩니다. Jsoup을 통해 HTML 문서에서 원하는 정보를 추출할 수 있습니다. Jsoup 라이브러리 추가 dependencies { implementation 'org.jsou..
JS padStart와 padEnd 메소드: 문자열 길이에 맞게 문자 채워넣기 (문자열 패딩)
JavaScript의 padStart와 padEnd는 문자열을 특정 길이로 패딩하는데 사용됩니다. 이를 통해 지정한 문자를 원하는 길이로 문자열을 채우거나, 텍스트를 정렬하는데 활용됩니다. padStart와 padEnd는 ES8(ECMAScript 2017)부터 표준으로 추가되었습니다. 따라서 오래된 브라우저나 환경에서는 지원되지 않을 수 있음에 주의해야합니다. padStart 문자열의 시작 부분에 특정 문자열로 채워, 지정한 길이 만큼 만듭니다. 첫 번째 인자는 최종 길이를 나타냅니다. 두 번째 인자는 채울 문자열입니다. 두 번째 인자를 생략하면 기본값으로 공백(" ")이 사용됩니다. 아래 예제는 문자열 길이가 5가 되도록 문자열 "0"을 시작 부분부터 채워준 코드입니다. const str = "123..
웹 보안을 위한 XSS, CSRF 방어
XSS: Cross-Site Scripting XSS는 공격자가 악의적인 스크립트를 웹 페이지에 삽입하는 공격입니다. 해당 스크립트 코드는 게시판이나, 이미지, 웹 메일 등에 삽입될 수 있습니다. 삽입된 스크립트는 사용자의 브라우저에서 실행되며, 공격자에게 사용자의 정보를 노출하거나 악의적인 행동을 수행할 수 있습니다. 공격자가 위와 같은 악의적인 스크립트를 취약한 웹 페이지에 삽입합니다. 사용자가 해당 페이지를 열면, 악의적인 스크립트가 실행되어 예상치 못한 동작을 수행합니다. XSS는 사용자가 웹 사이트를 신용하여 악의적인 스크립트를 클릭한 경우로, 주로 사용자(클라이언트)를 대상으로 한 공격입니다. XSS 해결 1: 이스케이프 처리 XSS 취약점은 웹 어플리케이션 사용자로부터 입력받은 데이터 값을 ..
D3.js SVG: 2차원 벡터 그래픽을 표현하는 XML 기반 마크업 언어
SVG SVG(Scalable Vector Graphics)란 XML 기반의 벡터 그래픽 형식으로, 웹 페이지와 어플리케이션에서 벡터 기반의 그래픽을 표현하기 위해 사용됩니다. HTML이 헤더, 표와 같은 요소를 제공하는 거처럼 SVG는 원, 사각형, 곡선 등을 그릴 수 있는 요소를 제공합니다. SVG 장점 SVG는 이미지가 아니기 때문에 크기를 조절하여도 이미지가 깨지지 않습니다. 또한 간단한 이미지 같은 경우 JPG나 PNG 같은 비트맵 파일에 비해 크기가 작습니다. 이러한 이유로 아이콘이나 로고에 많이 쓰입니다. 이미지 뿐만 아니라 JS와 CSS와 결합하여 애니메이션을 만들 수 있고, 차트와 그래프를 표현하여 데이터도 시각화할 수 있습니다. SVG 사용법 SVG 시작 태그를 먼저 작성해줍니다. 속성..
D3.js 데이터 시각화를 구현하기 위한 자바스크립트 라이브러리
D3.js D3.js는 "Data-Driven Documents"의 약어로, 데이터 시각화를 위한 무료 오픈 소스 JavaScript 라이브러리입니다. D3.js는 데이터를 가져와 이를 시각화 시켜주는 도구로써 그래프, 차트, 지도 대시보드 등 다양한 형태의 데이터 시각화를 구현하는데 도움이 됩니다. D3.js는 HTML 문서의 DOM 요소를 선택하고 조작하여 데이터를 시각화합니다. 또한 SVG를 사용하여 그래프, 차트 등의 요소를 그립니다. SVG란? SVG(Scalable Vector Graphics)란 XML 기반의 벡터 그래픽 형식으로, 웹 페이지와 어플리케이션에서 벡터 기반의 그래픽을 표현하기 위해 사용됩니다. HTML이 헤더, 표와 같은 요소를 제공하는 거처럼 SVG는 원, 사각형, 곡선 등을..
JS 자바스크립트: `프로토타입` 기반 객체 지향 프로그래밍 언어
프로토타입(Prototype) 프로토타입 기반 언어는 객체 지향 프로그래밍의 한 형태로, 클래스 기반 언어와는 다른 객체 지향 모델을 따릅니다. JS(JavaScript)는 대표적인 프로토타입 기반 언어입니다. 프로토타입 상속: 클래스 기반 언어에서는 객체를 클래스의 인스턴스로 생성하는 반면, 프로토타입 기반 언어에서 객체는 다른 객체로부터 직접 상속됩니다. 즉, 객체는 다른 객체의 프로퍼티와 메서드를 상속받아 사용할 수 있습니다. 이때, 새로운 객체는 원본 객체의 프로토타입을 상속받습니다. 이를 통해 코드 재사용과 확장이 간단하게 이루어집니다. 프로토타입 객체: 프로토타입 기반 언어에서는 객체가 자체 속성과 메서드를 가짐과 동시에 prototype이라는 특수한 속성을 가집니다. 이 prototype 속..
Spring Boot Validation @NotNull, @NotEmpty, @NotBlank 차이점
유효성 검증을 위해 Java Bean Validation을 사용합니다. 그 중 성격이 비슷한 @NotNull과 @NotEmpty, @NotBlank에 간략히 정리하겠습니다. 객체의 유효성 검증, Hibernate Validator에 대한 개념과 사용 예시를 자세히 알고 싶으면 다음 링크를 따라가주시면 됩니다. :) https://yeo-computerclass.tistory.com/284 Spring Hibernate Validator와 Data Binding: 데이터 유효성 검사와 데이터 연결 Validation이란? 유효성 검증으로 전달 받은 데이터 객체의 내용에서 잘못된 내용이 있는지 유효성을 확인합니다. Spring은 주로 다음 두 가지 방식으로 유효성 검증을 합니다. Java Bean Valid..
Vue.js vue-infinite-loading을 사용한 무한 스크롤 구현하기
무한 스크롤 웹 어플리케이션에서 페이지 스크롤이 아래로 내려가면서 자동으로 추가 콘텐츠를 로드하는 무한 스크롤은 사용자 경험을 향상시킵니다. 바닐라 JS로 구현도 가능하지만 간단하게 구현하기 위해 Vue.js에서 제공하는 플러그인을 사용하여 구현해보겠습니다. vue-infinite-scroll과 vue-infinite-loading이 있지만 vue-infinite-loading vue 컴포넌트 라이브러리를 사용한 예시를 보여드리겠습니다. vue-infinite-loading Vue.js 애플리케이션에 무한 스크롤 기능을 추가하는데 도움을주는 Vue 컴포넌트 라이브러리입니다. 이 라이브러리를 통해 무한 스크롤을 간단하게 구현할 수 있습니다. 다음 링크에 나와있는 예제 코드를 참고하여 작성했습니다. http..
Vue.js mixin 사용 방법: 코드 재사용 및 컴포넌트 공유
Mixin Vue.js의 mixin은 컴포넌트 간에 코드 및 로직을 공유하고 재사용하기 위한 도구입니다. mixin을 통해 컴포넌트에 추가적인 데이터 속성, 메서드, 라이프사이클 훅 등을 주입하여 코드 재사용을 쉽게 할 수 있도록 해줍니다. 쉽게 말해서 정의한 mixin인 코드를 다른 컴포넌트에서 사용할 수 있도록 하는 방법입니다. Vue.js 2와 Vue.js 3에서의 mixin 사용법은 다릅니다. Vue.js 2에서는 `mixins` 속성을 사용하여 mixin을 추가하고, Vue.js 3에서는 Composition API의 `provide` 및 `inject` 함수를 사용하여 비슷한 동작을 구현합니다. Vue.js 3의 Composition API를 사용하여 mixin보다 더 강력하고 유연한 컴포넌트..
네트워크 TCP/IP 모델 이해하기
네트워크 아키텍처 네트워크에서 컴퓨터와 네트워크 장비들이 데이터를 주고받기 위한 규칙이 필요합니다. 이런 규칙은 `프로토콜(Protocol)`이라 불리며, 데이터 전송 상대방, 형식, 전송 순서와 절차, 방법 등을 규정합니다. 즉 네트워크를 구성하는 컴퓨터와 다양한 네트워크 장비들은, 프로토콜에 따라 데이터를 주고 받습니다. 네트워크는 복잡한 시스템이기 때문에 이를 단순화하고 이해하기 쉽게 만들기 위해 네트워크 아키텍처(Network Architecture)를 사용합니다. 이 아키텍처는 모듈화(Modularity) 와 계층화(Layering) 를 통해 네트워크를 추상화(Abstraction) 시키는 방법입니다. 추상화: 복잡한 것을 간단하게 만드는 원리로, 네트워크를 논리적인 단계로 분할하여 각 단계마다..
네트워크 컴퓨터 네트워크의 구성 요소와 네트워크의 종류
컴퓨터 네트워크 컴퓨터 네트워크는 컴퓨터와 다른 기기들이 서로 연결되어 데이터를 주고 받을 수 있도록 만들어진 시스템입니다. 이를 통해 우리는 웹 서칭, 이메일, 파일 공유, 온라인 게임, 소셜 미디어 등 다양한 온라인 활동을 할 수 있습니다. 네트워크 구성 요소 컴퓨터 네트워크에서는 중요한 세 가지 구성요소가 있는데, 하나는 `컴퓨터`이고, 다른 하나는 `전송(연결) 매체`, 마지막으로 `네트워크 장비`입니다. 1. 컴퓨터: 컴퓨터는 데이터를 생성하여 보내거나, 받는 도구입니다. 정확히 말하면 컴퓨터의 설치된 애플리케이션(Application)이 데이터를 생성하고 받는 역할을 합니다. 2. 전송 매체: 데이터를 한 컴퓨터에서 다른 컴퓨터, 컴퓨터와 네트워크 장비로 이동시키는데 사용되는 물리적인 통로입니..
SpringBoot에서 JUnit5로 효율적인 단위 테스트 작성하기, Assertions로 값 검증하기
JUnit5 소개 JUnit은 자바 개발에서 단위 테스트를 작성하기 위한 표준 프레임워크입니다. JUnit을 사용하여 각각의 코드 조각을 테스트(단위 테스트)하고 그 결과를 검증할 수 있습니다. JUnit은 테스트 메서드를 정의하고 테스트 실행을 관리하는 데 도움을 줍니다. JUnit5는 다음 세 가지 구성 요소로 구성된 자바 단위 테스트 프레임워크입니다. JUnit Platform: JUnit 5의 기반을 형성하는 모듈입니다. 테스트 실행 엔진(Test Execution Engine)을 포함하며, 다양한 테스트 프레임워크를 지원하고 확장성을 제공합니다. 다양한 환경에서 테스트 실행을 지원하며, 새로운 테스트 엔진을 개발할 수 있습니다. JUnit Jupiter: JUnit 5의 새로운 테스트 API입니..
SpringBoot에서 MockMvc을 활용한 컨트롤러, HTTP 요청 테스트 방법
MockMvc 소개 MockMvc: MockMvc는 Spring Framework의 일부로, 웹 어플리케이션의 컨트롤러를 테스트하는 데 사용됩니다. 이를 통해 HTTP 요청을 시뮬레이션하고 컨트롤러의 동작을 테스트할 수 있습니다. Spring 환경을 통합한 테스트 Spring 컨텍스트와 통합한 테스트 (Spring Bean을 주입하여 테스트 가능) HTTP 요청 및 응답 시뮬레이션 Spring Boot 프로젝트 설정 MockMvc와 JUnit을 사용하기 위해선 아래와 같은 의존성을 추가해야 합니다. testImplementation 'org.springframework.boot:spring-boot-starter-test' MockMvc를 사용한 컨트롤러 테스트 MockMvc를 구성하여 API 엔드포인트..
MyBatis ON DUPLICATE KEY UPDATE: insert Key 중복 시 update 처리
ON DUPLICATE KEY UPDATE: upsert 구현 `ON DUPLICATE KEY UPDATE`는 `MySQL` 및 `MariaDB`에서 사용되는 SQL 문장 중 하나로, 주로 데이터를 삽입하려고 할 때 기존 레코드와 중복된 경우(중복 레코드) 기존 레코드를 업데이트하거나 무시하는데 사용됩니다. 중복 레코드: 데이터베이스에 이미 동일한 고유 키(primary key 또는 unique key)가 존재하는 경우, `ON DUPLICATE KEY UPDATE`를 사용하여 중복 레코드를 업데이트하거나 새로운 값을 가질 수 있습니다. 구문: INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE K..
CORS(Cross-Origin Resource Sharing) 이해와 해결 방법
CORS CORS (Cross-Origin Resource Sharing)는 'Cross-Origin Resource Sharing'의 약어로, 웹 보안 메커니즘 중 하나입니다. 이 메커니즘은 웹 브라우저에서 실행되는 웹 페이지가 다른 웹사이트(출처)에서 데이터를 요청할 때 발생할 수 있는 보안 정책 중 하나입니다. 서로 다른 출처(origin) 간에 데이터 공유하려하면 이를 제한하는 보안 메커니즘(SOP, Same-Origin Policy)에 의해 CORS 오류가 발생하게 됩니다. 이러한 CORS 에러를 해결하기 위해선 CORS를 설정하여, 출처가 다른 서버 간의 리소스 공유를 허용해주어야합니다. 출처(Origin): Protocol + Hostname(Domain) + Port · 도메인(Hostna..
웹 데이터 저장: 로컬 스토리지, 세션 스토리지, 쿠키
웹 어플리케이션은 사용자 데이터를 저장하고 관리하는데 다양한 방법을 제공합니다. 그중 클라이언트 측에서 데이터를 저장하고 관리하기 위한 방법으로 `로컬 스토리지(Local Storage)`, `세션 스토리지(Session Storage)` 그리고 `쿠키(Cookies)`가 있습니다. 로컬 스토리지 (Local Storage) 로컬 스토리지는 브라우저에서 데이터를 영구적으로 저장하는데 사용됩니다. 이 데이터는 브라우저를 종료해도 유지되며, 사용자의 로컬 환경에서 접근이 가능합니다. 주로 사용자 설정과 같은 데이터를 저장하는데 유용합니다. 데이터는 문자열로 저장됩니다. 브라우저마다 별도로 유지되며, 도메인간에 공유되지 않습니다. 저장 용량은 일반적으로 5~10MB이고, 브라우저마다 다를 수 있습니다. 세션 ..
Jar와 War의 차이(spring initializr packaging)
JAR와 WAR은 자바 프로그램 및 관련 자원을 패키지하고 배포하기 위한 파일 형식입니다. 프로젝트 생성시 `Packaging` 옵션에서 JAR 혹은 WAR를 선택하여 해당 형식으로 어플리케이션 패키징하여 배포할 수 있습니다. JAR (Java Archive) 확장자: .jar JAR 파일은 자바 클래스 파일, 리소스 파일 (이미지, 설정 파일 등) 및 라이브러리(JAR 파일 자체 또는 외부 라이브러리)를 하나의 아카이브 파일로 패키징합니다. 일반적으로 JAR 파일은 자바 클래스 파일과 그 클래스들이 사용하는 이미지, 설정 파일, 텍스트 파일, 라이브러리 등을 포함합니다. 이것은 다른 프로그램에서 재사용되거나 실행될 수 있도록 도와줍니다. 예를 들어, 다른 사람이 만든 유용한 코드 조각을 JAR 파일로 ..
Servlet에 대해 알아보자!! 동작 원리 파악하기
Servlet 서블릿은 자바를 기반으로 한 웹 어플리케이션 개발 기술로, 클라이언트의 요청과 응답을 처리하고 동적인 콘텐츠를 생성하는 역할을 담당합니다. Servlet의 역할 앞서 포스팅한 웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기 에서 서블릿과 서블릿 컨테이너에 관해 간단하게 설명을 했었습니다. 앞에 내용을 안다는 전제하에 설명을 하도록 하겠습니다. 원래는 클라이언트가 데이터를 전송하기 위해서는 소켓 연결, HTTP 요청 메시지 파싱, Content-Type 확인, HTTP 응답 메시지 생성 등 많은 것들을 직접해주어야 했지만 서블릿을 지원하는 WAS(엄밀히 말하면 WAS안에 포함되어 있는 서블릿 컨테이너)를 사용하면서 비즈니스 로직을 제외한 모든 처리를 서블릿이 해..
웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기
웹 (Web): HTTP 기반 웹은 HTTP(하이퍼텍스트 전송 프로토콜) 기반으로 작동합니다. HTTP 메시지는 웹 상에서 클라이언트와 서버 간에 데이터를 교환하는데 사용되는 형식화된 텍스트입니다. HTML, 문서파일, 이미지, 오디오, 영상, XML, JSON 등 다양한 데이터유형을 클라이언트와 서버 사이에서 안전하게 전송할 수 있습니다. 웹 서버 (Web Server) 웹 서버는 클라이언트(웹 브라우저)로부터 HTTP 요청을 받아들이고, 정적인 웹 리소스를 제공하는 역할을 합니다. 정적 리소스: HTML 파일, 이미지, CSS 파일 등 웹 서버 예: Apache, Nginx 등 웹 어플리케이션 서버 (Web Application Server): 웹 어플리케이션 서버는 웹 서버의 확장된 개념으로, 동적..
JPA Entity의 기본 생성자가 필수인 이유
Entity는 반드시 `기본 생성자`를 가져야한다. 기본 생성자의 접근 제어자는 `public`, `protected`이어야한다. JPA를 학습할 때 위와 같은 원칙을 본적이 있을 겁니다. 무심코 넘어갔던 개념을 되짚어보기 위해 JPA Entity의 기본 생성자에 대해 포스팅 해보겠습니다. 기본 생성자가 있어야하는 이유? 리플렉션(Reflection)을 통한 객체 생성: JPA는 데이터베이스로부터 엔티티 객체를 생성하여 값을 주입할 때 `Reflection API`를 이용합니다. Reflection API를 통해 객체를 생성하려면 `기본 생성자`가 반드시 필요합니다. JPA는 Entity의 기본 생성자로 객체를 생성한후 Reflection API를 사용하여 값을 매핑합니다. 따라서 Entity에는 기본 ..