1. 모든 시작점
public/index.php
2. apache/nginx 요청
3. include bootstrap/app.php 실행(서비스 컨테이너 인스턴스를 생성);
4. 서비스 컨테이너 인스턴스를 생성
5. 각 요청에 따라 http커널 or console커널로 보냄
5.1. HTTP 커널은 Illuminate\Foundation\Http\Kernel 클래스를 상속하고 있으며, 요청을 실행하기 전에 처리되는 bootstrappers (시작 코드)의 배열을 정의하고 있습니다. 이 시작 코드들은 에러 처리, 로그 설정, 어플리케이션 동작 환경의 감지 등 실제로 요청이 처리되기 전에 수행해야 되는 작업들을 의미합니다.
5.1.1 커널 부팅(부트스트래핑) 과정의 가장 중요한 것 중의 하나는 어플리케이션의 서비스 프로바이더를 로딩하는 것입니다. 어플리케이션의 모든 서비스 프로바이더는 config/app.php 파일의 providers 배열에 설정되어 있습니다. 먼저, 모든 서비스 프로바이더의 register 메소드가 호출되고, 이후에 등록 된 모든 서비스 프로바이더의 boot 메소드가 호출되어 집니다.
서비스 프로바이더는 프레임워크의 데이터베이스, 큐, validation, 라우팅 컴포넌트와 같은 다양한 컴포넌트의 부트스트래핑(부팅과 같은 기초 작업들)의 처리를 책임집니다. 프레임워크가 제공하는 모든 기능을 초기화 하고 설정하는 것으로, 서비스 프로바이더는 라라벨의 부팅(부트스트래핑) 과정에서 가장 중요한 기능이라고 할 수 있습니다.
2017년 3월 22일 수요일
2017년 2월 9일 목요일
php에서 메일제목 한글이 깨질때
php에서 한글인코딩을 보낼 경우 한글이깨지는 경우가 발생한다.
상황
- 홈페이지(php, linux, mysql)에서 메일(linux)을 보내는데 한글이 깨짐
현상확인
#그림1
(그림1 다음메일)
그렇다고 모두 그런것은 아니다.
#그림2
(그림2. 네이버 메일)
많이 쓰는 메일들에 대해서 테스트 해보았는데
(gmail, naver, daum or hanmail, nate 그리고 회사메일)
daum과 회사메일이 그림1과 같은 현상이 발생되었다.
그럼 원인에 대해서 생각해보자
1. 메일서버2. 웹서버
3. DB
4. backend 언어
5. etc...
그럼 하나씩 짚고 넘어가보자
1. 메일서버 (x)
3. DB (x)
- 기존 언어(asp, mysql) 홈페이지에서 메일(linux)을 보냈을때 정상적으로 발송됨
2. 웹서버의 문제
- 리눅스서버 설정은 확인하고 조작해보기 힘드므로 마지막순위로 밀겠다
4. backend 언어(php)
- 남은건 이거 하나
해결
1. php한글깨짐을 검색해보면 관련 블로그가 많다
내용을 살펴보면 메일을 보낼때 헤더값으로 관련 정보를 넘겨준다.
넘겨줄때
$subject = "메일제목";
이럴경우
$subject = '=?UTF-8?B?'.base64_encode( "메일제목" ).'?=';
으로 utf-8로 메일을 보낸다는것을 명시해주면 된다.
기본적으로 메일을 보낼때 ASCII 문자열로 넘어가기때문에 인코딩에 대한 명시를 해줘야된다 한다.
이러한 형태로 인코딩을 적용되어 될 부분은 한글이 들어가야되는 부분(보내는이 이름, 받는이 이름) 들도 포함이다.
그리고 내용은 하지말아야 한다.(해보니까 더 깨진다.. 그냥 보내야 정상임)
이부분에 대해선 더 확인해봐야될듯 하다.
2016년 12월 28일 수요일
HTTP Referer ?? HTTP Referrer ??
원래 Referrer 라고 써야하지만, 필립 할람-베이커Phillip Hallam-Baker가 HTTP스펙에 필드를 추가로 제안할때 오타로 Referer로 기재함.
오타가 그대로 표준에 반영되어 RFC-1945 문서에 포함됐고, 현재까지 Referer로 사용하고 있다.
오타가 그대로 표준에 반영되어 RFC-1945 문서에 포함됐고, 현재까지 Referer로 사용하고 있다.
2016년 12월 27일 화요일
2016년 12월 21일 수요일
드라이브 바이(drive by), 파밍(pharming) 공격
드라이브 바이(drive by)
~쪽으로 자동차를 운전하다 라는 의미
온라인 광고업체에서 사용자가 아무런 의심없이 동의버튼을 누르는 버릇을 악용해 광고 콘텐츠 설치 유도(드라이브 바이 인스톨 - drive by install) 또는 한번 클릭하는 선택적 설치(one click opt install)
사용자의 동의 없이 자동으로 악성코드 다운로드 및 실행하는 현상
파밍(pharming)
악성코드 또는 다른 공격으로 인해 DNS가 변경되어 피싱사이트로 유도하는 공격
c:\window\system\drivers\etc 에 존재하는 host 파일 조작 혹은 레지스트리를 변조시켜 로컬프락시 설정, 악성코드 자체가 로컬 DNS가 되는 방식도 있다.
~쪽으로 자동차를 운전하다 라는 의미
온라인 광고업체에서 사용자가 아무런 의심없이 동의버튼을 누르는 버릇을 악용해 광고 콘텐츠 설치 유도(드라이브 바이 인스톨 - drive by install) 또는 한번 클릭하는 선택적 설치(one click opt install)
사용자의 동의 없이 자동으로 악성코드 다운로드 및 실행하는 현상
파밍(pharming)
악성코드 또는 다른 공격으로 인해 DNS가 변경되어 피싱사이트로 유도하는 공격
c:\window\system\drivers\etc 에 존재하는 host 파일 조작 혹은 레지스트리를 변조시켜 로컬프락시 설정, 악성코드 자체가 로컬 DNS가 되는 방식도 있다.
2016년 11월 30일 수요일
페인트공 알고리즘, 마세라티 문제, 야크 털 깎기
페인트공 알고리즘
1. 페인트공이 첫날은 차선 페인트 작업을 300야드 칠함
2. 둘째날은 150야드 칠함
3. 셋째날은 30야드 칠함, 첫날은 어떻게 10배를 칠했는지 관리자가 묻자
"저도 어쩔 수 없었습니다. 매일 페인트 통에서 점점 멀어지니까요."
- 조엘 스폴스키의 “조엘 온 소프트웨어” 중
--> 일정 이상 규모가 되면 급격히 성능 저하되고 문제를 일으키는 코드
마세라티 문제
1. 어떤 마세라티 모델과 색상을 구매할 지 고민하는 것.
2. 나중에 마세라티 살 능력이 됐을 때 할 고민을 미리 하는 것.
* 돈 많은 금융과 증권계에서는 “boat naming” 이라고 함.
* 당장 필요하지 않은 기술을 담보되지 않은 미래의 큰 성공에 대비하여 준비하는 것
* 천만명을 처리할 서비스는 사용자가 10만은 됐을 때 고민
* 엔지니어만 있는 스타트업에서 자주 발생하는 현상
야크 털깍기(Yak Shaving)
어떤 목적을 달성하기 위해 전혀 상관없는 연속된 작업을 해야 하는 상황.
그중 마지막 작업이 야크 털깍기
봄이 와서 세차를 하려는데 호스가 터졌음
차로 홈 디포우에 가서 호스를 사려보니 다리를 지나야 하는데 통행 카드가 필요
통행카드가 없어서 옆집 Bob 한테 빌리려는데
아들이 캠핑가려고 Bob 한테 베개를 빌린 후에 안 갖다 줌
그런데 베개에 있는 야크털이 많이 빠져서 지금 베개를 갖다 줄 수 없음
그래서 세차를 하기 위해 동물원에 가서 야크 털을 깍는중
- 세스 고딘의 “이제는 작은 것이 큰 것이다“ 중
* 야크 털깍기로 배우는 것도 많지만 문제는 일정
* 예정보다 많은 시간이 소요된다면 잠시 멈출 것
* 하려고 했던게 무엇인지 떠올려 보고 야크털깍기라 생각되면 했던 일을 과감히 중지
1. 페인트공이 첫날은 차선 페인트 작업을 300야드 칠함
2. 둘째날은 150야드 칠함
3. 셋째날은 30야드 칠함, 첫날은 어떻게 10배를 칠했는지 관리자가 묻자
"저도 어쩔 수 없었습니다. 매일 페인트 통에서 점점 멀어지니까요."
- 조엘 스폴스키의 “조엘 온 소프트웨어” 중
--> 일정 이상 규모가 되면 급격히 성능 저하되고 문제를 일으키는 코드
마세라티 문제
1. 어떤 마세라티 모델과 색상을 구매할 지 고민하는 것.
2. 나중에 마세라티 살 능력이 됐을 때 할 고민을 미리 하는 것.
* 돈 많은 금융과 증권계에서는 “boat naming” 이라고 함.
* 당장 필요하지 않은 기술을 담보되지 않은 미래의 큰 성공에 대비하여 준비하는 것
* 천만명을 처리할 서비스는 사용자가 10만은 됐을 때 고민
* 엔지니어만 있는 스타트업에서 자주 발생하는 현상
야크 털깍기(Yak Shaving)
어떤 목적을 달성하기 위해 전혀 상관없는 연속된 작업을 해야 하는 상황.
그중 마지막 작업이 야크 털깍기
봄이 와서 세차를 하려는데 호스가 터졌음
차로 홈 디포우에 가서 호스를 사려보니 다리를 지나야 하는데 통행 카드가 필요
통행카드가 없어서 옆집 Bob 한테 빌리려는데
아들이 캠핑가려고 Bob 한테 베개를 빌린 후에 안 갖다 줌
그런데 베개에 있는 야크털이 많이 빠져서 지금 베개를 갖다 줄 수 없음
그래서 세차를 하기 위해 동물원에 가서 야크 털을 깍는중
- 세스 고딘의 “이제는 작은 것이 큰 것이다“ 중
* 야크 털깍기로 배우는 것도 많지만 문제는 일정
* 예정보다 많은 시간이 소요된다면 잠시 멈출 것
* 하려고 했던게 무엇인지 떠올려 보고 야크털깍기라 생각되면 했던 일을 과감히 중지
2016년 9월 9일 금요일
datepicker 삭제 버튼(firefox 오류수정 버전)
jquery datepicker를 사용 할 경우 해당 input text를 삭제버튼으로 한번에 내용을 제거 하고 싶을때가 있다.
1.
그래서 얼마전까지 사용했던 방법은 jquery 초기화 옵션중에
이렇게 [오늘날짜]와 [닫기] 버튼이 최초에 생긴다.
2. 이 닫기 버튼의 이름을 clear로 변경
3. 닫기 버튼을 눌렀을때 해당 input text를 clear해주는 이벤트를 bind 해준다.
1.
그래서 얼마전까지 사용했던 방법은 jquery 초기화 옵션중에
showButtonPanel: true, // 캘린더 하단에 버튼 패널을 표시한다.
showButtonPanel 옵션을 true로 주면이렇게 [오늘날짜]와 [닫기] 버튼이 최초에 생긴다.
2. 이 닫기 버튼의 이름을 clear로 변경
3. 닫기 버튼을 눌렀을때 해당 input text를 clear해주는 이벤트를 bind 해준다.
closeText: 'clear'
,onClose: function (dateText, inst) {
if ($(window.event.srcElement).hasClass('ui-datepicker-close'))
{
document.getElementById(this.id).value = '';
}
}
이렇게 하면 ~ie엣지, 크롬에선 정상적으로 동작한다.
문제는 firefox에서는
라 에러가 생김
기존에 onClose 안에 준 이벤트 자체가 현재 이벤트가 일어나는 엘리먼트의 클래스를 여부를 판단하는것인다. window.event 자체가 firefox에서는 존재 하지 않아 해당라인에서 error발생
구글링 후 가장 깔끔하게 처리되는것은
function cleanDatepicker(){ var old_fn = $.datepicker._updateDatepicker; $.datepicker._updateDatepicker = function(inst) { old_fn.call(this, inst); var buttonPane = $(this).datepicker("widget").find(".ui-datepicker-buttonpane"); $("<button type='button' class='ui-datepicker-clean ui-state-default ui-priority-primary ui-corner-all'>clear</button>").appendTo(buttonPane).click(function(ev) { $.datepicker._clearDate(inst.input); }) ; } }위 함수를 선언 후 datepicker init 하기전에 한번 실행해주는 것이 가장 브라우저도 안타고 잘 동작하게 해결하는 방법이었습니다.4. 해당 함수를 실행하고5. 기존에 clear버튼을 "닫기" 버튼으로 변경6. onClose에 bind했던 함수는 제거하면아래와 같이 버튼 3개가 생기고 각 버튼들이 잘 동작 하는걸 확인 할 수 있다.
피드 구독하기:
글 (Atom)