전체 글
-
[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 에 연결한다.이게 표준 연결 문자열이다. (당연해보이죠?) 이는 파이썬*의 일반적인 동기 실행 모델을 따르기 때문에, 데이터베이스 작업을 수행하는 동..
-
[Docker] 원격에서 다른 원격의 외부 엔드포인트 호출 안됨🩸 삽질의 추억/로컬에선 되는데 원격에서 안됨; 2024. 10. 2. 17:57
상황:원격 VM A, B 가 있다.A에 도커로 띄운 Spring Boot a1 이 B 서버의 엔드포인트로 API를 호출해야 함. Docker 컨테이너로 실행시킨 스프링 부트는 잘 돌아가나 A ->B 호출만 안되는 상황 스프링 컨테이너를 실행한 명령어docker run -d \ --name my-backend \ -p 8080:8080 \ my-backend 해결 방법: 다음과 같이 `--network host` 옵션을 추가한다.docker run -d \ --name my-backend \ -p 8080:8080 \ --network host \ my-backend 혹은 방화벽이나 보안 그룹 설정의 문제일 수도 있다.만약 호스트의 방화벽 설정이 docker0 인터페이스를 통한 통신을 제한하..
-
오프라인 상태에서 cURL 사용하기📚 개발백과 2024. 10. 1. 14:13
오프라인 상태에서 cURL을 사용할 수 있을까? 1. 요청 대상이 동일 네트워크/서버 요청할 대상이 동일 네트워크나 서버에 있으면 인터넷 연결 여부와 상관없이 cURL 테스트가 가능하다. > 왜?서버나 다른 대상이 같은 로컬 네트워크 내에 있으면 데이터는 같은 네트워크를 통해 직접 전송된다.이 경우, 내부 네트워크의 라우팅 기능이 데이터를 대상 서버로 직접 전달하기 때문에 외부 인터넷 연결이 필요하지 않다.> 예를 들면?같은 로컬 네트워크 내의 서버에 접근할 때, 요청은 인터넷을 통해 외부로 나갔다가 다시 들어오는 대신에 내부적으로만 라우팅되어 처리된다. 2. 요청 대상이 외부 서버 오프라인 상태에서 외부 서버로 요청을 보내는 것은 불가능하다. 외부 서버는 인터넷을 통해 접근할 수 있기 때문에서버가 인..
-
[Vite, Docker] 로컬에선 되는데 원격에서는 ERR_CONNECTION_REFUSED🩸 삽질의 추억/로컬에선 되는데 원격에서 안됨; 2024. 9. 30. 15:41
문제:로컬인 localhost:5173 에서는 페이지가 열리는데Docker 컨테이너를 실행했을 때는 :5173 접속 시 ERR_CONNECTION_REFUSED 에러가 발생한다.*Dockerfile, docker build 과정, 방화벽, VM 보안그룹에는 이상 없음 왜 로컬에선 되는데 원격에선 안되냐고!!!!!!!!!!!!!!!!! 해결방법: 기존 package.json 을 "scripts": { "dev": "vite", ... }, 다음과 같이 수정한다. "scripts": { "dev": "vite --host 0.0.0.0 --port 5173", ... }, 🤔 --port 도 지정해야하나요?> 사실 이 경우에는 --host 옵션만 주면 됨. --port는 포트번호도 지정..