inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

frontcontrollerV3 질문

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 내용] 안녕하세요. V3 부분을 하다가 문제가 되는 부분을 찾지 못해서 도움을 요청드리기 위해 질문 남깁니다. 인텔리제이에서는 문제가 없이 실행이 되는데, 브라우저에서 localhost:8080 의 V3 회원가입을 누르면 There was an unexpected error (type=Not Found, status=404) 가 발생합니다. https://drive.google.com/drive/folders/1LDQPD2zjQm5mwDCrFZLluDEMNpS1U3l-?usp=drive_link

  • spring
  • mvc
Michael Scott 댓글 2 좋아요 0 조회수 374

교재 내용중에 질문 있습니다!

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

스프링 부트는 DispacherServlet을 서블릿으로 자동으로 등록하면서 모든 경로(urlPatterns="/")에 대해서 매핑한다. 참고: 더 자세한 경로가 우선순위가 높다. 그래서 기존에 등록한 서블릿도 함께 동작한다. 기존에 등록한 서블릿의 경로가 존재한다면 이 서블릿이 우선으로 동작한다. 교재중에 위 내용이 있는데요 만약에 HttpServlet을 상속받아 구현한 클래스에 경로를 따로 설정을 했다면 DispacherServlet가 우선 실행되는게 아니라 HttpServlet 을 상속받아 구현한 클래스가 먼저 실행되고 그 후에 DispacherServlet이 실행되는건가요? 요청 흐름 서블릿이 호출되면 HttpServlet이 제공하는 serivce()가 호출된다. 스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버라이드 해두었다. FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서 DispacherServlet.doDispatch() 가 호출된다. 최종적으로 DispacherServlet의 doDispatch() 함수가 호출된다. 교재중에 위 내용이 있는데요 서블릿이 호출되면 흐름이 HttpServlet의 service()가 호출되는데 이때 service()를 오버라이딩한 자식 클래스의 service()가 호출되고 최종적으로 DispacherServlet의 doDispatch() 실행이 된다 라고 내용을 이해 했는데 맞게 이해한건지 궁금합니다. 감사합니다.

  • spring
  • mvc
감바스 댓글 1 좋아요 0 조회수 161

스레드 대기 집합 질문

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

여기에서 스래드 대기 집합은 WAITING, TIMED_WAITING, BLOCKED가 보관되는 곳과는 다른 큐를 의미하는게 맞을까요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
도토리 댓글 1 좋아요 0 조회수 310

교안에 잘못된 부분이 있는 것 같습니다

해결됨

김영한의 실전 자바 - 중급 2편

컬렉션 프레임워크 / Collections 정렬 관련 메서드 에서 reverse 메소드에 대한 설명이 "정렬 기준 의 반대"로 컬렉션을 정렬한다고 되어있는데 단순히 reverse메소드는 현재 컬렉션이 정렬되어 있는 것을 뒤집어 주는 메소드 인 것 같습니다

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
ssshhh 댓글 1 좋아요 0 조회수 171

Blocked 되지 않는 문제

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 쓰레드의 동시성이슈를 syncronized로 해결하였을때 로그를 보면, 00:53:11.012 [ t1] 거래 시작: BankAccountV3 00:53:11.012 [ t2] 거래 시작: BankAccountV3 00:53:11.020 [ t1] [검증 시작] 출금액: 800, 잔액: 1000 00:53:11.021 [ t1] [검증 완료] 출금액:800, 잔액: 1000 00:53:11.489 [ main] t1 state: TIMED_WAITING 00:53:11.490 [ main] t2 state: TIMED_WAITING 00:53:12.021 [ t1] [출금 완료] 출금액:800, 잔액: 200 00:53:12.021 [ t1] 거래 종료 00:53:12.021 [ t2] [검증 시작] 출금액: 800, 잔액: 200 00:53:12.022 [ t2] [검증 실패] 00:53:12.024 [ main] 최종 잔액: 200 이런식으로 t1, t2 두 쓰레드중 하나가 blocked 되는 것이 아니라 모두 time_waiting상태로 유지 됩니다. 뭔가 느낌으로는 큰 상관은 없을 것 같고, 시스템 환경에 따른 차이인 거 같은데, 혹시나 제가 세팅을 잘못했거나 코드를 잘못 짰을 가능성도 있을까요. ## 메인 클래스를 반복해서 실행해보니 t1, t2 스레드 모두 time waiting 상태이거나 모두 blocked 상태가 됩니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
bongchin 댓글 1 좋아요 0 조회수 309

