포트폴리오/SpringBoot MVC

shop 3회차

서버관리자 페페 2024. 4. 13. 19:36

1)

이니셜라이저 다운

인텔리제이에서 열고 롬복 설치 확인

application.properties 에 application name 및 port 설정

 

test hello controller 작성 후 application 돌려서 체크

(@RestController로 한다)

 

롬복 확인

롬복 @G / @S / @ToString

userDto에 age name 넣고 jason으로 반환되는지 확인

실행하면 Target resources에 userDto가 생긴다

 -

 

2) SQL 설치 및 연동

 

기존으로 말고

 

 

 

https://ee2ee2.tistory.com/entry/MySQL-MySQL-%EC%84%A4%EC%B9%98%EC%8B%9C-3306-Port-Error-The-specified-port-is-already-in-use

 

[Database][MySQL] MySQL 설치시 3306 Port Error 해결 방법(The specified port is already in use)

MySQL을 설치하는 중에 port 설정에서 오류가 발생하였다. "The specified port is already in use" 원인 이전에 MySQL을 동일 포트로 설치했었기 때문! 해결 간단하다. 사용하고 있는 3306 포트를 삭제 해주면 된

ee2ee2.tistory.com

 

 

 

 

 

SQL 만드는데 3시간 소비

서버 상태는 안되어도 테이블은 만들어지니까 빠르게 진행하자

 

-

 

3) 리포지토리 일반 테스트 성공했으나 깃헙 반영 오류가 있어 생성된 resources 삭제하다가 오류

-> 완전히 갈아엎고 다시

 

 

invalidate caches 후 SQL 커넥션 오류

 

 

 

워크벤치로 들어가보니 서버가 켜져있지 않음

프로퍼티에서 mySQL 삭제 후 정상 작동

-> mySQL 새로 설치 필요

 

-

 

3) 리포지토리 일반 테스트

 

-

 

4) QueryDsl 테스트

2디펜던시 + 1플러그인

compile해서 Qitem을 소스에 넣어주는 것 잊지말기

 

5) 타임리프

****************

 

포트 오류때문에 프로퍼티에서 바꿔도 unused 적용

또 2년전 생활코딩 서버가 아직 작동하고 있었다 ㅜㅠㅜ

8080 접속 후 타임리프 컨트롤러 작동 안함

경로는 잘 접속했는지, 컨트롤러 자체의 문제인지 등 파악하려면 기존 테스트 컨트롤러를 남겨두고 대조 비교하는 게 좋다

 

기존은 제대로 작동

ㄱ\

 

 

 

컨트롤러는 잘 되고 뷰에서 쏴주는게 문젱닌듯

 

 

리소스에 templates을 만들고 뷰를 만들어줘야한다

 

기타 기능 정상 작동 확인

 

-

 

6) 타임리프 레이아웃 (24분)

레이아웃 디펜던시

layout 어셈블러

fragment -> 헤더

fragment -> 푸터

원본 컨텐츠

 

 

레이아웃이 적용 안되는 문제 -> 디펜던시에서 버전을 뺸다

* old 버전은 decorater 주의 / 현재는 decorate

 

7) CSS + 부트스트랩

 

css 적용

인텔리제이에서 css는 인식 못한다고 경고떠도 무시하고 들어가면 된다

css 내부에 footer, header 정렬 정보가 있고 메인 콘텐츠는 프래그먼트 아닌 class -> css파일 내 속성명 가져오기 

 

 

-

 

 

8) 시큐리티 디펜던시 등록 + 멤버 기능 추가 (20분)

 

 

디펜던시 추가 후 실행 ->  콘솔에 패스워드 발급 -> 뷰에서는 자동 리디렉션 확인

 

 

enUM 뒤에는 ; 붙이지 않는다

 

 

MemberFormDto에서 validation 디펜던시만 등록하면 검증용 @ 바로 사용가능 -> 헷갈리지 말기

 

UerdetailService 관련은 당연하게도 전부 시큐리티 임포트

 

서비스까지만들고 savaMember 테스트 / 중복 validate 테스트 완

 

 

작동완

 

-

 

9) 로그인 로그아웃(20분)

 

 

 

*보통 진행하는 것

프레임워크 프로젝트 개설 후 

디펜던시, 플러그인 적용 확인, QITEM 경로추가, 프로퍼티-SQL / H2접속 확인

실행해서 controller 테스트(body로 하거나 view로 하거나)

 

그 다음 Url경로 - 뷰페이지 - 컨트롤러 연결

뷰-DTO 형식 validation

저장 validation

조회 validation(entityNotFOundExcetpion) 

 

 

 

 

뺏다 붙였다 하려면 위에 프리태그 추가해줘야함

 

-

 

10) ADMIN / USER 에 따라 권한확인(10)

 

setRole : ADMIN <-> USER

item Create 접근 테스트 권한 확인

 

-

 

11) Auditing 기능

 

확인완

 

-

 

12)카트 - 멤버 left Outerjoin

 

fetch type EAGER로 바로 조인됨

 

-

 

