본문 바로가기

전체보기138

[SQLAlchemy 2.0, MySQL] Group by로 합계 구하기(2024년 최신) 요새 자체 제작해 사용 중인 교대근무 관리프로그램을 업데이트 하면서 오랜마네 자바가 아닌 파이썬을 사용했습니다. 이번 시간에는 이번달에 이 근무자가 몇시간 시간외를 했는지를 알기 위해서 Goup by와 sum을 SQLAlchemy로 사용하는 방법을 알아보겠습니다.  처음에는 자바와 JPA로 할까 생각했었는지 제가 이번 코드를 작성하면서 느낀점은 처음 파이썬을 공부할 때 봤던 역시 인생은 짧기에 파이썬이 필요하다. 이 말이 왜 있는지 확실하게 느꼈습니다. 자바로 하게 되면 정말 많은 코드가 필요 했을텐데 파이썬을 이용하니 진짜 짧은 코드로도 원하는 코드를 완성할 수 있다는 걸 제대로 느꼈습니다. Life is short, you need Python.인생은 짧기에, 당신에겐 파이썬이 필요하다.목차1. 기본.. 프로그래밍사업/사이드 프로젝트 2024. 6. 18.
[스프링부트/업무일지 만들기] ChatGPT가 알려준 스프링 전역 예외 처리 구현 하기 서비스를 만들다 보면 어김없이 예외처리, 에러처리를 해야될 때가 반드시 옵니다. 그리고 계속 반복적으로 사용되는 예외처리 하는부분이 발생합니다. 그래서 스프링에서는 전역적으로 예외처리를 하는 @ControllerAdvice를 지원합니다. 이번에는 컨트롤러에서 발생하는 에러를 처리하는 GlobalExceptionHandler를 만들어 보겠습니다.  해당 내용은 사실 제가 참조자료로 사용하는 있는 교재에는 없는 내용으로 제가 만든 코드를 챗GPT에게 리뷰 요청하니 알려줘서 적용하게 되었습니다. 애너테이션 지정애너테이션은 @ControllerAdvice, @RestControllerAdvice 두가지를 썼습니다. 유효성 검사 예외 처리유효성 검사 예외처리 부분은 빈칸으로 두면 안되는데 빈칸으로 두고 서버로 요.. 프로그래밍사업/사이드 프로젝트 2024. 6. 6.
[스프링부트/업무일지 만들기] JPA로 DB에 리스트 넣는 방법- 직렬화, 역직렬화 이번에는 List tag를 어떻게 JPA로 DB에 넣고 불러오는지에 대해 알아보겠습니다. 아마도 검색해보니 두가지 정도 방법이 있는거 같습니다. 저는 리스트 자료형을 스트링으로 바꿔서 저장하고 불러오는 방법에 대해 소개보겠습니다.  전체적은 순서는 컨버터 만들기, 엔티티 클래스에 컨버터 적용하기 이렇게 두단계로 나누어 집니다. Converter 만들기위에는 스트링이라고 표현했지만 더 정확한 표현은 Json 문자열로 변환했다라는 것이 더 정확한 표현인거 같습니다. 한줄 한줄씩 설명하면서 각부분이 왜 필요한지에 대해 설명드리겠습니다. @Converter이 클래스가 JPA 변환기를 나타내는 애너테이션입니다.  ObjectMapper 변환을 위해 ObjectMapper를 인스턴스화 합니다. 리스트를 문자열로 변.. 프로그래밍사업/사이드 프로젝트 2024. 6. 5.
가스 사용시설안전관리자 양성교육 합격후기- 공부법, 셔틀, 생활관 정보 공유 길고 길었던 가스 사용시설 안전관리 양성교육이 끝났습니다. 지난 한 달 동안 일과 공부를 병행하면서 합격한 후기를 남겨보도록 하겠습니다. 일단 저는 기계공학을 전공하였으며 산안기, 일반기계, 공조냉동 기계 기사 이렇게 3가지 자격증을 가지고 있어 완전 제로베이스가 아니라는 점을 염두에 두시고 봐주셨으면 좋겠습니다. 다만, 용어가 좀 더 친숙한 했을 뿐 거의 0에서 시작했다고 보셔도 됩니다. 합격점수 인증우선 저의 합격 점수 인증부터 하겠습니다. 아마도 3점짜리 2개 틀려서 6점 감점이 있는 것으로 보입니다. 처음 만만하게 보고 오신 분들 중에 특히 젊 은신분들 중에 재시험을 접수하는 사람이 좀 보였습니다. 다만 그 숫자가 그리 많이 않은 거 보니 다들 어느 정도 열심히 공부하시고 오신 거 같았습니다. 제.. 후기/내가 직접 경험한 후기 2024. 6. 4.
[스프링부트/업무일지 만들기] 업무일지 화면을 보여주는 컨트롤러를 만들기-최신 순서로 정렬하기 앞서 API 기능을 구현하게 위한 RestController를 만들었습니다. 이번에는 화면을 보여주는 뷰 컨트롤러를 만들어보겠습니다. 여기서 가장 애먹었던 부분은 최신 글을 제일 상단에 오는 방법, 즉 자바 리스트 정렬에 관한 로직과 업무일지를 수정하는데 리스트를 스트링으로 바꾸는 부분이었습니다. 최신글을 제일 위로 정렬하기몬가 쉬워 보이면서도 제일 어려웠던 부분이었습니다. 일단 단순한 리스트가 아니라 객체가 저장된 리스트에서 객체의 각 ID값을 기준으로 정렬하는 방법을 찾아야 했습니다. Immutable object is modified 오류 해결일단 기본적으로 아래 스샷과 같이 코드를 만들었는데 오류가 계속 났습니다. 불변 객체를 바꾸려 했기 때문이죠. 하지만 친절한 인텔리제이가 해결 방법을 알려주어.. 프로그래밍사업/사이드 프로젝트 2024. 6. 4.
[스프링부트/업무일지 만들기] 업무일지 API 만들기 제가 주 교재로 사용한 스프링 부트 3 백엔드 개발자 되기: 자바 편(저자: 신선영)에는 API 컨트롤러를 만들고 브라우저에 보여주는 컨트롤러도 만들어 각각 만들어서 프로젝트를 진행했습니다. 이 방식이 저에게 더 와 닿았던 이유는 웹 뿐만 아니라 앱에서도 해당 서버를 사용할 수 있을 거라 생각했기 때문입니다.  아래 코드를 보시면 복잡한 코드는 사실 별로 없습니다. 그래서 전체 코드를 하나하나 설명하기 보다는 제가 이번 프로젝트를 통해 새로 배우거나 중요하다고 생각 한 부분을 설명드리겠습니다. @RequestMapping("/api")이 애너테이션을 사용하면 중복을 줄일 수 있습니다. 가령 api/logs, api/logs/{id}와 같이 api가 계속 중복되는데 이것을 줄여주는 애너테이션 입니다. @P.. 프로그래밍사업/사이드 프로젝트 2024. 6. 3.
KTX 기차표 날짜 변경 후기 KTX 기차표 원래 일정보다 하루 뒤 날짜로 잘못 예매 한걸 출발하기 전날 알아 구글이나 네이버로 막 검색했는데 몬가 Ai가 답변 달라준듯한 글 또는 고객센터에 전화 했는데 취소 후 다시 예매 해야된다는 글 도 있고 코레일 공식사이트에도 답변이 없어 이렇게 생생한 후기를 남깁니다.KTX 열차표 날짜 변경 방법일단 앱이나 인터넷으로 취소 후 다시 예매하는 것이 가장 손쉬운 방법은 맞습니다. 다만 저처럼 취소 후 다시 예매하는 것이 어려우신 분들은 직접 역에 가셔서 매표소로 가시면 기존에 인터넷이나 코레일톡으로 예매한 표를 취소하고 원하는 날짜로 변경 해주십니다.이렇게 했을때 단점이렇게 하면 인터넷으로 표 관리를 할수 없기 때문에 갑작스럽게 또 여행 일정변경을 하려면 다시 역으로 가서 변경 해야된다는 단점이.. 후기/내가 직접 경험한 후기 2024. 6. 3.
[스프링부트/업무일지 만들기] 업무일지를 저장하고 수정하고 삭제하고 읽어오기 이번에는 DB에 업무일지를 저장하고 수정하고 삭제하고 읽어오는 코드를 작성해보겠습니다. 스프링 데이터 JPA를 이용해 간단하게 구현해보겠습니다. Repository 만들기스프링 데이터 JPA를 이용하면 손쉽게 DB에서 데이터를 읽어오고 삭제하고 저장하는 기능을 구현할 수 있습니다. 여기서는 검색 기능도 미리 추가 하였습니다. 그리고 자신이 쓴 글만 볼수 있게 하기 위해 이메일을 입력 받습니다. 보통의 다른 사이트와 같이 이메일을 아이디로 사용하는 업무일지 입니다. 전체코드@Repositorypublic interface WorkLogRepository extends JpaRepository { @Query( "select distinct w from WorkLog w " + .. 프로그래밍사업/사이드 프로젝트 2024. 6. 2.
[스프링부트/업무일지 만들기] 업무 일지에 적을 내용을 담을 모델(엔티티)만들기 이제 우리가 업무일지에 작성한 내용을 담을 그릇이 필요합니다. 이것을 사실 엔티티, 도메인, 모델 이런식으로 표현하는 것으로 보이지만 각각이 부르는 이름에 따른 차이점이 있을 것입니다. 하지만 결국에는 DB에 저장된 데이터를 OOP의 세계로 가져와 담기 위한 그릇이라고 저는 이해했습니다. 이것에 대해 정통하게 공부한 입장이 아니다 보니 이런 개념적인 부분은 틀릴 수 있으니 양해 바랍니다. 엔티티 만들기업무일지에 저장할 내용id: 보통 pk로 불리우는 자동으로 1부터 생성되는 값입니다. log: 제가 작성한 오늘 업무 일지가 저장되는 곳입니다. userName: 이 업무 일지를 작성한 사람이 저장되는 곳입니다. createAt, updateAt: 업무일지를 작성한 시점, 수정한 시점을 저장하는 곳입니다. .. 프로그래밍사업/사이드 프로젝트 2024. 6. 1.
[스프링부트/업무일지 만들기] 스프링 부트 초기 설정 하기 스프링 부트 프로젝트를 시작하면  라이브러리 설치, application.properties에서 DB 설정 등 초기 세팅을 해야 합니다. 이번에는 제가 한 초기 세팅에 대해 정리 해보겠습니다.  초기 세팅 전 이 업무일지 만들기 스프링 부트 프로젝트는 supabase의 DB를 사용하여 진행합니다. 따라서 PostgreSQL를 사용합니다.  목차스프링 부트 프로젝트 생성라이브러리 설치application.properties 설정1. 스프링 부트 프로젝트 생성저는 인텔리제이 얼티메이트 버전을 사용중이라 스프링 부트 프로젝트를 생성 할수 있지만 아니신 분들은 Spring Initializr에서 생성하시면 됩니다.    2.  라이브러리 설치역시시 인텔리제이 얼티메이트 버전을 사용중이라 스프링 부트 프로젝트를 .. 프로그래밍사업/사이드 프로젝트 2024. 5. 31.
[스프링부트/업무일지 만들기] 매일 회사에서 한 일 정리하는 업무일지 만들기 지금까지는 플러터로 내부 저장소를 활용하여 앱을 만들어서 배포해왔습니다. 하지만 백엔드 서버가 없이는 백업, 공유 같은 기능 구현에 한계가 있다고 느끼고 저만의 서버를 만들기 위해 스프링부트를 공부하고 있습니다. 다만 공부하면서 느끼는 것은 이런거 할 시간에 supabase를 더 잘 활용할 방법을 찾는게 현명하다고 생각이 듭니다. 아무래도 혼자 이것 저것 해야되는 저한테 1인 개발자에게는 시간적 한계라는 부분이 존재하기 때문에 이미 만들어진 환경을 더 잘 활용하는 것이 나아보입니다.  그럼에도 스프링 부트를 공부 하는 이유제일 큰 이유는 저 혼자 만족하는 부분이 크기 때문입니다. 실제로 스프링 부트 서버로 교대근무 관리 웹서버를 만들어서 활용 중이고 supabase로 안되는 커스텀 한 부분이 반드시 생기.. 프로그래밍사업/사이드 프로젝트 2024. 5. 31.
타임리프(Thymeleaf) 초기세팅하고 기본 레이아웃(layout) 세팅하기-치트시트 스프링 부트를 공부하다보면 프론트엔드를 구성하기 위해 타임리프(Thymeleaf)를 사용하게 됩니다. 그런데 이 타임리프를 사용하기 위해서는 라이브러리를 설치하고 매번 반복된는 화면 세팅을 하기 위해서는 기본 레이아웃을 세팅해서 사용해야 합니다. 다만 이러한 초기 세팅은 프로젝트를 진행하는 동안 딱 한 번하기 때문에 자주 까먹기 마련입니다. 저는 이것을 외울까 아니면 어디서 복붙 할까 고민하다가 이렇게 기록을 남겨 복붙하는 방향을 선택 하였습니다.  그러면 이제부터 타임리프 초기 세팅과 기본 레이아웃을 세팅해보도록 하겠습니다. 1. 라이브러리 설치타임리프와 레이아웃 기능을 사용하기 위해서는 라이브러리를 두개 설치해야 됩니다. 기본 타임리프 라이브러리는 인텔리제이 유료버전이나 스타터 사이트를 통해 만드실 .. 프로그래밍사업/사이드 프로젝트 2024. 5. 20.
[MySQL][23000][1062] Duplicate entry '1' for key 'doit_clusterindex.PRIMARY' 오류 해결 Do it! MySQL로 배우는 SQL 입문책의 07-3 인덱스편의 실습을 진행 하던중 아래와 같은 에러가 발생하여 나중에 또 발생할 경우 빠르게 확인 하기 위해 기록을 남깁니다. [23000][1062] Duplicate entry '1' for key 'doit_clusterindex.PRIMARY' 에러의 뜻은? 위에 에러는 1 이라는 키값이 중복이 되었다는 뜻입니다. 그래서 살펴보니 1이라는 숫자가 중복이 되었네요. 기본키로 지정 된 열은 중복되면 안된다는 것을 다시 한번 알게 되는 에러 였습니다. 프로그래밍사업/사이드 프로젝트 2024. 4. 17.
갤럭시 업데이트 후 보안폴더 삭제 안되는 이유 앱개발할 때 테스트환경으로 사용하는 보안폴더갤럭시에는 보안 폴더라고 별도의 핸드폰 환경을 구성할 수 있는 기능이 있습니다. 저는 이것을 활용하여 앱 개발을 할때 완전히 초기화된 환경에서 앱을 테스트 할때 사용하고 있습니다. 보안폴더 삭제가 안된다그런데 어느순간 부터 이 보안 폴더가 삭제가 안되는 현상이 발생하였습니다. 문제가 지속될 경우 문의하라는 알림창이 뜨면서요 삼성 멤버스 문의 결과그래서 바로 삼성멤버스에 문의를 넣어보니 One UI6.1업데이트 하면서 생긴 오류라고 하네요 다음번 업데이트 시 수정된 버전이 나올 예정이라고 합니다. 후기/내가 직접 경험한 후기 2024. 4. 15.
[업무 자동화] 자바로 엑셀 파일 읽어서 데이터 모으자 매일 같이 우리는 회사에서 엑셀 파일을 이용해 자료를 작성하는데 엑셀파일에서 필요한 부분만 찾아서 모으고 싶을 때 일일이 파일을 열어서 복붙해야하는 노가다를 해야합니다. 그럼에도 스프링이나 JPA를 이용해 엑셀 데이터를 데이터베이스에 저장하고자 했기때문에 자바로 엑셀 파일을 다루는 방법을 공부했습니다. 그래서 이번에 자바를 이용해 엑셀 파일을 읽어 데이터를 수집하는 방법에 대해 정리해보고자 합니다. 그리고 다음과 같은 에러 발생 할때 해결 법도 알아보겠습니다.ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the.. 프로그래밍사업/사이드 프로젝트 2024. 4. 10.
[자바] 맥에 설치된 자바 버전 확인 하는 법, 삭제하는 법, 버전 바꾸는 법(M1 맥, zsh, 버전 변경 안될 때) 맥에 설치된 자바 버전 확인하는 법 맥에서 개발하다보면 과거에 프로젝트를 열면 자동으로 인텔리제이에서 설정된 자바 버전이 없으면 자바를 설치하다보니 여러가지 자바가 설치되어 어떤게 설치되어 있는지 알고 싶을때 아래 명령어를 터미널에 입력하면 됩니다. /usr/libexec/java_home -V 맥에 설치된 자바 삭제하는 법 터미널에서 ~/Library/Java/JavaVirtualMachines 폴더로 이동합니다. 그리고 ls를 입력하면 설치된 자바 버전이 나옵니다. 그리고 rm -rf azul-21.0.2로 삭제하시면됩니다. 맥에 자바 환경변수 설정(zshrc 기준) 자바 환경설정을 해야되는데 저는 zshrc을 사용하여 zshrc 기준으로 설명드리겠습니다. 우선 터미널에서 code ~/.zshrc 입.. 프로그래밍사업/사이드 프로젝트 2024. 1. 21.
[스프링 부트] h2 database 연결까지 기본세팅 Spring boot와 h2 연결하기 회사 업무로 mssql을 사용하고 있는데 결국 sql을 사용할 수 있는 사람이 저 밖에 없다보니 스프링부트를 이용해서 자주 찾는 데이터는 손쉽게 누구나 찾아 볼 수 있도록 해야될 필요성을 느꼈습니다. 그래서 스프링 부트 3 백엔드 개발자 되기(신선영 지음)과 김영한 선생님의 스프링 강의를 복습하면서 익힌 h2 DB 연결하는 기본 세팅을 정리하고자 합니다. 순서 h2 DB 다운로드 권한 주기(mac만) 실행하기 db 생성 및 접속하기 스프링부트 설정하기 h2 dabase 다운로드 다운로드는 아래 주소에 들어가셔서 받으시면 됩니다. 저는 설치버전이 아닌 zip파일로 받았습니다. https://www.h2database.com/ H2 Database Engine (redi.. 프로그래밍사업/사이드 프로젝트 2024. 1. 21.
[GCP]Cloud Identity-Aware Proxy를 통한 연결 실패:코드: 4003 이유 failed to connect to backend VM에 대한 연결이 방화벽에 의해 차단되었습니다. 오류 구글클라우드플래폼(GCP) 프리티어를 이용해서 VM에 도커로 mysql 서버를 띄워놓고 사용중에 있었습니다. 어제까지 잘 되던 MYSQL 서버가 접속이 안되는 것을 확인하고 에러 메시지를 보니 아래와 같은 화면이 나왔습니다. 코드: 4003 이유: failed to connect to backend VM에 대한 연결이 방화벽에 의해 차단되었습니다. 오늘은 위와 같은 오류가 나왔을때 제가 해결한 방법에 대해 소개 하겠습니다. 사실 소개라고 하는것도 민망할 정도로 간단했습니다. 해결방법은 구글클라우드 VM 인스턴스 중지 1차적으로 VM 인스턴스를 정지했지만 안되었고 중지를 하고 재시작하니 오류 없이 되.. 프로그래밍사업/사이드 프로젝트 2024. 1. 16.
[플러터, 애드몹] 네이티브 광고로 mx 플레이어와 같은 광고 구현하기- 4탄-네이티브와 플러터 연결하고, 플러터로 네이티브 광고 구현하기 이번 시간에는 이제 안드로이드(네이티브) 와 플러터를 연결하고 플러터로 네이티브 광고를 구현하는 것을 정리해 보겠습니다. 여기서 중요한 부분은 "media_ads" 인 factoryId입니다. 이 팩토리 아이디를 이용해서 플러터와 네이티브 UI를 연결할 수 있습니다. package 패키지명 import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin class MainActivity : FlutterActivity() { override fun configureFlutter.. 플러터관련 정보/플러터-안드로이드 개발 2024. 1. 6.
[플러터, 애드몹] 네이티브 광고로 mx 플레이어와 같은 광고 구현하기- 3탄- MediaNativeAdsFactory로 레이아웃(UI, xml) 연결하기 2탄에서 만든 xml파일로 네이티브 광고의 UI를 구현했고 이것을 안드로이드 코드와 연결(?)하는 기능을 하는 MediaNativeAdsFactory 클래스를 구현해보겠습니다. 저는 이 부분을 앞서 만든 네이티브 광고 UI와 안드로이드 시스템을 연결하고 UI에 보여줄 데이터를 입력하는 과정이라 이해했습니다. 저는 자바로 구현했지만 코틀린으로 구현도 가능합니다. 해당 파일은 MainActivity.kt파일이 있는 곳에 만듭니다. MediaNativeAdsFactory 만들기 NativeAdFactory를 구현하는 MediaNativeAdsFactory 클래스를 만들고 NativeAdView를 리턴하는 createNativeAd() 메소드를 구현합니다. 아래 코드를 하나하나 살펴보면 일단 xml로 만든 UI.. 플러터관련 정보/플러터-안드로이드 개발 2024. 1. 6.