inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

서블릿에 대한 질문이 있습니다

미해결

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

서블릿은 웹 서버를 직접 구현할 때 필요한 tcp/ip 연결이나 http 메세지 파싱, html 생성 등 비즈니스 로직 외의 것들을 대신 해줘서 개발자는 비즈니스 로직에만 집중하여 개발할 수 있는 장점이 있다고 하셨고, 자바 웹 기술의 역사를 설명하실 때 서블릿의 단점이 html 생성이 어려운 것이라고 하셨습니다. 여기서 html 생성이 어렵다는 것은 비즈니스 로직에서 응답으로 보낸 HttpServletResponse를 자동으로 html화 하는 과정이 잘 이루어지지 않는다는 의미인가요? 어떤식으로 어렵다는 건지가 잘 이해가 안가서 질문드립니다.

  • spring
  • mvc
낌상 댓글 2 좋아요 0 조회수 371

API validation

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 강의 잘 듣고 있습니다. 예외처리 API 강의를 듣다보니 궁금한 점이 생겨 질문 드립니다. api를 사용하는 경우 validation을 어떻게 하는지 궁금합니다. 강의에서는 model과 view를 사용하여 bindingresult에 hasError를 사용하여 검증 성공 실패를 판단하여 view에서 타임리프를 활용해 에러 메세지등을 표시해주었는데요. api의 경우 찾아본 결과 bindinresult를 사용하지 않는 것을 확인 하였습니다. 여기서 그렇다면 api의 경우는 valid가 실패했을 시 어떤 과정이 일어나는지 궁금합니다. 검증이 실패한 것을 어떻게 확인하며 또 이 상황을 어떻게 처리하는지 궁금합니다. 또한 검증과 예외의 정확한 차이를 잘 모르겠습니다. 검증이 실패했을 경우도 exception이 터진 상황일까요?

  • spring
  • mvc
spring4185 댓글 2 좋아요 0 조회수 521

왜 commit할 때 status를 넣어줘야 하나요.

해결됨

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] status는 트랜잭션 설정, 상태에 관한 정보인데, 이미 transactionManager는 생성할 때 dataSource를 넣어줬고, 또 트랜잭션 동기화 매니저가 있기 때문에 어떤 커넥션을 닫아야 할 지 알고 있을 것 같습니다. 그럼 commit()할 때난 rollback()할 때 그냥 닫거나 롤백하면 될텐데, 왜 status가 필요한가요?

  • spring
  • mvc
  • spring-jdbc
궁금이 댓글 1 좋아요 0 조회수 449

PageableExecutionUtils.getPage 의 최적화 로직만 따로 뺀 count 메소드입니다.

해결됨

실전! Querydsl

갱신된 강의자료에도 나와 있듯이, fetchResult, fetchCount 등의 메소드는 deprecated 예정입니다. 또한 해당 메소드는 Page 타입을 반환하기 때문에 Page 타입을 직접적으로 조작해야 한다는 제약이 있습니다. 이걸 잘 쓰면 되는데, Page 의 시작번호 등 제약도 있어서 저는 회사에서 Page 를 따로 만들어서 사용하거든요. 그래서 search 메소드와 count 메소드는 항상 분리하고 있습니다. 2. 그런 점에서 count 만 최적화하는 로직만 베껴서 만든 최적화 메소드입니다. 실제로 count 구문을 실행하기 위한 메소드입니다. 필요에 따라서 public 으로 만들어도 될 것 같네요. // count 실행 메소드 private Long countByCond(MemberSearchCond cond) { return query .select(member.countDistinct()) .from(member) .where( usernameEq(cond.getUsername()), teamNameEq(cond.getTeamName()), ageGoe(cond.getAgeGoe()), ageLoe(cond.getAgeLoe()) ) .fetchOne(); } 최적화 로직을 베낀 메소드입니다. 스프링 데이터 JPA 는 아래 코드와 같이 page, size 값이 null 이 아니고, 적절한 범위에 있는지를 판단하여 isPaged 라는 분기를 만듭니다. 참고로 코드를 분석하면서 내린 뇌피셜이니 혹시 틀리다면 말씀해주세요. page 가 0 이 아니라 1 부터 시작하는 건 제 취향입니다. 회사에서 그렇게 쓰고 있거든요. 필요에 따라 0 부터 시작하도록 바꾸는 건 어렵지 않을 것 같습니다. public Long countByCondOptimization(List<?> content, MemberSearchCond cond, Long page, Long size) { boolean isPaged = page != null && size != null && page > 0 && size > 0; long offset = isPaged ? (page - 1) * size : 0L; long contentSize = content.size(); if (!isPaged || offset == 0) { if (!isPaged || size > contentSize) { return contentSize; } return this.countByCond(cond); } if (contentSize != 0 && size > contentSize) { return offset + contentSize; } return this.countByCond(cond); } 이렇게 하여 count 쿼리를 리스트 조회 쿼리와 분리하여 재사용성을 높이면서, 성능도 최적화할 수 있습니다. 감사합니다.

  • java
  • jpa
