#android

질문 86
해시태그 없이 키워드만 일치하는 질문은 개수에 포함되지 않아요.

2년 전 · 익명 님의 새로운 답변

해당 스프링부트 코드 해석 좀 부탁드립니다..

안드로이드에쓸 스프링부트 코드를 따왔는데 제가 잘이해사 안되서 상세히 알려주실 선배님조언 구합니다 package com.example.teamproject import MyAdapter import android.content.Context import android.content.Intent import android.icu.lang.UCharacter.GraphemeClusterBreak.L import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import com.example.teamproject.databinding.ActivitySearchBinding import com.example.teamproject.login.LoginActivity import com.example.teamproject.model.RstrModel import com.example.teamproject.review.ReviewActivity import com.google.android.material.bottomnavigation.BottomNavigationView import retrofit2.Call import retrofit2.Callback import retrofit2.Response class SearchActivity : AppCompatActivity() { lateinit var binding: ActivitySearchBinding private lateinit var adapter: MyAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySearchBinding.inflate(layoutInflater) setContentView(binding.root) setSupportActionBar(binding.toolbar) supportActionBar?.setDisplayShowTitleEnabled(false) binding.toolbar.title = "검색" val loginSharedPref = applicationContext.getSharedPreferences("login_prof", Context.MODE_PRIVATE) val userId = loginSharedPref.getString("m_id", null) val userService = (applicationContext as MyApplication).userService // 하단바 초기값 설정 val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottommenu) bottomNavigationView.selectedItemId = R.id.second_tab // 하단바 선택시 이벤티 binding.bottommenu.setOnItemSelectedListener {item -> when(item.itemId) { R.id.first_tab -> { val intent = Intent(this@SearchActivity, MainActivity::class.java) startActivity(intent) } R.id.third_tab -> { val intent = Intent(this@SearchActivity, ReviewActivity::class.java) startActivity(intent) } R.id.fourth_tab -> { if ( userId == null){ val intent = Intent(this@SearchActivity, LoginActivity::class.java) startActivity(intent) } else { val intent = Intent(this@SearchActivity, MyDining::class.java) startActivity(intent) } } R.id.fifth_tab -> { if ( userId == null){ val intent = Intent(this@SearchActivity, LoginActivity::class.java) startActivity(intent) } else { val intent = Intent(this@SearchActivity, MyProfilePage::class.java) startActivity(intent) } } } true } binding.searchBtn.setOnClickListener { var rstr_nm = binding.searchText.text.toString() val getnamecount = userService.getNamecount(rstr_nm) getnamecount.enqueue(object: Callback<Int>{ override fun onResponse(call: Call<Int>, response: Response<Int>) { if ( response.isSuccessful ){ val ncount = response.body() if (ncount != null) { if ( ncount >= 1){ val getname = userService.getName(rstr_nm) getname.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val rstrlist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, rstrlist) binding.recyclerView.addItemDecoration( DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL) ) } } override fun onFailure( call: Call<List<RstrModel>>, t: Throwable ) { call.cancel() } }) } else { Toast.makeText(this@SearchActivity, "검색 결과가 없습니다!", Toast.LENGTH_SHORT).show() } } } } override fun onFailure(call: Call<Int>, t: Throwable) { call.cancel() } }) } binding.area1.setOnClickListener { val rstr_addr = binding.area1.text.toString() val getarea = userService.getArea(rstr_addr) getarea.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.area2.setOnClickListener { val rstr_addr = binding.area2.text.toString() val getarea = userService.getArea(rstr_addr) getarea.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.area3.setOnClickListener { val rstr_addr = binding.area3.text.toString() val getarea = userService.getArea(rstr_addr) getarea.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.area4.setOnClickListener { val rstr_addr = binding.area4.text.toString() val getarea = userService.getArea(rstr_addr) getarea.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.area5.setOnClickListener { val rstr_addr = binding.area5.text.toString() val getarea = userService.getArea(rstr_addr) getarea.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.area6.setOnClickListener { val rstr_addr = binding.area6.text.toString() val getarea = userService.getArea(rstr_addr) getarea.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.area7.setOnClickListener { val rstr_addr = binding.area7.text.toString() val getarea = userService.getArea(rstr_addr) getarea.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.type1.setOnClickListener { val rstr_list = binding.type1.text.toString() val gettype = userService.getType(rstr_list) gettype.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.type2.setOnClickListener { val rstr_list = binding.type2.text.toString() val gettype = userService.getType(rstr_list) gettype.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.type3.setOnClickListener { val rstr_list = binding.type3.text.toString() val gettype = userService.getType(rstr_list) gettype.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.type4.setOnClickListener { val rstr_list = binding.type4.text.toString() val gettype = userService.getType(rstr_list) gettype.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.type5.setOnClickListener { val rstr_list = binding.type5.text.toString() val gettype = userService.getType(rstr_list) gettype.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } binding.type6.setOnClickListener { val rstr_list = binding.type6.text.toString() val gettype = userService.getType(rstr_list) gettype.enqueue(object: Callback<List<RstrModel>>{ override fun onResponse( call: Call<List<RstrModel>>, response: Response<List<RstrModel>> ) { if ( response.isSuccessful ){ val arealist = response.body() binding.recyclerView.adapter = MyAdapter(this@SearchActivity, arealist) binding.recyclerView.addItemDecoration(DividerItemDecoration(this@SearchActivity, LinearLayoutManager.VERTICAL)) } } override fun onFailure(call: Call<List<RstrModel>>, t: Throwable) { call.cancel() } }) } } }

개발자

#스프링부트

#안드롱디ㅡ

#안드로이드

#spring\

#spring

답변 1

댓글 0

보충이 필요해요 3

조회 181

6달 전 · 노원재 님의 답변 업데이트

ReactNative ios build 에러 3일째 해결을 못했습니다.

시뮬레이션을 실행하려고 해도 스크립트 문제, iPhone 버전 범위 문제, 시뮬레이터 문제가 계속 발생합니다. 어떤 도움이라도 감사합니다. ReactNative를 처음 접했습니다. 저희 팀에서 저를 도울 수 있는 사람이 없습니다. #프로젝트 환경 mac M2 ruby -v ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23] node -v v20.10.0 pod --version 1.15.2 package.json { "name": "labts", "version": "0.0.1", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", "lint": "eslint .", "start": "react-native start", "test": "jest" }, "dependencies": { "@react-native-community/async-storage": "^1.12.1", "@react-native-community/cli": "13.6.9", "@react-navigation/bottom-tabs": "^6.6.0", "@react-navigation/native": "^6.1.17", "@react-navigation/native-stack": "^6.10.0", "@tanstack/react-query": "^5.51.5", "@types/react-native-vector-icons": "^6.4.18", "axios": "^1.7.2", "date-fns": "^3.6.0", "immer": "^10.1.1", "react": "18.2.0", "react-native": "0.74.3", "react-native-calendars": "^1.1305.0", "react-native-date-picker": "^5.0.4", "react-native-dotenv": "^3.4.11", "react-native-get-random-values": "^1.11.0", "react-native-image-crop-picker": "^0.41.2", "react-native-image-zoom-viewer": "^3.0.1", "react-native-paper": "^5.12.3", "react-native-permissions": "^4.1.5", "react-native-safe-area-context": "^4.10.8", "react-native-screens": "^3.32.0", "react-native-splash-screen": "^3.3.0", "react-native-tab-view": "^3.5.2", "react-native-vector-icons": "^10.1.0", "react-native-vision-camera": "^4.5.1", "uuid": "^10.0.0", "yarn": "^1.22.22" }, "devDependencies": { "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "@react-native/babel-preset": "0.74.85", "@react-native/eslint-config": "0.74.85", "@react-native/metro-config": "0.74.85", "@react-native/typescript-config": "0.74.85", "@types/react": "^18.2.6", "@types/react-native-dotenv": "^0.2.2", "@types/react-test-renderer": "^18.0.0", "babel-jest": "^29.6.3", "babel-plugin-module-resolver": "^5.0.2", "eslint": "^8.19.0", "jest": "^29.6.3", "prettier": "2.8.8", "react-test-renderer": "18.2.0", "typescript": "5.0.4" }, "engines": { "node": ">=18" } } PodFile require Pod::Executable.execute_command('node', ['-p', 'require.resolve( "react-native/scripts/react_native_pods.rb", {paths: [process.argv[1]]}, )', __dir__]).strip platform :ios, '12.0' use_frameworks! #use_modular_headers! prepare_react_native_project! linkage = ENV['USE_FRAMEWORKS'] if linkage != nil Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green use_frameworks! :linkage => linkage.to_sym end target 'nexlabts' do config = use_native_modules! use_react_native!( :path => config[:reactNativePath], # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) target 'nexlabtsTests' do inherit! :complete # Pods for testing end post_install do |installer| # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 react_native_post_install( installer, config[:reactNativePath], :mac_catalyst_enabled => false, # :ccache_enabled => true ) end end 제가 아래 에러 3가지에 대해 제가 해본 방법들입니다. 1. node 재설치 node_module 폴더 삭제, package-rock.json 삭제 후 재설치 npm install --legacy-peer-deps yarn install 2. Xcode가 node 읽을 수 있도록 설정 sudo ln -s "$(which node)" /usr/local/bin/node 3. Podfile 내 platform 설정 수정 platform :ios, '12.0' or platform :ios, '14.0' 4. Pods 재설치 rm -rf ~/Library/Developer/Xcode/DerivedData or rm -rf ~/Library/Developer/Xcode/DerivedData/* rm -rf Pods rm Podfile.lock pod install --repo-update Xcode \> Product \> Clean Build Folder. cd ./ios pod cache clean -all pod install --repo-update cd ../ npx react-native run-ios --no-packager --simulator="iPhone 15" or npx react-native run-ios --simulator="iPhone 15" or yarn start > i(run ios) Err 1. cocoaPods 설치할 때 [!] CocoaPods could not find compatible versions for pod "React-RuntimeHermes": In Podfile: React-RuntimeHermes (from ../node_modules/react-native/ReactCommon/react/runtime) Specs satisfying the React-RuntimeHermes (from ../node_modules/react-native/ReactCommon/react/runtime) dependency were found, but they required a higher minimum deployment target. Err2. iOS 실행할때 run-ios --no-packager --simulator="iPhone 15" Build description signature: fc1341421f84b87c5245d346c2c17b66 Build description path: /Users/nowonjae/Library/Developer/Xcode/DerivedData/nexlabts-argvodqcybjfcybstpulfpghnzvm/Build/Intermediates.noindex/XCBuildData/fc1341421f84b87c5245d346c2c17b66.xcbuilddata /Users/nowonjae/Desktop/project/NeXLabRN/ios/nexlabts.xcodeproj:1:1: error: Unable to open base configuration reference file '/Users/nowonjae/Desktop/project/NeXLabRN/ios/Pods/Target Support Files/Pods-nexlabts/Pods-nexlabts.release.xcconfig'. (in target 'nexlabts' from project 'nexlabts') warning: Unable to read contents of XCFileList '/Target Support Files/Pods-nexlabts/Pods-nexlabts-resources-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') warning: Unable to read contents of XCFileList '/Target Support Files/Pods-nexlabts/Pods-nexlabts-frameworks-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-frameworks-Release-input-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-frameworks-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') warning: Run script build phase 'Bundle React Native code and images' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'nexlabts' from project 'nexlabts') warning: Run script build phase '[CP] Embed Pods Frameworks' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-resources-Release-input-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-resources-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') warning: Run script build phase '[CP] Copy Pods Resources' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'nexlabts' from project 'nexlabts') --- xcodebuild: WARNING: Using the first of multiple matching destinations: { platform:iOS Simulator, id:B5AA2E84-4F83-4749-A986-A1FCE5E398A3, OS:17.5, name:iPhone 15 } { platform:iOS Simulator, id:B5AA2E84-4F83-4749-A986-A1FCE5E398A3, OS:17.5, name:iPhone 15 } ** BUILD FAILED ** ] Err3. Xcode 로 Build 할때 (Any iOS Simulator Device (arm64, x86_64)) Command PhaseScriptExecution failed with a nonzero exit code

개발자

#reactnative

#xcode

#reactnative-run-ios

답변 1

댓글 0

조회 427

일 년 전 · 김지엽 님의 새로운 답변

"react-native doctor"에서 에러 반복 (Adb, Android Studio)

"npx react-native doctor"를 실행하여 문제를 찾고, F(fix)를 눌러 에러 해결을 진행하였습니다. ---------------------------------------------------------- Common ✓ Node.js - Required to execute JavaScript code ✓ npm - Required to install NPM dependencies ● Metro - Metro Bundler is not running Android ✖ Adb - No devices and/or emulators connected. Please create emulator with Android Studio or connect Android device. ✓ JDK - Required to compile Java code ✖ Android Studio - Required for building and installing your app on Android ✓ ANDROID_HOME - Environment variable that points to your Android SDK installation ✓ Android SDK - Required for building and installing your app on Android Errors: 2 Warnings: 1 Attempting to fix 3 issues... Common ✖ Metro Could not start the bundler. Please run "npx react-native start" command manually. Android ✖ Adb √ Select the device / emulator you want to use » Emulator s24u (disconnected) ✔ Adb ✔ Android Studio installed successfully in "C:\Users\OOO\AppData\Local\Android". ---------------------------------------------- 그러나 여전히 에뮬레이터는 작동하지 않으며, 다시 "npx react-native doctor"를 실행하면 다시 같은 오류가 발생합니다. --------------------------------------------- Common ✓ Node.js - Required to execute JavaScript code ✓ npm - Required to install NPM dependencies ● Metro - Metro Bundler is not running Android ✖ Adb - No devices and/or emulators connected. Please create emulator with Android Studio or connect Android device. ✓ JDK - Required to compile Java code ✖ Android Studio - Required for building and installing your app on Android ✓ ANDROID_HOME - Environment variable that points to your Android SDK installation ✓ Android SDK - Required for building and installing your app on Android Errors: 2 Warnings: 1 Usage › Press f to try to fix issues. › Press e to try to fix errors. › Press w to try to fix warnings. › Press Enter to exit.

개발자

#react

#react-native

#안드로이드

#android-studio

#android

답변 1

댓글 0

조회 634

7달 전 · 석정도 님의 질문

리액트 네이티브 릴리즈로 배포 시 build.gradle 설정대로 동작 안하는 이유가 뭔지 궁긍합니다.

안녕하세요. 현재 리액트 네이티브로 프로젝트를 진행하고 있습니다. 막바지 단계에 거의 도달해서 이제 배포 준비를 하려고 하는데요, 마지막으로 테스트를 하기 위해 stagingRelease 로 apk 를 만들어서 테스트를 하려고 하니, .env.staging 을 읽지를 못하고 있네요. 이상한건 stagingDebug 로 할 때에는 이런 문제가 없었습니다. 지금 환경변수는 루트 디렉토리에 env 폴더가 있고, 해당 폴더 내에는 3개의 환경변수 파일이 존재합니다. .env.development .env.staging .env.production 이렇게 3개 입니다. project.ext.envConfigFiles = [ productiondebug: "env/.env.production", productionrelease: "env/.env.production", developmentrelease: "env/.env.development", developmentdebug: "env/.env.development", stagingrelease: "env/.env.staging", stagingdebug: "env/.env.staging" ] 위의 코드는 제가 설정한 환경변수 매핑하는 부분입니다. 실제로 stagingrelease 로 빌드 시에 flavor 값이 stagingrelease 로 뜨는 걸 확인했습니다. node_modules 에서 react-native-config 폴더를 찾아서 dotenv.gradle 에서 찍으니까 확인이 가능하더라고요. 제가 궁금한 점은 왜 루트에서 .env 파일만을 읽어서 BuildConfig.java 에서 사용하려고 하는걸까요? .env.staging 을 참조하지 않는 이유가 궁금합니다. 아래는 dotenv.gradle 파일입니다. import java.util.regex.Matcher import java.util.regex.Pattern def getCurrentFlavor() { Gradle gradle = getGradle() def pattern = Pattern.compile("(?:.*:)*[a-z]+([A-Z][A-Za-z0-9]+)") def flavor = "" gradle.getStartParameter().getTaskNames().any { name -> Matcher matcher = pattern.matcher(name) if (matcher.find()) { flavor = matcher.group(1).toLowerCase() return true } } println "Current flavor: $flavor" return flavor } def loadDotEnv(flavor = getCurrentFlavor()) { def envFile = project.hasProperty("defaultEnvFile") ? project.defaultEnvFile : ".env" if (System.env['ENVFILE']) { envFile = System.env['ENVFILE'] } else if (System.getProperty('ENVFILE')) { envFile = System.getProperty('ENVFILE') } else if (project.hasProperty("envConfigFiles")) { project.ext.envConfigFiles.any { pair -> if (flavor.startsWith(pair.key.toLowerCase())) { envFile = pair.value return true } } } println "Reading env from: $envFile" def env = [:] File f = new File("$project.rootDir/../$envFile"); if (!f.exists()) { f = new File("$envFile"); } if (f.exists()) { println "Found env file: $f" f.eachLine { line -> def matcher = (line =~ /^\s*(?:export\s+|)([\w\d\.\-_]+)\s*=\s*['"]?(.*?)?['"]?\s*$/) if (matcher.getCount() == 1 && matcher[0].size() == 3) { env.put(matcher[0][1], matcher[0][2].replace('"', '\\"')) // 각 환경 변수 키-값 쌍 출력 println "Loaded env variable: ${matcher[0][1]} = ${matcher[0][2]}" } } } else { println("**************************") println("*** Missing .env file ****") println("**************************") } project.ext.set("env", env) } loadDotEnv() android { defaultConfig { project.env.each { k, v -> def escaped = v.replaceAll("%","\\\\u0025") buildConfigField "String", k, "\"$v\"" resValue "string", k, "\"$escaped\"" println "Set buildConfigField and resValue: $k = $v" } } } 안드로이드 스튜디오 터미널에서 ./gradlew assembleStagingRelease 명령어를 치게 될 경우, Current flavor: stagingrelease Reading env from: .env.staging ************************** *** Missing .env file **** ************************** 이런 로그가 뜨고 있습니다.

개발자

#react-native

#react-native-config

#다중환경변수

#release

답변 0

댓글 0

조회 57

일 년 전 · 희진 님의 질문

react-native xcode build시 발생 에러

``` ld: warning: ignoring file '/Users/heejinroh/Library/Developer/Xcode/DerivedData/OkCeo-abydistjrfwgsufmyimbpydzjpqj/Build/Products/Debug-iphonesimulator/Flipper-Folly/libFlipper-Folly.a[3](Assume.o)': found architecture 'arm64', required architecture 'x86_64' ld: warning: ignoring file '/Users/heejinroh/Library/Developer/Xcode/DerivedData/OkCeo-abydistjrfwgsufmyimbpydzjpqj/Build/Products/Debug-iphonesimulator/Flipper-Folly/libFlipper-Folly.a[2](Addr2Line.o)': found architecture 'arm64', required architecture 'x86_64' ld: Undefined symbols: _OBJC_CLASS_$_RCTBridge, referenced from: in AppDelegate.o _OBJC_CLASS_$_RCTBundleURLProvider, referenced from: in AppDelegate.o _OBJC_CLASS_$_RNKakaoLogins, referenced from: in AppDelegate.o _RCTAppSetupDefaultRootView, referenced from: -[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o _RCTAppSetupPrepareApp, referenced from: -[AppDelegate application:didFinishLaunchingWithOptions:] in AppDelegate.o clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` xcode 14 버전으로 생성된 프로젝트를 xcode 15버전으로 진행하여 실행했는데 빌드단계에서 에러가 계속 발생해서 혹시 도움좀 주실수있을까요? System: OS: macOS 14.0 CPU: (12) arm64 Apple M2 Pro Memory: 647.83 MB / 32.00 GB Shell: 5.9 - /bin/zsh Binaries: Node: 18.17.1 - ~/.nvm/versions/node/v18.17.1/bin/node Yarn: 1.22.19 - ~/.nvm/versions/node/v18.17.1/bin/yarn npm: 9.6.7 - ~/.nvm/versions/node/v18.17.1/bin/npm Watchman: 2023.09.25.00 - /opt/homebrew/bin/watchman Managers: CocoaPods: 1.11.3 - /Users/heejinroh/.rvm/gems/ruby-3.2.1/bin/pod SDKs: iOS SDK: Platforms: DriverKit 23.0, iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0 Android SDK: Not Found IDEs: Android Studio: 2022.3 AI-223.8836.35.2231.10671973 Xcode: 15.0.1/15A507 - /usr/bin/xcodebuild Languages: Java: 11.0.11 - /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin/javac npmPackages: @react-native-community/cli: Not Found react: 18.1.0 => 18.1.0 react-native: 0.70.8 => 0.70.8 react-native-macos: Not Found npmGlobalPackages: *react-native*: Not Found

개발자

#react-native

#xcode

#build

답변 0

댓글 0

조회 306

일 년 전 · 강병진 님의 답변 업데이트

안드로이드 스튜디오에서 빌드가 안되요

plugins { id("com.android.application") kotlin("android") } android { namespace = "com.example.next" compileSdk = 33 defaultConfig { applicationId = "com.example.next" minSdk = 24 targetSdk = 33 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } dependencies { implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.9.0") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") } 여기서 에러가 뜨는데 뭘까요 Unresolved reference: id Unresolved reference: kotlin Unresolved reference: android Unresolved reference: namespace Unresolved reference: compileSdk Unresolved reference: defaultConfig Unresolved reference: applicationId Unresolved reference: minSdk Unresolved reference: targetSdk Unresolved reference: versionCode Unresolved reference: versionName Unresolved reference: testInstrumentationRunner Unresolved reference: buildTypes Unresolved reference: release Unresolved reference: isMinifyEnabled Unresolved reference: proguardFiles Unresolved reference: getDefaultProguardFile

개발자

#안드로이드스튜디오

답변 1

댓글 0

조회 225

react-native) 안드로이드에서만 api서버가 401에러 발생

서버 api 호출하는 코드인데요. ios에서는 토큰 가져와서, 호출 잘 되는데, 안드로이드에서는 토큰은 잘 가져오는데.... 호출을 하면 권한이 없다고 나옵니다. (401에러 unauthorized) 물론 헤더 넘기지 않는 로그인 같은것은 성공적으로 수행됩니다. 유저 정보를 가져오는 이 부분만 android에서 에러가 발생하네요 ㅜㅜ 혹시 이런 이슈 해결하신분 있을까요? api서버는 django입니다. useEffect(() => { const getTokenAndRefresh = async () => { try { const token = await EncryptedStorage.getItem('accessToken'); if (!token) { return; } console.log('스토리지에 token있음:', token); const API_URL = Platform.OS === 'ios' ? IOS_API_URL : ANDROID_API_URL; const response = await axios.get(`${API_URL}/me`, { headers: { Authorization: `Token ${token}`, }, }); console.log(response.data); dispatch( userSlice.actions.setUser({ userInfo: response.data, accessToken: token, }), ); } catch (error) { console.error(error); console.error('me호출 에러'); } } }; getTokenAndRefresh(); }, [dispatch, isAccessToken]);

개발자

#reactnative

#django

#axios

답변 3

댓글 0

조회 497

2년 전 · 김용희 님의 질문

개발한 앱이 play 프로텍트에서 위험한 앱으로 표시됩니다.

안녕하세요, 앱을 기획 후 외주를 통해 개발했었는데요 작년까지는 구글 플레이스토어를 통해 다운받을 수 있었습니다. 그런데 올해 초에 구글 정책이 바뀌면서 구글 회원가입이 필수가 되었더라구요. 앱을 수정할 여유가 없어서... 구글스토어는 포기하고 원스토어에서 다시 출시를 했는데요 원스토어에서 다운받으려하니 개발한 앱이 play 프로텍트에서 위험한 앱으로 표시되는 것입니다. https://support.google.com/googleplay/android-developer/answer/2992033 위 링크를 통해 이의를 제기하라고하여 진행했지만 답변오는 것도없고 2주가 홀랑 지나가버렸습니다. 여전히 play 프로텍트 제제는 있구요. This application could be downloaded from the Google Play Store until last year. The Google Play Store policy is changing, and it is difficult to implement Google login, so we are preparing for distribution through other app stores. However, this is a situation where the download is being compromised by Play Protect. I am attaching the app link, so please review unblocking. 위와 같이 이의를 작성해서 제출했는데요, 마땅히 들어가야하지만 빠진 내용이 있는 것인지 원래 오래걸리는 것인지 같은 문제를 겪어보신 분들의 조언을 부탁드리고자 질문글을 올렸습니다. 꼭 답변을 부탁드립니다 ㅠㅠ

개발자

#playprotect

#play프로텍트

#플레이프로텍트

답변 0

댓글 0

조회 193

일 년 전 · 문승욱(카이론) 님의 새로운 답변

안드로이드 Activity의 EditText 값을 fragment의 커스텀 리스트뷰의 값으로 받아오는 과정에서 오류가 뭘까요?

Fragment로 커뮤니티 게시판을 만들고 있습니다 사진처럼 Activity에 작성한 글을 Fragment 안에 있는 커스텀 리스트뷰에 넣으려고합니다 구글링으로 방법을 찾아서 하고 있는데 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference at com.example.project.ChatFragment.onCreateView(String Title=bundle.getString("mainTitle",null);) 이렇게 오류 메세지가 뜨네요 어떻게 해결해야할지 모르겠습니다 엑티비티와 프래그먼트 코드 올립니다 혹시 몰라서 BaseAdater 코드도 올립니다

개발자

#java

#android

답변 1

댓글 0

조회 120

일 년 전 · 행복한 거북이 님의 답변 업데이트

학교를 졸업했지만 어디 분야로 가야할지 모르겠습니다

저는 원래 기계공학과였다가, 저랑은 영 맞지 않는것 같아서 1년 반 다니다가 컴퓨터공학과로 전과했습니다. 그런데 기계공학과와 컴퓨터공학과 모두 공학이긴 하지만 듣는 강의는 차이가 꽤 있어서 기계공학과에서 들었던 학점 대부분은 인정받지 못하고 증발해버렸습니다. 그래서 2학년이긴 하지만 전공학점은 신입생들과 별반 다를바가 없었어요 잘못하면 제때 졸업못하고 최소 1년이상 초과학기를 하게될테고 형편상 그건 어렵기 때문에, 전과해서 아는것도 하나도 없음에도 2학년과 1학년 수업을 같이 들으면서, 어떻게든 학기마다 풀학점으로 꽉꽉 채워서 결국 초과학기는 한 학기만 한 채로 졸업할 수 있었습니다. 그래도 나쁘진 않았습니다. 적어도 기계공학과에 있을 때보단 이쪽이 훨씬 제 적성에 맞았거든요. 그래서 그런지 학점도 4.0/4.5점 으로 괜찮게 졸업할 수 있었습니다. 그런데 너무 수업만 따라가기 바빠서 그런건지 졸업한 뒤 제가 어느 분야로 갈지는 깊게 생각해보질 않았어요. 미리 생각해 놨다면 학교 수업 외에도 그쪽으로 따로 공부를 하면서 준비할 수 있었을텐데, 그러질 않았으니 그저 학교에서 하는 강의만 열심히 들으면서 다녔습니다. 그리고 졸업하니까 어디로 가야할지 모르겠더라고요. 일단 제가 학교에서 배우고 해봤던걸 대충 적어보자면 javascript, java, python, c, html, css, mysql, oracle, unity, android studio, jsp, unix 이정도와 운영체제, 자료구조 같은 cs 입니다. 일단 저는 원티드, 로켓펀치, 프로그래머스 같은 사이트들을 돌면서 공고를 살펴 봤습니다. 프론트엔드쪽 기술스택을 살펴보니 html, css, javascript는 배웠지만 react, redux, node.js, next.js, typescript 이런 것들이 나오는데, 전부 한번도 안해봤던 것들이더라고요. 그래서 백엔드쪽 기술스택을 살펴보니 spring, jpa, django, docker, fastapi, flask 등등 이런것들이 나오는데 역시 안해봤던 것들이었습니다. 그래서 다음은 안드로이드쪽을 살펴봤습니다. 팀프로젝트를 하면서 앱을 만든 경험이 있었거든요 kotlin, flutter, react...역시 안해본 것들입니다 저흰 java만 배워서 코틀린을 안해봤습니다. 그리고 flutter, react 같은 크로스플랫폼 또한 다뤄본 적 없고요 이런식으로 막상 실무에서 요구하는 기술들과 제가 학교에서 배웠던걸 매치해보니 제가 부족한게 너무 많더라고요. 사실 처음 채용공고 봤을땐 제가 모르는 용어들도 많아서 멘붕이 왔었습니다. 물론 이제 막 학교 졸업하고 실무경험도 없는 신입이니 부족한게 많은건 당연한것이고, 신입이 그 기술스택을 다 숙지할 수도 없다는것도 알고 있습니다만, 그럼에도 제가 너무 부족한게 많다는 생각을 지울수가 없더군요 서론이 길었네요 그래서 결론은 현재 저의 상태에서 가장 빠르게 준비해서 취업할 수 있을만한 분야가 어디일까요? 저는 개발쪽이기만 하면 상관없는데, 저희집 사정상 가능한한 빠르게 준비해서 빠르게 취업하고 싶습니다.

개발자

#개발

답변 2

댓글 0

추천해요 1

조회 1,107

9달 전 · 익명 님의 새로운 댓글

애매한 커리어 이거 어떻게 하면 좋을까요. (고민상담부탁드립니다..)

전문대 졸업 후 잡코리아에서 면접 제의 온 회사에 입사했습니다. 1. 전자제품을 다루는 곳이였습니다, 개발 회사라고 해서 들어갔는데 개발은 가끔 통신 장애 나 화면 표시를 바꾸는 정도의 수정이 있을때만 참여하고 대부분 생산제품 검사, 현장 출장이였습니다. 그래서 1년도 못다니고 퇴사를 하고, 2. 그뒤 2달뒤쯤 MES 회사를 다니게 되었습니다. C#을 주로 다루고 DB를 다루고 가끔 비베도 다루는 회사 였습니다. 초짜라 다름 없는 실력이기 때문에 실력도 많이 부족했는데 회사에서 권고사직을 제안했습니다.. 회사에 크게 누를 끼치거나 그런 부분은 없었는데 전 이런 취급 받으면서 일하기 싫고 스펙을 키워야 된다는 생각을 갖게 됩니다. 3. 안드로이드 자바 개발자 과정을 다니게 됩니다. 그곳에서 C, Android Java , php 기초 등을 다시 배우게 됩니다. 4. 코딩교육콘텐츠개발 회사에 입사하게 됩니다. 적은 월급이였지만 꾸준히 연봉인상을 해주었지만 제 개발 스텍 성장은 멈추게 되었고 초중위주로 하다보니 발전성도 떨어지게 되었습니다. 그리고 마지막 결정적인 부분은 코로나 시기가 문제였는지 연봉을 최저시급올라간만큼 정도만 올려주었습니다. (한달에 4만원 더 받는 수준?) 5. 그 후 퇴사후 사무직에서 2년가까이 일을 했습니다. 그러던 와중 IT붐(AI 신드롬)이 다시 일어났고, 저는 IT 업종에 다시 뛰어들기로 결정합니다. 그리고 그러기 위해 제 스텍도 쌓고 몸풀기겸 국비학원을 다니게 됩니다. Python 웹 개발. Android 자바 기반으로 연계해서 서비스 개발 , 오픈 라이브러리 사용(쳇 지피티, 구글 오픈라이브러리 등등) 그리고 24년2월말에 수료하게 됩니다. 6. 현재 입사지원서는 80개 가량 (python 인공지능, 웹개발, 소프트웨어 개발) 등 다양한 회사에 골고루 지원했습니다. 서류통과는 6번정도 있었고, 2 군대는 근무조건이 너무 좋지 않아 면접 포기했고 3번은 면접에서 광탈했고.. 현재까지 구직활동 중 이며, 일경험도 신청했는데 서류도 떨어졌는지 연락이 없습니다. 제가 가지고 있는 스텍이 C# - wpf,winform 구조 사용 Android (Java) - 코틀린은 다루어보진 않은 상태입니다. Mysql, 오라클 Python은 Flask를 다루어보았습니다. -- 취업공고를 보니 대부분은 자바 Spring 이고 Python은 Node 아니면 Django를 많이 사용하는 것 같은데, 그 스텍에 대해 다시 공부하고 포폴이라도 만들어서 취업하는게 맞는거지.. 다른 일이라도 하면서 틈틈이 집에서 방통대 또는 사이버대학교를 다니며 4년 학위를 맞추고, 코딩 레드오션이 끝나길 기다리는게 맞는거지.. 정말 고민이 많습니다. 어떤것이 현명한 선택일까요..

개발자

#이직

#구직준비

#백수

#고민상담

답변 1

댓글 1

조회 196

일 년 전 · Jake 님의 새로운 댓글

Flutter에서 Ini File

VSCODE환경에서 Flutter를 이용해서 Android app을 개발중입니다. ini file을 통해 ip address등 환경변수들을 저장하고 싶은데, ini.dart 나 ini_file.dart등 package를 써봤는데, 권한 문제인지 경로문제인지 화일을 찾을수 없다고 나오거나, (OS Error: Read-only file system, errno = 30)이런 에러가 뜹니다. 아직 Flutter는 초보라서 잘 모르니 고수분들의 지도 간곡히 부탁드립니다.

개발자

#flutter

#android

#vscode

답변 2

댓글 10

조회 165

5달 전 · Roman Furman 님의 질문

1시간 안에 네이티브로 웹사이트를 iOS 및 Android용 네이티브 모바일 앱으로 변환하세요.

비즈니스용 모바일 앱을 만드는 데 얼마나 비용이 들까요? 제 경험상, 안드로이드와 iOS 앱을 개발하려면 최소 1만 달러부터 시작합니다. 하지만 한 달에 단 35달러로 모바일 앱을 만들 수 있는 매우 효과적인 방법이 있습니다. 혼자서도 할 수 있고, 팀을 고용할 수도 있는데, 이 방법은 몇 개월이 아닌 며칠 만에, 수천 달러가 아닌 수십 달러로 가능합니다. 제가 말하는 것은 Natively입니다. 이 서비스는 어떤 웹사이트나 웹 애플리케이션도 손쉽게 네이티브 앱으로 변환해 줍니다. 귀하의 웹사이트/웹 앱이 JavaScript 프레임워크로 구축되었든, Bubble, Webflow, Wix, WordPress, Shopify와 같은 노코드 플랫폼을 활용하든, Natively는 모바일 앱으로의 전환을 매끄럽고 간단하게 만들어 줍니다. Natively의 사용은 매우 간편합니다. 사용자 친화적이고 자동화된 프로세스로 인해 기술적 전문 지식 없이도 누구나 몇 분 안에 앱을 만들 수 있습니다. Natively는 푸시 알림, 헬스 키트, 위치 추적, 카메라, 갤러리, 인앱 결제 등 다양한 네이티브 모바일 기능을 설정할 수 있게 해줍니다. 그리고 새로운 기능이 지속적으로 추가되고 있습니다. 1년 전 처음 출시된 이후로 Natively 덕분에 800개 이상의 애플리케이션이 App Store와 Google PlayMarket에서 성공적으로 자리 잡았습니다. Natively의 웹사이트, 리뷰 및 사례는 여기에서 확인하세요: https://www.buildnatively.com/ 오늘날의 디지털 시대에서 네이티브 애플리케이션을 보유하는 것은 사용자를 끌어들이고 유지하는 데 필수적이며, 비즈니스 성장에 큰 도움이 됩니다. 그래서 저는 Natively가 특히 무료로 시작할 수 있다는 점에서 꼭 시도해볼 가치가 있다고 믿습니다. 🌍

개발자

#모바일

#앱

#android

#ios

답변 0

댓글 0

조회 58

10달 전 · 익명 님의 새로운 답변

React Native android emulator 질문있습니다.

native 공부중에 제가 React Native Debugger를 다운받아서 사용할려고 하는데, 사진과 같이 Menu에 Debug 혹은 debug js remotely 가 없더라구요 Open Debugger 누르면 filpper 다운 받으라고 하는데... 연결을 못해서 console를 못보면서 하니 어떻게 해야할까요? 기기는 ( android 13.0 Tiramisu 사용중입니다.)

개발자

#native

답변 1

댓글 0

추천해요 1

조회 250

한 달 전 · 박정후 님의 새로운 답변

Oauth2(ios,android)할 때 스프링부트에서 할일

웹으로 구현했을때는 리다이렉트 url등으로 백단에서 인증 받아서 진행 했었는데 네이티브 앱에서의 Oauth2 Docs를 보고있는데 앱단에서 모든 처리를 하는 걸로 보여서요 그럼 그 이후에 그 사람의 프로필정보나 아이디만 보내면 백엔드에서 그걸로 로그인이나 회원가입이 되는게 맞나요? 그렇게 되면 로그인이나 회원가입 api url만 알고있으면 postman으로 아무 닉네임이나 보내면 회원가입이나 로그인이 될 것 같은데 보통 어떤 방식으로 하는지 알고싶습니다.

개발자

#oauth

#네이티브앱

답변 1

댓글 0

조회 39

React Native run-android 실패

React Native에서 npx react-native run-android 명령어로 빌드하려고 하는데 "Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081" 에러 메시지와 함께 빌드가 실패합니다. https://reactnative.dev/docs/environment-setup macOS이며 위의 문서에 나와있는 대로 진행했고, 검색해보니 환경변수 설정을 해주어야 한다고 해서 zsh 설정파일에 추가해주었는데도 계속 같은 문제가 발생합니다. 해결방법을 아시는 분이 계실까요?

개발자

#rn

#안드로이드

답변 1

댓글 1

조회 177

9달 전 · 익명 님의 새로운 댓글

in react-native cli, No Firebase App '[DEFAULT]' has been created - call firebase.initializeApp()

안녕하세요 운영체제 windows, react-native cli, android를 사용중입니다. 구글링을 해도 도저히 안나오길래 질문을 드립니다.. firebase react native auth, app 홈페이지에서는 해답이 없더라구요... 혹시 해결방법 아시는분들 계신가요 ㅠㅠ

개발자

#react-native

#react-native-cli

#firebase

답변 1

댓글 1

조회 115

react native 초기 셋팅

npx react-native init 프로젝트명 으로 실행했는데 react-native run-android하니까 @react-native-community cli-platform-android native_modules.gradle' line 213에서 오류가 났다고 뜨는데 아무리 해봐도 안돼서요.. react 는 17.0.2 react-native는 0.68.2로 진행중입니다 알려주실 천사분 계신가요 ㅜㅠ?

개발자

#react-native

답변 1

댓글 0

추천해요 3

조회 526

react-native-file-access 알 수 없는 빌드 에러

안녕하세요~ 이번에 react-native-file-acccess라는 라이브러리를 설치했는데 react native iOS는 빌드가 잘되는데 안드로이드만 빌드가 안되고있어요 ㅠㅠㅠ 에러 문구는 이렇게 나옵니다 /Users/xxxx/xxxxxxxxxxxx/xxxxxx/app/node_modules/react-native-file-access/android/src/main/java/com/alpha0010/fs/NetworkHandler.kt: (49, 33): Using 'body(): ResponseBody?' is an error. moved to val 리액트 네이티브 버전은 0.64.3입니다 혹시 해결 방법 아시는분 있나요? 몇 시간째 아무것도 못하고 있어요 ㅠㅠ

개발자

#프론트엔드

답변 1

댓글 1

조회 205

4달 전 · 익명 님의 질문

물경력 2년차 개발자 이직에 대해서

비전공자 국비로 시작해서 어느덧 2년차 개발자가 됐습니다. 프론트 개발자(react)를 준비하던 중 작은 기업에서 Java 백엔드를 가르쳐주겠다 하여 입사했지만 들어가서 처음 접한 언어는 php... 회사 내 개발자는 cto, 신입인 저 2명뿐이였는데 cto분도 제가 입사한지전공자 국비로 시작해서 어느덧 2년차 개발자가 됐습니다. 프론트 개발자(react)를 준비하던 중 작은 기업에서 Java 백엔드를 가르쳐주겠다 하여 입사했지만 들어가서 처음 접한 언어는 php... 회사 내 개발자는 cto, 신입인 저 2명뿐이였는데 cto분도 제가 입사한지 한달만에 퇴사... 어찌저찌 프리랜서를 구했는데 그 프리랜서도 3개월 하고 퇴사 비전공자고 인문학 출신인 내가 이직을 위해서는 경력이 필요하다 생각해서 군대 재입대 했다 생각하고 버티면서 이 회사에서 이것저것 다 했습니다. php로 웹 유지보수 하면서, RN로 webview 개발 및 android, ios 앱 배포, flutter 앱 개발하다가 자바공화국에서 이직을 하려면 java를 해야겠다 싶어서 java프로젝트에 제발 껴달라고 해서 작년9월쯤 java프로젝트에 합류하게 됐습니다. java spring boot로 자사 서비스 개발 및 유지보수, 지자체 프로젝트 이것저것 어찌저찌 주먹구구식으로 구글링하면서 개발하다보니 어느세 2년이 됐네요... 누구한테 제대로 배운 적이 없어서 저 혼자 서버 세팅이나 개발도 할 수 있을지... 2년 동안 한 것처럼 구글링 하다보면 어찌저찌 하겠지만 그게 과연 옳은 길인지 의심이 들던 중 대표의 밥 먹듯이 하는 가스라이팅과 깨끗하지 않은 제안에 이제 그만둬야겠다는 결심을 하게 됐습니다.. 그런데 요즘 취업 시장만 봐도 경기가 너무 안좋은데, 비전공자/인문학도인 제가 2년의 물 경력으로 이 험난한 취업 시장에서 살아남을 수 있을까요... 아님 1년만 더 견뎌볼까요... 두서 없이 쓴 긴 글을 읽어주셔서 감사합니다..

개발자

#이직

답변 0

댓글 0

조회 130

2년 전 · 커리어리 AI 봇 님의 새로운 답변

플랫폼 별 (web, android, ios)별 Google Oauth 로그인 관리

안녕하세요. 현재 저는 nestjs를 사용하여 Google Oauth 로그인을 처리하고 있습니다. 로그인 로직 처리 도중, 궁금증이 하나 생겨 질문을 남깁니다. 현재 Google Oauth의 client ID 생성 방식은 web, android, ios 별로 다릅니다. (web은 redirect_url과 client secret도 있음) 저는 "각기 다른 플랫폼에서 Oauth 로그인 요청 시, 요청을 보낸 플랫폼에 맞게 client ID를 어떻게 설정하여 로그인 처리를 해야 하는가?" 라는 고민을 해결하고자 합니다 이에 대한 경험이나 해결방법이 있으시면 답변주시면 감사하겠습니다.

개발자

#google-oauth

#android

#ios

#web

#nest.js

답변 1

댓글 0

조회 328

일 년 전 · 최윤석 님의 새로운 답변

React Native 개발자입니다. 향후 커리어를 어떻게 만들어가면 좋을까요??

React Native만 할줄 아는 만 2년차 프론트엔드 개발자입니다. 목표는 모바일 앱 프론트 전문가로 커리어를 쌓는 것입니다. 근데 요즘 할줄 아는 게 RN 밖에 없다보니 앞으로 전문성을 어떻게 더 쌓을 것이라는 걱정이 앞섭니다. 궁극적으로 대기업은 한번 찍고 와보고 싶은데, 크로스 플랫폼을 사용하는 곳은 전무하고 iOS, Android 네이티브 개발 혹은 리액트 웹뷰 방식으로 개발을 하는 것 같더라고요. 처음엔 막연하게 iOS 개발자가 되고 싶다는 생각이 있었는데, 요즘은 빠른 빌드/배포에 강점이 있고 또 동일한 JavaScript여서 러닝 커브가 높지 않겠다는 생각이 들어 웹 프론트엔드 커리어를 고민 중에 있습니다. RN만 할줄 알지만 앞으로 모바일 앱 개발자로 더 전문적이고 싶어하는 저의 커리어는 어떻게 설계하고 준비하면 될까요??

개발자

#react-native

#react

#next

#ios

#android

답변 3

댓글 0

추천해요 1

조회 495

일 년 전 · ㄱㅎㅁ 님의 새로운 답변

백엔드 개발을 원하는데 제조업 회사라도 들어가야 할까 고민입니다...

안녕하세요. 지방사립대 컴퓨터공학과를 2월에 졸업한 24살 취준생입니다. 대학교 2~3학년 때, nodejs androidStudio flutter 찍먹하다가, 대학교 4학년이 되어서야 백엔드 개발을 목표로 두고 스프링 공부를 시작하였습니다. 덕분에 제대로된 직무관련 프로젝트는 SpringBoot를 사용한 졸업 프로젝트 하나 뿐이네요... 정처기, sqld, opic은 따둔 상태이고, 지금은 공모전 하나 준비중입니다. 작년 하반기에 대기업 위주로 지원서 4곳을 냈는데, 1곳은 1차면접에서 탈락 나머지는 서류 탈락이었습니다. 지금도 대기업을 위주로 노리고 있기는 하지만, 커리어를 쌓을 수 있는 곳이면 어디든 가자!라는 마음으로 지원서를 넣고 있습니다. 그러가가 지방에 있는 제조업 회사 IT부서에 갈 기회가 생겼습니다. 초봉 5000 정도인 꽤 규모있는 기업입니다. (대신 연봉인상률이 좋지 못하다고 합니다.) 이 회사는 개발자가 커리어 쌓기에는 좋지 못한 회사인 것 같습니다. 자동차 부품 제조가 메인 사업이고, 오래 근무하신 IT 부서 현직자 분에게도 ‘개발을 원한다면 우리 회사랑은 안 맞을 것 같다’는 이야기를 들었습니다. 요즘 채용 시장이 많이 안 좋다고 들었습니다. 제조업 IT 부서에라도 들어가서, 개인 공부를 하다가 이직을 하는 것이 좋을까요?? 아니면 커리어 쌓을 수 있는 회사나 부트캠프에 도전해보는 것이 좋을까요...??? 제조업 IT 부서에서 일을 하더라도 경력 인정을 받을 수 있을까 걱정입니다...

개발자

#백앤드

#제조업

#이직

#java

#spring-boot

답변 1

댓글 0

조회 374

일 년 전 · GANG 님의 질문 업데이트

.Net maui 결제기능 어떻게 구현하나요?

크로스 플랫폼이 필요해서 처음으로 .net maui에 손을 대 보았습니다. 열심히 시행착오를 겪으며 구글 플레이스토어에 비공개 테스트까지 올려보았습니다. 그런데 인앱결제를 어떻게 만들어야 할 지 너무나 막막합니다.구글플레이 결제기능도 어떻게 사용해야 할 지 모르겠습니다 제발 도와주세요.. ㅠㅜ 깃에 올라와있는 예제나 설명 링크라도 감사합니다. AndroidManifest.xml파일에 <uses-permission android:name="com.android.vending.BILLING" /> 이 코드 추가는 이제 안 되네요.. 구글플레이결제버전 5.0을 사용하는 코드는 없을까요?

개발자

#netmaui

#결제

답변 0

댓글 0

추천해요 1

조회 95

일 년 전 · 익명 님의 질문 업데이트

codepush 적용

codepush는 마이크로소프트사에서 자체적으로 서비스를 제공하는거라고 알고있습니다. 회사 업무 특성상 자주 배포해야하는 이슈때문에 코드푸시를 적용했습니다. 코드푸시 업데이트 창이 뜨게 되면 사용자의 선택으로 업데이트를 진행한 후 다시 로딩이 됩니다. 현재는 코드푸시 업데이트는 코드푸시 업데이트대로 뜨고, 앱은 앱대로 뜨도록 구현이 되어있습니다. 이걸 코드푸시 업데이트가 있으면 코드푸시 업데이트를 띄우고, 업데이트가 없다면 업데이트를 안띄우고 앱으로 바로 넘어가도록 수정을 하고자합니다. 궁금한점은, 1. 마이크로소프트사의 서버가 불안정하다고 많은 문서를 봤습니다. 만약 코드푸시 업데이트가 있으면 업데이트가 띄우도록, 없으면 없는대로 앱을 구현할 수 있도록 한다고 했을때, 업데이트 유무를 판단하는 codePush.checkForUpdate() 를 통해 구현을 한다면, 데이터를 가져오는데 시간이 지연될 수 있다고 생각이 듭니다. 시간이 지연되더라도 최소 ex)5초 가 지나면 업데이트를 무시하고 앱을 구현할 수 있는 방법이 있을까요? 많은 블로그에서는 코드푸시 업데이트 유무로 판단한 후 업데이트창을 띄울지 말지를 결정을 하는것같은데, 서버가 불안정할때는 지연시간이 길어지지 않을까.. 싶습니다. 코드푸시를 업무에서 적용하고 있는 분들 도움을 주세요.... ㅜㅜ 추가적으로 android에서 코드푸시 업데이트 창이 떠서 업데이트확인 버튼을 눌렀음에도 불구하고 아무런 반응이 없는 경우가 있습니다. 이 경우에 다시 앱을 재시작하면 다시 코드푸시 업데이트 창이 떠서 문제없이 해결할 수 있었습니다. 하지만, ios의 경우에는 같은 상황이여도 재시작하면 코드푸시 업데이트 창이 안뜨는경우가 간혹 있습니다. maxRetryAttempts: 3 이 설정을 추가하여도 안되는 경우가 간혹 발생하는데, 어떻게 처리 해야할지 도움을 주시기 바랍니다... ㅜㅜ

