운영체제(operationg systems)를 학습한 사람이라면 멀티 쓰레딩과 관련된 내용을 깊숙히 알고 있겠지만 그렇다고 해도 실전에서 흔히 실수를 범하는 영역은 바로 멀티 쓰레딩과 관련된 부분이다.

굵직한 버그는 항상 멀티 쓰레딩 문제와 관련이 되어 있었다.

모니터를 설명하시오.
대뜸 synchronized라는 키워드를 대답으로 내놓는 사람이 있다.
이런사람은 '하드코어 프로그래머'와 거리가 멀다. 키워드만 알고 원리를 모르는 사람이라고 볼 수 있는 것이다. 이런 사람이 작성하는 코드는 버그를 안고 있다고 보면 거의 틀리지 않는다. 당장은 눈에 뜨이지 않을지 몰라도 사용자의 수가 늘어나면서 시스템의 엔트로피가 상스하면 버그는 어떤식으로든 모습을 드러낸다.

INSIDE THE JAVA VIRTUAL MACHINE
Inside of Java Virtual Machine(McGraw-Hill, 2000) 빌 베너스는 모니터를 세 개의 방으로 이루어진 건물로 묘사했다.
세개의 방이란? 
1. 처음의 들어온 사람이 머무르는 대기실
2. 작업을 수행하는 사람이 있는 작업실
3. 작업을 하는 도중에 잠깐 쉬어야 할 일이 생긴 사람이 들어가서 쉬는 휴게실이다.

이책을 보기 위해 인터넷을 뒤져 보았지만 제목이 조금 틀린것 같아 찾아보니 위에서 진하게 칠한것과 같이 제목이 틀렸다. 꼭 사서 보고 싶지만 원서라서 번역서가 나오기만을 기다려야 한다. 번역된 좋은 책들도 아직도 안본게 수두룩 하니 다음 기회로 미루어 본다.

- 참고문헌 : 프로그래밍은 상상이다.

'기타' 카테고리의 다른 글

Open API 관련 정보  (0) 2011.05.13
애드젯(adget)으로 광고수익을 얻어보자.  (0) 2011.03.30
프로그래밍은 상상이다  (0) 2010.06.13
ASP.NET 책을 보면서  (0) 2010.04.21

책 읽는것을 세상에서 가장 싫어하는 나지만 소프트웨어 개발이나 전공서적과 관련된 책은 꼬박꼬박 읽는다.
"프로그래밍은 상상이다."라는 책도 마찬가지로 소프트웨어 개발과 관련된 서적이다.
그중 재밌는 제목들이 눈에 들어와서 정리해 보려고 한다.
첫번째로
'인기 프로그래밍 언어 50'
10년전인가 대학을 막 입학했을 당시 어떤 프로그래밍 언어를 공부하면 살아남을 수 있을까 하면서 고민했던 시절이 문뜩 떠오른다. 만약 이책을 그때당시에 읽었더라면 난 지금보다 더 뛰어난 프로그래밍 예술가가 되었을텐데 말이다. 이책에 장점은 이런 프로그래머들에게 심정을 허심탄하게 말해주는것 같아서 더 쭉쭉 읽어 나갈수 있었던거 같다. 다음의 글귀를 보자

 "생존의 절박함이 등을 떠밀지 않는 한 프로그래머는 언어를 바꾸지 않는 것이다. 그렇기 때문인지 그들은 결코 자기가 선택한 언러를 단순히 여러 개의 언어 중 하나에 불과하다고 생각하지 않는다. 자신이 선택한 언어는 항상 최선의 언어이다. '우연'이 아니라 '필연'의 결과인 것이다. 많은 프로그래머에게 언어가 단순히 기술적인 의미에 머무르지 않고, 정치적, 도덕적, 심지어 종교적 차원의 의미를 갖는 것은 이러한 까닥에 연유한다."

