스터디/JPA

Spring Data Jpa Bulk Insert 하기

나는 내가 모르는 기술을 만나면 반갑기도 하지만 엄청 겁을 먹어버리는데 처음 맡은 업무에서 파트장님이 '이 부분을 JPA 를 이용해서 bulk insert 하도록 변경해주시면 됩니다!' 하셨을 때 살짝 식은땀이 났다. '헉 나 할줄 모르는데..' 다행히 업무를 주시기 전에 어떻게 풀어나가야 하는지 팀 기술 세미나를 통해서 가이드를 해주셨고 무사히 마칠 수 있었다! application.yml 설정 application.yml 에 필요한 설정은 다음과 같다. spring: jpa: properties: hibernate: jdbc.batch_size: 100 order_inserts: true order_updates: true datasource: hikari: data-source-properties:..

2021.01.28 게시됨

생각/기타

나를 빠르게 성장시킬수 있는 방법

유튜브에서 '회사에서 본인을 빠르게 성장시키는 방법' 에 대한 동영상을 시청했다. 동욱님이 페이스북에 작성하신 글을 보고 글에 있던 동영상을 보고 구독하게 된 채널인데, 딱 내가 고민하고 있던 부분에 대한 인사이트를 얻을 수 있는 동영상이 있어서 시청후 간략하게 정리를 했다. 전체 영상은 링크를 타고 가서 시청하면 된다! 내 성장의 피드백 사이클을 짧게 만들어라 연간/반기 리뷰 : 필요하지만 너무 느리다. 분기별 리뷰 & 멘토링 : 적어도 분기별 리뷰가 필요하다. 주/격주 1 on 1 & 동료 피드백 : 팀, 동료에게 허락을 구하고 피드백을 구하도록 하자. 방어적으로 대하지 말고 수용하도록 하라. 자기회고 : 스스로에게 대해 회고를 하면서 자기합리화를 하는게 아니라 장점을 극대화하고 단점을 어떻게 보완할..

2021.01.22 게시됨

스터디/JPA

단방향 @OneToMany 관계에서 발생 할 수 있는 문제점

모든 예제코드는 Github에서 확인 할 수 있다. 김영한님의 JPA 책을 공부하면 단방향 @OneToMany를 사용하는 것을 지양하라고 한다. 외래키 관리의 주체가 아닌 쪽에서 연관 관계를 관리 하게 됨으로써 발생하는 문제들이 있기 때문인데 이 부분에 대해 살펴보고자 한다. 준비 설정 실습에는 flyway로 DB 스키마를 정의하고 생성하였고 application.yml에 hibernate의 ddl-auto 설정을 validate로 설정해 두었다. implementation 'org.flywaydb:flyway-core' spring: jpa: hibernate: ddl-auto: validate 모델 모델은 Menu - MenuProduct 관계로 One to Many로 이어져 있다. CREATE TA..

2020.12.06 게시됨

생각/회고

우아한 테크코스 레벨4 회고 - 내가 꿈꾸는 프로그래머로서의 삶

내가 꿈꾸는 프로그래머를 생각해보니 현재의 내 모습을 만들어준 사람들을 살펴보는 게 좋을 것 같다. 컴퓨터공학부에 들어와서 프로그래밍을 같이 해보자고 제안한 동기를 시작으로 대외활동을 권해준 후배, 대외활동에서 만나 객체지향 프로그래밍을 가르쳐준 친구 그리고 학습을 하면서 많은 가르침을 준 여러 선배 개발자분들까지. 어떻게 보면 지금의 모습은 정말 우연하고 귀중한 만남이 연속된 결과라고 볼 수 있다. 당장은 단기적으로 나도 프로그래밍에 흥미를 가지고 있는 사람들에게 긍정적인 영향을 미칠 수 있는 사람이 되고 싶다. 주변에 프로그래밍에 흥미를 가지고 있지만 혼자 공부하기 힘들어하는 친구들이 보이곤 한다. 과거를 돌아보면 나 또한 흥미를 가지고 있었지만 혼자 공부하면서 내가 옳게 공부하고 있는지 의구심을 가..

2020.11.23 게시됨

스터디

정적, 비정적 클래스 알고 사용하기

자바의 중첩 클래스(Nested Class)에는 여러 가지 종류가 있는데 그중 정적 내부 클래스와 비정적 내부 클래스에 대해 다뤄보고자 한다. 글에서 사용된 코드는 Github에서 확인할 수 있다. 중첩 클래스란 정적, 비정적 내부 클래스에 대해 다루기 전에 중첩 클래스가 생소할 수 있기 때문에 먼저 중첩 클래스에 대해 설명을 하고자 한다. 중첩 클래스는 말 그대로 다른 클래스의 내부에 존재하는 클래스를 의미한다. 중첩 클래스는 특정 클래스가 한 곳(다른 클래스)에서만 사용될 때 논리적으로 군집화하기 위해 사용한다. 이로 인해 불필요한 노출을 줄이면서 캡슐화를 할 수 있고 조금 더 읽기 쉽고 유지 보수하기 좋은 코드를 작성하게 된다. 정적, 비정적 선언 정적 내부 클래스와 비정적 내부 클래스를 나누는 기..

