#break

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

일 년 전 · 익명 님의 새로운 댓글

우분투에서 pip install 시, 다음과 같은 오류가 발생합니다.

안녕하십니까 선배님들. 현재 AWS EC2에서 안드로이드 어플리케이션 용으로 백엔드 서버를 구축하는 도중, 다음과 같은 오류를 맞이했습니다. 현재 사용하는 ubuntu는 24.04 LTS 버전입니다. 도무지 해결 방안을 찾지 못해서 이렇게 조언을 구하고 싶습니다. 감사합니다. pip install git error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz, which will manage a virtual environment for you. Make sure you have pipx installed. See /usr/share/doc/python3.12/README.venv for more information. note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification.

개발자

#서버

#ec2

#ubuntu

답변 2

댓글 2

추천해요 1

조회 831

일 년 전 · 백재욱 님의 질문

백엔드 테스트 와 머신러닝 테스트가 따로 하면 잘되는데 같이 하면 오류가 발생합니다.

저희 프로젝트의 기본적인 골자는 osmd라고 하는 mxl포맷 파일을 악보 형태로 렌더링해주는 라이브러리를 사용하구요, 스트림되는 오디오를 듣고 그걸 머신러닝 파이썬 코드가 처리한 뒤 timestamp라는 값을 반환하면 그에 맞춰 악보의 현재 위치를 가리키는 cursor를 움직이는 프로젝트입니다. 또한 오디오 스트림을 넘겨받기 위해서 aws에다가 쿠렌토 미디어 서버를 만들었구요, 머신러닝 코드는 로컬에서 돌아가고 있습니다. 각기 따로 스트림을 처리했을때(stdin stdout) 잘 되는 것을 확인했습니다(https://github.com/Kurento/kurento-java 쿠렌토 서버의 구현은 이 레포를 참고해서 만들었습니다) 또한 import sys def main(): while True: line = sys.stdin.readline() if not line: break output = line.strip() + '2' print(output) if __name__ == "__main__": main() 이 예제를 활용해서 테스트해봤을 때 문제없이 작동했습니다(쿠렌토) 머신러닝 코드는 wav 파일을 버퍼 잘라서 stdin에 집어넣고 테스트해보았습니다 작동은 둘 다 문제없이 작동했지만 같이 이어서 하게되면 Failed to write data: The pipe is being closed라는 오류 로그가 찍힙니다. (요약) 1. 백엔드에서 Kurento Media Server(webrtc) 인풋 들어온거에 아무거나 붙여서 반환하는거로 테스트 해봤을 때 문제 없이 스트림 처리가 되는 것으로 확인 됨 2. 머신러닝 쪽에서 오디오 스트림 모드를 만들고 stdin으로 들어온 스트림에 대한 결과값을 stdout으로 반환하는 것이 확인 됨 3. 그렇지만 둘을 이제 갖다붙이면 위 에러 로그 발생 이유 아시는 분들은 알려주시면 감사드립니다. 두서없이 장문을 써서 이해가 안되는 부분들 말씀해주시면 설명드리겠습니다. 감사합니다.

개발자

#backend

#machinearning

답변 0

댓글 0

조회 52

일 년 전 · 이영준 님의 질문

iOS navigationDestination 버그

File Control 예제를 만들었는데요. navigationDestination를 실기기에서 사용하면 버그가 생깁니다 하위 폴더로 들어가면 그런데 왜그런질 모르겠어요 ㅠㅠ 로그를 찍거나 Break point 걸면 NavigationLink가 렌더링 되는 것 같은데 말이죠 ㅠㅠ 시뮬에서는 잘됩니다. Simulator: 17.2 Device: 16.3.1 Example: https://github.com/ios-swift-examples/iOSFileManagerExample/blob/main/iOSFileManagerExample/screen/FileListScreen.swift

개발자

#ios

#swiftui

#navigation

답변 0

댓글 0

조회 62

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

ESLINT 어떤 것을 수정해야 내용처럼 fix 되는 현상을 막을 수 있을까요?

안녕하세요~ eslint, prettier에서 제가 무엇을 잘못했는지 계속 아래처럼 코드가 수정되고 있습니다. const res = (await request) < User > (context, `/users/${id}`); 어떻게 하면 고칠 수 있을까요? 1. (await request) 소괄호 제거 2. < User > 제너릭 사이 공백 제거 결론: const res = await request<User>(context, `/users/${id}`) 로 만들고 싶습니다.. 아래는 eslint 적용한 내용 입니다. ``` //eslint.config.js module.exports = { env: { browser: true, es2021: true, }, extends: [ 'plugin:react/recommended', 'airbnb', 'plugin:storybook/recommended', ], parser: '@typescript-eslint/parser', parserOptions: { project: ['./tsconfig.json'], ecmaVersion: 2018, sourceType: 'module', createDefaultProgram: true, }, plugins: ['react', '@typescript-eslint', 'prettier', 'import'], rules: { 'react/react-in-jsx-scope': 'off', 'react/jsx-props-no-spreading': 'off', 'import/prefer-default-export': 'off', 'implicit-arrow-linebreak': 'off', 'react/jsx-filename-extension': [ 2, { extensions: ['.js', '.jsx', '.ts', '.tsx'], }, ], 'object-curly-newline': [ 'error', { ObjectPattern: { multiline: true, minProperties: 2, }, ImportDeclaration: 'never', ExportDeclaration: { multiline: true, minProperties: 3, }, }, ], 'import/extensions': [ 'error', 'ignorePackages', { js: 'never', mjs: 'never', jsx: 'never', ts: 'never', tsx: 'never', }, ], 'import/order': [ 'error', { alphabetize: { order: 'asc', }, groups: [ 'builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type', ], }, ], 'import/no-unresolved': 'off', }, settings: { 'import/resolver': { typescript: { alwaysTryTypes: true, }, node: { paths: ['src'], }, }, }, }; ```

개발자

#eslint

#prettier

답변 0

댓글 0

조회 84

2년 전 · 익명 님의 질문

c언어 함수 코딩 질문

#pragma warning(disable : 4996) #include<stdio.h> #include<conio.h> int add(int a, int b) { int add = 0; int i = 0; printf("첫번째 정수: "); scanf("%d", &a); printf("두번째 정수: "); scanf("%d", &b); if (a < b) { for (int i = a; i < b + 1; i++) add += i; } else { for (int i = b; i < a + 1; i++) add += i; } printf("%d ~ %d의 누적합은 %d", a, b, add); return add; } int sub(int c, int d) { int sub = 0, sub1 = 0, sub2 = 0, i = 0; printf("첫번째 정수: "); scanf("%d", &c); printf("두번째 정수: "); scanf("%d", &d); if (c < d) { for (i = c; i < d+1; i++) { if (i % 2 == 0) sub1 += i; } printf("%d ~ %d의 짝수합 %d \n", c, d, sub1); for (i = c; i < d+1; i++) { if (i % 2 == 1) sub2 += i; } printf("%d ~ %d의 홀수합 %d", c, d, sub2); } else{ for (i = d; i < c+1; i++) { if (i % 2 == 0) sub1 += i; } printf("%d ~ %d의 짝수합 %d \n", c, d, sub1); for (i = d; i < c+1; i++) { if (i % 2 == 1) sub2 += i; } printf("%d ~ %d의 홀수합 %d", c, d, sub2); } return sub; } void swit() { int a = 0; int b = 0; int chack = 0; char ch; printf(" 1) 누적합 2) 홀짝합 3) 종료 --> "); scanf("%d", &chack); switch (chack) { case 1: add(a, b); break; case 2: sub(a, b); break; case 3:printf(" 종료 되었습니다 "); break; defult: printf(" error !! "); break; } } int main(){ int a = 0; int b = 0; int chack = 0; char ch; swit(); printf("계속하시겠습니까? (y/n)"); scanf("%s", &ch); } 이 부분에서 계속하시겠습니까? 이 질문에 'Y'나 'y' 를 넣으면 선택한 케이스를 반복하고 'N'이나 'n'을 넣으면 printf(" 1) 누적합 2) 홀짝합 3) 종료 --> "); scanf("%d", &chack); 이 구문이 나오게 하고 case 3이나 defult 가 나오게 되면 종료하는 프로그램 코드를 못하겠습니다 ㅠㅠ 도와주세요..

개발자

#c언어

답변 0

댓글 0

추천해요 1

조회 93

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

Airflow로 selenium 덱 생성 시 driver.quit()을 하면 무한 running 현상

안녕하세요. 혼자 airflow로 연습을 하던 중 문제가 발생하여 질문드립니다. 하나의 테스크로 selenium을 이용한 크롤링 코드를 구현했습니다. 크롤링 코드를 하나의 파이썬 파일로 실행하게 되면 이상없이 작동이 됩니다. 하지만 task로 등록하여 실행을 할 경우 driver.quit()을 만나면 break로 이동하지 않고 그 상태에서 계속 running인 현상이 일어납니다. 이 이유에 대해서 알고 계신분 도와주세요 !!

개발자

#airflow

#selenium

답변 1

댓글 0

조회 185

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 봇 님의 새로운 답변

npm install 안돼는 문제 ..

안녕하세요 스타트업에 입사한 신입 프론트엔드 개발자입니다.. 혼자개발해야하는 환경에 있는데 react 코드를 받앗는데 npm install 자체가 안되고 package-lock.json, node_modules삭제하고 다시깔아도 그대로 에러가나고 npm audit fix --force까지 사용해봤지만 무슨 문제인지 모르겠습니다.. changed 1 package, and audited 1494 packages in 4s 250 packages are looking for funding run `npm fund` for details 6 high severity vulnerabilities To address all issues (including breaking changes), run: npm audit fix --force Run `npm audit` for details. 계속 이런식으로 반복되네요.. ㅠㅠ

개발자

#node.js

#react

답변 2

댓글 20

조회 1,308

2년 전 · 유재영 님의 답변 업데이트

CSS) 띄어쓰기 없이 긴 한글 텍스트의 오버플로우 문제

