Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

마방진 만들기

VS 2005에서 C#으로 만든 마방진....

마방진(Magic Square)이란 1에서 n2까지의 정수를 n행 n열의 정사각형 모양으로 나열하여 가로·세로·대각선의 합이 전부 같아지도록 한 것이다.

마방진은 쉽게 말하면 3이상의 수로 NxN의 진을 만든후에 각 칸에 숫자를 넣어서 가로, 세로, 대각선의 합을 모두 동일하게 만드는 것인데 이걸 프로그램으로 만든것이다.

차수에 따라 여러가지 마방진을 해결할 수 있는 해법이 존재하고 있는데 나는 신권영의 마방진 세상에 나와 있는 해법을 가지고 마방진을 만들었다.

기본적으로 홀수차 마방진을 만드는 방법이 가장 쉽고...

4N차수의 마방진을 만드는 것이 약간 어렵고 4N+2차수의 마방진을 만드는 것이 가장 어렵다.

AbsMabangzin.cs -> 마방진해법 클랠스들에서 공통적으로 사용하는 추상클래스
CheckMabangzin.cs -> 마방진을 만든 후에 마방진이 제대로 만들었는지 확인한다.
DecideMabangzin.cs -> 메인클래스에서 마방진을 만들려고 숫자를 받았을때 어느 마방진해법을 사용할것인지를 선택한다.
Even4NMabangzin.cs -> 4N차수 마방진에 대한 해법
Even6NMabangzin.cs -> 4N+2차수 마방진에 대한 해법
MabangzinMain.cs -> 메인, 숫자받아서 DecideMabangzin 호출
OddMabangzin.cs -> 홀수차 마방진에 대한 해법



2007/06/18 10:35 2007/06/18 10:35

JSP 프로젝트를 마치고서....

최근엔 이곳에 관심을 좀 가지고 있지만 시간의 압박과 정리의 압박으로 순서가 뒤죽박죽인데... 그냥 미루면 또 나중에는 안쓰게 될것 같아서....

지난주에 학원에서 JSP프로젝트를 마쳤다.....

우리는 약간의 회의를 통해 블로그를 만들기로 했고 그 2주정도 전에 옆반에서 발표한 JSP프로젝트를 보고 난 속으로 비웃었었다... 왜냐하면 그건 모양만 블로그였다. 미니홈피를 블로그를 안쳐주듯이 그냥 게시판 펼쳐서 보여주면 다 블로그인가.....

어쨌든 나름 많은 생각을 가지고 있었지만 어떻게 진행될지 모르는 가운데 내 생각만 밀어붙힐수도 없는 노릇이고 공부가 목적인 프로젝트에서 "블로그에는 RSS와 트랙백은 반드시 있어야해" 따위를 얘기해 봤자 의미도 없었다.

어쨌든 프로젝트가 돌입했고 그 결정전에 공부를 겸사해서 방명록을 만들고 있던 내가 방명록에서 약간 확장을 하면 되는(그렇게 생각했던) 게시판까지 맡게 되었다.

우리조는 6명인데(솔직히 프로젝트를 운영하기에는 좀 수가 많다. 딱히 PM도 없으면서....) 이게 3명은 그나마 약간의 프로그래밍은 하고 3명은 거의 못하는 상황이라 일을 나누기가 어려웠다..

어쨌든 문제는 그런것 따위가 아니라...

JSP는 머리털나고 처음 만져본거였다. php만 조금 만져보긴 했지만 그냥 만져만 본거였다. 어쨌든 우리의 의도는 책에서 본대로 JSP탬플릿을 이용해서 한명이 디자인을 하고 이걸 jsp로 바꾸어서 각 부분에 게시판, 로그인, 카테고리를 include하는 것이 주 설계의 핵심이었다.

MVC Model 2로 해보고 싶었지만 허접한 강사덕에 거기까진 배우지도 못했다. 어쨌든 MVC Model 2를 공부해서 하기엔 무리가 있다고 생각되어 그냥 include하는 것으로 선택했는데 이게 우리 설계의 아주 큰 문제점이었다.

내가 게시판을 다 만들고 오류처리까지 끝내고 다른애들이 작업을 마칠때까지 탬플릿에 붙혀보기로 했다.

사용자 삽입 이미지

이런 형태의 구조가 생각했던 구조이고 테이블을 하나 만들어서 내 게시판과 방명록을 붙혔다. 일단 붙히려고 하니까 첫 문제가 발생했다.

게시판만 생각했을때 write, write_ok, edit, edit_ok, delete, delete_ok등등 10여개의 파일들이 있었고 각 파일들은 동작에 따라 submit()을 통한 action이나 forward액션태그를 통해서 이동하고 있었다. 잘 작동했다.

근데 템플릿에 붙힐려고 하니까 다음파일로 넘어갈때 항상 templete.jsp를 불러와야하고 게시판부분에 include되는 파일을 해당파일로 바꾸어야 했다. 그런데 파일이 이동되는게 이걸 생각못한채 만들어서 어떤건 submit으로 넘어가고 어떤건 forward로 넘어갔다.

그래서 고민끝에 get방식으로 파라미터를 넘겨주어서 그 파라미터를 통해 게시판 include쪽에 불려질 파일을 정해주기로 했다.(결국 이 결정이 엄청난 혼란을 야기했지만...) 그래서 일일이 다 수정해서 결국 탬플릿에 내 게시판을 잘 붙혔다.



