10달 전 · 익명 님의 질문
정보보안 (취약점 진단, 기술 컨설팅)
대외활동 상금으로 애플실리콘 맥북을 사서 정보보안 공부를 하고 있습니다. x86 리눅스가 필요한 부분은 UTM이나 집에 있는 윈도우 데스크탑을 원격으로 연결해서 사용하고 있는데 현직자 분들은 어떤 노트북을 사용하는지 궁금해서 질문드립니다! 모의해킹 부분은 맥북을 많이 사용한다고 들었는데, 취약점 진단이나 기술 컨설팅을 하시는 분들도 애플실리콘 맥북을 사용하시는 분들이 있는지 궁금합니다!
개발자
#노트북-추천
답변 0
댓글 0
조회 143
일 년 전 · 남 재민 님의 새로운 답변
대규모 사이트의 데이터 수집 sdk를 만들어야하는데...
합쳐서 수십~수백만 사용자가 있는 웹사이트의 회원/비회원 데이터를 수집하는 sdk를 만들어야합니다.. 기본적인 브라우저 정보, 회원정보 부터 접속한 url, 체류시간, utm과 같은 로그까지 수집해야하는게 요구사항입니다. 단순 브라우저 및 회원 데이터의 경우 단발성으로 저장하니 상관없을꺼같은데 로그의 경우 페이지 이동 혹은 매 접속마다 api로 요청하여 db에 저장하는 방법인지... 모르겠네요 😭 어떤식으로 접근해야하는지 감이안와 이렇게 질문 작성합니다 ! 읽어주셔서 감사합니다🙇♂️
개발자
#javascript
#sdk
#데이터
답변 1
댓글 0
조회 37
일 년 전 · 백승훈 님의 답변 업데이트
프론트엔드 개발자 부트캠프 고민 중 입니다..
안녕하세요 프론트엔드 개발자를 준비하고 있는 1인 입니다. 요번에 운좋게 부트캠프 2개를 붙어서 결정을 해야 하는데 어떤게 더 좋은지 모르겠어서... 질문 남깁니다.. 1. 유데미 웅진씽크빅 풀스택 부트캠프 https://udemy.wjtb.co.kr/event/id/244?utm_medium=paid&utm_source=googleads&utm_campaign=nnt_traffic_bootcamp-KDT_SA&utm_content=id_244&utm_term=240409&gad_source=1&gclid=Cj0KCQjwxeyxBhC7ARIsAC7dS3-3gWAFIN_KxCxPxMz3BPiXaYOnJAtTtj8mtwbt_lJ_lhrhksM5DKwaArdtEALw_wcB 2. 이스트소프트 오르미 프론트엔드 부트캠프 https://estfamily.career.greetinghr.com/o/108906 이렇게 2개를 붙었는데 뭐가 더 좋을까요..? 유데미 웅진씽크빅 풀스택 기술스택 - Html, CSS, Javascript, React.js, Java, Spring, MySQL, AWS 이스트소프트 부트캠프 기술스택 - Html, CSS, Javascript, React.js, Redux, TypeScript, GitHub, Figma 입니다. 둘 다 온라인강의가 기본베이스고 유데미는 오프라인 모임도 진행을 한다고 합니다. 유데미는 신청할 때 프론트엔드 백엔드 풀스택을 고르라고 해서 프론트엔드를 골랐는데 교육과정만 보면 이스트소프트가 맞는거 같은데 어떤걸 선택해야할지 잘 모르곘습니다 ㅠㅠ 도와주세요..
개발자
#부트캠프
#유데미
#오르미
답변 1
댓글 0
조회 343
일 년 전 · 익명 님의 질문 업데이트
카카오 클라우드 스쿨(부트캠프)에 대해 궁금합니다.
https://rapa-kakaocloudschool-apply.goorm.io/?utm_source=google&utm_medium=cpc&utm_term=%EC%B9%B4%EC%B9%B4%EC%98%A4%20%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C%20%EC%8A%A4%EC%BF%A8&gad_source=1 카카오 클라우드 스쿨 링크 먼저 첨부드립니다. 안녕하세요 백엔드 취준생입니다. 카카오 클라우드 스쿨 모집공고가 떴는데 도커, 쿠버네티스 등 최신 기술을 학습하는건 좋지만 백엔드 취준생의 입장에서 Cs, Os 등에 대한 과정이 없는게 아쉽다는 어떤 유튜버 분의 영상을 보았습니다. 또한 신입채용을 셧다운 한 카카오라, 카카오 클라우드 스쿨 교육을 듣는다고 해서 카카오쪽 취업에 유리할거란 기대도 어려운 상황에서 카카오 네임밸류를 믿고 갈만한, 네임밸류에 걸맞는 부트캠프인지 아니면 정보가 부족한만큼 거르고 유명한 부트캠프 공고를 기다리는게 나을지 선배님들의 생각은 어떠신가요? 안랩샘 아카데미도 어떻게 생각하시는지 궁금합니다
개발자
#부트캠프
#카카오
#카카오클라우드스쿨
#안랩
#안랩샘
답변 2
댓글 1
추천해요 2
조회 1,838
일 년 전 · 익명 님의 질문
ghost 레포를 github에 공개로 올려도 괜찮을까요?
안녕하십니까 요즘 뭐할지 고민하다가 https://careerly.co.kr/qnas/1544?utm_campaign=user-share 해당 글에서 ghost 건드려보는 것에 흥미가 생겼습니다. 근데 레포 전체를 공개해도 보안에 문제가 없을지 궁금합니다! 아니면 레포를 프라이빗으로 돌려야 할까요?
개발자
#github
답변 0
댓글 0
조회 56
일 년 전 · 박민수 님의 질문 업데이트
안녕하세요 취준생 부트캠프 관련 질문이 있습니다.
컴공 전공생 이번에 졸업합니다 분야 : 백엔드 , si도 상관없습니다. 자격증 : 정보처리기사 한개 목표 : 일단은 중하급 회사부터 가고싶습니다 . 수준 : 간단한 프로젝트 정도만 가능 , 백준 솔브드는 실버 정도 제가 찾아본 부트캠프가 1) 구름톤 1기 웹 백엔드 부트캠프 https://kdt.goorm.io/?utm_source=google&utm_medium=cpc&utm_campaign=basic&utm_term=%EC%BD%94%EB%94%A9%20%EB%B6%80%ED%8A%B8%20%EC%BA%A0%ED%94%84%20%ED%9B%84%EA%B8%B0&gclid=CjwKCAiAkp6tBhB5EiwANTCx1Bz8Ug4C8XGtv25c6OfhNX3x6Mwz30Umt62_DVM-NYbpwXqh_DGWlRoCwusQAvD_BwE 2) 프로그래머스 (React . node) 하는 부트 랑 https://school.programmers.co.kr/learn/courses/20814/20814-2%EA%B8%B0-k-digital-training-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EC%9B%B9-%ED%92%80-%EC%82%AC%EC%9D%B4%ED%81%B4-%EA%B0%9C%EB%B0%9Creact-nodejs?utm_campaign=school_20814_main&utm_content=20814_txt&utm_medium=AD&utm_source=boottent 3) 네이버 클라우드 캠프 ( 백엔드 + 데브옵스 ) 인데 https://ncamp.kr/?utm_source=BootTent&utm_medium=231201_Ncamp_Devops_BootTent_TitleTag_AD&utm_campaign=231201_Ncamp_Devops_12_19.29_Open_BootTent_Title_AD&utm_id=231201_Ncamp_Devops_BootTent_TitleTag_AD 커리큘럼이 좋은건지 아닌건지 구분이 안가서 궁금합니다.
개발자
#node-#spring-#be
#node-#spring-be
답변 1
댓글 2
조회 366
일 년 전 · 송지우 님의 질문 업데이트
비전공자 부트캠프 선택 조언
안녕하세요. 비전공자이고 프론트 희망하는 사람입니다. 지금은 리액트로 간단한 axios써서 투두리스트 앱 정도 만들 수있습니다. 다름이 아니라 이 부트캠프 어떤가 해서 글을 올립니다. 기업 연계라는 점 때문에 골랐는데 1기라.. 어떤지 잘 확신이 안서네요 https://udemy.wjtb.co.kr/bootcamp/saramin1?utm_medium=paid&utm_source=allcon&utm_campaign=recruitment_07&utm_content=front-back&utm_term=231107&fbclid=IwAR2Azy9Sb7jDDRRwWwg8NcyHefp6P4psO18az80g3RFJLHcqoiS6wbHu9Fc
개발자
#부트캠프
답변 1
댓글 0
조회 141
일 년 전 · 익명 님의 질문 업데이트
국비학원 취준생으로 해당 커리큘럼을 들어도 될까요?
안녕하세요. 현재 국비학원 백엔드 과정을 수료하고 취준을 하고 있습니다. 비록 이력서를 넣기 시작한지는 일주일밖에 되지않았지만, 연락이 안오기도 하고 학원동기들의 얘기를 들으면서 불안해지니 스펙이 부족한 것같고 실력이 부족하다는 생각이 들었습니다. 그래서 이런것을 질문해도 될지 모르겠지만, 아래 링크와 같이 이러한 커리큘럼이 정말 실무에 도움이 되는지 여쭙고 싶습니다.. 실무가 어떻게 돌아가는지 정확히 모르기 때문에 해당 커리큘럼을 진행하는 것보다 개인 프젝이나 팀 프젝을 진행하는게 나을지 고민이 되어서요..! 정말 하루하루를 헛되이 보내기가 아까운 취준생으로서 여쭙고 싶어서 가져오게 되었습니다. 조언 부탁드리겠습니다.. 만약 해당 커리큘럼이 아닌 다른 조언이나 쓴 소리도 달게 받겠습니다. https://www.wanted.co.kr/events/pre_challenge_be_13?utm_source=facebook&utm_medium=da&utm_campaign=kr_career_web_da_application_edu_be&utm_content=pre_challenge_be_13-02&fbclid=PAAaaToYonDy_q-MfKmBheDExOIfqOEv0_jMSV7iaM_ludOG1EhzucsVaURq8_aem_AQhmPAvO5oqwf2nCO3d9k-Mcj-9s5gOItaS0LsJQZNUzDgocdFb5vseT_6_O6eP4NScLGdTcFzaoT7B4bH8cbRKE
개발자
#백엔드
#취준생
#개발자
#국비학원
#커리큘럼
답변 1
댓글 3
조회 96
2년 전 · 익명 님의 새로운 댓글
채팅 기능 client 가 null 값이 돼요
하나의 페이지에서 connectHandler를 작동하고 또다른 페이지에서 sendHandler를 작동하려고 하는데 이렇게 해서는 useChat()이 리렌더링 되면서 client 값이 초기화가 되더라구요 값을 유지하고 싶고 recoil에 client를 담는 건 불가능이라고 떠서... connectHandler와 sendHandler를 다른 hooks로 분리하는 방법도 생각해봤는데 그러면 또 client값이 connect한 값이 아니더라구요 무슨 방법이 있을까요? 제발 도와주세요 ㅠㅠ (한 페이지에서 connectHandler, sendHandler, disconnectHandler 실행하면 잘 작동합니다!) import { CompatClient, Stomp } from "@stomp/stompjs"; import { useRef } from "react"; import { useRecoilState } from "recoil"; import { inputMessageState, messageState } from "../../states/chatting"; export function useChat() { const [messages, setMessages] = useRecoilState(messageState); const [inputMessage, setInputMessage] = useRecoilState(inputMessageState); const token = localStorage.getItem("accessToken"); // 채팅 연결 구독 const client = useRef<CompatClient>(); const connectHandler = () => { client.current = Stomp.over(() => { const sock = new WebSocket("wss://m-ssaem.com:8080/stomp/chat"); return sock; }); client.current.connect( { token: token, }, () => { client.current && client.current.subscribe(`/sub/chat/room/1`, onMessageReceived, { token: token!, }); }, ); }; const onMessageReceived = (message: any) => { setMessages((prevMessage) => [...prevMessage, JSON.parse(message.body)]); }; // 채팅 나가기 const disconnectHandler = () => { if (client.current) { client.current.disconnect(() => { window.location.reload(); }); } }; // 채팅 보내기 const sendHandler = () => { if (client.current && inputMessage.trim() !== "") { client.current.send( `/pub/chat/message`, { token: token, }, JSON.stringify({ roomId: 1, message: inputMessage, type: "TALK", }), ); setInputMessage(""); } }; return { connectHandler, disconnectHandler, sendHandler, }; }
개발자
#react
#chatting
#stompjs
답변 1
댓글 8
조회 239
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
조회 212
2년 전 · 커리어리 AI 봇 님의 새로운 답변
utm 가상환경을 통해 우분투 설치 후 커널 컴파일 오류
안녕하세요, 전공수업 때문에 가상환경으로 우분투 설치 후 커널을 컴파일 해야되는 상황입니다. 제 노트북이 m1칩 맥북이라 수업에서 권장한 vm 웨어는 사용하지 못했고 구글링 해보니 utm이 m1칩 맥북에서도 사용할 수 있다길래 메모리4기가 디스크 56기가정도로 설정하고 모든 이전 과정을 순조롭게 마치고 make -j $(nproc) 명령어를 통해 컴파일에 들어가면 계속 메모리 부족으로 에러가 납니다. 디스크를 더 할당해야되는걸까요..? 디스크 확인해보면 다 쓰지도 않은 것 같습니다..어떻게 해결해야될까요? 혹시 다른 가상환경 프로그램 추천해주실것 있으시면 부탁드립니다.
개발자
#utm
#가상환경
#가상머신
#우분투
#커널
답변 1
댓글 0
조회 412
2년 전 · 손정현 님의 댓글 업데이트
리액트에서 타입스크립트 사용할 때 이런 경우 타입을 어떻게 줘야할지 모르겠습니다
리액트와 타입스크립트를 연습해보려고 혼자 토이프로젝트를 만드는 중인데 어떤 타입을 지정해줘야 할지 모르겠어서 질문올립니다. 혹시 더 자세한 설명이 필요할 것 같으면 댓글부탁드려요! 상황) 리액트, 타입스크립트를 사용하는 프로젝트에서 부트스트랩 모달을 사용하려고 합니다. 사진1번이 모달을 포함하고있는 부모컴포넌트, 사진2번이 모달컴포넌트 인데 부모컴포넌트에서 모달컴포넌트로 show, onHide라는 2개의 props를 넘깁니다(부트스트랩에서 지정해놓은 프롭스입니다.) 부모컴포넌트에는 모달의 표시 여부를 관리하는 const [showEmptyInputModal, setShowEmptyInputModal] = useState(false); 이라는 상태값이 있고 그게 각각 props로 넘겨지게 되는 것 같습니다. 여기서 문제) 그런데 사진2번에 넘겨주는 props의 타입을 어떻게 설정해야할 지 모르겠습니다... 일단 any로 하면 작동은 되긴하는데ㅠㅠ any는 최대한 쓰지 않는게 좋다고 해서요 사진4번의 빠른 수정을 보면 이런 옵션들이 있던데 unknown이나 never를 사용하면 그 props를 사용하는 곳들에서 에러가 납니다. any를 사용하거나 빠른 수정의 옵션 중 eslint 규칙을 무시하는 선택지밖에 없는 걸까요? state와 setState를 실행하는 함수 props로 넘기려면 타입을 어떻게 줘야하나요...!
개발자
#react
#typescript
답변 2
댓글 3
추천해요 2
조회 385