✔️ 영속성 컨텍스트(Persistence Context)란? 영속성 컨텍스트란 '엔티티를 영구히 저장하는 환경' 이라는 뜻이다. 일종의 작업 영역이라고 생각할 수 있다. JPA에서 제공하는 논리적인 구조로 영속 상태의 엔티티들을 관리하기 위한 목적으로 사용된다. 1차 캐시, 동일성 보장, 변경감지(Dirty Checking)등 의 기능이 제공된다. ✔️ 엔티티의 생명 주기 비영속(New) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속(Managed) : 영속성 컨텍스트에 의해 관리되는 상태 //객체를 생성한 상태(비..
전체 글
프로그래밍 정보를 공유합니다3월 26일 항해99 실전 프로젝트가 시작됐다. 벌써 시간이 이렇게 지난 게 놀랍다... 나는 서비스팀과, 대용량 트래픽을 경험할 수 있는 챌린팀 사이에서 많은 고민 끝에 챌린지팀을 선택하게 되었다. 쉽진 않을 것 같았지만 새로운 경험을 바탕으로 개발에 대한 시야를 넓히기 위해 선택하게 됐다! 앞으로 어떤 방향으로 프로젝트를 진행하면 좋을지, 생각을 정리하는 느낌으로 글을 작성해 본다. 주제 선정 우리 팀의 주제는 대규모 트래픽이 몰릴 상황을 대비한 '수강 신청' 서비스를 진행하기로 했다. 대규모 트래픽을 가정한 좋은 프로젝트 주제이지 않은가 싶다. 보통 선착순 쿠폰이나 이벤트 등 과 같이 대량의 트래픽이 한 번에 몰리는 상황을 가정하며 이러한 상황일 때 아키텍처는 어떻게 설계할지, 트래픽을 어떻게 분산..
spring boot 프로젝트를 github actions, docker를 활용하여 EC2에 배포하는 과정을 담았다. AWS EC2 인스턴스 생성(Ubuntu 22.04), EC2에 docker설치, Docker hub 계정이 있다는 가정하에 진행한다. 기존 배포 방법의 문제점 기존에 CI/CD 를 구축하지 않고 배포를 진행할 때, 우리는 spring boot 프로젝트를 직접 build 해서 jar 파일을 EC2에 Filezila 등으로 옮기고, java -jar 명령어를 실행하여 프로젝트를 실행했다. 프로젝트를 진행하면서 코드의 수정이 빈번하게 일어날 텐데, 매번 이런 과정을 거치는 것은 매우 비효율 적이다. CI/CD를 구축해 두면 이 과정을 자동화할 수 있어 개발 생산성을 높일 수 있다. Githu..
JPA를 공부하며, 알지 못하면 치명적인 성능저하 및 장애를 불러일으킬 수 있는 N + 1 문제에 관한 내용과 해결법을 정리해보려고 한다. N + 1 문제는 아주 다양한 상황에서 발생한다. 이 글에서는 @OneToMay 에서 발생하는 N + 1 문제를 다룬다. 코드는 Spring Data JPA를 기준으로 작성하였다. ✔️ N + 1 문제란 무엇일까? N + 1 문제란 엔티티 간의 연관관계가 설정된 상황에서 발생한다. 나는 분명 1개 의 쿼리를 기대했는데, 연관관계 또한 조회하게 되며 N개만큼 쿼리가 추가적으로 발생하는 상황을 말한다. 사실 이렇게 글로 보면 이해가 잘 안 간다. 바로 코드를 보며 이해해 보자. ✔️ 엔티티 & 코드 Team과 User는 일대다(1:N) 관계이다. 1개의 Team에 여러..
항해 99 주특기 주차를 진행하게 됐다. 2주 동안 Spring boot를 활용한 Lv1 ~ Lv5 과제를 수행했다. 약 2~3일 간격으로 과제를 제출했기에, 시간이 굉장히 부족했던 주차였다. 블로그 작성에 신경을 많이 못 썼던 것 같다. 시간이 많이 부족해서, 이론적으로 깊이 공부하지 못한 것 같아서 간단하게 정리해 보는 시간을 가져보려고 한다. ✔️ REST API 란? Representational State Transfer(표현 상태 전이)의 약자로, 웹 서비스를 설계하고 구현하기 위한 아키텍처 스타일 중 하나. URI엔 자원을 나타내고, 자원의 대한 행위는 HTTP method를 통해 표현한다. GET /members/show/1 (x) GET /members/1 (o) ✔️ Spring을 왜 ..
Spring boot v3.2.3 & Spring Security 6.2.2 에서 클라이언트의 URL 요청 허용을 정규 표현식으로 허용하는 방법이다. 아래는 정규 표현식을 이용하여 requestMatchers 사용한 예시이다. http .authorizeHttpRequests((authorize) -> authorize .requestMatchers(RegexRequestMatcher.regexMatcher("/resource/[A-Za-z0-9]+")).hasAuthority("USER") .anyRequest().denyAll() ) ✔️ 적용한 전체 코드 예시 [ WebSecurityConfig.java ] @Configuration @EnableWebSecurity public class WebS..
@ReqestBody를 사용하는 방법은 알겠다. 문득, 어떻게 DTO와 요청 JSON을 매핑하는지 동작 원리가 궁금했다. 어떻게 @RequestBody는 객체와 JSON을 매핑할까? 조사해본 내용들을 정리 해보려고 한다. ✔️ @RequestBody 란? @RequestBody 는 Spring Framework (Spring MVC)에서 제공되는 어노테이션으로, HTTP 요청의 본문(body)에 있는 데이터를 자바 객체에 매핑할 때 사용된다. 주로 JSON 또는 XML과 같은 형식의 데이터를 Java 객체와 매핑할 때 사용된다. 아래 코드를 참고 해보자. 💬 테스트 해보기 테스트 환경은 Spring boot v3.2.3 이며, JDK17 을 사용했다. Spring MVC 기능 사용을 위해 Depende..
항해99 심화트랙 자료구조 & 알고리즘 3주 차가 거의 마무리되어간다. 이번 주에 공부했던 최소 신장 트리(MST, Minimum Spanning Tree), 이분 탐색(Binary Search)에 대해 정리 해보려고 한다. ✔️ 신장 트리(Spanning Tree), 최소 신장 트리 (Minimum Spanning Tree) 💡 신장 트리 (Spanning Tree) 신장 트리(Spanning Tree)란 주어진 그래프의 모든 정점을 포함하면서 사이클을 형성하지 않는 부분 그래프이다. 여기서 사이클 이란, 한 노드에서 출발하여 간선(Edge)을 따라 다시 출발한 노드로 올 수 있는 상황을 일컫는다. 신장 트리는 모든 정점을 한 번씩 방문하면서, 정확히 하나의 경로를 통해 모든 정점을 연결한다. '신장'..
✔️ 들어가며 이번 주는 심화 자료구조 학습 주차였다. 그래프, DFS, BFS, 트리, 이진 트리에 대한 개념 공부와 알고리즘 공부를 진행하게 되었다. 기본 자료구조 주차에 비해서 난이도가 많이 올라갔다고 느꼈던 한 주였다. 문제를 해결한 방법과, 배운 점 및 알아야 할 점에 관련하여 글을 작성해보려고 한다. ✔️ 그래프 & DFS 활용 [Baekjoon] 2667. 단지 번호 붙이기 - https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net from..