yunsh206

회원가입로그인

컴퓨터 Photo Gallery Bug에 대한 고찰.

2003.11.26 02:37

RanomA 조회 수:1281

찌룽이네, 꽃지야, 류리 홈피에서 쓰이고 있는 Photo Gallery (이름은 모린다)

FTP에 사진 파일 디렉토리를 올린 후에 해당 디렉토리를 자동으로 읽어서

DB에 자동으로 저장해주는 기능과, 저장된 사진 파일을 볼 때에 JavaScript를

이용해 Fade In, Fade Out 기능을 구현해주는 꽤나 괜찮은 프로그램이다.

그러나 최근에 몇몇 사이트에서 사진의 순서가 제대로 안올라간다는 이상한 버그가

있다는 제보가 있었으나, 개발자는 자기도 모르겠다면서 나중에 고치겠다고 했다.

그리하야 깅수가 한 번 그 프로그램을 디비봤는데.

일단 찌룽이네에 계신 Blue Blood님의 버그 리포트가 도움이 크게 됐다. 버그가 어떠,

어떠한 경우에 생긴다라는 것을 정확히 적시해주면 내가 그대로 따라 해보면서, 버그의

실체를 확인할 수 있고 그에 대한 원인과 해답을 찾기가 한결 수월하기때문이다.

만약 Blue Blood님의 버그 리포트가 아니었다면, '쓰벌, 버그가 있기는 있다는데 어떻게

하면 생기는 거야. 나는 잘만 되는구만.' 하기 십상.

버그리포트에 의하면, 새로운 앨범을 하나 추가한 후에 글이 잘못쓰여졌거나 순서가

맘에 들지 않아 앨범을 지운 후에 다시 그 디렉토리 그대로 추가를 할 때에 엉망이

된다고 한다.

직접 확인해보니 마찬가지였다. 그래서 DB를 뒤져봤더니...

이 Gallery 프로그램은 총 3개의 테이블을 가진다.

1:    이름_gallery

메인 테이블로서 앨범의 ID와 디렉토리 위치, 제목, 사진 개수, 날짜 등의 기본정보를

가지고 있다.

2:   이름_gallery_data

실제 사진들의 정보를 담고 있는 테이블로 고유 ID와 어느 앨범의 사진인지 알려주는

앨범 ID와 사진 설명에 관한 정보를 담고 있다.

3:   이름_gallery_memo

앨범에 대한 사람들의 코멘트를 담고 있는 것.


이중 이름_gallery_data를 뒤져보니 다음과 같은 문제가 있었다.

각 사진 하나하나의 고유한 ID는 파일명의 순서와 동일하게 되어 있었다. 예를 들어

경복궁 사진이라고 친다면...

1: 근정전 사진

2: 경회루 사진

3: 향원정 사진

4: 광화문 사진

이렇게 1, 2, 3, 4의 고유한 ID는 제대로 매겨져 있는 것은 확인되었는데, DB에 기록되기는

순서가 저 ID 순서대로가 아니었던 것이다.

4: 광화문 사진, 2: 경회루 사진, 3: 향원정 사진, 1: 근정전 사진.

저렇게 기록되어 있을 때 그냥 DB에서 Select 하면 4, 2, 3, 1 순서대로 출력이 되어

버리는 것이었다.

일단 왜 저렇게 올라가는지에 대해서는 시간상 의문을 잠시 접고, 번호는 제대로 매겨져

있으니 번호순서대로만 출력되게만 하면 되겠다는 생각이 들었다.

그래서 admin.php (앨범을 올리는 관리자가 쓰는 등록/수정/삭제하는 프로그램)와

index.php (일반 유저들이 보는 프로그램)에서 select에 ORDER BY 라는 옵션을

붙이기로 했다.

SELECT * FROM {$_PHOTO['table_data']} WHERE id='$id' ORDER BY uid

uid 라는 것이 바로 저 번호를 뜻하는 컬럼명으로, ORDER BY uid 라고 하면 uid 의

오름차순으로 사진을 꺼내와라라는 뜻이 되겠다. 만약 큰 순서대로 (내림차순이라고 하던가?)

