구슬이네 IT & Media / IT 와 미디어를 바라봅니다



참고문서 : http://wiki.openwrt.org/doc/howto/lamp

 

root@OpenWrt:/mnt/usb1# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                30.4M      8.7M     21.7M  28% /
tmpfs                    30.2M     76.0K     30.2M   0% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
root@OpenWrt:/mnt/usb1#

 

root@OpenWrt:/mnt/usb1# opkg update
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
Inflating http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/packages.
root@OpenWrt:/mnt/usb1#

 

root@OpenWrt:/mnt/usb1# opkg install libpthread libncurses libreadline mysql-server
Package libpthread (0.9.30.1-43.32) installed in root is up to date.
Installing libncurses (5.7-2) to root...
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/libncurses_5.7-2_ar71xx.ipk.
Installing libreadline (5.2-2) to root...
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/libreadline_5.2-2_ar71xx.ipk.
Installing mysql-server (5.1.53-2) to root...
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/mysql-server_5.1.53-2_ar71xx.ipk.
Installing libmysqlclient (5.1.53-2) to root...
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/libmysqlclient_5.1.53-2_ar71xx.ipk.
Installing uclibcxx (0.2.2-3) to root...
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/uclibcxx_0.2.2-3_ar71xx.ipk.
Configuring libmysqlclient.
Configuring uclibcxx.
Configuring mysql-server.
Configuring libreadline.
Configuring libncurses.
root@OpenWrt:/mnt/usb1# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                30.4M     12.1M     18.3M  40% /
tmpfs                    30.2M      1.5M     28.7M   5% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
root@OpenWrt:/mnt/usb1#

root@OpenWrt:~# sed -i 's,^datadir.*,datadir         = "/srv/mysql",g' /etc/my.cnf
root@OpenWrt:~#
root@OpenWrt:~# sed -i 's,^tmpdir.*,tmpdir          = "/tmp",g' /etc/my.cnf

 

root@OpenWrt:~# mkdir -p /srv/mysql
root@OpenWrt:~# mysql_install_db --force
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h OpenWrt password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/scripts/mysqlbug script!

root@OpenWrt:~#

root@OpenWrt:~# /etc/init.d/mysqld start
Starting MySQL daemon... done
root@OpenWrt:~# /etc/init.d/mysqld enable

mysqladmin -u root password 'new-password'
 

root@OpenWrt:~# opkg update
opkg install php5-mod-mysqlDownloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
Inflating http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/packages.
root@OpenWrt:~# opkg install php5-mod-mysql
Installing php5-mod-mysql (5.3.6-3.3) to root...
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/php5-mod-mysql_5.3.6-3.3_ar71xx.ipk.
Configuring php5-mod-mysql.
root@OpenWrt:~#

root@OpenWrt:~# sed -i 's,;extension=mysql.so,extension=mysql.so,g' /etc/php.ini
root@OpenWrt:~#

 

root@OpenWrt:~# netstat -nap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2331/mysqld
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1525/uhttpd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      1555/vsftpd
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      1550/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1512/dropbear
tcp        0     48 192.168.1.1:22          210.115.223.46:58963    ESTABLISHED 2283/dropbear
netstat: /proc/net/tcp6: No such file or directory
udp        0      0 0.0.0.0:53              0.0.0.0:*                           1550/dnsmasq
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1550/dnsmasq
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  6      [ ]         DGRAM                       260 303/syslogd         /dev/log
unix  2      [ ACC ]     STREAM     LISTENING       3849 2331/mysqld         /var/run/mysqld.sock
unix  2      [ ]         DGRAM                      1054 835/hostapd         /var/run/hostapd-phy0/wlan0
unix  2      [ ACC ]     STREAM     LISTENING       3695 2283/dropbear       /tmp/dropbear-ad87d49d/auth-59b4374a-7
unix  2      [ ]         DGRAM                      1878 835/hostapd        
unix  2      [ ]         DGRAM                      1670 1550/dnsmasq       
unix  2      [ ]         DGRAM                      1629 1512/dropbear      
unix  2      [ ]         DGRAM                       265 305/klogd          
root@OpenWrt:~#

 

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                30.4M     12.5M     17.9M  41% /
tmpfs                    30.2M      1.5M     28.7M   5% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
root@OpenWrt:~#

mysql –uroot –p패스워드 하면 잘된다.



이 글은 디지털단식이라는 책의 내용입니다. 회사에서 몇년 일하다보니 너무 공감이 가서 기억하려고 남겨둡니다.

 

IT관리예산, 배보다 배꼽이 큰격

시스템의 난립과 극단적인 부분 최적화는 시스템의 유지비용을 크게 상승시킬 뿐만 아니라 미래에 각종 화근을 남긴다. 왜 유지비용이 상승할까? 그것은 불필요한 업무가 늘어나기 때문이다.

달리 말하면 각 업무 시스템이 본래의 목적이나 효과, 효능을 발휘하도록 하는 데보다 시스템이 멈추거나 문제가 발생치 않도록 하는데 더 큰 노력과 시간, 즉 비용이 지속적으로 들어간다는 말이다.

중략

변화무쌍한 환경에 비해 경직적인 업무 시스템은 명백히 비즈니스 현장의 발목을 잡고 있다.

