본문 바로가기

전체 글64

N+1 문제 다양한 해결법 서론 JPA를 학습하면 무조건 듣는 키워드는 N+1 이다. 보통 블로그에서 소개하는 방식은 fetch join을 통하여 문제를 해결한다고 이야기한다. 물론 틀린 방식은 아니다. 하지만 실제 프로젝트를 만들면서 N+1 문제를 많이 만나보면서 N+1을 처리하는 방식은 여러가지가 있다. 상황에 따라서 N+1 문제를 처리하는 방식을 적절하게 해결하는게 성능 저하의 문제에 대응할 수 있다고 생각했다. 글을 시작하기 이전에 간단하게 정리하면 1:1 연관관계 : Fetch join Collection 연관관계 : default_batch_fetch_size N개의 컬렉션을 fetch join을 하면 MultipleBagFetchException이 발생한다. 특정 컬럼을 조회할 경우에 join을 하고 Projectio.. 2023. 12. 15.
블로그 이사 https://velog.io/@geon_km geon_km (Mugeon Kim) - velog JPA Batch Insert를 통하여 성능 개선 (MySQL, JdbcTemplate) 기존에 프로젝트를 진행하면서 문제를 생성을 일일이 Insert 해야되는 문제점을 발견하여 대량으로 Insert의 문제점을 발견을 하였습니다. 이러한 velog.io 작년부터 글을 Tistory에서 작성을 했는데 마크다운이 너무 불편해서 Velog에서 글을 작성을 합니다. 2023. 7. 22.
[ 서버 사이드 프로젝트 챌린지 ] 23.04.15 - week8 & 회고록 1. 이번 주 스터디에서 학습한 내용 GitHub - Side-Challenge-Study-Time/StudyTime_BE: 스터디 타임 프로젝트(Back_End) 스터디 타임 프로젝트(Back_End). Contribute to Side-Challenge-Study-Time/StudyTime_BE development by creating an account on GitHub. github.com 이번 주 스터디에서는 프로젝트 마무리를 위한 점검 및 발표 시간을 가졌습니다. 이를 통해, 저희 스터디의 성과와 발전을 공유하고, 다른 스터디 팀원들에게도 저희가 마주한 문제와 해결방법, 그리고 스터디를 통해 얻은 경험을 공유할 수 있는 좋은 시간이었습니다. 스터디 타임 프로젝트(Back_End)은 짧은 시간.. 2023. 4. 23.
[ 웹개발 배포 챌린지 스터디 ] 23.04.22 - 회고록 1. 이번 주 스터디에서 학습한 내용 이번 주에는 CI/CD를 구현하는 데 있어서 새로운 방식을 시도해보았습니다. 하지만, 많은 어려움을 겪었습니다. 스크립트 작성 부분에서 많은 오류가 발생하였고, 이를 해결하는 데 많은 시간과 노력이 필요했습니다. 우선, 기존에 학습한 Jenkins 스크립트를 활용하여 CI/CD 파이프 라인을 구현하였는데 Workspace에 Docker를 이용하여 실행하고, 변경된 사항을 Git webhook을 통해 Jenkins workspace에 적용시키는 방식을 사용하였습니다. 그러나, 이번에 시도한 방식은 기존에 사용하던 방식과는 다르기 때문에, 처음부터 모든 것을 새롭게 학습해야 했습니다. 이로 인해 많은 오류가 발생하였고, 이를 해결하는 데에도 시간이 많이 걸려 많은 고민을.. 2023. 4. 23.
[ Jenkins ] Jenkins Pipeline을 이용한 CI/CD + SSHAgent [ 1. 글을 작성하는 이유 ] 프로젝트를 하면서 마지막으로 Jenkins를 이용한 파이프라인 CI/CD를 하면서 너무 많은 오류를 만났습니다. 학습한 내용을 정리하는 시간을 가지게 되었습니다. 이 작성 글에는 중복적인 내용이 있기 때문에 위에 글을 보시면 도움이 됩니다. [ 2. Jenkins Pipeline에 대해서 알아보자 ] 이번에 진행할 배포는 파이프라인을 이용을 해서 하려고 합니다. 일단 기본적으로 Jenkins 인스턴스와 Workspace 인스턴스를 연결하기 위해 SSH 프로토콜을 사용합니다. 이후 Jenkins에서 빌드한 jar파일을 Docker에 올려서 Workspace에 실행하는 방식을 사용을 하려고 합니다. 추가적으로 Git에 Git Webhook을 이용해서 변경된 사항을 파악하여 J.. 2023. 4. 23.
[ Swagger ] Swagger UI를 통해 API 명세서 Postman 공유 1. 글을 작성한 이유 프로젝트를 하면서 API 스펙을 공유하기 위해 다양한 방법을 찾았습니다. 보통 API 문서화를 하기 위해서는 Rest DOCS와 Swagger를 통해서 API를 문서화를 했다. 저희는 Swagger를 선택을 하였고 문서화를 하였으나 문서화를 다른 사람에게 공유하기 위해서 방법을 찾던 도중에 배포를 하지 않고 Postman으로 문서 공유화가 가능하여 글을 작성을 했습니다. 2. Swagger UI 적용하기 처음에 Gradle에 의존성을 추가를 합니다. implementation 'org.springdoc:springdoc-openapi-ui:1.6.9' 이후 Config작업을 합니다. @Configuration public class OpenApiConfig { @Bean publi.. 2023. 4. 21.
[ AWS ] Docker + AWS EC2 Aphache/ MySQL 개발환경 구축하기 1. 글을 작성하는 이유 AWS EC2를 사용하면서 RDS를 사용하면 너무 많은 비용이 들어 EC2에 MySQL을 연결 및 Apache 개발 환경을 구축하는 시간을 가지려고 합니다. 기존의 내용과 중복되는 내용이 있기 때문에 이전에 작성한 블로그를 참고하여 하시면 좋다고 생각합니다. 2. Aphache 서버 구축하기 Dockerfile 작성하기 ubuntu@ip-172-31-32-99:~$ mkdir example ubuntu@ip-172-31-32-99:~$ cd example/ ubuntu@ip-172-31-32-99:~/example$ sudo vi Dockerfile ubuntu@ip-172-31-32-99:~/example$ cat Dockerfile FROM ubuntu:20.04 MAINTA.. 2023. 4. 21.
[ Jenkins ] Jenkins FreeStyle Github 배포하기 1. 서론 안녕하세요. 이번에는 저번에 했던 배포에 Github를 추가하여 배포를 해보겠습니다. 이번에 배포에 대해서 간단하게 설명을 하겠습니다. 저번에 FreeStyle 배포에 Github를 추가하여 배포를 하려고 합니다. 만약에 저번에 배포가 궁금하시면 이 블로그를 보시면 될거 같습니다. [ Jenkins ] Jenkins Item Freestyle CI/CD 배포 1. 서론 안녕하세요. 이번에는 AWS EC2에서 Jenkins Item에 FreeStyle 배포에 대해서 학습한 내용을 정리하기 위해 글을 작성을 했습니다. 배포를 크게 2개로 나누어 Github를 사용하지 않는 방식과 사용하 pos04167.tistory.com 기존에 했던 내용의 중복이 있습니다. 기존의 블로그에서 SSH 연결까지 확.. 2023. 4. 21.
[ Jenkins ] Jenkins Item Freestyle CI/CD 배포 1. 서론 안녕하세요. 이번에는 AWS EC2에서 Jenkins Item에 FreeStyle 배포에 대해서 학습한 내용을 정리하기 위해 글을 작성을 했습니다. 배포를 크게 2개로 나누어 Github를 사용하지 않는 방식과 사용하는 방식으로 정리를 하겠습니다. 혹시 Jenkins에 대해서 처음 학습을 하신다면 기존에 정리한 Jenkins에 대해서 한번 보시는걸 추천을 합니다. [ Jenkins ] Jenkins CI/CD 무엇인가? 1. 글을 작성하는 이유 안녕하세요. 이번에는 Jenkins를 학습한 내용을 정리를 하려고 합니다. 사실 Jenkins를 학습한 이유는 신입으로 취업을 하기 위해 우대사항을 보면 Jenkins CI/CD 파이프라인 우대 pos04167.tistory.com 2. 본론 일단 하나.. 2023. 4. 19.
[ Git ] 프로젝트를 하면서 Git Flow를 어떻게 사용을 했는가? 1. 글을 작성한 이유 안녕하세요. 제가 이번에 프로젝트를 하면서 Git Flow 방식을 어떻게 사용을 했는지 정리하는 글을 작성을 하였습니다. 물론 Git flow 방식에 대한 자료는 지금 많이 있지만 저는 프로젝트를 하면서 시중에 있는 내용을 다 이용하기 보다는 프로젝트 규모와 현재 상황에 따라 조금 다른 방식으로 진행하여 공유하면 좋다고 생각하여 글을 작성을 하였습니다. 2. Git VS SVN 지금까지 팀 프로젝트는 2개를 진행을 하였습니다. 처음은 국비지원에서 진행한 SVN 협업 프로젝트 그리고 지금 Git으로 진행한 프로젝트가 있습니다. 그러면 SVN과 Git에 대해서 차이점에 대해 조금 살펴보는 시간을 가지겠습니다. Git과 SVN은 형상관리 툴로 소스의 변화를 끊임없이 관리를 합니다. 소스.. 2023. 4. 16.
[ 웹개발 배포 챌린지 ] 23.04.15 - week3 1. 이번 주 스터디에서 학습한 내용 이번 주에는 Jenkins를 통한 FreeStyle 배포를 연습을 하였습니다. 이 경우에는 ssh와 docker에 대해 학습이 더 필요하다고 생각을 하였습니다. 현재 FreeStyle에 대한 배포를 성공을 하였고 학습한 내용을 정리할 생각을 가지고 있습니다. 일단 Jenkins를 통한 배포는 Jenkins 인스턴스와 Work 인스턴스를 연결하기 위하여 ssh 설정을 하고 Docker를 이용하여 빌드한 이미지를 docker hub에 말아서 올립니다. 이 경우 free style 배포를 할 경우에는 jenkins에서 빌드하면 work 인스턴스에 pull을 통하여 실행이 되고 work의 탄력적 ip를 통하여 접속하면 정상적으로 실행이 되었습니다. 2. 과제 1. Jenki.. 2023. 4. 16.
[ 서버 사이드 프로젝트 챌린지 ] 23.04.15 - week7 1. 이번 주 스터디에서 학습한 내용 이번 주에는 코드 리뷰 및 JWT에 대해서 학습을 했습니다. 저번 주 내용과 중복되는 부분이 있는데 다른 스터디 참가 인원들이 JWT에 대한 이해도가 부족하여 2주간 학습을 했습니다. 일단 저는 JWT를 학습을 코드숨에서 처음 접하게 되었습니다. 이후 프로젝트에서는 Refresh Token과 Redis를 추가적으로 넣어서 기술을 고도화 시켰습니다. 이번 주에는 Spring Security와 JWT에 대해서 발표하고 왜 JWT를 학습을 해야되는지 학습하는 시간이 되었습니다. 2. 발표 이번 주는 저번 주와 비슷한 내용을 발표하여 저는 이번에 현재 진행하고 있는 프로젝트 진행도에 대해서만 발표를 하였습니다. 다른 스터디 인원에게 제가 이번 주에 기술 고도화 및 협업에 대.. 2023. 4. 15.