프로그래밍을 책을 펼치면 기호와 문자가 뒤섞인 복잡한 코드가 쏟아져 나옵니다. 코드 하나하나에 분명 어떤 의미가 있을 텐데, 어떻게 구분해서 봐야 할지 알기 쉽지 않습니다. 이 책은 그런 초보자의 어려움을 아름답게 해결하기 위해 만들어졌습니다. 풀 컬러 페이지로 보기에도 화려하고 재밌으며, 코드를 시각적으로 구분해 바로바로 알기 쉽게 만들었습니다. 차근차근 따라가다 보면 PHP를 읽고 쓰는 것은 물론, 나만의 웹사이트를 만들 수 있을 것입니다.
PHP는 페이스북, 위키피디아, 워드프레스 등 세계 최고의 웹사이트에서 사용하는 프로그래밍 언어로서 꾸준히 업데이트되고 있습니다. 이 책은 PHP를 처음 접하는 초보자를 위해 기본 프로그래밍 명령부터 차근차근 알려줍니다. PHP 기본 명령어를 학습한 후에는 PHP를 사용하여 동적 웹 페이지를 어떻게 만드는지 살펴봅니다. 다음은 데이터베이스 기반 웹사이트를 구축하기 위해 MySQL을 사용한 데이터베이스 생성과 관리에 대해 학습합니다. 그리고 학습한 내용을 바탕으로 웹사이트를 구축하고 이 사이트에 회원가입, 좋아요, 댓글 기능 등을 추가하는 법과 PHP 커뮤니티에 공유된 PHP 클래스를 찾아서 사용하는 방법까지 배웁니다.
저자는 ‘더 나은 공부 방법’에 대해 고민하며 프로그래밍 서적을 집필했습니다. 복잡한 프로그래밍 개념을 시각화하여 독자가 한눈에 의미를 파악하고 이해하도록 구성했습니다. 이러한 노력은 전작들에서도 호응을 받았으며 ‘세상에서 가장 아름다운 프로그래밍 서적’이라는 호평을 받기도 했습니다. 아름답지만 알찬 구성으로 가득 찬 이 책으로 여러분의 웹사이트를 완성해보세요.
주요 내용
■ PHP 코드 읽기 및 쓰기
■ MySQL 데이터베이스에 데이터 저장
■ 방문자에 맞게 웹페이지를 조정하는 사이트 만들기
■ 콘텐츠 관리 시스템(CMS) 및 소셜 네트워크 구축
■ 회원가입 및 로그인 기능 구현
■ 댓글 및 좋아요 기능 추가하기
작가정보
저자(글) 존 두켓
인물정보
프로그래머
(Jon Duckett)
20년 이상 작은 스타트업부터 글로벌 브랜드에 이르기까지 다양한 웹사이트를 디자인하고 개발했다. 본서 외 저서로 《자바스크립트 & 제이쿼리》(제이펍, 2015), 《HTML & CSS》(에이콘출판사, 2012)가 있다. 이 책들은 코드와 개념을 시각적으로 구분해서 설명하는 것이 특징으로, 40만 부 이상 판매되었으며 10개 언어로 번역되며 많은 독자에게 사랑받고 있다.
번역 황반석
인물정보
컴퓨터공학자 번역가/통역사>영어
한양대학교에서 컴퓨터 공학을 전공한 후로 지금까지 개발자의 길을 걷고 있다. 애플리케이션 개발이 천직임을 인정하면서도 혹시 다른 재능도 있는 건 아닐까 하는 희망으로 아이스하키도 해보고 기타도 만져보지만, 결국은 컴퓨터 앞에 앉아 개발에 몰두하는 자신을 발견하곤 한다. 최근에는 플러터를 비롯한 멀티 플랫폼에 관심을 두고 있다. 옮긴 책으로는 《알 스웨이가트의 파이썬 프로젝트》(2022), 《파이썬 챌린지》(2021), 《핵심만 골라 배우는 SwiUI 기반의 iOS 프로그래밍》(이상 제이펍, 2020) 등이 있으며, 독자를 위한 인터넷 카페도 운영하고 있다.
목차
옮긴이 머리말 v
베타리더 후기 vii
시작하며 1
PART I 기본 프로그래밍 명령 17
소프트웨어 설치하기 / 샘플 코드 다운로드하기 / PHP 페이지에 HTML과 PHP 코드를 혼합하는 방법 / PHP가 브라우저에 텍스트와 HTML을 보내는 방법 / 페이지에 콘텐츠 쓰기 / 주석 / 코드에 주석 추가하기
1장 변수, 표현식 그리고 연산자 29
변수 / 변수 생성하고 접근하기 / 변수명을 지정하는 방법 / 스칼라(기본) 데이터 타입 / 변숫값 업데이트하기 / 배열 / 연관 배열 / 연관 배열 생성하기 및 접근하기 / 인덱스 배열 / 인덱스 배열 생성하고 접근하기 / 배열 안에 배열 저장하기 / 다차원 배열 / echo에 대한 간단 표기법 / echo의 간단 표기법 사용하기 / 표현식 그리고 연산자 / 산술 연산자 / 산술 연산자 사용하기 / 문자열 연산자 / 문자열 결합하기 / 비교 연산자 / 논리 연산자 / 비교 연산자 사용하기 / 논리 연산자 사용하기 / 타입 저글링: 데이터 타입 변환하기 / 기본 PHP 페이지 / 데이터 처리하고 출력하기 / 요약
2장 제어 구조 67
조건문 / 중괄호는 코드 블록을 형성한다 / 조건문의 구조 / if 문 사용하기 / 삼항 연산자 / 삼항 연산자 사용하기 / if... elseif 문 사용하기 / switch 문 사용하기 / match 표현식 사용하기 / 루프 / while 루프 / while 루프 사용하기 / do… while 루프 / do… while 루프 사용하기 / for 루프 / 세 가지 표현식으로 for 루프 사용하기 / for 루프 사용하기 / foreach 루프 / 키와 값을 통한 루프 / 인클루드 파일을 사용하여 코드 반복하기 / 파일 include 그리고 require / 인클루드 파일 생성하기 / 인클루드 파일 사용하기 / 예제 / 요약
3장 함수 103함수 사용하기 / 함수 정의하고 호출하기 / 기본 함수 / 코드가 항상 순서대로 실행되는 것은 아니다 / 함수에서 데이터 가져오기 / 값을 반환하는 함수 / 정보가 필요한 함수 정의하기 / 정보가 필요한 함수 호출하기 / 매개변수를 사용하는 함수 / 함수 이름 짓기 / 범위 / 범위에 대한 데모 / 전역 변수와 정적 변수 / 함수 외부의 변수에 접근하기 / 함수와 복합 데이터 타입 / 여러 값 받기와 반환하기 / 인수와 반환 타입 선언 / 타입 선언 사용하기 / 엄격한 타입 활성화하기 / 엄격한 타입 사용하기 / 여러 개의 반
환 구문 / 함수에서 여러 개의 반환 구문 사용하기 / 옵셔널 매개변수와 디폴트값 / 매개변수에 대한 디폴트값 사용하기 / 지정 인수 / 지정 인수 사용하기 / 함수 작성에 대한 접근방법 / 함수를 왜 사용하나? / 함수 문서화하기 / 예제 / 요약
4장 객체 & 클래스 143
모델로서의 웹사이트 / 속성 & 메서드 / 객체 데이터 타입 / 클래스는 객체 생성을 위한 템플릿이다 / 객체를 생성하는 방법과 사용하는 방법 / 클래스: 객체에 대한 템플릿 / 클래스를 사용하여 객체 생성하기 / 속성에 접근하고 업데이트하기 / 객체와 속성 사용하기 / 메서드 정의하고 호출하기 / 객체의 메서드 사용하기 / 생성자 메서드 / 클래스와 생성자 사용하기 / 속성과 메서드의 가시성 / 게터 그리고 세터 사용하기 / 객체의 속성에 배열 저장하기 / 객체의 속성으로 배열 사용하기 / 객체의 속성에 객체 저장하기 / 객체의 속성으로 객체 사용하기 / 객체 사용의 이점 / 예제 / 요약
PART II 동적 웹 페이지 177
HTTP 요청과 응답 / HTTP GET과 POST를 사용하여 데이터를 보내는 방법 / 링크 또는 폼으로 데이터를 보내는 방법 / 서버와 주고받는 데이터 보안 / 인코딩 스킴 / PHP 인터프리터의 내장 툴킷 / 슈퍼글로벌 배열 / $_SERVER 슈퍼글로벌 배열의 데이터 / 변수 데이터를 보여주는 내장 함수 / 변수의 내용 표시하기 / 오류 메시지 / 오류 메시지 예제 / PHP 인터프리터에 대한 설정 및 옵션 / PHP 인터프리터에 대한 설정 보기 / 인터프리터 설정 변경하기: php.ini / 서버 설정 변경하기: .htaccess
5장 내장 함수 201
대문자 & 소문자 길이 확인하기 / 대소문자 변환하기와 문자 계수하기 / 문자열에서 문자 찾기 / 문자열에 있는 문자 확인하기 / 문자 제거하기와 교체하기 / 문자열의 문자 바꾸기 / 멀티바이트 문자열 함수 / 멀티바이트 문자열 함수 사용하기 / 정규 표현식 / 정규 표현식 함수 / 정규 표현식 사용하기 / 숫자로 작업하기 / 숫자 함수 / 배열로 작업하기 / 배열 함수 / 배열에 항목 추가하기와 제거하기 / 배열 업데이트 함수 / 배열 정렬하기(순서 변경하기) / 배열 정렬 함수 / 상수 / 상수 사용하기 / HTTP 헤더 추가하기 또는 업데이트하기 / HTTP 헤더를 사용하여 사용자 리디렉션하기 / 파일에 대한 데이터 및 파일 삭제하기 / 파일 정보 얻기 / 요약
6장 브라우저로부터 데이터 가져오기 231
데이터를 수집하고 사용하는 네 가지 단계 / HTTP GET을 통해 데이터 전송받기 / 쿼리 문자열을 사용하여 콘텐츠 선택 / 슈퍼글로벌 배열에 누락된 데이터 처리하기 / 쿼리 문자열을 사용하여 콘텐츠 선택하기 / 데이터 유효성 검증하기 / 쿼리 문자열 데이터 검증하기 / 데이터가 누락된 경우 오류 페이지 표시하기 / 방문자를 오류 페이지로 보내기 / 결과 이스케이핑 / 이스케이핑을 하지 않은 위험 / 예약된 HTML 문자 이스케이핑하기 / 사용자가 제공하는 콘텐츠 이스케이핑 / 폼 데이터가 서버로 전송되는 방법 / 폼 데이터 가져오기 / 폼 데이터를 수신하는 방법 / 폼이 제출되었는지 확인하는 방법 / 폼이 제출되었는지 확인하기 / 숫자 유효성 검사하기 / 숫자가 유효한지 확인하기 / 텍스트 길이 유효성 검사하기 / 텍스트 길이 확인하기 / 정규 표현식을 사용하여 데이터 유효성 검사하기 / 비밀번호 길이 검사하기 / 셀렉트 박스와 라디오 버튼 / 옵션 확인하기 / 체크박스가 체크되었는지 확인하는 방법 / 체크박스 확인하기 / 여러 값이 유효한지 확인하기 / 폼 검증하기 / 필터 함수를 사용하여 데이터 수집하기 / 데이터를 수집하기 위해 필터 함수 사용하기 / 유효성 검사 필터 / 단일값을 확인하기 위해 필터 사용하기 / 필터를 사용하여 값을 수집하기 / 여러 입력을 검증하기 위한 필터 / 필터로 여러 입력을 검증하기 / 변수를 가지고 동작하는 필터 함수 / 변수의 데이터 검증하기 / 필터, 플래그, 그리고 옵션 검증 / 제거 필터 / 변수에 제거 필터 적용하기 / 필터를 사용하여 폼 검증하기 / 요약
7장 이미지 & 파일 285
브라우저에서 파일 업로드하기 / 서버에서 파일 받기 / 파일이 업로드되었는지 확인하기 / 파일을 목적지로 이동하기 / 업로드된 파일 이동하기 / 파일명과 중복 파일 정리하기 / 파일 크기와 파일 타입 확인하기 / 파일 업로드 검사하기 / 이미지 크기 조절하기 / 이미지 자르기 / 확장 프로그램을 사용하여 이미지 편집하기 / GD를 사용하여 이미지 크기 조절하기 / Imagick로 크기 조절하고 자르기 / 요약
8장 날짜 & 시간 309
날짜 형식 / 시간 형식 / 문자열을 사용하여 날짜 및 시간 지정하기 / 유닉스 타임스탬프 / 날짜 내장 함수와 시간 내장 함수 / 날짜 함수 / 날짜와 시간을 나타내는 객체 / DateTime 객체 / DateTime 객체의 날짜와 시간 업데이트하기 / DateTime 객체에 날짜와 시간을 설정하는 방법 / DateInterval을 사용하여 간격 나타내기 / DateInterval 객체 / DatePeriod를 사용하는 반복 이벤트 / DatePeriod 객체 / DateTimeZone을 사용하여 타임존 관리하기 / DateTimeZone 객체 / 요약
9장 쿠키 & 세션 329
쿠키란 무엇인가? / 쿠키 생성과 접근 방법 / 쿠키 설정하고 접근하기 / 쿠키 보안 / 쿠키 설정 제어하기 / 세션이란 무엇인가? / 세션을 생성하고 접근하는 방법 / 세션에 데이터를 저장하고 접근하기 / 세션의 수명 / 기본 로그인 시스템 / 사용자가 페이지를 조회하기 위해 로그인하도록 하는 방법 / 요약
10장 오류 처리 349
PHP 오류가 표시되는 방법 제어하기 / 오류 메시지 이해하기 / 오류의 레벨과 유형 / 구문 오류 / 치명적인 오류 / 치명적이지 않은 오류(경고 또는 알림) / 디버깅: 오류 추적하기 / 사이트 활성화하기 / 오류 처리 함수 / 치명적이지 않은 에러 핸들링 함수 / 예외 / try… catch로 예외 처리 / 디폴트 예외 처리 함수 / try… catch를 사용하여 예외 처리하기 / 커스텀 예외 발생하기 / 서로 다른 예외 타입 캐치하기 / 디폴트 오류와 예외 처리하기 / 웹 서버 오류를 표시하는 방법 / 요약
PART III 데이터베이스 기반의 웹사이트 381
예제 웹사이트 소개 / 관계형 데이터베이스가 데이터를 저장하는 방법 / 데이터베이스에서의 데이터 타입 / 데이터베이스의 데이터 복제하지 않기 / MySQL 작업을 위해 phpMyAdmin 사용하기 / 데이터베이스를 관리하기 위해 phpMyAdmin 사용하기 / 샘플 데이터베이스 설정하기 / 샘플 데이터베이스 둘러보기 / 데이터베이스 사용자 계정 생성하기
11장 구조화된 쿼리 언어 397
데이터베이스에서 데이터 가져오기 / 테이블에서 특정 행 반환하기 / SQL에서 비교 연산자 사용하기 / LIKE와 와일드카드로 결과 검색하기 / 값에 대해 검색하기 / 결과 세트의 행 순서 제어하기 / 결과 정렬하기 / 결과를 카운팅하고 그룹핑하기 / 일치하는 결과의 수 카운팅하기 / 결과 제한하기 및 건너뛰기 / 일치하는 결과의 수 제한하기 / 두 테이블에서 데이터를 가져오기 위해 JOIN 사용하기 / 데이터가 누락된 경우 JOIN이 동작하는 방식 / 여러 테이블에서 데이터 가져오기 / 다중 JOIN 사용하기 / 앨리어스 / 열 이름에 대한 앨리어스 사용하기 / 열 결합하기 & NULL 대체하기 / CONCAT 그리고 COALESCE / 예제 CMS를 위한 기사 쿼리 / 데이터베이스에 데이터 추가하기 / 데이터베이스의 데이터 업데이트하기 / 데이터베이스에서 데이터 삭제하기 / 고유성 제약 / 외래 키 제약 / 요약
12장 데이터베이스에서 데이터 가져오기 & 표시하기 433
데이터베이스에 연결하기 / 데이터베이스 연결은 인클루드 파일에 둘 수 있다 / 하나의 PHP 파일이 서로 다른 데이터를 표시하는 방법 / SQL 쿼리를 사용하여 데이터 가져오기 / 데이터베이스에서 하나의 데이터 행 가져오기 / 쿼리가 데이터를 반환했는지 확인하기 / 데이터베이스에서 여러 행의 데이터 가져오기 / 한 번에 한 행의 데이터를 가져오기 위해 루프 돌기 / SQL 쿼리에 변경할 수 있는 데이터 사용하기 / 동일한 페이지에 서로 다른 데이터 표시하기 / SQL 쿼리에 값 바인딩 / SQL 쿼리에 정수 바인딩하기 / 단일 파일을 사용하여 여러 페이지 표시하기 / 쿼리 문자열을 사용하여 올바른 페이지 표시하기 / HTML 페이지에서 데이터베이스 데이터 표시하기 / HTML 페이지에서 사용되는 데이터 형식 지정하기 / SQL 문을 실행하는 함수 / 매개변수가 없는 사용자 정의 PDO 함수 / 매개변수가 있는 사용자 정의 PDO 함수 / 몇 개의 PHP 파일로 전체 사이트를 운영하는 방법 / 헤더와 푸터 파일 / 홈페이지 / 카테고리 페이지 / 기사 페이지 / 회원 페이지 / 검색 기능 만들기 / 검색 페이지 / 데이터를 객체로 가져오기 / 객체를 가져오기 위해 페치 모드 설정하기 / 클래스를 사용하여 객체에 있는 데이터 가져오기 / 존재하는 클래스를 사용하여 객체 생성하기 / 요약
13장 데이터베이스의 데이터 업데이트하기 483
테이블에 데이터 추가하기 / 테이블의 데이터 업데이트하기 / 테이블에서 데이터 삭제하기 / 새로운 데이터 행의 아이디 가져오기 / 얼마나 많은 행이 변경되었는지 알아보기 / 열에 값이 중복되는 것을 방지하기 / 데이터베이스 데이터를 편집하기 위한 웹 페이지 생성하기 / 카테고리 생성하기, 업데이트하기, 그리고 삭제하기 / 데이터 생성하고 업데이트하기 / 카테고리 데이터 가져오고 유효성 검사하기 / 카테고리 데이터 저장하기 / 카테고리 데이터를 생성 또는 편집하기 위한 폼 / 카테고리 삭제하기 / 기사 생성하고 편집하기 / 트랜잭션: 여러 개의 SQL 문 / 기사: 페이지 설정하기(파트 A) / 기사: 데이터 가져오고 유효성 검사하기(파트 B) / 기사: 변경사항 저장하기(파트 C) / 기사: 폼/메시지(파트 D) / 기사 삭제하기 / 요약
PART IV 샘플 애플리케이션 확장하기 521
절대 경로와 상대 경로 / 파일 구조와 도큐먼트 루트 / 구성 파일 / BOOTSTRAP 파일 / 변수가 데이터를 저장하는 방법
14장 리팩터링 & 종속성 주입 533
데이터베이스 작업을 위한 객체 사용하기 / Database 객체 / 컨테이너 객체 / CMS 컨테이너 객체 / Database 클래스 / Category 클래스 / 카테고리 생성하기, 업데이트하기, 삭제하기 / 기사 데이터 가져오기 / CMS 객체 사용하기 / 코드 리팩터링 방법 / 클래스 오토로딩하기 / 정적 메서드를 사용하는 유효성 검증 클래스 / 요약
15장 네임스페이스 & 라이브러리 557
네임스페이스 생성하기 / 네임스페이스에 있는 코드 사용하기 / CMS 클래스에서 네임스페이스 사용하기 / 네임스페이스로 코드 가져오기 / 클래스를 현재의 네임스페이스로 가져오기 / 라이브러리 사용하는 방법 / Composer와 패키지 사용하기 / Packagist: 패키지의 디렉터리 / Composer와 패키지 설치하기 / Composer를 사용하여 패키지를 관리하기 / HTML Purifier: HTML 콘텐츠 허용하기 / CMS에 HTML Purifier 추가하기 / TWIG: 템플릿 엔진 / 템플릿을 렌더링하기 위해 TWIG 객체 사용하기 / TWIG 옵션 / 전역 변수와 익스텐션 / TWIG 객체를 생성하기 위해 BOOTSTRAP 사용하기 / PHP 페이지 업데이트하기 / 데이터를 가져오고 렌더링하는 PHP 파일 / TWIG 템플릿의 데이터 접근하기 / TWIG 템플릿에 데이터 표시하기 / TWIG 템플릿에 조건 사용하기 / TWIG 템플릿에서 루프 사용하기 / 템플릿 파일을 구조화하는 방법 / 부모 및 자식 카테고리 템플릿 / 기사 요약 템플릿 / 기사 템플릿 / PHPMailer를 사용하여 이메일 보내기 / SMTP 서버에 연결하기 위해 설정하기 / 이메일 생성하고 전송하기 / 이메일을 생성하고 전송하는 클래스 / Email 클래스 사용하기 / 요약
16장 멤버십 603
데이터베이스 업데이트하기 / 사용자 등록하기 / 비밀번호 해시 / 해시된 비밀번호 생성하고 확인하기 / 새로운 회원 등록하기(파트 1) / 새로운 회원 등록하기(파트 2) / 로그인과 개인화 / 로그인하기(파트 1) / 로그인하기(파트 2) / 사용자 데이터를 저장하기 위해 세션 사용하기 / 내비게이션 바 개인화하기 / 회원의 프로필 페이지에 옵션 추가하기 / 어드민 페이지에 대한 접근 제한하기 / 데이터베이스와 토큰을 업데이트하는 이메일 링크 / 데이터베이스에 토큰 저장하기 / 비밀번호 재설정 요청하기 / 비밀번호 재설정하기 / 요약
17장 기능 추가하기 633
SEO 친화적인 URL / 업데이트된 파일 구조 / SEO 친화적인 URL 구현하기 / URL rewriting / URL 업데이트하기 / 요청 처리하기 / SEO 이름 생성하기 / SEO 이름 저장하기 / SEO 친화적인 이름을 가진 페이지 표시하기 / 새로운 기능 계획하기 / 댓글 저장하기 / 좋아요 저장하기 / 좋아요 & 댓글 수와 함께 요약 표시하기 / 좋아요 추가하고 제거하기 / 기사에 댓글 추가하기 / 기사 페이지 템플릿 업데이트하기 / 요약
책 속으로
PHP는 웹 서버에서 실행되도록 설계된 프로그래밍 언어로, 누군가 웹 페이지를 요청하면 해당 사용자에게 응답할 HTML 페이지를 서버에서 생성할 수 있게 된다. 이 말은 HTML 페이지를 개별 사용자에게 맞게 조정할 수 있다는 의미다. (…) PHP는 사이트가 보여주는 페이지의 내용, 사이트에서 판매하는 제품, 사용자에 대한 상세 정보 등의 데이터를 저장할 수 있는 MySQL 같은 데이터베이스와 함께 동작하도록 설계되었다. 이 책에서 여러분은 PHP를 사용하여 사용자가 데이터베이스에 저장된 데이터를 갱신하는 웹 페이지를 어떻게 만드는지 배우게 될 것이다. (2쪽)
PHP 파일은 방문자가 여러 개의 사탕 상자를 구매할 때 사용할 수 있는 할인에 대해 안내해주는 HTML 페이지를 만든다. 다음을 수행하는 것을 볼 수 있다.
ㆍ 변수와 배열에 정보를 저장한다.
ㆍ 방문자에 개인화된 인사말을 만들기 위해 연결 연산자를 사용하여 변수에 있는 텍스트를 결합한다.
ㆍ 페이지에 출력할 가격을 결정하는 계산을 수행하기 위해 산술 연산자를 사용한다.
ㆍ PHP 인터프리터가 생성한 새로운 값을 페이지의 HTML 내용에 출력한다.
또한, 변수에 저장된 값을 업데이트하면 페이지는 새로운 제품과 가격을 자동으로 반영한다. (63쪽)
웹사이트는 동일한 유형의 여러 항목을 표시해야 할 때가 많다. 뉴스 사이트는 많은 뉴스 기사를 게시하고, 상점은 많은 제품을 판매하며, 사용자가 가입할 수 있는 사이트는 많은 회원을 보유한다. 이것은 각각 객체(object)를 사용하여 코드로 나타낼 수 있다. PHP는 어떤 것의 유형을 나타내는 객체를 생성하기 위한 템플릿인 클래스(class)라는 것을 사용한다. 예를 들어, 제품에 대해 나타내는 클래스를 하나 만들고 회원을 위한 객체를 또 하나 만들 수 있다. 클래스를 사용하여 생성된 각 객체는 그 클래스에 정의된 속성과 메서드를 자동으로 부여받는다. (144쪽)
이번 장에서는 방문자가 사이트의 회원으로 등록하는 방법을 살펴본다. 그런 다음 로그인한
회원에게만 표시되는 개인화된 페이지를 표시한다. (…) 이러한 작업을 수행하는 방법을 배우기 위해 이번 장은 세 가지 부분으로 나뉜다.
ㆍ 사이트에 회원가입: 사이트의 개별 회원을 식별하기 위해 필요한 정보를 수집하고 데이터베이스에 저장하는 방법
ㆍ 로그인 및 페이지 개인화: 회원이 로그인할 수 있도록 하는 방법, 개별 회원에 맞는 페이지를 생성하는 방법, 그리고 회원 전용 페이지를 생성하는 방법
ㆍ 사용자 로그인 없이 데이터베이스 업데이트하기: 예를 들어 비밀번호를 업데이트해야 할 때 사용자가 먼저 로그인하지 않고도 데이터베이스를 업데이트하도록 하는 방법. 여기에는 새로운 일련의 보안 요구사항을 해결하는 작업이 포함된다. (604쪽)
지금까지 이 책에서는 샘플 사이트의 각 페이지에 대한 URL은 실행되어야 하는 PHP 파일의 경로를 사용했다. 만약에 페이지가 데이터베이스에서 데이터를 가져와야 한다면, 데이터의 아이디가 쿼리 문자열에 지정되어 있었다. 대다수의 웹사이트는 파일 경로보다 더 설명적이고 SEO 친화적인 URL을 사용한다. 방문자가 이러한 설명적인 URL을 요청하면, 사이트는 URL을 파일 경로로 변환하고 표시할 데이터를 해당 파일에 알려준다. 이것은 URL rewriting이라는 기술이다. (636쪽)
사용자가 로그인하면 기사 페이지의 좋아요 아이콘이 링크가 된다. 이것이 링크된 파일은 사용자가 해당 기사를 좋아했는지를 확인하며, 좋아하지 않았다면 좋아요를 추가한다. 만약에 좋아요를 했었다면, 좋아요를 취소한다. 이를 위해 Like 클래스의 메서드가 호출된다. (654쪽)
그럼 이상으로 백엔드 프로그래밍을 위한 PHP & MySQL 책소개 포스팅을 마치겠습니다.
백엔드 프로그래밍을 위한 PHP & MySQL 책소개 포스팅은 제휴마케팅이 포함되어있습니다.
생성형 인공지능(AI)으로 디지털 감성 콘텐츠인 웹툰 만화 창작에 영감과 힘을 주는 방법이 있다면 어떨까? 스토리 기획자, 콘티 작가, 만화가, 배경과 소품 디자인 채색가 등 멀티플레이어 역할을 해주는 생성형 인공지능을 창작자의 어시스턴트로 활용한다면 창작자는 본질에 치중해 더욱 좋은 작품을 제작할 수 있을 것이다.
김한재 교수가 집필한 『생성형 AI로 웹툰 만화 제작하기』는 스테이블 디퓨전과 미드저니를 이미지 생성 AI로, 챗GPT를 텍스트 생성 AI로 활용해 웹툰 만화를 제작할 수 있는 다양한 웹툰 제작 프로세스와 디테일한 프롬프트 적용 방법을 제안한다. 현업의 프로 작가도 이제 막 만화 애니메이션에 입문하는 학생도 누구나 적절하게 활용할 수 있을 것이다.
감정 프롬프트같이 디테일한 영어 단어로 이미지를 척척 만들어 내거나 스테이블 디퓨전의 로라(LoRA, Low-Rank Adaptation)로 이미지에서 이미지를 활용하는 법, 챗GPT와 미드저니에서 강력하고 효율적인 프롬프트를 사용하는 방법 등 저자의 다양한 강의 경험을 통해 쌓은 노하우로 체계적으로 알려준다. 또 전반적인 웹툰 만화 스토리 기획과 캐릭터 창출, 배경과 소품, 표정 등 다양한 이미지와 텍스트 요소를 어떻게 생성해 낼지 디테일한 프롬프트와 설명으로 알기 쉽게 설명한다.
2. Various Expressions, Happy, Sad, Angry, Smile, Multiple Pose and Expressions, Various Facial Expressions and Movements
3. 5장의 캐릭터 설정 시트로 캐릭터 이미지 뽑아내기
스타일 유지하며 캐릭터 표정과 동작 변형해 보기
1. 명확한 스타일 지정
2. 세부 묘사 추가
3. 감정과 포즈 명시
4. 작품 참조
5. 반복과 수정
6. 커뮤니티의 피드백 활용
--sref를 사용해 캐릭터의 표정과 동작 변형해 보기
로라 만들기
1. 로라와 드림부스의 차이점
2. 로라 훈련의 복잡성
3. 훈련 이미지 수
4. 이미지 캡션
5. 이미지 형식 권장 사항
6. 이미지 사양
7. 제외해야 할 이미지 유형
8. 이미지 배치
이미지 태그 넣기
로라 학습 UI
기본 세팅
Chapter 8 미드저니와 스테이블 디퓨전을 이용해 편집하기
미드저니 작품 제작 과정
1. 콘티 작성
2. 이미지 생성
3. 포토샵 작업
4. 일러스트레이터에서 최종 완성
단발머리 여주인공 캐스팅하기
1. 콘티 작성: Adobe Illustrator AI 사용 가이드
2. 이미지 생성
3. 포토샵 작업
4. 일러스트레이터에서 최종 원고 편집 및 완성
스테이블 디퓨전 작품 제작 과정
Chapter 9 응용 실전 예시
벚꽃 탄산
햄의 햄버거 대모험
케니스와 샘물
타샤의 신비로운 크리스마스
루카와 마법의 돌
신에게 선택받은 자
부록 코어/펑크 프롬프트
맺음말 / “작가의 목표는 오직 재미있는 작품이다.”
레퍼런스
추천사
황민철 (상명대학교 감성공학과 교수)
(중략) 저자는 인공지능이라는 새로운 기술을 이용해 웹툰 제작에 적용을 새롭게 시도했다. 기술과 창작이 만나는 지점에는 저자의 깊은 심사숙고가 엿보인다. 인공지능을 활용한 웹툰 제작의 창작과 제작 관점에서 얘기하고자 했다. 인공지능을 도구를 이용한 제작 환경을 구축하는 과정을 통해 창작의 인공지능 도입을 준비하게 하고, 창작 과정에 적용하기 위한 구체적 활용서로 제공하려고 한다.
인공지능을 통해 구체적 제작을 하면서 창의적 한계를 넘어서 새로운 스타일과 장르를 실험할 수 있는 능력을 독자들이 갖게 하도록 제시했다. 이 책은 웹툰 작가들과 만화 제작자들에게 유용한 자료가 될 것이다. 웹툰 창작에 관심 있는 분들께 추천한다.
한창완 (세종대학교 만화애니메이션텍 전공 교수)
(중략) 저자는 이 책에서 웹툰 작가에게 인공지능이란 어떠한 개념으로 이해되고 적용돼야 하는지를 구체적으로 제시하고, 그러한 각 창작 단계별 생태계 모듈마다의 인공지능 기능과 역할을 상세히 설명하고 있다. ‘두려워하지 말고 시도해 보기’ 라는 본문의 제목처럼 인공지능 관련 소프트웨어의 각 파트마다 실무적인 화면과 프롬프터까지 상세히 제시하며 인공지능 솔루션의 현장을 쉽게 보여 준다. 그리고 실제 인공지능 솔루션을 통해 웹툰 창작이 이뤄지는 단계별 예시를 보여 줌으로써 인공지능에 대한 웹툰 작가의 어려움과 두려움을 새로운 시도로 바꿀 수 있도록 방향을 제시한다.
이 책은 더 이상 인공지능을 피할 수 없는 창작의 현장에 용기 있게 제시하는 비상구의 해법이며, 이제는 다음 혁신의 주인공이 웹툰 작가 스스로가 돼야 한다는 것을 방증한다. (중략)
조지훈 (『웹툰 클립스튜디오 2.0』, 『웹툰 스케치업』 저자, 만화기호학자 엘프 화가)
AI는 무섭지 않아요. 인간의 마지막 영역이라고 생각했던 예술. AI는 갑작스럽게도 예술의 영역부터 넘보고 있네요. 예술을 목표로 하는 사람들은 ‘이러다가 작가라는 직업이 사라지는 건 아닐까?’, ‘지금까지 그림을 공부하던 난 뭘 해야 할까?’라는 불안감에 빠지게 됩니다. 게다가 ‘세상은 아무나 AI로 예술가가 될 수 있어요!’라는 이야기만 가득할 뿐, 기존 작가에 대해 진지한 고민을 하는 사람은 드뭅니다. 실제로 AI에게 직업을 빼앗길지도 모르는 작가들은 이러한 분위기가 두렵기만 합니다. 이러한 상황에서 “AI는 무섭지 않아요.” 라고 친절하게 알려 주는 희망을 담은 책이 등장했습니다.
AI가 작가를 대신하는 무서운 세상이 아닌, 함께하는 세상을 이 책을 통해 경험하고, 새로운 창작의 미래로 함께 전진할 수 있으리라 기대합니다.
서범강 (한국웹툰산업협회 회장)
책을 쓰는 이가 누구인지에 따라 내용과 질이 얼마나 달라질 수 있는지 보여 준다. AI도 마찬가지여서 누가 어떻게 어떤 목적으로 사용하느냐에 따라 결과는 달라진다. 이 책을 펼치는 순간, 당신은 AI를 활용하는 다양한 스킬과 올바른 사용 방법을 만나게 된다.
최돈현 (Stable Diffusion Korea 운영자, soy.lab 대표)
2022년에 시작된 인공지능의 새로운 시대를 탐험하는 이 책은 창작의 세계에서 AI를 활용하고자 하는 모든 이들에게 영감을 제공합니다. 창작자가 AI를 도구로 삼아 무한한 가능성을 탐구할 수 있음을 열정적으로 보여 주며, 이야기를 통해 현재까지의 발전을 일목요연하게 정리해냅니다.
각 장마다 펼쳐지는 창작 과정의 가이드는 독자로 하여금 직접 도전하고 싶은 욕구를 불러일으킵니다. 가볍게 시작해 보세요. 이 책은 창작의 즐거움을 경험하기에 완벽한 출발점입니다.
송태민 (히든브레인연구소 소장, 열린인공지능 대표)
인공지능으로 사람이 사라지는 것이 아니라 오히려 뚜렷해진다는 것을 이 책을 통해서 더욱 선명하게 알 수 있게 됐다. 인공지능으로 인해 전문가들은 좀 더 창의력에 힘을 쏟을 수 있게 됐고 단순하고 반복적인 업무로부터 해방되고 있는 것이다.
이 책은 단순 툴 사용법이 아니라 인공지능으로부터 더욱 자유롭게 활동할 수 있는 노하우를 알 수 있는 활용 서적이다. 인간이 인공지능에 의해 지배당하는 것이 아니라 인공지능을 어떻게 잘 활용하고 실전에서 써먹을지 이 책을 보면서 다시 한번 깨닫게 됐다. 우리가 상상하는 모든 것을 표현해 줄 인공지능 조수가 있으니 당장 응용하기를 바란다.
그럼 이상으로 생성형 AI로 웹툰 만화 제작하기스테이블 디퓨전ㆍ미드저니ㆍ챗GPT 책소개 포스팅을 마치겠습니다.
생성형 AI로 웹툰 만화 제작하기스테이블 디퓨전ㆍ미드저니ㆍ챗GPT 책소 포스팅은 제휴마케팅이 포함되어있습니다.