꽤 글귀가 글다. 적다 보니... 읽을때는 별로 안길었는데 말이다. 그렇다. 우리는 자신의 선택한 언어가 운명적이라고 생각하지 않고 그 당시에 가장 유망있고, 이것만 하면 먹고살 수 있을꺼야 라는 생각으로 배워서 그 언어에 대해서 합리화 시키는 경우가 허다했을 것이다. 나또한 그랬으니 말이다. 본인도 대학시절 C언어보다 VB를 더욱 선호했다. VB는 쉽고 생산성이 좋아서 배우기 쉬웠을뿐만 아니라 내가 일하려는 회사에서도 중점적으로 다루었던 언어였기에 난 필연적으로 배우고 익혔던거 같다. 그때당시만 해도 왜 타언어를 배워야 하는지 이유를 알 수 없었다. 하지만 점점 세월이 지나고 내공이 쌓여 갈수록 프로그래밍 언어는 필요에 따라서 그때그때 변경되는것을 알 수 있었다. 대학시절 각종 언어를 이것저것 배운다. C, C++, 자바 등등... 그때는 왜 이렇게 이것저것 배울까 라는 생각이 들었지만, 그때당시에 조금이나마 배워났던 지식들을 다시 꺼내 쓰는 경우도 많았던것 같다. 말이 너무 샌거 같다. 이책에서 재밌는 사이트를 갈켜주었는데 여러분도 가서 확인해 보기 바란다.

http://www.tiobe.com/tpci.htm

아는 분도 있겠지만 이 재밌는 사이트는 세계에서 인기있는 언어들을 순위를 매겨 보여준다. 내가 사용하는 언어는 몇위인지 알고, 점유율은 어떻게 되는지 대해서 보고 싶은 분들은 한번가서 확인해 보는것도 재밌을 것 같다.

본내용은 "프로그래밍 상상이다."에 저작권이 있습을 알림니다.

'기타' 카테고리의 다른 글

Open API 관련 정보  (0) 2011.05.13
애드젯(adget)으로 광고수익을 얻어보자.  (0) 2011.03.30
실전 현장에서...  (0) 2010.06.13
ASP.NET 책을 보면서  (0) 2010.04.21
Dim RS As Recordset

strQUERY = "  SELECT * FROM TEST"

RS = TBOpen(strQUERY, False)

.RowCount = RS.RecordCount '전체레코드를 구하는 방법

처음에 이것도 잘 못찾아서 해맸다. 사경을...

레퍼런스만 뒤지다뒤지다 안돼서 스프레드 속성값을 찾아보니 protect 라는 속성이 보여서 false로 변경하니 바로 풀린다. 역시 사람은 경험을 해야 하는구나 하는 생각이 든다.


// struct sample
// struct7.c
// 구조체를 사용하여 링크드 리스트 만들기

#include <stdio.h>

// 1) 구조체 정의 (typedef)
typedef struct score
{
    char name[20];
    int  kor;
    struct score *next;
} SS;

int main(int argc, char *argv[])
{
    // 2) 구조체 선언
    SS s1={"park",100};
    SS s2={"kim",90};
    SS s3={"lee",80};

    SS *p;

    s1.next = &s2;
    s2.next = &s3;
    s3.next = '\0';


    for(p=&s1 ; p ; p = p->next)
    {
        printf("%s --- %d\n",p->name, p->kor);
    }

    return 0;
}

펌 : http://cafe.naver.com/itdocument.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=382

전문대 시절 링크드리스크가 이해가 되질 않아서 얼마나 골머리를 굴렸는지... 떱

#include <stdio.h>

void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}

void main(int argc, char *argv[])
{
int *a, *b;

a = 30;
b = 20;

swap(&a, &b);

printf("%d, %d \n", a, b);
}

정말 간단하지않은가? 만약 포인터로 참조를 하지 않으면 전역 변수를 선언해서 전역변수에 값에 스왑된 값을 처리하여 출력해야 하지만... 포인터를 사용하면 이리 간단하다. 포인터를 공부해 두면 그리 나쁘지는 않을 것이다. 

'구조적언어 > C' 카테고리의 다른 글

링크드 리스크 만들기  (0) 2010.06.07
#3. 공유메모리 사용설명서  (0) 2009.12.17
#2. 공유메모리 클라이언트 소스  (0) 2009.12.17
#1. 공유메모리 서버 소스  (0) 2009.12.17
hello World를 찍어보자.  (0) 2009.12.17

