EC2에서 스프링 서버를 실행시키기 위해 git clone을 받고 해당 디렉토리에 들어가./gradlew build명령어를 입력해 빌드를 하던 중 더 이상 진행되지 않고 멈춰 있길래 연결을 종료하고 다시 웹에서 EC2에 접속했는데 무한 로딩이 진행되면서 EC2 콘솔에
EC2를 이용해 스프링 프로젝트를 배포하는 과정을 정리해본다.먼저 AWS에 가입하고 EC2로 이동한 후에 '인스턴스 시작'을 클릭해서 생성 화면으로 넘어간다.이름을 지어주고 OS를 선택해주면 되는데 서버용으로 많이 사용되는 Ubuntu를 선택했다아래 쪽에 어떤 스펙의
오늘은 AWS EC2에 대해 공부한 내용을 정리해보려한다.AWS EC2는 클라우드 환경에서 컴퓨팅 파워를 제공하는 서비스로, 사용자는 물리적 서버를 구매하거나 관리하지 않고도 가상 서버를 쉽게 생성하고 관리할 수 있다.AWS의 핵심 서비스로, 클라우드 환경에서 확장 가
문제 발생 UserRepository에 대한 테스트 클래스를 만들고 findByEmail() 이라는 메서드에 대한 테스트 코드를 작성했다. 미리 setUp에서 MockUser를 만들고 JPA에서 기본적으로 제공하는 repository.save() 메서드를 이용해 데이터베이스에 저장하고, findByEmail()로 유저를 잘 찾아오는지 assertThat을...
트러블 슈팅 - QueryDSL NULL 값 대처하기 저번 트러블 슈팅에서 이어지는 내용이라 위쪽에 링크를 첨부했다. 문제 발생 BooleanBuilder를 이용해 파라미터에 null 값이 들어와도 정상적으로 예약 목록을 조회하도록 구현했지만, 파라미터 2개가 모두
테스트는 코드 품질을 보장하고, 새로운 기능을 추가할 때 발생할 수 있는 문제를 예방하는데 중요한 역할을 한다. Spring에서는 여러 테스트 기능을 제공하여 애플리케이션의 각 계층을 쉽게 검증할 수 있다.Spring에서는 @SpringBootTest, @WebMvcT
QueryDSL을 이용해서 다른 테이블과 조인을 하고 파라미터로 특정 값을 받아와 where 구문으로 필터링하여 결과를 조회하는 코드를 작성했다.파라미터로 받아오는 userId, itemId가 모두 값이 있을 경우는 정상적으로 예약 리스트를 받아올수 있었지만, 둘 중
LAG() : 현재 행에서 이전 행의 값을 가져온다.LEAD() : 현재 행에서 다음 행의 값을 가져온다.이 두 함수는 MySQL 8.0부터 지원되며, 윈도우 함수로 사용된다.이 함수들은 OVER 절과 함께 사용되어 데이터를 그룹화하거나 정렬된 순서에 따라 특정 행의
JPA를 복습하면서 몇 가지 헷갈렸던 부분을 정리해보려고 한다.영속성 전이는 엔티티의 상태 변경(영속화, 삭제 등)이 연관된 엔티티로 전이되는 것을 의미한다. ex) 부모 엔티티를 저장하거나 삭제할 때 자식 엔티티도 함께 저장하거나 삭제해야 하는 경우. 이를 위해 JP
MyBatis는 SQL 중심의 데이터 매핑 프레임워크로, Java와 데이터베이스를 연결하는 도구이다. SQL 작성의 자유도를 제공하며, 객체와 데이터베이스 간 매핑을 간소화한다.MyBatis를 활용할 때 두 가지 주요 접근 방식이 있다.1\. @Mapper를 활용한 간
퀵정렬은 분활 정복 알고리즘을 기반으로 하는 정렬 알고리즘으로, 효율성과 간결함 때문에 자주 사용된다. 평균적으로 O(nlogn) 의 시간 복잡도를 가지며, 최악의 경우 O(N²)이 될 수 있지만 적절한 피벗 선택으로 최악의 경우를 피할 수 있다.피벗 선택배열에서 하나
Interceptor와 Filter는 요청 처리 과정에서 공통 작업을 수행하기 위해 사용된다. 하지만 두 개념은 서로 다른 용도와 실행 범위를 가진다.필터는 Servlet 레벨에서 동작하며, 요청이 DispatcherServlet에 도달하기 전에 처리된다.Java EE
트랜잭션 격리 수준은 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭셕이 다른 트랜잭션으로부터 얼마나 격리될지를 설정하는 기준이다. 이 격리 수준은 데이터 충돌을 방지하면서도 성능을 조율하는 역할을 한다.격리 수준이 높아질수록 데이터의 안정성은 높아지지만 동시성(성능)은
데이터베이스에서 인덱스는 테이블의 특정 컬럼에 대한 데이터를 효율적으로 검색할 수 있도록 도와주는 자료 구조이다.MySQL에서 인덱스는 B-Tree나 Hash와 같은 자료 구조로 구현되어 있으며, 데이터베이스 엔진이 검색 작업을 최적화하도록 돕는다.빠른 데이터 검색 :
@RequestParm을 이용해 가게 이름에 특정 키워드가 포함되어 있다면 모두 가져오는 로직을 만들었다. JPQL을 이용해 직접 쿼리를 작성했고 특정 키워드를 포함시키기 때문에 LIKE를 사용했다.RepostoryServiceControllerpostman을 이용해
프록시는 JPA에서 사용되는 가짜 객체이다. JPA는 데이터베이스에서 데이터를 바로 가져오는 대신, 실제 데이터를 감싸는 대리 객체를 생성한다. 이 대리 객체가 필요할 때 데이터를 대신 불러온다. 쉽게 말하면 데이터를 바로 꺼내기보다는 꺼낼 준비만 하고 기다리는 가짜
이 클래스가 DTO로 사용된다면 Optional이 문제가 된다. 스프링에서는 데이터의 응답으로 DTO <-> JSON 직렬화, 역직렬화 방식을 사용하는데, 이 때 Optional은 직렬화, 역질렬화 시에 예상치 못 한 문제를 발생시킬 수 있다.Entity역시 만찬
1. 통화 생성 중 null값 리턴 통화를 추가해 주기 위해 Controller에 PostMapping으로 메서드를 만들고 로직을 구성했다. RequestDTO를 통해서 요청값을 입력하고 DB에 저장됨과 동시에 ResponseDTO를 통해서 응답을 해주는 식이다. postman 응답 201 Created와 함께 잘 작동하는 구나 하고 넘겼는데.. DB를 ...
JPA를 공부하면서 자주 등장하던 N+1 문제라는 것에 대해서 정리해보자 ! 하나의 엔티티를 조회하는 쿼리 1개를 실행한다.조회한 엔티티 각각에 대해 연관된 엔티티를 추가로 조회하는 쿼리가 실행된다.결과적으로 쿼리가 1 + N번 실행되므로 N+1 문제라고 부른다 !Te
공부하면서 알게된 1:N, 1:1, N:M 관계에서 단방향과 양방향 매핑을 어떻게 설정하고 각각의 장단점은 무엇인지 정리해보았다. 아직도 잘 이해가 되지않지만 정리하면서 또 복습해보자단방향 1:N한 엔티티가 여러 엔티티와 관계를 가질 수 있는 경우특징관계를 Post -