안녕하세요. 텍스트가 길어질 때 단어 단위로 줄바꿈을 해주고 싶습니다. CJK의 경우 word-break: keep-all; 을 쓰면 된다고 알고 있어서 적용해 봤는데 문제는 한글 텍스트가 띄어쓰기 없이 길~어질 경우에는 텍스트가 박스를 튀어나가는 오버플로우가 발생하더라고요.. word-break: break-all; 을 쓰면 오버플로우 문제는 해결되지만 가독성을 위해서는 단어 단위 줄바꿈이 좋다고 들어서요. 단어 단위 줄바꿈을 유지하면서, 띄어쓰기 없어도 오버플로우가 발생하지 않는 방법은 없을까요.?

개발자

#css

답변 1

댓글 1

조회 246

2년 전 · 엄홍재 님의 새로운 답변

python(while, break, class) 문제 풀어주실 수 있나요?

1. (첫 번째 사진이 문제 내용입니다.) 사용자 정의 함수를 만들고 함수안에 While문과 break를 활용하여 아래 조건과 같은 프로그램을 만드세요. 2. (두 번째 사진이 문제 내용입니다.) 아래의 조건에 맞는 클래스 Car를 만들고, 출력결과와 같이 객체를 생성하세요. 3. (세 번째 사진이 문제 내용입니다.) 2 에서 객체를 생성하고 <출력결과>와 같이 메서드를 호출하세요.