개발자

#react-native

#codepush

답변 0

댓글 0

조회 112

react-native 물리적 버튼 제어

안녕하세요 열심히 삽질을 하다 질문드립니다. android,ios 물리적 버튼 전원버튼,볼륨 up,볼륨 down 버튼이 눌렸을때 이벤트를 받고 싶습니다. 현재 라이브러리로 테스트 했지만 진전이 없네요. react-native-keyevent : key 이벤트가 올줄알았지만 리스너가 작동을 안함. react-native-volume-manager : 볼륨을 제어되나 볼륨up,볼륨down 인지 확인이 불가 선배님들 혹시 볼륨up, 볼륨down, 전원버튼 눌렸을때 이벤트 제어가 가능한 라이브러리 알고계신거 있으신가요?

개발자

#react-native

답변 1

댓글 0

추천해요 1

조회 333

7달 전 · 익명 님의 새로운 댓글

애플리케이션 프론트엔드 프레임워크 추천

백엔드 개발자로써 개발경험을 쌓고 싶어서 개인 프로젝트를 진행하려고 합니다. springboot를 사용할 생각이고 ios, android 모두 가능하게 개발하고자 합니다 Vue.js나 Rn을 생각하고 있었는데 선배님들이 생각하시는 괜찮은 프론트엔드 프레임워크 추천해주시면 감사하겠습니다.