psam1017 댓글 1 좋아요 3 조회수 807

동적으로 Order 절 만드는 코드 공유합니다

해결됨

실전! Querydsl

강의에서는 Query DSL 4.x 버전이어서 제네릭 없는 예제 코드인 것 같은데, 제가 올리는 버전은 5.0 버전이어서 차이가 있음을 감안해주세요. 정렬 조건을 하나만 추가하는 코드입니다. 정렬 조건을 여러 개 추가하려면 반복문을 돌면서 JPAQuery 를 동적으로 확장해나가면 됩니다. // 페이징하는 메소드에서 사용 private Expression<? extends Comparable<?>> specifyMemberProperty(String prop) { prop = prop == null ? "" : prop.toLowerCase(); if (prop.equals("username")) { return member.username; } if (prop.equals("age")) { return member.age; } return member.id; } // 페이징하는 메소드 // ... .orderBy(new OrderSpecifier<>("desc".equalsIgnoreCase(dir) ? Order.DESC : Order.ASC, specifyMemberProperty(prop))) .fetch(); -- 저는 일단 이렇게 만들어봤는데, 다른 분께서 더 나은 코드, 더 빠른 코드가 있다면 저한테도 알려주세요. 감사합니다.

  • java
  • jpa
psam1017 댓글 0 좋아요 2 조회수 363

@ManyToOne Category parent 질문 있습니다.

미해결

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

@ManyToOne @JoinColumn(name = "parent_id") private Category parent; @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); 안녕하세요. 위 코드에서 부모 쪽에 다대일 매핑 한 이유를 알고 싶습니다. 아니면 DB 테이블 안에서 부모 셀프 외래 키를 만들어서 조회할 때 이 외래 키를 참조하여 자식 카테고리들까지 같이 조회하게 만들었기 때문에 테이블에서 다는 parent_id니까 jpa에도 parent에 다를 준 건 가 싶기도 해서요 필드 명에 부모 자식이 있어서 부모는 하나고 자식은 여러 개인데 부모 쪽에 다로 돼있어서 헷갈리네요..

  • java
  • jpa
hoonseung 댓글 2 좋아요 0 조회수 569

Controller에서 BindingResult값을 유지한채로 @ExceptionHandler를 활용한 사용자 정의 예외를 처리하는법이 궁금합니다.

