학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. "JPA 사용 시 주의해야할 점은, 항상 “트랜잭션”이 있어야 한다" 라고 해주셨는데, 그 말의 의미가 애플리케이션 서버가 DB 서버에 연결해서 데이터 관련 작업(쿼리를 날리는 등)시 무조건 트랜잭션이 필요하다는 말인가요? 즉, JPA가 아닌 JDBC Template을 사용하더라도 무조건 DB와의 데이터 관련 작업 시 “트랜잭션”이 있어야 하나요? 어떤 메서드엔 @Transactional이 없어도 되었고 어떤 메서드엔 필요했던 기억이 있어서 여쭤봅니다! 그리고, 트랜잭션이 걸려있을 때 애플리케이션에서 DB 서버로 쿼리를 날릴 때, "트랜잭션이 실행되고 DB에 쿼리가 날라가고 commit이 되서 DB에 데이터가 들어가는 순서" 일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 1)JPA를 사용하기위해 도메인 클래스에 @Entity나 @Id, @GeneratedValue를 달다가 확인하게 되었는데, 강의에선 javax.persistence.Id 이건데, 저는 지금 jakarta.persistence.Id 에 있는 애노테이션이었습니다. 그래서 궁금한 게 javax와 jakarta가 정확히 무엇이고, 일반 java랑 어떤 차이가 있는 개념인지도 궁금합니다! 그리고 javax는 지금은 jakarta로 바뀐걸로 이해하면 되겠죠? 2)아래에 있는 JPA 예시 코드에서 setParameter(~~)의 역할이, 메서드의 인자로 받은 name을 setParameter로 넣어주면, 그게 쿼리의 where 조건의 값으로 들어가는 게 맞을까요? @Override public Optional<Member> findByName(String name) { List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); return result.stream ().findAny(); } 3)QueryDsl을 사용하면 동적 쿼리를 더 잘 다룰 수 있다고 해주셨는데 동적 쿼리와 정적 쿼리의 차이점이 제가 이해하고 있는 게 맞을까요? 정적 쿼리 : findByName처럼 항상 같은 조건의 쿼리 동적 쿼리 : 검색 조건에 따라, 조건이 동적으로 바뀌는 쿼리 ex)이름 검색, 나이 검색 등등
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. AOP를 사용하면, 스프링이 뜨고 스프링 컨테이너에 예를 들어 MemberService 클래스의 객체가 스프링 빈으로 등록될 때, 가짜인 프록시 객체와 실제 객체 이렇게 2개가 다 등록이 되는 거라고 이해하면 될까요? 그래서, 처음에는 등록된 빈끼리 의존성을 주입할 땐 가짜 프록시 객체가 사용되다가, joinPoint.proceed() 메서드가 호출될 때 실제 객체가 호출되어서 사용되는 건가요?
안녕하세요. %s 형식으로 출력할때에는 나머지 자리를 공백이 아닌 다른 문자열로 대체해서 출력하는 옵션이 존재할까요? print('%10s' %('nice')) -> 나머지 자리 공백으로 표시 -> %s형식으로 출력할때에도 아래 옵션처림 남는차리를 특정 문자열로 채울 수 있는지 궁금합니다. print('{:_>10}'.format('nice')) -> 남는자리 _으로 표시 감사합니다.
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
css select대신 find 함수를 사용해서 이런 식으로 작성했더니, 같은 결과가 나오긴 했지만 너무 비효율적인거 같아서 질문드립니다. 더 깔끔하게 find를 사용해서 가져오는 방법이 있을까요? from bs4 import BeautifulSoup import requests url="https://davelee-fun.github.io/" res=requests.get(url) soup=BeautifulSoup(res.content,"html.parser") all=soup.find("div", "text-center") items=all.find("span") ls=[] for item in items : ls.append(item.get_text().strip()) print(ls[1]+" "+ls[2]+" "+ls[3])
안녕하세요. 강의 잘 듣고 있습니다. 종합실습에서 모델을 만들고 돌린 후에 모델 평가 코드를 실행했습니다. 다른 지표는 이전 실습(강의)에서 했던 것과 비슷하게 나왔습니다. 하지만 MAPE 지표는 엄청 큰 값이 나왔습니다. 예) MAPE : 352267848908800.0 혹시 몰라서 참조답안 코드도 전체 실행하고 MAPE 지표를 확인했고 마찬가지로 ( MAPE : 380158091460608.0 ) 엄청 큰 값이 나왔습니다. 왜 이렇게 큰 값이 나온 걸까요? chat한테 물어보니까 다음과 같은 답변을 받았습니다. MAPE 값이 매우 큰 것은 비정상적입니다. 일반적으로 MAPE는 100% 미만의 값을 가집니다. 이렇게 큰 MAPE 값은 다음과 같은 이유로 발생할 수 있습니다: 실제값 중 0 또는 0에 매우 가까운 값이 있어 분모가 극히 작아진 경우 데이터 스케일링 문제로 인해 예측값과 실제값의 차이가 극단적으로 큰 경우 계산 과정에서의 오류 이러한 MAPE 값은 신뢰할 수 없으며, 데이터나 모델에 문제가 있을 가능성이 높습니다. MSE와 MAE는 상대적으로 합리적인 값을 보이고 있으므로, MAPE 계산 과정이나 데이터를 재검토해볼 필요가 있습니다.
제가 지금 백엔드 프로젝트와 Airflow를 도커 컴포즈로 EC2에 올려서 테스트를 하고 있습니다. 혹시 airflow 웹페이지에서 DAG 목록 위에 Auto-refresh 버튼이 있는데 이 옵션을 끄면 dag이 정해진 스케줄에 작동하지 않는지 궁금합니다. 제가 검색해본 결과로는 dag 내용과 목록을 자동으로 최신화하는 옵션인 것 같은데 맞을까요..?? dag 실행에 문제만 없다면 리소스 절약을 위해서 이 옵션은 꺼놓는게 좋을 것 같아서요...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) - 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) - 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 아니오 [질문 내용] 여기에 질문 내용을 남겨주세요. 제가 친형걸로 이걸 들으려고 하는데 이 로드맵 전반적인 과정은 스프링인지 스프링부트인지 알고 싶어서 이렇게 질문드립니다.
문제 상황을 설명드리겠습니다. page 정보를 받아서 게시글 리스트, 페이지 정보를 View로 전달하는 Controller 코드 입니다. @GetMapping("/posts") public String getPosts(@RequestParam("page") String page, Model model) { // 사용자가 입력한 page문자열과 모든 post의 개수를 매개변수로 받아서 page 정보 생성 // 사용자가 입력한 page값을 검증 후 올바른 Page 정보를 반환한다. // "@#$", "hello" 같은 이상한 page값이 들어오면 모두 1로 변경한다. Page page = Page.validateAndCreate(page, postService.getPostsCount()); // page 정보를 사용하여 해당 page에 속하는 post들을 반환한다. List<Post> posts = postService.getPostList(page); // view로 데이터를 전달한다. model.addAttribute("page", page); model.addAttribute("posts", posts); } 처음에는 위 방식으로 코드를 작성했습니다. 그런데 page정보 뿐 아니라, 다른 sorting정보, searching정보 등 여러 매개변수들이 들어오다 보니, Controller 코드가 복잡해진다고 느꼈습니다. 간단한 예시 코드는 아래와 같습니다. @GetMapping("/posts") public String getPosts(@RequestParam("page") String page, @ModelAttribute("sort") Sort sort, @ModelAttribute("search") Search search, .... 등등 , Model model) { // 여러가지 전처리 로직들 Page page = Page.validateAndCreate(page, postService.getPostsCount()); Sort sort = Sort.validateAndCreate(sort, ... ) Search search = Search.validateAndCreate(search, ...) ....등등 // 위에서 생성한 정보들을 바탕으로 DB에 쿼리를 날려 posts 데이터를 받아온다. List<Post> posts = postService.getPostList(page, sort, search, ...등등); // view에 필요한 데이터를 전달한다. model.addAttribute("page", page); model.addAttribute("posts", posts); model.addAttribute("sort", sort); ... 등등 } 예시 코드는 문제상황 설명을 위해서 깔끔하게 작성했으나, 실제로는 제 부족한 실력 탓에 지저분합니다. 저는 Controller 코드를 지저분하게 만드는 원인으로 여러가지 전처리 로직들 (ex. Page.validateAndCreate(...) 코드들) View에 필요한 데이터들을 전달하는 model.addAttribute(...) 코드들 때문이라고 생각했습니다. 위 문제에 대한 해결방안으로 저는 ArgumentResolver를 사용하는 것을 떠올렸습니다. page에 대해서 @PageInfo라는 애노테이션을 정의하고, 이 애노테이션이 달린 매개변수에 대해서 1.여러가지 전처리 로직들을 수행해주고, 2.View에 자동으로 데이터들을 전달해주는, ArgumentResolver를 만들어주었습니다. Page에 대한 ArgumentResolver 코드는 다음과 같습니다. @RequiredArgsConstructor @Component public class PageRequestArgumentResolver implements HandlerMethodArgumentResolver { // 이 부분이 걱정입니다! ArgumentResolver가 특정 Service클래스에 의존해도 될까요? private final QuestionService questionService; @Override public boolean supportsParameter(MethodParameter parameter) { // @PageInfo를 가지고 있는 경우만 적용. boolean hasPageInfoAnnotation = parameter.hasParameterAnnotation(PageInfo.class); // 타겟변수가 Page 타입인 경우만 적용. boolean isPageClass = parameter.getParameterType().equals(Page.class); return hasPageInfoAnnotation && isPageClass; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { // url에서 page문자열 정보를 추출. String pageString = webRequest.getParameter("page"); // page문자열 정보를 검증 및 생성. Page page = Page.validateAndCreate(pageString, questionService.provideAllQuestionsCount()); // mavContainer에 해당 정보를 넣어서 View로 자동전달. if (mavContainer != null) mavContainer.addAttribute("page", page); // 컨트롤러의 매개변수에 page정보를 바인딩. return page; } } 위 처럼 page정보 뿐 아니라, 다른 자주쓰는 매개변수들에도 ArgumentResolver를 정의하고 적용하면, 아래와 같이 Controller코드가 굉장히 깔끔해진다고 느꼈습니다. @GetMapping("/posts") public String getPosts(@PageInfo Page page, @SortInfo Sort sort, @SearchInfo Search search, ... 등등, Model model) { // 여러가지 전처리 로직들은 ArgumentResolver가 해주기 때문에 코드가 사라집니다. // 비즈니스 로직을 수행합니다. List<Post> posts = postService.getPostList(page, sort, search, ...등등); // View에 필요한 데이터도 ArgumentResolver의 mavContainer를 통해서 자동 전달됩니다. // 컨트롤러에서 관심이 있는 posts 정보만 전달합니다. model.addAttribute("posts", posts); } 그런데 이게 정말 좋은 코드인지 판단이 잘 서질 않습니다. 그리고 ArgumentResolver가 다른 Service 클래스에 의존을 해도 되는지가 의문입니다. AI에게 물어보니, 순환참조 문제가 발생할 수 있기 때문에 웬만해서는 하지 말라고하는데...
[질문 내용] ResponseStatusException에 세개의 파라미터가 담기는데, 세번째 파라미터가 무엇인지 정확히 이해가 가지 않습니다. 실제로 /api/response-status-ex2가 호출 되었을 때, IlleagalArgumentException이 발생한다면, 그 대신에 HttpStatus.NOT_FOUND(404)를 내보내주고, "error.bad"를 메시지로 내보내준다는 뜻이 맞나요?
너무 잦은 질문 죄송합니다. 몇번을 돌려봐도 리턴이 헷갈리네요 재귀함수를 통해 int res = 15 를 구한다음 메인함수에 int sum=nSum(n)에 들어 가는거 같은데 res가 갑자기 nSum에 리턴이 되는걸 어떻게 이해해야 될지 모르겠습니다. 첫번째 호출->자기자신 호출까지는 이해했는데 결과값이 리턴하는 순서? 공식?이 잘 정립이 안되네요 ㅠㅠ
토큰을 통해서 제 고유아이디를 알아내야되는데 반환되는것이 하나도 없음 안녕하세요.. 지금 인프런을 통해서 강의를 듣고있는데, 모르는것이 많아서 댓글 질문 남깁니다.. 참고로 저는 Mac, visual code 사용하고있습니다. 현재, 진행되고있는 부분은 텔레그램봇을 통해서 몇개의 채팅 이후 반환값을 받아서 제 고유아이디를 알아내야되는데, 아래와 같이 코딩을 하여서 실행하였으나, 반환되는것이 하나도 없습니다. 문제가 무엇인지 알려주시면 너무 감사드리겠습니다. import telegram import asyncio bot = telegram.Bot (token='제 토큰') async def main(): updates = await bot.getUpdates() for i in updates: print(i) asyncio.run (main())