Tiny Bunny
[ASP.NET] C# String Null 체크 정리 - IsNullOrEmpty vs IsNullOrWhiteSpace
·
🛠️Backend/ASP.NET
들어가며C# 개발을 하다 보면 문자열(String)의 유효성을 검사해야 하는 경우가 매우 많습니다. 특히 사용자 입력, API 응답, 데이터베이스 조회 결과 등을 처리할 때 문자열이 null인지, 빈 문자열인지, 아니면 공백만 있는지 확인해야 합니다."문자열 검증은 안정적인 프로그램의 기본이다"적절한 문자열 검증 없이는 NullReferenceException이나 예상치 못한 동작이 발생할 수 있습니다.현재 작성하신 코드를 보면 다음과 같이 null 체크와 길이 체크를 분리해서 하고 계십니다:if (dto.ItemNo != null) if (dto.ItemNo.Length > 0) dataPack.AddProperty("@item_no", DbType.String, dto.ItemNo)..
[Vue.js] Props와 Emit으로 부모-자식 컴포넌트 소통하기
·
🖥️Frontend/Vue.js
Vue.js 기본 컴포넌트 구조Props - 부모에서 자식으로 데이터 전달Emit - 자식에서 부모로 이벤트 전달실무 꿀팁 모음기본 구조 - Vue 컴포넌트 작성 순서Vue 컴포넌트를 작성할 때는 다음 순서를 권장합니다:변수 선언과 메서드 작성 순서 🎁 Props - 부모에서 자식으로 데이터 전달개념 설명Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 방법입니다. 마치 함수의 매개변수처럼 동작합니다. 🔑 핵심 포인트:부모 → 자식으로만 데이터가 흐름 (단방향)자식에서는 props를 직접 수정하면 안됨타입 검증과 기본값 설정 가능기본 예제부모 컴포넌트 (Parent.vue) 부모 컴포넌트 자식 컴포넌트 (UserCard.vue) ..
[MSSQL] JOIN - SELECT 시 LEFT, RIGHT, INNER JOIN
·
🛠️Backend/MSSQL
JOINJOIN은 두 개 이상의 테이블을 연결해서 데이터를 조회하는 방법입니다. 현실에서는 데이터를 여러 테이블로 나누어 저장하기 때문에, 완전한 정보를 얻으려면 JOIN이 필수입니다.왜 JOIN이 필요할까?데이터베이스 설계 원칙:중복 제거: 같은 정보를 여러 곳에 저장하지 않기데이터 정규화: 관련있는 정보끼리 묶어서 별도 테이블로 분리효율적인 관리: 변경사항이 있을 때 한 곳만 수정하면 됨실생활 예시로 이해하기온라인 쇼핑몰 데이터:-- 주문 테이블 (Orders)주문번호 | 고객ID | 주문일자 | 총금액1001 | C001 | 2024-01-15 | 500001002 | C002 | 2024-01-16 | 300001003 | C001 | 2024-01-17 | ..
[MSSQL] 다대다(Many-to-Many) 관계
·
🛠️Backend/MSSQL
다대다 관계다대다(Many-to-Many) 관계는 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 연결될 수 있는 관계입니다.실생활 예시학생 ↔ 과목: 한 학생이 여러 과목을 수강하고, 한 과목을 여러 학생이 수강사용자 ↔ 역할: 한 사용자가 여러 역할을 가지고, 한 역할을 여러 사용자가 가짐상품 ↔ 카테고리: 한 상품이 여러 카테고리에 속하고, 한 카테고리에 여러 상품이 속함게시글 ↔ 태그: 한 게시글에 여러 태그가 달리고, 한 태그가 여러 게시글에 달림다대다 관계의 테이블 설계다대다 관계는 중간 테이블(Junction Table/Bridge Table)을 통해 구현합니다.기본 구조 예시: 학생-과목 관계-- 1. 학생 테이블 (Students)CREATE TABLE Students ( s..
[MSSQL] INSERT/UPDATE 시 NULL 처리
·
🛠️Backend/MSSQL
🚨 가장 중요한 핵심: IS NULL vs = NULL❌ 절대 하면 안 되는 것-- 🚫 틀렸습니다! 결과가 나오지 않습니다!SELECT * FROM users;-- INSERT 시에도 ISNULL 활용INSERT INTO users (name, email, age, phone)SELECT N'새사용자', ISNULL(@input_email, 'default@company.com'), ISNULL(@input_age, 20), ISNULL(@input_phone, '000-0000-0000');2. COALESCE - 여러 값 중 첫 번째 유효값-- COALESCE(값1, 값2, 값3, ...) - 첫 번째 NULL이 아닌 값 반환SELECT name, COALESC..
[MSSQL] 데이터 형식
·
🛠️Backend/MSSQL
문자열 데이터 형식 (String Data Types)VARCHAR vs NVARCHAR - 차이점구분 VARCHAR NVARCHAR문자 인코딩ANSI/ASCII (1바이트)Unicode UTF-16 (2바이트)저장 공간문자당 1바이트문자당 2바이트최대 길이8,000자4,000자다국어 지원제한적완벽 지원성능빠름상대적으로 느림VARCHAR 예제-- VARCHAR 사용 (영문, 숫자 중심)CREATE TABLE users_varchar ( id INT IDENTITY(1,1) PRIMARY KEY, username VARCHAR(50), -- 최대 50자 email VARCHAR(100), -- 최대 100자 description VARCHAR(MAX) ..
[MSSQL] MSSQL이란? MySQL과의 차이점
·
🛠️Backend/MSSQL
MSSQL이란?MSSQL(Microsoft SQL Server)은 마이크로소프트에서 개발한 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 1989년에 처음 출시되어 현재까지 꾸준히 발전해온 엔터프라이즈급 데이터베이스 솔루션입니다.MSSQL의 주요 특징윈도우 환경에 최적화: Windows Server와의 완벽한 통합강력한 보안: 고급 암호화 및 권한 관리 시스템확장성: 대용량 데이터 처리 및 고성능 지원통합 개발 환경: Visual Studio와의 원활한 연동다양한 에디션: Express(무료)부터 Enterprise까지MSSQL vs MySQL 주요 차이점1. 개발사 및 라이선스구분 MSSQL MySQL 개발사MicrosoftOracle (구 MySQL AB)라이선스상용 라이선스GPL + 상용 라이..
[Vue.js] Axios로 API 통신 구현하기
·
🖥️Frontend/Vue.js
API 통신이 왜 중요한가?현대 웹 애플리케이션은 프론트엔드와 백엔드가 분리되어 있습니다. Vue.js는 사용자 인터페이스를 담당하고, 실제 데이터는 서버의 API를 통해 가져옵니다.🌐 사용자 브라우저 (Vue.js) ↕️ HTTP 통신🖥️ 웹 서버 (REST API) ↕️ 🗄️ 데이터베이스일반적인 API 통신 패턴// 1. 데이터 조회 (GET)const products = await axios.get('/api/products');// 2. 데이터 생성 (POST) const newProduct = await axios.post('/api/products', productData);// 3. 데이터 수정 (PUT/PATCH)const updated = await axios...
[Vue.js] computed와 watch 이해하기
·
🖥️Frontend/Vue.js
computed() computed가 무엇인가요?computed는 다른 반응형 데이터에 의존하여 자동으로 계산되는 값입니다. 마치 Excel의 수식 셀처럼, 참조하는 셀의 값이 바뀌면 자동으로 다시 계산됩니다.// 기본 데이터const firstName = ref("김");const lastName = ref("철수");// 자동으로 계산되는 값const fullName = computed(() => { return `${firstName.value} ${lastName.value}`;});// firstName이나 lastName이 바뀌면 fullName도 자동으로 업데이트!computed의 핵심 특징핵심: computed는 의존하는 데이터가 변할 때만 다시 계산됩니다!const expensiveCo..
[Vue.js] 트리 구조 - 1차원 데이터를 계층 구조로 변환하기
·
🖥️Frontend/Vue.js
왜 트리 구조가 필요한가?현실의 계층적 데이터실제 비즈니스 시스템에서는 자연스러운 계층 구조가 존재합니다:🏪 쇼핑몰 └── 📂 카테고리 (전자제품) └── 📦 브랜드 (삼성) └── 📱 상품 (Galaxy S24) └── ⚙️ 옵션 (128GB, 256GB, 512GB)🏢 회사 조직도 └── 📊 부서 (개발팀) └── 👥 팀 (프론트엔드팀) └── 👤 직원 (김개발) └── 📋 프로젝트 (쇼핑몰, 관리자페이지)1차원 DB 데이터의 한계// 데이터베이스에서 가져온 1차원 배열const flatData = [ { category: "전자제품", brand: "삼성", product: "Galaxy S24", option: "128..