전체 글 19

Kotlin/Spring - KaptKotlin Build Falied

문제상황 최근에 새로 시작한 프로젝트가 있어서 entity setting을 마치고 git push를 했는데... ci가 실패하였다..😥 정확한 에러 메시지를 보기 위해 intelliJ를 키고 ./gradlew clean build를 해보니 다음의 에러 메시지가 출력되었다 구글링해보니 spring 3.0으로 넘어오면서 javax가 jakarta EE로 이름이 변경되어서, 기존 javax에서 몇 가지 설정을 추가해주면 된다. implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta") implementation("com.querydsl:querydsl-core:5.0.0") kapt("com.querydsl:querydsl-apt:5.0.0:jakarta") kap..

Trouble 2023.06.06

Test Fixture 란

Test Fixture란? Test Fixture:소프트웨어 테스트에서 필요한 테스트 데이터나 환경을 정의하는 코드 조각입니다 즉, 테스트에 필요한 Test Data의 생성을 쉽게 도와주는 라이브러리입니다. @BeforeEach void 유저_세팅() { //given User user = User.builder() .oauthIdx("68847615") .email("hyunin0102@gmail.com") .name("홍현인") .profileImageUrl("https://avatars.githubusercontent.com/u/68847615?v=4") .bio("한줄소개") .field(BACKEND) .url("https://github.com/honghyunin") .isFirstVisite..

Java 2023.04.21

추상클래스 무엇이고, 왜, 어떻게 사용할까?

최근에 프로젝트를 진행하면서 간단하게 추상클래스를 생성해서 사용해봤는데, 팀원분이 추상메서드도 없고 추상변수도 없는데 어째서 추상클래스를 사용했냐라고 물어보셨는데 정확하게 대답이 나오지 않아서 이 기회에 한 번 정리하고자 합니다. 추상이란? 보통 “추상적”이란 표현은 딱 짚어서 말할 수 없는 어떠한 “개념”이나 모호하여 쉽게 정의할 수 없는 것을 떠올리게 됩니다. OOP에서도 “추상”은 “개념”을 의미합니다. “추상”은 객체가 가진 복잡한 내부 구현을 숨기고 필요한 정보와 기능만 제공하는 것입니다. 이렇게 함으로써 사용자가 객체를 쉽게 사용할 수 있도록 인터페이스를 제공하고 세부적인 로직은 감춥니다. 예를 들어, 커피 머신이라는 객체가 있다면 사용자는 커피 머신이 어떻게 작동하는지 알 필요 없이 버튼만 ..

Java 2023.03.24

[Intellij] 코드 템플릿, 코드 자동완성 기능

Kotest 작성 중에 계속해서 dci 패턴을 반복적으로 작성하는 것이 불편했는데, 요즘 유용하게 사용하고 있는 기능이 Intellij에 있어서 소개하고자 합니다. Settings -> Live Template -> 우측 Add Plus 버튼 -> 1 Live Template Abbreviation: 자동완성 단축 명령어 ex) sout -> System.out.pritnln() Description: 단축 명령어를 입력했을 때 나오는 설명, 코멘트 Template text : 실제 자동완성으로 작성 될 코드 Define: 어떤 언어에서 자동 완성할지 설정해주는 부분입니다

dev 2023.03.07

로깅 - 무엇을, 어떻게 남겨야 할까

안녕하세요 최근 프로젝트를 진행하면서 예외가 발생하거나 따로 정보를 추가해야할 경우에 로깅을 주로 사용했는데요, 이때 정확히 어떤 레벨로 어떤 메시지를 남겨야 하는 지 자세히 알아보고자 해당 글을 작성하게 되었습니다. 선원들이 사용했다고? 로깅이란 단어는 배를 타는 선원들끼리 먼저 사용하고 있었는데요, 선박의 속도를 측정하기 위해 바다에 chip log 라는 장치를 띄움으로써 속도를 측정할 수 있었다고 합니다. 또한 선장들이 작성하는 항해일지를 logbook 이라고 했다고 합니다. '로깅'은 이때부터 '무언가를 기록하는 행위'로써 사용되어 지금에 이르러서까지 사용되고 있습니다. 왜 기록해야 할까? 사실 이 질문에 대한 답은 서비스를 배포하여 운영해보신 분들이거나, 관련된 공부를 해보셨으면 바로 나올 수 ..