불만이 제기가 되지 않더라도 문제는 내부적으로 생긴다. 일단 시스템에 큰 변화나 변경이 불가피한 상황이 되면 대소동이 일어난다. 여기저기 난립하고 극단적으로 개별 최적화된 시스템이 복잡하게 얽혀 있어 어디부터 손을 대야 할 지 알 수 없는 상황이 된다.

쓸데없는 요구만 하는 이기적인 사용자들

그 원인은 무엇일까? “정보 시스템 부서의 기술이 떨어진다.”, “대충 만들었다.”, “예산이 없다.” 등등 다양한 비판이 있긴 하지만, 핵심을 찌른 지적은 하나도 없다.

진짜 원인은 대부분의 IT예산을 정보 시스템 부서에 집중하는데 있다. 달리 말하면 시스템을 이용하는 각 실무 부서가 자신들이 사용하는 업무 시스템에 대해 투자 책임, 비용 대 효과에 관한 책임을 지고 있지 않기 때문이다.

책임을 지지 않으면 어떻게 될까? 비판적인 프로야구 팬처럼 현실성이 있든 없든 일단 자신의 생각만 말한다. 회사의 영업 부서가 시스템에 관해 자신들의 편의만 생각하면 반드시 문제가 된다. 비용 대 효과는 고려하지 않고 당장 자신들이 하는 작업이 편해질 수 있는 시스템만을 요구하는 ‘몬스터 유저’가 증식하는 것이다.

그 대부분은 “왜 우리 회사의 시스템은 인터페이스가 친철하지 않은 거야?”, “나는 예전 시스템처럼 이 집계치를 화면의 이 위치에 표시하고 싶어. 안 그러면 불편하다고!” 같은 하찮은 요구다. 이에 대해 정보 시스템 부서에서 “하지만 시스템화에 들어가는 예산이 정해져 있고 정말 실현해야 할 기능과 샤양이 많아서 이번에는 요청을 들어 드리기가 어렵습니다.” 라고 대답하면 “내가 자주 사용하는 인터넷 쇼핑몰의 시스템은 인터페이스가 그렇게 친절할 수 없는데, 왜 우리 회사는 이 모양이야!” 라는 되지도 않는 소리를 한다.

정보 시스템 관리자들이 차마 말하지 못하는 본심을 대신 말해주도록 하겠다.

“그런 하찮은 것보다 본질적으로 업무가 효율화되거나 고객에 대한 서비스가 향상될 포인트를 가르쳐 달라고!”

“그야 제품을 사는 고객이 사용하는 시스템이니 당연히 심혈을 기울여 편리하게 만들었겠지. 그게 사업의 핵심인데 당연하지 않겠어? 그러니까 그 위치에 집계 수치를 표시하라고 요구하기 전에 이 시스템의 업무상의 핵심이 뭔지 생각해 보라고!”

어느 회사에서나 드물지 않게 일어나는 불행한 현실이다. 각 부서는 시스템 투자에 관한 요청을 계속해서 시스템 부서에 보낸다. 요청을 보내는  쪽은 예산 권한도 없고 투자 대 효과에 관해 책임질 필요도 없으므로 오로지 자신들의 편의만 생각한다. 한편 정보 시스템 부서는 실무 부서의 불평과 비판이 두려워서 전문 용어를 구사해 회사의 재정이 허락하는 한계까지 IT투자를 늘리도록 유도한다. 그 결과 군살만 잔뜩 붙어 있고 근육은 없는 “비효율적인 시스템” 이 탄생하고 IT 예산도 비대해지는 것이다.

예산만 늘어날 뿐 기대했던 효과가 없다.

다이와 하우스 공업의 집행 임원이자 정보 시스템 부장인 가토 교지 씨는 “현장의 목소리를 듣는 것이 정말 전체 최적화로 이어질지는 알 수 없습니다” 라고 단언했다. ‘현장의 목소리’ 라고는 하지만 결국은 현장에서 ‘목소리가 큰 사람’의 의견이 시스템에 반영되게 마련이라는 것이다.

“이런 일이 반복되면 점점 시스템이 비대해져, 일정 수준을 넘게 되어 사람이 컴퓨터에 구속되고 맙니다. 결국 시스템의 ‘비대화’와 ‘복잡화’, ‘현장력의 저하’가 반복되는 것입니다.”

요청 하나하나를 살펴보면 사소한 편리함을 추구한 것이 많음을 금방 알 수 잇다. 사업부 공통 시스템에서 출력되는 장부의 레이아웃을 지금까지 부서에서 사용하던 것과 똑같은 형태로 바꾸기 위한 서브 시스템, 부서 고유의 영업 방식에 맞춘 부 전용 업무 관리 시스템 등, 주위를 둘러보면 일일이 열거하기도 힘들 정도다. 다시 한 번 말하지만, 이래서는 IT예산만 부풀어 오를 뿐 사내의 정보 공유나 커뮤니케이션의 고도화 등, 애초에 원했던 결과로는 전혀 이어지지 않는다. 요청을 보내는 각 부서에서는 물론 전체 최적화 따위는 전혀 고려하지 않는다. 그 결과 호환성이 없는, 활용되지 않는 데이터나 데이터베이스가 사내 여기저기에 만들어진다. 정보 공유는 진행되지 않고 운용과 입력만 더욱 번거로워지는 것이다.

