그누보드5 주니어 성능 최적화 기술면접

그누보드5 주니어 (1~3년) 성능 최적화 5문항 조회수 30 · 2026-08-23 (일) 12:11:00
1 데이터베이스 쿼리 최적화
Easy

Q. 그누보드5에서 게시판 목록 페이지가 느려지는 문제가 발생했습니다. 게시글이 10만 건 이상인 상황에서 목록 조회 속도를 개선하기 위해 가장 먼저 확인해야 할 데이터베이스 요소는 무엇인가요?

데이터베이스에서 검색 속도를 높이기 위해 테이블에 설정하는 것을 생각해보세요.

A. 모범답안

가장 먼저 확인해야 할 것은 인덱스(INDEX) 설정 여부입니다. 그누보드5의 게시판 테이블(g5_write_*)에서 정렬 기준이 되는 컬럼(wr_num, wr_reply 등)과 검색 조건으로 자주 사용되는 컬럼(wr_is_comment, ca_name 등)에 인덱스가 제대로 설정되어 있는지 확인해야 합니다. phpMyAdmin이나 MySQL 클라이언트에서 SHOW INDEX 명령으로 현재 인덱스 상태를 확인할 수 있습니다. 인덱스가 없다면 ALTER TABLE 명령으로 필요한 컬럼에 인덱스를 추가하여 조회 성능을 크게 향상시킬 수 있습니다.

핵심 포인트
  • • 인덱스(INDEX) 확인 및 설정
  • • 정렬 및 검색 조건 컬럼 파악
  • • SHOW INDEX 명령으로 현재 상태 확인
답변에 넣으면 좋은 키워드
인덱스 INDEX wr_num wr_reply ALTER TABLE SHOW INDEX
실무에서는

대용량 게시판 운영 시 목록 조회 성능 개선에 필수적으로 적용됩니다.

Follow-up 질문

인덱스를 너무 많이 설정하면 어떤 부작용이 발생할 수 있나요?

2 캐싱 전략
Medium

Q. 그누보드5 메인 페이지에서 최신글을 여러 게시판에서 가져와 표시하는데, 동시 접속자가 많아지면서 서버 부하가 증가하고 있습니다. 이를 해결하기 위해 적용할 수 있는 캐싱 방법과 그누보드5에서 제공하는 캐싱 기능을 설명해주세요.

그누보드5의 data 폴더와 latest 함수의 캐싱 옵션을 생각해보세요.

A. 모범답안

그누보드5는 latest 함수에서 캐싱 기능을 제공하며, 마지막 파라미터로 캐시 시간(초 단위)을 설정할 수 있습니다. 예를 들어 latest('notice', 'basic', 5, 30)처럼 설정하면 30초간 결과를 캐싱합니다. 캐시 파일은 data/cache/latest 디렉토리에 저장되며, 설정된 시간 동안은 데이터베이스 조회 없이 캐시 파일을 읽어 응답합니다. 추가로 PHP의 OPcache를 활성화하거나, 더 강력한 성능이 필요하다면 Redis나 Memcached 같은 메모리 기반 캐시 시스템을 도입할 수 있습니다. 캐시 시간은 콘텐츠 업데이트 빈도와 실시간성 요구사항을 고려하여 적절히 설정해야 합니다.

핵심 포인트
  • • latest 함수의 캐시 시간 파라미터 활용
  • • data/cache 디렉토리의 캐시 파일 관리
  • • Redis, Memcached 등 외부 캐시 시스템 도입 가능
답변에 넣으면 좋은 키워드
latest 캐싱 data/cache OPcache Redis Memcached
실무에서는

트래픽이 많은 커뮤니티 사이트에서 메인 페이지 로딩 속도 개선에 활용됩니다.

Follow-up 질문

캐시 시간을 너무 길게 설정하면 어떤 문제가 발생할 수 있나요?

3 이미지 최적화
Easy

Q. 게시판에 업로드된 고해상도 이미지들로 인해 페이지 로딩 속도가 느려지고 있습니다. 그누보드5에서 이미지 최적화를 위해 적용할 수 있는 방법들을 설명해주세요.

그누보드5의 썸네일 기능과 이미지 업로드 설정을 생각해보세요.

A. 모범답안

그누보드5는 기본적으로 썸네일 자동 생성 기능을 제공하며, 관리자 페이지의 게시판 설정에서 이미지 최대 폭을 제한할 수 있습니다. 업로드 시 원본 이미지를 자동으로 리사이징하도록 설정하여 불필요하게 큰 이미지가 업로드되는 것을 방지할 수 있습니다. thumbnail 함수를 활용하여 목록에서는 작은 썸네일을 보여주고, 상세보기에서만 원본 또는 중간 크기 이미지를 표시하는 방식으로 구현합니다. 추가로 WebP 포맷 변환이나 lazy loading(지연 로딩)을 적용하면 초기 페이지 로딩 속도를 더욱 개선할 수 있습니다.