이건 시작에 불과했다. 이제 여기에 로그인을 붙히기로 했다. 로그인은 내가 만든게 아니었다. 게시판을 한번 붙혀봤으니 여기에 로그인을 또 붙히는 건 그렇게 어려울꺼라고 생각하지 않았다.(미친 생각이었다.. ㅡ..ㅡ)

너무 단순하게만 생각했다. 내가 게시판을 연결한것처럼 이것도 그렇게 하면 된다고 생각하고 막 붙히려고 하는 순간... 막상 붙히려고 하니까 한페이지에 include가 2개라서 항상 2개의 파일이 어떤 것인지를 알려주어야 했다.

초기에 내가 생각한대로 하려니가 로그인쪽에서 파일체인지를 하면서 파라미터를 넘겨주려고 하니까 게시판쪽 include에 대한 파라미터가 없어서 에러메시지가 떠버리는 것이었다. 한참동안 여기저기 찾아보고 고민했지만 해결방법은 내 지식수준에선 나오지 않았다.

그래서 형한테 SOS를 치고 얘기하는 도중에 설계에 문제가 있다는 것을 알게 되었다. 그리고 include가 되는 곳이 내가 생각한것 처럼 이렇게 바꾸기가 어렵다는 것이 아니고 정확히 어떤식의 구조가 되어야 하는지는 이해하지 못했지만 로그인이면 로그인쪽 파일들을 관리해주는 진입점이 될 파일이 필요하다는 얘기를 하면서 생각이 번뜩였다.

진입점... 진입점... 뭔가 실마리가 풀리는것 같았다. 일단 설계가 잘못된건 이미 알고 있었고 그렇다고 새로 짤수도 없고 여기서 어떻게 해결해야 됐다.(이부분이 강사한테 좀 짜증났던 부분... 물어보면 물어본거에나 대답을 해주지 계속 왜 이렇게 하냐고 이렇게는 보통 안한다구.... 누가 잘짰데? 지금의 문제를 질문하는데 계속 그소리만.. 아~ 짱나라... 그럼 MVC Model2나 그런 구조적인 방법론을 가르쳐 주던지....)

게시판은 일단 잘 붙어있고 로그인쪽에 진입점이 될 파일을 만들었다. 그리고 세션을 이용해서 현재의 상태를 지정해 줄수 있는 프로퍼티를 하나 만들었다. 이걸 통해서 파일이 바뀔때마다 이 프로퍼티를 바꿔주고 항상 진입점 파일이 이 프로퍼티를 보고 어느파일을 불러올지를 선택해서 불러오는 형태였다. 잘 작동했다....

그리고 게시판쪽 인클루드는 또 별도의 세션프로퍼티를 만들어서 항상 현재의 파일명을 저장했다가 파라미터를 안넘겨줄 경우에는 세션에 있는 걸 다시 불러오도록 했다... 일단 잘 돌아갔다. 큰 문제가 없었다.


설계상의 실수도 회원가입이나 카테고리는 붙힐 생각도 못했다. 로그인 하나 붙히는데도 죽는줄 알았고 프로젝트는 데드라인이 눈앞에 있었다.



그래서 로그인하고 게시판하고만 연동을 할라고 했는데 문제는 또 발생했다.. 아주 죽겄네.. 죽겄어....

사용자 삽입 이미지

다시 레이아웃을 보자 전체는 template.jsp로 되어 있고 로그인쪽에서 로그인을 include하고 게시판쪽에서 게시판파일을 include하는 구조다.

여기서 도저히 이해하지 못할 세션의 문제가 발생했다.

예를 들어 login_ok라는 세션프로퍼티가 로그인에 인클루드된 파일내에서는 "111"로 나오고 그 인클루드에서 빠져나온 template.jsp에서도 1로 나오는데 게시판에서 인클루드된 파일내에서는 "222"로 나오는 것이다.

template.jsp까지는 세션이 우리가 원한대로 잘 작동했지만 게시판쪽 인클루드파일쪽으로만 오면 문제가 생겼고 수많은 테스트결과 여기에서 나오는 세션은 로그인쪽에서 인클루드된 파일에서 찍혀지는 것이었다.

login에서 어떤 버튼을 눌렀을때 세션이 "222"로 설정되도록 스크립트로 묶어 놓았는데 template까지는 이상없이 작동하지만 이게 게시판 include에서는 버튼클릭에 상관없이 세션할당이 무조건 작동한다..

결국 이문제는 해결하지 못했다. 아직도 이해못할 오리무중의 문제이다...

좀더 공부를 하면 해결이 될런지...



어쨌든 고생은 좀 했지만 이것저것 배운건 많다. 설계가 얼마나 중요한지 알수 있었고 아직 추가공부를 통해서 구조에 대한 완전한 개념은 안잡혔지만 최소한 그때가서 왜 그렇게 해야하는지는 확실히 이해할 수 있을것 같다.

지난주엔 5일연속 하루 15시간씩 풀로 코딩하느라고 머리가 터지는줄 알았다... 게시판 하나 만드는데 이렇게 해매서 어쪄냐.. 회사가서는;; ㅡ..ㅡ

테터툴즈와 제로보드가 존경스러워지던 한주였다..
2007/06/08 11:32 2007/06/08 11:32