아침부터 일어나 문뜩 커스텀태그를 꼭 올려야 겠다는 사명감이 불타 이렇게 올리게 된다.

1. 커스텀 태그는 태그를 자신이 직접 정의할 수 있으며, 반복적으로 사용되는 기능을 만들어두면 그대로 가져다 쓸 수 있으므로 매우 편리하다. 커스텀 태그는 다음과 같은 흐름을 가지고 있다.

2. JSTL은 자주 사용되는 커스텀 태그를 모아놓은 것들이며, 기본적인 기능들은 우리가 힘들게 커스텀태그로 만들지 않더라도 JSTL에서 제공해준다.
JSTL 다운로드 사이트 주소 : http://jakarta.apache.org/

3. EL은 Expression Language로 표현 언어를 의미하며 복잡한 자바 코드로 표현하는 대신 다른 표현 기호를 사용한다. 그 외 다양한 연산자와 많은 내장 객체를 지원하므로, EL을 사용하면 코드의 가독성을 높일 수 있다.
EL 사용 예 : <%=hello%>의 코드를 ${hello}로 표현할 수 있다.

처음에 웹프로그래밍을 공부하기전에는 태그라는 말에 문뜩 아 html태그같은거구나 했지만 막상 공부하고 나니전혀 딴판이였다. 일종에 셀프로그래밍 정도??? 암튼 공부를 하면할수록 신기하고 재밌다.

[참고도서] jsp 2.1 혜지원

'웹 프로그래밍 > JSP' 카테고리의 다른 글

커넥션 풀을 이용한 DB연결 방법  (0) 2010.06.04
커스텀 태그  (0) 2010.06.04
jsp + 서블릿을 이용한 DB설정 방법.  (0) 2010.06.04
jsp 환경설정~^^  (0) 2010.05.30

커넥션풀은 데이터베이스와 연결된 connection 객체를 미리 생성하여 풀(Pool)속에 저장 해두고 필요할 때마다 이 풀에 접근하여 connection 객체를 사용하고, 모두 사용하였다면 다시 반환하는 것을 말한다.

커넥션풀의 장점
커넥션풀을 사용하면 풀속에 미리 커넥션이 생성되어 있기 때문에 커넥션을 생성하는데 드는 연결 시간이 소비되지 않는다. 또 커넥션 재사용이 가능하기 때문에 사용자가 접속할 때마다 계속해서 커넥션을 생성할 필요가 없다. 즉, 커넥션 풀을 사용한다면 프로그램 효율과 성능이 전체적으로 증가하게 된다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>

<%
 Connection con = null;
 PreparedStatement pstmt = null;
 ResultSet rs = null;
 
 try
 {
  Context initCtx = new InitialContext();
  Context envCtx = (Context) initCtx.lookup("java:comp/env");
  DataSource ds = (DataSource)envCtx.lookup("jdbc/test");
  con = ds.getConnection();
  
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
 finally
 {
  if(rs != null)try{rs.close();}catch(SQLException sqle){}
  if(pstmt != null)try{pstmt.close();}catch(SQLException sqle){}
  if(con != null)try{con.close();}catch(SQLException sqle){}  
 }
 %>





이것은 커넥션 풀이 사용되는 구조이다. 사용자가 웹 사이트에 접속하면 서버는 커넥션 풀에서 커넥션 객체를 얻어와서 데이터베이스에 접속하여 데이터베이스 작업을 수행한다. 수행을 완료하였다면 커넥션 객체를 다시 커넥션 풀로 반환하는 작업을 한다. 커넥션 풀은 이 같은 구조로 이루어져있기 때문에, 웹 사이트 접속시 매번 커넥션 객체를 만들어 사용하는 것보다 효율적이다.

참고서적 : 기초에서 활용까지 JSP 2.1 [혜지원]

'웹 프로그래밍 > JSP' 카테고리의 다른 글

커스텀태그 Key-Point  (0) 2010.06.04
커스텀 태그  (0) 2010.06.04
jsp + 서블릿을 이용한 DB설정 방법.  (0) 2010.06.04
jsp 환경설정~^^  (0) 2010.05.30

+ Recent posts