로컬에서는 걱정이 없었는데 배포는 안할 거지만 배포 시나리오를 나름 작성해놓고 로컬성능으로 테스트하는게 의미없다고 판단해서 클라우환경에서 해보려고 하는데 비용 발생이 고민입니다. VPC 내에 테스트 하는 서버를 만들고 대상 서버들을 호출하는 방식으로 하면 절감할 수 있을까요? 같은 VPC 내의 다른 가용영역에서는 네트워크 사용비용 자체는소량이라고 알고 있어서 실제 외부에서 들어오는 거랑은 다르겠지만, 이렇게 해볼 생각입니다. 혹시 다른 방법이 있을까 여쭤봅니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] serveltapplication 실행 후 localhost 로 들어간 이후 개발자도구에 들어와도 아무런 변화가 없습니다. 사진첨부합니다
안녕하세요. 저는 안드로이드 개발자로 백엔드와 협업을 하면서 겪게된 문제로 질문을 하려고합니다. 백엔드분이 명세해주신 Swagger를 보면 성공적으로 데이터를 받아 왔을때 { "code": 0, "message": "null", "content": [ { "authorId": 0, "username": "string", "UserProfileImageUrl": "string", "currentJob": "회사원", "grade": "JUNIOR", "profileTitle": "프로필 제목", "introduceFirst": "자기소개 첫째줄", "introduceSecond": "자기소개 둘째줄", "introduceThird": "자기소개 셋째줄" } ] } 이렇게 날라오는데 혹시나 어떠한 오류가 발생했을땐 { "code": 401, "message": "Failed JWT verification!", "content": "UNAUTHORIZED" } 이렇게 에러코드와 메세지를 주면서 content에서도 어떤 문제가 생겼지, 문자열로 변환이 되어서 날라옵니다. 즉, content의 타입이 객체에서 문자열로 바뀌게 됩니다. 저의 코드는 이러합니다. data class ResponseDto<T>( @SerializedName("code") val code: Int, @SerializedName("message") val message: String?, @SerializedName("content") val content: T? ) data class AuthorResponseDto( @SerializedName("authorId") val authorId: Int, @SerializedName("userName") val userName: String, @SerializedName("userProfileImageUrl") val userProfileImageUrl: String, @SerializedName("currentJob") val currentJob: String, @SerializedName("grade") val grade: String, @SerializedName("profileFirst") val profileFirst: String, @SerializedName("profileSecond") val profileSecond: String, @SerializedName("profileThird") val profileThird: String ) interface WriterApiService { @GET("api/v1/authors") @Headers("Authorization: Bearer ${Constants.USER_ACCESS_TOKEN}") suspend fun authors( @Query("lastAuthorId") lastAuthorId: Int, @Query("specialtyFilter") specialtyFilter: String ): ResponseDto<AuthorResponseDto> } 현재 ResponseDto DataClass는 어떠한 API를 쓸때마다 계속 사용하고있어 제네릭타입으로 사용하고 있었습니다. 그러나 에러가 발생했을때 타입 불일치로 ( content는 에러 발생시 String으로만 값을 주고 있음 ) 백엔드에서 보내주는 에러 메세지와 에러 코드 자체를 볼 수 가없는 상황입니다 ㅠ 백엔드분께 이에대해 문제를 제기해보니, 이건 안드로이드 개발자인 제가 이 명세서에 맞게 분기처리를 해줘야 한다고합니다. iOS 개발자님께 이 분기처리를 어떻게 해주었냐고 여쭈어 보았더니 이런 문제를 겪어 본적이 없어 해결방안을 얻지 못하였습니다.. 하지만 약간의 의구심과 해결 방법을 알고싶습니다 ㅠ 백엔드와 협업할때 당연히 발생하는 문제인지? 어차피 에러 코드와 메세지를 보내주는데 굳이 객체를 담고 있는 content를 에러메세지 형식으로 보내는것이 맞는지? 해당 문제를 어떻게 해결하면 좋을지.. 안드로이드에서 처리를 해야한다면 각 타입에 따라 분기 처리를 해줘야 하는지? 이건 제네릭 타입으로 하면 안되는건가..? 분기 처리 문제가 아니라 애초에 제가 코드상으로 타입이라던지 반환값등을 잘못 설정 하고 있는건지 이 문제로 3일간 고민해보고 gpt, 린튼등 ChatBot과 레퍼런스등을 참고하고있는데 확실한 답을 찾기가 어렵습니다.. 도움 요청합니다!!!!
MappingClassController에서 구현한 GetMapping은 /mapping/users + GET으로 호출합니다. @GetMapping("/mapping/users") public String user() { return "get users"; } 이 때, 앞서 구현한 MappingController에서 구현한 @GetMapping("/mapping/{userId}") public String mappingPath(@PathVariable("userId") String data) { log.info("mappingPath userId={}", data); return "ok"; } 위 코드는 /mapping/{userId} + GET으로 호출합니다. 위 상황에서, /mapping/users를 GET으로 조회할 경우 MappingClassController가 호출됩니다. 제가 궁금한 것은, 두 컨트롤러 사이에 우선순위가 존재하나요? 그렇지 않다면 Spring은 같은 문자열인 users가 {userId}가 아닌 것을 어떻게 구별하나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 안녕하세요. public void run() { while (!Thread.interrupted()) { if (jobQueue.isEmpty()) { Thread.yield(); continue; } ... } 위에 코드에서 Yield 를 사용하면 그 쓰레드가 양보를 해서 다시 스케쥴러로 들어간다고 하셨는데, 그러면 Thread.yield(); 가 실행이 된 후에, 다시 CPU 가 이 쓰레드를 실행시키기 전까지 그 다음 줄의 continue 코드는 실행되지 않고 멈춰있는 상태라고 생각하면 될까요? 그렇다면 쓰레드는 CPU 가 다시 실행시킬 시점에 몇번째 라인까지 실행을 했는지 기억하고 있다가 CPU 에게 알려주는 건가요? 감사합니다.
안녕하세요, React Navigation 강의를 수강하다가 오류가 해결되지 않아서 질문드립니다. expo를 통해 다음과 같이 index.js에 React Navigation을 적용했습니다. import { store } from "@/redux/store"; import MainScreen from "./screens/MainScreen"; import { Provider } from "react-redux"; import { NavigationContainer } from "@react-navigation/native"; import { createNativeStackNavigator } from "@react-navigation/native-stack"; import LoginScreen from "./screens/LoginScreen"; export default function HomeScreen() { const Stack = createNativeStackNavigator(); return ( <Provider store={store}> <NavigationContainer> <Stack.Navigator> <Stack.Screen name="Main" component={MainScreen} /> <Stack.Screen name="Login" component={LoginScreen} />{" "} </Stack.Navigator> </NavigationContainer> </Provider> ); } 그러나 다음과 같은 오류가 뜨며 빈화면만 보이더라구요ㅠ Error: Looks like you have nested a 'NavigationContainer' inside another. Normally you need only one container at the root of the app, so this was probably an error. If this was intentional, pass 'independent={true}' explicitly. Note that this will make the child navigators disconnected from the parent and you won't be able to navigate between them. 찾아보니 NavigationContainer가 중첩되었다는 것 같은데, 저는 계속해서 그대로 강의를 따라가고 있었고, 따로 NavigationContainer를 적용한 파일이 존재하지 않습니다 ㅠ 다음 속성을 추가해도 오류가 해결되지 않습니다 ㅠ 아마 어디선가 부모에서 NavigationContainer가 적용된 것 같은데 찾을 수가 없네요 ㅠㅠ independent={true} 조금 더 찾아보니 expo-router랑 충돌이 난 거일 수도 있다는데 정확하게 모르겠네요 ㅠㅠ
1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] DataSourceUtils.getConnection(dataSource) 를 사용하면 트랜잭션 동기화 매니저가 관리하는 커넥션이 없는 경우 새로운 커넥션을 생성해서 반환한다 라고 되어 있습니다. 이때 dataSource의 구현체가 커넥션 풀링을 사용하는 구현체 (예를 들면 실습했던 HikariDataSource) 라면 미리 커넥션을 생성해둔 후 커넥션 풀에 보관해두고, 사용 시에 조회해 오는 것으로 알고있었습니다. 그렇다면 이 때 위의 굵은 글씨 내용 중 새로운 커넥션을 생성한다는 것은 커넥션 풀에서 새로운 커넥션을 조회해오는 것 인가요 아니면 아예 새로운 커넥션을 생성하는 것 인가요?