happy cat image

everdevel

우리 모두의 웹 입문, 에버디벨

UI 변경

에버디벨의 완성 :: 웹코딩 시작하기

안녕하세요.
에버디벨 운영자입니다.
여러분이 늘 이용해 주셔서 하루 5명 오는 사이트가 1000명이 오는 사이트가 되었고,
또 그 이유로 사이트를 운영을 멈추지 않아 저같은 평범한 사람이 책까지 쓸 수 있게 되었습니다.
여러분이 찾지 않았다면 진작 사이트 접었습니다.
저의 웹개발 경력 2년을 쏟아내어서 6개월의 집필, 8개월의 교정기간을 거쳐 [웹코딩 시작하기]가 출간했습니다.
웹코딩 시작하기는 HTML5를 시작으로 CSS3 -> jQuery를 학습합니다.
그리고 앞에서 배운 내용으로 간단한 소통사이트를 반응형으로 제작합니다.
보통의 책은 HTML5 + CSS3로 끝나고 혹은 HTML5 + CSS3 + jQery로 끝나지만 웹코딩 시작하기는 여기서 끝내지 않았습니다.
그 다음 바로 데이터베이스중 하나인 MySQL를 학습하고, 그 이후 PHP를 학습니다. 그리고 앞에서 만든 소통사이트에 회원가입, 로그인 기능은 기본으로 진행하며, 스크롤이벤트를 이용하여 스크롤을 내리면 AJAX를 작동시켜 게시물을 더 불러오는 기능을 구현하고 자기의 로그기록을 파일에 쓰기, 그 밖에 자신의 프로필사진, 커버사진 등록, 댓글 쓰기등의 기능을 적용합니다.
본서는 웹코딩을 처음하는 사람이 하나에서 끝나지 않고 처음부터 시작해 프로젝트까지 완성해가며 전체적으로 시스템이 어떻게 작동하는지 전반적으로 알게하기 위해 태어났습니다.
적어도 지구에서 가장 친절한 웹 입문서라고 생각하는 책입니다.
에버디벨로 부족하셨다면 웹코딩 시작하기를 추천합니다.

어제보다 나은 나, 오늘 보다 나을 내일의 나를 만드는 :: 웹코딩 시작하기

지은이 : 에버디벨 만든사람

목차보기

종이책 구입하기

전자책 구입하기

PART 1. 프론트엔드 HTML5 + CSS3 + jQuery

CHAPTER 1. HTML5

1. HTML5 소개

2. 메타 태그

3. 텍스트 태그

4. 이미지 태그

5. 하이퍼링크 태그(a 태그)

6. 리스트 태그

7. form 태그

8. 공간 태그

9. video 태그

11. svg와 canvas

12. table 태그

CHAPTER 2. CSS3

1. CSS 소개

2. CSS를 적용하는 세 가지 방법

3. 선택자(selector)

4. 텍스트를 꾸미는 CSS 요소

5. 가로 길이와 세로 길이 조정하기

6. 텍스트가 영역을 벗어날 때

7. HTML 엘리먼트의 위치 변경하기

8. 배경 꾸미기

9. 외곽선 긋기

10. float와 clear

11. 박스의 바깥 여백 설정하기

12. 박스의 안쪽 여백 설정하기

13. CSS 리셋

14. 애니메이션

15. transform

16. transition

17. display

18. 반응형 웹

19. 반응형으로 간단한 레이아웃 만들기

20. SVG 태그

CHAPTER 3. jQuery

1. jQuery 시작하기

2. 셀렉터

3. 엘리먼트 보이기와 숨기기

4. 클릭했을 때 무언가 하기

5. 마우스 포인터를 요소 위에 올릴 때 무언가 하기

6. 제이쿼리로 CSS 적용하기

7. 변수 사용하기

8. HTML 엘리먼트에 있는 텍스트 변경하기

9. HTML 태그 제어하기

10. 애니메이션 기능

11. 엘리먼트에 클래스 추가, 삭제하기

12. 엘리먼트의 이동

13. 폼 태그의 값 조정

14. 포커스

15. this 사용하기

16. 연산자

17. 함수 만들기

