728x90

Portfolio, Project/Project(Programming) 29

Project (6-1) 주문 기능 구현

- 고객이 상품을 주문하면 현재 상품의 재고에서 주문 수량만큼 재고를 감소시켜야 한다. 1. 주문만큼 재고를 감소 2. 주문 수량보다 재고의 수가 적을 때 발생시킬 exception(RuntimeException) 정의 - 예외 클래스 작성 - OutofStockException.java package com.shop.exception; public class OutOfStockException extends RuntimeException{ // 상품의 주문 수량보다 재고의 수가 적을 때 발생시킬 exception public OutOfStockException(String message) { super(message); } } - 재고 감소 로직 - Item.java ... //남은 재고 수량 확인 p..

Project (5-3) 메인 화면, 상품 상세 페이지 (1) (추가 내용 작성 필요할 듯...)

- 메인 페이지 - 메인 페이지의 경우 상품 관리 메뉴와 비슷하며, Querydsl을 사용하여 페이징 처리 및 네비게이션바에 있는 Search 버튼을 이용하여 상품명으로 검색이 가능하도록 구현하겠다. - 메인페이지의 경우 @QueryProjection을 이용하여 상품 조회 시 DTO 객체로 결과 값을 받는 방법을 사용한다. - @QueryProjection을 이용하면 Item 객체로 값을 받은 후 DTO 클래스로 변환하는 과정 없이 바로 DTO 객체를 뽑아낼 수 있다. - MainItemDto.java @Getter @Setter public class MainItemDto { private Long id; private String itemNm; private String itemDetail; priv..

Project (5-2) 상품 관리 (1)

- 상품의 상세 페이지에 진입하기 위해서 등록된 상품 번호를 직접 URL에 입력하여 상품 상세 페이지에 진입한다. 상품 번호를 모를 경우 상세 페이지로 진입할 수 없으므로 등록된 상품 리스트를 조회할 수 있는 화면을 만들어야 한다. - 조회 조건 1. 상품 등록일 2. 상품 판매 상태 3. 상품명 또는 상품 등록자 아이디 - 복잡한 조회 조건의 경우 Querydsl을 이용해 조건에 맞는 쿼리를 동적으로 쉽게 생성할 수 있다. Querydsl을 사용하면 비슷한 쿼리를 재활용 할 수 있다는 장점이 있다. 또한 쿼리를 JAVA 문법으로 작성하기 때문에 오류를 컴파일 단계에서 찾을 수 있다는 장점이 있다. - ItemSearchDto.java @Getter @Setter public class ItemSearc..

Project (5-1) 상품 등록 및 수정 (2)

- ItemService.java @Transactional(readOnly = true) //상품 데이터를 읽어오는 트랜잭션을 읽기 전용을 설정한다. //JPA가 더티체킹(변경감지)을 수행하지 않아서 성능을 향상 시킬 수 있다. public ItemFormDto getItemDtl(Long itemId) { List itemImgList = itemImgRepository.findByItemIdOrderByIdAsc(itemId); //해당 상품의 이미지를 조회한다. 등록순으로 가지고 오기 위해서 상품 이미지 아이디 오름차순으로 가지고 온다. List itemImgDtoList = new ArrayList(); for (ItemImg itemImg : itemImgList) { //조회한 ItemImg..

Project (5-1) - 상품 등록 및 수정 (1)

- 상품 등록하기 - ItemImg.java @Entity @Table(name = "item_img") @Getter @Setter public class ItemImg extends BaseEntity{ @Id @Column(name = "item_img_id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String imgName; private String oriImgName; private String imgUrl; private String repImgYn; @ManyToOne(fetch = FetchType.LAZY) // 상품 엔티티와 다대일 단방향 관계로 매핑한다. // 지연 로딩을 설정하여 매핑된 상..

Project - (4) 연관관계 매핑

- ERD - 구성할 ERD는 위와 같다. - 연관 관계 매핑 종류 1. 일대일 : @OneToOne 2. 일대다 : @OneToMany 3. 다대일 : @ManyToOne 4. 다대다 : @ManyToMany - 일대일 단방향 매핑 - Cart.java @Entity @Table(name = "cart") @Getter @Setter @ToString public class Cart{ @Id @Column(name = "cart_id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToOne //회원 엔티티와 일대일로 매핑한다. @JoinColumn(name = "member_id") //매핑할 외래키를 지정한다. name ..

Project (3) - 스프링 시큐리티

- security dependency 추가 org.springframework.boot spring-boot-starter-security 1. 스프링 시큐리티를 추가하게되면 모든 요청은 인증을 필요로 한다. - 스프링 시큐리티는 기본적으로 1.Loing 2. Logout 기능을 제공한다. - 스프링 시큐리티 설정 - SecurityConfig @Configuration @EnableWebSecurity //SpringSecurityFilterChain이 자동으로 포함된다. //WebSecurityConfigurerAdapter를 상속받아서 메소드 오버라이딩을 통해 보안 설정을 커스터마이징할 수 있다. public class SecurityConfig { @Autowired MemberService m..

Project (2) - Thymeleaf

- @RequestParam - Controller 코드 @Controller @RequestMapping(value = "/thymeleaf") //클라이언트의 요청에 대해서 어떤 컨트롤러가 처리할지 매핑하는 어노테이션이다. //url에 "/thymeleaf" 경로로 오는 요청을 Controller가 처리하도록 한다. public class ThymeleafExController { @GetMapping(value = "/ex01") public String thymeleafExample01(@RequestParam(value = "asd") int a, Model model) { model.addAttribute("data", "타임리프 예제 입니다."); model.addAttribute("a", ..

Project - (1) Spring Data JPA

- Maven Setting - 여러가지의 프로젝트를 동시에 진행하면 메이븐의 의존성이 서로 꼬일 수 있으므로 프로젝트별로 다른 폴더를 Local repository를 지정하기를 권장한다. - application.properties 설정 - server.port = 80 : 애플리케이션 실행할 포트 설정 - application.name = spring-demo : 설정해둔 애플리케이션의 값을 읽어와서 자바 코드에서 사용해야 하면 @Value 어노테이션을 통해서 읽어올 수 있다. - JPA 사용 시 장점 1. 특정 데이터베이스에 종속되지 않음 2. 객체지향적 프로그래밍 3. 생산성 향상 - JPA 사용 시 단점 1. 복잡한 쿼리 처리 2. 성능 저하 위험 3. 학습 시간 - ORM : Object Re..

728x90