
1. 문제 발생: 도커 볼륨이 꽉 참Docker로 서버를 운영하다가 볼륨이 가득 차는 문제가 발생했다. 볼륨이 꽉 차면 새 컨테이너를 실행하거나 Docker 관련 작업을 할 수 없게 되기에 빠른 해결이 필요했다.처음에는 이 문제가 Redis의 데이터를 저장하는 볼륨 때문이라고 생각했다. Redis는 데이터를 저장해야 하므로 볼륨을 사용하는데, 혹시 불필요한 볼륨이 계속 생성되고 있는 게 아닐까 의심이 되었다.그러나 원인은 다른 곳에 있었다!2. 원인 발견: 서버 실행 시 익명 볼륨 생성Redis 문제를 확인하던 중, 예상치 못한 곳에서 진짜 원인을 발견했다. 서버 컨테이너 실행 시 사용된 -v /app 옵션이 불필요한 익명 볼륨을 계속 생성하고 있었다.docker run -d --name ${server..

캡스톤 졸업 프로젝트를 진행하다가 AWS EC2를 활용해 스프링부트 애플리케이션을 배포하게 되었는데, 초기에는 HTTP 프로토콜을 통해 서비스를 제공했다. 그러나 HTTP는 암호화되지 않은 통신 방식으로, 사용자 데이터가 네트워크 상에서 쉽게 노출될 위험이 있었다. 이 때문에 HTTPS로 전환의 필요성을 느꼈고, 보안 강화를 위해 HTTPS를 적용하게 되었다. 0. HTTPS를 쓰는 것이 보안상 안전한 이유HTTPS(HTTP Secure)는 HTTP에 SSL/TLS 암호화를 더한 프로토콜로, 클라이언트와 서버 간의 통신을 안전하게 보호한다. HTTP와 달리 HTTPS는 데이터를 암호화하여 네트워크 상에서 가로채거나 변경하는 것을 방지하며, 클라이언트가 접속하려는 서버의 신뢰성을 인증서를 통해 검증할 수 ..
1. 🫐 도입프로젝트를 진행하면서 동적으로 데이터를 조회해야 할 상황이 많았다. category, memberId, 정렬 기준 등 조회 조건이 자주 바뀌었고, 이 조건들을 조합하여 유연하게 쿼리를 생성할 수 있는 방식이 필요했다. 특히, 조건이 빈번하게 변경되거나 상황에 따라 추가되는 경우, 코드가 복잡해지고 유지보수도 어려워질 가능성이 컸다.이때 Spring Data JPA의 Specification 기능을 알게 되었고, 이를 통해 다양한 필터 조건을 유연하게 추가하고 조합하여 필요한 데이터를 효율적으로 조회할 수 있음을 알게되었다. Specification을 활용하면 코드의 복잡성을 줄이고, 조건이 변해도 쿼리를 쉽게 관리할 수 있기 때문이다. - 동적 조건 추가: Specification을 사용..
1. 예외 처리란?Java에서 예외 처리(Exception Handling)는 프로그램 실행 중 발생하는 오류나 비정상적인 상황을 관리하고, 프로그램이 중단되지 않도록 적절히 대응하는 중요한 매커니즘이다. 예외가 발생하면 프로그램은 이를 처리하거나 적절하게 사용자에게 알리고, 정상적인 흐름을 유지하는 것이 중요하다. 2. 기존 예외 처리 구조처음에는 예외 상황마다 동일한 메시지가 출력되도록 했다. InvalidInputException을 발생시키는 상황이 여러 개 있었지만, 모든 경우에 동일한 예외 메시지 ("잘못된 값을 입력하였습니다.")가 출력되었다.public class Main { public static void main(String[] args) { final UI ui; ..

프로젝트를 진행하다가 git reabse와 git stash를 자주 사용하게 되었다. git rebase와 git stash, 언제 사용할까?내가 develop에서 feat/38 브랜치 만들어서 작업했음그걸 develop에 merge하기 전에 (feat/38의 변경사항이 develop 브랜치에 적용되기 전에),develop에서 feat/39 브랜치 만들어서 작업했음.그리고 나서 feat/38을 develop 브랜치에 merge 했음근데 같은 파일을 건드려서 충돌 발생함이때 rebase랑 stash를 사용할 수 있다. 참고로, 이번 프로젝트에선 squash merge를 사용했는데, 이에 대한 내용도 다음에 따로 다루도록 하겠다. feat/39 브랜치에서 작업했던 것들을 git stash 한다.develop..
문제 발생No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor ..... 개발 과제를 하던 중에 게시글 단건조회, 전체조회를 할 때 계속 No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor ..... 오류가 발생했다. 찾아보니 이 오류는 데이터 직렬화 과정에서 발생한 문제로, Jackson이 Hibernate의 지연 로딩(lazy loading) 으로 인해 생성된 프록시 객체의 내부를 직렬화하려 할 때 발생한다고 한다. 문제 상황Post 엔티티에서 Blog를 참조하는 경우, 다음과 같은 PostFindDt..

1. 기본 로깅의 한계중복된 로깅 코드로 인한 문제점 //PostController @PostMapping("/posts") public ResponseEntity createPost( @RequestHeader Long memberId, @RequestHeader Long blogId, @Valid @RequestBody PostCreateRequest postCreateRequest) { log.info("Entering createPost: memberId={}, blogId={}, title={}, content={}", memberId, blogId, postCreateReq..

1. 도입로깅이란?로깅(logging)은 소프트웨어 시스템에서 발생하는 모든 행위와 이벤트 정보를 시간 순서대로 기록하는 작업을 말한다. 이러한 기록은 프로그램의 실행 상태를 모니터링하고, 문제를 진단하며, 성능을 평가하는 데 필수적인 역할을 한다.쉽게 말해, 로깅은 프로그램이 어떻게 실행되고 있는지에 대한 ‘흔적’을 남기는 것이다.간단히 System.out.println()을 사용해 콘솔 로그를 남기는 것도 로깅에 해당한다.Spring에서는 일련의 로깅 라이브러리를 제공하고 있다.로깅의 필요성디버깅코드가 예상대로 작동하지 않을 때, 로그는 문제의 원인을 찾는 데 도움을 준다. 예를 들어, 특정 기능이 제대로 작동하지 않는다면, 로그를 통해 어느 부분에서 문제가 발생했는지 확인할 수 있다.성능 모니터링로..
- Total
- Today
- Yesterday
- 커뮤니티
- 자바
- 스프링 커뮤니티
- EnumType.ORDINAL
- 인텔리제이
- 스프링
- 백준 파이썬
- 준영속
- 웹MVC
- 북마크
- 비영속
- elasticsearch
- 회원탈퇴
- 파이썬
- 백준
- 영속
- 로깅
- 프론트엔드
- 자바 스프링
- SQLD
- JPA
- DP
- 스프링부트
- SQL 레벨업
- SQL
- 스프링 북마크
- 지연로딩
- 다이나믹 프로그래밍
- 웹 MVC
- 로그아웃
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |