0.시작하며 Spring Boot 프레임워크를 사용하며 개발할때 자주 사용하게되는 어노테이션인 @Transactional에 대하여 알아보며 생각보다 많은 기능이 있어서 놀랐고 이를 정리해보겠습니다. 1. 트랜잭션이란? 데이터베이스의 상태를 변경시키기위해 수행하는 작업의 단위입니다. 이때 작업은 select, update, insert, delete등의 쿼리가 될 수 있습니다. 2. 트랜잭션의 성질, ACID Atomicity, 원자성 트랜잭션 내의 모든 연산이 완전히 반영되거나 반영되지 않아야합니다. 즉, 하나라도 오류가 발생한다면 모든 변경사항이 취소되어야합니다. rollback할때 savepoint를 지정하여 같은rollback할 수 있습니다. 단, rollback한 savepoint 이후로 설정되어..
0. 시작하며 프로젝트에서 SSE(Server Sent Event) 방식의 알림을 구현을 담당했습니다. 이때발생한 에러와 트러블 슈팅을 기록하려합니다. 1. 알림 구현 방식 후보군 1-1 Short Polling 클라이언트가 서버에 요청을 보내어 새로운 정보가 있는지 확인하는 방식입니다. 서버는 즉시 응답을 보내며 사용가능한 데이터가 있다면 보내줍니다. 일정 시간 혹은 동작후, 클라이언트는 다시 서버에 요청을 보내게됩니다. 이 방법은 쉽고 빠르게 구현될 수 있지만 필요치 않은 클라이언트의 요청이 많이 생길 수 있습니다. 이는 트래픽과 서버의 부담이될 수 있는 요인입니다. 1-2 Long Polling Short Polling에서 조금 더 개선된 방식입니다. 마찬가지로 클라이언트가 서버에 요청을 보내어 사..
0. 사용 이유 프로젝트에 얼굴인식을 수행해 대상의 신원, 나이, 성별을 인식하는 기능을 sk open api를 사용하여 구현이 완료된 상태입니다. 하지만 api 호출을 최소화 하기위해 이미지의 유효성검사를 자체적으로 실행하여 개선 목적으로 ProcessBuilder로 유효성 검사 실행을 도전했습니다. 성능 비교를위해 다음과 같이 임시 test를 진행해보겠습니다. 1. ProcessBuilder란? Process 클래스의 보조 클래스로 start 메서드를 호출하면서ProcessBuilder 클래스의 인스턴스에 정의 된 속성으로 새 프로세스를 만들 수 있습니다. ProcessBuilder는 동기화 된 클래스가 아니며, 명시적으로 동기화되지 않으면 멀티 스레드로부터 안전하지 않습니다. cmd로 명령을 수행하..
더보기 문제 상황 .yml 파일의 환경 변수 주입과 bean 과 환경 변수 주입 순서에대해 무지해 겪은 에러를 공유하고자 글을씁니다. 이번 프로젝트는 다음과 같은 환경에서 진행중입니다. Java 11(JDK) Spring Boot Maven 위 환경에서 sms알림기능을 위해 API KEY와 저의 핸드폰 번호 등을 환경변수로 관리해야하는 상황이었습니다. 직접 구현하는건 처음이지만 익숙한 기능이기에 빠르게 할 수 있을 줄 알았습니다.. 그러나 다음과 같은 두가지 문제가 발생했습니다. API_KEY, API_SECRET 환경 변수가 Null이다. (1번 해결후)제 휴대폰 번호가 아닌 다른 번호로 주입된다. Bean 생성시기와 환경 변수 주입 시기 bean이란? 기존 Java 에선 클래스를 생성하고 new를 입..