이 글에서는 컴파일러 이론의 핵심 개념인 하향식(top-down) 구문 분석과 상향식(bottom-up) 구문 분석의 차이점에 대해 자세히 알아보겠습니다.구문 분석(parsing)은 입력 문자열이 주어진 문법 규칙에 부합하는지 검사하고 파스 트리(parse tree)를 구성하는 과정입니다. 이 과정은 트리를 탐색하는 방향에 따라 두 가지 방식으로 나뉘며, 각 방식의 특징은 아래와 같습니다.하향식(Top-down) 구문 분석파스 트리의 최상위 노드(루트)에서 시작하여 아래로 내려가며 트리를 구성하는 구문 분석 기법입니다.문법(gram
프로그래밍 언어는 크게 고급 언어(High-Level Language)와 저급 언어(Low-Level Language)로 나눌 수 있습니다. 두 언어는 사람 중심이냐 기계 중심이냐에 따라 특성과 용도가 크게 달라지는데요, 이번 글에서는 각 언어의 개념과 주요 특징을 살펴보고, 두 언어의 차이점을 표로 한눈에 비교해 보겠습니다.고급 언어(High-Level Language)란?고급 언어는 사람이 이해하기 쉬운 문법으로 작성된 프로그래밍 언어로, 현재 가장 널리 사용되는 언어 유형입니다. 주요 특징은 다음과 같습니다.저급 언어에 비해
이 글에서는 대표적인 기본 정렬 알고리즘인 버블 정렬(Bubble Sort)과 선택 정렬(Selection Sort)의 개념과 동작 방식, 그리고 두 알고리즘의 핵심 차이점을 살펴봅니다. 버블 정렬(Bubble Sort)이란? 가장 단순한 형태의 정렬 알고리즘 중 하나입니다. 리스트를 처음부터 끝까지 순회하면서 인접한 두 요소를 반복적으로 비교합니다. 인접 요소의 순서가 올바르지 않으면 두 요소를 서로 교환(swap)합니다. 값을 맞바꾸는 요소 교환(exchange) 방식을 사용합니다. 모든 요소가 제자리에 놓일 때까지 순회와 교
머신러닝에서 자주 혼동되는 두 가지 핵심 개념인 분류(Classification)와 클러스터링(Clustering). 이 글에서는 두 기법의 차이점을 명확하게 비교하여 정리해 드립니다.분류(Classification)란?분류는 지도 학습(Supervised Learning)에 속하는 기법으로, 미리 정의된 클래스 레이블을 기준으로 입력 데이터를 구분하는 작업입니다.지도 학습 방식에서 사용되며, 학습 데이터에 반드시 정답(레이블)이 포함되어 있습니다.입력된 데이터 인스턴스를 각각에 해당하는 클래스 레이블에 따라 분류합니다.레이블이 존
데이터 무결성 검증과 암호화 작업에 널리 사용되는 대표적인 해시 알고리즘인 MD5와 SHA1. 두 알고리즘은 모두 임의 길이의 데이터를 고정된 길이의 해시 값으로 변환하지만, 해시 길이·처리 속도·보안 강도 등 여러 면에서 뚜렷한 차이를 보입니다. 이번 글에서는 두 알고리즘의 특징을 항목별로 비교해 살펴보겠습니다.MD5란?MD5는 Message Digest의 약자로, 1992년에 공개된 해시 함수입니다. 주요 특징은 다음과 같습니다.해시 길이: 128비트의 메시지 다이제스트(해시 값)를 생성합니다.처리 속도: SHA1에 비해 연산
JSP에서 XML 데이터를 다룰 때 XPath 표현식을 손쉽게 검증하고 싶다면 JSTL의 <x:if> 태그를 활용하면 됩니다. 이 태그는 지정된 XPath 테스트 표현식을 평가한 뒤, 결과가 참(true)이면 태그 내부의 본문(body)을 실행합니다. 반대로 조건이 거짓(false)이면 본문은 아무런 처리 없이 무시됩니다.<x:if> 태그의 주요 속성<x:if> 태그는 다음과 같은 속성을 제공합니다.속성설명필수 여부기본값select평가할 XPath 표현식필수없음var조건 평가 결과를 저장할 변수의 이
JSP의 JSTL XML 라이브러리에서 제공하는 <x:forEach> 태그는 XML 문서 내의 노드들을 순회(iteration)하며 반복 처리할 때 사용됩니다. XPath 표현식으로 특정 노드 집합을 선택한 후, 각 노드에 대해 지정된 본문(body) 내용을 반복 실행합니다. x:forEach 태그의 주요 속성 <x:forEach> 태그는 다음과 같은 속성을 지원합니다. 속성설명필수 여부기본값 select평가(evaluate)할 XPath 표현식을 지정합니다.예없음 var반복 시마다 현재 항목(curr
JSTL의 <x:choose> 태그는 자바(Java)의 switch 문과 동일한 방식으로 동작합니다. 이 태그를 사용하면 여러 가지 대안 중 하나를 선택하여 실행할 수 있습니다. switch 문에서 case 문으로 각 조건을 나열하듯이, <x:choose> 태그 안에는 여러 개의 <x:when> 태그를 배치합니다. 또한 switch 문에 기본 동작을 지정하는 default 절이 있는 것처럼, <x:choose> 태그에서는 <x:otherwise> 태그가 default 절 역할을
JSTL(JSP Standard Tag Library)의 XML 태그 라이브러리에 포함된 <x:transform> 태그는 XML 문서에 XSLT(XSL Transformation) 변환을 적용합니다. 이 태그를 활용하면 원본 XML 데이터를 별도의 자바 코드 작성 없이도 원하는 형태의 HTML이나 다른 구조의 문서로 손쉽게 변환할 수 있습니다. <x:transform> 태그의 주요 속성 <x:transform> 태그에서 사용할 수 있는 속성은 다음과 같습니다. 속성설명필수 여부기본값docXSLT 변환
JSTL(JavaServer Pages Standard Tag Library)에서 제공하는 fn:contains() 함수는 입력 문자열 안에 지정된 하위 문자열이 포함되어 있는지 여부를 판별합니다. 이 함수는 조건이 충족되면 true, 그렇지 않으면 false를 반환하며, 주로 <c:if> 태그와 함께 사용해 조건 분기 로직을 간결하게 작성할 수 있습니다. 구문 fn:contains() 함수의 기본 구문은 다음과 같습니다. boolean contains(java.lang.String, java.lang.String) 첫
JSP 개발 시 특정 문자열 안에 원하는 하위 문자열이 포함되어 있는지 확인해야 하는 경우가 자주 있습니다. 이때 fn:containsIgnoreCase() 함수를 사용하면 대소문자를 구분하지 않고 손쉽게 포함 여부를 검사할 수 있습니다. fn:containsIgnoreCase() 함수란? fn:containsIgnoreCase() 함수는 JSTL(JavaServer Pages Standard Tag Library)의 functions 태그 라이브러리에 포함된 함수로, 입력 문자열에 지정된 하위 문자열이 포함되어 있는지 판별합니다.
JSTL에서 제공하는 fn:endsWith() 함수는 입력 문자열이 지정된 접미사(suffix)로 끝나는지 여부를 판단합니다. 문자열이 해당 접미사로 끝나면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이를 활용하면 파일 확장자 검사나 특정 패턴으로 끝나는 문자열 필터링 등을 손쉽게 처리할 수 있습니다. 문법 fn:endsWith() 함수의 기본 문법은 다음과 같습니다. boolean endsWith(java.lang.String, java.lang.String) 첫 번째 인자는 검사 대상이 되는 원본 문자열이며,
fn:escapeXml() 함수란?JSTL(JSP Standard Tag Library)의 functions 태그 라이브러리에서 제공하는 fn:escapeXml() 함수는 XML 또는 HTML 마크업으로 해석될 수 있는 특수 문자(<, >, &, 작은따옴표, 큰따옴표 등)를 안전한 엔티티 형태로 변환(이스케이프)해 주는 기능을 합니다. 사용자 입력값을 JSP 페이지에 출력할 때 발생할 수 있는 화면 깨짐 현상이나 XSS(크로스 사이트 스크립팅) 같은 보안 취약점을 예방하는 데 필수적으로 활용됩니다.문법(Syntax
JSTL에서 제공하는 fn:indexOf() 함수는 문자열 안에서 지정된 부분 문자열이 처음 나타나는 위치의 인덱스를 반환합니다. 인덱스는 0부터 시작하며, 만약 해당 부분 문자열이 존재하지 않으면 -1을 반환합니다.문법fn:indexOf() 함수는 다음과 같은 형식으로 사용합니다.int indexOf(java.lang.String, java.lang.String)첫 번째 매개변수는 검색 대상이 되는 원본 문자열이고, 두 번째 매개변수는 찾고자 하는 부분 문자열입니다.예제다음 예제를 통해 fn:indexOf() 함수의 동작 방식을
간단히 정리하면, 서블릿(Servlet)은 웹 서버에서 실행되는 자바 프로그램으로, HTTP 클라이언트로부터 들어오는 요청과 HTTP 서버상의 데이터베이스 또는 애플리케이션 사이에서 중개자(middle layer) 역할을 수행합니다. 반면 JSP(JavaServer Pages)는 두 가지 유형의 텍스트를 포함하는 문서입니다. 하나는 미리 정의된 정적 텍스트이고, 다른 하나는 서버 응답을 받은 후에 렌더링되는 동적 텍스트입니다.그렇다면 서블릿과 JSP는 어떤 점에서 다를까요? 아래 표에서 핵심적인 차이점을 항목별로 비교해 보겠습니다.
JSP에서 데이터베이스에 데이터를 삽입, 수정 또는 삭제해야 할 때 JSTL(JavaServer Pages Standard Tag Library)의 <sql:update> 태그를 사용하면 간편하게 처리할 수 있습니다. 이 태그는 결과 데이터를 반환하지 않는 SQL 문을 실행하며, 대표적으로 SQL INSERT, UPDATE, DELETE 문에 활용됩니다.<sql:update> 태그의 주요 속성<sql:update> 태그는 다음과 같은 속성을 지원합니다.속성설명필수 여부기본값sql실행할 SQL 명령어
JSP의 <sql:update> 태그는 데이터를 반환하지 않는 SQL 문을 실행할 때 사용합니다. 대표적으로 INSERT, UPDATE, DELETE 문이 여기에 해당합니다.sql:update 태그의 주요 속성<sql:update> 태그는 다음과 같은 속성을 지원합니다.속성설명필수 여부기본값sql실행할 SQL 명령문 (ResultSet을 반환하지 않아야 함)아니오Body(태그 본문)dataSource사용할 데이터베이스 연결 (기본 설정을 재정의)아니오기본 데이터베이스var영향받은 행(row) 수를 저장할 변수
JSP에서 데이터베이스의 레코드를 삭제해야 할 때 <sql:update> 태그를 사용하면 간편하게 처리할 수 있습니다. 이 태그는 결과 데이터를 반환하지 않는 SQL 문, 즉 INSERT, UPDATE, DELETE 문을 실행하는 데 사용됩니다.<sql:update> 태그의 주요 속성<sql:update> 태그는 다음과 같은 속성을 지원합니다.속성설명필수 여부기본값sql실행할 SQL 명령 (ResultSet을 반환하지 않아야 함)아니오Body(태그 본문)dataSource사용할 데이터베이스 연결 (기
JSTL의 <sql:param> 태그는 <sql:query> 태그와 <sql:update> 태그 내부에 중첩되어 사용되는 액션으로, SQL 문의 값 플레이스홀더(?)에 값을 전달하는 역할을 합니다. 만약 null 값이 전달되면 해당 플레이스홀더에는 SQL NULL이 설정됩니다.속성(Attribute)<sql:param> 태그는 다음과 같은 속성을 가지고 있습니다.속성설명필수 여부기본값value설정할 매개변수의 값아니오Body(태그 본문)예제 실습기본 개념부터 시작해 보겠습니다. 먼저 TES
<sql:dateParam> 태그는 <sql:query> 또는 <sql:update> 태그 내부에 중첩 액션으로 사용되며, 쿼리문의 값 플레이스홀더(?)에 날짜 및 시간 값을 전달하는 역할을 합니다. 만약 null 값이 지정되면 해당 플레이스홀더에는 SQL NULL이 설정됩니다. 주요 속성 <sql:dateParam> 태그는 다음과 같은 속성을 제공합니다. 속성설명필수 여부기본값value설정할 날짜 매개변수의 값 (java.util.Date 객체)아니오태그 본문(body)typeDATE(날