경영자조차도 “우리 회사의 시스템 부서는 친절한 시스템을 만들지 못하고 있다.” 라든가 “IT예산이 비대해지고 있는데 투자에 걸맞는 효과나 결과를 얻지 못하고 있다.” 라는 말을 할 때가 있다. 자신의 무책임함에서 비롯된 문제를 시스템 관리 부서에 전가하는 발언이다. IT 예산을 시스템 부서에 집중했거나 그러도록 용인한 장본인은 바로 경영자다. 그 결과 업무와 시스템이 분단되어 사소한 편리함만이 무의식중에 추구되면 쓸데없는 기능과 데이터, 정보가 넘쳐나고 IT중독을 조장하게 되었다.

기업의 업무 시스템은 인터넷의 출현으로 매우 복잡하게 얽혀있으며 항상 변화하지 않으면 가치가 감소하는 골치 아픈 존재가 되었다. 세부적인 문제점에 주목하기 전에 이런 불행한 상황을 계속 만들어 온 잘못된 구조, 원흉을 없애는 것이 경영자가 해야 할 일이다. 많은 기업의 업무 시스템은 경영자가 ‘결단’을 내리고 진두지휘하지 않으면 물리칠 수 없는 ‘괴물’이 되어 버렸다.



1. 무선네트워크 켜기

공유기에서 Network-Wifi 쪽 꺼져있는걸 켜면됨

2. SSID 이름 바꾸기

Network-Wifi 들어가서 SSID 변경

3. Security 방법 선택하고 비밀번호 설정하기

4. 포트포워딩 (외부에서 내부 네트워크로 들어오게 하는 방법)

http://blog.shar.kr/1026

5. ddns 서비스를 이용해서 도메인으로 접속하게 하기 ==> 잘됨

마이크로소프트 5월호 참고

6. OpenWrt에서 USB 인식시키기

http://blog.shar.kr/1024

http://blog.naver.com/PostView.nhn?blogId=min6113&logNo=90024158860&redirect=Dlog&widgetTypeCall=true

http://wiki.openwrt.org/doc/howto/usb.storage

http://hook.tistory.com/m/post/view/id/284

http://openwrt.ssu.ac.kr/bbs/board.php?bo_table=OpenWrt_QnA&wr_id=487

리눅스에서 FAT나 EXT3등으로 외장하드 포맷하기

http://blog.naver.com/synth9?Redirect=Log&logNo=130094707512

FAT로 인식시켜서 윈도우에서도 인식시키고, 리눅스에서도 인식시키자.

윈도우에서는 Partition Wizard로 FAT로 포맷 (Fat으로 하니까 파티션이 두개나오는데 FAT32로 하니까 하나로 잘됨)

mount -t vfat /dev/sda1 /mnt/usb1 -o rw,sync

USB뺄때는

umount /dev/sda1

USB 인식도 잘됨, 당분간은 FTP로 파일 업,다운으로 해야겠음.

7. FTP 설치하기

잘됨

http://blog.shar.kr/entry/OpenWRT-%EA%B3%B5%EC%9C%A0%EA%B8%B0%EC%97%90-FTP%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0

8. lighttpd 설치하기

잘됨

실행

/etc/init.d/lighttpd start 

설치한후에 외부에서 들어가려면 network-firewall 에서 포트포워딩 81번 포트 추가해줌

임베디드 리눅스시스템 구축 및 응용 참고

디렉터리 보안기능 추가

root@OpenWrt:/mnt/usb1/OS_WWW/PROGRAM# opkg update
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
Inflating http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/packages.
root@OpenWrt:/mnt/usb1/OS_WWW/PROGRAM# opkg install lighttpd-mod-auth
Installing lighttpd-mod-auth (1.4.28-2) to root...
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/lighttpd-mod-auth_1.4.28-2_ar71xx.ipk.
Configuring lighttpd-mod-auth.
root@OpenWrt:/mnt/usb1/OS_WWW/PROGRAM#

설정은 다음 참고

http://hook.tistory.com/289

9. vi에서 한글이 깨지는 문제 해결하기

어떻게 해야 되나?

 

10. PHP 설치

잘됨

임베디드 리눅스시스템 구축 및 응용 참고

 

11. DB설치

mysql ? litesql ?

 

12. 파일공유 (SAMBA) --> 윈도 PC에서 읽기는 되는데 아직 쓰기가 안되네요. 

윈도우에서 리눅스파일을 공유폴더로 접근해보자

삼바란?

http://eincs.net/2010/03/file-transfer-between-window-unix-with-samba/

삼바 재시작

smbd restart

삼바 시작

smbd -D

확인

netstat -nap

윈도우 Xp에서는 아주 잘 되고 윈도우 2008에서 접속이 안되네

이것저것 해보고 있는중

http://songeehana.blog.me/40154128760

http://www.coffeedust.com/2010/07/windows-vista-home.html

http://www.petri.co.il/how-to-disable-smb-2-on-windows-vista-or-server-2008.htm

 http://takuma99.tistory.com/166

 

==> XP에서는 수정은 안되도 읽기는 잘 됬는데, 윈도우7에서는 기본적으로 안된다..

제어판 > guest 계정을 사용으로 변경


13. 시작 프로그램 등록

 

/etc/rc.local

 

에 명령어 추가하면 시작시 실행됨

 

 

