Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

6. AWS EC2, 스프링 프로젝트가 AWS RDS DB를 사용하도록 root-context.xml 수정해주기 + 꼭 변경해야하는 코드 본문

개인 공부/(클라우드) AWS

6. AWS EC2, 스프링 프로젝트가 AWS RDS DB를 사용하도록 root-context.xml 수정해주기 + 꼭 변경해야하는 코드

이대곤 2022. 10. 3. 22:37

1. 스프링 프로젝트에서 로컬DB가 아닌 AWS RDS DB에 접속하도록 수정하기

src/main/webapp/WEB-INF/spring/root-context.xml 에서 아래 부분을 수정해주면 된다.

그리고 이전 게시글을 참고하여 다시 EC2에 파일을 올려주면 끝.

<기존>

<수정후>

2. src/main/webapp/WEB-INF/ 의 모든 jsp 파일에서 아래와 같은 형태의 링크 전부 수정

* 참고로 컨트롤러의 java 코드는 수정해줄 게 없었음.

초기 프로젝트 생성시 기본 패키지 이름이 이것과 같았다면 com.spring.ex "/ex/" 를 사용하여 작성한 코드가 있을 텐데

이 부분들 찾아서 아래와 같이 수정해줘야 한다. 

ex1)

<수정전>

<수정후>

ex2)

<수정전>

<수정후>

ex3) 

<수정전>

<수정후>

 

 

3. API를 사용하고 있다면 API를 호출할 수 있는 곳의 도메인 수정해주기

나는 당시 카카오 MAP API를 사용중에 있었고, 배포한 뒤에 지도가 보여지지 않았었는데 이 부분을 수정해주지 않아 그랬음. 찬호씨 또한 카카오 계정으로 로그인 하는 부분에서 갑자기 오류가 생겼는데 이와 비슷한 맥락에서 발생한 오류였으니 참고하자.

3. insert문, update 문에서 사용되는 date 타입의 attribute 형식 구체화 하여 아래의 에러 해결하기(Mybatis, SQL문 관련 XML파일들)

아래의 에러는 Billy A Dream 프로젝트에서 상품을 등록/수정하는 기능에서 발생한 에러이다.

 

SELECT 문을 이용한 기능에서는 에러가 발생하지 않았으나

INSERT, UPDATE 문이 실행되는 기능에서 아래와 같은 에러가 발생하였다.

 

ORA-01861: 리터럴이 형식 문자열과 일치하지 않음

ORA-01861: literal does not match format string 

 

이 에러는 통상 로컬에서는 아무문제 없이 잘 되다가 원격 서버에 올려서 실행하면 발생하는 에러이다.

 

발생 원인

Oracle DB내부에는 NLS_DATE_FORMAT 변수가 있는데, 이 안에는 TO_CHAR() and TO_DATE() 함수가 디폴트로 사용할 날짜형식을 저장하고 있다. 로컬에서는 텍스트로된 날짜가 이 형식과 맞았었는지 따로 to_char(),to_date()를 써주지 않고도 잘 동작 하였는데, AWS RDS 오라클 서버에서는 이 형식이 일치하지 않았나보다.

참고 : https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams147.htm#REFRN10119

 

해결책

최선의 해결책은 DB 테이블에서 date 타입의 attribute 를 insert 혹은 update 할 땐 TO_DATE('2014-01-01', 'YYYY-MM-DD')처럼 디폴트 데이터 형식이 사용되지 않도록 데이터 형식을 지정해주는 것이다.

 

최선의 해결책은 이런 에러를 미리 알아내기 위해 서버의 환경을 로컬에도 동일하게 세팅하는 것이라는데 확인을 해보니 서버와 로컬 모두 같은 환경이다?? 역시 방법은 바로 위 방법 뿐인가?

참고 : https://m.blog.naver.com/jeemin5/220141590502

ex1)

<수정전>

<insert id="InsertProduct">
	insert into products(no, seller_no, ..., end_day)
	values(products_seq.nextval, #{seller_no}, ..., #{end_day})
</insert>

<수정후>

<insert id="InsertProduct">
	insert into products(no, seller_no, ..., end_day)
	values(products_seq.nextval, #{seller_no}, ..., to_date(#{end_day},'YY-MM-DD'))
</insert>

ex2)

<수정전>

<insert id="UpdateProduct">
	update products
	set images=#{images}, name=#{name}, ..., end_day=#{end_day}   
	where no=#{no}
</insert>

<수정후>

<insert id="UpdateProduct">
	update products
	set images=#{images}, name=#{name}, ..., end_day=to_date(#{end_day},'YY-MM-DD')   
	where no=#{no}
</insert>

ex3) 이외에도 coupon.xml, event.xml 등에서 모든 date 타입의 attribute를 update, insert 하는 곳에서 모두 위와 같이 수정해주었음.

Comments