본문 바로가기

전체 글280

코딩테스트 마스터 개발자를 목표로 잡은지 꽤나 시간이 흘렀는데 코딩테스트를 아직도 마스터 하지 못 했다.이번 달은 진짜 제대로 각잡고 마스터 해보려고 한다... 코딩테스트 무조건 합격시켜주는 7단계 학습법 코딩테스트 무조건 합격시켜주는 7단계 학습법앞선 글에서 코딩테스트 합격을 위해서는7단계 학습법 중에서 단 하나도 빼먹지 않고차근차근 수행해나가야한다고 했었죠. 7단계 학습법 다시 확인해볼까요? 코딩테스트 7단계 학습법코테 언어lover-orpheus.tistory.com 이 분 블로그를 참고해서 7단계 학습법을 준수하면서 ㅜㅜ 1. 코테 언어와 문법 2. 자료구조 완벽 이해3. 알고리즘 완벽 이해4. 알고리즘 유형별로 중급 난이도 문제5. 복잡한 구현 능력 키우기6. 랜덤문제로 문제 유형 파악7. 코테 환경처럼 시간 .. 2025. 11. 8.
JPA의 더티체킹과 영속성 컨텍스트.. 의 관계 ! 완벽이해 더티체킹을 적용하려고 개념을 되짚어 보다가 다시 정리해보려고 한다 ! 더티체킹이란 ? )JPA에서 영속성 컨텍스트가 관리 중인 엔티티 객체의 변경을 감지하고 자동으로 DB에 반영해주는 기능이다.트랜잭션이 끝나기 전에 엔티티의 값이 바뀌었는지 감지하고, 바뀐 경우에만 UPDATE 쿼리를 자동으로 날린다. 나는 이 기능을 주로 정보 수정 API에 유용하게 사용하고 있었다. 더티체킹이 없다면 회원 정보 중에서 이름을 수정한다고 했을 때@Transcationalpublic void updatedMember() { Member member = memberRepository.findById(1L); member.setName("newName"); memberRepository.save(member);}이렇게 바뀐.. 2025. 4. 22.
SpringBoot) 비동기 이벤트 기반으로 Elasticsearch와 RDB간 정합성 유지를 위한 노력 문제 상황회원 정보를 변경하거나 수정하면 더이상 검색 결과에 뜨지 않았다. 기존 구현 : 회원을 이메일과 이름으로 ES를 이용해 검색할 수 있고 이 각각의 도큐먼트는 회원가입 시에 Member 테이블 + Member 인덱스에 저장이 된다. 이후에 회원 정보 수정으로 이름을 변경하면 더이상 검색으로 다른 사용자를 찾을 수 없었고 - problem1회원 탈퇴를 했을 때 (softDelete라 DB에 남아는 있지만)도 여전히 검색으로 조회를 할 수 있었다. - problem2 생각해보니 회원 수정이나 삭제 할 때는 ES에 반영해주는 로직을 구현하지 않았었다 !이럴 경우 RDB와 ES간 정합성이 깨지는 문제가 발생한다.해결 방법 (고민)일단 제일 간단하게는 회원 정보 수정, 삭제 로직에 ES에도 도큐먼트를 .. 2025. 4. 19.
SpringBoot 프로젝트에서 SSE를 활용한 알림 기능 개발 도입 배경Petory 프로젝트에서 사용자에게 알림을 보내야 할 경우가 생겼다.어떤 조건을 만족시켰을 때 스켸줄러로 자주 체크하여 알림 정보를 보내주는 방법이 현재 나의 지식으로 구현할 수 있는 당장 떠오른 방법이다.다만 이렇게 하자니 실시간으로 알림을 보내려는 취지에 부합하지 않다고 느껴졌다. 그래서 실시간으로 알림을 보낼 수 있는 다른 방법을 찾아보았다 ! 스프링부트에서 구현할 수 있는 알림 방식1. PolllingHTTP를 이용한 서버-클라이언트 간 데이터 전달 동작과정 일정 주기로 클라이언트가 서버에 데이터를 요청하고 서버가 현재 상태를 응답.(데이터가 없어도 응답함) 장점 구현이 간단하다. 단점 업데이트 주기가 길면 실시간 성이라고 보기 어렵고 짧으면 불필요한 요청을 보내기 때문에 서버에 .. 2025. 4. 16.
Petory) JPQL을 이용한 DB 조회 성능 개선 (feat. N + 1 문제 해결 포함) 일정 목록을 조회하는 API를 구현함에 있어서 정말 복잡하게 테이블을 조회해야하는 일이 생겼다. 전체 ERD 중 일정 생성에 연관된 테이블은 다음과 같다. 일정 목록 조회를 위해서는 다음과 같은 조회 쿼리가 필요하다.  그에 대한 이유도 각각 아래 서술한 것과 같다. 1. 로그인한 사용자가 만든 일정 조회    -> 반려동물이 없는 일정도 조회하기 위함 2. 로그인한 사용자가 돌보미로 등록된 반려동물의 일정 조회 3. 로그인한 사용자가 소유한 반려동물의 일정 조회  -> 자신의 반려동물이지만 돌보미로 등록된 다른 사용자가 만든 일정 정보 획득 이렇게 조회를 한 후 중복을 제거하면 관련된 모든 일정에 대해 조회가 가능하다.  시도해봤던 로직 1. 로그인한 사용자가 만든 일정 + 로그인한 사용자가 돌보미로 .. 2025. 1. 23.
N + 1 문제와 해결 방법 Fetch Join, Batch Size, Entity Graph DB에서 정말 빈번하게 발생하는 N + 1문제를 인식하고 (드디어) 이해를 해서 포스팅을 해보려고 한다. N + 1 문제란 ?ORM (Object Relational Mapping)을 사용할 때 발생할 수 있는 비효율적인 데이터베이스 쿼리 문제를 말한다.연관관계에 있는 엔티티에서 하나의 엔티티를 조회할 때 관련된 엔티티를 조회하기 위해 추가적인 쿼리가 반복적으로 실행되는 상황을 말한다. 연관관계 (1 : N, N : 1) 의 엔티티를 조회할 때 조회된 데이터 갯수 (n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 즉, 1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것이다. 처음에 오해한 생각 :   내가 로그인이 필요한 모든 메소드에서 MemberAd.. 2025. 1. 10.
ElasticSearch로 사용자 검색 구현 + EC2 서버에 Elasticsearch 배포 Elastic Search란 ?역색인(역인덱스) 구조로 검색 시 속도를 빠르게 처리할 수 있음 1. 인덱스 생성2. 데이터 저장3. 검색 API 요청 구현 과정1. 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' 2. yml 설정3. config 작성 기존에 상속받아서 첫 번째 사진처럼 사용했던 AbstracElasticsearchConfiguration이 Deprecated 되었다.https://docs.spring.io/spring-data/elasticsearch/docs/5.1.9/api/org/springframework/data/elasticsearch/client/erhlc/Abstra.. 2024. 11. 22.
AWS를 위한 기초 용어 와닿지 않으면 암기라도 하자.... VPC (Virtural Private Cloud) 가상 사설 네트워크.AWS를 사용하는 회사라면 100% 사용하고 있으며 이를 통해 클라우드에서 가상의 네트워크 환경을 정의하고 제어할 수 있다. 필요에 따라 네트워크를 만들어서 Public subnet, Private subnet라는 하위 네트워크를 구분하여 사용할 수 있다. * network : 2개 이상의 컴퓨터나 장치가 서로 데이터를 주고 받을 수 있도록 연결된 시스템   Public subnet vs Private Subnet  - Public subnet  : 인터넷 게이트웨이와 직접 연결된 서브넷.    이 서브넷에 있는 EC2 인스턴스는 인터넷에 직접 접근할 수 있다.    일반적으로 웹 서버, 로드 밸런.. 2024. 11. 8.
SpringBoot에 Flyway적용해서 DB 형상 관리 하기 + JPA 옵션, flyway 옵션 정리 Flyway란 ?DB 형상관리 툴이다. == DB 변경 관리 툴 * 형상관리 : sw의 변경사항을 체계적으로 추적하고 통제하는 것. Git은 소스코드 형상관리 툴이고 Flyway는 DB 형상관리 툴이다. 어떤 상황에서 ?개발 도중 스키마가 변경 될 때1. spring:jpa:hibernate:ddl-auto: create or update를 주로 사용한다. 문제점 -> create는 이전 데이터를 다 날려버리므로 배포 환경에서 사용할 수 없음이 명확하고 update는 테이블을 수정하지 않고 부족한 부분을 수정한다. 2. 각 배포 환경을 돌아다니면서 직접 schema 변경 문제점 -> 확인하는 것도 일이고 실수가 나기 쉽다. 이런 DB 가 변경될 상황들에서 변경 관리 이력을 추적하고 관리하기 위해 Flyw.. 2024. 8. 26.
728x90