* 참고문서

http://hook.tistory.com/288#trackback8350355

'IT 개발 > OS-LINUX' 카테고리의 다른 글

tar 옵션 (파일내용보기, 특정파일만 풀기)  (0) 2012.08.10
openwrt에서 mysql설치해보자  (1) 2012.05.30
페도라코어8이상에서 ssh포트문제  (0) 2011.08.23
리눅스 SSH 활용  (0) 2011.08.23
tail 사용하기  (0) 2011.03.10


1. PING 결과를 PHP로 받기

<?
$outputShel8 = shell_exec("ping -c2 -w2 125.137.163.168") ;
if(strpos($outputShell, '0 received'))
{
echo "<font color=blue>O</font>";
}
else
{
echo "<font color=red>X</font>";
}
?>

인자를 조절하면 여러개의 서버를 한번에 받을 수도 있다.

원문 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=351186#c_351186

 

2. 웹서버 응답 확인하기

http://10.10.10.10/response/response_php.php

에는 그냥 text로 "1번서버 정상!" 이렇게 출력하게 하고 모니터링 하는 페이지에서 다음과 같이 한다.

 $str_php3 = file_get_contents('http://10.10.10.10/response/response_php.php');

 if (strstr($str_php3,"정상") != "")
 {
  $STATUS = "NORMAL";
 }
 else
 {
  $STATUS = "CRITICAL";
 }

이건 약간의 편한 방법이고 범용적인 경우는 다음 참고

http://blog.shar.kr/8

 

 

ABAP 형변환

IT 개발/SAP-ABAP 2012. 4. 20. 16:17


원문 : http://www.abapschool.com/board/xboard/read.php?boardname=qna&list_num=773&offset=1155&PHPSESSID=509f1a872cc40ebdcacf32fa72f33320

 

형변환이 대한 것입니다. abap help 에 나와 있는 내용을 정리해 봤습니다.

generic type 이외에 predefined type (사전정의된유형) 에 대하여만 참고 바랍니다.

 

generic type 은 Assign 되는 source field 의 타입속성을 따르게 때문에 따로 정리할 수가 없을 것 같습니다.

 

Predefined type 에 대하여는 다음과 같습니다.

( 자세한 설명은 도움말을 참고하여 주시기 바랍니다.)

 

source field Type C => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type D => target field type C, D, F, I, B, S, P, STRING, T, X, XSTRING

source field Type F => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type I, B OR S => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type N => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type P => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type STRING => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type T => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type X => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

source field Type XSTRING => target field type C, D, F, I, B, S, N, P, STRING, T, X, XSTRING

 

보시면 아시겠지만 형변환이 별 차이가 없습니다.

 

[첫번째 질문]

 

DATA L_CHAR TYPE CHAR 10 VALUE '         0      '.

DATA L_INT      TYPE I.

 

* L_CHAR 의 문자가 숫자뿐이라면

IF L_CHAR CO '0123456789'.

    L_INT = L_CHAR.

ELSE.

* 숫자이외의 문자가 있으므로 변환불가입니다.

ENDIF.

 

이렇게만 해주시면 됩니다.

 

[두번째 질문]

아밥에서 NULL은 거의 사용을 하지 않습니다.

 

사전정의된 데이터 타입은 기본적으로 정의될때 기본값을 가지므로

NULL 에 대한 점검이 거의 없다고 보시면 됩니다.

 

궂이 NULL 을 갖는 값을 원하신다면

 

CLEAR field WITH NULL.

 

로 CLEAR 하셔야 합니다.

 

질문은 문자열 치환방법이나 공백제거 방법에 대하여 물어보신것으로 하고 답변드립니다.

(사용방법은 개인별로 방법이 다 달라서 제가 가끔 사용하는 방법위주로 말씀드리겠습니다)

문자열 치환 :

단일문자 치환

DATA L_STRING TYPE CHAR10 VALUE 'ABCDEFGHIJ'.

* L_STRING 을 모두 소문자로 변환한다면

TRANSLATE L_STRING TO LOWER CASE.

* 또는

TRANSLATE L_STRING USING 'AaBbCcDdEeFfGgHhIiJj'.

 

공백제거( 문자열에 대하여 )

DATA L_STRING TYPE CHAR10 VALUE '   BAS   '.

 

SHIFT L_STRING RIGHT DELETING TRAILING SPACE.

 

등등...

 

문자열에서 특정한 문자(공백같은) 에 대하여 NULL 값으로 주는 것은 힘들 것 같습니다.

 

수고하세요.

(*) 배열조작

IT 개발/PHP 2012. 3. 13. 08:45




출처 : http://blog.naver.com/palace0324/80040435883


 

1. list()

 

list($key, $value)

  - list() 함수는 배열로 받은 것을 키와 배열 값으로 나누어 준다.

 

 

2. each()

 

each($array)

  - each() 는 배열을 받아서 키와 값으로 되돌려 주는 역할을 한다.

  - 배열 값을 가지고 올 때 처음부터 가지고 오며, 그 다음이 불러지면 자동으로 다음 배열을 가지고 온다.

     따라서 while 문이 계속 돌아간다.

 

each()에서 받은 배열을 list에서 키와 배열 값으로 나누어 주는 것이다.

 

/* 예제 */

<?php