동일한 엔티티를 2개의 필드 타입으로 정의하려면 어떻게 해야 할까요?

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요. JPA를 이용해서 스터디를 하다가 막히는 부분이 있어서 질문 드립니다. 우선 요구사항은 아래 내용입니다. 신규 회원은 1명의 회원을 추천할 수 있습니다. 회원은 본인이 추천받은 총 횟수를 알 수 있습니다. 위 내용을 기반으로 엔티티를 Customer, Referee 2개를 생성 했습니다. 그리고 Referee 엔티티에서 추천한 회원 ID와 추천받은 회원 ID를 필드로 가지려고 합니다. 추천한 회원 ID 필드는 OneToOne 관계로, 추천받은 회원 ID는 ManyToOne 관계로 풀고 싶습니다. 이런 경우에는 어떤식으로 정의를 해야 할까요? @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Referee extends CreatedDateTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "referee_id") private Long id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "customer_id") private Customer customer; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "customer_id") private Customer refereeCustomer; } 감사합니다.

  • java
  • jpa
Anonymous 댓글 1 좋아요 0 조회수 181

회원서비스테스트 질문

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

MemberServiceTest에서 Long saveId = memberService.join(member)의 memberService부분에서 밑줄이 그어지며 Cannot resolve symbol 'memberSerivce' 오류가 납니다. 캐쉬도 지워봤습니다. 각각 MemberServiceTest와 MemberService 파일 화면입니다.

  • java
  • spring
  • mvc
  • spring-boot
달달한 사막여우 댓글 2 좋아요 0 조회수 137

ScannerWhileEx3

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

왼쪽화면: 강의영상 / 오른쪽: 제 코드 강사님이 하셨을 땐 엔터로 여러 숫자들 입력하고 그 숫자들의 합과 평균을 입력할 수 있는데, 저는 똑같이 쳐도 숫자를 한개씩만 입력할 수 있어요.. 제 코드는 package scanner; import java.util.Scanner; public class ScannerWhile3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int sum = 0; int count = 0; int input = 0; System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요: "); while(true){ input = sc.nextInt(); if(input == -1){D break; } sum += input; count++; double average = (double) sum / count; System.out.println("입력한 숫자들의 합계: " + sum); System.out.println("입력한 숫자들의 평균: " + average); } } } 이와 같은데 무엇이 강사님과 다른지 모르겠습니다!

  • java
  • 객체지향
kk 댓글 1 좋아요 0 조회수 178

remove 메소드 관련 질문입니다.

미해결

김영한의 실전 자바 - 중급 2편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 데이터를 삭제하는 기능에서 removeNode 를 null 값으로 처리하는 이유가 있을까요? removeNode 를 더 이상 사용되지 않는 것 같은데, 해당 노드의 item 과 next 를 null 값으로 처리해야만 GC 대상이 되는건가요? null 값으로 명시하지 않아도 될 것 같아 질문드립니다. // 추가 코드 public Object remove(int index) { Node removeNode = getNode(index); Object removedItem = removeNode.item; if (index == 0) { first = removeNode.next; } else { Node prev = getNode(index - 1); prev.next = removeNode.next; } removeNode.item = null; removeNode.next = null; size--; return removedItem; }

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
크크룩삥봉 댓글 1 좋아요 0 조회수 209

MemberRepository 인터페이스질문 ㅠㅠ 초보적인거라 죄송합니다..

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기 인터페이스에 구현된 save findById findByName findAll 이 4가지는 메서드로 정의된건가요 ...? 인터페이스는 앞에 접근제어가 없이도 메서드로 정의하는게 가능한건가요 ..?

  • java
  • spring
  • mvc
  • spring-boot
Teo 댓글 1 좋아요 0 조회수 318

프로젝트 적용하는데 어려움이 있어 질문드립니다.

미해결

백엔드 개발자 성능 개선 초석 다지기

안녕하세요. 현재 프로젝트를 디벨롭하려고 수강한 학생입니다. 현재 자바17버전을 사용하여서 프로젝트를 완료하였고 ngrinder에서 스크립트를 사용하기 위해 11버전으로 낮추었는데 프로젝트 코드의 많은 부분을 수정해야해서 17버전을 사용해서 적용할 수는 없을까요?

  • java
  • mysql
  • spring-boot
  • cache
  • index
