profile
기억하기 위해 혹은 잊어버리기 위해 글을 씁니다.

JPA에서 복잡한 쿼리 작성하기

서론 기존 MyBatis로 작성된 쿼리를 JPA로 옮기던 작업중이었다. MyBatis는 조금 자유롭게 SQL을 사용할 수 있기에 아키텍처를 잘 설계하거나 쿼리 작성에 무게를 두지 않으면 이런저런 쿼리들이 많이 작성되게 되는데 살펴보면 애초에 복잡한 쿼리를 작성할 필

2022년 6월 12일
·
0개의 댓글

LeetCode Second HighestSalary

Table: Employee\+-------------+------+| Column Name | Type |\+-------------+------+| id | int || salary | int |\+-------------+------+

2022년 2월 22일
·
0개의 댓글

JPA saveAll에서 insert이전에 select가 일어난다.

한 번에 많은 데이터를 데이터베이스에 저장하려고 할 때 일반적으로 데이터 하나당 insert를 날리는 것보다 값들을 묶어서 batch insert하는 경우가 더 성능이 좋다.여러 데이터를 batch insert하기 위해 List 형태로 데이터를 모아서 saveAll(d

2022년 2월 9일
·
0개의 댓글

Spring Cache Nested Method

스프링에서 캐싱을 사용할 때 특정한 경우에서 캐싱이 작동하지 않는 경우가 있었다. 문제 발생의 이유에 대해 이해하지 못하거나 날아가는 쿼리를 제대로 확인하지 않고 사용시 성능상 큰 문제가 되거나 db가 뻗어버릴 수 있다. 실제 운영db를 눕혀봤다캐싱이 제대로 되지 않

2022년 1월 18일
·
0개의 댓글

Spring Profile 설정 방법

Profile을 설정하는 이유 로컬, 개발 서버, 배포서버의 각 설정이 모두 다르기 때문에 매 번 설정값을 바꿔주는 작업을 자동화 해줄 수 있다. 개발할 때는 IDE에서 그냥 실행하면 되고 개발하다가 바로 개발 서버 혹은 배포 서버로 옮기는 작업을 간단히 하기 위해

2022년 1월 16일
·
0개의 댓글

2021년 회고

대학을 졸업하고 바로 취직에 성공했다. 처음에는 프론트엔드 개발을 주로 공부했지만 막바지에 백엔드에 대한 생각이 깊어져서 결국에는 백엔드 개발자 진로를 정했다. 지금은 모바일 어플리케이션을 개발하는 작은 회사의 백엔드 개발자로 취직했다. 최초에는 IT 대기업, 유니콘

2022년 1월 9일
·
0개의 댓글

QueryDSL 기본 문법

JPA를 공부하며 JPA와 거의 함께 움직이는 QueryDSL의 간단한 세팅과 사용 방법에 대해서 알아보았다. 그 때는 QueryDSL의 필요성을 알아보는 것을 중심으로 글을 작성하며 문법에 대해서는 다루지 않았는데, 이번엔 QueryDSL의 간단한 문법과 Boolea

2021년 3월 28일
·
0개의 댓글

Docker Compose

저번 글을 통해 도커의 기본 개념, 도커를 사용하는 이유와 간단하게 스프링부트 서버를 도커에 올려서 실행해보았다. 그리고 도커 허브에 개인적인 도커 이미지를 푸시해서 가져오는 것도 해보았는데, 도커 허브에는 공식적으로 MySQL, NginX, Apache, Jenkin

2021년 3월 21일
·
1개의 댓글

Docker

서론 https://chan7ee.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%ACubuntu-1804-%EC%97%90%EC%84%9C-%EB%8F%84%EC%BB%A4docker-%EC%84%A4%EC%B9%98-%EB%B0%A9%

2021년 3월 16일
·
0개의 댓글

JPA @Transactional과 FetchType으로 N+1 문제 해결하기

지난 글, 지지난글을 작성하며 JPA의 필요성 및 내부구조에 대해 간략하게 공부해보았다. JPA와 같은 ORM을 사용하면 Java 객체로 쿼리문을 작성할 수 있지만 언제까지나 JPA가 쿼리를 작성하기 때문에 복잡한 쿼리의 경우는 QueryDSL을 사용하고 이에 대해 역

2021년 3월 9일
·
0개의 댓글

JPA와 QueryDSL

지난 번에 JPA의 기본과 내부 구조를 알아보며 QueryDSL에 대해 잠시 언급하였다. QueryDSL은 복잡한 쿼리를 쉽게 바꿔주고 Java와 객체를 이용하여 쿼리문을 작성하게 해주므로 굉장히 유용하다. 지금부터 QueryDSL의 설정과 필요성을 살펴보고 간단히 사

2021년 3월 7일
·
0개의 댓글
post-thumbnail

JPA를 사용하는 이유, 영속성 컨텍스트

백엔드 개발을 처음 배울 때 데이터베이스에 쿼리를 날릴 때는 생 쿼리를 작성해서 넣곤했다. 어떤 언어의 어떤 프레임워크 또는 라이브러리를 쓰느냐에 따라 달랐지만 일반적으로preparedStatement에 쿼리문을 문자열로 넣고 직접 통신하는 방식으로 배웠다.하지만 지금

2021년 3월 5일
·
0개의 댓글

Spring Boot에 Swagger 적용하기

최근에 처음으로 팀으로서 프로젝트를 진행해보았다. 프로젝트 기획 및 프론트엔드 개발 역할로 프로젝트를 진행하였는데, 기획 및 커뮤니케이션 부분에서 많이 부족했고 또 많이 배울 수 있는 시간이었다.디자인을 맡은 팀원과 백엔드 개발을 맡은 팀원과 동시에 커뮤니케이션을 해야

2021년 3월 3일
·
0개의 댓글
post-thumbnail

Spring Boot 예외 처리

개발을 하면서 다양한 예외처리를 하게 된다. 기본적으로는 if, else 등으로 분기를 나누어 아웃풋을 다르게 하는 경우가 있지만 대부분의 경우(특히 범용적으로 사용될 수 있도록 만들어진 라이브러리, 프레임워크) 에서는 exception을 통해 예외처리를 하게 된다.어

2021년 2월 16일
·
2개의 댓글
post-thumbnail

자바스크립트 이벤트 루프

자바스크립트는 싱글 스레드를 기반으로 동작합니다. 자바스크립트의 문법을 적당히 배우고 DOM 조작을 통해 HTML과 CSS를 건드리는 작업도 해보고, NodeJS를 통해 간단한 서버도 작성해보고 이 후엔 프론트엔드에 유용한 라이브러리인 React를 배울 때도 언제나 저

2021년 1월 24일
·
0개의 댓글
post-thumbnail

MVC, MVP, MVVM

사용자에게 보여지는 서비스를 개발함에 있어서 View라는 부분은 필연적으로 존재하게 된다. 그리고 이 View를 어떻게 어떤 방식으로 보여줄 것인지 그리고 어떤 방법이 유지 보수에 유리한지 등을 잘 신경쓰면서 개발해야 한다. 만약 프로덕트의 규모가 커져서 새로운 기능의

2021년 1월 20일
·
0개의 댓글
post-thumbnail

안드로이드 코루틴

서론 저번 글까지 안드로이드의 스레드 구분과 작업 스레드에서 UI 작업을 할 수 있게 해주며 스레드의 메시지 큐에 작업을 넣고 실행시켜주는 핸들러, 그리고 메시지 큐를 계속해서 도는 루퍼까지 해서 안드로이드의 백그라운드 처리에 대해 알아보았다. 이러한 과정을 거쳐서

2021년 1월 9일
·
0개의 댓글
post-thumbnail

안드로이드 루퍼

저번 글에서 안드로이드에서 스레드와 핸들러에 대해 알아보았다. 간단하게 정리하자면 안드로이드는 메인 스레드와 작업 스레드로 나뉘고 메인 스레드는 앱이 시작될 때 생성되어 실행되며 모든 UI 작업은 여기서 처리하도록 되어있다. 그리고 나머지 스레드를 전부 작업 스레드라고

2021년 1월 8일
·
0개의 댓글
post-thumbnail

안드로이드 스레드, 핸들러

서론 작년 운영체제 수업에서 프로세스와 스레드에 대해 배웠다. 굉장히 이론적이고 추상적으로 알고있었고 javascript로 코딩을 할 때에는 스레드에 대해 크게 신경 쓸 일이 없어서(분명 있겠지만 잘 알지못해서) 넘어갔었는데, 안드로이드 os에서는 이 스레드에 대한 처

2021년 1월 7일
·
0개의 댓글
post-thumbnail

안드로이드 Http 통신(Retrofit)

서론 클라이언트단에서 서버로 특정 리소스에 대해 요청을 보낼 때 Http 통신을 한다. Http 통신은 Socket 통신과는 다르게 클라이언트에서 요청한 경우에만 통신이 되므로 서버 비용을 절감하는데 유용하여 많은 경우에 Http 통신 방법을 사용한다. 그리고 Http

2021년 1월 5일
·
0개의 댓글