$colors = array("ext"=>"blue", "trim"=>"black", "fab"=>"yellow", "das"=>"hunter green");

reset($colors);

while (list($key, $value) = each($colors)) {

  print "$key: $value<BR>";

}

?>

 

/* 예제 설명 */

reset($colors);  → $colors 배열의 처음으로 포인터 이동.

list($key, $value);  → 배열의 key와 value 값을 부름. (여기서는 "ext"와 "blue"를 부름)

each($colors);  → $colors 배열을 선택. 다음에 불려질 때는 포인터가 하나 증가함.

list($key, $value) = each($colors);  → $color 배열의 값을 $vlaue에, 키 값을 $key에 할당한다.

 

 

2. foreach()

 

foreach ($array as $key => $val)

  - $array 배열의 키 값은 $key에, 배열 값은 $val에 나누어 할당한다.

  - foreach ($array as $value)는 배열 값만 $value에 할당한다.

  - $array 배열 값이 존재할 때까지 자동으로 루프를 돌게 된다.

  - list()에 비해 내부적으로 더 빠르다.

 

foreach() 예제 보기

 



홈페이지를 옮겨서 새주소 바로가기를 알려드립니다.


http://studium.tistory.com/165



'IT 개발 > PHP' 카테고리의 다른 글

PHP 모니터링용 소스  (0) 2012.05.16
(*) 배열조작  (0) 2012.03.13
쉘 스크립트로써의 PHP cli  (0) 2012.01.05
실시간 운영체제로의 영역 확장 PHP  (0) 2012.01.05
PHP 프로그램에서 구글 캘린더 사용하기  (0) 2012.01.05



펌의 펌

http://blog.naver.com/bidum1

프로그래머의 정년은 35세.. 7-8년 되면 회사에서 기획이나 영업 마인드를 요구.. 결국 관리자의 길을 선택.. 이것이 이바닥에서 경력 7-8년 된 프로그래머를 찾을 수 없는 이유라는.. 무척 동감이 가는 글입니다. 퍼왔습니다: 

[출처: ZDNet-Korea] 최근 IT 업계에서는 소프트웨어 개발자 구하는 게 하늘의 별 따기 보다 어렵다고 한다. 그나마 데리고 있던 개발자 조차도 대기업으로 이직하거나 직종을 바꾼다고 난리다. 심지어는 대기업과 벤처기업간에 인력 빼가기로 인하여 법정 소송까지 벌어지고 있는 실정이다. 

그 많던 개발자들이 갑자기 어디로 가 버린 건가? 올 하반기에 기업들은 내년 경기 호조의 기대 속에 그 동안 지연시켜왔던 많은 개발 프로젝트들을 동시에 진행하게 되었고, 또한 통신사들을 중심으로 대규모 프로젝트들이 시작되어 많은 인력을 필요로 하였기 때문일 가능성이 크다. 그러다 보니 프리랜서들까지 총 동원되어 프로젝트에 투입되고 있지만 여전히 부족하기는 마찬가지다. 특히 7년 차 이상 되는 중급 개발자 구하기는 정말 힘들다. 심지어는 중급 프리랜서 개발자 한 명에게 서너 군데 업체들이 동시에 연락을 해 마치 가격 경쟁이 이루지는 듯한 웃지 못할 사례들까지 벌어지고 있는 실정이다. 

결국 개발의 의뢰한 업체에서도 사람이 없어서 계획했던 일들을 제대로 진행하지 못하는 상황이고, 개발을 책임지고 있는 SI 업체들도 사람이 없어서 고객에게 납기일을 맞추지 못하고 있다. 결국 고객과 중간 단계 책임자인 SI 업체는 최종 개발자 또는 개발 업체에게 계획했던 금액보다 더 높아진 인건비를 지급하고서야 프로젝트에 사람을 투입할 수 있게 되었다. 

예견된 불행
하지만 인력난에 대한 문제는 이제 시작에 불과하다. 한국 소프트웨어 컴포넌트 컨소시엄의 예측에 따르면 올해 필요한 소프트웨어 분석 및 설계 기술 인력의 수는 1만5천명이지만 실제로는 50%인 7500명 밖에 안 된다고 한다. 2008년에는 1만 명 이상이 부족할 것으로 예상된다. IT 강국인 대한민국이 앞으로는 개발자 인력 부족으로 인하여 후발 국가들한테 그 자리를 위협받게 될 상황까지 올지도 모른다. 그러나 이러한 수급 불균형에 대한 문제들은 이미 예견되었던 사항이라 더 안타깝다. 

이미 소프트웨어 개발자들 사이에서는 3D 직종이라는 인식이 만연해 있다. 필자가 2002년 기재했던 컬럼의 댓 글로 올라온 글 중에 이러한 상황을 잘 표현한 개발자의 한계에 대한 글을 인용해 본다. 

1. 프로그램 하는 일이 즐거워서 개발자가 됩니다.
2. 처음에는 평생 개발자가 되고자 합니다.
3. 선배가 개발자 정년 35살 이라고 합니다.
4. 무슨 소리냐고 경력이 쌓일수록 좋은(?) 개발자가 될 수 있다고 빡빡 우깁니다.
5. 2-3년 개발자가 무엇인지를 이해하기 시작합니다.
6. 4-5년 되면 개발자의 한계(수명?)을 인식하게 되며, 주변의 비슷한 나이의 기획자 등의 동료와 사회에서의 위치(?)를 비교합니다.
7. 정년을 조금 더 연장하려고 기술 개발에 치중합니다.
8. 7-8년 되면 회사에서 기획이나 영업 마인드를 가지기를 원합니다.
9. 위 과정을 거치다가 개발을 계속할지 관리자가 될지를 고민하고, 대부분은 관리자의 길을 선택합니다. (개발자의 미래가 불확실하니까)


