Java/Spring 56

[Spring] Bean Scope, MVC Framework, SpringApplication(Spring Boot)

Spring Bean이란? Spring에서 POJO(plain, old java object)를 "Bean"이라고 부른다 Beans는 애플리케이션의 핵심을 이루는 객체이며, Spring IoC 컨테이션에 의해 인스턴스화, 관리, 생성 된다. 컨테이너에 공급하는 XML파일에 의해 생성된다. 애플리케이션의 객체가 지정되면 getBean()메서드를 통해 가져올 수 있다. Bean Scope 이 중에 request, session, globalsession은 Spring Mvc Web Application에서만 적용된다. default값은 singleton이다. MVC Framework Spring MVC Framework의 구성요소 DispatcherServlet : 제일 앞단에서 HTTP Request를 처..

Java/Spring 2022.10.27

스프링 쇼핑몰 장바구니 기능 테스트코드(Junit5 단위 테스트)

CartControllerTest package com.example.shoppingmall.controller; import com.example.shoppingmall.controller.cart.CartController; import com.example.shoppingmall.dto.cart.CartCreateRequestDto; import com.example.shoppingmall.entity.member.Member; import com.example.shoppingmall.repository.member.MemberRepository; import com.example.shoppingmall.service.cart.CartService; import com.fasterxml.jackso..

Java/Spring 2022.09.18

스프링 쇼핑몰 프로젝트 장바구니(cart) 기능 구현

오늘은 멘토 분과 함께 장바구니 기능을 구현해봤습니다. 우선적으로 생각해야 할 부분이 있습니다. Cart(장바구니)는 CartItem(장바구니에 있는 아이템 목록)을 따로 만들어줘야 합니다. 그 이유가 뭐냐면 DB의 속성과도 연관이 있습니다. DB는 각 테이블을 쪼개면 쪼갤수록 안전하기 때문입니다. 이렇게 구현하지 않으면 서비스 코드 엄청 길어지고 쿼리 조회도 비효율적입니다. 그래서 cart, cartItem을 따로 만들어주었습니다. Cart, CartItem Entity package com.example.shoppingmall.entity.cart; import com.example.shoppingmall.entity.common.EntityDate; import com.example.shopping..

Java/Spring 2022.09.14

Gradle 환경에서 Swagger 사용 방법(API 문서 자동화)

Swagger란? 백엔드 개발에 있어 Rest API를 설계, 빌드, 문서화하는데 도움이 되는 오픈 소스 소프트웨어 프레임워크이다. Swagger를 사용하는 경우 다른 개발팀과 협업 진행 시 백엔드의 API를 호출하는 프론트엔드 프로그램 제작 시 Swagger 적용 순서 1. bundle.gradle에 의존성 추가 2.application.yml에 다음과 같은 코드 추가 3.코드 작성(config패키지 생성 + SwaggerConfig 클래스 생성) package com.example.board.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuratio..

Java/Spring 2022.08.31

스프링 프로젝트 코드 리뷰

Review review = Review.builder() .comment(reviewRequestDto.getComment()) .rate(reviewRequestDto.getRate()) .product(product) .user(writer) .build(); return reviewRepository.save(review); 1.빌더(Builder)로 구현해보고자 한 건 좋지만, 생성자의 장점을 놓친 것 같다. 둘의 차이를 알고 어떨 때에는 빌더를 쓰고, 어떨 때에는 생성자를 쓰는지 차이점을 알면 더 좋을 것 같다. 빌더와 생성자에 대해서 각 상황에 맞게 적용하는 방안을 생각해봐야 겠다. @JoinColumn(name = "User_id") @ManyToOne(fetch = FetchType.LA..

Java/Spring 2022.08.23

스프링 프로젝트 리팩토링 전 코드(review)

많은 리팩토링과 다양한 기능을 추가해 포스트맨으로 시험해 봤습니다. 우선적으로 이번 프로젝트를 통해서 게시판 기능을 이용한 CRUD에 대해 다잡을 수 있었고, 시큐리티, jwt token에 대해서도 조금 생각해볼 수 있는 계기가 되었습니다. 팀마다 기능을 나누어 구현했기에, 팀과의 협력과 공유하는 것이 얼마나 중요한지에 대해 깨닫게 되었습니다. 리팩토링 전 코드 Entity Entity @Data @AllArgsConstructor @NoArgsConstructor @Entity public class Review { // 아이디 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 상품 매핑 @JoinColumn(name..

Java/Spring 2022.08.22

Junit5을 이용한 테스트코드 작성(단위 테스트 코드)

프로젝트나 사람들과 협업을 하게되면 테스트 코드는 필수적이다. 테스트코드를 작성하는 이유는 다음과 같다. 개발단계 초기에 문제를 발견하게 도와준다. 개발자가 나중에 코드를 리팩토링 할 때 기존 기능의 올바르게 수행되는지 확인할 수 있다. 기능에 대한 불확실성을 감소시킨다. 시스템에 대한 실제 문서를 제공해준다. @SpringBootApplication public class BoardApplication { public static void main(String[] args) { SpringApplication.run(BoardApplication.class, args); } } 스프링부트 웹을 실행할 수 있는 이유 @SpringBootApplicaiton은 스프링부트의 자동 설정, 스프링 Bean 읽기..

Java/Spring 2022.08.15

SpringBoot JPA(Java Persistence API) 사용 목적

유지, 보수와 효율성 증대 JPA를 사용하지 않고, SQL문으로 테이블을 생성한다면 일일히 CRUD를 작성해주어야 한다. 하지만, JPA를 사용한다면 일일히 CRUD문을 작성하지 않고 JPA에게 저장할 객체로 전달해주면 된다. 테이블 간에 연관관계를 정의하기 위해 사용 ex) entity가 2개일 때, 작성자 entity ↔ 게시글 entity간의 연관관계를 정의하기 위해서는 1 : 1(OnetoOne,일대일), 1 : n(OnetoMany,일대다), n: 1(ManytoOne,다대일)이 있다. 작성자 한 명은 여러 개의 게시글을 사용할 수 있으므로, 작성자 입장에서는 1 : n(일대다,OnetoMany) 관계지만, 게시글 입장에서는 다대일(ManytoOne)관계이다(여러 개의 게시글들을 한 명이 쓸 수..

Java/Spring 2022.08.05

DTO, DAO, Repository, Entity 개념

Entity(Domain) 데이터베이스에 쓰일 컬럼 및 여러 엔티티 간의 연관관계 데이터베이스의 테이블을 하나의 엔티티로 생각해도 됨 DB 테이블과 1:1 매핑 Repository Entity에 의해 생성된 DB에 접근하는 메소드를 사용하기 위한 인터페이스 Service와 DB를 연결하는 고리의 역할 DB에 적용하고자 하는 CRUD를 정의하는 영역 DAO(Data Access Object) DB에 접근하는 객체를 의미 Service가 DB에 연결할 수 있게 해주는 역할 DB를 사용하여 데이터를 조회하거나 조작 DTO(Data Transfer Object) DTO는 VO(value Object)이며, 계층간 데이터 교환을 위한 객체를 의미 (Read Only 개념을 담고 있음) Spring Boot의 서비..

Java/Spring 2022.08.04