728x90
728x90

전체 글 299

Spring에 Model, Mapper XML 추가

이번에는 Spring-MyBatis를 이용하여 MariaDB에서 Query(쿼리)를 실행하여 데이터를 가져오도록 하겠습니다. 이전 "Maven Spring Project에 MariaDB JDBC(Java Database Connectivity) 적용"에서 MariaDB에 study란 이름으로 Database를 생성하고 INT_BOARD_TB란 게시판 Table를 생성하였습니다. CREATE DATABASE study; CREATE TABLE study.INT_BOARD_TB ( BRD_SEQ BIGINT auto_increment NOT NULL COMMENT '게시판 시퀀스', BRD_SUBJECT VARCHAR(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general..

Spring에 MyBatis 적용 (MyBatis 3.5.10, MyBatis-Spring 2.0.7, spring-jdbc 5.2.22)

Spring Framework에서 MyBatis을 사용하기 위해서는 MyBatis와 MyBatis를 연동하여 처리해 주는 MyBatis-Spring, 데이터베이스를 처리(Transaction - 트랜잭션)해주는 Spring-JDBC가 필요합니다. 그럼 MyBatis-Spring에 대해 알아보겠습니다. MyBatis-Spring MyBatis-Spring integrates MyBatis seamlessly with Spring. This library allows MyBatis to participate in Spring transactions, takes care of building MyBatis mappers and SqlSessions and inject them into other beans, ..

Spring에 DataSource (Apache Common DBCP2 - 2.9.0) 적용

DataSource A factory for connections to the physical data source that this DataSource object represents. An alternative to the DriverManager facility, a DataSource object is the preferred means of getting a connection. An object that implements the DataSource interface will typically be registered with a naming service based on the Java™ Naming and Directory (JNDI) API. DataSource 객체는 물리적 데이터 소스..

Spring에 MariaDB JDBC(Java Database Connectivity) 적용 (mariadb-java-client 3.0.5)

JDBC (Java Database Connectivity) JDBC (Java Database Connectivity) is the Java API that manages connecting to a database, issuing queries and commands, and handling result sets obtained from the database. JDBC(자바 데이터베이스 연결)는 데이터베이스 연결과 쿼리 및 명령 실행 그리고 데이터베이스로부터 얻은 결과 집합 처리를 관리하는 Java API입니다. JDBC Driver JDBC 드러이버는 자바 프로그램의 요청을 DBMS(Database Management System - 데이터베이스 관리 시스템)가 이해할 수 있는 Protocol(프..

Spring에 SiteMesh 적용 (SiteMesh 3.0.1)

SiteMesh (사이트메쉬) SiteMesh is a web-page layout and decoration framework and web-application integration framework to aid in creating sites consisting of many pages for which a consistent look/feel, navigation and layout scheme is required. https://en.wikipedia.org/wiki/SiteMesh SiteMesh(사이트메쉬)는 일관된 룩앤필(Look and Feel), 내비게이션, 레이아웃 스키마가 필요하는 많은 페이지로 구성된 사이트를 만드는 것을 지원해 주는 프레임워크(웹 페이지의 레이아웃과 데코레이션 ..

Spring에 Filter 적용 (javax.servlet.Filter)

Filter (필터 - javax.servlet.Filter) Filter(필터)는 웹 브라우저(Web Browser)에서 Servlet에 Request(요청) 하기 전이나 Servlet에서 웹 브라우저로 Response(응답) 하기 전에 필터링(별도의 작업을 처리)합니다. 그래서 Filter(필터)는 Servlet 보다 먼저 처리됩니다. 이것을 서블릿 필터(Servlet Filter)하고 합니다. Filter(필터)는 Request(요청)과 Response(응답) 사이에서 처리됩니다. Web Browser → Filter1 → Servlet → Filter1 → Web Browser Filter(필터)는 여러 개를 설정할 수 있고 설정 순서에 따라 처리 순서가 정해집니다. 이것을 FilterChain(..

Spring에 JSTL(JavaServer Pages Standard Tag Library) 적용 (JSTL 1.2)

JSTL (JavaServer Pages Standard Tag Library - 자바서버 페이지 표준 태그 라이브러리) The JavaServer Pages Standard Tag Library (JSTL) encapsulates, as simple tags, core functionality common to many JSP applications. For example, instead of suggesting that you iterate over lists using a scriptlet or different iteration tags from numerous vendors, JSTL defines a standard tag that works the same everywhere. This st..

Spring에 DispatcherServlet 적용 (Servlet, Component-Scan, ViewResolver), Controller 추가

스프링 프레임워크(Spring Framework)의 DispatcherServlet에 대해 알아보겠습니다. Spring Framework Web MVC에서는 DispatcherServlet이 Central Servlet(중앙 서블릿)으로 Controller 역할을 하여 모든 요청(Request)을 받고 요청 URL과 매핑된 Controller로 연결시켜(서비스별로 분산시켜) 주고 처리된 결과(Model)를 화면(View)으로 처리(Rendering) 하여 응답(Response) 합니다. 웹 브라우저 요청부터 응답까지 처리되는 순서는 다음과 같습니다. Web Browser → Request(요청) → 해당 요청을 매핑한 컨트롤러 검색 → 컨트롤러 처리(View 이름 리턴) → View 검색 → View 처..

Spring에 Servlet, Build Plugin, web.xml 적용 (javax.servlet-api 3.1.0, maven-compiler-plugin)

Maven Spring Project에 Servlet 적용하기 1. 메이븐 리포지토리(https://mvnrepository.com)에서 "javax.servlet"를 검색합니다. 검색된 결과 중에 "Java Servlet API"를 선택하고 "Version"중에서 "3.1.0"를 선택합니다. 그리고 Maven 탭을 선택하고 복사합니다. javax.servlet javax.servlet-api 3.1.0 provided 2. 메이븐 프로젝트에서 pom.xml 파일을 오픈하고 복사한 내용을 붙여 넣기하고 저장합니다. 그러면 자동으로 Spring Framework 라이브러리 파일(JAR)들이 다운로드됩니다. javax.servlet-api-3.1.0.jar 메이븐 프로젝트에서 "Maven Update Pro..

Eclipse에 Spring Framework 적용 (spring-webmvc 5.2.22)

먼저 메이븐(Maven)에 대해 알아보겠습니다. Maven (Apache Maven - 메이븐) Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. https://maven.apache.org 소프트웨어 프로젝트 관리(management and comprehension) 도구로써 프로젝트 객체 모델(POM, Project Object Model)의 개념을 기반..

Maven Spring Project을 위한 IDE 설치 및 개발 환경 설정

이클립스를 사용하여 개발을 진행하겠습니다. 이클립스가 없으신 분은 먼저 이클립스를 설치하시기 바랍니다. 이클립스 설치에 대한 자세한 설명은 "이클립스 설치 - https://carrotweb.tistory.com/9"를 참고하기 바랍니다. 개발 환경 설정하기 JAVA 버전은 1.8.0_181를 사용하도록 하겠습니다. JDK 1.8이 설치되지 않으셨다면 JDK 1.8를 설치하기 바랍니다. JDK 1.8 다운로드 및 설치, 이클립스 JDK 1.8 설정에 대한 자세한 설명은 "이클립스 JDK 1.8 설정 및 JDK 다운로드 및 설치 - https://carrotweb.tistory.com/10"를 참고하시기 바랍니다. 이클립스에서 인코딩은 UTF-8로 하겠습니다. 이클립스에서 UTF-8 설정에 대한 자세한 설..

MariaDB SQL INDEX - INDEX가 적용되지 않는 이유들

WHERE 절에서 Column 값을 변경하여 비교하면 INDEX가 적용되지 않습니다. WHERE 절에서 지정된 문자열로 시작하는 Column를 찾을 경우 SUBSTR() 대신 LIKE%를 사용합니다. LIKE%는 INDEX가 적용됩니다. %LIKE는 INDEX 적용되지 않아 가급적 제한된 조건에서 사용해야 합니다. -- 단일 INDEX 생성 CREATE INDEX IDX_MBR_ID ON MBR_ACCOUNT_TB (MBR_ID); EXPLAIN SELECT * FROM MBR_ACCOUNT_TB WHERE SUBSTR(MBR_ID, 1, 2) = 'te'; --> type : ALL, key : NULL, rows : 2, extra : Using where --> INDEX로 검색되지 않고 WHERE..

Database 2022.08.15

MariaDB SQL INDEX - EXPLAIN (실행 계획), INDEX 처리 여부

MariaDB EXPLAIN (실행 계획)Explain은 MariaDB에서 Query(쿼리)에 대한 예상되는 실행 결과를 보여줍니다.Explain은 결과를 통해 INDEX가 사용되어 처리되었는지 확인할 수 있습니다. DBeaver에서 EXPLAIN (실행 계획) 실행 결과 id : 실행 아이디 select_type : SELECT 타입SIMPLE : UNION이나 SUBQUERY가 없으면PRIMARY : UNION이나 SUBQUERY가 있고 중심이 되는 Table이면SUBQUERY : SELECT에 SUBQUERY가 있으면DERIVED : FROM에 SUBQUERY가 있으면UNION : UNION이 있으면UNION_RESULT : UNION의 결과가 임시 테이블에 저장되면 table : 처리되는 Tabl..

Database 2022.08.15

MariaDB SQL INDEX - CREATE/DROP/ALTER FULLTEXT INDEX

CREATE FULLTEXT INDEX Statement Table에 FullText Index를 생성합니다. 자연어를 이용하여 INDEX를 생성하고 자연어를 이용하여 데이터를 검색할 수 있습니다. Column FULLTEXT Index 생성 구문 CREATE FULLTEXT INDEX index_name ON table_name (column_name); Multiple-Column FULLTEXT Index 생성 구문 CREATE FULLTEXT INDEX index_name ON table_name (column_name, column_name); DROP INDEX Statement Table에서 FullText Index를 삭제합니다. FULLTEXT Index 삭제 구문 ALTER TABLE ..

Database 2022.08.15

MariaDB SQL INDEX - CREATE/DROP/ALTER INDEX

INDEX(인덱스) Database에서 Row를 빠르게 검색하기 위해 Column을 색인으로 생성하고 색인으로 검색되게 합니다. CREATE INDEX Statement Table에 Index를 생성합니다. Column Index 생성 구문 CREATE INDEX index_name ON table_name (column_name[(length)]); Column에 length 설정하면 앞에서부터 설정된 length번째 문자까지 색인이 됩니다. Multiple-Column Index 생성 구문 CREATE INDEX index_name ON table_name (column_name[(length)], column_name[(length)]); 복합 INDEX는 Column 순서와 Join Column ..

Database 2022.08.14

MariaDB SQL JOIN - INNER JOIN, LEFT JOIN (LEFT OUTER JOIN), RIGHT JOIN (RIGHT OUTER JOIN)

JOIN Table 사이에 Related Column(서로 관련된 열)을 기반으로 Row를 Combine(결합)합니다. 결합 방식으로 INNER JOIN과 OUTER JOIN이 있습니다. INNER JOIN (두 Table의 교집합) 왼쪽 Table과 오른쪽 Table에서 Related Column(서로 관련된 열)들이 있는 Row를 Combine(결합)합니다. OUTER JOIN (두 Table의 합집합) LEFT OUTER JOIN : 왼쪽 Table의 모든 Row를 기준으로 Combine(결합)하여 오른쪽 Table에 Related Column(서로 관련된 열)이 없으면 오른쪽 Table의 모든 Column은 NULL로 채워진다. RIGHT OUTER JOIN : 오른쪽 Table의 모든 Row를 ..

Database 2022.08.14

MariaDB SQL JOIN - Driving Table, Nested Loop Join(NL Join), Sort Merge Join, Hash Join

Driving Table (드라이빙 테이블, 선행 테이블) Table들을 JOIN(결합)할 때 먼저 ACCESS(처리)이 되는 Table를 Driving Table(드라이빙 테이블)이라고 합니다. 간단하게 FROM 절에 있는 Table이 Driving Table(드라이빙 테이블)이라고 생각하면 됩니다. 결합되는 다른 Table를 Driven Table(드리븐 테이블) 또는 Inner Table(인너 테이블)이라고 합니다. 그래서 처리할 Row가 적은 Table이 Driving Table(드라이빙 테이블)이 되는 것이 좋습니다. 예를 들어, Table1의 Row가 100만 건, Table2의 Row가 1만 건이면 Table2가 Driving Table(드라이빙 테이블)이 되는 것이 좋습니다. 또한, WHE..

Database 2022.08.14

MariaDB SQL SELECT Statement

SELECT Statement Table에서 Row를 선택합니다. SELECT 구문 SELECT column_name, column_name FROM table_name; Row의 모든 Column들을 가져오려면 *(asterisk)를 사용합니다. SELECT * FROM table_name; MariaDB에 Table에 Row 추가하기 -- 전체 Row 삭제 DELETE FROM INT_BOARD_TB; -- Table의 AUTO_INCREMENT 설정 ALTER TABLE INT_BOARD_TB AUTO_INCREMENT=0; -- 초기 Row 추가 INSERT INTO INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ('테스트 제목 1', '테스트 ..

Database 2022.08.14

MariaDB SQL INSERT INTO Statement

INSERT INTO Statement Table에 새로운 Row를 추가합니다. INSERT INTO 구문 INSERT INTO table_name (column_name, column_name) VALUES (column_value, column_value); 모든 Column에 값을 추가할 경우 column_name를 지정할 필요가 없습니다. 그러나 column_value의 순서가 Column 순서와 같아야 합니다. column_value가 NULL이거나 DEFAULT이거나 AUTO_INCREMENT이면 생략할 수 있습니다. INSERT INTO table_name VALUES (column_value, column_value); MariaDB에 Table에 Row 추가하기 -- study Datab..

Database 2022.08.14

MariaDB 제약조건 외래 키 - Constraint Foreign Key - FK

FK (Foreign Key – 외래 키) 다른 Table의 PK를 Refers(참조)하는 값으로 Table 간의 관계를 파괴하는 작업을 방지하는 용도로 사용됩니다. PK가 있는 Table을 Parent Table이라고 하고 FK가 있는 Table를 Child Table이라고 하며 종속 관계가 됩니다. Table 생성 구문에서 Column을 FK로 생성합니다. CREATE TABLE IF NOT EXISTS table_name ( column_name1 data_type, column_name2 data_type, PRIMARY KEY (column_name1), FOREIGN KEY (column_name2) REFERENCES parent_table_name(column_name1) ); Table ..

Database 2022.08.14

MariaDB 제약조건 기본 키 - Constraint Primary Key - PK

PK (Primary Key – 기본 키) Table의 각 Recode(레코드 - row)를 Uniquely(고유)하게 식별할 수 있는 값으로 Table에서는 하나의 PK만 있을 수 있습니다. PK는 단일 또는 복수 Column으로 구성됩니다. Table 생성 구문에서 단일 Column을 PK로 생성합니다. CREATE TABLE IF NOT EXISTS table_name ( column_name1 data_type, column_name2 data_type, PRIMARY KEY (column_name1) ); Table 생성 구문에서 복수 Column을 PK_name으로 PK를 생성합니다. CREATE TABLE IF NOT EXISTS table_name ( column_name1 data_typ..

Database 2022.08.14

MariaDB 테이블 생성/삭제/수정 - CREATE/DROP/ALTER TABLE Statement

CREATE TABLE Statement Database에 새로운 Table를 생성합니다. Table 생성 구문 CREATE TABLE [IF NOT EXISTS] table_name ( column_name data_type ); Database에 table_name으로 새로운 Table를 생성합니다. CREATE TABLE table_name ( column_name data_type ); Database에서 table_name으로 된 Table이 없으면 생성합니다. CREATE TABLE IF NOT EXISTS table_name ( column_name data_type ); DROP TABLE Statement Database에서 Table를 삭제합니다. Table 삭제 구문 DROP TABL..

Database 2022.08.14

MariaDB 데이터베이스 생성/삭제/수정 - CREATE/DROP/ALTER DATABASE Statement

CREATE DATABASE Statement Database Server에 새로운 Database를 생성합니다. Database 생성 구문 CREATE DATEBASE [IF NOT EXISTS] database_name; Database Server에 database_name으로 새로운 Database를 생성합니다. CREATE DATABASE database_name; Database Server에서 database_name으로 된 Database가 없으면 생성합니다. CREATE DATABASE IF NOT EXISTS database_name; DROP DATABASE Statement Database Server에서 Database를 삭제합니다. Database 삭제 구문 DROP DATEBA..

Database 2022.08.14

Javascript NaN(Not a Number)

Javascript에서는 NaN(Not a Number)은 숫자(Number)가 아닌 값입니다. 그럼 스크립트에서 확인해 보겠습니다. 숫자(Number)와 문자열(String) "a"를 곱하면 변수는 NaN가 됩니다. var result = 1 * "a"; console.log(result); --> NaN NaN(Not a Number)는 값이 아니기 때문에 비교 연산자로 비교할 수 없습니다. 그래서 isNaN() 함수로 처리하면 변수가 NaN 인지 확인할 수 있습니다. console.log(isNaN(result)); --> true 참고로 변수를 typeof로 유형(타입)을 확인하면 number으로 나오지만 값은 없습니다. console.log(typeof result); --> number

Javascript == vs ===

== vs === == 연산자는 두 변수의 값을 비교합니다. === 연산자는 두 변수의 값과 유형(타입)까지 비교한다. 그럼 스크립트에서 == 연산자와 === 연산자를 확인해 보겠습니다. 숫자(Number) 0과 불리언(Boolean) false을 == 연산자로 비교하면 두 변수의 값이 같다고 나옵니다. console.log(0 == false); --> true 그 이유는 Boolean false의 값이 0이기 때문입니다. Boolean true의 값은 1입니다. 숫자(Number) 0과 문자열(String) "0"을 == 연산자로 비교하면 두 변수의 값이 같다고 나옵니다. console.log(0 == "0"); --> true 그 이유는 == 연산자는 숫자나 문자를 값 자체로만 비교하기 때문에 숫자..

Javascript this vs self

this vs self this는 현재 속한 함수의 객체를 참조합니다. self는 window 객체를 참조합니다. 그럼 스크립트에서 self와 this를 확인해 보겠습니다. Console를 확인해 보면 self와 this 모두 window 객체를 참조하고 있는 것을 알 수 있습니다. jQuery에서 self와 this를 확인해 보겠습니다. Console를 확인해 보면 self는 window 객체를 this는 document 객체를 참조하고 있는 것을 알 수 있습니다. Javscript Object에서 self와 this를 확인해 보겠습니다. value라는 정수 값이 있고 getValue() 메서드가 있는 객체를 생성합니다. getValue() 메서드는 this와 self를 사용하여 객체의 value을 가..

jQuery $(selector)[0]이란

$()[0]은 jQuery에서 선택자($ - selector)로 선택된 객체에서 DOM Element를 가져올 때 사용됩니다. 즉, 배열은 선택된 객체의 DOM Element를 가지고 있습니다. 클릭1 Console를 확인해 보면 0번째 배열에 선택된 button 태그에 대한 DOM Element가 있는 것을 알 수 있습니다. 그래서 선택된 객체에 [0]이나 get(0) 메서드를 사용하면 DOM Element를 사용할 수 있습니다. console.log(objBtn[0]); console.log(objBtn.get(0)); --> button#btn1.btn --> button#btn1.btn $()[0]은 button 태그를 DOM 함수를 사용하여 가져온 것과 같습니다. var domBtn = docu..

728x90
728x90