dev 2023.01.03

[Intellij] - Couldn't check commit: Kotlin resolution encountered a problem while analyzing KtNameReferenceExpression

어떤 이유에선지 모르겠지만, Intellij IDE로 개발을 하던 도중 특정 파일이 자동 빌드가 되지 않아 syntax 검사가 되지 않고, 이후 작업을 다 마친 이후에 커밋도 되지 않았었다. 나는 혹시 캐싱 되어 있는 파일이 문제인가 싶어서 인덱싱을 모두 다 지우고 intellij를 재부팅하니 다시 커밋과 자동 빌드가 되었다! FIle -> Invalidate Caches -> Mark downloaded shared indexed as excluded 선택하고 재시작을 하면 된다!

Trouble 2022.12.28

DI를 쓰려면 꼭 IoC를 써야할까?

DI를 사용하는데 꼭 IoC가 필요한 것인지, 그렇지 않다면 IoC를 사용하지 않고 DI를 어떻게 구현할 수 있는 것인지 생긴 궁금증을 해소하던 과정을 작성한 내용입니다. DI와 IoC를 이해하신걸로 가정하고 글이 진행되오니 이 점 양해부탁드립니다!! DI란? 간단하게 설명하자면 DI(Dependency Injection)는 "의존성 주입" 이란 뜻을 가지며, 클래스 내부에서 다른 클래스의 메소드를 사용할 수 있습니다. 이를 통해 객체지향 프로그래밍에서 코드를 일종의 "도구"로써 가져와 사용할 수 있는 것입니다. 제가 궁금한 점을 보기 전 우리가 보통 사용하는 DI를 살펴보겠습니다. @Requiredargsconstructor public DependencyClass { private final Inje..

Spring 2022.12.20

프로젝트 - 전적 갱신 리그 로직 리팩토링기

최근 라이엇 API를 이용해서 프로젝트를 하나 개발하고 있는데요, 전적 갱신 API 개발을 마치고 보니, 리팩토링 하고 싶은 것들이 몇 개 있어 그 몇 개를 리팩토링한 것을 글로 담아보았습니다. 전적 갱신의 로직은 크게 총 세가지로 분류할 수 있는데 다음과 같습니다. 한 게임에 참여한 소환사 등록 경기 정보 저장 전적 갱신을 시도한 소환사의 리그 정보 등록 오늘 할 리팩토링은 이 중 3번인 리그 정보 등록입니다 전적 갱신을 시도한 소환사의 리그 정보 등록 소환사 리그 정보 등록은 랭크 게임에 대한 정보를 나타내는데요, 랭크 별 현재 티어와 점수, 승리한 수와 패배한 수를 나타냅니다. 출처 op.gg의 필자의 리그 정보 리그는 자유랭크와 솔로랭크로 나뉘어, 각 랭크별로 티어와 점수가 따로 존재합니다. 리그..

Project/Glol 2022.12.19

[NHN Forward - 26] 나의 Webflux가 느린 이유

이 글은 foward의 세션 26번 나의 Webflux가 느린 이유 영상을 보고 쓴 메모와 제가 이해한 부분을 덧붙여 작성한 글입니다. https://www.youtube.com/watch?v=I0zMm6wIbRI https://forward.nhn.com/2020/session/26 Spring WebFlux 선택 이유 현재 서버에서 요구하는 스펙이 빠른 응답 속도와 높은 처리량이므로, 이에 맞는 WebFlux 스텍을 사용한 것입니다. RDB + Spirng MVC 라는 선택지도 있지만 광고 노출을 담당하는 서버는 WebFlux가 적합하기에 이를 선택했습니다. Spring MVC와 WebFlux의 Thread model 차이점 Spring MVC Thread Per Request Model Thread..

Session 2022.12.15