꺼내오라고 한다면 ORDER BY uid DESC 라고 하면 된다. ORDER BY uid ASC 는

오름차순인데 보통 ASC는 생략하면 디폴트로 지정되는 것이다. (ASC, DESC가

어디서 나온 단어인지는 뻔하다.)

이렇게 해서 {$_PHOTO['table_data']} 가 들어있는 모든 문구에 ORDER BY를

붙여줬더니 다시 제대로 출력되기 시작했다.

이 버그를 개발자가 왜 모르겠다고 했는지 알 수가 없을 정도로 너무나 간단한 버그

였다.

그리고 이 프로그램은 파일의 이름 순서대로 저장하는 방식인데, 순서를 입력하는 폼만

만들어준다면, 굳이 파일 이름을 바꾸지 않더라도 순서를 지정할 수도 있겠다라는 생각이

들었다.

그리하여, 추가해봤다.  이름_gallery_data 테이블에 photo_order라는 정보 컬럼을

추가해놓고는 ORDER BY photo_order, uid로 해놓아서

먼저 photo_order의 값 순서대로, 그 다음으로는 uid 순서대로 정렬해서 가져오라고

한 것이다. 앞으로 Photo Gallery에 올린다고 굳이 파일 이름을 바꿀 필요없이 Add

모드에서 순서를 지정하면 된다. 아니면 올린 후에 수정해도 되고.

하지만 새로운 기능의 구현은 언제나 버그를 동반하는 법. 버그리포트가 올라오길

기다려보자.

수정 파일 목록

index.php: 사진을 불러오는 순서 변경

admin.php: Form에 순서 지정하는 콤보박스 추가

do_submit.php: photo_order 컬럼에 순서 콤보박스 값을 넣도록 변경

do_update.php: 수정시 photo_order 컬럼값 변경
번호 제목 글쓴이 날짜 조회 수 추천 수
183 리눅스 SSH Network error: Software caused connection abort RanomA 2021.05.29 2017 0
182 인터넷 기본 설정 복원 창 띄우는 방법들 file RanomA 2021.05.01 1022 0
181 리눅스 디렉토리별 압축 파일 생성 쉘 스크립트 RanomA 2021.04.04 830 0
180 Javascript 숫자에 끊어 읽기 컴마(,) 추가 RanomA 2020.11.27 751 0
179 Javascript 문자열을 포맷 맞춰 날짜로, 날짜를 포맷 맞춘 문자열로 변환 RanomA 2020.11.26 718 0
178 Javascript 날짜 더하기 RanomA 2020.11.26 450 0
177 Javascript 해당 연월의 마지막 날짜 가져오기 RanomA 2020.11.25 364 0
176 Javascript isNullOrEmpty RanomA 2020.11.25 685 0
175 Javascript 전화번호 포매팅 RanomA 2020.11.25 2308 0
174 Javascript IN RanomA 2020.11.18 260 0
173 Javascript LPAD RanomA 2020.11.17 581 0
172 Adobe Creative Cloud 업데이트 실패 184(혹은 C184) 오류 file RanomA 2020.09.08 1070 0
171 오라클 테이블 레이아웃 조회 Query RanomA 2020.01.13 2063 0
170 SQL Developer의 폰트 설정에서 폰트 목록이 안나타날 때 [6] file RanomA 2019.12.30 4869 0
169 Underscore( _ 문자)를 카멜 케이스(Camel Case)로 변환하기 RanomA 2019.12.06 1814 0
168 라이트룸(Adobe Lightroom) 한자/일본어용 폰트 변경 file RanomA 2018.06.06 2142 0
167 입력기(IME)에 EN - 영어(미국) 키보드 US 가 표시될 때 [1] file RanomA 2016.05.03 1456 0
166 Thunderbolt 3와 USB-C RanomA 2016.04.28 682 0
165 ATOK 단축키 설정을 했는데도 입력 모드 변경이 잘 안될 때 file RanomA 2016.04.21 503 0
164 ATOK 단축키 설정 file RanomA 2016.04.18 563 0