| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- java #문법
- java
- sql #내일배움캠프 #스파르타코딩클럽
- html #css #부트스트랩 #웹사이트 #개발 #초보 #til #내일배움캠프 #스파르타코딩클럽
- sql #부트캠프 #내일배움캠프 #웹관리자 #도전 #학습
- Today
- Total
목록TIL/Spring (16)
Hyeok의 웹 개발 블로그
✅ 임베딩텍스트(문자)를 숫자 벡터로 변환하는 작업숫자로 변환된 벡터를 벡터 DB에 저장되어 나중에 유사한 질문 검색(RAG)등에 사용OpenAI의 대표 임베딩 모델 → text-embedding-ada-002✅ Spring OpenAI 임베딩Spring AI는 OpenAI의 텍스트 입베딩 모델 지원OpenAI의 텍스트 임베딩은 텍스트 문자열의 연관성을 측정임베딩은 부동 소수점 숫자로 구성된 벡터두 벡터 간의 거리로 연관성 측정 → 가까우면 연관성 높고, 멀면 연관성 낮다.✅ 필수 조건OpenAI 임베딩 모델에 엑세스 하려면 OpenAI로 API를 만들어야 한다.OpenAI API 키 페이지 에서 토큰 생성Spring AI 프로젝트는 openai.com 에서 얻은spring.ai.openai.api-ke..
🔎 페이지네이션(Pagination)많은 데이터를 한 번에 다 보여주면 느려지니까, 적당히 나눠서 보여주는 방법 🔎 무한스크롤(Infinite Scroll)스크롤을 내릴 때마다 자동으로 데이터를 더 보여주는 방식 🔎 커서 기반 페이지네이션(Cursor Pagination)"어디까지 봤는지 표시"해서 그 다음 데이터를 보여주는 방식 🔎 오프셋 기반페이지 번호로 데이터를 나눠 보여줌 SELECT * FROM item ORDER BY created_at DESC LIMIT 10 OFFSET 100000000;이런 쿼리는 앞에 1억 개 데이터를 먼저 읽고 그 다음 10개를 준다.→ 점점 느려진다. 커서 기반"마지막으로 본 아이디(ID)"를 기억하고, 그 다음부터 보여준다.예:1페이지: id 1~1..
✅단위 테스트작은 코드 조각을 검증빠르게 수행격리된 방식으로 처리하는 자동화된 테스트👍좋은 테스트도메인 모델 및 알고리즘 ( Entity, Utill 클래스)- 노력 대비 단위 테스트의 가치가 매우 높다.- 해당 코드가 복잡하거나 중요한 로직을 수행해서 테스트의 회귀 방지 향상- 외부 의존성이 없어서 테스트 유지비를 낮추기 때문에 저렴👎 나쁜 테스트간단한 코드 (간단한 DTO, Utill) , @Getter, @Setter, @Builder 등등- 이러한 테스트는 가치가 없어서 할 필요 X컨트롤러 - 엔드투 엔트 테스트가 적합- 단위 테스트를 적용 X 더보기좋은 단위 테스트의 4가지 특성1. 회귀 방지 -> 기능 오류를 방지2. 리팩토링 내성 -> 리팩토링을 해도 테스트가 깨지지 않음3. 빠른 피드백..
✅단방향 연관관계단방향 연관관계는 아래와 같이 연관관계에 있는 두 객체 사이에 한 방향으로의 참조가 존재하는 상태- Team -> Member- Member -> TeamTeam 입장에서는 Member 와 1:N 연관관계를 가지지만, Member 입장에서는 Team 과 N:1 연관관계이고 어떤 방향이든 두 객체 사이의 한 방향의 참조만 존재한다면 모두 단방향 연관관계라 할 수 있다.✔ @OneToOne@OneToOne 연관관계는 두 테이블 / 객체가 1:1 연관관계일 때 사용- 1:1연관관계에 있는 객체간 참조 방향을 어떻게할지 잘 결정해야함.- 물리적으로 분리되어야하는 테이블인지 고민 (데이터의 생명주기 혹은 사용 패턴을 토대로 고민 가능)✔ @ManyToOne테이블상의 외래키 위치와 객체상의 참조 위..
✅영속성이란?영속성( 永(길게) 續(속하다) - Persistence)이란, 프로그램이 종료된 이후에도 데이터가 사라지지 않고 저장되는 성질을 말합니다.즉, 메모리(휘발성 공간)가 아닌 디스크(비휘발성 저장소)에 데이터를 영구히 보존하겠다라는 강력한 의지가 나타내기 위한 것입니다. ✅JPA에서 영속성이란?JPA는 객체(Entity)와 데이터베이스 테이블(Table)간의 중간자 역할을 하며, 자바 객체를 데이터베이스에 ‘영속’시키는 과정을 관리하기 위한 라이브러리에요.한명의 유치원 선생님이 여러 유치원생을 관리하려면 유치원이라는 환경이 필요하듯 여러 객체를 관리하기 위한 환경이 바로 영속성 컨텍스트(Persistence Context) 라는 메모리 영역을 필요해요.그래서 JPA에서의 영속성은 영속성 컨텍스..
✅ 배달 기능 프로젝트 S.A 작성에 대한 피드백 - 와이어 프레임, ERD , API 명세서를 작성하여 피드백을 받아보았습니다.와이어프레임와이어프레임은 힘을 조금 빼고유스케이스 다이어그램 or 클래스 다이어그램 그려오는 거 추천(다음 팀플부터)ERD주문 테이블에 있는 중복 사용자 ID 지우기리뷰 테이블이 주문 ID만 가지고 있어도 다른 테이블 데이터를 알 수 있지만, 조회할 때 주문 데이터를 거쳐서 그 외 데이터를 조회하는 것보다 아예 다른 테이블을 필드로 가지고 있는 것도 설계상 괜찮다.특정 주문에 해당하는 리뷰가 필요하다면 주문만 가지고 있기다른 루트로도 리뷰를 조회하고 싶다면 다른 테이블을 가지고 있기조회가 대부분인 경우에는 매번 조인해서 데이터를 조회하는 게 성능에 좋지 않을 수 있어서 중복되는..
✅ 코드 개선 - Early ReturnString encodedPassword = passwordEncoder.encode(signupRequest.getPassword());UserRole userRole = UserRole.of(signupRequest.getUserRole()); if (userRepository.existsByEmail(signupRequest.getEmail())) { throw new InvalidRequestException("이미 존재하는 이메일입니다.");이렇게 되어있던 코드를 리팩토링을 통해 passwordEncoder의 encode() 동작이 불필요하게 일어나지 않게 수정했다.if (userRepository.existsByEmail(signupR..
🔎Formatter- 주로 사용자 지정 포맷을 적용해 데이터 변환을 처리할 때 사용- Formatter는 ConversionService와 비슷한 목적을 가지지만 문자열을 객체로 변환하거나 객체를 문자열로 변환하는 과정에서 포맷팅을 세밀하게 제어할 수 있다.Formatter InterfacePrinter, Parser 상속객체를 문자로 변환하고 문자를 객체로 변환하는 두가지 기능을 모두 가지고 있다.PrinterObject를 String으로 변환한다.ParserString을 Object로 변환한다.Formatter InterfacePrinter, Parser 상속객체를 문자로 변환하고 문자를 객체로 변환하는 두가지 기능을 모두 가지고 있다.PrinterObject를 String으로 변환한다.Parse..
🔎HttpMessageConverterView를 읍답하는 것이 아닌, Rest API(HTTP API)로 JSON, TEXT, XML 등의 데이터를 응답Message Body에 직접 입력하는 경우 HttpMessageConverter를 사용💡 1. SSR → @Controller + View Template → 서버 측에서 화면을 동적으로 그린다. 2. CSR → @RestController + Data → 클라이언트 측에서 화면을 동적으로 그린다. 3. 실제로는 두가지 기술이 함께 사용되는 경우가 많다. - HTTP 응답 메세지 Body에 데이터를 직접 입력 후 반환 - 요청 Accept Header + Controller 반환 타입 HttpMessageConverter가 적용되..
📌IOC (제어의 역전 , Inversion Of Control)객체의 생성 및 생명주기 관리를 개발자가 직접 하는 것이 아니라 컨테이너가 담당객체 간의 결합도를 낮춰 유연한 코드가 된다. 📌DI (의존성 주입, Dependency Injection)Spring이 객체 간의 의존성을 자동으로 주입해주는 것을 의미한 객체가 다른 객체를 사용할 때, 해당 객체를 직접 생성하지 않고 Spring이 주입해주는 방식IOC를 구현하는 방식 중 하나 💡 개발자가 직접 관리하는 코드객체 간의 강한 결합을 유발한다.새로운 Service나 Repository가 생긴다면 클라이언트측 코드에 영향이 생긴다.💡 Spring Container 가 관리 (IOC, DI) 구현 코드가 변경되어도 클라이언트의 코드에는 영향이..