2020.11.06 게시됨

스터디/스프링

Spring Boot에서 properties 값 주입받기

개요 Spring Boot를 이용해서 어플리케이션을 만들다 보면 외부에서 특정 값들을 주입받아야 하는 경우가 있습니다. 예를 들면 AWS의 특정 컴포넌트를 사용하기 위한 secret key가 될 수도 있고 외부 API를 사용하기 위한 API key가 될 수도 있습니다. 이러한 값들을 소스 코드에 하드 코딩한다면 악의적인 의도를 가진 사람이 값을 탈취하여 사용하면서 큰일로 이어질 수 있습니다. 따라서 이렇게 중요한 값들을 application.properties 혹은 application.yml 과 같은 외부 설정값을 관리하는 파일에 적어두고 사용하기도 하고 .jar 파일을 실행하기 위한 커맨드에서 직접 값을 넘겨주기도 합니다. 이번 글은 Spring Boot에서 외부 파일(ex.application.pr..

2020.10.15 게시됨

스터디/JPA

fetch join 과 limit 을 같이 쓸 때 주의하자. (firstResult/maxResults specified with collection fetch)

결론부터 말하면 One에서 Many를 fetch 해야하는 경우 limit과 같은 절(Pagination을 위한)을 포함하면 원하는 대로 결과나 나오지 않는다. 예제코드(+ 테스트코드)는 Github에서 확인할 수 있다. LIMIT 그리고 SET_MAX_RESULT JPQL Pagination을 위해서는 MySQL 기준 limit (그리고 offset) 을 사용해야 한다. 그런데 JPA은 DB에 따라서 방언을 바꾸어 Query를 생성하기 때문에 MySQL 방언에 속하는 LIMIT 절을 JPQL에서 직접 사용할 수 없다. 따라서 아래와 같이 쿼리를 작성하면 QuerySyntaxException, IllegalArgumentException 이 발생한다. @Query("SELECT a FROM Article ..

2020.10.08 게시됨

스터디/스프링

Spring Boot에서 Spring Bean 초기화 과정에 대해 알아보자.

Spring Boot를 사용하면 자연스럽게 Spring Bean을 직접 생성하고 사용할 일이 많아진다. 따라서 우리는 Spring Bean을 생성하는 방법은 당연히 알고 있어야 하고 더 나아가 어떠한 방식으로 등록되는지 알고 있어야 한다. 이 글에서 개발자가 생성하거나 Spring Boot가 제공하는 Spring Bean을 어떻게 사용할 수 있게 되는지 간략하게 알아보도록 하자. Spring Bean을 만드는 방법 개발자가 직접 Spring Bean을 만드는 방법은 두 가지가 있다. @Component 어노테이션을 이용하는 방법과 @Bean 어노테이션을 이용하는 방법이다. @Component 어노테이션의 경우 아래와 같이 클래스에 명시해 주면 된다. @Component public class MyCust..

2020.10.05 게시됨

스터디/네트워크

자원을 수정하는 HTTP 메서드 - PUT vs PATCH

우아한 테크코스에서 같이 글쓰기 근로를 하는 보스독과 함께 작성한 글이다. 들어가며 웹 API를 설계할 때, 최대한 Http 표준을 따라서 용도에 맞는 Http Method를 사용해야 한다는 것은 아마 많은 개발자들이 인지하고 있을 것이다. 이번 글에서는 Http Method 중 특히 자원(엔티티)을 수정하는 용도로 사용하는 Put과 Patch에 대해 다뤄보고자 한다. 개발자들 중에는 Put과 Patch의 차이를 크게 생각하지 않고 아무거나 선택하거나 혼용하여 API를 만드는 사람도 있다. 정말로 두 메서드를 구별없이 사용해도 괜찮은 걸까!? 여기 지하철 노선 정보를 수정하는 자바스크립트 코드가 있다. 지하철 노선(Line)은 이름(name), 첫 차 시간(startTime), 마지막 차 시간(endTi..

2020.09.21 게시됨

생각/회고

우아한 테크코스 레벨3 회고 - 팀 프로젝트가 나에게 남긴 것

🖋 팀 프로젝트가 나에게 남긴 것 새로운 팀 프로젝트는 언제나 환영이야 팀 프로젝트는 언제나 큰 동기부여가 돼요. 무료한 일상에 큰 도전과제가 생기고 자극제가 되기 때문이에요. 사실 언제나 환영이라고 쓰긴 했지만, 걱정이 태산이었어요. 겉으로는 좋아하는 척하지만 속으로는 '큰일 났다! 어떡하지!' 한 것도 사실이거든요! 이런 걱정은 팀 프로젝트를 마음에 들 정도로 완성한 적이 없어서 그랬던 것 같아요. 지금까지 진행했던 프로젝트를 실제 고객에게 제공할 수 있냐고 물어본다면 대답은 '아니오' 거든요. 그럼에도 팀 프로젝트를 하는 것은 큰 성장동력이 되기 때문에 정말 좋아해요. 탐험가들이 미지의 세계로 탐험을 떠나 새로운 경험을 하는 것처럼 이번에는 어떤 이슈가 발생할까? 어떻게 해결할 수 있을까? 와 같은..

2020.08.30 게시됨