개발자

#python

#문제풀이

#while

#break

#class

답변 3

댓글 0

보충이 필요해요 8

조회 319

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

제 진로방향 알맞게 설정한 걸까요?

안녕하세요, 퍼블리와 레몬베이스의 APM 직군에 지원하기 위해 준비중인 취업준비생입니다. 먼저 제 질문의 요지는 "제 가치관, 성향, 미래 계획을 고려하여 설정한 APM이라는 초기 목표가 적절한가?"에요. 제가 앞서 언급했듯 특정 기업의 APM을 준비하고자 하는 이유는 크게 세가지입니다. 첫번째, (지금으로서는) 최종 커리어 목표인 UX Writer가 되기 위해서입니다. UX Writer가 되기 위해 필요한 여러 능력 중 메시지 관리, 텍스트에 대한 숙련도는 충분하지만 프로덕트에 대한 총체적(디자인, 개발, 기획 등) 이해와 스타트업 정신은 많이 부족한 상태입니다(아직 경력이 없습니다). PM으로 향후 7-10년간 커리어를 쌓고 UX Writer가 되는 것이 제가 생각한 그림이에요. 두번째, 제 가치관과 성향입니다. 저는 제가 필요성과 혁신성에 공감하지 못하는 제품/서비스를 위해서 일할 수가 없는 성격입니다. 그 정도가 조금 심해 입사지원하고자 하는 회사를 찾는 게 고역이더라고요. 고르고 고르다보니 APM을 뽑는 비전이 공감되는 회사가 두 군데로 추려졌습니다. 마지막 이유는 제 역량입니다. 대학을 졸업하기까지 특정 포지션을 꾸준히 취업준비하기보단 제 마음이 동하는 활동을 위주로 해왔습니다. 그렇다보니 포트폴리오를 정리해보면 하나의 포지션으로 수렴된다기보다 이것저것 해본 어중간한 이미지가 강하더라고요. 그 프로젝트들의 공통점은 "제가 하고 싶었던 것"이고요. 제가 분석한 제 역량은 grade별로 high- 커뮤니케이션 능력, 텍스트 관리 능력, R&R을 분배하고 due date에 맞게 프로젝트를 진행시키는 매니징 능력 mid- breakthrough를 찾는 능력, agile한 프로세스와 스타트업 정신에 대한 이해도 low- 디자인, 개발에 대한 이해도가 현직자와 소통이 가능한 정도이며, 초급 수준의 구문을 다루는 SQL 능력과 데이터모델링에 대한 얕은 이해도 입니다. 이런 제 포트폴리오&역량과 가장 fit한 포지션이 당장으로선 PM밖에 없는 것 같아요. 다시 질문으로 돌아와, 저는 진로설계를 알맞게 한 것일까요? 사람마다 진로를 설정할 때 고려하는 우선순위가 다양한만큼, 본인의 관점대로 편하게 의견 부탁드려요. 제가 고려한 우선순위는 가치관>최종목표 순입니다. 역량은 제가 기르면 된다고 생각했어요.

PM/PO/기획자

답변 4

댓글 4

추천해요 8

조회 882