18. 변수에 대해서

19. 글로벌 변수와 로컬 변수

20. 조건문

21. 반복문

22. 스크롤 이벤트

23. AJAX

24. canvas 태그(HTML5)

project 나의 첫 웹서비스 만들기

CHAPTER 1. 나의 첫 웹서비스 프로젝트 소개

CHAPTER 2. 나의 첫 웹서비스 만들기 프로젝트 - front end

1. 메인 페이지 만들기(index.html)

2. 나의 페이지 만들기(me.html)

3. 모두의 페이지 만들기(all.html)

PART 2. 백엔드 MySQL + PHP

CHAPTER 1. MySQL

1. 데이터베이스란?

2. MySQL 시작하기

3. 데이터베이스 만들기

4. 테이블

5. 필드의 데이터 크기와 데이터형 지정하기

6. 테이블 생성하기

7. 필드의 추가, 수정, 삭제

8. 테이블 삭제하기

9. 테이블에 데이터 입력하기

10. 데이터 불러오기

11. 데이터의 값을 변경, 삭제하기

12. 테이블 초기화

13. 2개 이상의 테이블 사용하기(JOIN)

14. 집계함수

15. 그룹별 집계

16. 출력 결과의 정렬

17. 불러올 레코드 수 지정하기

18. 2개 이상의 테이블을 묶어 사용하기

19. 쿼리문 안의 쿼리문 서브쿼리

20. 특정 필드에 같은 값을 넣지 않는 방법

21. 서로 다른 필드의 값을 합쳐서 출력하기

22. 검색을 더욱 빠르게 하는 인덱스

CHAPTER 2. PHP

1. PHP 소개

2. 출력문

3. 주석

4. 변수

5. 연산자

6. 배열>

7. 데이터형

8. 조건문

9. 반복문

10. 함수

11. 함수 만들기

12. POST와 GET

13. 기능의 사물화

14. 코드의 재활용

15. PHP와 MySQL의 연동

16. 상수

17. 정규 표현식

18. 파일 업로드

19. 디렉터리 함수

20. 파일 함수

21. Anchor 태그의 ping 속성과 AJAX

22. 쿠키와 세션

23. 객체지향 프로그래밍

project 나의 첫 웹서비스 만들기

CHAPTER 3. 나의 첫 웹서비스 만들기 프로젝트 - back end

3-1. 회원가입 기능

3-2. 로그인, 로그아웃 기능

3-3. 게시물 등록하기

3-4. 게시물 불러오기

3-5. 댓글 등록하기

3-6. 댓글 불러오기

3-7. 게시물 공감하기

3-8. 모두의 페이지

3-9. 포토 업로드 기능

3-10. 나의 로그 만들기

페이스북 자바스크립트 SDK를 이용하여 자신의 웹페이지에서 페이스북 계정으로 로그인 하기

자신의 홈페이지에서 페북계정으로 로그인 하는걸 이번 시간에 해볼게요. ^-^

시작 전에

페이스북 자바스크립트 SDK 퀵가이드를 읽어 보시기 바랍니다.

영어로 되어 있지만 번역기등을 사용하시거나 번역 하셔서 한번 읽어 보면 그래도 많은 도움이 될것 입니다. 저는 다 번역 하느라 번역 하는데만 시간이 엄청 걸렸네요. ^^;

페이스북 앱 생성하기

페이스북 API를 활용하기 위해서는 페이스북 앱을 만들어야 합니다.

이러한 앱은 여러가지 플랫폼에서 활용하기 위해 꼭 만들어야 하는데요.

여러가지 플랫폼이란 안드로이드, iOS, XBOX, 웹 등을 뜻합니다.

그럼 우선 앱 만들어 봅시다. 스마트폰에서 운용하는 그 앱이 아닙니다. 페이스북의 앱이 라고 따로 있습니다.

이곳에 접속하면 아래의 화면이 보입니다.

facebook

로그인을 하시고 메뉴에서 apps를 누르면 아래의 화면이 나옵니다. Create a New App을 누릅니다.

facebook

Create a New App을 누르면 아래의 화면이 보입니다.

facebook

