최근 한 프로젝트에서 HTTP 요청/응답을 로깅을 구현하게 되어 해당 글을 쓰게 되었습니다! ✔️ 프로젝트에 로깅을 도입하게 된 계기 운영서버에서 개발자가 발견하지 못한 엣지케이스 같은게 있을 수도 있는데, 이러한 경우에 대한 대비가 전혀되고 있지 않았던 상황이라는 생각이 들었어요. 따라서 로깅 시스템을 구축하여, 실제 운영상황 및 QA시에 버그가 발생했을때, 추적을 용이하게 하기 위해서 도입을 결정하게 되었습니다! 이전에 다른 프로젝트 했을때도, 사실 로깅을 신경을 많이 쓰지 못했기에 에러가 나는 상황에서 불편함이 종종 있었어요. 예를 들어, 클라에서 에러난다고 하면 원인을 찾고 빠르게 대응하기가 어려웠다거나... 그래서 지금처럼 실제 운영되고 있는 서비스에서는 더더욱 있으면 좋겠다 싶었습니다!..
예를 들어, 사용자에게 게시글 목록을 조회한다고 했을 때 한 화면에 10개씩 데이터를 보여주려고 한다.그런데 이때 클라이언트가 서버에게 DB에 존재하는 모든 게시글을 받아온다면 어떻게 될까? 성능이 매우매우 떨어질 것이다. 게시글 개수가 수백만,, 더 나아가 여러 사용자가 동시에 게시글 목록을 조회한다면DB에 많은 부하가 걸릴 것이다.. 이렇게 부하와 데이터 로딩 속도를 효율적으로 조절해주기 위해 등장한 것이 페이지네이션! 🪽 페이징(Paginatinon)데이터를 쪼개서 일부만 가져오는 기법 크게 offset 기반 페이징과, cursor 기반 페이징이 있다. 🪽 offset 페이징offset : 어디부터 시작해서 가져올것인지?limit : 몇개의 데이터를 가져올 것인지?SELECT *FROM pro..
해당 글은 지난 글에 이어서 작성하는 글이며, 김영한님의 '스프링 DB 1편 - 데이터 접근 핵심 원리' 강의를 참고했습니다. 멀티스레드 환경에서의 트랜잭션 동작 - feat. 테스트 코드최근에 한 프로젝트에서 테스트 코드를 짜다가 트러블 슈팅 과정에서 새롭게 안 사실이 있어서 블로그를 작성하게 되었다. "동일한 이메일로 사용자가 동시에 가입할 경우, 하나의 계정만 생성judyalwayswantscarrot.tistory.com 지난번 글에서 "멀티스레드 환경에서의 트랜잭션 동작"을 살펴보았다! 아래와 같이 테스트 코드를 짰을때, 메인 스레드인 테스트가 시작되는 메서드와 내부에서 생성된 3개의 스레드들에서 트랜잭션이 제대로 동작하고 있는지 확인보았다. 결과적으로는 메인 스레드인 테스트 메서드에서는..
최근에 한 프로젝트에서 테스트 코드를 짜다가 트러블 슈팅 과정에서 새롭게 안 사실이 있어서 블로그를 작성하게 되었다. "동일한 이메일로 사용자가 동시에 가입할 경우, 하나의 계정만 생성되는지"에 대한 테스트 코드를 짰다. 이를 위해 멀티스레드 환경에서 동시에 같은 이메일로 유저를 저장했을 때, 하나의 계정만 생성되었는지 확인하고자 했다. 처음 구성한 코드는 아래와 같다.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950@DataJpaTestclass MemberRepositoryTest { @Autowired private MemberRepository memberRepositor..
*인프런 '김영한'님의 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의를 듣고 정리한 내용입니다. 회원 도메인 개발 회원 서비스 개발@Transactional(readOnly = true) 조회(읽기)용일 때 사용하면 성능에 좋다.@RequiredArgsConstructor private final MemberRepository memberRepository**;** 생성자 주입 방법(아래와 같이 많이 사용) 🌟 @Transactional jpa의 모든 데이터 변경이나 로직은 가급적 트랜잭션 안에서 실행되야 함. 회원 테스트db에 쿼리 나가는 걸 보고 싶다면, @Rollback(false)한다.test > resources > application.yml 이유가? 좀 더 찾아봐야겠다 끝..
*인프런 '김영한'님의 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의를 듣고 정리한 내용입니다. 1.프로젝트 설정 프로젝트 생성 *3.0.5버전은 java 17에서 지원, java11 지원 안 함. 라이브러리 살펴보기 hikariCP 커넥션 풀 → 찾아보기 라이브러리 추가(from. 강의자료) Validation (JSR-303 validation with Hibernate validator) 모듈을 꼭! 추가해주세요. build.gradle에 다음 코드 추가 implementation 'org.springframework.boot:spring-boot-starter-validation' JUnit4 추가 (안 하면 JUnit5로 동작) testImplementation("org.ju..
스터디 2회차 ✅ 범위 : 쿼리 메소드 기능 - 스프링 데이터 JPA 페이징과 정렬까지 단축키 → shift + F6: 한 꺼번에 이름 바꾸기 1. 쿼리 메소드 기능 메소드 이름으로 쿼리 생성 1.1 범위 지정 쿼리 메소드를 사용해 조건에 맞는 데이터를 쉽게 조회할 수 있다. 쿼리 메소드에서 제공하는 키워드를 사용해 정확한 범위를 지정할 수 있다. 1.2 쿼리 메소드 필터 조건(Distinct, And, Or 등..) Spring Data JPA - Reference Documentation 1.3예시 public interface MemberRepository extends JpaRepository { List findByEmailAndName(String email, String name); List..
인프런 강의 중 김영한님의 실전! 스프링 데이터 JPA 강의를 들으면서 정리한 내용입니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-JPA-%EC%8B%A4%EC%A0%84/dashboard 실전! 스프링 데이터 JPA - 인프런 | 강의 스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다. www.inflearn.com UMC에서 진행한 프로젝트 리팩토링을 위해서 팀원들과 JPA 스터디를 진행중이다! 1주차는 섹션 3까지 학습했다. 서로 강의를 듣고 ..