전체 글

전체 글

    Spring Boot 로그(Log) 남기기, log4j2을 사용한 로깅 전략

    Spring Boot 로그(Log) 남기기, log4j2을 사용한 로깅 전략

    로그(Log)란? 로그(Log) 남기기 어플리케이션을 운영할 때 작동 정보인 로그(Log)를 기록하는 행위를 해주어야 합니다. 로그를 기록하면 어플리케이션의 상태를 추적하고, 오류 인지 및 잠재적인 문제를 진단할 수 있습니다. 즉 로깅을 통해 로직의 흐름을 파악함으로써 서비스의 품질을 관리할 수 있기 때문에 로깅은 개발자들에게 필수적입니다. 그러나 로그를 무분별하게 기록하면 로그 파일의 볼륨이 너무 커져 문제를 야기할 수 있습니다. 따라서 예외가 발생하는 곳이나, 중요 기능이 실행되는 부분에 적절한 로깅을 남겨 효율적으로 처리하는 것이 중요합니다. 로그 레벨 로그 레벨은 로그 메시지의 중요도를 나타냅니다. 로그 레벨에는 총 6가지의 레벨이 있습니다. 로깅 레벨을 올바르게 선택하면 적절한 정보만 로그로 남..

    RSA를 이용하여 페이로드(ex. 비밀번호) 암호화하기 (Vue.js / Spring Boot)

    RSA를 이용하여 페이로드(ex. 비밀번호) 암호화하기 (Vue.js / Spring Boot)

    0. 상황 Vue.js에서 아이디(userId)와 비밀번호(userPassword)를 입력하여 로그인을 해봅니다. 개발자 모드(F12)를 켜서 페이로드를 살펴보면 다음과 같이 사용자가 입력한 아이디와 비밀번호를 바로 확인할 수 있습니다. 보안을 위해 비밀번호(userPassword)를 암호화하여 요청하고 싶습니다. 이때 우리는 바로 전 포스팅에서 생성한 비대칭 키 RSA를 사용할 것입니다. 1. Vue.js에서 RSA 공개키로 암호화 JavaScript 라이브러리인 jsencrypt를 사용하여 암호화를 수행할 것입니다. 이를 위해 먼저 jsencrypt를 설치해줍니다. npm install jsencrypt 그런 다음, Vue.js 컴포넌트에서 RSA 공개키로 암호화를 수행하는 코드를 작성합니다. 저는 ..

    OpenSSL을 통해 RSA 공개키, 개인키 생성하기

    OpenSSL을 통해 RSA 공개키, 개인키 생성하기

    1. OpenSSL 설치하기 Windows: https://slproweb.com/products/Win32OpenSSL.html 혹은 https://code.google.com/archive/p/openssl-for-windows/downloads 등에서 OpenSSL을 다운로드하여 설치하면 됩니다. Mac: brew install openssl 2. openssl.exe 파일 위치로 이동하기 openssl-0.9.8k_X64\bin\openssl.exe 위치로 이동해줍니다. 3. private_key 생성 1) private_key.pem 생성 openssl-0.9.8k_X64\bin> openssl genrsa -out private_key.pem 1024 생성된 private_key.pem (PK..

    Git 초보자도 쉽게 이해할 수 있는 Git (2) 문법 정리 (feat. Github)

    Git 초보자도 쉽게 이해할 수 있는 Git (2) 문법 정리 (feat. Github)

    Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리 Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리 Git은 VCS(버전 관리 시스템)으로 협업 및 관리를 위한 강력한 도구입니다. 그럼 VCS는 무엇일까요? VCS VCS(버전 관리 시스템)는 소스 코드의 변경 이력을 관리하는 도구로, 개발자들이 소스 코드를 yeo-computerclass.tistory.com 1. Git 설치하기 먼저 Git을 사용하기 앞서 설치부터 해주어야 합니다. Git은 공식 웹사이트(https://git-scm.com/)에서 다운로드할 수 있습니다. 2. Git 설정 문법 git config --list: 해당 Git 저장소의 설정 확인 git config [설정할 키] [설정할 값]:..

    Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리

    Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리

    Git은 VCS(버전 관리 시스템)으로 협업 및 관리를 위한 강력한 도구입니다. 그럼 VCS는 무엇일까요? VCS VCS(버전 관리 시스템)는 소스 코드의 변경 이력을 관리하는 도구로, 개발자들이 소스 코드를 효율적으로 관리하고 협업할 수 있도록 돕습니다. VCS는 소스 코드가 변경될 때마다 변경 된 소스 코드 파일의 변화를 기록 (변경점 관리)합니다. 이렇게 기록한 변경점으로 소스 코드를 복구하거나 특정 시점의 파일을 가져올 수 있습니다. 또한 특정 시점에 수정한 파일을 가져와 수정된 내용을 비교하는 것이 가능하고, 해당 파일을 누가 변경했는지, 또 어떻게 파일이 변경되어 왔는지를 추적할 수 있습니다. VCS를 통해 소스 코드의 이력을 추적할 수 있고, 여러 명의 개발자들이 분산 개발을 하며 협업할 수..

    Kafka Spring Boot 3으로 간단하게 Producer, Consumer 구현해보기

    Kafka Spring Boot 3으로 간단하게 Producer, Consumer 구현해보기

    JSON 형태인 데이터(메시지)를 Producer가 보내고 Consumer가 읽는 코드를 간단하게 구현해보도록 하겠습니다. 아래 코드를 작성해보시고 실행해보시면 정상작동합니다. 예제 코드가 정상 작동하기 위해서는 당연히 예제 쓰일 topic이 생성되어야 하고, zookeeper와 kafka를 실행시켜주셔야합니다. (zookeeper는 지양되지만 현 예제에서는 zookeeper를 사용하도록 하겠습니다) 1. zookeeper 실행 D:\tool\kafka> .\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties 2. (broker) 서버 실행 D:\tool\kafka> .\bin\windows\kafka-server-start.bat ..

    Kafka Kafka명령어, local 환경에 Kafka Cluster 구축

    Kafka Kafka명령어, local 환경에 Kafka Cluster 구축

    Kafka 설치 아래 링크에 들어가 Binary downloads를 하면됩니다. Version은 자신의 환경 및 학습하고자 하는 버전에 맞게 다운받으시면 됩니다. (저는 기존에 깔아둔 2.8.2 version 입니다.) https://kafka.apache.org/downloads Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org Broker 3대 실행하기 Broker를 실행해주기 위해 설정파일을 작성해줍니다. 설치한 Kafka 폴더안에 config 폴더로 이동하여 server.properties 설정파일을 작성해줍니다. 설정 파일 작성 server.properties는 Broker에 대한 설정 파일입니다. 우리는 ..

    Kafka 카프카(Kafka)란?

    Kafka 카프카(Kafka)란?

    아파치 카프카 (Apache Kafka)란? 정의 Apache Kafka는 실시간 데이터 스트리밍을 처리하기 위한 오픈 소스 분산형 Pub/Sub 메시징 플랫폼입니다. 주로 대규모 데이터 처리, 실시간 데이터 파이프라인 구축, 스트리밍 분석, 데이터 통합 등에 사용됩니다. 탄생 배경 Kafka는 LinkedIn에서 개발했습니다. LinkedIn은 사용자들의 활동, 컨텐츠 등 대량의 데이터를 실시간으로 추적하고 처리하려했습니다. 기존 데이터 처리 시스템으로 해결할 수 있었습니다. 하지만 서비스가 커지면서 처리해야할 데이터도 많아지고 노드도 많아졌습니다. 이에 따라 데이터 파이프라인은 매우 복잡해졌고, 대규모 데이터를 처리하는데 한계를 느끼게되었습니다. 이에 LinkedIn은 대용량의 데이터를 효율적으로 처..

    Redis redis를 이용하여 랭킹 리더보드 구현하기

    Redis redis를 이용하여 랭킹 리더보드 구현하기

    redis 이용한 리더보드 Redis를 사용하여 랭킹 리더보드를 구현 했을 때 장점 Redis는 In-Memory 저장소로 매우 빠른 액세스 속도를 갖습니다. 또한 자료구조(Key-Value) 특성으로 읽기 및 작업 속도를 제공합니다. 때문에 랭킹을 실시간으로 업데이트 할 수 있습니다. Redis는 Sorted Set이라는 데이터 구조를 제공하여 요소를 정렬된 상태로 저장할 수 있습니다. 이 데이터 구조는 랭킹을 구현하는 데 유용합니다. Sorted Set 데이터 구조 이용하기 Redis의 Soted Set 데이터 구조를 조작하기 위해 Spring Data Redis에서 제공하는 인터페이스인 ZSetOperations를 이용해주면 됩니다. ZSetOperations 인터페이스를 통해 다음과 같은 기능을 ..

    Spring Boot 캐시 Cache 구현하기 (spring-context-support? redis?)

    Spring Boot 캐시 Cache 구현하기 (spring-context-support? redis?)

    캐싱: Caching cache는 데이터나 값을 복사해놓는 임시 기억 장치입니다. cache에 값을 복사해놓음으로서 속도가 느린 장치로의 접근 횟수를 줄일 수 있습니다. 예를 들어, 속도가 느린 장치인 DB에 접근하기 전에 속도가 빠른 redis를 먼저 읽음으로 성능 향상을 꾀할 수 있습니다. 캐싱 전략 Cache-Aside (Lazy Loading) 가장 일반적으로 많이 사용하는 캐싱 전략으로 항상 cache를 먼저 체크하고, 없으면 원본에서 데이터를 읽고 cache에 저장합니다. 캐싱이 필요한 데이터를 지정하여 해당 데이터들만 캐싱할 수 있고, 원본 데이터가 있기 때문에 Cache Miss가 있어도 치명적이지 않습니다. 항상 cache를 먼저 체크하기 때문에 최초 접근이 느립니다. 또한 cache에 ..

    Redis redis-cli 명령어 정리

    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 간단하고 빠른 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

    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 배열 다루는 문법

    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)

    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 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

    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(트랜잭션): 데이터의 정합성을 보장하기 위한 방법

    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)

    SQL 조회 성능을 위한 인덱스(Index)

    인덱스 인덱스(Index)는 DB에서 조회, 정렬, 그룹화 등의 연산을 빠르게 수행하기 위해 사용되는 정렬된 자료구조입니다. 특정 열 또는 열의 조합에 대한 정렬된 키와, 해당 키가 대응한 실제 데이터 레코드의 위치로 이루어져 있습니다. (key-value) 형태 예를 들어 위와 같이 주어진 `user` 테이블에서 나이가 20세 미만인 사용자를 찾는 쿼리(`select * from user where age < 20`)를 실행한다고 가정해봅시다. 해당 쿼리는 모든 데이터를 순차적으로 조회하여 조건을 만족하는 결과를 찾아낼 것입니다. 위 테이블은 데이터가 적게 담겨져 있어서 조회 시간에 큰 문제가 없지만, 만약 테이블에 데이터가 매우 많이 담기게 된다면 조회 기능의 성능은 매우 저하될 것입니다. 우리는 조..

    Spring Boot Custom Validation 어노테이션 만들기

    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 메소드: 문자열 길이에 맞게 문자 채워넣기 (문자열 패딩)

    JS padStart와 padEnd 메소드: 문자열 길이에 맞게 문자 채워넣기 (문자열 패딩)

    JavaScript의 padStart와 padEnd는 문자열을 특정 길이로 패딩하는데 사용됩니다. 이를 통해 지정한 문자를 원하는 길이로 문자열을 채우거나, 텍스트를 정렬하는데 활용됩니다. padStart와 padEnd는 ES8(ECMAScript 2017)부터 표준으로 추가되었습니다. 따라서 오래된 브라우저나 환경에서는 지원되지 않을 수 있음에 주의해야합니다. padStart 문자열의 시작 부분에 특정 문자열로 채워, 지정한 길이 만큼 만듭니다. 첫 번째 인자는 최종 길이를 나타냅니다. 두 번째 인자는 채울 문자열입니다. 두 번째 인자를 생략하면 기본값으로 공백(" ")이 사용됩니다. 아래 예제는 문자열 길이가 5가 되도록 문자열 "0"을 시작 부분부터 채워준 코드입니다. const str = "123..

    웹 보안을 위한 XSS, CSRF 방어

    웹 보안을 위한 XSS, CSRF 방어

    XSS: Cross-Site Scripting XSS는 공격자가 악의적인 스크립트를 웹 페이지에 삽입하는 공격입니다. 해당 스크립트 코드는 게시판이나, 이미지, 웹 메일 등에 삽입될 수 있습니다. 삽입된 스크립트는 사용자의 브라우저에서 실행되며, 공격자에게 사용자의 정보를 노출하거나 악의적인 행동을 수행할 수 있습니다. 공격자가 위와 같은 악의적인 스크립트를 취약한 웹 페이지에 삽입합니다. 사용자가 해당 페이지를 열면, 악의적인 스크립트가 실행되어 예상치 못한 동작을 수행합니다. XSS는 사용자가 웹 사이트를 신용하여 악의적인 스크립트를 클릭한 경우로, 주로 사용자(클라이언트)를 대상으로 한 공격입니다. XSS 해결 1: 이스케이프 처리 XSS 취약점은 웹 어플리케이션 사용자로부터 입력받은 데이터 값을 ..

    D3.js SVG: 2차원 벡터 그래픽을 표현하는 XML 기반 마크업 언어

    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 D3.js는 "Data-Driven Documents"의 약어로, 데이터 시각화를 위한 무료 오픈 소스 JavaScript 라이브러리입니다. D3.js는 데이터를 가져와 이를 시각화 시켜주는 도구로써 그래프, 차트, 지도 대시보드 등 다양한 형태의 데이터 시각화를 구현하는데 도움이 됩니다. D3.js는 HTML 문서의 DOM 요소를 선택하고 조작하여 데이터를 시각화합니다. 또한 SVG를 사용하여 그래프, 차트 등의 요소를 그립니다. SVG란? SVG(Scalable Vector Graphics)란 XML 기반의 벡터 그래픽 형식으로, 웹 페이지와 어플리케이션에서 벡터 기반의 그래픽을 표현하기 위해 사용됩니다. HTML이 헤더, 표와 같은 요소를 제공하는 거처럼 SVG는 원, 사각형, 곡선 등을..

    JS 자바스크립트: `프로토타입` 기반 객체 지향 프로그래밍 언어

    JS 자바스크립트: `프로토타입` 기반 객체 지향 프로그래밍 언어

    프로토타입(Prototype) 프로토타입 기반 언어는 객체 지향 프로그래밍의 한 형태로, 클래스 기반 언어와는 다른 객체 지향 모델을 따릅니다. JS(JavaScript)는 대표적인 프로토타입 기반 언어입니다. 프로토타입 상속: 클래스 기반 언어에서는 객체를 클래스의 인스턴스로 생성하는 반면, 프로토타입 기반 언어에서 객체는 다른 객체로부터 직접 상속됩니다. 즉, 객체는 다른 객체의 프로퍼티와 메서드를 상속받아 사용할 수 있습니다. 이때, 새로운 객체는 원본 객체의 프로토타입을 상속받습니다. 이를 통해 코드 재사용과 확장이 간단하게 이루어집니다. 프로토타입 객체: 프로토타입 기반 언어에서는 객체가 자체 속성과 메서드를 가짐과 동시에 prototype이라는 특수한 속성을 가집니다. 이 prototype 속..

    Spring Boot Validation @NotNull, @NotEmpty, @NotBlank 차이점

    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을 사용한 무한 스크롤 구현하기

    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 사용 방법: 코드 재사용 및 컴포넌트 공유

    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 모델 이해하기

    네트워크 TCP/IP 모델 이해하기

    네트워크 아키텍처 네트워크에서 컴퓨터와 네트워크 장비들이 데이터를 주고받기 위한 규칙이 필요합니다. 이런 규칙은 `프로토콜(Protocol)`이라 불리며, 데이터 전송 상대방, 형식, 전송 순서와 절차, 방법 등을 규정합니다. 즉 네트워크를 구성하는 컴퓨터와 다양한 네트워크 장비들은, 프로토콜에 따라 데이터를 주고 받습니다. 네트워크는 복잡한 시스템이기 때문에 이를 단순화하고 이해하기 쉽게 만들기 위해 네트워크 아키텍처(Network Architecture)를 사용합니다. 이 아키텍처는 모듈화(Modularity) 와 계층화(Layering) 를 통해 네트워크를 추상화(Abstraction) 시키는 방법입니다. 추상화: 복잡한 것을 간단하게 만드는 원리로, 네트워크를 논리적인 단계로 분할하여 각 단계마다..