바로 만들어보기: 이미지 갤러리 화면 구성하기2 강의 12:04~12:22, 해당 코드 기반 질문입니다! Q1. "이 클래스(MyHomePage)가 사라지면" 이라는 설명이 있는데, 앱 종료시 이외에 이 클래스가 사라지는 시점 은 언제언제인가요?! Q2. 반대로, 위 클래스의 인스턴스(?)가 생성되는 시점은 홈 화면에 접속할 때마다 인가요?.?
강사님 refreshToken 이해가 되지않아서 인데요. 제가 52강의 까지 보고 했는데요, 이사진은 기존토큰이 없을때 뜨는 restore try~ catch문에서 나오는 Error 입니다. 저는 refreshToken을 localStorage에 값이 있을때로 했거든여, 제가 구현하고 싶은거는 사용자가 해당 시간때가 끝나면 알아서 자동으로 해주는걸로 했는데 이렇게 해도 되는지 여쭤봅니다... 강의에서 볼때는 버튼을 누르고 새롭게 갱신하는걸로 해가지고요 뭔가 로그인, 로그아웃 새로고침 여기서 막히네여 ㅠ,
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 강의 들으면서 혼자 이것저것 만들어보면서 이해가 안가는부분이있어서 관련 강의에 질문남깁니다. 스프링 aop를 사용해서 로깅 기능을 만들어보고있는중에 막히는 부분이있는데. joinpoint가 실행되고 정상 흐름일때,예외 상황일때 로그 저장 기능을 만들고있습니다. 코드를 알려드리면 @Around(pointcut) public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable { try { result = joinPoint.proceed(); // @Transactional } catch { logService.saveLog(args); // @Transactional throw e; } logService.saveLog(args); return result; } 간략히 이런식 구성돼있습니다. joinpoint가 실행되는 매서드에는 @Transactional이 붙어있어 트랜잭션이 실행되고 logService.saveLog에도 @Transactional이 붙어있어 트랜잭션이 실행됩니다. 여기서 문제가 제가 이해하기론 트랜잭션안에서 트랜잭션이 실행될때 내부 트랜잭션, 외부 트랜잭션으로 나뉘고 이것들을 통합하는 하나의 물리트랜잭션으로 된다고 이해했는데, 위 코드의 상황에는 joinpoint.proceed에서 생성된 트랜잭션 안에서 또 다른 트랜잭션이 생성된게 아닌 joinpoint.proceed가 완전히 수행된후 logService.saveLog로 새로운 트랜잭션이 시작된거같은데 이때도 joinpoint.proceed에서 예외가 발생하면 logService.saveLog도 커밋이 되지 않더라구요. logService.saveLog의 @Transactional의 속성을 Requires_new로 하면 예외 상황에서도 잘 저장이되구요. 내부 트랜잭션 외부 트랜잭션의 구분이 하나의 @Transactional과 같은 트랜잭션 안에서 또다른 트랜잭션이 생성될때만 구분되는게아니라 사용자 요청이 들어오고 응답이 나가기 전까지의 모든 트랜잭션이 연관되는건지 궁금합니다. 아니면 애초에 제가 잘못 하고있는게 있는걸까요..?
[질문 내용] 강의 1분 24초쯤에 말씀하신 com.h2database:h2 - 데이터베이스가 제공하는 클라이언트 이 부분이 잘 이해가 안가서 질문 드립니다. 1) 우선 제가 클라이언트-서버 개념만 알고 있는데, 클라이언트가 서버에 있는 데이터베이스에 접근해서 데이터들을 요청해서 가져가는 걸로 알고 있는데 "데이터베이스가 제공하는 클라이언트"라는 말이 1차적으로 이해가 가지 않습니다. 2) 두 번째로는 이 구문 자체가 의미하는 거 자체가 뭔지 궁금합니다. runtimeOnly 'com.h2database:h2'
질문글은 아니지만 혹시 저처럼 AWS랑 안 친하신 분들을 위해 과금 조심하시라고 올립니다. 강의 내용에도 설명 해주시지만, 고정IP(아마존에서는 Elastic IP Addresses, 탄력적 IP라고 부르네요)를 생성하고 인스턴스를 연결 안 하거나, 연결된 인스턴스가 running상태가 아니면 하루에 0.12USD정도 나가는 것 같네요. (저는 인스턴스에 연결만 해두면 되는 줄 알고 연결된 인스턴스 꺼놨다가 요금 나갔네요ㅜ.. 수업료가 그나마 싸서 다행입니다. ) AWS 강의까지 진행하시는 분들은 참고하셔서 진행하시면 좋을 것 같아요!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 안녕하세요, 영한님! 먼저 이렇게 좋은 강의를 들을 수 있게 되어서 너무 기쁘고 감사드립니다. 먼저 저는 SpringBoot 3.0.5 버전 사용중입니다. 그렇기 때문에 어쩔 수 없이 @RequestMapping으론 컴포넌트 스캔 대상이 되지 않기 때문에 V2 컨트롤러에는 @RestController가 붙어있습니다. 구체 클래스 기반 프록시 V2에 적용할 때, 프록시 컨트롤러를 빈으로 등록하려고 하니 아래처럼 빈이 중복으로 등록된다고 오류가 발생하였습니다. *************************** APPLICATION FAILED TO START *************************** Description: The bean 'orderControllerV2', defined in class path resource [me/iseunghan/hello/proxy/app/v2/concrete_proxy/ConcreteProxyConfig.class], could not be registered. A bean with that name has already been defined in file [/Users/iseunghan/workspaces/study/lecture-spring-advanced/proxy/build/classes/java/main/me/iseunghan/hello/proxy/app/v2/OrderControllerV2.class] and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true Process finished with exit code 1 그래서 로그에 친절하게 나와있는대로 application.yaml에 아래 설정을 추가하니 정상적으로 실행 및 테스트가 되었습니다. application.yaml spring.main.allow-bean-definition-overriding: true 혹시 이와 같은 방법 이외에는 다른 방법이 없을지 여쭤보고 싶습니다..! 감사합니다.
RDS Replication는 읽기만 가능하고 복제본이 생성되면 해당 복제본 마다 엔드포인트가 생성되는 걸로 알고 있는데 그럼 Insert할때는 original 엔드포인트에만 접근해서 처리하는 것이 맞죠? 그리고 Insert 트래픽과 read 트래픽을 분간하여 insert 트래픽인 경우 original 엔드포인트에만 연결된 EC2 인스턴스에만 트래픽을 보내도록 ELB로 설정가능한가요?
같은 코드인데, 한번은 array(배열)로, 한번은 vector로 두었습니다. array로 했을 때는 4번예제에서 time_limit이 났는데 vector로 했을 때는 다 success였습니다. 같은 경우엔 array가 더 빠른거 아닌가요? 왜 이러죠 #include <iostream> #include <vector> int main(void) { int n, k, max, sum = 0; std::vector<int> tem(100001); scanf("%d %d", &n, &k); tem[0] = 0; for (int i = 1; i <= n; i++) { scanf("%d", &tem[i]); sum += tem[i]; if (i == k) max = sum; else if (i >= k) { sum -= tem[i - k]; if (sum > max) max = sum; } } printf("%d", max); return 0; } #include <iostream> int main(void) { int n, k, max, sum = 0; int tem[100001]; freopen("input.txt", "rd", stdin); scanf("%d %d", &n, &k); tem[0] = 0; for (int i = 1; i <= n; i++) { scanf("%d", &tem[i]); sum += tem[i]; if (i == k) max = sum; else if (i >= k) { sum -= tem[i - k]; if (sum > max) max = sum; } } printf("%d", max); return 0; }
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터와 배열 기반 문자열과 둘의 차이에 대해, 제가 이해한 것이 맞는지 확인 해 주실 수 있으신가요? 항상 감사드립니다. [ 포인터 vs 배열 ] 포인터를 이용한 문자열 const char test1 = “Hello World”; * “Hello World”는 데이터 영역(.rodata)에 배열의 형태로 할당된다. 포인터 test1은 원본 배열 첫 번째 요소인 ‘H’의 주소를 가진다. .rodata에 존재하므로 문자열의 각 요소를 수정할 수 없다. 배열을 이용한 문자열 char test2[ ] = “Hello World”; 미리 데이터 영역에 할당된 “Hello World”의 요소를 각각 복사하여 새로운 배열이 할당된다. 배열 이름 test2는 복사된 배열 첫 번째 요소인 ‘H’의 주소를 가진다. 복사된 배열이므로 문자열의 각 요소를 수정할 수 있다. 결론, 포인터와 배열의 차이 배열과 포인터는 본질적으로 다르다. 배열의 이름이 포인터처럼 사용되지만, 포인터가 오직 어떠한 대상을 가리키는 고정 크기의 주소만 가지고 있는 반면, 배열은 이름이 포인터로 동작할 수 있을 뿐 본질은 변수의 모임이라는 여러 바구니로 이루어져 있기 때문이다. 따라서 배열의 크기는 포인터와 달리 타입과 길이에 의해 달라진다.
MemberServiceV3_3Test에서 다음과 같이 TestConfig에 빈을 등록해주었습니다. @Bean PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } 하지만 transactionManager를 주석처리를 하고 다시 돌려보니 정상적으로 실행되는 것을 확인했습니다. 트랜잭션 AOP는 스프링 빈에 등록된 트랜잭션 매니저를 찾아서 사용한다고하는데 주석 처리를 했음에도 작동이 왜 되는 걸까요?
특정 라이브러리의 타입이 없다고 할 경우.. 직접 declare module chart.js로 하게 되면 내부의 구조를 모를 것 같은데요 타입 파일이 없어서 개인이 대응해서 만든다고 할 경우 구조를 일일이 추가하지 않으면 타입의 구체적인 형태 선언하지 않았으니.. 힌트들이 나오지 않을 건데요.. 이럴 땐 그냥 없는 체로(?) 써야 하는건지 다른 방식으로 대응해 가는 방법이 있는지 궁금합니다. 예시) declare module 'chart.js' 위 처럼 선언 했는데 내부 내용을 선언하지 않아서 적당한 힌트가 없는 경우 어떻게 해야 하는지에 대한 문의 입니다 글로 쓰기 어렵네요^^;