정말 HTTPS에 대해서 알고 있는가?
·
Backend Programming
HTTPS는 왜 이런 구조로 만들어졌을까?HTTPS의 구조를 제대로 이해하려면, 각 보안 요소들이 왜 필요하게 되었는지를 먼저 이해해야 합니다. 이 글에서는 HTTP의 한계에서 시작해, HTTPS가 지금의 형태로 발전한 과정의 흐름을 순서대로 살펴보겠습니다. 우선 HTTP는 웹에서 데이터를 주고받는 통신 규약이고, HTTPS는 여기에 보안을 강화하기 위해 TLS(SSL) 암호화를 추가한 프로토콜입니다. SSL 인증서를 통해... 한번에 HTTPS의 통신 구조를 이해하기란 어렵습니다. 여러개의 구조들을 파악하고 어떤 것들이 진정으로 보완이 되어서 완성이 되었는지 이해가 되어야 비로소 HTTPS 구조를 이해할 수 있습니다. HTTP먼저 HTTP부터 입니다.HTTP는 웹에서 데이터를 주고받는 기본 통신 규약입..
JPA에서 ID는 언제 만들어지고, 언제 DB에 저장될까?
·
Backend Programming
JPA를 사용하다 보면 이런 의문이 생깁니다.“save() 직후 ID가 생기는데, DB에 저장 된건가?” 이 질문의 답은 트랜잭션의 동작 흐름 안에 있습니다.persist(), flush(), commit()은 각각 “메모리에 저장 -> SQL 실행 -> 트랜잭션 확정” 단계를 의미하며, ID는 이 과정 속에서 점진적으로 생성되고 확정됩니다. 이 글에서는 트랜잭션 내부에서 ID가 생성되고, DB에 반영되고, 다른 트랜잭션에서 보이게 되는 전 과정을 순서대로 살펴보겠습니다. 1. 비영속 상태ScheduleEntity schedule = new ScheduleEntity();System.out.println(schedule.getId()); // 대부분 null (직접 세팅 안 했다면)단순히 new 한 상..
데이터베이스 구조 리팩토링 및 마이그레이션 경험 공유
·
Backend Programming
기존 데이터베이스의 복잡성과 확장성 한계를 개선하기 위해 데이터베이스 구조를 리팩토링하고, 마이그레이션 및 배포까지 진행한 경험을 공유합니다.설계의 배경기존에는 유저 중심의 데이터베이스 설계로 구성되어 있었습니다. 캘린더의 종류는 기본 캘린더, 그룹 캘린더가 있었고, 그룹 캘린더는 group_user 테이블을 통해 그룹 안에 어떤 유저들이 포함되어 있는지를 관리하는 방식이었습니다. 그러나 Google Calendar 연동 기능이 추가되면서, 더 이상 유저 중심 구조만으로는 다양한 유형의 캘린더를 명확히 구분하기 어렵다는 판단이 들었습니다. 따라서 구조를 ‘캘린더 중심’으로 재설계하기로 결정했습니다. 이 과정에서 group_user는 calendar_member로 변경되었고, 캘린더 색상같은 설정에 관한 ..
빌드 실패 디버깅
·
Backend Programming
firebase를 통한 알림 서비스를 추가했고 다 완성되었다고 생각해서 빌드를 돌렸는데 실패해서, 디버깅했던 내용을 정리합니다. 문제 추론처음에는 문제가 하나의 원인 때문이라고 생각했습니다. 그래서 FirebaseConfig가 test코드에서 자동으로 등록되는 게 문제로 보여서 하나만 제외시켜 주면 되겠거니 했는데 아무리 해도 해결이 안 되었습니다. 4시간 동안을 혼자 생각했던 문제 해결방안과 gpt가 제시해 준 문제 해결방안을 시도해 봤지만 결과적으로는 해결되지 않았습니다. 그렇게 다음날에 멘탈을 잡고 천천히 하나씩 문제를 구글링을 통해서 추론해 나갔습니다.CalendarApplicationTests > contextLoads() FAILEDjava.lang.IllegalStateException at..
CI/CD? 배포 자동화를 해보자
·
Backend Programming
왜 자동화를 적용하게 되었는가?프로젝트의 코드가 완성되면 java 빌드, docker 이미지화, ec2환경에서의 이미지 pull, docker-compose up 하는 과정이 되게 번거로웠습니다. 그래서 자동화를 해서 완성되었을 때 버튼 하나로 빌드부터 배포까지 한번에 완료됐으면 했습니다. 자동화 툴이 여러가지 있었는데 이전 회사에서 사용이라도 해봐서 친근해보이는 젠킨스를 선택했습니다. CI/CD가 무엇인가?CI/CD는 지속적 통합(Continuous Integration) 및 지속적 제공/배포(Continuous Delivery/Deployment)를 의미하며, 소프트웨어 개발 라이프사이클을 간소화하고 가속화하는 것을 목표로 합니다. 지속적 통합(CI)은 코드 변경 사항을 공유 소스 코드 리포지토리에 ..
EC2를 활용한 HTTPS 및 도메인 설정
·
Backend Programming
EC2와 HTTPS를 활용한 배포 과정 정리처음에는 작업 중인 프로젝트에 HTTPS와 도메인을 적용하기 위해 로컬 환경에서 테스트를 진행했습니다. 집에서 공유기를 통해 외부 IP를 할당받아 DuckDNS 도메인을 사용했지만, 문제가 있었습니다. 이동해서 다른 곳에서 작업할 때마다 IP가 변경되었고, 카페와 같은 공용 Wi-Fi에서는 포트 포워딩을 직접 설정하는 것이 거의 불가했습니다. 그래서 AWS EC2를 활용해 HTTPS 환경을 구축하기로 결정했습니다. 이렇게 하면 외부 IP와 관련된 문제를 해결할 수 있고, 다른 사람들도 도메인을 통해 프로젝트에 접근할 수 있습니다. 이번 글에서는 EC2 환경으로 배포를 진행하면서 알게 된 점과 작업 흐름을 정리해보겠습니다.ec2aws 가입AWS 가입 과정에서 인증..