현재 많은 기업들이 7년 이상 되는 중급 개발자를 찾지 못하는 이유가 여기에 있다. 중급 개발자를 구할 수만 있다면 동종 업계 최고 대우를 해주겠다고 못을 박기도 한다. 하지만 이미 많은 중급 개발자는 중소기업 전산실 관리직으로 자리를 옮겼거나 업종을 바꿔서 IT 업계를 떠난 지 오래다. 최근에는 업종을 떠나는 시점이 더 당겨지고 있다. 정부에서는 IT386 정책이니 하면서 IT 강국을 만들겠다고 큰소리 치지만 정작 핵심 인력이라고 할 수 있는 SW 개발자는 점점 줄어들고 있는 것이 현실이다. 

개발자에게 비전을
저임금, 열악한 환경, 불확실한 비전 등이 가장 큰 문제인데 그 중에서도 가장 먼저 현실화 되어야 할 부분이 임금 부분이다. 한-미-일 3국의 중급 SW 개발자 임금을 비교하면 한국은 203만원, 미국은 653만원, 일본은 599만원으로 나타났다. 각국의 물가 수준이나 환율을 감안하더라도 한국에서 소프트웨어 개발자가 받고 있는 처우는 열악하기만 수준이다.

이러한 문제를 해결하려면 정부와 대기업들의 그 동안 인건비 산정에 대한 관행을 없애는 것이 가장 중요하다고 생각한다. 최소한 과기처 단가만이라도 지켜진다면 해당 프로젝트를 수행하는 중소 개발 업체들이 저임금과 열악한 환경 등은 개선될 수 있을 것이다. IT에 많은 예산이 배정되어 있지 않고 투자할 여력도 없다고 주장할 것이다. 하지만 지금 비용을 절약하고 있다고 믿고 있겠지만 결국 개발자 부족으로 인하여 향후 1~2년 뒤에는 지금 비용의 2배를 지불하고도 제대로 프로젝트를 진행하지 못할 날이 올 수도 있다. 

개발자들이 제대로 된 처우를 받게 된다면 열악한 환경은 자기 개발이나 투자라고 믿고 참을 수 있을 것이다. 충분한 대우를 받고 있는 직종이라고 판단이 되면 많은 사람들이 개발자가 되기 위해서 업종을 선택하고 투자를 할 것이다. 결국 사회에서 IT 개발자라는 업종에 대한 인식이 높아지고 환경이 개선되어야만 앞으로라도 개발자를 양성할 수 있을 것이다. 우리나라가 자랑하는 IT 강국이 되기 위해서 많은 중고등 학생들이 개발자의 꿈을 가질 수 있도록 노력해야 할 것이다. 

 


Ajax가 신기하다는 것을 뒤늦게 깨닿고 공부중입니다.

그런데 웹사이트를 Refresh하지 않고 데이터를 가져오는게 장점인데. 과연 어떻게 하는 것일까? XML 통신인것 같긴 한데 한번 분석해보자.

우선 패킷 캡쳐를 하기 위해서 와이어샤크 (이전에 이더리얼) 을 사용해서 캡쳐시작.

그리고 예제로 만든 웹주소 실행

http://easystudy.cafe24.com/hp41/test_ajax/ajax_basic1.htm

 

function getServerTime() {
    var myurl = 'ajax_basic1_telltimeXML.php';
    myRand = parseInt(Math.random() * 999999999999999);
    var modurl = myurl + "?rand=" + myRand;
    http.open("GET", modurl, true);
    http.onreadystatechange = useHttpResponse;
    http.send(null);
}

function useHttpResponse() {
    if (http.readyState == 4) {
        if(http.status == 200) {
            var timeValue = http.responseXML.getElementsByTagName("timenow")[0];
            document.getElementById('showtime').innerHTML = timeValue.childNodes[0].nodeValue;
        }
    } else {
        document.getElementById('showtime').innerHTML = '<img src="ajax_basic1_loader.gif">';
    }
}
 
ajax_basic1_telltimeXML.php

<?PHP
header('Content-Type: text/xml');
sleep(1); //화면에 바로 보이기 때문에 약간 딜레이 시킴.
echo "<?xml version=\"1.0\"?><clock1><timenow>".date('H:i:s')."</timenow></clock1>";
?>

분석해보니 추가적으로 데이터를 가져오는 부분도 다른 프로토콜이 아닌 
그냥 HTTP 프로토콜로 해당 페이지를 가져옴 (ajax_basic1_telltimeXML.php) 
하지만 웹브라우저는 그 부분만 알아서 읽고 화면전체를 refresh하지는 않는다. 
image
 

image

 

 

GET /hp41/test_ajax/ajax_basic1_telltimeXML.php?rand=692866095308821 HTTP/1.1