미해결

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] Spring data jpa 를 활용하여 지금까지 배운 내용들을 총 합한 프로젝트를 만들어 보고 있는데 한가지 궁금증이 생겨 질문 드립니다. @ExceptionHandler을 사용하여 사용자정의 예외를 만들어 아이디 중복 예외를 처리하고싶은데 예외를 처리하는 과정에서 아이디가 중복일시 Controller의 BindingResult를 활용하여 아이디가 중복이면 View에 아이디가 중복이라는 정보를 표현하고싶어서 프로젝트를 코딩중에 Controller 부분에서 service단에서 throw한 사용자 정의 예외를 처리하려 하는데 try catch로 예외를 처리하는 순간 @ExceptionHandler를 사용하지 못하고 그렇다고 다시 예외를 던지자니 @ExceptionHandler에서 View에 관련된 Binding result의 값이나 ModelAttribute의 값을 보존해지 못하여 처리가 불가합니다. 이럴때 제일 좋은 방법이 무엇인지 알고싶습니다. Controller 코드입니다. @Controller @RequiredArgsConstructor @RequestMapping("/users") public class UserController { private final LoginService loginService; @GetMapping("/add") public String addForm(@ModelAttribute("userDto") UserDto userDto) { return "user/addUserForm"; } @PostMapping("/add") public String save(@Valid @ModelAttribute UserDto userDto, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "user/addUserForm"; } // if (loginService.signUpIdExists(userDto.getLoginId()) == false){ // bindingResult.reject("loginIdExists", "동일한 아이디가 존재합니다."); // return "user/addUserForm"; // } try { loginService.signUp(userDto); return "redirect:/"; } catch (UserIdExistsException e) { bindingResult.reject("loginIdExists", "동일한 아이디가 존재합니다."); return "user/addUserForm"; } } } Service 코드입니다. @Slf4j @Service @RequiredArgsConstructor public class LoginService { private final UserRepository userRepository; public User login(String loginId, String password) { return userRepository.findByLoginId(loginId).filter(m -> m.getPassword().equals(password)) .orElse(null); } public void signUp(UserDto userDto) { // if(signUpIdExists(userDto.getLoginId()) == false){ // throw new UserIdExistsException("이미 존재하는 아이디입니다."); // } try { Address address = new Address(userDto.getAddressDto().getZipcode(), userDto.getAddressDto().getStreetAdr(), userDto.getAddressDto().getDetailAdr()); User regisUser = new User(userDto.getLoginId(), userDto.getLoginName(), userDto.getPassword(), address); userRepository.save(regisUser); } catch (DataIntegrityViolationException e) { throw new UserIdExistsException("이미 존재하는 아이디입니다."); } } private boolean signUpIdExists(String loginId) { return userRepository.findByLoginId(loginId).isEmpty(); } } @ControllerAdvice 코드입니다. @Slf4j @ControllerAdvice public class ExceptionAdvice { @ExceptionHandler(UserIdExistsException.class) public ModelAndView userIdExHandler(UserIdExistsException e) { log.error("[userIdExistsException] ex", e); return new ModelAndView(); } } UserIdExistsException 코드입니다. public class UserIdExistsException extends RuntimeException{ public UserIdExistsException() { } public UserIdExistsException(String message) { super(message); } } 위 코드는 동작은 확인했지만 사실상 try catch 로 예외를 잡아버려서 @ExceptionHandler가 동작하지 않는 상태입니다. Entity의 아이디값에 unique 옵션을 걸어두어 아이디 중복이 일어날시 DataIntegrityViolationException에러가 일어납니다. 추가로 궁금한것 예외가 사실상 repository에서 터지는데 인터페이스에는 try catch가 권장되지 않는것으로 알고 통상 Service에서 에러를 처리하는것으로 알아 이렇게 코딩하였는데 이게 올바른건지 모르겠습니다. 예외를 발생시키는 지점을 repository로 옮기는것이 맞나요? Spring data jpa 는 알아서 Spring에 종속된 에러를 출력하는것으로 알고있는데 DataIntegrityViolationException에 속한 예외 두가지를 다른방법으로 처리하고싶으면 ErrorCode를 분석해 If문 으로 사용자 정의 예외를 만들어서 처리해야하나요? bindingresult를 사용하기 위해 어쩔수없이 예외를 throw하였더니 controller까지 예외가 전파되서 코드가 지저분해졌습니다. 이렇게 View에 특정한 값을 보내주어야할때 Controller에 예외를 throw 하지 않고 해결할수있는 좋은 방법이 있나요? 질문이 길고 지저분해서 죄송합니다. 나름 열심히 알아보고 코딩해보아도 잘 모르겠어서 질문남깁니다. 감사합니다.

  • spring
  • mvc
  • spring-jdbc
이성훈 댓글 2 좋아요 0 조회수 925

완전탐색 1090번 시간초과

미해결

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

예제 문제는 잘 풀리는데 백준에 제출하니까 시간초과가 뜹니다 강의 자료랑 큰 차이는 없어 보이는데 어느 부분을 고쳐야 시간 안에 계산 가능할까요? #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char **argv) { int n; int minX, minY, maxX, maxY; cin >> n; int arr[n][2]; for(int i=0; i<n; i++){ cin >> arr[i][0] >> arr[i][1]; } minX = arr[0][0]; maxX = arr[0][0]; minY = arr[0][1]; maxY = arr[0][1]; for(int i=1; i<n; i++){ if(arr[i][0]>maxX){ maxX = arr[i][0]; } else if(arr[i][0]<minX){ minX = arr[i][0]; } if(arr[i][1]>maxY){ maxY = arr[i][1]; } else if(arr[i][1]<minY){ minY = arr[i][1]; } } int arr_answer[n]; int arr_dis[n]; for(int i=minY; i<=maxY; i++){ for(int j=minX; j<= maxX; j++){ for(int l=0; l<n; l++){ int subY= 0, subX=0; subY = i-arr[l][1]; subX = j-arr[l][0]; arr_dis[l] = abs(subX) + abs(subY); } int sum = 0; for(int k=0; k<n; k++){ sum+=arr_dis[k]; if(i==minY && j ==minX){ arr_answer[k] =sum; } else if(sum < arr_answer[k]){ arr_answer[k] = sum; } } } } for(int i=0; i<n; i++){ cout << arr_answer[i] << " "; } return 0; }

  • python
  • 코딩-테스트
  • 알고리즘
yongyong213 댓글 2 좋아요 1 조회수 617

@Data 인식 문제

해결됨

스프링 부트 웹 개발 입문 - 따라하며 배우기

계속하여 아래와 같이 getNo()을 인식하지 못하는 오류가 발생하고 있습니다. Method getNo() cannot be found on type com.example.demo.v2_VO.VO.Order_list 그래서 한참을 해맨 후에 vo의 @Data가 Getter의 기능을 하지 못하고 있는 것을 알게되었습니다. 일일이 getter를 만들어주니까 돌아가더라구요... 그래서 lombok의 문제로 생각하고 롬복을 설치하고 외부 라이브러리를 추가해주는 식으로 해결하려고 하였습니다. 이렇게 조치를 해도 계속 오류가 나더라구요.. 혹시 김부장님께서는 이런 경우 다른 방법으로 문제를 해결하신 적 있으신가요?

  • spring
  • mvc
  • spring-boot
jck 댓글 2 좋아요 0 조회수 316

gradle이 실행이 안됩니다

미해결

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

윈도우 환경에서 gardle을 빌드 시키려고 하면 org.gradle.api.UncheckedIOException: Could not load properties for module 'gradle-cli' 이 오류가 뜹니다 인텔리제이 재설치,스프링 재설치,vscode로 실행등을 다 해봐도 계속 저 오류가 뜹니다 인텔리제이 재설치 이후에는 Unable to load class 'org.slf4j.LoggerFactory'. This is an unexpected error. Please file a bug containing the idea.log file. 가 뜹니다

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

엄청 기초인데 기억이안나네요 ㅠㅠ 경로문제

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

@RequestMapping("/basic") @RequestMapping("basic") @GetMapping("text-basic") @GetMapping("/text-basic") 위 두개의 차이점을 잘 모르겠습니다 ㅠㅠㅠ..... 두번째는 틀린건가요?.. 어떨때 /를 붙여야하는지 헷갈립니다.

  • spring
  • mvc
hoon 댓글 2 좋아요 0 조회수 712

강의 코딩자료는 어디에 있나요?

미해결

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

강사님께서 강의 도중에 복사하시는 코딩 자료랑 강의노트는 어디서 다운로드 받을 수 있을까요? 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • spring
  • mvc
  • spring-boot
wonyongick 댓글 2 좋아요 0 조회수 821

old-controllerd의 web-inf 경로 연결 문제

미해결

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

안녕하세요, 강의 잘 듣고 있다가 다른 컴퓨터로 들을 일이 있어서 소스를 다운 받고 해당 부분을 지우고 다시 들었습니다. ModelandView에서 new-form을 연결했고, properties에서 prefix, suffix를 설정하고 돌리는데 계속 404가 나옵니다. webapp 폴더 있고, 그 아래 WEB-INF 폴더도 잘 있습니다. 뭐가 문제일까요? 스크린샷으로 한계가 있을 거 같아 zip으로 보내려고 하는데 어디로 보내드리면 될까요??

  • spring
  • mvc
전진호 댓글 1 좋아요 0 조회수 336

간단한 질문이 있습니다!!!

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

DispatcherType을 써도 오류가 발생했을때 필터, 서블릿, 인터셉터가 2번 호출되는 것은 똑같지 않나요?? 다른점은 클라이언트로 부터 발생한 정상요청인지, 오류페이지를 출력하기 위한 내부 요청인지 구분 할 수 있다는 점인데.. 궁금해서 질문드립니다!@!

  • spring
  • mvc
최승호 댓글 1 좋아요 0 조회수 355

빌드후 실행하면 동작도 잘 되는데 종료하고 나면 오류메시지가 나오네요

미해결

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

Execution failed for task ':DcsSpringApplication.main()'. > Build cancelled while executing task ':DcsSpringApplication.main()' * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.2.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 18s 3 actionable tasks: 1 executed, 2 up-to-date 라는 오류가 나오는데 무시해도 되는건가요?

  • java
  • spring
  • mvc
  • spring-boot
정규철 댓글 2 좋아요 0 조회수 1572

동시성 부분 추가 공부하면서 헷갈리는 부분 질문 드립니다.

해결됨

넓고 얕게 외워서 컴공 전공자 되기

안녕하세요 선생님! 동시성과 병렬성 관련해 기초가 약해 해당 강의를 들으면서 OS 부족한 부분을 많이 알게되어 도움이 많이되고 있습니다. 다름이 아니라 해당 강좌 범위는 벗어나지만.. 구글링해도 명확하게 해결되지 않아 질문 드립니다. 동시성을 구현하는 방법으로 멀티쓰레드 나 코루틴 방법으로 구현을 할 수있고 멀티쓰레드 방법에서 쓰레드 전환 간 context switch가 많기 때문에 오버헤드도 많아 Coroutine 방법을 많이 쓰고 또한 유저가 이벤트루프(스케쥴링)을 app에서 관리한다는 측면에서 디버그가 유용하다 정도로 이해하고 있습니다. 많은 블로그에서 멀티쓰레드보다 코루틴을 소개하면서 동시성 구현시 코루틴을 더 상위(혹은 좋은) 방법으로 서술이 많이 되어 있더라구요. I/O작업이 빈번할 경우 코루틴이 더 유리하다는 이해가 됩니다. 싱글스레드 + async 싱글스레드 멀티스레드 + async 멀티스레드 2개의 구현방법이 레이어가 다르다(thread와 task)보니 4가지 경우의 수를 적용할 수 있는데 실제 동시성을 적용해야되는 상황이면 어떻게 판단하고 최적의 구현방법(4가지 중 선택)을 적용할 수 있을까요? (파이썬 스택을 쓰고 있으며 GIL도 이해하고 있는 상태입니다.) 다시한번 해당 강의와 조금 벗어난 질문드려 죄송합니다. ( _ _ )

  • python
  • 동시성
  • 병렬성
권설민 댓글 1 좋아요 0 조회수 431

리소스 정리

해결됨

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

트랜잭션 매니저의 전체 동작 흐름에서 마지막에 '전체 리소스를 정리한다.' 라고 나와있는데 코드상으로 어디 부분에서 리소스 정리가 일어나는 건가요? 커밋이나 롤백을 하고 리소스 정리를 하는 코드가 내부에 존재하는 건가요?

  • spring
  • mvc
  • spring-jdbc
모깅 댓글 2 좋아요 1 조회수 358

mybatis 조회하기(7-2강) 실습시 오류가 발생합니다.

해결됨

스프링 부트 웹 개발 입문 - 따라하며 배우기

안녕하세요. 강의대로 실습한 후 실행시 오류가 발생해서 질문드립니다. 맥에서 실습중이기 때문에 하이디sql 사용이 불가하여 sequel pro로 대체하여 mariadb를 이용하고있는데, 이부분에서 연결이 잘못된 건지, 아니면 제가 실습을 따라가다 다른 실수가 있었던 건지 잘 모르겠습니다. 다른 분들께서 하신 질문들과 구글링 했을 때 제 생각에는 그래도 DB연결은 된 것 같은데 어떤 부분을 수정해야 할 지 도와주시면 감사하겠습니다. 오류 내용 : Invalid bound statement (not found): com.boot.sailing.v1.dao.MenuDao.doList [MenuCon] package com.boot.sailing.v1.controller; import com.boot.sailing.v1.service.MenuSvc; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Controller public class MenuCon { @Autowired MenuSvc menuSvc; @RequestMapping("/v1/menu") public String doMenu(Model model){ // Data 만들기 , List , Map List<Map<String, Object>> list = menuSvc.doList(); // Data 송부 model.addAttribute("list", list); model.addAttribute("hello", " ========== MenuCon ======== "); return "/v1/menu/menu"; } } [CoffeeMenu.xml] <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.boot.sailing.v1.dao.MenuDao"> <!-- 메뉴조회 --> <select id="doList" resultType="map"> SELECT no, coffee, kind, price, DATE_FORMAT(reg_day,"%Y, %m, %d") AS reg_day, DATE_FORMAT(mod_day,"%Y, %m, %d") AS mod_day FROM coffee_menu; </select> </mapper> [MenuSvc] package com.boot.sailing.v1.service; import com.boot.sailing.v1.dao.MenuDao; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @Log4j2 public class MenuSvc { @Autowired MenuDao menuDao; public MenuSvc() { log.info("================ MenuSvc , 생성자 ==================="); } public List<Map<String, Object>> doList(){ List<Map<String, Object>> list = menuDao.doList(); log.info(list); return list; } } [application.yaml] spring: datasource: driver-class-name: org.mariadb.jdbc.Driver url: jdbc:mariadb://localhost:3306/boot username: boot password: boot --- # Configuration mybatis mybatis: mapper-locations: classpath:sqlmapper/**/*.xml [MenuDao] package com.boot.sailing.v1.dao; import org.apache.ibatis.annotations.Mapper; import java.util.List; import java.util.Map; @Mapper public interface MenuDao { List<Map<String, Object>> doList(); }

  • spring
  • mvc
  • spring-boot
조윤지 댓글 1 좋아요 0 조회수 448

db에 저장 시

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 1. Item 클래스와 UploadFile 클래스는 왜 따로 나눠쓰나요? 만약 db에 테이블로 생성 시 Item, ItemForm, UploadFIle의 연관관계는 어떡게 되는건가요?

  • spring
  • mvc
새싹 댓글 1 좋아요 0 조회수 577

인기 태그

인프런 TOP Writers

주간 인기글