Display Name는 당신의 앱의 이름을 지정하는것입니다. 당신이 하고 싶은 이름을 입력하시면 됩니다.

NameSpace 는 옵션이므로 작성을 하지않아도 괜찮습니다.

분류는 자신의 앱의 성격에 맞는걸 고르시면 됩니다. 그리고 애플리케이션 만들기를 눌러 줍니다.

facebook

애플리케이션 만들기 버튼을 누르면 그림에 보이는 문자를 입력해 달라는 창이 뜨며 입력 완료하면 아래와 같이
앱 셋팅 페이지가 표시 됩니다.

facebook

왼쪽에 보이는 Settings 를 누르면 아래와 같은 화면이 출력 됩니다.

facebook

위의 이미지에서 하단에 위치한 +Add Platform 버튼을 누르면 아래의 화면이 보입니다. 2번째에 위치한 Website를 클릭합니다.

facebook

Website를 눌렀더니 셋팅 화면에 아래와 같이 웹사이트 항목이 추가 되었습니다. 이곳에서 당신이 작업할 웹페이지 URL을 입력 하시기 바랍니다.

보통 자신의 도메인을 갖고 있지 않은 경우가 많으므로 저는 로컬에서 작업을 하려고 합니다.

자기 자신이 도메인을 가지고 있지 않다면 저랑 똑같이 작업해 주시고 자신의 웹사이트에서 작업을 하시려면 자신의 URL을 입력 하시기 바랍니다.

저는 로컬에서 작업하므로 URL 란에 http://localhost/fb_js_sdk/index.php 를 입력 했습니다. 여러분도 똑같이 해주세요.

facebook

그리고 하단에 Save Changes 버튼을 클릭 합니다.

facebook

위와 같이 웹사이트 항목이 추가 되었습니다.

자 이제, 그럼 천천히 설명을 해보겠습니다. 페이스북 자바스크립트 SDK는 어떠한 파일을 웹서버에 업로드 하는것이 아니라 소스를 해당하는 페이지에 입력 해야 합니다.

코딩해야 하는 소스는 기본적으로 아래의 소스 입니다.

<!DOCTYPE html>
<html>
<head>
<title>Facebook Login JavaScript Example</title>
<meta charset="UTF-8">
</head>
<body>
<script>
// This is called with the results from from FB.getLoginStatus().
function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
// The response object is returned with a status field that lets the
// app know the current login status of the person.
// Full docs on the response object can be found in the documentation
// for FB.getLoginStatus().
if (response.status === 'connected') {
// Logged into your app and Facebook.
testAPI();
} else if (response.status === 'not_authorized') {
// The person is logged into Facebook, but not your app.
document.getElementById('status').innerHTML = 'Please log ' +
'into this app.';
} else {
// The person is not logged into Facebook, so we're not sure if
// they are logged into this app or not.
document.getElementById('status').innerHTML = 'Please log ' +
'into Facebook.';
}
}
// This function is called when someone finishes with the Login
// Button. See the onlogin handler attached to it in the sample
// code below.
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
window.fbAsyncInit = function() {
FB.init({
appId : '{your-app-id}',
cookie : true, // enable cookies to allow the server to access
// the session
xfbml : true, // parse social plugins on this page
version : 'v2.0' // use version 2.0
});
// Now that we've initialized the JavaScript SDK, we call
// FB.getLoginStatus(). This function gets the state of the
// person visiting this page and can return one of three states to
// the callback you provide. They can be:
//
// 1. Logged into your app ('connected')
// 2. Logged into Facebook, but not your app ('not_authorized')
// 3. Not logged into Facebook and can't tell if they are logged into
// your app or not.
//
// These three cases are handled in the callback function.

FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});

};

// Load the SDK asynchronously
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

// Here we run a very simple test of the Graph API after login is
// successful. See statusChangeCallback() for when this call is made.
function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Successful login for: ' + response.name);
document.getElementById('status').innerHTML =
'Thanks for logging in, ' + response.name + '!';
});
}
</script>

<!--
Below we include the Login Button social plugin. This button uses
the JavaScript SDK to present a graphical Login button that triggers
the FB.login() function when clicked.
-->

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
</fb:login-button>