핵심 포인트
  • • 게시판 설정에서 이미지 최대 폭 제한
  • • thumbnail 함수로 썸네일 생성 및 활용
  • • lazy loading과 WebP 포맷 적용
답변에 넣으면 좋은 키워드
썸네일 thumbnail 이미지 리사이징 lazy loading WebP 최대 폭
실무에서는

이미지 중심의 갤러리형 게시판 운영 시 필수적으로 적용되는 최적화 기법입니다.

Follow-up 질문

lazy loading을 구현할 때 주의해야 할 점은 무엇인가요?

4 쿼리 병목 진단
Medium

Q. 그누보드5 사이트에서 특정 시간대에 응답 속도가 급격히 느려지는 현상이 발생했습니다. 데이터베이스 쿼리가 원인일 것으로 추정될 때, 어떤 방법으로 문제가 되는 쿼리를 찾아낼 수 있나요?

MySQL의 슬로우 쿼리 로그와 EXPLAIN 명령을 활용할 수 있습니다.

A. 모범답안

먼저 MySQL의 Slow Query Log(슬로우 쿼리 로그)를 활성화하여 설정한 시간 이상 걸리는 쿼리들을 기록합니다. my.cnf 또는 my.ini 파일에서 slow_query_log=1과 long_query_time=2(2초 이상) 같은 설정을 추가합니다. 로그 파일을 분석하여 자주 발생하거나 실행 시간이 긴 쿼리를 파악합니다. 문제 쿼리를 찾았다면 EXPLAIN 명령을 사용하여 쿼리 실행 계획을 확인하고, 인덱스 사용 여부와 스캔되는 행 수를 체크합니다. 그누보드5 코드에서는 config.php에 G5_DEBUG를 활성화하면 실행되는 쿼리들을 화면에서 확인할 수 있어 개발 환경에서 디버깅에 유용합니다.

핵심 포인트
  • • Slow Query Log 활성화 및 분석
  • • EXPLAIN 명령으로 쿼리 실행 계획 확인
  • • G5_DEBUG 모드로 실행 쿼리 모니터링
답변에 넣으면 좋은 키워드
Slow Query Log EXPLAIN long_query_time G5_DEBUG 쿼리 실행 계획 인덱스
실무에서는

운영 중인 사이트에서 갑작스러운 성능 저하 원인을 찾을 때 가장 먼저 사용하는 진단 방법입니다.

Follow-up 질문

EXPLAIN 결과에서 type 컬럼이 ALL로 나온다면 어떤 의미이고 어떻게 개선해야 하나요?

5 부하 대응
Medium

Q. 그누보드5로 운영 중인 사이트에서 특정 이벤트로 인해 평소보다 10배 많은 트래픽이 예상됩니다. 서버 증설 없이 기존 환경에서 최대한 많은 동시 접속을 처리하기 위해 적용할 수 있는 최적화 방법들을 설명해주세요.

정적 파일 처리, 불필요한 기능 비활성화, 데이터베이스 연결 최적화를 고려해보세요.

A. 모범답안

먼저 CSS, JavaScript, 이미지 같은 정적 파일들을 CDN으로 분산하거나 브라우저 캐시를 최대한 활용하도록 설정합니다. 메인 페이지와 주요 페이지들을 HTML 정적 파일로 캐싱하여 PHP 실행 부하를 줄입니다. 접속자 통계, 최근 방문자 목록 같은 부가 기능들을 일시적으로 비활성화하여 불필요한 데이터베이스 쿼리를 줄입니다. 그누보드5의 config.php에서 데이터베이스 연결 방식을 mysqli persistent connection으로 설정하여 연결 오버헤드를 줄이고, PHP-FPM의 프로세스 수를 적절히 늘려 동시 요청 처리 능력을 향상시킵니다. 게시판 목록의 페이지당 글 수를 줄여 한 번에 처리하는 데이터량을 감소시키는 것도 효과적입니다.

핵심 포인트
  • • 정적 파일 CDN 분산 및 브라우저 캐시 활용
  • • 부가 기능 비활성화로 DB 쿼리 감소
  • • PHP-FPM 프로세스 수 조정 및 persistent connection 사용
답변에 넣으면 좋은 키워드
CDN 정적 캐싱 persistent connection PHP-FPM 브라우저 캐시 부가 기능 비활성화
실무에서는

이벤트나 프로모션으로 인한 일시적 트래픽 급증 상황에서 서비스 안정성을 유지하는 데 활용됩니다.

Follow-up 질문

CDN을 도입할 때 그누보드5 파일 중 어떤 것들을 우선적으로 CDN에 올려야 할까요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!