그 외

1. 마스터 DB Query 과다 사용으로 인한 서버 부하

고도몰's 개발자 코멘트

튜닝 시 부하가 많이 발생할 것 같은 Query문에는 반드시 slave method 처리를 해주세요. 실수로 slave에 insert, update를 사용핫더라도 시스템에서 예외처리가 되기 때문에 걱정하지 않으셔도 됩니다.

📍 Slave 사용방법

  • Slave DB가 존재하는 상점에서만 사용할 수 있습니다.

  • 동적으로 DB의 값이 변경되는 쿼리는 사용하지 마세요.

  • 정적인 값을 보유한 쿼리인 경우 다음과 같이 DB 객체에 slave()를 한번 더 호출

    • master : $this->db->query_fetch()

    • slave : $this->db->slave()->query_fetch()

  • 만약, s lave method를 사용하더라도 slave가 없는 경우 자동으로 master 전환 처리됨

  • 활용방법

    • 페이징 처리를 위한 count 쿼리

    • 실시간으로 update 된 데이터를 보여줄 필요가 없는 쿼리

    • 기타 설정을 저장하는 쿼리 등

    • 위 쿼리들에 대해서는 slave() 메소드를 붙여서 사용하시기를 권장합니다.

2. 분산서버를 고려하지 않고 기능을 만든 경우

고도몰's 개발자 코멘트

이벤트를 진행하게 되면 분산서버(이벤트 서버)를 사용하게 됩니다. 분산서버 사용 시 분산서버를 고려하여 개발해야 합니다. 파일 업로드를 웹서버 자체에 구현할 경우 원본서버(gdadmin, api 도메인)에서 파일을 찾지못하여 이벤트 종료 시 파일이 유실될 수 있습니다.

⛔️ As-Is

namespace Controller\Front\File;

/**
 * 파일 등록 하는 클래스
 */
class FileUpload
{
    # write your code    
    
    ...
    
    Storage::disk(Storage::SOME_PATH, 'local')->upload($tmpFileNm, $newFileNm);
    
    ...
    
    # write your code    
}

✅ To-be

namespace Controller\Front\File;

/**
 * 파일 등록 하는 클래스
 */
class FileUpload
{
    # write your code    
    
    ...
    
    1. 고도몰의 게시판 첨부파일 저장 코드를 확인 하여 분산서버 사용 시 원본 서버에 파일이 저장되도록 수정
    2. 원본서버의 api 도메인에 파일 업로드 하는 api를 만들어 해당 api로 파일 전송하여 원본에만 파일이 저장되도록 수정
    3. 기타 방법으로 첨부파일이 분산서버가 아닌 원본 서버나 다른 서버에 저장되지 않도록 변경
    
    ...
    
    # write your code    
}

3. 고도몰이 정의한 DB의 값을 임의의 값으로 변경하는 경우

고도몰's 개발자 코멘트

고도몰이 정의한 DB컬럼의 값(ex. es_adminMenu 의 'adminMenuNo')를 임의로 변경하는 경우, 고객상점에서만 사용할 수 있는 문구로 수정하여주세요. 단, 이러한 컬럼들은 대부분의 상점이 고도몰이 정의한 값을 유지하여 사용하고 있어 관련 DB패치가 진행 될때 'primary_key'에러로 자동패치가 적용 되지 않을 수 있습니다. 또한 UPDATE문이 배포 될 경우, 고객기 수정하여 사용중인 컬럼값이 초기화(고도몰 정의 값으로 변경)될 수 있습니다.

⛔️ As-Is

adminMenuNo = 'godo008***'

✅ To-be

# test가 아닌 임의의 4자리 문자열로 변경 필요
adminMenuNo = 'test******'

4. 모든 영향 범위에 튜닝 내용을 적용하지 않은 경우

고도몰's 개발자 코멘트

새로운 값의 정의를 추가하는 경우 관련 범위의 파일도 모두 수정해주세요.

예를들어, 게시판 업로드 스킨의 form id를 변경하였다면 하기 범위를 모두 수정해주셔야 합니다. /data/skin/mobile/스킨명/js/gd_board_write.js /data/skin/mobile/스킨명/js/gd_common.js /data/skin/mobile/스킨명/board/skin/default/write.html

form id를 frmWrite으로 사용하여 업로드 관련 정보를 input 태그로 수정합니다.

⛔️ As-Is

<!--{ ? req.bdId == 'useras' }-->
<form id="asWrite" action="../board/board_ps.php" method="post" enctype="multipart/form-data" class="frmWrite">
<!--{ : }-->
<form name="frmWrite" id="frmWrite" action="../board/board_ps.php" method="post" enctype="multipart/form-data" class="frmWrite">
<!--{ / }-->

✅ To-be

<form name="frmWrite" id="frmWrite" action="../board/board_ps.php" method="post" enctype="multipart/form-data" class="frmWrite">

5. DB에 이미지 바이너리데이터를 넣은 경우

고도몰's 개발자 코멘트

고도몰 DB에는 이미지 바이너리데이터를 넣어서는 안됩니다.

테이블에 이미지를 바이너리 형태로 입력한 데이터를 넣을 경우, 해당 테이블을 조회하는 쿼리가 실행 될 때마다 서버에 부하가 발생할 수 있습니다.

주의하세요!

부하 발생 시 상점 차단과 같은 불이익이 발생할 수 있습니다. 서버 부하로 인해 상점이 차단 되는 경우 발생하는 불이익에 대해서는 오롯이 상점의 책임이므로 서버 부하가 발생하지 않도록 주의하여주세요!

⛔️ As-Is

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABQODxIPDRQSEBIXFRQYHjIhHhwcHj0sLiQySUBMS0dARkVQWnNiUFVtVkVGZIhlbXd7gYKBTmCNl4x9lnN+gXz/2wBDARUXFx4aHjshITt8U0ZTfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHz/wAARCAMCAwIDASIAAhEBAxEB/8QAGwABAAIDAQEAAAAAAAAAAAAAAAECAwUGBAf/

✅ To-be

DB 테이블 컬럼에 as-is와 같은 이미지 바이너리 데이터를 절대로 넣지마세요.
특히 공용서버의 경우 부하 발생시 다른 상점도 영향을 받을 수 있어 차단될 수 있습니다.

Last updated