개발자

#back-end

#front-end

#vue.js

#reactnative

#spring-boot

답변 1

댓글 1

추천해요 1

조회 52

일 년 전 · 김용석 님의 질문

개발 SI 회사 파산시 제가 요청해야 할 것이 무엇이 있을까요? ㅜㅜ

안녕하세요, 다름이아니라 제가 개발을 외주로 맡기고 있었는데 외주 회사가 곧 파산을 한다고 합니다. 회사 말로는 “현상태로 개발을 종료하고 인수인계 자료를 만들어서 추후 타 개발사와 코웍하실 수 있게끔 해드리게 하겠다”라고 하는데 이 때 제가 무엇을 요청해야 하는 것이 있을까요? 참 답답하네요.. PHP, Android, Flutter, AWS(EC2,RDS), Mysql, Firebase, Codeigniter 전체 소스코드 및 문서: - 현재까지의 모든 소스코드 - 프로젝트 관리 문서, 기술 문서, 설계 문서 등의 모든 문서 - 사용된 데이터베이스의 전체 백업과 함께, 데이터베이스 스키마 또는 구조에 대한 문서

개발자

#flutter

#android

#php

#aws

답변 0

댓글 0

조회 128

2년 전 · 익명 님의 질문

Android 앱에서 JWT를 저장할 때 SharedPreferences

안녕하세요. Android와 Spring을 공부하고 있는 주니어 개발자입니다. 다름이 아니라 서버에서 REST API(를 가장한 HTTP API)로 회원 서비스를 제공하려고 하는데요, 세션이 아닌 JWT 방식으로 인증하려고 합니다. 클라이언트에서 아이디와 비밀번호를 POST로 서버에 보내면 응답으로 JWT를 발급하려고 하는데요. 클라이언트가 웹일 경우 쿠키에 담아서 저장하면 된다던데, 클라이언트가 앱일 경우는 SharedPreferences에 담아 저장해도 보안상에 문제가 없을까요? 또한, 이에 관해 검색을 하다보니 나오는 자료가 별로 없던데, 혹시 제가 하려는 방식처럼 앱에 로그인 서비스를 제공하기 위해 서버를 별도로 구현하여 REST API로 제공하는 방식 자체가 안 좋은 방식인가요?

개발자

#android

#server

#jwt

#authentication

답변 0

댓글 0

조회 109

8달 전 · 이우열 님의 새로운 답변

백엔드는 앱은 없나요?

제가 알기로 웹사이트에서 백엔드, 프론트엔드로 나뉘고 앱에서는 ios,android로 나뉘는걸로 아는데 그럼 ios랑 안드로이드는 백엔드 프론트엔드를 다 다룰줄 알아야하나요? 저는 백엔드 개발자가 꿈인데 앱쪽으로 조금더 관심이 많은데 앱 백엔드 개발자는 따로 없고 ios나 안드로이드로 취업을 해야하나요? 그리고 그렇다면 각 분야의 프론트와 백엔드를 다 공부해야하나요??

개발자

##프론트엔드

##백엔드

#ios

#android

답변 3

댓글 5

조회 666