반응형
MySQL이 SEQUENCE를 지원하지 않는 이유
·
프로그래밍
https://blog.giwon.dev/articles/mysql%EC%9D%80-%EC%99%9C-sequence%EB%A5%BC-%EC%A7%80%EC%9B%90%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94%EA%B0%80 Giwon's Blog© 2026 Giwon. All rights reserved.blog.giwon.dev위 블로그에서도 감상 가능합니다. 0. JPA IDENTITY 전략 사용에 대한 의문회사에서 batch insert 사용을 위해 application.yml에 batch 설정을 했는데도 배치 INSERT가 동작하지 않았다.spring: jpa: properties: hibernate: jdbc: batch_s..
claude-daily-review 플러그인 개발기
·
카테고리 없음
(이 블로그에서도 동일한 컨텐츠를 제공합니다.)https://blog.giwon.dev/articles/3 일단 플러그인 링크부터 투척 ㅎ https://github.com/giwonn/claude-daily-review 만든 계기회고를 쓰려고 하면 항상 같은 문제가 생긴다.프로젝트의 시작과 끝은 기억나는데, **중간 과정이 떠오르지 않는다.** "그 때 왜 그렇게 결정했더라?", "그거 해결했지?" 같은 것들이 흐릿해진다. 결국 회고는 매번 비슷한 패턴이 된다. 시작은 이랬고, 결과는 이렇다. 중간은 대충 넘어간다.그런데 생각해보니, 나는 일할 때 Claude를 항상 달고 산다. 코드를 짜면서 하는 고민이나, 삽질하는 과정, 의사결정까지 전부 대화에 남아있다. 그러면 이 대화 내역 자체가 회..
@Transactional - 스냅샷은 첫 쿼리에 만드는데, 커넥션은 왜 미리 잡을까
·
프로그래밍
하기 블로그에서 동일한 컨텐츠를 제공합니다.https://blog.giwon.dev/articles/2 @Transactional 메서드 안에 섞여 있던 외부 API 호출을 트랜잭션 밖으로 분리하다가, 문득 생각이 들었다. 스냅샷은 쿼리 첫 호출때 생성하면서 왜 커넥션은 미리 잡지? MySQL의 기본 격리 수준인 REPEATABLE READ에서 스냅샷은 첫 번째 쿼리 시점에 생성된다.그런데 커넥션은 @Transactional 메서드에 진입하는 순간, 쿼리를 하나도 실행하지 않았는데 이미 잡혀 있다.AOP라서 메서드 진입 시점에 잡는 거 아닌가? 처음엔 그렇게 넘어가려 했다. 그런데 생각해보니 좀 이상했다.스냅샷도 AOP 시점에 미리 만들어두면 될 텐데, 스냅샷은 첫 쿼리까지 기다린다.같은 트랜잭션 안에..
[Spring] @Transactional이 동작하지 않는 이유와 Spring AOP
·
BackEnd
오늘은 Spring AOP에 대해 글을 써보려 한다.Spring AOP가 어떤 방식으로 프록시를 사용하는지 알아보자. 재고 차감 시나리오익숙할만한 코드를 하나 준비했다. 사용자가 주문하면 재고를 차감시키는 로직이다.@Service@RequiredArgsConstructorpublic class OrderService { private final OrderRepository orderRepository; private final ProductRepository productRepository; public void order(Long productId, int quantity) { // 1. 주문 정보 저장 Order order = createOrde..
[DDD] 코드를 기술적 관심사와 분리하기
·
프로그래밍/객체지향 설계
도메인 주도 설계(DDD)는 현실 세계의 문제를 도메인 중심의 코드로 모델링하는 접근이다.핵심은 기술보다 해결 규칙에 집중하는 것이다. 그런데 실제 코드를 작성하다 보면, 우리는 종종 코드로 명시적인 로직을 작성하기보다 DB나 외부 시스템에서 제공하는 메서드로 한번에 해결하고는 한다. 아래 코드를 한번 보자.public class UserService { private final UserRepository userRepository; public void ValidateNewUser(String email) { if (userRepository.existsByEmail(email)) throw new DuplicateEmailException(); }} 회원가입을 시도했을 때..
항해 플러스 백엔드 과정 후기
·
프로그래밍/후기
8월 쯤부터 퇴사를 해야겠다고 생각했고, 타협 끝에 11월에 회사를 퇴사했다.퇴사하기로 결정하고나서 면접도 많이 보았다. 면접을 보며 자기객관화도 많이 된 것 같다. 면접을 보며 깨달은 것들면접을 보며 실력이 부족함을 많이 느꼈다.내가 주로 해온 업무들에 대해서는 나름 대답할 수 있었지만, 그 외에는 대답하기 힘들었다. 특히, 공부만으로는 내 것이 될 수 없다는 걸 절실히 깨달았다.이론적으로는 알고 있어도, 실제로 업무에 적용해보지 않으니 면접에서 제대로 설명하기 어려웠다. 그러면 내 것으로 만들려면 어떻게 해야 할까?스스로 공부하는 법을 잘 모르기에, 다른 사람들과 함께 성장하는 것이 필요하다고 느꼈다. 항해를 선택한 이유내가 항해를 선택한 이유는 크게 두 가지다. 1. 개발자들과 네트워킹을 하고 싶어..
[Nest.js] 데코레이터로 트랜잭션 주입해보기
·
BackEnd/Nest.js
Spring에서는 @Transactional을 이용해 트랜잭션 사용이 가능하다.이는 DB 라이브러리 개발자들이 Spring의 트랜잭션 추상화에 맞게 구현했기 때문이다.하지만 Nest.js는 트랜잭션 관련한 추상화된 스펙을 제공하지 않는다.그렇기에 라이브러리에서 제공하는 트랜잭션 명세에 전적으로 의존하게 된다.예를 들면 Prisma의 트랜잭션 사용 방법은 다음과 같다. import { Injectable } from '@nestjs/common';import { PrismaService } from '../prisma.service';import { User } from '@prisma/client';@Injectable()export class UserService { constructor(privat..
[Nodejs] 비동기 API라고 해서 다 같은 비동기가 아니다.
·
BackEnd/Node.js
비동기 API를 이용할 때 Promise.all로 비동기 요청을 병렬 처리하는 경우가 많다.그런데 병렬 처리시 어떤 비동기 API를 사용하느냐에 따라서 몇몇 요청이 지연되는 케이스가 생길 수도 있다. 비동기 API 처리 과정Nodejs에서 비동기 처리는 libuv 라이브러리가 담당한다.libuv는 비동기 요청이 들어오면 커널단에서 비동기적으로 처리가 가능한지 확인한다. 커널에서의 비동기 처리 가능 유무에 따라 다음과 같이 동작한다.- 커널에서 비동기 처리 지원 O -> 메인스레드에서 커널에 비동기 작업 요청- 커널에서 비동기 처리 지원 X -> 스레드풀의 스레드에서 커널에 동기 작업 요청 libuv는 비동기 요청에 대해서 non-blocking 방식으로 시스템콜을 날린다.(non-blocking 방식이기..
[딥러닝] 퍼셉트론과 신경망
·
프로그래밍/기타
딥러닝은 사람의 신경망을 모방하여 구현한다. 신경망에 대해 알아보기 전에 더 단순한 퍼셉트론부터 알아보자. 퍼셉트론이란? 퍼셉트론은 다수의 신호를 받아서 하나의 신호를 출력하는 알고리즘이다. 출력하는 신호는 0 혹은 1이다. (이진 출력) 아래 그림은 2개의 신호를 받는 퍼셉트론의 예다. 가중치 입력 신호와 가중치를 이용하여 출력을 내는데, 이때 사용되는 함수를 활성함수라고 한다. 퍼셉트론의 활성함수는 아래와 같다. 가중치가 큰 신호일수록 출력 신호에 주는 영향도 클 것이다. 즉, 가중치는 입력 신호의 중요도를 결정한다. 편향 하지만 실제 구현에서는 가중치 외에도 편향이라는 값을 사용한다. 위 식에서는 θ가 편향에 해당한다. 편향을 좌변으로 옮기면 -θ가 되는데, b라는 변수로 치환하여 아래와 같이 표..
[Flutter] CERTIFICATE_VERIFY_FAILED 에러
·
프로그래밍/발생한 에러들
플러터에서 개인 서버와 https 통신중에 에러가 발생했다. 에러 내용을 보면 unable to get local isser certificate 라고 한다. 이 에러는 요청하는 서버의 인증서가 유효하지 않다는 것이다. 처음에는 인증서 자체가 잘못된 줄 알았다. 하지만 Postman으로 요청 보내면 문제 없이 잘 되더라... 스택오버플로우나 구글링을 해보면 아래와 같은 코드를 본 경우도 있을 것이다.class MyHttpOverrides extends HttpOverrides{ @override HttpClient createHttpClient(SecurityContext? context){ return super.createHttpClient(context) ..badCertificateCallback..
NestJS v10.0.0 redis 에러 이슈
·
BackEnd/Nest.js
Nest can't resolve dependencies of the RedisCoreModule (Symbol(REDIS_MODULE_OPTIONS), ?). Please make sure that the argument ModuleRef at index [1] is available in the RedisCoreModule context. NestJS v10.0.0 부터 발생하는 이슈다. 이와 관련한 이슈에 대한 해결책으로 대부분의 블로그에서 nestjs-redis 모듈 대신 @liaoliaots/nestjs-redis 사용하라고 권하고 있다. https://www.npmjs.com/package/@liaoliaots/nestjs-redis 그런데 이 모듈 또한 에러가 발생했고, 레포지토리 이슈를 보..
사이드 프로젝트에 사용하기 좋은 서비스
·
프로그래밍/기타
요즘 사이드 프로젝트를 진행하고 있다. 일도 바쁘고 시간이 지날수록 자꾸 늘어져서... 개발 속도가 점점 늦어지고 있다. 리프레쉬 겸 상용 서버에서 사용할 인프라좀 찾아보고 있다. 사이드 프로젝트에서 배포를 고려할 때 가장 큰 문제는 역시 비용이다. 나 역시 비용을 고려하며 쓸만한 서비스가 있나 찾아보았다. 오늘은 내가 찾아본 정보들을 정리해보려 한다. 최대한 간단하게 적을 것이므로 대략 이런 서비스가 있구나 하고 훑어보면 좋을 것 같다. 어차피 프리티어 혹은 바로 윗 단계의 비용을 지불할 가능성이 높다고 생각하기에 비용 정책은 따로 설명하지 않겠다. Firebase, Vercel과 같이 널리 알려진 서비스는 제외하고 서술한다. Server Supabase Supabase | The Open Source..
반응형