spring에 해당하는 글 18

DB 스키마를 관리하자

DB|2018. 12. 20. 14:12

제품 혹은 프로젝트를 진행할때 계속 테이블 스키마가 변경되거나

샘플 데이터가 변경되는 경우들이 있다.


보통 SQL 파일을 소스들과 함께 git에 버전 관리를 하고 있는데


실제 적용된 제품 버전이야 Version.class 라거나 커맨드를 통해 버전을 확인하면 되지만

DB에 어떤 버전까지 적용되어 있는지는 파악하기 어려울때가 있다.


그리고 git에는 최신 sql만을 관리해왔기 때문에 각 버전마다 어떤 스키마들이 변경되었는지

현재 버전에서 최신자로 적용시 어떤 어떤 컬럼들이 변경되었는지는


git 히스토리들을 하나 하나 파악해야하는 귀찮음이 존재했다

(서버가 여러개면 덤으로.. 버전마다 alter문을 만들어야하는....)


그래서 스키마를 관리해주는 툴이 없을까 싶어 살펴보니

데이터베이스 형상관리 툴이라는 이름의 두가지가 spring boot starter에 포함 되어있었다

(spring boot와 연동하여도 사용하고 cmd로 직접도 사용할 예정..)


flyway(https://flywaydb.org/)

liquibase(https://www.liquibase.org)


다음 글에서는 flyway


그리고 그 다음에는 liquibase


마지막으로는 각각 비교를 해볼까 한다.

(잠깐 사용해봤을때는 liquibase 가 더 좋아보인다..)

'DB' 카테고리의 다른 글

[DB] 기초부터다시, ACID, CAP  (0) 2020.09.14
GraphQL 끄적끄적  (0) 2020.08.20
기초부터다시, 조인  (0) 2020.08.18
[MongoDB] 해킹된 후 보안 설정 관련  (0) 2019.12.23
[MyBatis] MyBatis 문법 파서  (0) 2019.05.29

댓글()

Spring Boot 메일을 보내자(서비스 에러 알림)

JAVA/Spring|2018. 12. 19. 15:51

SpringBoot로 만든 toy 프로젝트를 라즈베리파이에 올려서

사용하고 있는데


가끔 에러가 발생하는 경우가 있다.

물론 가끔씩 접속해서 로그를 확인하면 되지만


에러가 언제 발생할지 모르기 때문에 알림 용도로 Mail전달받으면 어떨까 싶어 

SpringBoot에 Gmail Smtp를 활용하여 에러 스택과 url 그리고 param을 전달 받으면 좋겠다 싶어

최근에 적용한 내용을 남긴다.



1. 메이븐 pom.xml 추가

일단 메이븐 pom.xml 에 dependency를 추가


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-mail</artifactId>

</dependency>


2. spring properties 에 smtp 설정 추가(application.properties)

gmail의 smtp 를 활용하기 위해 접속 정보가 필요하다.

application.properties에 하단 내용들을 설정한다.

#---------------------------------------

spring.mail.host=smtp.gmail.com

spring.mail.username=xxxx@gmail.com

spring.mail.password=xxxx


#그리고 보안 설정들

spring.mail.properties.mail.smtp.auth = true

spring.mail.properties.mail.smtp.socketFactory.port = 465

spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory

spring.mail.properties.mail.smtp.socketFactory.fallback = false

#---------------------------------------

#--구글 계정의 보안 수준이 낮은 앱의  엑세스를 허용해야 보내진다...


이제 설정들은 됬고 Mail을 전송하는 서비스 클래스를 만들자


3. MailService 클래스 생성

@Service

public class MailService {

@Autowired

private JavaMailSender javaMailSender;

public void sendEmail(String emailAddr, String content) {

SimpleMailMessage mail = new SimpleMailMessage();

mail.setTo(emailAddr);

mail.setFrom("123@gmail.com");

mail.setSubject("[Service] Error Notify");

mail.setText(content);

javaMailSender.send(mail);

}

}



Mail 전송하는 서비스 클래스를 테스트를 마치고


4. 에러 처리를 위한 @ControllAdvise 활용 및 MailService 활용


Controller 단에서 발생하는(혹은 하위에서 발생후 throw되어 올라온) 에러들을 처리하기 위하여

@ControllerAdvise를 활용하여 ErrorHandler 를 생성했다.


@ControllerAdvice

public class ErrorHandler {

@Autowired

private MailService mailService;

@ExceptionHandler(value = Exception.class)  

    public String handleException(HttpServletRequest req, Exception e){

StringBuilder stb = new StringBuilder();

stb.append( "requestURI : " );

stb.append( req.getRequestURI() );

stb.append( "\n" );

stb.append( "req.getQueryString() : " );

stb.append( req.getQueryString() );

stb.append( "\n" );

stb.append( "e : " );

stb.append( "\n" );

stb.append( Throwables.getStackTraceAsString(e) );

mailService.sendEmail("xxxxx@gmail.com", stb.toString());

return e.getMessage();

    }  

}



물론.. 더 깔끔하게 만드는 방법들이 있겠지만


일단 기록을 위해 남기고 추가적으로 수정해 나가도록...






댓글()