본문 바로가기

프로그래밍사업/사이드 프로젝트41

[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.
[스프링부트/업무일지 만들기] 업무일지 화면을 보여주는 컨트롤러를 만들기-최신 순서로 정렬하기 앞서 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.
[스프링부트/업무일지 만들기] 업무일지를 저장하고 수정하고 삭제하고 읽어오기 이번에는 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.
[업무 자동화] 자바로 엑셀 파일 읽어서 데이터 모으자 매일 같이 우리는 회사에서 엑셀 파일을 이용해 자료를 작성하는데 엑셀파일에서 필요한 부분만 찾아서 모으고 싶을 때 일일이 파일을 열어서 복붙해야하는 노가다를 해야합니다. 그럼에도 스프링이나 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.
[spring] application.properties 여러개 만들어서 편하게 설정 변경하기 스프링(SPRING)의 다양한 환경에 따라 application.properties 적용하기 스프링 개발을 하다보면 application.properties를 상황에 따라 바꿔야할 때가 있습니다. 예를 들면 혼자 개발할 때의 DB서버 설정, 같이 개발할 때 DB서버 설정, 테스트 서버와 연결할 때 설정 등등 그때 마다 주석처리하고 풀고하는 방법도 있지만 개발환경에 여러개라면 이것도 쉬운 방법은 아닙니다. 그래서 이번에는 application.properties를 여러개 만들어서 사용하는 법을 정리하고자 합니다. 1. application-{설정명}.properties 파일을 만들기 파일 이름을 application-{설정명}.properties과 같이 만듭니다. 아래 예시 코드는 스프링에서 mysql 서.. 프로그래밍사업/사이드 프로젝트 2023. 2. 11.
[자바] 날짜를 요일로 바꾸기 날짜를 요일로 바꾸기 파이썬이든 SQL이든 심지어 엑셀에도 날짜관련된 자료형에는 요일을 구하는 기능이 포함되어 있습니다. 이번에는 자바를 이용하여 날짜를 요일로 바꾸는 방법에 대해 알아보겠습니다. 자바8 이상부터는 LocalDate 클래스의 getDayOfWeek() 메서드를 통해 날짜를 요일로 바꿀 수 있습니다. 게다가 숫자가 아닌 FRIDAY와 같이 영어로 나와 더 알기 쉬운거 같습니다. 구현 순서 String 형태의 날짜를 입력한다: "2022-12-8" 또는 "2022-12-08" 한자리 숫자 앞에 0이 들어가냐 안들어가냐에 따라 포맷터가 달라집니다. 포맷터를 설정하기: 2022-12-8로 입력하면 포맷터가 달라집니다. DateTimeFormatter.ISO_LOCAL_DATE 포맷터를 사용하면 .. 프로그래밍사업/사이드 프로젝트 2022. 12. 9.
[스프링 부트 + JPA + MySQL] 간단한 회원 관리 예제로 알아보는 스프링 부트 -4탄 Controller와 웹화면 만들기 마지막으로 실제 웹 화면을 보여주는 Controller부분입니다. 이 부분은 자바 뿐아니라 HTML도 어느 정도 알고 있어야되는 부분입니다. 처음 스프링을 공부하기로 마음 먹고서 패스트캠퍼스의 남궁성님의 강의과 인프런의 김영한님의 강의 중에 고민을 많이 했는데 저는 김영한 님의 강의를 선택하였습니다. 그 이유는 1. 무료로 스프링부트가 어떤거구나 알려주는 강의여서 2. 배달의 민족과 같이 대규모 서비스를 구축해본 경험과 실제로 사용하는 것만 가르쳐준다 이 두가지 이유로 김영한님의 강의를 선택하였고, 유료 강의도 두개 이미 결제하였습니다. 아무튼 스프링 부트를 시작하시려는 분들께 저의 포스팅이 조그이나마 도움이 되실기 빕니다. 그럼 마지막 컨트롤러 부분을 시작해보겠습니다. HomeController 만들기.. 프로그래밍사업/사이드 프로젝트 2022. 11. 16.
[스프링 부트 + JPA + MySQL] 간단한 회원관리 예제로 알아보는 스프링 부트 -3탄 Service 만들기 서비스 부분은 앞서 만든 Repository를 이용하여 회원가입, 회원조회 등 실제 서비스를 구현하는 부분입니다. 사실 Repository와 Service부분을 합쳐도 되는거 아니야 라고 생각을 했지만 김영한님의 스프링 강의를 쭉 들어보니 각각의 기능들을 구분하고 분리해놔야 유지보수가 쉽다는 것을 알았습니다. 예를 들어 입문 강의에서 JDBC 템플릿에서 JPA로 바꾸는 과정에서 repository와 service가 합쳐져 있으면 바꿔 끼우는것이 어려웠을텐데 코드 한줄만 바꾸면 쉽게 교체가 되었습니다. 자세한 내용은 인프런 스프링 부트 입문 강의를 들어보시면 알수 있습니다. [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가.. 프로그래밍사업/사이드 프로젝트 2022. 11. 15.
윈도우에서 스프링 빌드(build) 하는 방법 Spring 윈도우에서 빌드(build)하는 방법 1. cmd 창을 열어 프로젝트 폴더로 갑니다. 2. gradlew.bat 치고 엔터 3. gradlew build 치고 엔터 4. build -> libs 폴더로 갑니다. 5. 프로젝트명-0.0.1-SNAPSHOT.jar 파일 있는지 확인 후 6. 그 파일이 있는 폴더로 가서 java -jar 프로젝트명-0.0.1-SNAPSHOT.jar 입력 매번 이렇게 하기 귀찮으면 배치 파일을 만들어서 사용하시면 쉽게 서버를 기동할 수 있습니다. 프로그래밍사업/사이드 프로젝트 2022. 11. 14.