본문 바로가기

전체 글99

[Spring] @EnableJpaAuditing과 createdAt의 연결고리 진행 중인 프로젝트에서 특정 엔티티에 post api 요청을 통해 request dto의 내용이 튜플로 추가되어야하는 시간이 DB에 함께 저장되어야 하는 기능을 구현해야 했다. (updated_at도 기본적으로 있으면 좋으나 이 프로젝트에서는 created_at만 필요했다)이 과정에서 헤맨 부분과 어떻게 해결했는지에 대해 남기려고 한다. 코드는 이 PR 링크에서 확인할 수 있다. 문제 상황 : 'createdAt' cannot be null분명히! 아래와 같이 created_at에 대해 column을 정의하고 package com.whoa.whoaserver.global.common;import jakarta.persistence.Column;import jakarta.persistence.EntityL.. 2024. 5. 8.
[Scala] 스칼라를 공부하는 목적 - Apache Spark 언어를 제대로 습득하기에 앞서 궁극적으로 무엇을 위해서 배우는지 목표를 명확하게 하고자Intro to Apache Spark for Java and Scala Developers라는 유튜브 강의를 보면서 내용을 요약하고자 한다.  Spark 프레임워크란Spark는 데이터가 여러 곳에서 나누어서 처리되도록 데이터 분산 처리를 용이하게 만들어주는 대표적인 프레임워크이다. 이를 가능하게 해주는 Spark 내 컴포넌트들이 있는데 아래와 같다.1. Driver : 클러스터의 브레인(1개) 역할을 한다. Spark 어플리케이션을 task로 나누고 스케쥴링을 한다. SparkContext를 실행하고 관리한다. 2. Executor : 다수 개이며 데이터 처리를 한다.  분산 시스템에서 컴포넌트끼리 통신하는 방식1. .. 2024. 5. 5.
[Scala] 스칼라에 대해 배워보자! 특징부터 설치까지 개발 언어로 Java를 사용하다보니 같은 JVM 위에서 실행되는 Scala에도 관심을 가지게 되어 배워보고 싶다는 생각이 들었다. 이 레포지토리에 정리할 예정이다. Scala는 빅데이터와 데이터 사이언스 분야에서 효율적인 데이터 처리 및 분석에 사용되는 효율적인 프로그래밍 언어로 알려져있는데 특징은 아래와 같다. Scala는 무엇인가1. modern, high-level programming language로써 object-oriented && functional programming(first-class citizens, immutability, higher-order functions)을 돕는다.2. Scala라는 언어의 이름은 Scalable Language에서 비롯되었다고 한다.3. JVM(Jav.. 2024. 5. 5.
[Spring] N+1 문제를 해결하여 조회 쿼리 성능을 높여보자 이전에는 내가 이 기능을 구현을 할 수 있느냐 없느냐가 관건이었지만 이제는 능력있는 백엔드 개발자가 되기 위해 어떻게 하면 더 잘 짤 수 있을까를 고민하게 되면서 성능 최적화에 관심을 가지게 되었다. 일차적으로 기능 구현에 초점을 두고 배포 이후 리펙토링을 하는 단계로 작업을 하고 있는데 N+1 문제를 맞닥뜨리게 되면서 조회쿼리의 실행 시간을 단축시키거나 쿼리 수를 줄이는 성능 향상 과정에 대해 작성하고자 한다. 진행 중인 프로젝트에서 1차 MVP 기능 구현은 모두 완료했고 프론트분들께서 기능 구현을 하시는 단계인데 구현이 끝났다고 해서 손을 떼버리면 항상 배움의 자세를 갖춰야 하는 개발자의 자질에 어긋난다고 생각되어 내 나름대로 리팩토링 시간을 가지고 있다. 이 PR 링크에서는 내가 맡은 기능에 대해 .. 2024. 5. 4.
[Spring] kotlin + security + jwt 구현 과정 트러블 슈팅 백엔드 실제 개발을 처음 시작한 2024년 1월 경 spring security부터 맡게 되어서 허덕인 부분이 많았는데 그 당시 깊이있게 보지 못했던 원리에 대해서 공부(정리한 이슈 링크)하고 security 부분을 보완하고자 나의 첫 번째 개발 언어였던 애틋한ㅋㅋ kotlin으로 다시 구현해보려고 하였다. 소스 코드와 구현 과정 중 어떤 부분에서 오류가 났고 어떻게 코드를 설계했는지에 대해 배운 점을 기록하고자 한다.  Security가 작동하고 있다면 SecurityConfig의 permitAll을 통해 401을 예방하자윗 문장은 내가 kotlin으로 구현한 spring security 적용 회원가입, 로그인 + jwt 과정에서 얻은 배운 점이다. 아래에서 깃헙 이슈 링크에서 적었던 절차에서 확인할 .. 2024. 4. 28.
[DB] index 보호되어 있는 글 입니다. 2024. 4. 26.
[Java] stream API 보호되어 있는 글 입니다. 2024. 4. 24.
[Java] Record Java 14에 새롭게 추가된 record에 대해 알아보고 이를 활용할 방안을 제시하며 record 관련 질문들에 대비하는 시간을 가져보려고 한다.  Record의 경우 백엔드 프로젝트에서 dto를 class가 아니라 record 타입으로 짜는 다른 분의 코드를 보고 처음 알게 되어 내가 직접 dto에 record를 적용하면서 record의 진가에 대해 알게 되었다. Record란?레코드는 코틀린의 data class라고 생각하면 이해하기 쉽다. 정말 순수하게 코틀린의 data class처럼 데이터를 보유하기 위한 specific class이다. 아래는 실제 내가 프로젝트에서 적용한 record이다.package com.sejong.sejongpeer.domain.honbab.dto.response;im.. 2024. 4. 22.
[Spring] 선착순 티켓 예매 동시성과 잠금 여부 고민 티켓 예매 상황에서 고려해야 할 사항은 크게 두 가지가 있다. - 요청 순서에 따라 티켓을 발급할 수 있는가- 준비된 수량만큼 발급할 수 있는가 엔티티에 락을 걸지 않고 동시성 문제를 해결할 수 있는 방법으로는 무엇이 있을지 실습을 통해 고민해보았다.싱글 스레드 모델을 적용하거나 메세지큐를 사용하지 않고 불변성을 이용하여 순서를 먼저 확정함으로써 특정 순서 이전의 티켓을 발급할 수 있도록 로직으로 설계한다면 잠금 없이 기존 환경 그대로 선착순 티켓 예매가 가능할 것이라는 생각이 들었다.  마치 은행에 가면 대기 번호표를 뽑듯이 티켓 발급 요청이 들어왔을 때 티켓을 순서대로 발급하고 정해진 수량만큼만 발행을 한다면 불변성을 이용해서 잠금 없이 동시성 처리가 가능하다. 아래는 소스 코드를 어떻게 설계했는지에.. 2024. 4. 16.