전체 글
-
[Fixture Monkey] giveMeBuilder().set()의 값이 적용되지 않음🩸 삽질의 추억 2025. 10. 20. 12:31
1. 문제 상황Fixture Monkey 1.1.11 버전 사용 Google Guava 라이브러리의 Range.class는 giveMeBuilder().set()으로 value가 적용되지 않음(String, int, enum 등 자바 기본 자료형은 문제 없음)@Testvoid test_set_range() { Range targetRange = Range.closed( Instant.parse("2025-01-01T00:00:00.000001Z"), Instant.parse("2025-12-31T23:59:59.999999Z") ); var foo = fixture.giveMeBuilder(Foo.class) .setNull("i..
-
[Fixture Monkey] CustomArbitraryIntrospector를 등록하는 여러 방법📚 개발백과 2025. 10. 19. 22:21
[Fixture Monkey] 불변 객체를 위한 사용자 정의 인트로스펙터 예제 코드 - 기초편불변 객체(`google.common.collect.Range`)를 위한 사용자 정의 인트로스펙터 예제 코드입니다.사용 버전: 1.1.11 ⬇️ 코드만 먼저 보기더보기더보기더보기/** * Range 타입에 대한 값을 반환하는 사용자 정the0.tistory.com이전 포스팅 글(사용자 정의 인트로스펙터 예제 코드 - 기초편)과 이어집니다. 공식문서를 참고하여 Fixture Monkey의 CustomArbitrayIntrospector를 만들고customIntrospector를 objectIntrospector에 등록했다.참고: https://naver.github.io/fixture-monkey/v1-1-0-k..
-
[Fixture Monkey] 불변 객체를 위한 사용자 정의 인트로스펙터 예제 코드 - 기초편📚 개발백과 2025. 10. 6. 12:11
불변 객체(`google.common.collect.Range`)를 위한 사용자 정의 인트로스펙터 예제 코드입니다.사용 버전: 1.1.11 ⬇️ 코드만 먼저 보기더보기더보기/** * Range 타입에 대한 값을 반환하는 사용자 정의 인트로스펙터 예제 */public class RangeInstantArbitraryIntrospector implements ArbitraryIntrospector { @Override public ArbitraryIntrospectorResult introspect(ArbitraryGeneratorContext context) { // 1단계: 이 인트로스펙터가 이 타입을 처리해야 하는지 확인 // Range.class 추출 Property p..
-
[Spring Data JPA] 트랜잭션 끝나도 DB 커넥션 릴리즈 안됨 (feat. OSIV)🩸 삽질의 추억 2025. 6. 27. 02:27
개발 환경:Spring 3.4.4, Spring Data JPA(Hibernate 6.6.11)한 메서드 내에 DB 접근와 SSE send를 하고 있다.SSE가 tomcat thread로 동기 처리된다. (원래는 비동기 처리해야함. 커넥션 점유 테스트를 위해 이렇게 둠.)커넥션 점유를 5초 이상하면 로그를 출력하도록 설정했다.문제 상황해당 메서드(~=스레드) 에서 커넥션을 계속 점유하고 있다는 로그가 출력된다.`maximum-pool-size` 를 초과하면 에러가 발생한다. 사건의 발단이 된 코드는 다음과 같다.코드가 길어서 축약했다.public SseEmitter subscribe(AuthUser authUser) { Long userId = userRepository.findByOauthId(a..
-
[Spring Data JPA] 서비스 레이어의 어느 메서드에 @Transactional을 안붙이면?📚 개발백과 2025. 6. 27. 01:38
Spring 3.x, Spring Data JPA(+ Hibernate) 를 쓰는 환경이다. 예시 코드 설명:exampleService 클래스의 한 메서드인 example() 이다.example()은 authUser 를 인자값으로 받아 이를 userRepository에 Read로 접근한다.public exampleResponse example(AuthUser authUser) { User user = userRepository.findByOauthId(authUser.getOauthId()) .orElseThrow(() -> new BusinessExceptionHandler("유저가 존재하지 않습니다.", ErrorCode.NOT_FOUND_ERROR)); ...} 내가..
-
[Spring Data JPA] 커넥션은 언제 릴리즈 될까 (w/ @Transactional)📚 개발백과 2025. 6. 26. 16:53
Spring Data JPA 와 Hibernate를 사용하고@Transactional 어노테이션이 명시된 서비스 레이어의 메서드가 존재한다고 가정한다. 이 아티클은 connection.close()가 실행되는 step을 트레이싱한다. AbstractPlatformTransactionManager에서는doCommit() 혹은 doRollback() 이후 doCleanupAfterCompletion()이 실행된다. 레퍼런스더보기0. AbstractPlatformTransactionManager 의 doCleanupAfterCompletion() 설명https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/tran..
-
[Github Actions] attempted methods [none password]🩸 삽질의 추억 2025. 5. 27. 05:47
님 ssh 비밀번호에 '$' 가 포함되어 있지 않은지????????????? 상황:- github actions 사용- workflow 내용은 다음과 같음 - name: Deploy uses: appleboy/ssh-action@master with: host: ${{ env.SSH_HOST }} username: ${{ env.SSH_USER }} password: ${{ env.SSH_PASSWORD }} script: | ... ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password..
-
[FastAPI, PostgreSQL] postgresql://와 postgresql+asyncpg:// 의 차이📚 개발백과 2024. 10. 18. 17:06
글을 작성하게 된 이유:FastAPI 에서 Session 생성을 하기 위해 postgresql url 을 주입하는 도중에 여러 프로젝트의 소스코드마다postgresql://로 시작하는 url도 있고 postgresql+asyncpg:// 로 시작하는 url도 있었는데 그 차이가 궁금했다.그리고 이것 때문에 프로젝트 실행하는 과정에서 삽질을 하기도 했다. 두 URL은 주로 동기 방식과 비동기 방식의 데이터베이스 연결 및 쿼리 실행 방식에 차이점이 있다. postgresql://이 url은 psycopg2와 같은 동기식 드라이버를 사용해 PostgreSQL 에 연결한다.이게 표준 연결 문자열이다. (당연해보이죠?) 이는 파이썬*의 일반적인 동기 실행 모델을 따르기 때문에, 데이터베이스 작업을 수행하는 동..