<div id="status">
</div>

</body>
</html>

중간에 보면 appId : '{your-app-id}', 가 보입니다. 그곳에 당신의 앱 아이디를 넣습니다. 우리가 앱을 만들때 셋팅 화면에서 봤던 그 앱 아이디 입니다.

못찾으시면 컨트롤 에프 해서 찾아 봅시다.

{your-app-id} 이 부분을 싹 지우시고 앱 아이디를 넣습니다.

이제 저처럼 로컬에서 작업하시는 분은 APMSETUP 또는 MAMP 등 웹서버를 구동 합니다.

혹시 웹서버 구동 모르시는 분은 개발 환경 구축 페이지를 보시면 됩니다.

일단 이 소스를 그대로 복사 붙여 넣기 해서 htdocs폴더안에 fb_ever폴더를 만든후 index.php파일로 저장을 합니다.

소스 흐름도 파악 하기

작업 전에 한번 이 소스가 어떤 흐름으로 구동이 되는지 봐볼까요^^

사실 저도 잘 몰라서 여러분께서 만족할만한 설명은 하지 못 합니다. 여러분들도 이렇게 설명할 거면 나도 할 수 있다 정도 일겁니다. ㅋ

위 소스의 하단에 위치한 아래 소스는 페이스북 로그인 버튼을 보여 줍니다.

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
</fb:login-button>

즉, 클릭을 하면 checkLoginState() 함수가 작동하게 됩니다.

function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}

위의 소스를 보면 또 하나의 함수를 호출 하고 있죠? 그 함수가 statusChangeCallback()가 이며 response를 파라미터로 보냅니다.

function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
// The response object is returned with a status field that lets the
// app know the current login status of the person.
// Full docs on the response object can be found in the documentation
// for FB.getLoginStatus().
if (response.status === 'connected') {
// Logged into your app and Facebook.
testAPI();
} else if (response.status === 'not_authorized') {
// The person is logged into Facebook, but not your app.
document.getElementById('status').innerHTML = 'Please log ' +
'into this app.';
} else {
// The person is not logged into Facebook, so we're not sure if
// they are logged into this app or not.
document.getElementById('status').innerHTML = 'Please log ' +
'into Facebook.';
}
}

위의 소스는 로그인 정보를 판별 하게 됩니다. reponse.status로 3가지 상태를 분류하고 있네요

3가지는,

1. connected

2. not_authorized

3. unknown

connected 는 페이스북에도 로그인을 했고 앱에도 로그인에 했을때 이며,

not_authorized는 페이스북에는 로그인을 했으나 앱에는 로그인을 하지 않은 상태 입니다.

unknown는 랩에도 로그인 하지 않았고 페이스북에도 로그인을 하지 않은 경우 입니다.

소스에서 보면 connected인 상태를 보면 testAPI()라는 함수를 호출 하네요. 즉, 로그인에 성공하고 앱 로그인도 성공하면 testAPI()를 실행 한다는 것이지요.

그리고 그렇지 않은 경우는

document.getElementById('status').innerHTML = 'Please log ' + 'into this app.';

위의 명령문을 실행 합니다. 즉 status라는 ID값에 please log 블라 블라 를 넣는 것이지요.

그럼 이번엔 testAPI() 함수를 볼까요.

function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Successful login for: ' + response.name);
document.getElementById('status').innerHTML =
'Thanks for logging in, ' + response.name + '!';
});
}

콘솔로그 실행하고 로그인을 성공했다는 메세지를 출력 하고 있네요. reponse.name

reponse.name

이것은 사용자의 이름을 가져온것 입니다. reponse.name로 사용자의 이름을 가져오니 다른 정보도 가져올수 있다는게 유추 가능한 부분입니다.

그러면 우리가 실제 이 소스를 구동 해볼까요^^

위에서 말한대로 htdocs폴더안에 fb_ever 폴더를 생성 후에 index.php 파일에 위의 소스를 저장해주세요.

아래와 같은 화면이 나오는걸 볼 수 있습니다. 로그인 버튼을 누르고 로그인 하시면

facebook

아래와 같이 앱이 사용자의 정보에 접근 할것인지 물어 봅니다.

