웹 개발이란?
웹(World Wide Web)은 브라우저를 통해 접근 가능한 사이트들의 집합입니다. 웹 개발은 이러한 사이트를 구축하는 전 과정을 의미합니다.
웹사이트 동작 원리
- 사용자가 브라우저로 프론트엔드 서버에 접속하면 프론트엔드 코드가 전달됩니다.
- 브라우저가 이 코드를 해석해 화면에 기본 레이아웃을 표시합니다.
- 코드에 명시된 백엔드 서버 주소로 데이터 요청이 발생합니다.
- 서버가 데이터베이스에서 정보를 조회해 브라우저에 반환합니다.
- 브라우저가 받은 데이터를 화면에 반영해 완성된 페이지를 보여줍니다.
개발 방식 비교
| 방식 | 특징 | 현황 |
|---|---|---|
| 프론트/백 분리 | 각 영역을 독립된 서버에 배포 | 현재 표준 (70% 이상) |
| 통합 개발 | 하나의 프로젝트에 전체 코드 포함 | 레거시 시스템 |
핵심 기술 스택
프론트엔드: HTML, CSS, JavaScript, Vue, Ajax, TypeScript, Element UI, Nginx
백엔드: Maven, Servlet, Tomcat, HTTP, Spring Boot, MySQL, JWT, AOP, Filter, IOC/DI
HTML과 CSS 기초
HTML 개념
HTML(HyperText Markup Language)은 콘텐츠의 구조를 정의하는 마크업 언어입니다.
- 하이퍼텍스트: 텍스트 외 이미지, 영상, 오디오 등 다양한 미디어 포함
- 마크업:
<태그명>형태의 미리 정의된 요소로 구성
CSS 개념
CSS(Cascading Style Sheet)는 시각적 표현을 담당하는 스타일 규칙입니다.
기본 문서 구조
<!DOCTYPE html>
<html>
<head>
<title>페이지 제목</title>
</head>
<body>
<h1>Hello HTML</h1>
<img src="photo.png" alt="설명">
</body>
</html>
주요 태그 정리
이미지 태그
<img src="경로" width="값" height="값" alt="대체텍스트">
경로 표기: 대경로(C:\...) 또는 상대경로(./현재, ../상위) 사용
제목 태그
<h1>가장 큰 제목</h1>
<h2>부제목</h2>
...
<h6>가장 작은 제목</h6>
구분선
<hr>
CSS 적용 방식
| 방식 | 위치 | 사용 빈도 |
|---|---|---|
| 인라인 | 태그의 style 속성 | JS 연동 시 |
| 내부 | <style> 태그 내부 | 단일 페이지 |
| 외부 | <link>로 .css 파일 연결 | 기업 표준 |
색상 표현법
- 키워드:
red,navy - RGB:
rgb(255, 0, 0) - RGBA:
rgba(255, 0, 0, 0.5)(투명도 포함) - 16진수:
#ff0000또는#f00(축약)
선택자 종류
/* 요소 선택자 */
h1 { color: navy; }
/* 클래스 선택자 */
.highlight { background: yellow; }
/* ID 선택자 */
#header { font-size: 24px; }
하이퍼링크
<a href="https://example.com" target="_blank">새 창에서 열기</a>
<a href="/local" target="_self">현재 창에서 열기</a>
콘텐츠 태그
미디어
<video src="clip.mp4" controls width="640"></video>
<audio src="music.mp3" controls></audio>
텍스트 서식
| 효과 | 일반 태그 | 의미 강조 태그 |
|---|---|---|
| 굵게 | <b> | <strong> |
| 기임 | <i> | <em> |
| 밑줄 | <u> | <ins> |
| 취소선 | <s> | <del> |
단락 처리
<p>문단 내용</p>
<br>
레이아웃 박스 모델
모든 요소는 직사각형 박스로 취급됩니다.
- content: 실제 내용 영역
- padding: 내용과 테두리 사이 여백
- border: 테두리 선
- margin: 외부 여백 (박스 외부)
div {
width: 300px;
height: 200px;
box-sizing: border-box;
padding: 20px;
border: 2px solid #333;
margin: 15px auto;
}
레이아웃 태그
| 특성 | <div> | <span> |
|---|---|---|
| 배치 | 한 줄 독점 | 인라인 연속 |
| 크기 설정 | 가능 | 불가 |
| 용도 | 영역 구분 | 텍스트 묶음 |
표 구성
<table>
<tr>
<th>번호</th>
<th>이름</th>
</tr>
<tr>
<td>1</td>
<td>홍길동</td>
</tr>
</table>
폼 요소
폼 기본 속성
<form action="/submit" method="post">
<input type="text" name="nickname">
<button type="submit">전송</button>
</form>
입력 타입
| type | 용도 |
|---|---|
| text | 일반 텍스트 |
| password | 비밀번호 (가림) |
| radio | 단일 선택 |
| checkbox | 다중 선택 |
| file | 파일 업로드 |
| date/time | 날짜/시간 선택 |
| 이메일 검증 | |
| number | 숫자 전용 |
| hidden | 숨김 필드 |
| submit/reset/button | 동작 버튼 |
선택 및 입력 요소
<select name="city">
<option value="seoul">서울</option>
<option value="busan">부산</option>
</select>
<textarea name="memo" rows="5" cols="40"></textarea>
전체 예시
<form method="post">
이름: <input type="text" name="fullname"><br>
호: <input type="password" name="pwd"><br>
성별:
<input type="radio" name="sex" value="M">남
<input type="radio" name="sex" value="F">여<br>
취미:
<input type="checkbox" name="hobby" value="read">독서
<input type="checkbox" name="hobby" value="travel">여행<br>
프로필: <input type="file" name="profile"><br>
생일: <input type="date" name="birth"><br>
이메일: <input type="email" name="mail"><br>
나이: <input type="number" name="years"><br>
학력:
<select name="edu">
<option value="">선택</option>
<option value="uni">대학</option>
<option value="grad">대학원</option>
</select><br>
소개: <textarea name="intro" rows="4" cols="30"></textarea><br>
<input type="hidden" name="token" value="abc123">
<input type="submit" value="등록">
<input type="reset" value="초기화">
</form>
주의: 모든 입력 요소는 name 속성이 있어야 서버로 전송됩니다.