'사고의 확장' 카테고리의 다른 글
매일경제 전호림 칼럼 중 (0) | 2012.02.11 |
---|---|
내가 22살 병장일 때 사시보다가 온 28살 이병에게 던진 질문 (0) | 2011.12.29 |
아마존의 눈물, 그건 우리가 아닌 그들의 눈물이였네 (0) | 2011.12.29 |
롯데상품권 사용처 (0) | 2011.12.23 |
종교의 이점 (0) | 2011.12.17 |
매일경제 전호림 칼럼 중 (0) | 2012.02.11 |
---|---|
내가 22살 병장일 때 사시보다가 온 28살 이병에게 던진 질문 (0) | 2011.12.29 |
아마존의 눈물, 그건 우리가 아닌 그들의 눈물이였네 (0) | 2011.12.29 |
롯데상품권 사용처 (0) | 2011.12.23 |
종교의 이점 (0) | 2011.12.17 |
얼마전 부상을 딛고, 자전거를 새로 구매했다.
처음 계획과 결과가 달라지긴 했지만,
친구가 추천해준 스타바이크에서 직구를 통해 구동계와 휠을 구매했다.
일단 가격이 다른 곳보다 저렴해 추천된다.
배송기간도 처리가 빨라서 결재 후 배송까지 2주정도면 가능하다.
가민 벡터 파워미터를 생각하고 있는데, 파워미터를 쓸 수 있을 정도의 몸 상태가 된다고 판단되면 사는게 나을 것으로 생각된다.
지난주에 100km 정도를 탔는데, 빨리 몸을 올려 신나고 안전하게 도로를 질주하고 싶다.
상체 치료 (0) | 2016.02.01 |
---|---|
근력 운동 정리 - 상체 (0) | 2015.10.16 |
근력 운동 정리 (0) | 2015.10.06 |
재활 운동 정리 (0) | 2015.08.04 |
내일이 졸업식 입니다. (0) | 2012.02.16 |
1. 프로시저 생성
DELIMITER $$
DROP PROCEDURE IF EXISTS HellloWorld$$
CREATE PROCEDURE HelloWorld()
BEGIN
SELECT 'Hello World';
END$$
DELIMITER ;
2. 프로시저 호출
CALL HelloWorld( )
3. 응용
3-1 변수
BEGIN
DECLARE my_integer INT;
DECLARE my_dob DATE DEFAULT '1960-06-21'
SET my_integer=20;
END;
3-2 파라미터
DELIMITER $$
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT)
BEGIN
SET out_number=SQRT(input_number);
END$$
DELIMITER ;
// IN : 읽기전용 프로시저안에서 값 변경 불가능, OUT : 프로시저 내부에서 일을 처리한디 값을 돌려줌, INOUT : 프로시저로부터 값을 전달받아 이를 고치고 다시 돌려줌
3-3 조건절 (IF/CASE)
IF(price>500) THEN
SET discount=10
ELSEIF (price>100) THEN
SET discount=5
ELSE
SET discount=3
END IF
3-4 반복문 (WHILE/END WHILE, REPEAT/UNTIL절 가능)
my_simple_loop : LOOP
SET counter = counter+1;
END LOOP my_simple_loop;
3.5 변수값을 SELECT 로 넣을 경우, select into
DECLARE total NUMERIC(8,2);
SELECT SUM(sale) INTO total
FROM sales
1. 저장프로시저란?
SQL Server에서 제공되는 프로그래밍기능이라고 할 수 있다.
어떠한 동작을 일괄처리하기 위한 용도로 사용된다. 어떤 특정 쿼리를 모듈화시켜
필요할 때 마다 호출하여 사용하는 것으로, 데이터베이스 개체에 속한다.
2. 구문형식
CREATE {PROC | PROCEDURE } [schema_name.] procedure_name [; num]
[ { @parmeter [type_schema_name.] data_type }
[VARYING] [=default] [out [put]] [,...n]
[WITH < procedure_option> [,...n]
[ FOR REPLICATION]
AS
<sql_statement> [;] [...n] | <method_specifier> } [;]
3. 입력 저장프로시저
ex) CREATE PROCEDURE usp_users2
@userBirth int,
@userHeight int /* 매개변수의 선언*/
AS
SELECT * FROM userTbl
WHERE birthYear > @userBirth AND height > @userHeight
/* 저장프로시저 내 실행될 SQL문*/
EXEC usp_users2 1980,180 /* 입력프로시저 실행*/
4. 출력 저장프로시저
ex) CREATE PROCEDURE usp_users4
@txtValue NCHAR(10),
@outValue INT OUTPUT
AS
Insert into testTbl values(@txtValue);
Select@outValue = IDENT_CURRENT('textTbl');
GO /* 출력 저장프로시저 */
CREATE TABLE testTbl (id int identity, txt nchar(10));
/* 사용할 테이블 만들기 */
/* 출력 저장프로시저 실행 ( 특정 값을 내가 넣을 수 있는 거) */
declare @myvalue int
exec usp_users4 '테스트값', @myvalue output
print '현재입력된id==>' + cast(@myvalue as char(5));
/* 출력프로시저 값 넣기*/
5. 저장프로시저 명령어들
1) 저장프로시저 삭제 : drop procedure usp_users4
2) 저장된 저장프로시저 확인
select o.name, m.definition from sys.sql_modules m join sys.objects o on m.object_id = o.object_id and o.type = 'p'
3) 저장프로시저 소스코드 확인
execute sp_helptext usp_users2
6. 저장프로시저 암호화
ex) CREATE PROC usp_Encrypt with encryption
AS
SELECT substring(name,1,1) + '00' as [이름], birthYear as '출생연도',
height as '신장' from userTbl
GO
/* 암호화 저장프로시저를 만들어서 소스내용을 보호한다. */
execute usp_encrypt
/* 암호화되어도 실행하는 데는 문제가 없다. */
execute sp_helptext usp_encrypt
/* 하지만 저장프로시저소스는 볼 수 없다. (다시 확인할 방법도 없다)
즉, 소스가 후에 필요할 경우 저장을 따로 잘해둬야 한다. */
7. 임시 저장프로시저
ex) CREATE PROC #usp_temp
AS
SELECT * from userTbl
GO
/* 임시 저장프로시저 생성으로 프로시저이름 앞에 #만 붙이면 된다.
(SQL Server를 재시작하면 사라진다.)
시스템 성능 상에 임시프로시저는 그다지 좋지 않다. */
exec #usp_temp /* 임시프로시저 확인*/
exec sp_executesql N'select * from userTbl'
/* 시스템 저장프로시저 (한번만 실행될 것이면, 임시프로시저보다 시스템저장프로시저를 활용하는 것이 더 시스템성능에 좋다.)*/
8. 저장프로시저의 특징
1) SQL Server 성능을 향상시킬 수 있다.
- 저장프로시저는 처음 시작되면 최적화, 컴파일 등의 과정을 거치고 그 결과가
캐시(메모리)에 저장된다. 그 후에는 캐시에 있는 것을 가져 사용하여 실행속도가
빨라진다. 반복되는 쿼리의 경우 저장프로시저를 사용하면 SQL Server의
성능을 향상시킬 수 있다.
2) 모듈식 프로그래밍이 가능하다.
- 한번 저장으로 언제든지 실행 가능하고, 저장 되어진 쿼리의 관리가 수월해진다.
다른 모듈식 언어와 동일한 장점을 갖는다.
3) 보안을 강화할 수 있다.
- 사용자에게 테이블권한을 주지 않고 저장프로시저 접근권한을 줌으로써 보안을
강화할 수 있다.
4) 네트워크전송량을 감소시킬 수 있다.
- 긴 코드의 쿼리의 경우 서버로 쿼리의 텍스트가 모두 전송되어야한다. 하지만
이 쿼리를 서버에 저장프로시저로 생성해 놓았다면, 단지 저장프로시저이름,
매개변수 등 몇 글자만 전송되면 된다.
※ 우리가 만들어쓰는 저장프로시저가 T-SQL 저장프로시저에 속하며, 생성 시 이름
앞에 usp_를 붙여 저장프로시저임을 구분 가능하도록 하자.
※ 확장 저장프로시저라는 것이 있지만, 추후 없어질 것이므로, CLR 저장프로시저라는
강력한 기능을 가진 것을 사용하는 것이 좋다.(어려운 것이므로 추후나 공부)
9. T-SQL과 저장프로시저 비교
1)T-SQL 과 저장프로시저의 작동방식
① T-SQL
최초에구문분석에서실행까지의여러과정이실행되고, 메모리에 올라간다.
같은 구문을 재실행하면 작동시간이 아주 단축된다.
② 저장프로시저
Create과정에서 실행하면 구문분석과 시스템테이블에 등록과정, 처음 실행하면
구분분석은 필요없고 나머지과정이 실시되고, 두 번째 실행부터 캐시에 것을 사용
하게 되어 속도가 빠르다.
⇒ 즉, 두 개의 차이가 크게 없이 느껴질지도 모르나, 변수 즉 검색 등의 조건이
바뀌게 되면 T-SQL은 컴파일 과정을 전부 다시 실행하게 되지만, 저장프로시저
경우 바뀐 변수부분을 제외하고는 이미 컴파일이 이미 완료된 상태이다. 그러므로
실제 다양한 값이 입력되고 조건이 바뀌는 것이 사용되므로 저장프로시저가 효율적
이다.
10. 저장프로시저의 단점
1) 단점
보통 인덱스를 사용하면 결과를 찾는 것이 빨라진다. 하지만, 가져올 데이터 건수가
많을 경우 인덱스를 사용하는 것이 오히려 성능을 나쁘게 한다.
그러므로 저장프로시저는 최초에 최적으로 한번만 컴파일이 되기 때문에 처음 작은
데이터를 사용하면 인덱스를 사용하게 되고, 후에 변수의 값이 커지게 되어도
인덱스를 사용하게 되어 성능에 좋지 않게 된다. 반대로도 마찬가지인데 처음에
많은 데이터를사용하고, 후에 적은 것을 쓰면 인덱스를 사용하지 않게 되어
성능에 좋지 않다.
2) 해결 방법
이러한 문제를 해결하기 위해 4가지방법을 생각할수있다.
① 실행시에WITH RECOMPILE 를붙인다.
(기존에컴파일된상태를알아야한다)
② EXEC sp_recompile 이름
EXEC 이름변수
(해댱하는 테이블이 이번 한번 다시 컴파일한다.)
③ DBCC FREEPROCCACHE;
(캐시를 모두비운다.)
(다시 실행시 재컴파일하게 된다).
④ 저장프로시저 사용시 마다 재컴파일되도록 설정한다.
(시작부분에 저장프로시저삭제부분을 기재)
윈도우 기반 컴퓨터들을 위한 인증서비스 제공
Active Directory란?
윈도우7 한글 변환 (0) | 2016.03.29 |
---|---|
P-ATA(IDE) / S-ATA (0) | 2016.03.03 |
URI / URL / URN (0) | 2015.08.26 |
익스플로러 우클릭 해제 (0) | 2015.08.19 |
윈도우 레지스트리 (0) | 2015.08.06 |
PHP 도 CGI 로 돌아갈 수도 있습니다. 다만 그렇게 쓰는 경우는 거의 없습니다. 님께서 말씀하신대로 CGI 로 돌아가면 각각의 요청마다 프로세스를 생성하므로 성능이 현저하게 떨어지기 때문입니다.
먼저 CGI 란 것부터 간단하게 설명드리겠습니다. CGI 는 소리님께서 말씀하셨듯이 웹서버와 프로그램 간에 데이터를 어떻게 주고 받을 것인가에 대한 규약입니다. 웹서버가 웹브라우저 같은 클라이언트로부터 요청을 받았는데, 웹 서버가 그 요청이 특정 프로그램이 실행될 필요가 있다고 설정 되어 있으면, 프로그램을 실행시키고 그 규약에 따라서 데이터를 프로그램에 넘깁니다. 프로그램 실행이 끝나고 결과가 나오면 프로그램은 규약에 정한대로 결과를 웹서버에 넘겨 줍니다.따라서 보통의 경우 CGI 로 처리를 하면 각 요청마다, 프로세스를 뛰워야 하기 때문에 성능이 좋지 못한 것입니다.
만약 PHP를 CGI 형식으로 수행 한다면, 아마 님 컴퓨터에서도 /usr/bin/php 또는 /usr/local/bin/php 라는 실행파일이 있을텐데, 웹서버를 특정 URL로 요청이 들어오면 php 를 실행시켜서 html 로 변환한후 웹서버에 넘겨주어 처리하게 됩니다. 실제로 이런식으로 설정하는 것도 가능하구요.
그러나 가장 흔한 PHP 설정은 웹서버 내에 php 인터프리터를 내장하는 방법입니다. 즉 요청이 들어왔을 때, 따로 프로그램을 실행시키지 않고 바로 웹서버가 직접 결과를 생성해서 클라이언트로 보내줍니다. 이 방법은 어차피 웹서버는 데몬 형태로 항상 실행중이므로, 요청이 들어와도 다른 프로세스를 생성하지 않기 때문에 성능이 좋습니다. 보통의 경우는 아파치 웹서버에 mod_php4 혹은 mod_php5 라는 모듈을 올려서 사용합니다. 이 모듈은 아파치를 컴파일 하는 시점에서 아예 같이 하나의 프로그램으로 컴파일 할 수도 있지만, 보통은 동적 모듈로 만들어서 아파치가 실행 될때 아파치가 직접 모듈을 자신에게 불러들이게 됩니다.
그리고 웹서버에 직접 내장하는 방법 이외에도, 웹서버 밖에다 따로 데몬을 뛰워 놓고 아파치와 이 데몬 프로세스가 소켓 통신으로 데이터를 주고 받는 방법도 있습니다. SCGI, FCGI 등등이 이런 기술인데, 이 방법을 사용해도 각 요청마다 따로 프로세스를 뛰우지 않고 소켓으로 데이터만 보내고 받으면 되기 때문에 오버헤드를 크게 줄일 수 있게 됩니다.
원래 의도와는 다른 내용의 답글이 먼저 올라간 스레드네요.
소타님이 이야기한 대로 CGI는 규약입니다.
어떠한 프로그램의 일종으로 볼 수 있는 것이 아닙니다.
웹 서버는 정적 파일 - 이미지, HTML문서 - 를 보내기 위한 프로그램입니다.
그렇기에 동적으로 바뀌는 내용(예를 들어, 게시판 글 목록)이 전달이 되려면 웹서버 자체로는 해결이 안되겠지요. 이를 해결하기 위한 것이 외부 프로그램을 불러서 그 프로그램의 결과를 대신 전달해주는 방법을 만든 것입니다. 이 때 외부 프로그램을 부를때 규칙을 정해서 전달하게 하면 외부 프로그램을 작성/사용할 때 편할 것입니다.
그 규칙을 CGI(Common Gateway Interface)라고 한 것입니다.
이 규칙을 지키지 않고서는 절대로 웹 서버에서 호출을 받거나 웹서버로 결과를 전달할 때 기대했던 결과를 얻지 못합니다.
PHP, ASP, JSP 모두 CGI 규칙을 지키는 프로그래밍 언어입니다.(프로그램이 아닙니다.)
ASP는 항상 웹서버의 모듈 형태로 동작을 합니다.(ASP.DLL 파일)
PHP,JSP는 웹서버의 모듈 형태로 동작할 수도, 별도의 프로그램으로 동작할 수 있습니다.
CGI하고 CGI프로그램하고 분리해서 생각하는 것이 필요합니다.
php는 cgi형태로 돌아갈 수도 있고, 웹서버에 내장할 수도 있습니다.
cgi형태로 돌아가면 PHP코드를 분석 실행하는 인터프리터가 외부에 존재합니다.
웹서버는 php 파일에 대한 요청이 들어올때마다 php 인터프리터 실행시키고 통신합니다.
이때 통신하는 방식이 CGI 규약입니다. (환경변수 세팅하고 뭐 하고 등등...)
하지만 웹서버에 모듈로 내장된다면 웹서버가 PHP코드를 직접 인터프리팅하죠.
이때는 CGI규약하고는 전혀 상관이 없습니다.
웹서버에 내장된 모듈은 PHP에 대한 요청이 올때마다 웹서버와 통신하는데,
이것들은 파이프나 소켓 필요없이 웹서버 프로세스 내에서 다 처리됩니다.
아파치면 아파치 고유의 형식이 있을꺼고 M$ IIS라면 ISAPI를 이용합니다.
성능은 웹서버 내장이 훨씬좋죠.
결론은 PHP != CGI입니다.
내장이면 CGI랑 전혀 상관없고
CGI 형태로 돌아간다면 CGI프로그램에서 인터프리팅되는 스크립트 언어죠.
X11 색상 이름 (0) | 2016.04.25 |
---|---|
HTML 특수문자코드표 (0) | 2016.04.25 |
HTTP 프로토콜 (0) | 2015.09.30 |
MySQL join (0) | 2015.08.24 |
[HTML] favicon 생성 (0) | 2015.07.29 |
ㅁ 벤치 프레스 - 흉근
- 눈높이에 바가 위치하도록 엎드려서 시작
- 어깨에 부담이 덜 오도록 80도 정도로 조정
- 프레스와의 각도는 90도로 유지
- 내려올때는 2 올라갈때는 1의 속도
- 가슴에 완전히 닿지 않아도 됨
ㅁ 렛 풀다운(Lat Pull Down) - 광배근
오버 그립 - 중광배
언더 그립 - 하광배
- 팔꿈치는 90도가 되도록 유지
- 팔은 바닥과 수직이 되도록 유지
- 내려올때는 상체에 힘을 준 채 살짝 뒤로
- 다 내려서는 날개뼈를 모은다는 생각으로 꽉 쪼아줌
- 광배에 힘이 들어간다는 생각으로 진행
- 처음에는 등으로 땡기다가 팔로 마무리 + 광배쪽 땡김 바짝
# 등근육 종류
ㅁ 싯티드 로우 (Seated Row) - 능형근 운동
- 배꼽쪽으로 땡긴다고 생각
- 상체는 90도 이상 뒤로 넘어가지 않는다고 생각
- 땡기고 나서 풀때는 앞으로 조금 숙여도 됨(이완)
- 하체는 고정하고 등으로만 땡긴다고 생각
- 날개뼈를 모은다는 생각으로 마무리 동작
ㅁ 팩덱 플라이 (Pac Dec Fly) - 가슴 안쪽
- 어깨는 80~70도 정도로 유지
- 손목에 힘을 주고 꺾이지 않도록 유의
- 팔꿈치 각도는 90도를 유지
- 팔의 자세는 변화없이 가슴으로 끝까지 땡김
ㅁ 운동 순서
- 등 / 가슴 반복
- 가슴 안쪽으로 마무리
- 능형근 운동으로 추가 마무리
상체 치료 (0) | 2016.02.01 |
---|---|
starbike.com 직구 후기 (0) | 2015.12.29 |
근력 운동 정리 (0) | 2015.10.06 |
재활 운동 정리 (0) | 2015.08.04 |
내일이 졸업식 입니다. (0) | 2012.02.16 |
ㅁ 레그 컬
- 발가락 정면으로 올리기
- 일정 속도 유지
ㅁ 레그익스텐션(Leg Extension)
- 등과 허리를 뒤로 붙이고 진행
- 하체운동 전 준비운동으로 가볍게 2세트 진행
ㅁ 스쿼트 - 하프/풀/다리간격
- 엉덩이를 내리는 위치에 따라 하프(엉덩이 위), 스탠다드(엉덩이), 풀(엉덩이 아래) 스쿼트
- 무릎은 발바닥의 방향과 동일하게 움직임, 내려갈때와 올라올때 방향 유지에 주의
- 무릎이 발가락 앞으로 나오면 하중에 무릎에 실림, 무릎 부상 주의
- 다리 간격을 벌릴수록 고관절에 하중이 실림, 힘들면 간격을 줄임 / 무릎 이동 방향 안쪽으로 쏠리지 않도록 주의
- 일반 스쿼트는 허벅지 앞쪽 / 다리벌린 스쿼트는 허벅지 바깥쪽, 고관절 위주 운동
ㅁ 플랭크 - 기본/사이드
- 45초 이상 유지
- 엉덩이에 힘을 주고, 팔꿈치는 살짝 아래 방향으로 힘을 줌
- 무릎 자세는 일직선이 되도록 주의
- 팔꿈치가 어깨와 일직선이 되도록 주의
- 옆구리에 부하가 느껴져야 함
ㅁ 백인스텐션
- 발 뒷굼치를 뒤쪽 바에 정확히 붙임
- 발바닥의 방향을 바깥방향으로 하면 고관절(엉덩이)에 부하가 더 실림
(각도를 많이 줘도 됨)
- 허리를 굽히지 않도록 주의
- 생각보다 더 내려감
- 상체를 올릴때 일자가 될때까지만 올림
ㅁ 크런치
- 턱과 가슴은 테니스공 정도의 공간을 유지
- 상체를 올릴때, 어깨(견갑골)도 같이 떼어 줌
- 명치쪽에 부하가 걸린다는 생각으로 진행
- 팔로 머리를 밀어올리지 않도록 주의
- 등은 바닥에서 떨어지지 않도록 유지
- 상체는 너무 높이 들지 않음
starbike.com 직구 후기 (0) | 2015.12.29 |
---|---|
근력 운동 정리 - 상체 (0) | 2015.10.16 |
재활 운동 정리 (0) | 2015.08.04 |
내일이 졸업식 입니다. (0) | 2012.02.16 |
삼국지8이 재밌는 10가지 이유 (0) | 2012.01.20 |
iptables와 같이 커널레벨의 필터링도구는 L2/L3 수준에서의 차단이고,
tcp wrapper는 application 수준에서의 차단입니다.
따라서, iptables가 먼저 적용되는 것입니다.
간단한 tcp wrapper 대신 복잡한 iptables를 사용하는 이유는 여러가지가 있습니다.
-. tcp wrapper로 차단 가능한 것은 telnet/ftp/sshd/ sendmail등 libwrap를 사용하는 일부의 서비스로 제한됩니다.
iptables는 모든 서비스에 대한 필터링이 가능합니다.
-. tcp wrapper는 차단/허용밖에는 없으나 iptables는 여러 복잡한 정책설정이 가능합니다.
-. tcp wrapper는 소스IP로만 차단 가능하지만 iptables는 여러 조건으로 차단 가능합니다.
쉘 스크립트 문자열 조작 (0) | 2016.03.28 |
---|---|
리눅스 네임서빙 우선순위 결정 : /etc/host.conf (0) | 2016.03.03 |
htaccess 설정방법 (0) | 2015.09.22 |
MySQL 외부 접속 설정 (0) | 2015.09.07 |
리눅스 백업 관련 (0) | 2015.08.31 |