woniwoni30 댓글 1 좋아요 0 조회수 326

원자적 연산을 확실히 알수 있는 방법이 있나요?

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

i++ 은 1줄이지만 , 2~3개의 cpu 연산이 필요하므로 원자적 연산이 아닙니다. cas 도 상식적으로는 2개 이상의 cpu 연산이 필요한데 cpu 차원에서 1개의 cpu 연산처럼 제공해주기에, 원자적 연산이라고 보는것 같습니다. 아래와 같은 경우 원자적연산인데, int count = 3; 그렇다면 아래의 코드는 원자적연산인가? 생각해보면, max 값을 가져오고 그걸 대입해야 하므로 2개 이상 cpu 연산이 필요한것 같은데 확신은 들지 않습니다. int count = max; -- 그래서... 어디까지가 원자적 연산인지 확실히 알수 있는 방법이나 이와 관련된 스펙문서 등이 있는지 궁금합니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
void 댓글 1 좋아요 1 조회수 304

next.js에서부터는 react query 필요없는지

미해결

따라하며 배우는 리액트 A-Z[19버전 반영]

next.js를 도입하면 react query가 필요없어서 더 이상 안쓰시는건가요?? fetch를 쓰던 axios를 쓰던 next.js에서 알아서 캐시를 남겨주는건가요?? 아니면 fetch를 써야만 알아서 해주나요??

  • react
  • redux
  • tdd
  • typescript
  • next.js
  • 소프트웨어-테스트
오디 댓글 1 좋아요 0 조회수 343

클래스의 관심사는 하나인게 이상적인가요?

미해결

토비의 스프링 6 - 이해와 원리

안녕하세요. 하나의 클래스는 무조건 하나의 관심사만 가지는 것이 좋나요? 여러 가지의 관심사를 가지는 경우는 무조건 피해야 하나요? 수업에서 Client가 두 가지 관심사를 가지고 있다고 하셨고 (PaymentService 이용해서 비즈니스 로직 처리 + PaymentService의 내부 의존관계 설정), 후자의 책임은 오브젝트 팩토리로 옮겨버리셨는데요. '하나의 클래스는 하나의 관심사만 처리하도록 코드를 짜는게 좋다'라고 이해해도 괜찮을까요? 하나의 클래스가 여러 가지 관심사를 가져도 되는 경우도 있는지 궁금합니다.

  • java
  • spring
Hyuncheol Park 댓글 1 좋아요 0 조회수 369

key value 값 질문

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] key value에서 key값은 제가 임의로 설정해서 넘길수있는건가요?? 예를들어 지금 key의 이름이 data라고 되어있는데 그냥 key라고 설정하고 resourses에 있는 hello 파일에 있는 data를 key로 바꿔서 설정해도 괜찮나요??

  • java
  • spring
  • mvc
  • spring-boot
Teo 댓글 1 좋아요 0 조회수 230

커넥션 생성 시점 질문드립니다.

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

안녕하세요. 커넥션이 처음 생성되는 시점이 언제인지 질문드립니다.. DataSourceUtils.getConnection()을 호출하는 시점에 커넥션이 처음 생성되는것인지, 아니면 TransactionStatus status = transactionManager.getTransaction();을 호출하는 시점에 커넥션이 처음 생성되는것인지 질문드립니다.. 현재 강의에서는 DataSourceUtils.getConnection()의 경우에 트랜잭션 동기화 매니저가 관리하는 커넥션이 없는 경우 새로운 커넥션을 생성해서 반환한다고 되어있는데, 다음강의 에서는 transactionManager.getTransaction()을 호출해서 트랜잭션을 시작하는데 이떄 커넥션을 생성한다고 되어있습니다.. 그래서 두가지 경우중 언제 커넥션이 생성되는것인지 혼란이와서 질문드립니다.. 감사합니다 + 위 내용에 대해서 알아보다가 아래와 같이 정리해 보았는데 이렇게 이해하면 될까요? 1. transactionManager.getTransaction(); 을 통해 트랜잭션 매니저가 트랜잭션을 시작하고, 커넥션을 생성해서 트랜잭션 동기화 매니저에 보관한다. bizLogic()안에 있는 fingById()나 update()를 통해 getConnection() 즉, DataSourceUtil.getConnection(dataSource)를 하게되면, 이때는 트랜잭션 동기화 매니저가 관리하는 커넥션이 있는 경우이므로, 해당 커넥션을 반환한다. 즉, findById()를 할떄의 커넥션과 update()를 할떄의 커넥션이 동일하다. 2. transactionManager.getTransaction(); 을 하지않으면, 이때는 트랜잭션을 시작하지않은것이므로, bizLogic()안에 있는 fingById()나 update()를 통해 getConnection() 즉, DataSourceUtil.getConnection(dataSource)를 하게되면, 이때는 트랜잭션 동기화 매니저도 없고, 트랜잭션 동기화 매니저가 관리하는 커넥션이 없는 경우이므로, 새로운 커넥션을 생성해서 반환한다. 즉, findById()를 할떄의 커넥션과 update()를 할떄의 커넥션이 각각 다르다.

  • spring
  • mvc
  • spring-jdbc