facebook

그리고 확인을 눌러주면 다음과 같이 로그인 성공 화면이 나옵니다. ^^

facebook

그럼 로그인을 했는데 로그아웃은 어떻게 해야 할까요?

로그아웃

여기를 눌러서 한번 개발 문서를 봐보죠.

위의 문서를 보면 자바스크립트의 레퍼런스들이 보입니다. 페이스북 로그인 메소드를 보면 로그인도 있고 로그아웃도 있고

로그아웃 함수를 클릭 해보면 문서들 중에 아래와 같은 소스가 있습니다.

FB.logout(function(response) {
// user is now logged out
});

위의 소스는 페이스북 로그인을 해주는 함수 인데요. 작동을 시키기 위하여

특정 함수로 감싸봅시다. fb_logout()라는 함수로 감싸 봅시다.

function fb_logout(){
FB.logout(function(response) {
// user is now logged out
});
}

위의 소스를 index.php 파일 안의 스크립트 태그 안에 넣어 주세요.

그리고 아래의 소스를 index.php파일의 로그인 버튼 아래에 넣어 주세요.

<p onclick="fb_logout()">Logout</p>

그러면 아래의 소스와 같이 되겠죠?

<!DOCTYPE html>
<html>
<head>
<title>Facebook Login JavaScript Example</title>
<meta charset="UTF-8">
</head>
<body>
<script>
// This is called with the results from from FB.getLoginStatus().
function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
// The response object is returned with a status field that lets the
// app know the current login status of the person.
// Full docs on the response object can be found in the documentation
// for FB.getLoginStatus().
if (response.status === 'connected') {
// Logged into your app and Facebook.
testAPI();
} else if (response.status === 'not_authorized') {
// The person is logged into Facebook, but not your app.
document.getElementById('status').innerHTML = 'Please log ' +
'into this app.';
} else {
// The person is not logged into Facebook, so we're not sure if
// they are logged into this app or not.
document.getElementById('status').innerHTML = 'Please log ' +
'into Facebook.';
}
}
// This function is called when someone finishes with the Login
// Button. See the onlogin handler attached to it in the sample
// code below.
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
window.fbAsyncInit = function() {
FB.init({
appId : '{your-app-id}',
cookie : true, // enable cookies to allow the server to access
// the session
xfbml : true, // parse social plugins on this page
version : 'v2.0' // use version 2.0
});
// Now that we've initialized the JavaScript SDK, we call
// FB.getLoginStatus(). This function gets the state of the
// person visiting this page and can return one of three states to
// the callback you provide. They can be:
//
// 1. Logged into your app ('connected')
// 2. Logged into Facebook, but not your app ('not_authorized')
// 3. Not logged into Facebook and can't tell if they are logged into
// your app or not.
//
// These three cases are handled in the callback function.

FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});

};

// Load the SDK asynchronously
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

// Here we run a very simple test of the Graph API after login is
// successful. See statusChangeCallback() for when this call is made.
function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Successful login for: ' + response.name);
document.getElementById('status').innerHTML =
'Thanks for logging in, ' + response.name + '!';
});
}
function fb_logout(){
FB.logout(function(response) {
// user is now logged out
});
}
</script>

<!--
Below we include the Login Button social plugin. This button uses
the JavaScript SDK to present a graphical Login button that triggers
the FB.login() function when clicked.
-->

<fb:login-button scope="public_profile,email" onlogin="checkLoginState();">
</fb:login-button>

<p onclick="fb_logout()">Logout</p>
<div id="status">
</div>

</body>
</html>

그리고 위의 소스를 실행 시키면 로그아웃을 눌렀을때 로그아웃 함수가 작동합니다.

지금은 로그인을 해도 로그인 버튼이 보이거나 합니다. 또 로그아웃 해도 로그아웃 했다고 말해주지도 않죠.

좀 더 소스를 에디팅 한다면 가능 합니다. 혹시 이부분에 대하여 문의점이 있으면 구글링 해보시고 그래도 못찾겠다면, 에버디벨이 문의 남겨 주시기 바랍니다. ^^

강좌로 돌아가기