일 년 전 · 백승훈 님의 답변 업데이트
백엔드에서 데이터가공도 하나요?
저는 주니어개발자입니다 제 방식은 백엔드는 로직처리나 쿼리결과를 프론트로 보내고 프론트에서 데이터를 화면에 보이기쉽게 가공해서 보이는방식으로 하는데 지금다니는회사 프로젝트에서 이중중첩반복문을 사용해서 json형태로 만들고 화면에선 그대로 보여주는 방식을 하라고합니다 이중중첩반복문 자체도 좋지않을뿐더러 데이터가공을 백엔드에서 할때 데이터가많으면 서버부하가 나지않나요? 그리고 프론트에서 객체리스트로 2차원배열형태를 사용하는걸 보통 개발자들은 좋아하지않나요? 특히 그래프나 통계를 낼때 데이터들을 분류해서 꺼내는작업을하다보면 객체리스트형태로 할수밖에없던데 이렇게하지말고 데이터를 동적(데이터값이 바뀌어도 수정할필요없이)이 아닌 정해진 변수로 값을 꺼내도록 하라는데 이게맞나요..?
개발자
#백엔드개발
답변 1
댓글 0
조회 195
일 년 전 · 익명 님의 질문 업데이트
닫힌 질문 | 취업하는거 저만 쉽나요? 많은 의견 부탁드립니다.
먼저 죄송합니다. 좀더 많은 분들에게 피같은 조언을 얻고 싶어서 어그로를 끌었습니다. ============================================================= 질문에 앞서 제 상황에 대한 간략한 소개를 하자면, 저는 비전공자로 코로나 시기에 국비지원과정으로 개발 공부를 시작했습니다. 2020 년 초에 시작했으니 어찌보면 나름 선발 주자 였던것 같습니다. 강남에서 들었고 누구나 신청만 하면 들을수 있는 그저그런 교육을 7개월간 들었습니다. 개발이 처음이었던 제게 스프링은 너무나 어려워서 코드를 따라치는 수준에 불과한 실력으로 수료를 하게됩니다. 대부분 국비학원이 그렇듯 제가 다니는 학원에서도 취업 연계를 해줬고 합격한 곳도 있었습니다. 하지만 반복문도 원하는 대로 만들지 못하는 제 자신을 보며 입사를 포기하고 공부를 더 해야겠다는 결정을 해버리고 맙니다. 그렇게 2년을 알고리즘 공부하고 불합격하고 인강듣고 등등을 반복하다가 2023 에 기업과 채용연계를 해주는 부트캠프를 수료했습니다. 그래도 꾸준히 공부를 해왔고 알고리즘 문제를 풀면서 자바 언어가 익숙해졌기 때문에 부트캠프는 큰 어려움 없이 들을 수 있었습니다. 이전 부트캠프에서는 수업따라가기도 벅찼지만 2023년에 들은 부트캠프에서는 이전 부트캠프에서의 상위권에 있던 학우들의 포지션이어서 나름 의미있는 시간이었습니다. 부트캠프 수료가 끝나고 기업의 채용 프로세스에서는 아쉽게도 컬쳐핏 면접에서 불합격결과를 받았습니다. 같이 수업을 듣는 학우들중 자바를 처음 써보거나 개발에 대한 역량이 떨어지는 사람들도 있었는데 그중 붙은 사람들도 꽤 있어서 정말 힘든 시기를 보냈습니다. 지금도 그 회사 사옥이 있는 방향만 봐도 피가 거꾸로 솟습니다.... 서론이 길었습니다. 제가 여쭤보고 싶은 질문은 다음과 같습니다. Q : 다시 백엔드 자바 웹개발자로 취준을 하고 있는데 잘하고 있나 하는 의구심이 듭니다. 그래서 최근에는 토이프로젝트의 성능 고도화를 하고 있습니다. 이력서에 성과 위주 수치화해서 작성해야한다는 소리가 많아서 해보려고 하는데, 수치화 <- 이놈이 만만치 않습니다. 수치화를 하려면 내가 ~~ 를 해서 몇 ~~ 의 성과가 나왔다. 식이 되어야한다고 생각하는데 그럼 성능 개선을 해서 비교된 수치를 작성해야한다는 소리가 됩니다. 여기저기 뒤지고 고민하고 공부하다보면 할수는 있겠지만 적지않은 시간이 소모될것 같습니다. 그렇다면 차라리 그냥 이력서나 포폴에 기존에 가지고 있는 역량들을 잘 다듬어서 어필하는게 나을까요? 처음 다른 분들의 질문을 봤을때 현직자 분들의 답변을 받을 수 있어서 놓칠 수 없는 기화라고 생각하고 질문글을 작성하고 있는데 막상 쓰다 보니 그냥 계속되는 불합격 넋두리 글인가 하는 생각도 드네요 😢 요새는 빨리 경기가 좋아져서 일자리가 좀 많아졌으면 좋겠다는 생각 뿐이네요. 😂
개발자
#취준
#백엔드
#자바
답변 1
댓글 0
보충이 필요해요 5
조회 440
2년 전 · 제승완 님의 새로운 댓글
파이썬 어디까지 리스트 인프리헨션을 적용까요?
안녕하세요. 파이썬을 사용하다 문득 궁금하여 질문을 남겨 봅니다. 파이썬을 사용하다 보면 단순 반복문을 사용할 때 보다 리스트 인프리헨션을 활용하거나, map함수를 사용할 때 처리 속도가 훨씬 빠르단 것을 알 수 있습니다. 이 때, 반복문의 중첩 수가 늘어 날수록 단순 중첩 반복문이 압도적으로 처리 속도가 느리게 나오는 경우가 있고, 이를 위해 조금 가독성이 떨어지지만 map이나 인프리헨션을 사용하곤 합니다. 제가 궁금한 것을 반복문의 처리 속도가 크게 차이가 없을 것 같은 적은 반복의 경우에도 인프리헨션을 사용하는 것이 좋을까요? 아니면 단순 반복문을 사용하여 가독성을 높이는 것이 좋을까요? 다음 예시는 SOP의 Minterm을 찾는 알고리즘 입니다. 총 반복 수는 16회 밖에 되지 않지만, 인프리헨션을 사용했을 때 가독성이 조금 떨어지는 것 같습니다. R, C = 4, 4 # (1) 인프리헨션 minterms = [format(i, '02b') + format(j, '02b') for i in range(R) for j in range(C) if map[i][j] == 1] # (2) 단순 반복문 for i in range(R): for j in range(C): if map[i][j] == 1: minterm = format(i, '02b') + format(j, '02b') minterms.append(minterm) 이런 경우에도 인프리헨션을 활용하는 것이 맞을까요?
개발자
#python
답변 2
댓글 1
추천해요 13
조회 3,149
2년 전 · 연양갱 님의 답변 업데이트
JavaScript 코드인데 제가 정확하게 이해한 건지 잘 모르겠습니다.
``` let a = 10; const func = () => { for (; a > 0; a -= 1){ console.log("a > ", a); } }; func(); func(); /* 실행 결과: a > 10 a > 9 a > 8 a > 7 a > 6 a > 5 a > 4 a > 3 a > 2 a > 1 */ ``` for문의 로직을 콘솔에 출력시키는 func 함수를 두 번 호출했는데 실행 결과는 for 반복문이 한 회분만 출력이 됐습니다. ``` const func = () => { for (let a = 10; a > 0; a -= 1) { console.log('a > ', a); } }; func(); func(); /* 실행 결과: a > 10 a > 9 a > 8 a > 7 a > 6 a > 5 a > 4 a > 3 a > 2 a > 1 a > 10 a > 9 a > 8 a > 7 a > 6 a > 5 a > 4 a > 3 a > 2 a > 1 */ ``` 그래서 최상단에 있는 a 변수를 지우고 for문에 'let a = 10'을 집어넣었더니 이렇게 for문 로직이 두 번 출력되었습니다. 왜 이런 차이가 날까 곰곰이 생각해봤는데 func 함수 바깥에 생성했던 변수 a는 let 키워드로 생성이 되어 블록 레벨 스코프가 적용되서 해당 반복문이 한 번만 실행된 것으로 이해했는데 이게 맞나요?
개발자
#javascript
#스코프
답변 1
댓글 1
조회 225
일 년 전 · 익명 님의 질문 업데이트
비전공자 입니다! 공부방법을 어떻게 해야 할까요?
안녕하세요! 저는 백엔드 개발자를 희망하는 비전공자이고 대학생입니다! 현재 자바를 공부 하고 있고 그 다음에는 스프링을 공부를 할 예정으로 계획을 잡고 있습니다! 졸업 후에는 부트캠프나 국비지원을 다니고 취업을 하고 싶은 생각인데 부트캠프나 국비지원을 가기 전 구체적으로 어떤 것을 하면 좋을지 잘 계획이 인잡혀 질문을 올립니다! 선배님분들 부트캠나 국비지원을 가기전에는 어떻게 공부를 하면 좋을까요?? 자바는 현재 무료 강의를 보면서 기본 문법 (반복문, 배열 등등)을 익히는 중인데 자바와 스프링도 구체적으로 어떻게 공부를 하면 좋을까요?? 스프링을 공부 한 이후에는 어떤 것을 공부를 해야 하는지도 알려주시면 감사하겠습니다!
개발자
#java
#sping
#backend
답변 2
댓글 2
추천해요 3
조회 897
2년 전 · 김재성 님의 새로운 답변
primary key 중복 데이터를 어떻게 처리하는게 좋을까요?
안녕하세요, 양이 많은 자료를 for 반복문으로 정리해서 테이블에 넣으려고 합니다. 그런데 이 테이블의 컬럼이 프라이머리키라서 중복값이 들어가면 에러가 떠요 ㅠㅠ 그래서 중복을 제거하려고 하는데 제거할 때 두 개 컬럼을 합쳐서 primary key로 지정하는 게 좋을지 아니면 코드로 중복체크 하는 게 좋을지 고민이 됩니다.. 사실 fetchall로 데이터 가져온 다음에 중복값이 있으면 continue 처리해도 되긴 하는데, 제가 원하는 방향이 for 반복문 안에서 sqlite 에러를 가져와서 continue 처리하는 것이라서요!
개발자
#sql
#primary-key
#duplicate-key-error
답변 1
댓글 0
조회 304
2년 전 · 커리어리 AI 봇 님의 새로운 답변
데이터 수집 시스템 조언 부탁드립니다..
안녕하세요. 현재 데이터분석가 인턴으로 회사에 들어간지가 한달이 조금 넘었습니다. 현재 회사에서 분석이 아닌, 직접 데이터를 수집하는 작업을 하고 있습니다. 제가 분석만 하다보니, 데이터를 수집하고 저장하는 작업을 처음해보고 사수도 따로 없다보니 조언을 구할 곳이 없어서 이렇게 게시물로 조언을 요청드립니다.. 지식이 부족해 다소 어렵게 설명을 드려도 이해 부탁드리며, 제 글을 보고 “저 친구는 왜 저렇게 비효율적으로 하지? 이렇게 하면 좋을텐데”라는 생각이 드신다면 바로 댓글이나 쪽지 부탁드립니다. 제가 처음 올려봐서 쪽지 기능이 있나 모르겠네요.. 먼저, 간단하게 제가 진행하고 있는 데이터 수집 절차를 설명드리겠습니다. 1. 컬럼이 한개인 4GB가 조금 넘는 데이터를 수집 코드에 불러와야 한다. 해당 데이터에는 도메인 주소가 담겨 있다. 2. 내 수집 코드는 불러온 데이터를 한행씩 조회하면서 수집을 진행한다. 3. 한 행에 있는 도메인 주소에 순서대로 http 접속을 해서 해당 도메인 주소가 사전에 설정한 특정 조건을 만족하면, 해당 도메인 주소와 사이트에 접속해서 추출한 정수형 값을 DB에 저장한다. 4. 즉, 4기가의 데이터를 불러와 한 행씩 조회해가면서 실시간으로 데이터를 db에 수집하는 코드다. 5. 24시간 동안 코드를 돌리는 수집 예상 기간은 3개월 정도이다. 다음으로는 조금 구체적인 진행 사항을 말하겠습니다. 밑에서부터 길어지니, 바쁘신 분들은 위에 주요 절차만 보시고 조언 주시면 감사하겠습니다. 1. 파이썬만 사용할 줄 알기 때문에, 파이썬을 사용하여 class로 만들어 수집 코드를 짰다. 2. 데이터의 양이 많아서 메모리 부족 오류가 빈번하게 나타나, 하둡과 아파치 스파크를 이용해봤다. 내가 조회할 데이터 파일을 하둡 HDFS에 업로드 한다음에, 아파치 스파크 클러스터를 구축했다. 그리고, pyspark 모듈을 이용해 파티션을 나눠 데이터를 불러왔다. 파티션으로 받아온 값을 리스트로 변환하여 순서대로 해당 도메인 주소로 접속하는 반복문을 진행하면서 데이터를 수집했다. 즉 파티션으로 데이터를 쪼개서 1번 파티션부터 n번 파티션까지 각각 파티션 내부에 도메인 주소 리스트가 반복문을 진행된다고 보면 된다. 각 파티션이 다른 파티션으로 전환되는 과정도 반복문으로 처리했다. 하나의 파티션 마다 내가 만든 class(도메인 리스트를 인자로 받는다)가 한번씩 실행된다고 보면 된다. 3. 수집 속도가 너무 느려서 class에 있는 수집 메소드를 멀티 스레드 방식을 이용해서 수정해주었다. 수집 속도가 매우 빨라졌다. 4. 기존에는 aws의 클라우드 db(dynamo db)를 사용했지만, 과금 문제로 인해 로컬에 db를 설치하기로 했다. 쓰기 속도가 매우 빠른 redis db를 선택했다 5. 위에서 설명한 반복문을 돌면서 조건에 일치한 도메인 주소와 정수 값은 한 행씩 redis db에 key(도메인주소) value(정수값) 형식으로 저장하도록 코드를 만들었다. 이 과정도 class 내부에 포함되어 있다. 6. redis는 on memory db이기 때문에 대용량 데이터를 영구적으로 저장하고 분석하기에 적합하지 않다고 판단해서 1시간마다 redis에 있는 데이터를 postgresql db로 옮겨주는 코드를 따로 만들었다. postgresql db에 미리 redis에서 옮겨갈 테이블을 생성해두었다. redis의 key였던 도메인 이름을 첫 번째 필드에 프리이머리 키로 저장했고 value인 정수 값을 2번 째 필드에 값으로 넣어줬다. 그리고, 마지막 필드에는 자동으로 데이터가 저장될 때, 현재 시간이 넣어지게 테이블을 만들었다. 총 3개의 열로 구성된 테이블에 1시간에 한번씩 redis에 저장해두었던 데이터가 옮겨간다고 생각하면 된다. 7. 처음 redis에 데이터를 저장할 때 ttl을 설정해서 1시간 10분이 지나면 redis db에서 데이터가 자동으로 소멸되도록 설정했으며, 만약 postgresql에 중복된 데이터가 들어간다면 자동으로 무시하고 다음 작업을 진행하도록 테이블 설정을 해줬다. 즉, 실시간으로 데이터가 수집되고 자동으로 시간이 지나면 데이터가 소멸되는 redis db에서 1시간마다 한번 postgresql로 옮겨주는 코드를 따로 만들었다. 8. 수집 코드를 spark-submit 명령문으로 실행해주었다. spark-submit 명령어 앞에 nohup을 해줘서 백그라운드에서 코드가 실행되게 해줬고, 로그 결과를 따로 파일을 만들어 저장되도록 했다. 그리고 파이썬 실행 파일 내에서도 로그를 입력하는 코드를 만들어서, 도메인의 http 접속이 성공했는지의 여부를 로그 파일에 실시간으로 입력되도록 했다. 예를 들어, http 접속이 잘 된 도메인 주소는 로그에 “INFO 도메인 주소: success” 이렇게 기록하고, 타임아웃 에러, 접속 에러, redirect 오류, db 저장 오류는 모두 종류별로 예외 처리해서 로그에서 기록되도록 코드를 구성했다. 파이썬에서 자체적으로 로그를 기록한 파일은 수집코드를 실행하면서 파티션이 전환될 때마다 하나씩 생성된다. 이제 이렇게 제가 실행할 코드는 24시간 내내 수집을 진행하는 코드 하나와 1시간에 한번 데이터를 옮겨주는 스케줄러 코드로 총 2개가 됩니다. 저는 이 코드와 수집 환경을 만들기 위해 모두 도커를 활용하였으며, 사용한 컨테이너와 부가 설명은 다음과 같습니다. spark-master: 하둡과 스파크 클러스터를 구축하는 컨테이너로 standalone모드로 spark-summit 명령어로 파이썬 파일을 실행해주었다. --conf 옵션으로 메모리, 하트비트 간격, 파티션 수 를 지정해주었다. 스파크와 하둡을 처음 사용해봐서 약간의 개념만 있는 상태에서 돌려보니 아직도 세부 설정을 제대로 이해하지 못했다. 결국 worker를 1개 생성해서 파이썬 파일을 처리하도록 하였다. 현재 대다수의 오류가 이 컨테이너에서 발생한다. redis: spark-master에서 실시간으로 실행되고 있는 수집 코드에서 선별된 데이터들이 redis 컨테이너에 있는 redis db에 저장된다. postgresql: 1시간에 한번 redis에 있는 데이터를 옮기기 위해 postgresql 컨테이너를 생성했다. schduler: 1시간에 한번 postgresql 컨테이너에서 작동하고 있는 postgresql db에 redis 데이터를 옮겨주기 위한 스캐줄러 코드를 실행할 컨테이너다. redis-monitor: 실시간으로 redis db를 모니터링 하기 위해 redis-monitor 컨테이너를 생성하여 웹에서 모니터링 툴인 Redis-Stat에 접속한다. postgre-monitor: 마찬가지로, 실시간으로 postgresql db를 모니터링 하기 위해 생성한 컨테이너로 웹에서 Pgadmin4를 사용할 수 있다. 이렇게 총 6개의 컨테이너를 생성하여 내 수집 코드를 실행했는데, 여기서 많은 문제가 발생했습니다. 제가 가진 의문과 문제를 나열하자면 다음과 같습니다. 1. 먼저, 수집 코드를 실행한 다음에 스케줄러 코드를 실행해주었는데, (서로 독립된 컨테이너에서 실행) 두 코드가 DB에 동시에 접속할 때, 충돌이 일어날 가능성이 있지 않을까? 2. 수집 코드를 실행하고 몇분이 지나면 터미널이 먹통이 되고, 코드가 더 이상 실행이 안되는 일이 빈번하게 발생한다. 너무 많은 자원을 사용하고 있어서 그런건가.. 컴퓨터 사양이 안좋아서 그런건가 원인을 잘 모르겠다.. 3. spark-submit 로그를 보면 내 노트북에서는 안그러는데, 대용량 파일을 불러오는 과정에서 파티션 별로 데이터를 정리할 때 오류가 빈번하게 발생한다 . executor가 통신이 안된다는 경고 메세지도 자주 나오고, 특히, Remote RPC client disassociated 라는 오류가 가장 많이 나온다. 내 컴퓨터보다 높은 사양의 클러스터를 구축하려고 해서 그런가. 검색해보니 네트워크 문제이거나, 컨테이너에 할당한 자원을 초과해서 그런거라고 한다. 대용량 데이터를 불러오는 다른 방법을 강구해봐야되나 고민하고 있다. “그래서 요점이 뭐야” 라고 물어보신다면, 저는 현직에서 활동하고 계신 데이터 엔지니어, 백앤드 개발자 분들이 제 글을 본다면 “아니 굳이 왜 그렇게 하지? 이렇게 쉬운 방법이 있는데” 또는 “저기서 이렇게도 해봤나?, 이러면 안정적으로 코드를 돌릴 수 있을텐데”라는 반응으로 갈릴 것 같다고 생각합니다.
개발자
#데이터베이스
#데이터수집
#아파치스파크
#redis
#python
답변 2
댓글 0
추천해요 7
조회 908
2년 전 · 커리어리 AI 봇 님의 새로운 답변
자바 스크립트 반복문 질문 드립니다!
반복문 공부중입니다! 책으로 공부중에 예제에 br태그 뒤에 슬래쉬가 있는데, 이부분이 이해가 가지 않습니다. 두개는 다른코드인데 html에 나오는 값은 똑같습니다. 이유가 궁금합니다.
개발자
#javascript
답변 2
댓글 0
조회 134
2년 전 · 커리어리 AI 봇 님의 새로운 답변
리액트에서 closest 써도 컨벤션에 어긋나지 않을까요?
아래처럼 상위 노드를 찾기 위해 이벤트 버블링을 하려고 하는데요.. closest와 querySelector와 같은 메서드를 사용하면 구조에 종속적인 코드가 되기 때문에, 구조에 종속되지 않는 방법을 찾아보는 것이 좋다는 내용을 어디서 봐서 ㅠㅠ 고민이 됩니다. closest를 사용하지 않고 반복문으로 생성되는 컴포넌트마다 onClick 함수를 추가하는 방식이 더 나을까요? 의견 좀 주세여 ㅠㅠ
개발자
#queryselector
답변 3
댓글 0
조회 114
2년 전 · 장성호 님의 답변 업데이트
c언어에서 반복문 반복횟수
국비지원학원을 다니고 있습니다. 지금 c언어로 문제를 계속 풀고있는데 반복문에 경우 제가 푼 코드가 답은 똑같이 나오지만 반복 횟수가 너무 많다고 합니다. c언어에서 반복문의 경우 반복횟수가 많이 중요한가요?
개발자
#c언어
#반복문
#국비지원
답변 2
댓글 0
보충이 필요해요 1
조회 294
2년 전 · 강동희 님의 답변 업데이트
반복문 대입연산자 도와주세요
for문에서 태그를 반복할 때 대입연산자를 쓰던데 이해가 가지 않는 부분이 있어요 var a='<select>'; for(var i = 1; i <=28; i++){ a += '<option>'+ i +'</option>'; } a += '</select>'; document.write(a); 이거인데요 for문 안에 있는 a += '<option>'+ i +'</option>'을 풀어쓰면 a = '<select>'+'<option>'+ i +'</option>'인 건데 왜 <select>태그는 반복이 되지 않는 건가요? a += '</select>' 이것도 왜 <select> </select>로 출력되지 않고 </select>인 건지 설명 부탁드립니다 도와주세요ㅜㅜ
개발자
#javascript
답변 3
댓글 1
추천해요 1
조회 227