
코드로 배우는 스프링 웹 프로젝트 - Intermediate
₩48,400
초급 / Spring, JSP, mybatis, Ajax, Spring Security, XML
5.0
(4)
Spring Legacy 프로젝트를 공부해야 한다면? XML설정 하나하나 직접 만들어 보고 싶다면? 스프링 프로젝트에 Spring Security를 적용해야 한다면?
초급
Spring, JSP, mybatis
구멍가게코딩단은 2015년부터 개발과 관련된 직종의 사람들의 모임을 위해 만들어진 커뮤니티입니다.
강의의 진행은 현재 구멍가게 코딩단을 운영하고 있는 쿠키 담당자가 진행하고 있습니다.
2015년 부터 '코드로 배우는 ..' 시리즈를 집필하고 있습니다.
코드로 배우는 스프링 웹 프로젝트 - Intermediate
₩48,400
초급 / Spring, JSP, mybatis, Ajax, Spring Security, XML
5.0
(4)
Spring Legacy 프로젝트를 공부해야 한다면? XML설정 하나하나 직접 만들어 보고 싶다면? 스프링 프로젝트에 Spring Security를 적용해야 한다면?
초급
Spring, JSP, mybatis
코드로 배우는 스프링 웹 프로젝트 - Basic
₩44,000
초급 / Spring, mybatis, JSP, Java
4.7
(11)
Spring Legacy 프로젝트를 공부해야 한다면? XML설정 하나하나 직접 만들어 보고 싶다면?
초급
Spring, mybatis, JSP
코드로 배우는 React with 스프링부트 API서버
₩77,000
초급 / React, Spring Boot, JWT, redux-toolkit, JPA
4.7
(68)
스프링 부트(Spring Boot ver3.4로 제작되는 API 서버와 리액트의 연동 프로젝트 완성하기! 포트폴리오 작성 부트캠프 과정 전체를 강의로 제작
초급
React, Spring Boot, JWT
질문&답변
조회기능시 backend 통신 실패
많은 분들이 GPT에서 알려주는 방법대로 하시는데.. ㅜㅜ 이상하게 이 부분이 버전을 좀 타네요.. 우선 시큐리티가 추가되는 부분은 조금 뒤쪽인데 미리 추가하셨나 봅니다. 그렇다면 시큐리티 설정이 문제가 될 수 있습니다. 조금 뒤쪽 섹션에 보시면 인증 처리 부분이 있으실 겁니다. 해당 섹션 마지막에 항상 수업자료로 프로젝트 코드가 있으니 확인해 보시기 바랍니다. 우선 ServletConfig에서는 CORS 관련 설정은 없애 주시고.. package org.zerock.mallapi.config;import org.springframework.context.annotation.Configuration;import org.springframework.format.FormatterRegistry;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import org.zerock.mallapi.controller.formatter.LocalDateFormatter;@Configurationpublic class CustomServletConfig implements WebMvcConfigurer{@Overridepublic void addFormatters(FormatterRegistry registry) { registry.addFormatter(new LocalDateFormatter());}// @Override// public void addCorsMappings(CorsRegistry registry) {// registry.addMapping("/**")// .allowedOrigins("*")// .allowedMethods("HEAD", "GET", "POST", "PUT", "DELETE", "OPTIONS")// .maxAge(300)// .allowedHeaders("Authorization", "Cache-Control", "Content-Type");// }} SecurityConfig에서는 다음과 같이 작성해 보세요. http.cors(httpSecurityCorsConfigurer -> {httpSecurityCorsConfigurer.configurationSource(corsConfigurationSource());});http.sessionManagement(sessionConfig -> sessionConfig.sessionCreationPolicy(SessionCreationPolicy.STATELESS));http.csrf(config -> config.disable()); @Beanpublic CorsConfigurationSource corsConfigurationSource() {CorsConfiguration configuration = new CorsConfiguration();configuration.setAllowedOriginPatterns(Arrays.asList("*"));configuration.setAllowedMethods(Arrays.asList("HEAD", "GET", "POST", "PUT", "DELETE"));configuration.setAllowedHeaders(Arrays.asList("Authorization", "Cache-Control", "Content-Type"));configuration.setAllowCredentials(true);UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", configuration);return source;}
질문&답변
@AuthenticationPrincipal
네 맞습니다 다양한 정보를 처리하기 위해서 MemberDTO타입으로 직접 처리한 것입니다
질문&답변
첨부파일 트랜잭션
말씀하신대로 서비스 쪽에서는 트랜잭션으로 처리되어서 문제가 발생하면 롤백되겠지만 파일 시스템쪽은 그렇지 않습니다. 이를 제대로 처리하려면 우선 서비스에서 예외를 던지게 설계하고 컨트롤러에서 예외가 발생했을 경우에는 업로드된 파일들을 삭제하시는 방법이 가장 깔끔할 것입니다. 아니면 서비스쪽에서 리턴 값을 주고 컨트롤러에서 원하는 리턴값이 안나오는 경우에 업로드된 파일들을 삭제하는 방법도 고려해 볼 수 있을 듯 하네요.. 이와는 별개로 스케줄러를 이용해서 데이터베이스에 없는 파일들을 주기적으로 삭제하는 방법도 나쁘지 않습니다.
질문&답변
6분23초 MainPage 코드와 자료 코드 불일치 관련 문
아.. 혼란을 드려서 죄송합니다. 특별히 권장하는 것은 없습니다. 명시적으로 작성한다면 함수형이 좀 더 알아보기 낫다고 생각하긴 합니다만.. 클라이언트 쪽이라 전혀 차이는 없습니다. 동영상은 계속 이어서 제작되었기 때문에 동영상의 소스 코드를 참고하시는게 좀 더 에러 잡기가 편하지 않을까 합니다.
질문&답변
tailwind css 오류
최신 버전에서 변경된 부분이 있어서 그러실 겁니다. 혹시 Vite 환경에서 프로젝트를 구성하시면 https://tailwindcss.com/docs/installation/using-vite 를 참고해서 설정하셔야 합니다. 4월말에 업데이트 될 학습자료를 미리 보시면 도움이 되실 듯 하니 https://drive.google.com/drive/folders/1waEscz8jedgTwlx8uf09A68yna0d4GIs?usp=drive_link 폴더에 PPT를 참고해서 보시기 바랍니다.
질문&답변
업로드 파일 보여주기(교재 191~199) 관련 질문
Beanstalk를 이용하신다면 결국 서버의 실행은 EC2를 이용해서 하게 됩니다. 따라서 EC2 서버에 접속하셔야만 합니다. 1.프로젝트의 upload의 경우 프로젝트가 실행되는 폴더내에 자동으로 upload라는 폴더가 만들어 지고 서버의 실행시에도 해당 경로를 찾아서 업로드 및 조회가 동일하게 이루어 집니다. jar 파일로 빈즈토크에 배포하셨다면/var/app/current 라는 경우에 upload 폴더가 생성되실 겁니다. SSH 접속을 이용해서 생성된 upload 폴더를 찾아서 파일들을 추가하실 수 있습니다. 다만 AWS를 이용하신다면 S3 를 이용하도록 코드를 수정하시고 사용하시는게 성능면이나 유지보수 측면에서도 훨씬 나으실 겁니다. 책을 가지고 계신다면 Appendix 에 해당 내용들이 있으니 참고하시면 도움이 되실 겁니다.
질문&답변
querydsl QTodo관련 문의
import 하는 패키지는 엔티티 클래스가 존재하는 곳과 동일합니다. Gradle 명령어를 이용해서 compileJava를 실행하신 후에 QTodo 클래스를 사용할 수 있는 상황이 정상적인 상황입니다. 실행후에 해당 클래스가 만들어지는지 확인해 주세요 위의 코드에서는 import org.zerock.apiserver.domain.QTodo 로 했을 때 에러가 없어야 합니다. 혹시 build.gradle의 설정이 문제일 수도 있으니 해결이 안되시면 코드를 다운로드해서 실행해 볼 수 있도록 깃헙 링크등을 남겨주세요
질문&답변
todo list 검색 기능 문의
좋은 질문 감사합니다. 우선 라우팅 환경에서 검색이란 URL에 검색 관련 키워드 등이 쿼리 스트링으로 처리되어야 합니다. /list?page=1&size=10&keyword=AAA 와 같은 형식으로 만들어져야 합니다. 따라서 검색 조건을 담당하는 컴포넌트를 작성하고 키워드를 입력한 후에 검색 버튼을 클릭하면 URL에 검색 조건이 포함되도록 해야 합니다. 실제 리스트를 출력하는 컴포넌트는 추가적으로 키워드를 받아서 서버를 호출하고 해당 결과를 출력하는 형태가 되면 됩니다.
질문&답변
JWT와 @PreAuthorize 사용하기에서 권한오류
음.. 500 에러라면 서버 내부 에러라는 얘기네요. @PreAuthorize를 붙인 이후 에러가 나셨다고 하셨네요.. 우선은 Postman 등에서 JWT 전송이 제대로 되었는지 확인하는게 필요합니다. 서버 쪽에서는 JWTFilter에서 예외가 발생하지 않는지 확인하시고@EnableMethodSecurity(prePostEnabled = true)설정이 필요한데 있는지 확인해 보셔야 할 듯 합니다. 강의와 동일한 예제로 작성하셨다면 백엔드 코드를 cookie_00@naver.com로 알려주시면 테스트해 볼 수 있습니다.
질문&답변
access Token 만료 후 todo/list 접속시도 에러 처리
JWTCheckFilter에서 401에러를 만들어서 보내시는 부분이 있네요 본인이 작성하신 코드 } catch (Exception e) { log.error("JWT Check Failed: {}", e.getMessage()); // 4. 인증 실패 응답 세팅 response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setContentType("application/json"); String msg = new Gson().toJson(Map.of("error", "ERROR_ACCESS_TOKEN")); try (PrintWriter writer = response.getWriter()) { writer.println(msg); } // 5. 인증 정보 초기화 (중요) SecurityContextHolder.clearContext(); }--------------------------------예제 코드 }catch(Exception e){ log.error("JWT Check Error.............."); log.error(e.getMessage()); Gson gson = new Gson(); String msg = gson.toJson(Map.of("error", "ERROR_ACCESS_TOKEN")); response.setContentType("application/json"); PrintWriter printWriter = response.getWriter(); printWriter.println(msg); printWriter.close(); }
구멍가게코딩단님의 소개 - 인프런