POST 매핑 동작을 수행한 뒤에도 기존에 머물렀던 페이지로 리다이렉트 하는 방법이 있을까요? 예를 들어, 로그아웃 버튼을 클릭한 뒤에도 기존 페이지를 보여주는 상황이 이에 해당됩니다. 그렇다면 현재 페이지의 주소에 대한 정보를 컨트롤러에서 가지고 있어야 할텐데 어떤 방식으로 구현하는 것이 좋을지 궁금해서 질문 남깁니다.
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n][n]; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { arr[i][j] = sc.nextInt(); } } int m = sc.nextInt(); int[] moves = new int[m]; for(int i = 0; i < m; i++){ moves[i] = sc.nextInt(); } ArrayList<Stack<Integer>> board = new ArrayList<>(); for(int i = 0; i < n; i++) { Stack<Integer> temp = new Stack<>(); for(int j = 0; j < n; j++) { if(arr[n-1-j][i] == 0) break; temp.push(arr[n-1-j][i]); } board.add(temp); } Stack<Integer> basket = new Stack<>(); int result = 0; for(int i = 0; i < m; i++) { int num = moves[i]-1; Stack<Integer> stack = board.get(num); if(stack.empty()) continue; int popNum = stack.pop(); if(!basket.isEmpty() && basket.peek() == popNum) { basket.pop(); result += 2; } else { basket.push(popNum); } } System.out.print(result); } } 어느 부분에서 틀린지 모르겠습니다. 확인 해주시면 감사하겠습니다.ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. thymeleaf 템플릿을 이용하여 만든 items.html의 코드 상에 <link th:href="@{/css/bootstrap.min.css}" href="../css/bootstrap.min.css" rel="stylesheet"> 이 부분에 대해서 질문이 있습니다. localhost:8080/basic/items 로 접속을 하면 BasicController의 items 메소드에 의해서 /basic/items.html 인 뷰 템플릿을 렌더링 하는것 까지는 이해했습니다. 제가 아직 html 코드에 익숙하지 않아서 궁금한 점인데, 1번째 질문. th:href="@{/css/bootstrap.min.css}" 이 부분에서 thymeleaf가 자동으로 내부에서 localhost:8080/css/bootstrap.min.css 를 호출해서 정적 리소스 내에 존재하는 bootstrap.min.css 파일을 찾고 items.html 과의 관계( rel="stylesheet" )를 정의해주는건가요...??? 2번째 질문. 그래서 th: 태그가 없는 경우에는 정적으로 static/html/items.html이기 때문에 href="../css/bootstrap.min.css" ../를 통해서 static 디렉토리로 올라간 다음 거기서 부터 다시 static/css/bootstrap.min.css 를 탐색하는건가요??
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 2분 14초 상품 상세로 넘어가는 과정에서 다른 질문 글을보고 Gradle을 사용해서 빌드하고 실행하는 과정을 하니 해결이 되었는데요. 혹시 이방법 말고는 없나요? 느리다는 이유로 Gradle을 사용하지 않은걸로 아는데 이후에도 그냥 gradle로 사용해도 상관없나요?
1.HandlerExceptionResolver 활용 8분 10초에서 40초사이 String result= objectMapper.writeValueAsString(errorResult); 이 구문에 대해서요. jason을 문자로 바꿔준다. 객체를 문자로 바꿔준다고 하셨느데요. 그래서 객체랑 jason이 같은 줄알았는데요. https://velog.io/@wong0220/%EA%B0%9D%EC%B2%B4-Object-%EC%99%80-JSON-%EC%B0%A8%EC%9D%B4 여기 링크보면 다르다고 하는데 이 링크가 틀린건가요? 아니면 객체(jason)형태를 문자로 바꿔준다라는 의미로 이해해도 되나요? 2.위 사진은 API 예외 처리 교재 8페이지 사진입니다. HandlerExceptionResolver 시작 강의코드에서는 위에사진 빨간색 표시된 곳에서 response.sendError가 나오는건가요? 즉 서블릿 컨테이너까지 에러가 갔다가 다시 재요청을 한 것이 (2,3,4번과정)이 맞나요? 활용 강의에서는 (2,3,4,5번과정)이 맞나요? 근데 BasicErrorController로 재요청하는 방식은 몇 번에서 일어나는건가요? 이전 강의 코드 package hello.exception.resolver; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; @Slf4j public class MyHandlerExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof IllegalArgumentException) { log.info("IllegalArgumentException resolver to 400"); response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage()); return new ModelAndView(); } } catch (Exception e) { log.error("resolver ex", e); } return null; } } 현재 강의 코드 package hello.exception.resolver; import com.fasterxml.jackson.databind.ObjectMapper; import hello.exception.exception.UserException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import java.util.HashMap; import java.util.Map; @Slf4j public class UserHandlerExceptionResolver implements HandlerExceptionResolver { private final ObjectMapper objectMapper = new ObjectMapper(); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try { if (ex instanceof UserException) { log.info("UserException resolver to 400"); String acceptHeader = request.getHeader("accept"); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); if ("application/json".equals(acceptHeader)) { Map<String, Object> errorResult = new HashMap<>(); errorResult.put("ex", ex.getClass()); errorResult.put("message", ex.getMessage()); String result = objectMapper.writeValueAsString(errorResult); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().write(result); return new ModelAndView(); } else { // TEXT/HTML return new ModelAndView("error/400"); } } } catch (Exception e) { log.error("resolver ex", e); } return null; } } 3. 모델과 뷰를 반환한다고 하셨는데 모델을 반환할려면 모델에 저장할려는 코드가 필요할 텐데요. setattribute처럼요. 그런 코드가 없어서요..
현재 프로젝트를 진행중인데, Access Token과 Refresh Token을 헤더에 담아 로컬스토리지에 저장하는 방법을 사용중입니다. 그런데 로컬 스토리지는 보안에 취약하다는 글을 보았습니다. 로컬 스토리지에 담아도 jwt 정책으로 대응이 가능하다는 글도 있었습니다. Access Token과 Refresh Token을 어디에 저장해야 할까요? 만약 로컬 스토리지나 쿠키에 저장한다면 어떻게 관리해야하나요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 이렇게 에러가 났는데, 초심자라 전혀 해석을 못하겠습니다. JDK17, Gradle8.7, SpringBoot 3.1.11 로 실행하고 있습니다. 처음 JAVA8을 사용하고 있다가, springboot가 3.0만이 지원되고 있다고 하여, JAVA17을 설치하여 환경변수 등 모두 잘 설정하였습니다. 이외에 수강 내용대로 잘 따라가서, 인텔리제이에서 실행할 때에는 잘 되고 있었는데, wsl에서 build를 하니 에러가 났네요. 어떤 점이 잘못된 걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] jsp 파일중에 new-form.jsp 는 동적으로 처리되는 부분이 없고 save.jsp 는 자바 코드가 동적으로 처리되는 부분이 있는데 보통 웹서버에서 정적으로 html 을 내려주곤 하는데 new-form.jsp같은경우 위와같이 정적파일을 내려주는건가요?? jsp를 사용하지 않고 //자바코드 in html PrintWriter w = response.getWriter(); w.write("<html>"); w.write("<head>"); w.write(" <meta charset=\"UTF-8\">"); w.write(" <title>Title</title>"); w.write("</head>"); w.write("<body>"); w.write("<a href=\"/index.html\">메인</a>"); w.write("<table>"); w.write(" <thead>"); w.write(" <th>id</th>"); w.write(" <th>username</th>"); w.write(" <th>age</th>"); w.write(" </thead>"); w.write(" <tbody>"); 이런식으로 동적으로 html을 만드는거는 알겠는데 save.jsp 이렇게 프로젝트에 파일 자체가 있어도 그 안에 동적인 로직이있으면 동적으로 브라우저한테 내려주는건가요??? 3. 그럼 jsp로는 정적 동적 둘 다 가능한건가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요 package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository { @Override Optional<Member> findByName(String name); } 이 스프링jpa 에서 저기 findByName 부분은 없어도 되는 걸까요? 이미 MemberRepository 인터페이스를 상속 받으니까? 만약에 MemberRepository 에서 메만약에 MemberRepository 에서 메소드명을 schByName 이라 SpringDataJpaMemberRepository 에서소드명을 schByName 이라고 짓는다면 어떡해야 SpringDataJpaMemberRepository 에서 어떡해야하나요?.. 스프링jpa를 염두해두고 미리 메소드명들을 만들어야 하나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 사진과 같이 수정, 등록 폼에 css가 강의 내용과 다른데 혹시 어떤이유인지 알 수 있을까요? [구글 드라이브] https://drive.google.com/file/d/1oDw7yGjUQYH6d4c1Br85hFX9HACaGzj3/view?usp=sharing
[질문 내용] 여기에 질문 내용을 남겨주세요.조금 의아한 부분이 있어서요 @beforeEach 안에서 Repository 생성이 되었는데 윗줄에서 다시 선언이 되어서 클래스에 적용되는 건가요?? 기본적으로 코드는 위에서 아래로 처리되는 걸로 아는데요 위에서 선언이 먼저 되고 beforeEach 안에서 new 로 생성된 부분이 계속 버벅거립니다
지금까지의 설명은 기술의 발전 과정을 설명해주신것이니 실무에서나 개인 프로젝트 할때는 JDBC템플릿을 이용하면 지금까지 설명해주신 부분이 모두 해결이 자동으로 되니 에러 변환이나 커넥션 가져오고 반환하는 등 모든 과정을 고민하지 않아도 되는것인거죠 ? 그리고 멤버서비스v3_4테스트부터 오류가 발생하여 Jdbc템플릿을 이용하는 방법 테스트에까지 오류가 해결이 안됩니다. 기존에 질문글에 구글드라이브 링크를 올렸는데 해결 부탁드립니다 ㅠ
안녕하세요, 강의 잘 보고 있습니다. 코드 수정 후에 rerun 할때마다 너무 불편한데, 혹시 rerun 안해도 localhost: 8080이 켜져있는 상태에서 자동으로 화면이 변경되는걸 볼 수 있을까요? 예를 들어서 리액트 같은경우는 싱글페이지의 장점을 가지고 있어서 코드 수정 후 저장만 하면 바로 바로 변경되는걸 볼 수 있는데 인텔리제이에서도 비슷한 내용이 있나 싶어서 문의드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 공부를 하다가 갑자기 궁금해져서 질문 드립니다 MemberListControllerV3 클래스와 MemberSaveControllerV3에서 mv객체의 Model의 키를 각각 "members"와 "member"로 설정한 이유가 있나요? 이전의 버전도 계속 그런 방식으로 설정을 하더라구요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요? 프로젝션 쿼리에 new 명령어 관련 헷갈리는 부분이 있어서 질문 드립니다! try{ Member member = new Member(); member.setUsername("member1"); member.setAge(10); em.persist(member); em.flush(); em.clear(); List<MemberDTO> result = em.createQuery("SELECT new jpql.MemberDTO(m.username, m.age) FROM Member m", MemberDTO.class) .getResultList(); MemberDTO memberDTO = result.get(0); System.out.println("memberDTO = " + memberDTO.getAge()); System.out.println("memberDTO = " + memberDTO.getUsername()); tx.commit(); } 위와 같은 쿼리를 실행하게 되면 상위에서 생성한 member 객체에 있는 값을 result 로 복사하고 result 값을 memberDTO List의 인덱스 0으로 들어 간 값을 조회하라는 뜻이 맞는건가요..? 수업듣다가 제가 이해한게 맞는지 헷갈려서 질문 드립니다.. 답변 부탁드립니다!! 감사합니다.
private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } /** * 회원 가입 */ public Long join(Member member) { // 같은 이름이 있는 중복 회원X validateDuplicateMember(member);// 중복 회원 검증 memberRepository.save(member); return member.getId(); } MemberRepository는 인터페이스인데, 아래 join에서 memberRepository.save (member)을 어떻게 사용하는 건가요? 인터페이스는 객체를 만들지 못하고 구현체를 만들어야하는데 그러면 필드에서 MemberRepository의 구현체인 MemoryMemberRepository를 받아야 되는게 아닌가 했습니다. 이해가 잘 되지않아서 질문드립니다ㅠㅠ
안녕하세요! 강의 너무 잘 듣고 있는 수강생입니다. 이전 동기화와 CPU의 관계 강의에서는 CPU가 두 개 이상의 명령어를 처리하면 원자성이 보장이 안된다고 설명을 하셨는데, SpinLock & Busy Waiting 강의에서 test_and_set(int *lock) 메서드는 CPU 하드웨어 계층에서 원자성이 보장된다는 게 이해가 잘 가지를 않습니다. test_and_set(int *lock) 이 메서드는 하나의 명령어만 처리하는 건가요??