이번 글은 JPA를 공부 후 프로젝트에 적용하며 JPA 쿼리가 비효율적으로 나가는 상황이 많이 발생 해 블로그 , 책을 참고하여 학습 후 개인 프로젝트에서 테스트 코드를 작성하며 정리합니다. ☀️ N + 1 이란? N + 1 문제는 연관관계가 설정된 엔티티 사이에서 한 엔티티를 조회 시 , 조회된 엔티티의 개수(N개)만큼 연관된 엔티티를 조회하기 위해 추가적인 쿼리가 발생하는 문제를 의미합니다. 엔티티 조회 쿼리(1번) + 조회된 엔티티의 개수(N개)만큼 연관된 엔티티를 조회하기 위한 추가 쿼리(N 번) = N + 1 또는 1 + N ☀️ 테스트 상황 설정 N + 1 문제가 발생하는 상황들을 알아보기 위해 저의 개인 프로젝트 코드를 예시로 설명 하겠습니다. 하나의 카테고리에는 여러개의 상품이 달릴 수 있..
이번 글은 aws 에서 EC2(ubuntu) 생성 후 제 스프링 기반 개인프로젝트를 배포하는 과정에서 해당 이미지와 같은 프리티어 관련 문제가 생겨 뚜렷한 해결방법을.. 찾진 못했지만원인을 발견한 거 같아 작성합니다. (Stack Overflow 등 이것저것 계속 삽질하며 나름 유추한? 원인입니다. 잘못된 지식이라면 피드백 해주시면 감사하겠습니다.) 이전에 이미 ec2에 토이 프로젝트를 배포하여 1년동안 프리티어를 운영해본 경험이 있어 문제 없겠지 하면 마음 편하게 배포를 진행 했지만.. 다음 날 비용체크를 위해 들어가보니 위와 같은 상황이 펼쳐졌다.. 보자마자 계정 지우고.. 다시 만들고.. 지우고 삽질 반복을 하다 3일 정도 포기.. 그러던 와중 ubuntu관련 패키지 설치 or 업데이트 시 외부..
이번 글은 개인 프로젝트(Han-Commerce) 목표 중 하나인 EC2 생성 후 CI/CD 자동화 배포를 진행 하기 전 git pull -> build -> 서버 재실행 과정을 자동화 해보는 법을 학습 후 적용 해보고 제 방식대로 정리해두기 위한 목적의 글입니다. EC2 생성 후 스프링부트 소스 Build 하여 서버 실행까지 해본 상태라고 가정하며 정리합니다.ubuntu OS입니다. 배포 순서 정리 프로젝트를 위치 시킬 경로를 지정 후 해당 경로로 이동합니다. git pull 명령어를 사용 해 최신 프로젝트 소스를 가져옵니다. gradle로 빌드를 진행합니다. 이미 실행중인 애플리케이션이 있으면 종료합니다. 애플리케이션을 실행하는데 필요한 환경변수를 세팅합니다. 애플리케이션을 실행합니다. ..
프로젝트 진행 계획 토이 프로젝트를 시작하기 전 계획을 순서대로 정리프로젝트로 얻고자 하는 목표 설정사용 기술 / 개발 환경 / 도메인 등 정리기능 구현 목록 정리기능 구현 목록을 토대로 도메인 모델링 설계(draw.io)ERD 데이터베이스 설계코딩 시작(이전 단계의 부족한 부분들을 보완하면서 진행) / 테스트 / 문서화배포 / 운영 목 표 지금까지 토이프로젝트를 총 팀 프로젝트 2번 + 개인 프로젝트 1번 진행 했는데 토이프로젝트로 인해 얻고자하는 목표가 뚜렷할수록 긍정적인 결과를 얻었기 때문에 이번에도 목표를 정리 해보았다. Spring Boot 기반으로 ORM은 JPA를 사용하여 RestApi 서버를 구현최대한 웹앱 서버 개발에 있어서 기본적인 기능들을 모두 경험해 볼 수..
모의면접 스터디를 신청하게 된 계기 개발자로서 회사 생활을 시작한 지 1년 정도 지나면서 퇴근 후와 주말 시간을 이용해 개인 공부를 해오면서Java 언어에 대한 공부와 프레임워크가 익숙하다보니 오히려 더 그 부분만 공부를 하는 나를 발견하고"아 내가 지금 나한테 익숙한 부분에만 시간 투자를 하고 있구나"란 생각을 하게 되어내가 좋은 백엔드 개발자로서 나아가기 위해 어떤 부분의 기본기를 더 쌓아야 할까 생각해보기 시작했다. 그러다 보니 주제별로 정리해보면 1. 자바 , 스프링 2. 알고리즘 , 자료구조(코딩테스트) 3. CS 기본기 로 간추려졌다.1번은 처음 프로그래머에 대한 꿈을 꾸게 되고 계속 꾸준히 공부를 하고 있는 부분이였고2번인 알고리즘 , 자료구조는 하루에 2~3문제씩 백준 문제를 풀어가..
쿠키와 세션 정보 유지가 필요한 상황에서 HTTP 특징인 Stateless한 방식을 대처하기 위해 쿠키와 세션을 사용한다. 큰 차이점은 상태정보의 저장 위치이다. 쿠키와 세션 모두 클라이언트가 가지고 있지만 세션은 서버도 저장한다. 쿠키 클라이언트의 상태 정보를 클라이언트의 PC에 저장 후 필요시 정보를 참조하거나 재사용을 가능하게 한다. Key-Value 쌍의 작은 데이터 파일 이름 , 값 , 만료일(저장 기간 설정) , 경로 정보 등으로 구성되어 있다. 클라이언트에 총 300개의 쿠키를 저장할 수 있다. 하나의 도메인 당 20개의 쿠키를 가질 수 있다. 동작방식 클라이언트가 서버에 로그인 요청 서버는 클라이언트의 로그인 요청의 유효성을 확인하고 응답헤더에 set-cookie: user=홍길동을 추가하..
네트워크 레이어 , IP 프로토콜 IP 란 ? IP는 인터넷을 통해 데이터를 주고받을 때 사용되는 통신 규약으로서 네트워크라고 하면 단골로 등장하는 OSI 7계층 LAYER 3 에 위치하는 프로토콜이다. IP는 데이터를 패킷 단위로 나누어 전송하고 , 받는 쪽에서는 그 패킷들을 다시 조립하여 원래의 데이터로 변환하는 과정을 거친다. IP를 통해 전송되는 데이터는 인터넷 상의 다양한 기기들과 통신할 수 있다. IP 주소란? IP 주소는 인터넷에 연결된 각 기기를 구별하기 위해 사용되는 고유 번호이다. IP는 프로토콜 그 자체이고 IP 주소는 IP통신을 하기 위해 각 기기들을 구분하는 고유번호라고 이해하면 된다. IP 주소는 네트워크 내에서 특정 기기를 찾아 데이터를 전송할 수 있도록 도와주며 , 기기들이 ..
신뢰적 데이터 전송의 원리 슬라이딩 윈도우 슬라이딩 윈도우 프로토콜은 두 호스트 간 데이터 전송을 해주는 일반적인 통신 프로토콜이며 . 오류 제어와 흐름 제어를 지원하는 방식입니다. 송신자와 수신자가 각각 윈도우라는 버퍼를 가지고 있으며 , 윈도우의 크기에 따라 한 번에 보낼 수 있는 패킷의 개수가 결정된다. 즉 슬라이딩 윈도우는 윈도우의 크기를 동적으로 조절하면서 효율적인 패킷 전송을 가능하게 한다. 동작 과정 송신자는 윈도우의 크기만큼 패킷을 전송하고 , 각 패킷에 순서 번호를 부여한다. 수신자는 패킷을 받으면 순서 번호에 따라 자신의 윈도우에 저장하고 , 가장 작은 순서 번호를 가진 패킷부터 상위 계층으로 전달한다. 또한 송신자에게 ACK(acknowledgement) 메시지를 보내 받은 패킷을 확..