Accept: */*

Accept-Language: ko

Referer: http://easystudy.cafe24.com/hp41/test_ajax/ajax_basic1.htm

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; IPMS/C8280A0A-14F34993EAE-000000464331; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; Tablet PC 2.0)

Host: easystudy.cafe24.com

Connection: Keep-Alive

Cookie: PHPSESSID=f42f176f81df41ca367267e856b133e6; __utmc=210374218; ADMINHOSTINGID=b0dVLzPlD9aOiju6Xg%3D%3D; __utma=210374218.1550145776.1328834340.1328834340.1328847559.2; __utmz=210374218.1328834340.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); cafe24SaveId_chkBox=Y; cafe24SaveId=easystudy

 

HTTP/1.1 200 OK

Server: apache

Date: Fri, 10 Feb 2012 05:33:52 GMT

Content-Type: text/xml

Transfer-Encoding: chunked

Connection: keep-alive

P3P: CP='NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE'

X-Powered-By: PHP/5.2.9p2

 

41

<?xml version="1.0"?><clock1><timenow>14:33:52</timenow></clock1>

0

 

GET /hp41/test_ajax/ajax_basic1_loader.gif HTTP/1.1

Accept: */*

Referer: http://easystudy.cafe24.com/hp41/test_ajax/ajax_basic1.htm

Accept-Language: ko-KR

User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; IPMS/C8280A0A-14F34993EAE-000000464331; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; Tablet PC 2.0)

Accept-Encoding: gzip, deflate

If-Modified-Since: Fri, 10 Feb 2012 05:17:55 GMT

If-None-Match: "26449b-c88-4f34a883"

Host: easystudy.cafe24.com

Connection: Keep-Alive

Cookie: PHPSESSID=f42f176f81df41ca367267e856b133e6; __utmc=210374218; ADMINHOSTINGID=b0dVLzPlD9aOiju6Xg%3D%3D; __utma=210374218.1550145776.1328834340.1328834340.1328847559.2; __utmz=210374218.1328834340.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); cafe24SaveId_chkBox=Y; cafe24SaveId=easystudy

 

var timeValue = http.responseXML.getElementsByTagName("timenow")[0];

여기가 실행되면서

<?xml version="1.0"?><clock1><timenow>14:33:52</timenow></clock1>

여기의 <timenow> 태그 안의 값을 읽어와서 timeValue 변수에 입력

 

여기서 다른 참고글을 읽으면 이해가 간다

http://cafe.naver.com/neloi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=172&

즉 데이터를 요청하는건 똑같이 HTTP 방식이 맞는데 클라이언트인 웹브라우저에서 자바스크립트의 getXMLHTTPRequest 를 이용하면 웹사이트 전체를 refresh하지 않고 내부적으로 데이터를 가져올 수 있고 그 가져온 데이터를 div 태그와 innerHTML 를 이용해서 받은 값을 화면에 표시를 해준다.



출처 : 전자신문

http://www.ciobiz.co.kr/news/articleView.html?idxno=7736

전자신문 CIO BIZ+가 연초 기업 및 기관 최고정보책임자(CIO) 105명을 대상으로 실시한 설문조사에 따르면 전체 응답자 80% 이상이 데스크톱 가상화(VDI) 또는 모바일 오피스 등 일명 ‘스마트워크’ IT 전략을 추진하겠다고 밝혔다. 설문에 응답한 50% 이상 CIO는 모바일 업무 도입 의사를 나타냈다.

B2C 시장 스마트폰 붐이 B2B 시장 스마트워크 붐으로 확산되는 모양새다. 공공·금융·제조·서비스 등 업종 불문 기업이 ‘스마트’와 전쟁을 치르고 있다. 수억원을 투자해 단순 정보 확인만 가능하게 한 모바일 오피스도 ‘스마트’란 이름 하나로 명분을 얻는 시대다.

목적 없는 스마트워크에 회의론이 고개를 들고 있는 배경이다.

◇무엇을 똑똑하게…‘스마트’ 정의부터 다시=“스마트워크를 하고 난 후 화장실에서 스마트폰 카메라로 회의에 참여한 적도 있어요.”

스트레스가 만만치 않다는 국내 대기업 K 부장에게 스마트폰은 족쇄와 같다. 이렇듯 시·공간을 초월해 일할 수 있는 최신 업무 환경을 상징하는 데 그치는 것이 스마트워크의 현주소다.

스마트워크=IT 구축’이란 사고 때문이다. 국내 대표 스마트워크 추진 기업들은 주로 △스마트폰 기반 모바일 오피스 △공간 효율을 위한 변동 좌석제 △자료 공유를 위한 데스크톱 가상화 & 문서 중앙관리 △스마트워크 센터 기반 자율 출퇴근제 등을 도입한다. 지난해 세 가지 이상 모델을 모두 도입한 KT와 포스코 등이 대표적이다. 모바일 오피스를 포함, 네 가지 중 한두 모델만 도입한 기업이 대부분이다.

모바일 플랫폼과 클라우드를 비롯해 다양한 방법론이 결합된 새로운 IT 도입으로 결국 24시간 365일 일할 수 있는 것이 스마트워크인 셈이다. 일하는 시간을 늘리면 생산성도 높아질까. 스마트워크에 문제를 제기하고 무분별한 스마트워크 도입에 메스를 대고자 하는 시도가 일부 기업과 컨설팅가에서 나타나고 있다.

