Spring boot/위니아에이드 클론코딩 프로젝트21 [위니아에이드] 팀 프로젝트 - AWS S3 이미지 업로드 지금까지는 이미지를 upload 폴더를 만들어서 해당 폴더에 이미지, 파일을 저장 및 관리를 하였습니다. 하지만 Heroku를 통해 배포를 하려면 static 폴더와 target 폴더에 이미지, 파일을 저장해야 합니다. 그 이유는 컴파일 시 -> src 폴더의 파일이 target폴더로 복사 html, js 등 파일은 target폴더의 static 폴더 참조 그래서 src에 파일 없고 target에만 파일 존재하면 컴파일 시 src의 빈 폴더를 복사하기 때문에 src에 업로드해야 합니다. 반대로 src에만 파일이 있다면 컴파일 하지 않으면 복사를 하지 않기 때문에 target의 static 안의 이미지를 참조할 수 없습니다. 그래서 두개의 폴더에 전부 이미지를 업로드, 로드를 성공시키고 배포를 해보니 다시.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 11. 17. [위니아에이드] 팀 프로젝트 - 이미지 삽입과 업로드 지난번에 관리자의 기능 중 Solution 게시글을 작성하는 로직을 작성했습니다. 처음에는 작성과 DB INSERT까지 에러가 없었으며 임시 폴더도 정상적으로 삭제가 되어서 문제가 없다고 생각했습니다. 하지만 작성된 게시글을 수정을 위해 DB에서 데이터를 불러와서 이미지 경로를 요청하는 과정에서 문제가 생겼습니다. 이미지를 삽입하면 요청을 보내고 업로드 했던 경로를 응답해주는 Ajax가 있습니다. 자세한 코드는 아래의 글을 참고하시면 됩니다. https://dhmk47.tistory.com/79 [위니아에이드] 팀 프로젝트 - 관리자 Solution 게시글 작성 클론 웹 사이트에서 자주 하는 질문과 자가진단과 같은 해결책을 알려주는 게시판이 있습니다. 이번에는 이 데이터를 관리자 페이지에서 작성을 구현하.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 11. 11. [위니아에이드] 팀 프로젝트 - RememberMe를 이용한 로그인 유지 아이디 저장은 구현을 했지만 로그인 유지도 해보고 싶어서 로그인 유지도 구현해 보았습니다. Spring Security 설정에 작성한 코드입니다. http.rememberMe() .key("personalKey") .tokenValiditySeconds(60 * 60 * 24) .userDetailsService(principalDetailsService) .authenticationSuccessHandler(loginSuccessHandler()); @Bean public AuthenticationSuccessHandler loginSuccessHandler(){ SimpleUrlAuthenticationSuccessHandler simpleUrlAuthenticationSuccessHandler = .. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 27. [위니아에이드] 팀 프로젝트 - 쿠키를 이용한 아이디 저장 아이디 저장을 선택하고 로그인을 한다면 다음 로그인부터는 아이디를 입력해준 상태로 사용자에게 입력을 받아야 합니다. 저는 쿠키를 이용해서 아이디를 저장해주고 로그인 화면에 쿠키에 값이 있는지 확인 후 데이터를 응답해주는 방식을 사용했습니다. function saveIdAndSignin() { const loginForm = document.querySelector(".login-form"); const saveIdInputFlag = saveIdCheckBox.checked; $.ajax({ async: false, type: "post", url: "/api/v1/auth/save/user-id", contentType: "application/json", data: JSON.stringify({ "s.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 27. [위니아에이드] 팀 프로젝트 - 인증 실패 설정 Spring Security에서 인증 실패와 인가 실패를 원하는 대로 커스텀할 수 있습니다. Authentication(인증) : 식별 가능한 정보 (이름 , 이메일)를 이용하여 서비스에 등록 유저의 신원 입증 (ex. 비 로그인 사용자) Authorization (인가) : 인증된 사용자가 접근하려는 자원에 대한 권한이 있는지 확인 (ex. 일반 권한을 가진 유저는 관리자 권한만이 액세스 할 수 있는 곳에 요청을 보내도 정상적으로 응답을 받지 못합니다.) 인증이 되어 있지 않은 사용자가 인증이 필요한 요청을 하게 되면 로그인 페이지로 보내는 경우가 많습니다. 하지만 인증 실패 시 어떠한 경우에는 A로 어떠한 경우에는 B로 보내 주거나 다른 기능을 구현하고 싶다면 AuthenticationEntryPoi.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 26. [위니아에이드] 팀 프로젝트 - AOP를 활용한 Validation 체크 회원가입을 할 때 올바르지 않은 정보들로 회원가입을 진행하면 안 됩니다. 아이디의 정해진 길이가 있을 것이고 비밀번호도 정해진 규칙과 길이가 있을 것입니다. 이런 데이터들을 전부 검증을 해주고 모든 검증에 통과가 되었다면 회원가입을 진행시켜도 되고 검증에 통과를 못 했다면 예외를 던져주어 사용자에게 알려주면 됩니다. 이러한 로직은 회원가입 이라는 기능에서 주요 로직이라고 볼 수 없기에 AOP를 통해 분리시켜주면 좋을 것입니다. AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍입니다. AOP를 사용하는 이유는 비즈니스 로직과 공통 기능으로 구분을 하고, 공통 기능은 필요한 시점에 불러와서 적용하는 프로그래밍 방법입니다. @ValidationCheck @PostMapping(.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 26. [위니아에이드] 팀 프로젝트 - Filter 등록 API 통신으로 데이터를 요청하고 응답을 받는 것은 당연한 일입니다. 그리고 GET 요청일 경우는 주소창에 찍어보면 응답받은 데이터를 볼 수 있습니다. 저는 이렇게 응답받은 데이터를 보면서 JavaScript를 통해 데이터를 뿌려주는 작업을 좋아해서 자주 보는 화면인데 문득 그런 생각이 들었습니다. 이 화면은 개발자가 봐야 하는 화면인데 일반 사용자에게는 이런 화면을 보여주면 안 되지 않을까 라는 생각을 했습니다. 물론 일반 사용자가 저런 API 주소를 치고 확인하는 일은 없을 거라고 생각을 하지만 이 기회에 조금이라도 공부가 되지 않을까 해서 혼자 고민도 해보고 강사님께도 여쭈어봐서 Filter로 막아주는 방법을 선택했습니다. @Configuration public class FilterConfig {.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 26. [위니아에이드] 팀 프로젝트 - 도로명주소 API 활용하기 클론 코딩할 사이트에서 주소 검색을 통해 주소 입력이 필요로 해서 다음 우편번호 API와 도로명주소 API 중 어느 것을 사용할지 생각을 했습니다. 다음 우편번호 API를 사용하게 되면 간단하게 사용이 가능하지만 학습에 도움이 될 것 같지 않아 다른 API를 찾아보다가 도로명주소 API를 찾았습니다. 사용법을 보니 어렵지 않게 사용할 수 있을 것 같아 바로 API 신청을 하였고 구현을 했습니다. 강남을 검색하고 응답받은 데이터입니다. common에는 검색결과의 개수를 활용해서 페이징 처리하면 됩니다. juso에는 제가 필요로 한 데이터들이 들어가 있습니다. function searchAddress(nowPage) { $.ajax({ url: "https://business.juso.go.kr/addrli.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 26. [위니아에이드] 팀 프로젝트 - 비회원 서비스 조회 로직 비회원 조회를 하게 되면 이름과 접수번호를 통해서 데이터를 가져와서 사용자에게 보여줘야 합니다. 하지만 서비스는 방문서비스와 김치냉장고 리콜 서비스로 두가지로 나누어져 있으며 DB 테이블 또한 나누어져 있습니다. 그렇다면 DB에서 어떤 테이블에 접근해서 해당 접수번호와 이름으로 신청 되어 있는지 확인을 할 수 있는지 생각을 해봤습니다. SELECT IFNULL( IFNULL( (select service_type_code from repair_service_table rst LEFT OUTER JOIN non_member_service_table nmst ON(nmst.user_code = rst.user_code) WHERE service_code = '20205602' AND user_name = '.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 25. [위니아에이드] 팀 프로젝트 - Stream 활용 저는 어떠한 데이터를 들고 왔을 와서 해당 데이터에서 값을 변환하거나 필요한 데이터를 뽑아야 할 때 for문을 사용하는 대신에 Stream을 사용해서 간단하게 원하는 데이터를 가져오는 방식을 좋아합니다. 아직 Stream을 전부 알고 제대로 활용하고 있다고 생각은 들지 않지만 그래도 자주 사용하고 좋아합니다. Dto를 Entity로 변환시킬 때도 자주 사용하고 마찬가지로 Entity를 Dto로 변환시킬 때도 사용합니다. 또는 특정 값을 뽑고 중복을 제거해야 할 때도 사용을 하고 특정 데이터만 뽑아서 List로 새롭게 만들어야 할 때도 사용을 합니다. private List changeToReadProductCategoryResponseDto(List productList) { return productL.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 25. [위니아에이드] 팀 프로젝트 - 관리자 제품 수정 관리자 페이지 제품 수정 또한 등록과 마찬가지로 카테고리가 복잡해서 구현하기 까다로웠습니다. 상위 카테고리의 위치를 수정한다면 하위 제품을 같이 옮겨주어야 하고 삭제도 마찬가지로 같이 삭제도 해주어야 하며 이미지도 같이 지워주어야 합니다. 이미지를 전부 들고 와서 처리하는 과정은 링크 걸어 두겠습니다. https://dhmk47.tistory.com/54 [위니아에이드] 팀 프로젝트 - 관리자 페이지 제품 삭제 (파일명 들고 와서 처리하기 보완) 관리자 페이지를 구현 중에 상품 등록, 수정을 마쳤고 마지막으로 삭제를 구현하고 있었습니다. 상세 제품을 하나 삭제한다면 그 제품의 키 값으로 DB에서 Delete를 해주고 파일 이름을 불러와 파 dhmk47.tistory.com 전체적인 구조입니다. 제품 삭제.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 25. [위니아에이드] 팀 프로젝트 - 관리자 제품 등록 관리자 페이지 중에서 가장 중요하고 까다롭다고 생각했던 제품 등록 기능을 구현했습니다. 상위 카테고리 -> 카테고리(그룹)-> 제품 카테고리(그룹) -> 제품 이 두 가지의 패턴으로 등록이 되어있습니다. 자세하게 말씀드리자면 상위 카테고리 -> 주방가전, 생활가전 카테고리(그룹) -> 김치냉장고, 에어컨 제품 -> 뚜껑형, 창문형 이렇게 있습니다. 그래서 이러한 구조를 어떻게 처리를 해주고 설계를 해야 좋을지 고민을 가장 많이 해보고 수정도 많이 했습니다. 저는 카테고리(그룹)과 제품의 테이블을 따로 분리시켜주었고 카테고리(그룹) 테이블의 컬럼에 상위 카테고리인지 구분 지어주는 Flag를 하나 주었습니다. 전체적인 흐름은 이렇게 흘러갑니다. 로직을 살펴 보겠습니다. @Override public bool.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 10. 25. 이전 1 2 다음