본문 바로가기

표준프레임워크_eGovFrame/운영환경

표준프레임워크 eGovFrame 3.7 배치 운영환경 (MacOS) MySQL ERROR "this is incompatible with sql_mode=only_full_group_by"

전에 Windows 10 home 64bit에서 처리했던 배치운영환경 3.7 (현재는 3.7까지만 있음)

 

이번에는 아래와 같은 환경으로 구성 중이다.

 

MacOS Mojave 10.14.5

OpenJDK 1.8

Eclipse Oxygen 

eGovFrame 개발환경 3.8

MySQL 8.0.15 (version 확인 방법) 

mysql workbench 내에서 (그 외 다른 방법도 있으나 핵심은 그게 아니니깐...)

SELECT VERSION();

or

SHOW VARIABLES LIKE 'version';

SELECT VERSION(); SHOW or VARIABLES LIKE 'version';  둘중 하나를 사용하면 하단에 result로 결과를 볼 수있음.

 

어쨌든 위로 구성된 컴퓨터에  표준프레임워크 배치운영환경 3.7을 받았다.

 

아래 링크로 홈페이지를 들어간다.

http://www.egovframe.go.kr/EgovOperationEnvRelease.jsp?menu=3&submenu=3#

 

링크 이동시 화면

해당 이동 화면에서 아래 zip 파일을 다운로드 한다.

egovFrameWork_BOPR-3.7.0.zip[11,936,959 byte] 를 클릭 해 다운로드

클릭해서 다운로드 후 workspace에 풀어 준 후 import 해 왔다. import 방법은 기초적인거니 pass.

미리 설치해놓은 mySQL workbench(여기서 mysql8.0.15를 깐게....문제였음...)에 스키마를 만들고 프로젝트 내 /egovFrameWork_BOPR-3.7.0/src/script 경로에서 

 

schema-create-mysql.sql

bopr_create_mysql.sql

schema-insert-mysql.sql

bopr_insert_mysql.sql

 

 

요녀석들을 사용해서 스키마,테이블,구조정보 완성을 했다.

 

프로젝트 빌드 및 컴파일 완료 후 Run As 로 서버에 돌려...

admin qwerqwer

로그인 화면까지는 왔으나 (계정 ID : admin 비번 : qwerqwer) 로그인 하게 되면

데이터처리 공통 오류 화면이 나오면서 콘솔에 아래와 같은 에러가 찍힘.

 

expression #1 of order by clause is not in group by clause and contains nonaggregated column 'aa.start_time' which is not functionally dependent on columns in group by clause; this is incompatible with sql_mode=only_full_group_by

 

해당 에러 근거는 

https://stackoverflow.com/questions/34115174/error-related-to-only-full-group-by-when-executing-a-query-in-mysql

 

Error related to only_full_group_by when executing a query in MySql

I have upgraded my system and have installed MySql 5.7.9 with php for a web application I am working on. I have a query that is dynamically created, and when run in older versions of MySql it works...

stackoverflow.com

링크에 있으며,  핵심은 위 링크 내용 중

 

When SELECTing a column that is not part of the GROUP BY there could be multiple values for that column within the groups, but there will only be space for a single value in the results. So, the database usually needs to be told exactly how to make those multiple values into one value. Commonly, this is done with an aggregate function like COUNT(), SUM(), MAX() etc... I say usuallybecause most other popular database systems insist on this. However, in MySQL prior to version 5.7 the default behaviour has been more forgiving because it will not complain and then arbitrarily choose any value! It also has an ANY_VALUE() function that could be used as another solution to this question if you really needed the same behaviour as before. This flexibility comes at a cost because it is non-deterministic, so I would not recommend it unless you have a very good reason for needing it. MySQL are now turning on the only_full_group_by setting by default for good reasons, so it's best to get used to it and make your queries comply with it.

 

이 부분이다.

 

해결 방법은 많지만, 지금은 급하기에 내가 해결한 방법만 올림.

 

데이터베이스에서 아래와 같이 명령어를 때림 (문제의 ONLY_FULL_GROUP_BY 넋다운 시켜버림)

 

 SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 
 commit;

 

이 후 로그인을 하니 정상적으로 페이지 진입하여 아래와 같은 화면이 나온다.