목록분류 전체보기 (15)
DS's TechBlog

Windows 환경에서 Docker Compose를 사용하여 Spring Boot 애플리케이션과 OpenVidu 서버를 연동하는 과정에서 네트워크 설정 문제로 인해 연결이 되지 않는 문제가 발생했습니다. 이 문제를 해결하기 위한 과정을 공유하고자 글을 작성하였습니다. 문제 상황 Spring Boot 애플리케이션을 Docker Compose로 실행하면서 OpenVidu 서버와 연동하려고 시도했습니다. 아래는 `docker-compose.yml` 파일의 설정입니다.services: spring-app: build: context: . # Dockerfile이 위치한 폴더 dockerfile: Dockerfile.local # Spring Boot Dockerfile 이름 p..

Windows 환경에서 Docker Desktop을 사용하면서 `network_mode: host` 설정이 제대로 적용되지 않는 문제가 발생했습니다. 이 문제를 해결하기 위한 과정을 공유하고자 글을 작성하였습니다.문제 상황services: spring-app: build: context: . # Dockerfile이 위치한 폴더 dockerfile: Dockerfile.local # Spring Boot Dockerfile 이름 network_mode: host docker-compose.yml 파일을 위와 같이 설정했음에도 불구하고, 컨테이너가 호스트 네트워크를 사용하지 않아 포트 접근에 문제가 발생했습니다. Docker 공식 문서 참고 Docker의 공식 문서에 따..

Docker를 사용했을 때, Ubunt에서 ufw를 이용하여 특정 포트로의 접속을 막지 못하는 문제가 발생하였습니다. 이에 대한 해결방법을 공유하고자 글을 작성하였습니다.문제 상황클라이언트가 도메인을 입력했을 때, http와 https의 기본 포트인 80, 443을 통하여 API 서버를 접근할 수 있도록 구성했습니다. 하지만, "서. 버. 주. 소:8000"로 직접 접근이 되는 문제가 발생했습니다. 현재 Nginx를 이용하여 https를 구성하고 있는데, 이렇게 되면 http로 서버로의 접근이 가능하므로 보안 문제가 발생할 수 있습니다. ufw로 해결?Linux의 ufw로 특정 포트로의 접근을 막으려 했습니다.sudo ufw deny 8000sudo ufw deny 8000/tcpsudo ufw stat..

JWT를 사용해 인증 및 인가를 구현한 프로젝트에서, 리프레시 토큰을 쿠키에 저장하여 클라이언트 요청 시 자동으로 포함되도록 설정했습니다. 하지만 서버로 리프레시 토큰이 전달되지 않는 문제가 발생했습니다. 이번 글에서는 이 이슈의 원인과 해결 방법을 탐구해 보겠습니다. 리프레시 토큰 쿠키 설정 스프링부트에서는 HttpServletResponse를 사용하여 쿠키를 설정할 수 있습니다. 다음과 같이 리프레시 토큰을 쿠키에 저장하였습니다. // 토큰을 발급하는 메서드 @Override @Transactional public void issueToken(HttpServletResponse response, String userId, String role) { String acc..
이미지를 파일 시스템에 저장하고 관련 정보를 DB에 저장할 때, 이미지 파일과 DB 간의 일관성을 유지하는 방법 2편입니다. (https://dsjo.tistory.com/12) 2편은 @TransactionEventListener 를 중심으로 작성하였습니다. 아직 남은 문제 @Override @Transactional public void updateBoardImage(Long activityId, Long boardId, MultipartFile boardImageFile) { Board board = boardService.getBoardWithImageAndUser(activityId, boardId); User loggedInUser = securityS..

이미지를 파일 시스템에 저장하고 관련 정보를 DB에 저장할 때, 이미지 파일과 DB 간의 일관성을 유지하는 방법에 대해서 알아보겠습니다. 1편은 외래키 제약조건에 따른 SQL 순서 최적화를 중심으로 작성하였습니다.배경프로젝트의 요구사항은 아래와 같습니다.게시판의 대표 이미지는 파일 시스템에 저장하고, 파일의 정보는 DB에 저장합니다.대표 이미지 업데이트 시에 기존의 이미지 파일은 삭제되어야 합니다.이러한 요구사항에서는 이미지 파일과 DB 간의 일관성이 중요하다는 생각을 했습니다.board_image 테이블이 존재하지 않는 파일의 정보를 담고 있으면 안 되기 때문입니다. 기존 이미지 업데이트 방식의 문제점 @Override @Transactional public void updateBoar..

배경순환 참조 문제가 발생할 수 있는 기존 코드를 아래와 같은 구조로 리팩토링 하기로 했습니다.Presentation Layer → Application Service Layer → Domain Service Layer → Infrastructure Layer (Controller) (Repository)Controller로 들어오는 DTO를 Application Service Layer에 다음과 같이 넘기고자 했습니다. @PostMapping public ResponseEntity addActivity(@PathVariable Long semesterId, @RequestBody @Valid CreateActivityRequestDto createActivityRequestDto) { ..

배경웹 프로젝트에서 이미지를 AWS S3에 저장하기로 했습니다. Spring Boot 3과 함께 AWS S3를 사용하는 법에 대해서 구글링 해봤지만, 오래된 버전에 대한 내용만 나와있어서 글을 작성하게 되었습니다.AWS IAM, AWS S3 버킷은 생성했다고 가정합니다.종속성 추가https://github.com/awspring/spring-cloud-aws?tab=readme-ov-file GitHub - awspring/spring-cloud-aws: The New Home for Spring Cloud AWSThe New Home for Spring Cloud AWS. Contribute to awspring/spring-cloud-aws development by creating an accoun..