Project/ClassFlix

    [Class Flix] EP 21. Bean Validator 적용

    지금까지는 회원가입이나 강의등록시 올바른 데이터인지 검증하지 않았습니다. 사실 기능은 몇개 넣었는데 잘 모르고 사용했습니다. Validation을 학습하고 실무에서 많이쓰는 방법으로 제 프로젝트에 적용해 보겠습니다. 2021.10.10 - [Web/MVC2] - EP3. 검증1 - Validation EP3. 검증1 - Validation 지금까지 만든 웹 어플리케이션은 사용자가 입력하는 모든 상황을 대비할 수 없습니다. 예를들어, 사용자가 가격을 입력하는 곳에 알파벳을 입력하거나 그냥 입력 창에 공백을 넣게되면 에러페 ksabs.tistory.com 2021.10.14 - [Web/MVC2] - EP4. 검증2 - Bean Validation EP4. 검증2 - Bean Validation EP3. 검..

    [Class Flix] EP 20. messages 적용

    스프링과 타임리프에서는 messages를 편리하게 사용할 수 있도록 여러기능을 제공합니다. 2021.08.20 - [Web/MVC2] - EP2. 메세지와 국제화 EP2. 메세지와 국제화 메시지 현재 HTML의 상품명, 가격, 수량 등 'label'에 있는 단어들을 하드코딩 되어있습니다. 만약에 '상품명'이라는 단어를 '상품이름'으로 바꾸려면 모든 HTML상의 단어들을 바꾸어주어야합니다. ksabs.tistory.com 제 프로젝트의 HTML에서 하드코딩 되어있는 글자들을 messages 기능을 이용해 리팩토링했습니다. 다수의 label 또는 버튼이나 여러 text에 해당하는 부분을 th:text="#{}" 를 이용해 messages.properties에 미리 설정한 글자를 가져올 수 있도록 수정했습니다..

    [Class Flix] EP 19. 타임리프 리팩토링

    Home 검색창에서 태그의 id 들을 th:field로 교체하기 (사이드 이펙트 발생하는지 판단하기) String 타입의 멤버들은 th:field로 지정하면 멤버변수의 이름으로 id, name, value가 자동으로 생성되지만 String 타입이 아닌 Integer 타입 ratingGoe는 값 자체로 지정이 됩니다. 그래서 JS가 동작하지 않는 문제가 발생합니다. 따라서 String 타입의 멤버들만 th:field로 교체해주었습니다. 사이트 이름 강의 이름 강의자 이름 별 점 + - search 검색창의 rating 표시부분의 value 부분을 스프링에서 보내주는 데이터로 바꾸기 검색파라미터들을 다 으로 보내주려 했으나 타입이 다 달랐고 특히 ratingGoe는 처리가 더 복잡해질 것 같아 냅뒀습니다. ..

    [ClassFlix] EP 18. QueryDSL 도입 (검색기능)

    Querydsl의 꽃 검색기능을 도입합니다. 서비스 계층 설계 조건을 저장하고 전달하는 DTO를 생성합니다. 해당 dto의 인스턴스를 검색,페이징,정렬기능을 하는 리포지토리에 넘겨줍니다. where절에서 동적쿼리를 위한 Eq, Goe 메서드를 구현하고 넘겨받은 condition dto를 이용해 동적쿼리를 만들어 결과를 구합니다. 서비스 계층 구현 페이징과 정렬을 구현할때 동적쿼리는 거의 다 짜놔서 condition dto 생성과 where절 수정만 해주면 서비스 계층 구현은 될 것 같습니다. LectureSearchCondition package dongho.classflix.controller.dto; import lombok.Data; @Data public class LectureSearchCond..

    [ClassFlix] EP 17. QueryDSL 도입 (페이징, 정렬)

    Querydsl 도입 계획 build.gradle 작성, JPAQueryFactory등 Querydsl 도입 기존에 있는 jpql을 querydsl로 바꾸기 홈 화면에서 페이징, 정렬 기능 (대량 강의 데이터 추가, ddl 설정 변경) 강의 검색기능추가 (페이징, 정렬기능) Querydsl 도입 build.gradle, Q-type파일 생성 기존에 작성했던 QueryDSL 설정 포스팅을 참고하여 설정합니다. 2021.06.08 - [Web/QueryDSL] - [QueryDSL] EP1. QueryDSL 설정 [QueryDSL] EP1. QueryDSL 설정 QueryDSL 사용에 앞서 설정을 해주도록 하겠습니다. 기본적으로 QueryDSL은 start.io 에서 dependency를 제공하지 않기 때문..

    [ClassFlix] EP 16. 리팩토링 계획

    Querydsl 도입 build.gradle 작성, JPAQueryFactory등 Querydsl 도입 기존에 있는 jpql을 querydsl로 바꾸기 홈 화면에서 페이징, 정렬 기능 (대량 강의 데이터 추가, ddl 설정 변경) 강의 검색기능추가 (페이징, 정렬기능) N+1문제를 해결해야하는 기능 도입 멤버를 눌렀을때 그동안 달았던 리뷰가 무엇인지 볼 수 있는 기능을 도입해야합니다. 이 기능은 mvc2강의를 통해 실제 로그인과 회원가입 기능을 구현한 뒤 도입해야 하기 때문에 Querydsl도입에서 다루지 않습니다. MVC2 강의 듣고난 뒤 추가할 기능들 회원가입, 로그인 회원정보페이지 강의 리스트 생성 수정 삭제 기능 회원정보에서 내가 단 리뷰와 강의리스트를 볼 수 있게 함 (N+1문제 해결해야함)

    [ClassFlix] EP 15. 리팩토링 (Spring Data JPA 적용)

    목차 (클릭시 해당 목차로 이동) 지금까지는 스프링 데이터 JPA를 적용하지 않고 순수 JPA로 개발했습니다. 기존의 순수한 JPA코드들을 차근차근 스프링 데이터 JPA로 바꿔가 보겠습니다. 계획 각 리포지토리에서 사용중인 기능들을 1. 공통/쿼리 메소드로 해결가능한 기능과 2. 사용자정의 리포지토리로 풀어야 하는 기능을 구분해 스프링 데이터 JPA를 적용합니다. ToOne관계에서 fetch join이 필요한 부분도 풀어냅니다. Auditing을 이용할 것인데 BaseEntity, BaseTimeEntity를 둘 다 만들지만 적용은 BaseEntity만 합니다. 수정,등록자는 인증, 세션을 도입한 후 실제 사용자의 아이디를 받아 넣을 것입니다. MemberRepository 현재 구현된 메서드들 공통메서..

    [ClassFlix] EP 14. 리팩토링과 성능최적화 - 3

    리뷰수정기능개발 ✓ 리뷰삭제기능개발 ✓ 회원가입창에서 footer 크기조정 ✓ 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 모양) ✓ 사진등록기능 ✓ 리팩토링 ✓ 디자인다듬기 느낀점, 발전할점, 추가할점 정리하기 이슈 리팩토링 하기전에 어플리케이션을 한번 복잡하게 돌려보았습니다. 리뷰관련 2가지 이슈가 발생했습니다. 리뷰의 개수가 많아지면 리뷰삭제가 작동하지 않는다. 리뷰의 개수가 많아지면 리뷰수정,삭제시 강의에 별점반영이 안된다. 리뷰삭제 이슈 해결 리뷰삭제 작동문제는 JQuery에서 form 객체를 못읽는 문제가 있어서 Javascript의 getElementById로 폼객체를 가져와 submit하도록 수정했더니 정상동작했습니다. 리뷰 수정, 삭제시 별점반영 안되는 이슈 해결 성능문제를 위해 강의의..

    [ClassFlix] EP 13. 리팩토링과 성능최적화 - 2 (사진업로드, 출력)

    목차 (클릭시 해당 목차로 이동) 리뷰수정기능개발 ✓ 리뷰삭제기능개발 ✓ 회원가입창에서 footer 크기조정 ✓ 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 모양) ✓ 사진등록기능 리팩토링 (쿼리나가는 개수 계산해서 성능 최적화하기) 디자인다듬기 느낀점, 발전할점, 추가할점 정리하기 사진등록기능 기존에는 데이터베이스에 이미지파일을 직접 넣는 식으로 구현했습니다. 그러나 이 방식은 비효율적이고 병목현상을 일으킵니다. 그래서 이미지는 서버의 특정 위치에 저장하고 그 이미지에 대한 정보를 DB에 저장하는 식으로 구현하려 합니다. 파일업로드는 스프링에서 제공하는 MultipartFile 이라는 인터페이스를 이용해서, HTTP multipart 요청을 처리합니다. MultipartFile는 큰 파일을 청크 단위..

    [ClassFlix] EP 12. 리팩토링과 성능최적화 - 1

    목차 (클릭시 해당 목차로 이동) 2021.05.10 - [Project/ClassFlix] - [Class Flix] EP 9. 중간점검 : 앞으로의 계획 [Class Flix] EP 9. 중간점검 : 앞으로의 계획 목차 (클릭시 해당 목차로 이동) 앞으로 해야할 것 우선순위로 나열하기 리뷰수정기능개발 리뷰삭제기능개발 회원가입창에서 footer 크기조정 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 ksabs.tistory.com 중간점검에서 앞으로의 계획중에서 어디까지 했는지 체크해보겠습니다. 앞으로 해야할 것 우선순위로 나열하기 리뷰수정기능개발 ✓ 리뷰삭제기능개발 ✓ 회원가입창에서 footer 크기조정 리뷰등록 디자인 (입력부분가로로나열, 등록버튼 모양) 사진등록기능 리팩토링 (쿼리나가는 개수 계산..