공식문서도 NodeJS로 되어있어 다른 자료를 참고했다. 연동 자체는 간단한데 외부 API를 처음 연동해보는거라 여러가지 실수했던 곳이 많아 미래의 실수를 막기 위해 작성한다. https://sumin2.tistory.com/58 스프링부트+jsp로 배달사이트 만들기-40 결제api 사용해서 주문하기(아임포트) https://www.iamport.kr/ 온라인 비즈니스의 모든 결제를 한곳에서, 아임포트 결제의 시작부터 비즈니스의 성장까지 아임포트와 함께하세요 www.iamport.kr 아임포트에 회원가입을 하고 관리자 콘솔로 이 sumin2.tistory.com 위 사이트를 참고했으며 본인은 바닐라 자바스크립트를 이용했다. 자바스크립트 아임포트 Docs에도 나와있듯이 결제 전에 미리 결제 번호를 부여하고..
Page를 꺼내는 방법은 정말 쉽다. 이미 JPA에 의해 다 구현이 되어있으므로 그냥 파라미터로 Pageable을 넘겨서 Page를 리턴받으면 끝이다. 하지만 이 Entity를 DTO로 변환시켜서 넘겨야 하는건 생각보다 까다롭다. Page 인터페이스는 List, Pageable, totalElements 3가지를 가지고 있는 형태라고 볼 수 있다. 하지만 Page로 넘기지않고 PageImpl을 사용한다거나 하면 boundary 값 처리를 직접 해줘야 하는 등 귀찮은 일이 생긴다. 기본적인 구현 방법은 람다식을 이용하여 돌면서 값을 converting 해주면 된다. 여기서 중요한 점은 이때 사용되는 map 함수는 Page 인터페이스의 map이다. 선택하려고 해서 선택할 수 있는 것은 아니지만 map은 St..
하나의 form에서 여러 개의 file을 업로드하고 싶었다. 단순히 input 태그에 multiple을 붙이는게 아닌 파일 업로드가 가능한 필드가 여러개 있는 경우를 말하는 것이다. 정보가 너무 없어서 꽤나 고생했다. HTML에서 업로드부터 시작. form 태그에 enctype="multipart/form-data" 작성 input 태그에 파일 업로드할 곳 작성. name을 신경써서 작성 Controller에서 RequestParam으로 받기 @PostMapping("/write") public String adminWriteAction(@Valid WriteItemRequest writeItemRequest, @RequestParam("mainImage") MultipartFile file, @Requ..
https://middleearth.tistory.com/22 스프링 시큐리티로 로그인 이후에 현재 페이지로 되돌아오는 방법 타임리프에서 아래와 같이 input을 받고 action으로 값을 올려준다. 장바구니 바로구매 해당 이름을 파라미터로 받는다. GET 요청이므로 body는 사용하지 않는 것이 좋다. @GetMapping("/login") public String l middleearth.tistory.com 위 방법을 같이 참고바람 form의 input으로 현재 URL의 위치와 scrollY를 같이 보내주게 하고 hidden으로 숨겨둔다. 그리고 버튼이 눌렸을때 getScrollY() 함수가 실행되도록 한다. Q&A 작성 getScrollY 함수는 다음과 같다. 여기서 고정된 값은 window.sc..
타임리프에서 아래와 같이 input을 받고 action으로 값을 올려준다. 장바구니 바로구매 해당 이름을 파라미터로 받는다. GET 요청이므로 body는 사용하지 않는 것이 좋다. @GetMapping("/login") public String login(@RequestParam(name = "requestURI", required = false) String requestURI, HttpServletRequest request, @CurrentUser User user) { request.getSession().setAttribute("requestURI", requestURI); if (user != null) { return "redirect:/"; } return "auth/login"; } lo..
검색 결과에 따라서 리스트를 반환해주는 기능을 구현하다가 위와 같은 버그를 만났다. 맨 처음 결과값은 잘 나오는데 그 두번째부터 값이 출력되지 않고 저 버그만 출력됨 원인 https://stackoverflow.com/questions/71642208/parameter-value-gabrek-did-not-match-expected-type-java-lang-character-n-a 하이버네이트 구현체에 의한 버그로 5.6.6과 5.6.7 그 이상에서 발생하는 버그라고 한다. 원인은 캐싱에 의한 문제일거라 사람들은 예상하던데 본인의 하이버네이트 버전은 5.6.8로 아직 안 고쳐진걸로 보아 문제가 오래 갈 수도 있을 것같다 public interface ItemRepository extends JpaRep..
인텔리제이가 타임리프 문법을 잡아주지 않아 자주 헷갈려 항상 보고 참고하기 위해 작성 form 작성 GET 요청을 할때 form말고 다른 방법도 많으므로 거의 항상 POST 요청을 위해 사용 th:action="@{/XXX/XXX}"으로 작성하여 어떤 URL로 보낼지 명시 th:object="${signupRequest}"와 같이 어떤 객체가 값을 받게 될지 명시한다. Controller에서 GET 요청할때 정확히 똑같은 이름으로(signupRequest) 미리 보내야 하며 (GET에 미리 보내지 않으면 템플릿 엔진 에러 발생) POST로 받을 때도 정확히 똑같은 이름(signupRequest)으로 받아야 한다. th:field="*{email}" 등의 input으로 받게 되는 값은 signupReque..
타임리프 기본 설정 application.properties에 작성 #Thymeleaf //템플릿의 위치와 확장자 정의 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html //true일시 정의된 위치에 템플릿이 없으면 에러 발생. spring.thymeleaf.check-template-location=true //개발용 설정. 정적 자원을 바로 반영하기 위함. 배포시엔 true spring.thymeleaf.cache=false #Hot loader //true일시 정적 자원 실시간 반영 spring.devtools.livereload.enabled=true //true일시 변화를 감지하고 자동으로 재시작 spring...
회원정보 수정 페이지에 접근하는 모든 요청을 어떤 방식으로 접근하든 원천적으로 봉쇄하고 무조건 비밀번호 입력 페이지로 리다이렉트 되도록 설계해보고 싶었다. 방법이 뭐가 없을까 이리 저리 찾아보던 도중 Interceptor를 이용하여 구현하면 딱 적절할 것같다는 생각이 들어 열심히 구글링해보았으나 결과가 잘 나오지 않아 직접 공식문서와 여러 글들을 읽어가며 구현했다 Interceptor 구현 @Component public class PasswordInterceptor implements HandlerInterceptor { @Override public boolean preHandle(final HttpServletRequest request, final HttpServletResponse respons..
if (authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"))) { redirectStrategy.sendRedirect(request, response, "/admin"); } 예를 들어 위와 같이 authorization이 성공한 상황에서 Authentication 객체에서 권한을 가지고 있는지 여부를 알고싶으면 위와 같이 작성한다. 여기서 핵심은 "ROLE_ADMIN"을 contains 하고 있는지 확인하는 것이 아닌 new SimpleGrantedAuthority("ROLE_ADMIN")을 확인하는 것이다. SimpleGrantedAuthority는 GrantedAuthority의 이미 만들어져 있는 구현..
- Total
- Today
- Yesterday
- RequestBody
- RequestPart
- IDE
- vim
- 루나빔
- ModelAttribute
- Dap
- lunarvim
- 레디스
- neovim
- 배포
- RequestParam
- 도커
- 아키텍처
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |