채야미의 코드레시피🍳

분류 전체보기

STUDY/Design Pattern
1. Observer Pattern?정의한 객체(Subject)의 상태가 바뀌면, 그 객체에 의존하는 여러 옵저버(Observers)들이 자동으로 알림을 받고 갱신되는 구조즉, 1 → N(일대다) 의존성을 정의하는 패턴흔히 Pub/Sub(발행/구독) 모델이라고도 부른다.효과상태 변화를 자동 전파느슨한 결합(Loose Coupling) 확보새로운 옵저버를 쉽게 추가/삭제할 수 있어 OCP(Open/Closed 원칙) 만족뉴스나 유튜브 같은 것!유튜버(Subject) ↔ 구독자(Observers)유튜버가 영상 업로드 → 여러명의 구독자에게 영상 업로드 알림구독자들은 -해당 채널을 구독함으로써 채널에 어떠한 변화(영상을 올리는 등)가 생기게 되면 바로 연락을 받아 탐지반면 구독 안 한 시청자에게는 알림이 가지..
STUDY/Design Pattern
1. 디자인 패턴이란?정의: 반복 출현하는 설계 문제를 문제-맥락-해법 템플릿으로 정리한 이름 있는 해결책Someone has already solved your problems.→ "누군가 당신의 문제를 이미 해결했다": 디자인 패턴은 정해지거나 만들어진 프레임워크 또는 모듈 같은 기능이 아닌, 선배 개발자들이 경험하며 쌓아 온 노하우라는 것.패턴 ≠ 코드 스니펫→ 설계 수준의 역할·책임·협력에 대한 약속(의도·트레이드오프 포함)효과팀의 공유 언어팀원간의 의사소통이 편리해진다. 또한 통일성을 줄 수 있음. e.g.) “여긴 Strategy 패턴을 사용하자” 한마디로 의도와 구조가 모두 전달됨.재사용 가능한 구조 습득, 설계 품질(확장성/유지보수성/가독성) 상승리뷰·온보딩 속도 ↑, 설계 토론 비용 ↓경..
STUDY/Spring
기본 개념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 요청 및 응답 처리 등에 대..
STUDY/Spring
ORM이란?ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어(OOP 언어, Java/C#등)와 관계형 데이터베이스 간의 데이터 변환을 자동으로 처리하는 기술ORM을 사용하면 SQL 쿼리 대신 직관적인 코드로 데이터를 조작할 수 있다.ORM은 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 객체 모델과 관계형 데이터베이스 간의 불일치를 해결하고, 이를 통해 개발자는 데이터베이스를 간접적으로 조작할 수 있다.ORM의 장/단점장점생산성 향상: SQL 쿼리 작성을 자동화해 개발 시간을 단축시킬 수 있다.유지보수성 향상: 객체 지향적인 코드로 데이터베이스를 관리하므로 유지보수가 용이하다.데이터베이스 독립성: 데이터베이스 종류에 상관없이 동일한 코드로 작동객체 지향적 접근:..
STUDY/Spring
QueryDSL?QueryDSL은 데이터베이스 쿼리를 생성하기 위한 자바 라이브러리로, JPQL(Java Persistence Query Language)을 보다 유연하게 사용할 수 있도록 도와준다.주로 JPA(Java Persistence API)와 함께 사용되며, 런타임 시점에 유효성 검사가 가능하며, IDE의 자동완성 기능을 지원하여 쿼리 작성 시 오타 등을 방지하는 등의 장점이 있다.기능 및 장점타입 안정성(Type Safety)Java 코드로 쿼리 작성 -> 컴파일 시점에서 타입 안정성 제공오타나 잘못된 속성명을 사용할 경우 컴파일 오류로 잡아낼 수 있어 개발 단계에 도움을 줄 수 있다.Entity 클래스와 QueryDSL의 연동엔티티 클래스를 기반으로 쿼리 작성 가능-> 데이터베이스 테이블과 ..
Dev/Spring Boot
지난 정렬/페이징에 이어서 이번엔 검색 기능을 구현해 보기로 했다. [SpringBoot/JPA] Spring Data JPA 페이징 구현하기쇼핑몰은 홈에서 상품 리스트를 보여준다. 새 상품별, 인기순 등 조건에 따라 리스트를 보여주려고 생각하니 페이징을 해야겠다는 생각을 하게 됐다. Spring Data JPA는 데이터베이스에서 데이터를chaeyami.tistory.com하다보니 필터링 기준도 많아지고, 카테고리 별 필터링이나 정렬/검색은 특정 상황에서만 적용되면 안 된다. 모든 결과에서 정렬/필터링이 적용되어야 하는 것. 그래서 이는 QueryDSL 을 사용해 구현하기로 했다.굳이 JPA로 조건별 상품 가져와 놓고 또 새로운 라이브러리를 쓰는 이유는... 더보기더보기결론부터 말하자면 상당히 비효율적이..
STUDY/Spring
Spring Data JPA 는 Spring 프레임워크에서 JPA를 더욱 쉽게 사용할 수 있도록 지원하는 모듈이다.이전 JPA/Hibernate에 대해 알아볼 때, EntityManager를 주입받아 사용했다.그러나 Spring Data JPA는 Repository 인터페이스를 통해 JPA를 추상화한다. 즉, Repository 인터페이스를 정의하면 이를 구현해 사용할 때 Spring Data JPA가 자동으로 JPA의 구현체를 생성한다는 거다.그래서 JPA 구현체(Hibernate등)을 따로 사용할 필요가 없다.주요 특징/장점Repository 인터페이스 제공 : 기본적인 CRUD 작업 쉽게 구현 -> 생산성 향상쿼리 메서드 기능메서드 이름 규칙을 따르면 별도의 쿼리 작성 없이도 필요한 쿼리를 자동으로..
STUDY/Spring
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..
STUDY/Spring
JDBC란?JDBC(Java Database Connectivity) : 애플리케이션에서 데이터베이스에 데이터를 저장하거나 업데이트, 접근할 수 있도록 도와주는 자바 API데이터베이스 연결, SQL문 실행, 쿼리 결과 처리 등을 위한 표준 인터페이스를 제공한다.등장 배경애플리케이션 개발 시 중요 데이터는 주로 데이터베이스에 저장된다. 클라이언트가 데이터를 저장하거나 조회할 때 과정은 간단히 다음과 같다.애플리케이션 서버는 TCP/IP를 통해 데이터베이스와 연결하고(커넥션 연결),연결된 커넥션으로 SQL을 전달하면 데이터베이스가 SQL 수행한 결과를 보내고, 애플리케이션에서 응답으로 받는다.하지만, 수십개에 달하는 각 관계형 데이터베이스마다 연결, SQL 전달, 결과 응답 방식이 다르므로, 데이터베이스 변..
Dev/Spring Boot
결제 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=1772290799&allow_ip=&allow_referer=&signature=2qqjpTzs9O%2FS0F4S4CtrnZ9yRww%3D
Dev/Spring Boot
주문, 결제 구현 전 장바구니 기능을 구현하면서, 사용자가 상품을 장바구니에 넣고 -> 주문 -> 결제가 이루어지기까지 전체 과정을 먼저 설계했다.엔티티엔티티 설계아래는 우리 프로젝트 전체 ERD이다.이 많은 테이블이 주문/결제를 위해 존재한다고 봐도 무방... 그러나 카테고리나 상품 색상, 썸네일등 필수적이지 않은 테이블을 제외하고 살펴보면, 1. 상품 테이블(Product) : 상품 정보를 담은 엔티티. 이는 상품 이름과 가격, 썸네일 등을 담고 있다.상품 관리 테이블(ProductManagement) : 상품을 참조해 사이즈/색상 등의 세부 옵션별로 상품 저장실제로 사용자가 보는 상품 리스트, 장바구니/주문에 사용되는 객체2. 따라서 상품을 장바구니에 담으면 ProductManagement 테이블을..
Dev/Spring Boot
쇼핑몰 페이지는 기본적으로 로그인 여부와 상관 없이 이용 가능하지만, 특정 기능에는 로그인한 사용자의 정보가 필요하다. 문의 기능은 로그인 여부에 따라 정보 요청이 달라지고(비로그인시 이름,이메일을 입력), 문의 답변과 리뷰 작성은 로그인한 사용자만 가능하게 했다. 클라이언트에서 이를 가져오는 것은 보안에 취약하므로 내부에서 현재 로그인한 사용자 정보를 사용하는 것이 안전하다고 판단했다. 로그인 중인 사용자의 정보를 가져오는 방법에는 두 가지가 있다. SecurityContextHolder 클래스를 이용하는 방법, 그리고 우리는 로그인에 jwt를 사용하고 있으므로, 클라이언트에서 요청을 보낼 때 Header에서 보내는 accesstoken을 사용할 수 있다. Spring Security - 인증과 인가 ..
Dev/Spring Boot
쇼핑몰은 홈에서 상품 리스트를 보여준다. 새 상품별, 인기순 등 조건에 따라 리스트를 보여주려고 생각하니 페이징을 해야겠다는 생각을 하게 됐다. Spring Data JPA는 데이터베이스에서 데이터를 페이징하는 기능을 지원하기 때문에 이를 이용하기로 함! React와 함께 REST API로 구현 중이기 때문에, 클라이언트에서 URL 파라미터로 번호, 크기를 보내 페이징을 하도록 설계했다. 따라서 컨트롤러에서 URL 파라미터로 페이지 번호와 크기를 받고, 서비스 클래스에서 직접 Pageable(번호, 크기 담은 객체)을 생성해 서비스 메서드에서 URL 파라미터를 메서드로 받도록 구현했다. 페이지 번호 : 말 그대로 페이지 번호이다. 0부터 시작 크기 : 한 페이지 안에 보여줄 요소의 개수 기존 서비스 & ..
Dev/Spring Boot
MySQL과 Workbench 설치MySQL 설치하기 [MySQL] MySQL, MySQL Workbench 설치하기2024.04.19 글 업데이트! 업데이트 내용 : MySQL 버전. 끝. 다운로드 링크 : https://dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Note: MySQL 8.0 is the final series with MySQL Installer. As of MySQL 8chaeyami.tistory.comConnections 생성워크벤치를 실행하고, + 버튼을 눌러 커넥션을 생성한다.원하는 커넥션 이름으로 설정해 Test ConnectionMySQL 설치시에 설정했던 root..
Dev/Spring Boot
관리자 페이지에서 판매할 상품을 등록한다. 엔티티와 함께 등록 로직도 다 구현했으니 이제 사진을 업로드 해야 한다. 우선 구조를 생각해보자. 사진은 서버에 저장되어야 하며, 경로를 DB에 저장해야 한다. -> MultipartFile 사용 : Spring의 파일 업로드 인터페이스 한 상품 객체에 여러 사진 경로가 저장될 수 있어야 한다. -> 상품 엔티티에 사진 경로 리스트 필드 리스트 필드는 OneToMany로 구현해야 한다. -> 썸네일 엔티티가 별개로 필요하다. 정리하면 이미지 업로드는 사진을 저장할 엔티티(테이블)을 만든다. MultipartFile 인터페이스로 구현한다. 상품과 썸네일은 일대다 (1:N) 관계 엔티티 설정 ProductThumbnail 엔티티 생성 사진을 저장할 엔티티를 생성한다..
ChaeYami
'분류 전체보기' 카테고리의 글 목록