스터디/Kotlin

[오늘의 에러] Kotlin Internal Test 에러 해결

!! 이상하다 gradle 프로젝트를 reload 하면 다시 돌리고하면 아래와 같이 하지 않아도 문제 해결이 된다. 아무래도 인텔리제이가 프로젝트를 로드 하면서 인덱싱을 할 때 엉뚱한 곳을 바라보면서 발생하는 문제인 것 같다. 흠.. 그냥 맘편하게 internal 키워드를 제거하고 테스트를 작성하는게 나을것 같다.. 물론 이것 또한 추측이다.. 문제 상황 인텔리제이에서 코틀린에서 테스트를 만들면 기본적으로 internal 메서드로 된 테스트를 만들어 주는데 이 테스트를 돌리면 자꾸 에러가 발생한다. Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to dis..

2021.02.10 게시됨

스터디/인프라

[오늘의 에러] localstack과 mesosphere/aws-cli Connection aborted

프로젝트를 하면서 로컬 환경을 개발 환경과 일치시키기 위해서 도커를 많이 쓰고있다. 근데 도커를 사용하니까 이게 내 로컬 환경 설정이 문제인지 도커 환경 설정(도커엔진)의 문제인지, 아니면 도커 이미지 혹은 컨테이너의 문제인지 알 길이 없더라. 오늘은 장장 4일에 걸쳐 해결한 어이없는 문제를 기록하고자 한다. localstack 먼저 문제의 상황에서 localstack을 사용하고 있었는데 나처럼 localstack을 처음 접한 사람을 위해 간단하게 얘기하면 aws의 컴포넌트들(sns, sqs, s3)등을 가상의 환경으로 띄워주는 녀석이다. 로컬 환경에서는 개발 환경 처럼 aws에 항상 sns, sqs 를 구동시켜놓기 힘든데 이렇게 localstack을 사용하면 그러한 문제를 쉽게 풀어갈 수 있다. mes..

2021.01.29 게시됨

스터디/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 게시됨