
캡스톤 졸업 프로젝트를 진행하다가 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에서는 일련의 로깅 라이브러리를 제공하고 있다.로깅의 필요성디버깅코드가 예상대로 작동하지 않을 때, 로그는 문제의 원인을 찾는 데 도움을 준다. 예를 들어, 특정 기능이 제대로 작동하지 않는다면, 로그를 통해 어느 부분에서 문제가 발생했는지 확인할 수 있다.성능 모니터링로..

sudo apt updatesudo: 관리자(루트) 권한이 필요한 작업을 실행할 때 사용된다. 일반 사용자가 관리자 권한을 임시로 얻어 명령을 실행할 수 있다.apt: 소프트웨어 패키지를 관리하기 위한 도구로, 소프트웨어 설치, 업데이트 및 제거 등의 작업을 간편하게 수행할 수 있도록 돕는다.update: 시스템의 패키지 리스트를 업데이트한다. vimvim은 고도로 커스터마이징 가능한 텍스트 에디터로, 다양한 프로그래밍 작업에 널리 사용된다. 주로 키보드만으로 작업을 수행할 수 있게 설계되었으며, 다양한 모드(삽입, 명령, 시각적 모드 등)를 통해 효율적으로 텍스트 편집 작업을 할 수 있다. vim application.yml 명령어는 application.yml 이라는 이름의 파일을 Vim 텍스트 에..
- Total
- Today
- Yesterday
- 백준
- 스프링
- 웹 MVC
- 지연로딩
- 스프링부트
- 비영속
- 영속
- 북마크
- SQL
- elasticsearch
- SQL 레벨업
- JPA
- 스프링 커뮤니티
- 다이나믹 프로그래밍
- 웹MVC
- 백준 파이썬
- EnumType.ORDINAL
- 로깅
- 로그아웃
- 자바 스프링
- DP
- 스프링 북마크
- SQLD
- 인텔리제이
- 자바
- 회원탈퇴
- 파이썬
- 준영속
- 커뮤니티
- 프론트엔드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |