1. Silhouette Score?[STUDY/ML(Machine Learning)] - [ML] K-means clustering [ML] K-means clustering1. K-means clustering?데이터를 $K$개의 그룹(군집)으로 자동으로 나눠주는 비지도학습 알고리즘각 군집을 대표하는 중심점(centroid)을 그 군집에 속한 데이터들의 평균(mean) 위치로 잡아가면서 군집을blog.chaenii.me 클러스터링은 비지도학습이라 "정답"이 없다. KMeans를 $K=10$으로 돌린 결과와 $K=70$으로 돌린 결과 중 뭐가 더 "좋은" 군집인지 어떻게 판단할까?우선 좋은 군집화란: 같은 군집 안의 데이터끼리는 가깝고, 다른 군집과는 멀어야 한다 이 두 조건을 하나의 점수로 합쳐, 좋..
1. K-means clustering?데이터를 $K$개의 그룹(군집)으로 자동으로 나눠주는 비지도학습 알고리즘각 군집을 대표하는 중심점(centroid)을 그 군집에 속한 데이터들의 평균(mean) 위치로 잡아가면서 군집을 갱신해 나가기 때문에 "K-평균(K-means)"라고 함.정답 라벨 없이, 데이터들끼리 얼마나 가까운지만 보고 그룹을 찾아냄.2. 문제 상황수만 개의 데이터(예: 고객 문의 티켓)가 있는데, 사람이 일일이 보지 않고도 "비슷한 것들끼리 자동으로 묶고 싶다." 라벨(정답)은 없다.그냥 데이터의 분포만 보고 그룹을 찾아내는 것, -> 비지도학습(unsupervised learning).K-Means는 그중 가장 단순하고 널리 쓰이는 알고리즘이다.3. 알고리즘$K$개의 그룹으로 나눈다고 ..
[STUDY/ML(Machine Learning)] - [ML] TF-IDF(Term Frequency-Inverse Document Frequency)TF-IDF든 임베딩이든, 텍스트를 벡터로 바꿨다면 그다음 필요한 건"이 두 벡터가 얼마나 비슷한가"를 숫자 하나로 표현하는 방법이다.가장 많이 쓰는 두 가지가 코사인 유사도와 유클리드 거리인데, 이 둘은 측정하는 대상이 다르다.1. 코사인 유사도: 방향이 비슷한가$$\cos\theta = \frac{a \cdot b}{|a||b|}$$분자 $a \cdot b$는 내적(dot product), 분모는 각 벡터의 길이(norm)를 곱한 것. 결과는 두 벡터 사이의 각도의 코사인 값이다.두 벡터가 같은 방향이면 $\cos\theta = 1$ (완전히 유사)직..
1. TF-IDF?정의단어의 빈도(TF)와 역문서빈도(IDF)를 곱해서, 문서 내 각 단어의 "중요도"를 가중치로 매기는 방법단순히 "몇 번 나왔는가"만 세는 빈도수 카운트(Bag of Words)의 한계를 보완쓰임문서 간 유사도 계산검색 결과 랭킹(중요한 단어가 많이 매칭될수록 상위 노출)특정 문서 안에서 핵심 키워드 추출2. 왜 필요한가? - 단순 빈도수의 한계컴퓨터는 "배송 문의 요청"이라는 문자열을 그 자체로 이해하지 못함 → 비교·계산을 하려면 숫자(벡터)로 바꿔야 함.가장 단순한 방법: 단어가 몇 번 나왔는지 세는 것(Bag of Words)문제: "문의", "요청" 같이 거의 모든 문서에 등장하는 흔한 단어가 카운트를 지배진짜 그 문서를 구별짓는 단어("환불", "파손", "교환")는 빈도수..
1. Observer Pattern?정의한 객체(Subject)의 상태가 바뀌면, 그 객체에 의존하는 여러 옵저버(Observers)들이 자동으로 알림을 받고 갱신되는 구조즉, 1 → N(일대다) 의존성을 정의하는 패턴흔히 Pub/Sub(발행/구독) 모델이라고도 부른다.효과상태 변화를 자동 전파느슨한 결합(Loose Coupling) 확보새로운 옵저버를 쉽게 추가/삭제할 수 있어 OCP(Open/Closed 원칙) 만족뉴스나 유튜브 같은 것!유튜버(Subject) ↔ 구독자(Observers)유튜버가 영상 업로드 → 여러명의 구독자에게 영상 업로드 알림구독자들은 -해당 채널을 구독함으로써 채널에 어떠한 변화(영상을 올리는 등)가 생기게 되면 바로 연락을 받아 탐지반면 구독 안 한 시청자에게는 알림이 가지..
1. 디자인 패턴이란?정의: 반복 출현하는 설계 문제를 문제-맥락-해법 템플릿으로 정리한 이름 있는 해결책Someone has already solved your problems.→ "누군가 당신의 문제를 이미 해결했다": 디자인 패턴은 정해지거나 만들어진 프레임워크 또는 모듈 같은 기능이 아닌, 선배 개발자들이 경험하며 쌓아 온 노하우라는 것.패턴 ≠ 코드 스니펫→ 설계 수준의 역할·책임·협력에 대한 약속(의도·트레이드오프 포함)효과팀의 공유 언어팀원간의 의사소통이 편리해진다. 또한 통일성을 줄 수 있음. e.g.) “여긴 Strategy 패턴을 사용하자” 한마디로 의도와 구조가 모두 전달됨.재사용 가능한 구조 습득, 설계 품질(확장성/유지보수성/가독성) 상승리뷰·온보딩 속도 ↑, 설계 토론 비용 ↓경..
기본 개념Spring Web MVC 패턴Spring Web MVC는 Model-View-Controller(MVC) 패턴을 기반으로 한다.Model: 애플리케이션의 데이터와 비즈니스 로직 담당View: 사용자 인터페이스 담당. (JSP, Thymeleaf 등의 템플릿 엔진)Controller: 사용자 요청을 처리, 모델-뷰 연결 -> Dispatcher Servlet이 컨트롤러 호출Dispatcher Servlet이 때 Dispatcher Servlet은 Spring Web MVC 프레임워크의 핵심 구성 요소로서, 클라이언트의 모든 요청을 받아 적절한 컨트롤러(핸들러)를 찾아 전달하는 역할을 한다.이렇게 컨트롤러 구현을 단순화할 수 있으며, 비즈니스 로직에 집중하고 HTTP 요청 및 응답 처리 등에 대..
ORM이란?ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어(OOP 언어, Java/C#등)와 관계형 데이터베이스 간의 데이터 변환을 자동으로 처리하는 기술ORM을 사용하면 SQL 쿼리 대신 직관적인 코드로 데이터를 조작할 수 있다.ORM은 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 객체 모델과 관계형 데이터베이스 간의 불일치를 해결하고, 이를 통해 개발자는 데이터베이스를 간접적으로 조작할 수 있다.ORM의 장/단점장점생산성 향상: SQL 쿼리 작성을 자동화해 개발 시간을 단축시킬 수 있다.유지보수성 향상: 객체 지향적인 코드로 데이터베이스를 관리하므로 유지보수가 용이하다.데이터베이스 독립성: 데이터베이스 종류에 상관없이 동일한 코드로 작동객체 지향적 접근:..
QueryDSL?QueryDSL은 데이터베이스 쿼리를 생성하기 위한 자바 라이브러리로, JPQL(Java Persistence Query Language)을 보다 유연하게 사용할 수 있도록 도와준다.주로 JPA(Java Persistence API)와 함께 사용되며, 런타임 시점에 유효성 검사가 가능하며, IDE의 자동완성 기능을 지원하여 쿼리 작성 시 오타 등을 방지하는 등의 장점이 있다.기능 및 장점타입 안정성(Type Safety)Java 코드로 쿼리 작성 -> 컴파일 시점에서 타입 안정성 제공오타나 잘못된 속성명을 사용할 경우 컴파일 오류로 잡아낼 수 있어 개발 단계에 도움을 줄 수 있다.Entity 클래스와 QueryDSL의 연동엔티티 클래스를 기반으로 쿼리 작성 가능-> 데이터베이스 테이블과 ..
지난 정렬/페이징에 이어서 이번엔 검색 기능을 구현해 보기로 했다. [SpringBoot/JPA] Spring Data JPA 페이징 구현하기쇼핑몰은 홈에서 상품 리스트를 보여준다. 새 상품별, 인기순 등 조건에 따라 리스트를 보여주려고 생각하니 페이징을 해야겠다는 생각을 하게 됐다. Spring Data JPA는 데이터베이스에서 데이터를chaeyami.tistory.com하다보니 필터링 기준도 많아지고, 카테고리 별 필터링이나 정렬/검색은 특정 상황에서만 적용되면 안 된다. 모든 결과에서 정렬/필터링이 적용되어야 하는 것. 그래서 이는 QueryDSL 을 사용해 구현하기로 했다.굳이 JPA로 조건별 상품 가져와 놓고 또 새로운 라이브러리를 쓰는 이유는... 더보기더보기결론부터 말하자면 상당히 비효율적이..
Spring Data JPA 는 Spring 프레임워크에서 JPA를 더욱 쉽게 사용할 수 있도록 지원하는 모듈이다.이전 JPA/Hibernate에 대해 알아볼 때, EntityManager를 주입받아 사용했다.그러나 Spring Data JPA는 Repository 인터페이스를 통해 JPA를 추상화한다. 즉, Repository 인터페이스를 정의하면 이를 구현해 사용할 때 Spring Data JPA가 자동으로 JPA의 구현체를 생성한다는 거다.그래서 JPA 구현체(Hibernate등)을 따로 사용할 필요가 없다.주요 특징/장점Repository 인터페이스 제공 : 기본적인 CRUD 작업 쉽게 구현 -> 생산성 향상쿼리 메서드 기능메서드 이름 규칙을 따르면 별도의 쿼리 작성 없이도 필요한 쿼리를 자동으로..
JPA(Java Persistent API)JPA(Java Persistence API) : ORM 기술의 표준 인터페이스ORM은 객체와 관계형 데이터베이스를 매핑해 주는 기술이며, JPA는 이를 표준화한 것이다.그러니까, 자바 애플리케이션에서 관계형 데이터베이스를 사용할 때 이를 객체와 매핑해 주며 사용하기 위한 인터페이스라는 것이다.따라서 사용하기 위해서는 구현체가 필요하고, JPA를 구현한 대표적인 프레임워크로는 Hibernate, EclipseLink, DataNucleus 등이 있으며, 이 중 Hibernate가 가장 널리 사용된다. [OOP] ORM(Object-Relational Mapping)ORM이란?ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어(O..
JDBC란?JDBC(Java Database Connectivity) : 애플리케이션에서 데이터베이스에 데이터를 저장하거나 업데이트, 접근할 수 있도록 도와주는 자바 API데이터베이스 연결, SQL문 실행, 쿼리 결과 처리 등을 위한 표준 인터페이스를 제공한다.등장 배경애플리케이션 개발 시 중요 데이터는 주로 데이터베이스에 저장된다. 클라이언트가 데이터를 저장하거나 조회할 때 과정은 간단히 다음과 같다.애플리케이션 서버는 TCP/IP를 통해 데이터베이스와 연결하고(커넥션 연결),연결된 커넥션으로 SQL을 전달하면 데이터베이스가 SQL 수행한 결과를 보내고, 애플리케이션에서 응답으로 받는다.하지만, 수십개에 달하는 각 관계형 데이터베이스마다 연결, SQL 전달, 결과 응답 방식이 다르므로, 데이터베이스 변..
결제 api인 아임포트(iamport)가 포트원으로 이름을 바꿨다! 아무튼 나는 이걸 사용해서 결제를 구현했다.결제 기능을 구현하기 전에, 당연히 장바구니/주문 기능부터 구현해야 한다. 주문 -> 결제가 이루어지기까지 전체 과정을 먼저 설계했다. 엔티티 엔티티 설계 아래는 우리 프로젝트 전" data-og-host="chaeyami.tistory.com" data-og-source-url="https://chaeyami.tistory.com/252" data-og-url="https://chaeyami.tistory.com/252" data-og-image="https://blog.kakaocdn.net/dna/bIIzI7/hyVSZiOV2D/AAAAAAAAAAAAAAAAAAAAAPMLBXDIspLptGx8_i4LAiR58jZvTHVysYeOCrrVjk_r/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1785509999&allow_ip=&allow_referer=&signature=6M5X6%2BQ3sl87mwjgJO3Tfpz7S2E%3D
주문, 결제 구현 전 장바구니 기능을 구현하면서, 사용자가 상품을 장바구니에 넣고 -> 주문 -> 결제가 이루어지기까지 전체 과정을 먼저 설계했다.엔티티엔티티 설계아래는 우리 프로젝트 전체 ERD이다.이 많은 테이블이 주문/결제를 위해 존재한다고 봐도 무방... 그러나 카테고리나 상품 색상, 썸네일등 필수적이지 않은 테이블을 제외하고 살펴보면, 1. 상품 테이블(Product) : 상품 정보를 담은 엔티티. 이는 상품 이름과 가격, 썸네일 등을 담고 있다.상품 관리 테이블(ProductManagement) : 상품을 참조해 사이즈/색상 등의 세부 옵션별로 상품 저장실제로 사용자가 보는 상품 리스트, 장바구니/주문에 사용되는 객체2. 따라서 상품을 장바구니에 담으면 ProductManagement 테이블을..