13) 카트아이템 -> 카트 / 아이템 

외래키 추가 확인

 

-

 

14) // 오더아이템 -> 아이템 / 오더 

 

 

*Cascade 테스트 할때 orderItemrepository가 없어도 저장된다

 

-

 

15) 고아 객체 제거

 

 

오더 내부에 오더아이템만 삭제했으나 오더아이템 자동으로 delete됨

 

-

 

16) EAGER <-> LAZY

 

*FileterChain 확인

 

-

 

OneToOne ManyToOne Eager로(default) 두었을때

 

LAZY로 수정 ㄹ후

 

처음은 오더아이템만 불러오고, Order는 proxy로 들어간다

order를 사용할때 되서 order테이블 불러옴

 

-

 

17) 아이템 등록

생성자 빼먹지말기

 

실패하면 트랜잭션 롤백 참고

 

*mysql 문제시

1) 서버 리셋

2) 삭제 후 다시 깔아도 되고

3) **그 전에 configure 설정만 다시 해줘도 됨

 

 

 

프로퍼티가 적용되든 안되든 실행시에 문제가 생긴다

 

[PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [item_img]

 

ddl-validate에서 create로 적용하니 해결(임시)

https://soongjamm.tistory.com/163

 

Schema-validation: missing table [name] 에러

결론부터 보기 현재 MySQL 5.7, MariaDB JDBC Driver 그리고 Spring Data JPA (Hibernate 5.67) 을 사용하고 있다. Spring Data JPA 를 사용하다보면 hibernate ddl-auto 라는 옵션을 사용할 수 있다. 옵션에는 validate, create, cr

soongjamm.tistory.com

참고할 것

 

-

 

*시작하는 상태는 shop3Application이 아니라 ItemServiceTest로 시작

설정해둔 경로 노출은 pilepath 아님에 주의 (started by user in C :/Users/user/Desktop/shop3)

포트 PID로 노출

active profile 별도로 없음

 

 

테스트완

 

 

 

상품 등록시 해당 경로에 더미데이터 세이브됨

 

-

 

18) 아이템 수정

  아이템 수정    
컨트롤러 :  @G(기존 DTO에 담기) / @P    
서비스 기존 불러오기 / U_Item    
ItemImgService 업데이트아이템이미지    
아이템 업데이트아이템    
       

 

새 코드 추가후 들어가보니(계정 reset도되어) 401 unauthorized 확인

 

새로 등록 후 pathvariable 사용하여 들어가보니 기존 정보 남아서 로드하는 것 확인

 

post(update)까지 확인

 

-

 

19) 아이템 조회 : searchDto / queryDsl 사용하여 page 형식으로

 

deprecated 참고하여 테스트할것

 

list와 count 분리완

 

이후 실행은 되나 아이템 생성 후 관리페이지 들어가지지 않음

타임리프에서도 경로를 참조한다

 

정상 작동되지만 등록일 비어있음

auditing기능 확인

 

-

 

20) auditing 수정

 

 

config에 deprecated 되어있는것 모르고 진행

2.7.1에서는 configure 대신 filterChain 사용

 

itemEntity에 개별로 등록되었던 time 삭제, baseEntity 상속시킴

 

등록일 정상작동

 

-

 

21) 메인페이지 조회

엔티티(DTO) 로부터 먼저 작업해야 한다, QDomin을 만들기 위해

도메인 만드는 과정도 역시 컴파일이므로, 미리 QDomain을 사용한 메서드가 서비스 / 컨트롤러 등에 있다면 컴파일 오류발생

 

기능 정상 작동하나 등록된 이미지는 보여지지 않음

상세페이지에도 img 들어가니까 해당 기능까지 구현해보고 대조하가며 처리

 

-

 

22) 상세페이지 처리

 

 

두 view 모두 동일한 imgUrl을 참조하고 있다

여기서 시작

 

3개 모두 나오는 거 봐선 itemimg 정보는 있다 / null은 아니니까

정보는 있는데 리소스에 접근할 수 없나?

저장은 uploadpath+로 함

 

경로를 저렇게 불러오고 있음.

ItemImgService에서 imgUrl 경로

-> 나중에 작업할 것

 

-

 

23) 오더 

 

테스트 및 view에서 script ajax로 주문완

OutOfStockException 확인

 

-

 

24) 오더히스토리 조회

 

조회 기능 테스트 완료,

다시 구매 이력 조회하면서 order.getOrderItems() 처음 실행시 in 쿼리문 발생 ->

JPA 사용시에는 N+1 성능이슈 조심

 

-

 

25) 주문 취소

테스트 완
뷰에서 작동 확인

 

-

 

26) 카트 담기 

 

서비스테스트 - 뷰 확인

 

-

 

27) 카트 상세 조회 - 수량 수정 - 삭제

 

JPQL로 DTO 바로 만들어서 반환할 때에는 경로 주의

 

정상 실행됨

 

수량변경 / 삭제 script코드 정상 동작

 

-

 

28) 카트 주문

오더서비스 이용하는 점 주의

업데이트로 변경해야함...