학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @GenerateValue(strategy=GenerationType.IDENTITY) 일 경우에만 pk값을 알 수 없어서 commit 전에 insert 쿼리를 날리는 것은 이해 했는데 commit 시점에 진행될 작업들이 매번 flush를 호출해서 영속성 컨텍스트의 데이터가 commit 전에도 지속적으로 디비에 반영이 되는 걸까요 ?? 아니면 pk 값을 알기 위한게 목적이기 때문에 persist의 경우만 예외적인 건가요 ???
교수님 조언해주신 덕분에 잘해결하였습니다. 진심으로 감사드립니다. 혹시 다른 질문 하나만 드려도 될까요? Rcmdr에서 logistic regression 을 하려고 하는데 본 질문에 첨부되어있는 사진table 1처럼 multivariate logistic regression 에서 Adult (1)/ pediatric (2)로 나타낼수 있는 방법이 있을까요? 고진선처 부탁드립니다! 진심으로 감사드립니다!
아무것도 잠기지 않는다는 말(a[][]가 모두 101 이상인 경우)이랑 비가 안오는거(d=0)랑은 다르잖아요 무조건 비가 오는 게(1<=d<=100) 아닌가요? 비가 안 올 수 도 있는 게 상식이니까 그런가요 문제 설명중 노트에 힌트라고 아무도 안 잠길 수 있다 라고 적어둔게 전혀 도움이 안 되는 문제 같네요 대놓고 비가 안 올 수 있다고 해야 하지 않나요
안녕하세요. 우빈님! 캐시를 처음 적용해 보아서 캐시를 포함한 비지니스 로직을 어떻게 작성하는 것이 좋을까? 에 대한 고민이 있어 글 남깁니다...! AS IS @Transactional public UosRestaurantMenuResponse getUosRestaurantMenu(UosRestaurantInput input) { // 학식 조회 UosRestaurant findUosRestaurant = uosRestaurantRepository.findByCrawlingDateAndRestaurantNameAndMealType(input.getDate(), input.getRestaurantName(), input.getMealType()) .orElseThrow(() -> new UosRestaurantMenuException(UosRestaurantMenuException.NOT_FOUND_MENU)); // 조회수 증가 findUosRestaurant.increaseView(); return UosRestaurantMenuResponse.of(findUosRestaurant); } TO BE @Transactional public UosRestaurantMenuResponse getUosRestaurantMenu(UosRestaurantInput input) { // 캐시에서 학식 조회 Optional<CacheUosRestaurant> cacheUosRestaurant = cacheUosRestaurantRepository .findById(CacheUosRestaurant.createId(input)); // 캐시에 학식이 존재하면 if(cacheUosRestaurant.isPresent()) { // 조회수 증가 cacheUosRestaurant.get().increaseView(); CacheUosRestaurant saveCacheRestaurant = cacheUosRestaurantRepository.save(cacheUosRestaurant.get()); return UosRestaurantMenuResponse.of(saveCacheRestaurant); } // 학식 조회 UosRestaurant findUosRestaurant = uosRestaurantRepository.findByCrawlingDateAndRestaurantNameAndMealType(input.getDate(), input.getRestaurantName(), input.getMealType()) .orElseThrow(() -> new UosRestaurantMenuException(UosRestaurantMenuException.NOT_FOUND_MENU)); // 조회수 증가 findUosRestaurant.increaseView(); // 캐시에 저장 cacheUosRestaurantRepository.save(CacheUosRestaurant.of(findUosRestaurant)); return UosRestaurantMenuResponse.of(findUosRestaurant); } 캐시에 대한 로직이 추가될 때 위와 같이 하나의 서비스 레이어 메소드에 작성하는 것이 좋은걸까요? 캐시에 대한 테스트 코드를 작성할 때 캐시를 사용할 때와 캐시를 사용하지 않을 때를 상황을 구분하여 작성 하는 것이 맞을까요..?(그것이 좋겠죠....? -> 기존 비지니스 로직 테스트 코드를 수정하는것이 최선일까? 에대한 의문이 들어서 질문 드렸습니다.) 스프링에서 CacheManager를 이용하여 @Cacheable 을 활용하는 방법이 있는데, CrudRepository를 사용하는 방법과 CacheManager를 사용하는 방법 중 어느 것이 더 좋은(?) 방법 인지 말씀주시면 감사하겠습니다. 4. 마지막으로 캐시를 사용할 때 깔끔하게 비지니스 로직을 작성할 수 있는 노하우 말씀주시면 감사하겠습니다.!!! 다소 질문이 난해한데 너그럽게 이해해주시면 감사하겠습니다.ㅠㅠ 좋은 강의 잘 듣고 있습니다. 다음 강의도 기대할께요^^!! 감사합니다.
[질문 내용] 강의를 보다가 의문점이 들었습니다. " 체크 예외인 Exception과 그 하위 예외가 발생하면 트랜잭션을 커밋한다. " 의 경우 RuntimeException도 Exception의 하위 예외인데 제가 이해한것이 맞다면 "체크 예외인 Exception과 RuntimeException를 제외한 하위 예외가 발생하면 트랜잭션을 커밋한다." 가 맞나요?
0.0.0.0~127.255.255.255는 넷id 앞 1개 쓰고 128.0.0.0~191.255.255255 넷id 앞 2개 쓰고 그래서 넷id 1자리(?) 쓰는 0.0.0.0은 있어도 넷id 2자리(?) 쓰는 0.0.0.0은 없으니까 ip는 모두 서로 구별 되는 거죠? 질문이 이상하긴 한데
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용] https://drive.google.com/file/d/1mu_pXERJk_lZC5yprE5sVQWm1RfNpIcp/view?usp=drive_link 회원 목록이나 회원 등록 페이지를 들어가면 위와 같은 에러가 뜹니다. 이유를 못 찾겠어서 질문 글 남깁니다.
안녕하세요 선생님. 위와같이 실행했을때 터미널에 나오는 문구가 선생님과 차이가 좀 있는데 이유 알수있을까요? 파워쉘에서 cmd로 변경한거같은데 문구가 다르네요(경로, 파일명은 당연히 다르니까 다른걸 알겠는데 ps나 뭐 이런게 선생님 설정과 다른걸까요?) 추가질문이 있습니다. 1) 위에 실행버튼(우측 상단 삼각형)을 누르는것 말고 실행 방법이 F5가 있는것같아서 F5눌러서 실행하고 있는데 터미널에 나오는 문구가 또 다르네요 (이렇게 나오고있습니다) 실행버튼과 F5의 차이가 있나요? 3) 쉬프트+엔터 실행 코드 전체를 드레그 한 후 '쉬프트+엔터'로 실행하면 터미널이 아래와같은데, 이는 어떤차이 인가요? 결과가 달라지는걸까요? 다양한 실행방법이 있는것같은데 그 차이가 궁금합니다 선생님!ㅜㅜ
안녕하세요 큰돌님. 120p string으로 이루어진 배열을 정렬한 코드에 대해 질문드립니다. 제가 이해한 바로는 compare라는 함수는 문자열의 길이를 비교하는 함수입니다. if(a.size() == b.size()) return a < b; 는 문자열의 길이가 같으면 a b 크기를 비교합니다. 이 때 비교하는 기준은 아스키 코드입니다. 만약 문자열의 길이가 같지 않으면 크기를 비교해서(아스키코드 기준) 바로 boolean 값을 반환합니다. 111은 222와 아스키코드적으로 비교를 하게되는데.. 이때 1의 아스키코드는 49이고 2의 아스키 코드는 50입니다. 111이 a, 222가 b 이니까 a < b 는 T가 됩니다. 111은 이제 33과 비교를 하게 됩니다. if문에 해당이 되지 않기때문에 바로 return a.size() < b.size() 를 하게 됩니다. a가 111, 33이 b이고 a의 size는 3, b의 size는 2입니다. 결과적으로 F가 됩니다. 여기서 드리고 싶은 질문은 F가 되면 순서를 바꾸는건가요? 그렇담 왜 33,222,111 가 되지 않는건가요? 111과 33은 아스키코드순으로 비교할 필요가 없지 않나요? 자릿수가 다르니까 a < b를 할 필요가 없을텐데.. 왜 교안에는 아스키코드순으로 비교한다는 내용이 실려져 있는건가요? 없어도 되는 내용인것 같은데…. 실려져 있어서 제가 잘못 알고있는건지 너무 헷갈립니다…
디지털포렌식 입문자를 위한 디지털포렌식 전문가 2급 실기 시험대비 강의(Encase/Autopsy)
안녕하세요! 얼추 큰틀은 잡고 공부를 하던 중 궁금한 점이 있어 질문드립니다! 한국포렌식학회에서 제공하는 실습파일(3.3)에서 매체정보에 대해 기술하는 문제가 있습니다. 섹터 당 용량, 클러스터 당 섹터 수 등은 전부다 배운대로 하니 잘 맞는데 유독 디스크 전체 용량만 숫자가 계속 다르더라구요.. 총 용량(디스크 전체 용량) = NTFS = 총 섹터수 X 섹터당 용량 - 클러스터 용량(크기) FAT32 = 총 섹터수 X 섹터당 용량 - (4096X1024) 위의 공식이 배운 내용인데 이대로 계산하면 숫자가 조금씩 달라서 왜 그런지 궁금하여 질문남깁니다! 그리고 혹시 한국포렌식학회에서 제공하는 실습파일(3.3) 풀어보셨었는지 모르겠는데 위의 실습파일을 분석하던 중 0608_.hwp 와 923.hwp 이 두개의 파일 내부의 내용을 확인할 수가 없더라구요..(삭제된 파일이라 추출 후 헤더도 맞고 확장자도 맞게 열어도..) 이런경우 내부의 내용을 어떻게 확인하는지 알려주실 수 있을까요?(질문이 총 두가지인데 답변 남겨주시면 너무 감사하겠습니다!)
안녕하세요! 강의 넘 잘 듣고 있습니다. 하루만에 거의 다들었네요,,ㅋㅋ 질문이 있습니다 혹시 dfs를 호출할 때 이런 '-'나 '|' 같은게 나오면 매개변수로 '-' 나 '|' 를 추가해서 dfs함수에 넘겨도 되는건가요? 저는 이렇게 할 때가 많은데 이렇게 하지 않고 오히려 dfs 함수 안에서 해결해주는 게 더 간단한 것 같기도 해서요.. 보통은 어떻게 하시나요? 전 4방 탐색을 하면서 이렇게 풀었었네요,, 한 방향만 탐색하는 팁 배워갑니다 ㅎㅎ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int[] dr = {-1, 1, 0, 0}; static int[] dc = {0, 0, -1, 1}; static int N, M; static char[][] arr; static int ans; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); arr = new char[N+2][M+2]; for (int i = 1; i <= N; i++) { String str = br.readLine(); for (int j = 1; j <= M; j++) { arr[i][j] = str.charAt(j-1); } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if (arr[i][j] == '|') { dfs(i, j, '|'); ans++; } else if (arr[i][j] == '-'){ dfs(i, j, '-'); ans++; } } } System.out.println(ans); } private static void dfs(int r, int c, char shape) { int start = 0; int end = 0; if (shape == '|') { start = 0; end = 1; } else if (shape == '-'){ start = 2; end = 3; } arr[r][c] = '1'; for (int d = start; d <= end; d++) { int nr = r + dr[d]; int nc = c + dc[d]; if(arr[nr][nc] == shape) { arr[nr][nc] = '1'; dfs(nr, nc, shape); } } } }
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 백기선님 수업을 잘 듣고 있습니다. 제 생각에 간단한(?) 오타같은게 있는거 같아서 제보드립니다. 혹시 오타가 아니라면 제가 잘못 이해한 부분을 말씀 부탁드리겠습니다. 옵저버 패턴 3부 - 1:56초쯤 unregister 를 subject가 "디자인패턴"인 것에 대해서 user2 를 해지 해주었는데요. 이미 user 2는 오징어게임에만 등록중입니다. 그래서 결과값도 user2 가 보낸 "옵저버 패턴 장, 단점 보는 중" 이 user1한테 가서 출력된거 같습니다. 아마 user1을 해지하거나 user2를 오징어게임에 대해서 해지하려고 하지 않았나 싶습니다..