본문 바로가기
728x90

전체 글389

Java) Decorator 패턴을 사용해보자! 난 요즘 출퇴근길에 인프런 강의를 듣는다...^^ (출퇴근 왕복 3시간의 위엄ㅎ) 강의에서 Decorator 패턴이 나왔는데, 내 프로젝트에도 활용할 수 있을 것(유용할 것) 같아 코드를 수정하고 공유해본다.!! (코드는 일부 각색되었읍니다) 일단 내겐 기존의 코드가 있다. public interface OcrService { HttpStatusCode saveAData(ARequestDto aRequestDto); HttpStatusCode saveBData(BRequestDto bRequestDto); } A 데이터와 B 데이터를 저장하는 코드다. 그런데 B 데이터를 저장하는 로직이 바뀌었다. 처음에는 OCR 을 사용하려고 했는데, 수기 입력으로 변경된 것이다. 원래같으면 기존 코드를 삭제하고 새 로.. 2023. 12. 28.
Tesseract 를 JAVA 로 사용해본 후기 내겐 임무가 있었다. 그게 무엇이냐? Tesseract 로 값을 읽어와서 DB 에 저장하는 그런 임무. 보통 Tesseract 는 Python 을 이용해 사용한다고 하는데 나는 JAVA 공화국에 사는 자바인이기 때문에(?) 자바를 이용해보았다. 사용은 간단하다. 1. Tesseract 인스턴스를 만든다. - 사용할 언어 (학습시킨 언어 모델) - 언어 모델이 들어있는 파일 경로 설정을 해주고 2. 내 경우는 pdf 파일에 들어 있는 값을 가져오는 것이기 때문에 base64로 오는 파일을 pdf로 렌더링해준 뒤 3. 내가 가져와야할 값이 있는 좌표 부분을 bufferedImage 화 해준다음 4. Tesseract 인스턴스로 OCR 을 해주면 5. String 이 가져와진다. 코드를 직접 가져와서 보여주면.. 2023. 12. 27.
MacOS M2 ) java.lang.UnsatisfiedLinkError: Unable to load library 'tesseract' Java 로 Tesseract 를 사용하려고 하던 중 오류가 발생했다. 기존 프로젝트는 윈도우 환경에서 개발하고 있었는데 맥OS 에서는 라이브러리 경로를 못 잡는 것..ㅎ;; 1. Project Structure 설정 2. 기존 라이브러리 지운 후 ./gradlew 로 다시 종속성 불러오기 3. 환경 변수 재설정 등 ... 로컬에서 뭔가 잘못됐나 싶어 여러 시도를 해봤으나 결론은 인텔리제이 문제였다./)^_^/) 참고로 나의 tesseract library 저장 경로는 요기 1. 인텔리제이 edit configuration 에 들어간다 2. 버츄얼머신 옵션을 추가해준다. 3. 라이브러리 경로를 추가해준다. (나의 tesseract library 경로) 저장하고 다시 서버를 빌드하고 해당 api를 실행하면.. 2023. 12. 15.
DBMS? JPA? 그래도 쿼리는 알아야 한다. 첫 실수를 했다. DB 테이블에서 기존 유저 PK(UUID) 를 새로운 유저 PK(LONG) 로 변경하고 연결 된 FK 도 전부 바꿔야하는 임무를 맡았다. 나는 그 동안 쿼리를 직접 치기보다는 JPA나 DBMS 를 이용했기 때문에 당연히 쿼리가 아닌 DBMS 로 테이블을 만졌다. -> 여기에서 사고가 났다. 아무 생각 없이 FK 컬럼을 지우고 새 컬럼을 추가한 뒤 FK 설정을 하려고 봤더니 (자세히는 말하기 좀 그러니까 대충 말하면) 유저 데이터와 해당 테이블 데이터의 수가 달라 FK 연결이 불가한 사태가 일어났다. 그렇다. 이 테이블은 이제 유저 테이블과 관계가 사라져버린 것이다.... 직접 쿼리를 쳤다면 롤백을 해서 되돌릴 수 있었을 텐데, DBMS 를 이용했기 때문에 이미 커밋돼버렸고... 심지어.. 2023. 12. 11.
alter table users drop foreign key, 그리고 Table doesn't exist 테스트를 하던 중 문제(?) 가 발생했다. 테스트는 정상적으로 실행되긴 한다. 근데 Table 'test.users' doesn't exist 해당 오류가 계속 발생하는 것이다... 물론 이게 테스트에 영향을 주진 않는 하얀색 글씨였지만 나는 매우 신경이 쓰였다. Hibernate: alter table users drop foreign key 해당 구문 앞줄에는 하이버네이트가 외래 키 삭제 작업을 하고 있었다. Hibernate 는 외래 키 제약 조건을 삭제한 뒤, 테이블을 삭제하고 제약 조건을 추가한다고 한다. 그런데 외래 키를 삭제하려고 했는데 테이블이 없으면 해당 오류가 발생한다. 근데 걍 무시하면 된단다 ㅋ 어쨌든 나도 테스트는 잘 동작하니깐 참고로 내가 사용하는 Database 는 MySQL인.. 2023. 12. 7.
@Value 에서 기본값 주입하기 @Value 를 사용하면 application.yml(properties) 에서 정의된 값을 임의로 가져올 수 있다. 그런데 이 값을 정의하지 않고도 spring 이 제공하는 defulat 값을 사용 가능하다. @Value("${spring.mail.username:some default}") private String mailId; 이렇게 :some default 값을 적어주면 스프링이 알아서 디폴트 값을 넣어준다. 자 그럼 한번 보자 :some default 를 추가하기 전에는 아래 오류가 발생한다. spring.mail.username 값을 찾을 수 없다는 오류 여기에 :some fefault 를 추가하면? 똑같은 예외긴 하지만 자세히 보면 some default 가 붙은 username 값이 아니.. 2023. 12. 7.
728x90