오리쉐리 댓글 1 좋아요 0 조회수 198

강사님 v3 만들때

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

MyView에 뷰를 렌더링하는 과정에서 Map으로 username과 age 에 관련한 파라미터값이 전달이 되고 Myview (두번째코드에서) 그 내용이 전달이 되는 거 맞나요 ? (강의를 3번 돌려봤는데 좀 애매해서 질문드립니다.) (블로그 글도 찾아봤는데 데이터를 뷰로 전달하는 코드인 것 같은데 정확히 이해가 안돼서 질문 드립니다.) package hello.servlet.domain.web.servlet.frontcontroller.v3; import hello.servlet.domain.web.servlet.frontcontroller.ModelView; import hello.servlet.domain.web.servlet.frontcontroller.MyView; import hello.servlet.domain.web.servlet.frontcontroller.v3.controller.MemberFormControllerV3; import hello.servlet.domain.web.servlet.frontcontroller.v3.controller.MemberListControllerV3; import hello.servlet.domain.web.servlet.frontcontroller.v3.controller.MemberSaveControllerV3; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; // /front-controller/v3/* URL 패턴을 처리하는 서블릿 @WebServlet(name = "frontControllerServletV3", urlPatterns = "/front-controller/v3/*") public class FrontControllerServlet3 extends HttpServlet { private Map<String, ControllerV3> controllerMap = new HashMap<>(); public FrontControllerServlet3() { controllerMap.put("/front-controller/v3/members/new-form", new MemberFormControllerV3()); controllerMap.put("/front-controller/v3/members/save", new MemberSaveControllerV3()); controllerMap.put("/front-controller/v3/members", new MemberListControllerV3()); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("FrontControllerServlet3.service"); String requestUri = request.getRequestURI(); ControllerV3 controller = controllerMap.get(requestUri); if (controller == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } Map<String, String> paramMap = createParamMap(request); ModelView mv = controller.process(paramMap); String viewName = mv.getViewname(); MyView view = viewResolver(viewName); view.render(mv.getModel(), request, response); } private Map<String, String> createParamMap(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator().forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName))); return paramMap; } private MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } } public void modelToRequestAttribute(Map<String,Object> model,HttpServletRequest request) { //.jsp는 setAttribute를 씀 model.forEach((key,value)->request.setAttribute(key,value)); //request에 모든 정보를 저장한다. model에 있는 정보를 requestAttribute로 바꾼다. //request에 값을 다 담아둔다. } }

  • spring
  • mvc
KMC 댓글 1 좋아요 0 조회수 132

인터페이스 테스트인데 왜 구현체가 나오는건가요?

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

코드를 보면 초기화를 MemoryItemRepository로 하지 않고 ItemRepository로 초기화를 했는데 인터페이스는 구현체가 아니라서 함수가 정의가 안 되어있는데 어디서 구현체를 들고와서 테스트가 진행되는건가요..?

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
마이티 댓글 1 좋아요 2 조회수 193

synchronized가 붙은 메소드를 정말 동시에 접근하는 경우

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

[질문 내용] 안녕하세요. 항상 좋은 강의 감사드리며 질문이 하나 있습니다. 멀티 코어라는 가정하에, synchronized가 붙은 메소드를 정말 동시에 호출하는 경우에는 어떤 스레드가 Lock을 가져가는지 궁금합니다. 정말 동시에 호출되면 두 스레드 모두 Lock을 획득할 수 있는지 조회할 때 획득할 수 있다고 조회가 될 것 같아서요.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
원종민 댓글 1 좋아요 5 조회수 385

인기 태그

인프런 TOP Writers

주간 인기글