액센츄어 해외지사에서 외국계 기업 컨설팅을 담당했던 김상익 전무는 “지난 2년간 한국 기업이 도입한 스마트워크는 ‘하드웨어’에 집중해 사무실 공간 배치와 모바일 장비, 데스크톱PC 등 외양만 바꾼 것에 불과하다”고 지적했다. 기업마다 ‘스마트’ 정의도 다른데다 기업 내 담당자끼리도 다른 의미를 내세우는 경우가 많다는 것이다.

변동좌석제 도입 이후 여전히 같은 자리에 앉아서 일을 한다는 한 대기업 관계자는 “어차피 팀원들끼리 모여 앉아야 하다 보니 결국 ‘비공식’ 지정석이 생겼다”면서 “부장급 등은 창가 쪽에 위치한 자기 자리에 앉으면 은근히 눈치를 준다”고 말했다.

자리를 지정하는 시스템조차 무용지물이 돼 스마트워크 IT 투자 효과가 마이너스로 돌아선 셈이다. 사장과도 자유로운 토론이 가능할 만큼 문화 조성이 뒷받침되지 않으면 변동좌석제에 다른 자유로운 자리 배치가 무의미해진다.

◇유한킴벌리·KT 등 ‘성과 중심’으로 평가 바꿔=기술 중심 스마트워크 폐해를 줄이려면 일하는 시간보다 ‘성과’를 먼저 보는 정책·문화적 뒷받침이 필요하다.

올해부터 재택근무를 실시하는 유한킴벌리는 지난해 말 전사적으로 변동좌석제 기반 스마트워크를 도입하면서 인사 평가 기준 자체를 바꿨다.

유한킴벌리 관계자는 “모든 업무를 근무시간 체크 개념에서 ‘자율관리’ 체계로 바꿨다”며 “개인이 목표 달성 여부와 성과 측정을 중심으로 제도가 변경됐다”고 말했다. 인사 체계를 바꾸기 위해 스마트워크 설계 단계에서부터 인사팀이 가담했다.

개인이 명확한 목표를 수립하는 단계부터 객관화된 목표를 달성하는 과정, 이에 따른 결과물 도출이 가시화되도록 했다. 이 관계자는 “비록 일하는 시간이 줄더라도 목표를 달성하고 좋은 성과를 냈다면 좋은 평가를 받을 수 있다”고 강조했다. ‘일과 삶의 균형을 통한 가족친화’를 목표로 하고 있는 유한킴벌리 스마트워크는 개인의 업무 시간을 줄이면서도 성과 중심적으로 일할 수 있도록 유도하고 있는 것이다.

KT는 지난해 변동좌석제와 모바일 오피스 등 스마트워크를 확산하면서 업무 자체를 과제화한 후 개인별 해당 과제를 관리하고 평가하도록 전 임직원 평가 체계를 변경했다.

KT 관계자는 “개인이 추진해야 할 과제를 시스템에 등록하고 기한을 정한 후 과제가 끝나 시스템에 올리면 관리자가 이를 평가할 수 있도록 했다”고 설명했다. 실제로 이 부서 업무 70% 이상이 이미 과제를 등록하는 시스템으로 이뤄진다. 이 관계자는 “직원이 놀든 일하든 관계없이 부여된 과제를 평가받고 책임지는 문화로 바뀌었다”고 말했다.

◇‘눈도장’ 공공기관이 가장 문제=공공기관은 민간기업 대비 스마트워크 활성화가 더욱 느리다. ‘얼굴도장’에 의존하는 상사 문화 등이 팽배해 있어서다. 스마트워크 센터 사용이 활발하지 않아 순번제로 돌리는 경우도 나타난다. 올해 행안부 스마트워크센터 설립 규모가 지난해 계획보다 축소된 것도 이와 무관하지 않다.

한 공공기관 CIO는 “공공기관은 스마트워크가 ‘생산성’을 위한 것인지 ‘복지’를 위한 것인지를 판단해야 할 것”이라며 “생산성을 위해선 오히려 20~30분 더 걸려도 업무지로 출근하는 것이 더 나을 수 있으나 복지가 필요한 여직원들이나 건강상 필요한 직원들은 주변 스마트워크 센터로 출근할 수 있도록 해야 한다”고 말했다.

센터 설립 자체보다 활용 문화 개선이 시급하다는 평가가 나오는 이유다.

공공기관 모바일 오피스 공급업체 관계자는 “스마트워크에서 가장 중요한 것이 인사제도”라며 “비인간적인 면이 있더라도 철저히 성과로 평가하는 제도와 마인드가 갖춰져야 한다”고 조언했다.

유효정기자 hjyou@etnews.com

[표]스마트워크 도입 시 주요 도입 기술과 정책·문화적 보완 사항

기술적 측면
주요 정책·문화적 보완 사항

스마트폰 기반 모바일 오피스
- 기업별 스마트 워크 목표에 부합하는 스마트폰 업무 범위 선정
“일하는 시간과 절대량 대신 ‘성과’ 중심 업무 및 인사 평가체계 필요”

데스크톱 가상화 or 서버기반 컴퓨팅
- 정보의 분류와 공유, 활용을 위한 정책적 체계 선 마련

변동 좌석제
- 직급에 따른 상하 관계 대신 수평적 소통 문화 확산