개발기초42 DB Optimistick Lock : 쇼핑몰 서비스 개발시 발생할 수 있는 이슈 쇼핑몰 서비스를 제공할 때 개발자에게 발생할 수 있는 이슈가 있다. 쇼핑몰에는 상품이 있으며, 상품에 대한 재고가 존재할 것이다. 예를 들어 재고가 한 켤레만 존재하는 한정판 나이키 신발에 대해, 거의 동시에 두 고객이 신발을 구매하기 위해 접근을 한다고 하자. 이에 대해 아무런 조치를 취하지 않는다면 두 고객은 구매 처리를 모두 완료할 것이며, 수량은 -1이 되어 실제로 존재하는 재고와 일치하지 않는 상황이 발생할 것이다. 이처럼 동시에 같은 DB Table row를 업데이트 하는 상황을 방어하기 위해 어떻게 개발할 수 있을까? 이런 동시성 문제에 대비하기 위하여 일반적으로 처리하는 방식은 잠금(Lock) 방식이다. Locking은 DB에 접근하는 것을 방지하는 것으로, 서비스 유저의 데이터 접근 경쟁.. 개발기초 2023. 6. 23. 트랜잭션과 ACID 트랜잭션이란? 데이터베이스에서 수행되는 '논리적으로 단일한' 작업이다. 트랜잭션은 논리적 연산 단위이자, 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작이다. 다시 말해, 여러 SQL문을 논리적인 하나의 작업 단위로 묶어서 나누어서 수행될 수 없게 처리하는 것을 의미한다. 이 작업은 하나 이상의 데이터베이스 조작(CRUD)으로 구성될 수 있다. 트랜잭션 처리가 된 작업은 모두 한꺼번에 실행되거나 전혀 실행되지 않아야 한다. 모든 SQL문이 성공하고 난 뒤에 DB에 반영되는 것이다. 즉, 트랜잭션 내부의 SQL문들 중 일부 SQL만 성공한 경우에는 DB에 반영되는 일은 일어나지 않는다. 구체적인 설명을 위하여 대표적인 예시를 들어본다. 은행에서 두 고객, 김씨와 박씨 간의 자금 이체 작업을.. 개발기초 2023. 5. 22. 데이터베이스(Database) 정규화(Normalization)란? 데이터베이스 정규화는 왜 필요할까? 정규화는 관계형 DB 설계시, 입력, 수정, 삭제의 데이터 처리의 이상 현상을 최소화하기 위한 방법이다. - 중복 데이터 제거 : 테이블 간에 데이터 중복을 최소화하고, 데이터의 일관성을 유지한다. - 데이터 무결성 보장 : 데이터가 업데이트, 삽입, 삭제 등의 작업을 수행할 때 일관성과 정확성이 유지되도록 한다. - 쿼리 성능 향상: 중복 데이터를 제거하고 데이터 구조를 최적화함으로써 데이터베이스에서의 검색 및 조작 성능을 향상시킨다. - 데이터베이스 정규화는 주로 관계형 데이터베이스에서 사용되며, 다양한 정규화 단계를 거쳐 데이터를 최적화 - 지나친 정규화는 데이터베이스의 성능이 저하될 가능성 정규화 단계 각 단계마다 테이블을 분해 --> 데이터 간의 관계를 재구성.. 개발기초 2023. 5. 11. FULLTEXT 인덱스 개요, 특징과 작동원리 데이터베이스에서 인덱스란? 왜 필요한가? 데이터베이스에서 인덱스(Index)란? - 인덱스는 데이터베이스 테이블의 특정 열(column)에 대한 포인터들의 집합입니다. - 데이터를 찾기 위한 '색인'으로 데이터의 주소록이라고 부를 수 있습니다. veams.tistory.com FULLTEXT 인덱스 개요: MySQL(5.6버전 이상) - 양방향 LIKE 연산자를 사용해야 하는 경우엔 인덱스를 사용하기 어렵다. - 하지만 FULLTEXT 인덱스를 사용하여 자연어 검색을 최적화하는 방법이 있다. - FULLTEXT 인덱스는 텍스트 데이터를 빠르게 검색할 수 있는 인덱스로, 전체 테이블 스캔으로 인한 성능 저하를 피할 수 있다. - 자연어 검색과 불완전한 문자열 검색에 적합하며, 일반적인 인덱스와 달리 양방향.. 개발기초 2023. 5. 10. 양방향 LIKE 연산자(% LIKE %) 사용시 인덱스 와일드카드 %가 한 쪽만 있는 경우 (양방향이 아닌 경우) - 문자열 끝에만 있는 경우 인덱스를 사용하여 검색을 최적화할 수 있다. SELECT * FROM users WHERE name LIKE 'John%'; 위의 쿼리에서는 'John'으로 시작하는 이름을 검색하고 있으며, 데이터베이스는 인덱스를 사용하여 일치하는 결과를 빠르게 찾을 수 있다. 와일드카드 %가 양방향으로 있는 경우 - 일반적으로 양방향 LIKE 연산자를 사용하면 데이터베이스의 인덱스를 사용할 수 없다. 예를 들어, 다음과 같은 쿼리에서 인덱스를 사용할 수 없다. SELECT * FROM users WHERE name LIKE '%John%'; 위의 경우, 와일드카드 '%'가 문자열의 양쪽에 있어서 데이터베이스는 인덱스를 사용하지 않고.. 개발기초 2023. 5. 10. 데이터베이스에서 인덱스란? 왜 필요한가? 데이터베이스에서 인덱스(Index)란? 왜 필요 할까? 두꺼운 책의 맨 앞에 목차가 기재되어 있으면 내가 원하는 내용을 더 빨리 탐색할 수 있다. 반대로 목차가 없으면 두꺼운 책 내용 중에 어떤 내용을 어디에서 찾을지 모르기 때문에 전체를 다 탐색해야 한다. 시간과 에너지가 많이 든다. 이 때문에 어떤 순서대로 정렬된 목록(색인)의 필요성을 느낀다. DB에서 이와 같은 기능을 하는 것이 인덱스이다. - 즉, 인덱스는 데이터베이스에서 데이터를 빠르게 찾아낼 수 있도록 돕는 자료구조이다. - 데이터를 찾기 위한 '색인'으로 데이터의 주소록이라고 부를 수 있다. - 인덱스가 있으면 전체 Pull Scan 할 필요없다. 인덱스의 구성 - 인덱스는 키(key)와 포인터들로 구성되어있다. - DB에서 추출한 일부 .. 개발기초 2023. 5. 10. 정규 표현식에 대해서 정규 표현식(Regular Expression)은 문자열 처리 작업에 활용됩니다. 다시 말해 문자열의 패턴을 나타내는 문자열로, 특정한 규칙을 따르는 문자열을 검색, 추출, 치환 등의 작업을 쉽게 처리할 수 있도록 도와줍니다. 정규 표현식은 복잡한 문자열 검색 및 조작 작업에 굉장히 유용한 도구로, 다양한 프로그래밍 언어와 유틸리티에서 지원합니다. 활용 예시 1. 이메일 주소 유효성 검사 : 사용자가 입력한 이메일 주소가 올바른 형식인지 확인하는데 사용 2. 비밀번호 유효성 검사 : 비밀번호가 특정 요구 사항을 충족하는지에 확인하는데 사용 3. URL 추출 : 웹페이지 내용에서 URL을 추출하는데 정규 표현식을 사용 4. 로그 분석 : 서버 로그에서 특정 패턴을 검색하거나 필요한 정보를 추출하는데 사용 .. 개발기초 2023. 4. 25. 클라우드 (Cloud) 컴퓨팅의 종류와 특징 클라우드 컴퓨팅은 인터넷을 통해 원격으로 제공되는 컴퓨팅 서비스와 자원을 의미합니다. 기존의 온프레미스(On-premises) 인프라에서 벗어나 데이터 센터에서 제공되는 컴퓨팅 파워, 스토리지, 네트워킹 등 다양한 자원과 서비스를 사용자가 필요한 만큼 확보하고 사용할 수 있게 해줍니다. 클라우드 컴퓨팅은 유연성, 확장성, 비용 절감 등 다양한 이점을 제공합니다. 주요 서비스 모델 IaaS (Infrastructure as a Service): 가상화된 인프라 자원을 제공하는 서비스로, 컴퓨팅 파워, 스토리지, 네트워킹 등의 기본적인 자원을 사용자가 원하는 대로 확보하고 사용할 수 있습니다. 대표적인 예로 Amazon Web Services(AWS) EC2, Microsoft Azure Virtual Ma.. 개발기초 2023. 4. 24. 테스트 (Testing)에 대해서 테스트(Testing)는 소프트웨어 개발 과정에서 매우 중요한 단계로, 소프트웨어의 품질을 보장하고 버그를 찾아 수정하기 위한 과정입니다. 테스트를 통해 개발한 기능이 요구 사항에 부합하는지 확인하고, 예상치 못한 상황에도 안정적으로 동작하는지 검증합니다. 이를 통해 신뢰성 있는 소프트웨어를 제공할 수 있습니다. 테스트에는 다양한 유형과 레벨이 있습니다: 유닛 테스트(Unit Testing): 코드의 개별 단위(함수, 메서드, 클래스 등)가 예상대로 동작하는지 테스트하는 과정입니다. 이를 통해 각 코드 단위의 독립성을 검증하고 버그를 찾을 수 있습니다. 통합 테스트(Integration Testing): 여러 단위가 함께 작동할 때 발생할 수 있는 문제를 확인하기 위해, 단위들을 결합하여 테스트하는 과정.. 개발기초 2023. 4. 21. 모듈 (Module)이란?, Node.js에서 모듈을 사용하는 방법? 모듈(Module)이란 독립적인 기능을 가진 코드의 집합으로, 다른 코드와의 충돌을 최소화하며 재사용 가능한 구조를 만들기 위해 사용됩니다. 모듈은 소프트웨어의 설계 및 유지 보수를 쉽게하기 위해 코드를 논리적으로 분리하여 작성할 수 있게 합니다. 각 모듈은 독립된 스코프를 가지므로, 변수와 함수가 외부로부터 보호되어 정보 은닉(Information hiding)을 구현할 수 있습니다. Node.js에서 모듈은 파일 단위로 구성되며, module.exports를 사용해 모듈에서 내보낼 기능을 지정합니다. 다른 파일에서 사용하려면 require() 함수를 이용해 모듈을 불러옵니다. 예를 들어, myModule.js 파일에 함수를 작성하고, module.exports로 내보내면 다른 파일에서 require(.. 개발기초 2023. 4. 21. [자바스크립트] 클로저(Closure)에 대해서 간단히 말하면, 함수 내부에서 선언한 변수나 함수를 외부에서 참조할 때, 해당 변수나 함수를 클로저라고 합니다. 클로저는 함수 내부에서 생성된 변수를 계속해서 참조할 수 있는 특성을 가지고 있습니다. 다시 말해, 클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있는 환경을 의미합니다. 클로저는 다음과 같은 특징을 가집니다. 함수 내부에서 선언한 변수를 외부에서 참조할 수 있습니다. 클로저를 반환하는 함수를 생성할 수 있습니다. 클로저를 사용하면 함수의 실행 컨텍스트가 종료되어도 함수 내부의 변수를 계속해서 참조할 수 있습니다. 데이터 은닉 : 클로저를 사용하면, 변수를 외부에서 직접 접근하는 것을 막고 함수를 통해서만 접근하게 할 수 있습니다. 이는 함수 내부의 변수를 안전하게 보호하면서도, 외부에서.. 개발기초 2023. 4. 20. [자바스크립트] 프로미스 (Promise)와 async/await에 대해서 Promise Promise는 자바스크립트에서 비동기적인 작업을 처리하기 위한 객체이다. 비동기 작업은 작업의 완료 시간을 예측할 수 없는 작업을 의미하며, 이러한 작업들은 종종 I/O 작업, API 호출, 타이머 등에 의해 발생한다. Promise는 비동기 작업의 최종 결과값을 나타내는 객체로, 작업이 완료되었을 때(success) 또는 실패했을 때(fail) 값을 반환한다. 비동기적인 작업의 결과를 나중에 처리할 수 있도록 도와준다. 상태 분류 Promise는 다음과 같은 세 가지 상태(State)를 가진다. - 대기(Pending) 상태: 비동기 작업이 진행 중인 상태로, 아직 결과값이 결정되지 않은 상태 - 이행(Fulfilled) 상태: 비동기 작업이 성공적으로 완료되어 결과값이 반환된 상태 -.. 개발기초 2023. 4. 20. 이전 1 2 3 4 다음