#컬럼

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

2달 전 · 코딩하는기린 님의 새로운 답변

Mysql Lock 관련

안녕하세요. 이번에 사내시스템을 오픈했는데, 고작 20명 정도가 한 테이블을 조회하는데 테이블이 Lock 걸리면서 사내시스템이 정상적으로 작동을 하지않아 보류하게 됐습니다. 여기서 질문입니다. 다른분들은 저희 회사 규모보다 훨씬 많은 이용자들이 방문하고 조회할것인데 테이블 조회 관리를 어떻게 처리하고 계신가요..? 테이블에 1년치 데이터만 이관을 해도 조회속도가 현저히 느려지고 작업속도가 굉장히 느려집니다.. 쿼리를 Limit과 offset을 사용하여 페이징처리까지 해도 워낙 Group By로 묶인 컬럼들이 많아서 조회가 너무 느려지는데 해결방법이 있을까요… 데이터 로우는 100만건 정도 있습니다 요약 1. 여러사람이 한 테이블을 조회할때 Lock을 어떻게 해결하는지? 2. 데이터가 많을때 어떤 최적화를 해야 처리속도가 빠를지? Gcp 2코어 8기가 사용중

개발자

#javascript

#mysql

#mybatis

#node.js

#express

답변 2

댓글 0

보충이 필요해요 1

조회 431

8달 전 · 이상래 님의 새로운 댓글

2년차 웹 개발자 고민

개발로 일을 시작한지 1년이 지났습니다. 하지만 시작하고 일을 너무 쉽게 생각했는지 아니면 일을 너무 쉬운걸 받았는지 입사하자마자 프로젝트를 시작했고 코드를 보고 따라치기만 하면서 1년을 보냈습니다. 그러다가 새로운 프로젝트를 받고 일을 진행했습니다. 조금씩 기존 코드에는 없고 비즈니스 로직을 보면서 db에 필요한 컬럼이 더 있을지 혹은 테스트 중 어떻게 에러가 발생할지 등 예상을 하면서 개발을 하다보니 기존에 했던 프로젝트보다 더 간단한 실수도 많아지는 상황입니다. 결국에는 자존감조차 떨어지면서 프로젝트에서 나오게 되고 개발업무 보다는 다른 일(문서 작성, 테스트 등등)을 하고 있습니다. 어떻게 보면 다른일과 개발공부를 진행하면서 연차를 더 쌓고 이직을 해야할지 아니면 지금 퇴사 후 중고신입으로 다시 시작하면서 프로젝트를 뛸 수 있는 곳을 가야하는지에 대한 고민이 많아서 질문드립니다.

개발자

#이직고민

#물경력

#자괴감

#개인공부

#개인프로젝트

답변 1

댓글 2

조회 96

9달 전 · ㅇㅅㅇ 님의 질문

Paging 관련 질문 있습니다.

jpa, pageable 활용하면 findall로 페이지에 속하는 데이터를 가져올 수 있다고 알고 있는데요. 1. repository 데이터가 변경돼서 예전 1페이지가 시간이 흐른 뒤 1페이지를 호출하면 다른 데이터가 나오게 돼서 데이터베이스 상태가 바뀌지 않도록 해야 된다고 GPT가 가르쳐 주는데 DATE 타입의 컬럼을 활용해서 소팅 하는 알고리즘의 경우는 어떻게 데이터베이스 상태가 바뀌지 않도록 하나요? 2. 유저1(최신순)과 유저2(추천순)가 서로 다른 알고리즘으로 Paging을 수행 할 때 Paging 객체를 유저 객체에 넣어서 기억 하나요?

개발자

#spring

#jpa

#pagable

답변 0

댓글 0

조회 36

10달 전 · 이승환(Ethan) 님의 새로운 답변

최근 개인 프로젝트를 만들고자하는데

spring을 이용해서 아디다스 쇼핑몰을 만드려는 중이고 쇼핑몰 기능은 물론, 게시판, 댓글, 관리자 페이지 기능 등등을 넣으려고 생각중입니다 근데 보니까 제품의 상세페이지는 한 제품당 jsp파일을 하나씩 생성해서 하드코딩으로 만들게 되더라구요..? 근데 너무 비효율적이고 시간이 많이 드는 작업이라고 생각되는데 혹시 현업에서는 이 제품들의 상세정보 (ex)신발의 사진, 설명, 사이즈 등등) 가 들어가는 상세 페이지를 하나씩 만드시는 건가요..? 아니면 상세 페이지틀을 먼저 잡아놓고 그 안에 들어가는 정보들을 db에 저장해서 컬럼명(제품 이름, 사진, 설명 등 )을 불러와서 보여주는 식으로 구현하시는건가요?! 혼자 프로젝트를 진행하고 있고 너무 궁금한게 많지만 의지만 앞선 느낌이라 조언 한번씩만 해주시면 감사하겠습니다ㅜㅜ

개발자

#java

#프로젝트

#spring

답변 1

댓글 0

조회 87

일 년 전 · 김도열 님의 답변 업데이트

mysql 실행계획 질문드립니다 (조인과 where문 조건 필터링 순서)

쿼리는 아래와 같습니다 EXPLAIN SELECT SUM(t.fee) FROM team t INNER JOIN student s ON s.student_id = t.student_id WHERE s.teacher_id = 3 AND t.team_unit in ('SOCCER', 'COOKING'); teacher 테이블과 student 테이블이 있고, student 테이블이 teacher 테이블의 id를 외래키로 갖고 있습니다 student 테이블과 team 테이블이 있고, team 테이블이 student 테이블의 id를 외래키로 갖고 있습니다 위 쿼리는 student와 team을 조인해서 특정 teacher_id와 team _type을 갖는 로우에 대해 fee 컬럼을 sum하는 쿼리입니다 조인은 nested loop 조인 방식으로 돌아갑니다 (인터넷에서 본 예제를 조금 변행해서 문법이 틀릴 수도 있습니다 양해 부탁드립니다) 사진은 해당 쿼리의 실행계획입니다 실행계획 역시 제가 원래 예제에서 약간 변형한거라 실제와 틀린 부분이 있을 수 있습니다 질문: 아래 두 가지 쿼리 실행 동작 과정 중에 어느 것이 맞는 건가요?? 1번 1. 두 테이블을 nested loop로 조인한 뒤 2. teacher_id가 3이고 team_unit이 SOCCER와 COOKING인 로우를 가져온 뒤에 sum 2번 1. student 테이블에서 teacher_id가 3인 로우 select 2. 1번에서 나온 결과를 바탕으로 team 테이블에서 student_id와 student 테이블의 student_id와 일치하는 로우를 nested loop 방식으로 조인, team_unit이 SOCCER와 COOKING인 로우를 가져온 뒤에 sum Where 조건에 명시된 필터 조건이 조인 전에 발생하는 건지 이후에 발생하는 건지 헷갈려서 질문드립니다

개발자

#mysql

#쿼리실행계획

#실행계획

답변 1

댓글 0

조회 62

일 년 전 · 김도열 님의 새로운 댓글

RDB에서 복합키를 참조하는 외래키에 NULL이 있다면 부모에 없는 값이 들어갈 수 있는 이유가 궁금합니다.

결론부터 말씀드리자면 부모테이블에 복합키를 참조하는 자식테이블에 외래키가 nullable하게 설정했을 때, 왜 부모에 없는 값을 허용하는지 이유 또는 구동 원리가 궁금합니다. 간단한 예 부모-자식 관계(FK걸려있음)일 때 부모에는 단 두 컬럼이 있으며, 복합키(두컬럼 모두 PK) 자식은 두 컬럼을 참조하는 컬럼 2개만 존재하며 nullable하다. 부모에는 (1, 'A') 라는 값이 있으면 왜 자식에 (null, '가나다') 값이 들어가도록 허용하는지에 대한 이유 또는 구동 원리가 궁금합니다! - 물론 외래키는 잘 걸려있습니다. 자세한 내용과 사례는 아래 링크를 통해서 정리를 해봤습니다. (링크는 댓글을 받기 위해 임시로 velog로 작성하였으며, 어디에 댓글을 달아주시던 상관없습니다) https://velog.io/@corder/외래키FK에-부모에-없는-값이-들어갔어요

개발자

#rdb

#fk

#외래키

답변 2

댓글 3

조회 234

일 년 전 · 백승훈 님의 새로운 답변

id vs code

보통 컬럼의 identity 값을 정할때 네이밍을 id로 하시나요 아니면 code로 하시나요? 예) memberId, memberCode

개발자

#back

답변 1

댓글 0

조회 50

일 년 전 · 장성호 님의 답변 업데이트

제 3정규화 관련 질문있습니다.

만약 member 테이블에 email (unique) nickname (unique) introduction 이렇게 3개의 컬럼이 있을 경우 email -> nickname, nickname -> introduction, email -> introduction 이므로 3정규화를 진행하게 되면 member(테이블) email nickname member_introduction(테이블) nickname introduction 이렇게 둘로 나뉘는게 맞나요? 결국 한 테이블에 unique 제약조건이 있는 컬럼이 2개 이상일 경우 3정규화를 필수로 진행해야 한다는 얘기 같은데 제가 제대로 이해한건지 궁금합니다.

개발자

#정규화

#database

답변 1

댓글 1

조회 55

일 년 전 · 삭제된 사용자 님의 답변 업데이트

JSON 데이터 DB 저장

안녕하세요. Java Spring으로 백엔드 서버 마이그레이션, 알람 기능 개발 중에 고민이 있어 질문드립니다. [상황] 기존 알람 서비스는 하나의 서비스 Class로 통합해서 두고, 문자, 푸쉬알람, 이메일 3가지 경우로 기능을 swith하여 각 기능별로 서비스를 호출하는 방식으로 구현되어 있습니다. 알람과 관련된 데이터는 JSON 파일에서 불러와 jsonObejct와 Map 자료구조를 통해 가공하여 기능 구현이 되어있습니다. 알람 데이터 JSON 파일은 상황별 코드에 따라 문자, 푸쉬알람, 이메일로 데이터가 구분되어 있습니다. JSON 파일은 대략적으로 아래와 같은 형태입니다. (mail 알람의 경우엔 HTML 파일을 전송하는 방식입니다. thyemleaf를 통해 전달받은 파라미터 값만 HTML에 주입하는 형태로 구현되어 있어서 msg 안에 String 대신 JSON 형태의 데이터가 들어가고 있습니다.) [알람 JSON 데이터 구조 예시] { "code1" : { "Sms" : { "title" : "sms 제목", "msg" : "sms 메세지", }, "Push" : { "title" : "push alarm 제목", "msg" : "push alarm 메세지", }, "Mail": { "title" : "mail 제목", "msg": { "name" : "#{name}", "use" : "#{use}", ... }, "code2" : {... }, ... } [문제 인지 & 개선 방향 고민] 알람 데이터가 JSON으로 정의되어 있다보니, 기능 개발을 위해 Json 파일을 읽고, JsonObject와 Map 자료구조로 데이터 가공을 할 수 밖에 없는 상황인데요. 제가 알기로는 자바에서 Map 자료구조를 사용하게되면 타입 자체가 불명확해서 지양해야 하며, JSON 파일로 관리 시 하드코딩에 해당되어 기능 자체에 제약이 많다고 판단하여 해당 상황을 DTO로 관리함과 동시에 Database에서 관리하도록 바꿔볼까 생각중입니다. [궁금증 & QnA] 이 상황에서 고민 & 궁금증이 몇 가지 있습니다. 1. 해당 알람 데이터를 DB 관리로 바꾸는게 더 나은 선택인지? -> 만약 바꾼다고 하면 Alarm Table을 따로 두고, User Table과 N:M 매핑하는식으로 구현할 생각입니다. 2. , mail HTML Template이 다양하다보니, Template 마다 넘겨줘야하는 JSON 데이터가 다양한 상황입니다. 그러다보니 mail msg 컬럼에는 다양한 형태의 JSON 데이터가 들어가게 되어 이걸 DB로 구현한다고 하니 막막한 상황입니다. -> 결국 해당 부분만 JSON 데이터로 넣는것 말고는 떠오르는 방법이 없네요.(해당 부분만 JSON 데이터로 넣으면 오히려 관리가 더 어려워지지 않을까 고민입니다.) 3. 다른 분들은 알람 기능을 어떻게 구현하는지 궁금합니다.

개발자

#spring

#database

#json

#fcm

답변 1

댓글 0

조회 293

일 년 전 · 진라 님의 새로운 댓글

PostgreSQL 특정 테이블의 데이터에 따라서 동적 컬럼 설정 방법

현재 통계 쿼리를 작성하고 있는데, 특정 테이블의 데이터에 따라서 쿼리 결과의 컬럼이 동적으로 변했으면 좋겠습니다! 예를 들면, 학생별로 성적을 뽑는 쿼리를 작성한다고 해보겠습니다. - 원하는 쿼리 결과 student_id | student_name | 국어 | 영어 | 수학 | --------------------------------------------------- 1 | 홍길동 | 60 | 50 | 40 | 이런식으로 결과가 나왔으면 좋겠습니다. - 과목 테이블 subject_id | subject_name | ----------------------------- 1 | 국어 | 2 | 영어 | 3 | 수학 | 이러한 과목 테이블이 하나 있고, 여기에 만약 '한국사' 과목 하나를 추가하게 되면 위의 쿼리 결과에 한국사 컬럼이 생기게 되는 것입니다. - 학생 성적 테이블 student_id | subject_id | score | ----------------------------------- 1 | 1 | 60 | 1 | 2 | 50 | 1 | 3 | 40 | 학생과 과목, 과목당 점수 정보가 있는 테이블입니다. - 학생 정보 테이블 student_id | student_name | ...생략 ------------------------------------- 1 | 홍길동 | 학생 정보 테이블입니다. pivot을 사용하려고 했지만, 결국 as 부분에 컬럼명을 명시해 줘야 하더라구요. 이해가 잘 되실지는 모르겠지만.. 도와주세요!!

개발자

#postgresql

#sql

답변 2

댓글 2

조회 643

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

개인 프로젝트중 DB 복합키 관련 질문입니다!

안녕하세요! 개인 프로젝트를 진행하다 궁금증이 생겨 질문드립니다. 우선 저는 Spring Boot, JPA, MySQL로 소모임을 만들고 참여할 수 있는 프로젝트를 진행하고 있습니다. 1. 모임을 등록할 경우 모임 태그를 설정할 수 있고 해당 태그로 검색이 가능하게 구현을 하려고 합니다. 제가 생각했을 때 모임 태그가 굳이 auto_increment로 PK값을 가질 필요가 없다고 생각해서 해당 모임 PK값과, 태그 이름으로 복합키 PK값을 설정하였는데요. 효율을 따졌을 경우 이 경우가 옳은지가 궁금합니다! 2. 모임을 만들 때 지원자들에게 질문을 할 수 있게 지원 양식을 작성하게 되어있습니다. 지원 양식 테이블은 모임 테이블과 다대일 (지원 질문 : 모임) 관계를 가지고 있습니다. 이 경우에도 지원 질문 테이블은 모임 PK값과 orders (질문 순서) 컬럼으로 복합키 PK로 설정하였는데요. 이 경우도 궁금해서 질문드립니다. 저는 굳이 PK값을 따로 두어 해당 PK값을 사용해 질문을 찾거나 할 일이 없기 때문에 PK 값을 따로 설정할 필요가 없다고 생각합니다! (질문을 작성, 수정할 경우 해당 모임의 모든 질문을 제거하고 다시 insert하는 방법) 읽어주셔서 감사합니다!

개발자

#mysql

#database

답변 1

댓글 1

조회 201

일 년 전 · joseph 님의 새로운 답변

[DB테이블 설계] 권한 테이블 설계 시, 여러분은 어떤 방법을 사용하시나요?

안녕하세요 간단한 DB 테이블을 설계하던 도중, 나는 이렇게 권한 테이블을 만들면 좋을 것 같은데, 다른 개발자 분 들은 어떤 방향성으로 나아가실지 궁금해 글을 올리게 되었습니다. [주제] 1. 관리자는 사용자 그룹이 사용할 권한을 "범주" 및 "범주에 속한 각 세부 권한" 을 부여를 할 수 있다. 이때, 예시는 아래와 같습니다. 범주? 각 세부 권한이 모여 있는 상위 개념의 의미 범주에 속한 각 세부 권한? 범주 안에 나눠져 있는 세부적인 권한을 의미 이때, 범주는 A,B,C,D,E / 범주에 속한 각 세부 권한 A-1,A-2 || B-1,B-2 등등 2. 범주로 부여 시, 각 세부 권한은 설정 불가 3. 세부 권한 설정 시, 범주로 권한 부여 불가 저의 생각은 아래와 같습니다. (1안) A테이블 - 범주 B테이블 - 범주에 속한 각 세부 권한 두 개의 테이블을 만들고, 컬럼 구성은 A테이블 [사용자 그룹, 범주(코드로 들어감), 권한 부여 ID, 권한 부여 시각] B테이블 [사용자 그룹, 각 세부 권한(코드로 들어감), 권한 부여 ID, 권한 부여 시각] (2안) A테이블 - 부여된 권한을 저장할 테이블 A테이블 [사용자 그룹, 범주 및 각 세부권한, 권한 부여 ID, 권한 부여 타입, 권한 부여 시각] * 권한 부여 타입이란? 범주인지 범주에 속한 각 세부 권한을 부여할지 [예시] C0 : 범주 C1 : 세부 권한 이때, 데이터 관리는 정규화를 고려할 예정입니다. 귀한 시간 내주셔서 감사합니다. 또한 비슷한 경험이 있으면 이야기를 나누는 시간이 되었으면 좋겠습니다.

개발자

#db

#postgresql

답변 1

댓글 0

조회 1,064

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

CSS 그리드 레이아웃 질문드립니다.

최근 Next.js로 프로젝트를 진행하며 여러 페이지를 벤치마킹하다가 궁금한 내용이생겨서 질문드립니다. CSS의 grid속성의경우 2차원속성으로 가로세로 전체 레이아웃을 지정하거나 특정 컴포넌트 내부에서 레이아웃을 잡는데 사용한다고 배웠습니다. 몇몇 페이지의 경우 부트스트랩을 사용한것같은데 n개의 컬럼으로 나눈뒤 내부에 하나의 요소 또는 메인과 사이드네비게이션을 배치하는경우가 있는데 방법론이 있는건지 어떤 의도가있는건지 궁금합니다. 그리드를 처음 공부할때 전체적인 레이아웃을 잡거나 인스타그램같은 n x n의 이미지 배치할때 사용하고 이외 플렉스위주로 사용했는데 성능적으로 이점이 있는건지 .. 세로스크롤 때문인지 궁금합니다.

개발자

#css

#grid

답변 1

댓글 1

조회 87

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

무한스크롤 No offset 방식 index지정에 대해 질문이 있습니다

안녕하세요 현재 스프링부트 querydsl로 무한스크롤을 구현하면서 no offset을 적용하고 있습니다.정렬 방식에는 최신순과 마감순이 있는데 최신순은 pk를 오토인크리먼트로해서 사용하면되서 괜찮은데 문제는 마감순입니다. - 마감순정렬조건은 기존에 pk가 오토인크리먼트방식이고 정렬 조건과도 무관해 pk말고 정렬조건이되는 컬럼을 index로 설정을 하려고 합니다! 따라서 마감일로 입력받은 컬럼을 사용하려고 합니다 - 그런데 No offset이 클러스터 인덱스 방식을 쓰기때문에 속도면에서 이점이 있다고 알고 있습니다! - 따라서 클러스터 인덱스를 생성하려면 unique index로 해야하는것 같습니다. 이때, 위에 말씀드린것 처럼 정렬조건이 되는 컬럼을 마감일column으로 잡으려고하는데 이게 unique하지 않을수 있다고 생각이 됩니다(시간이라 중복값이 있을수 있다고 생각) - 따라서 이를 위해 마감일컬럼+pk로 회야할지 아니면 ms초까지(sql은 없고 서버로 받아서) 받아서 datetime이 아닌 varchar타입으로 해야할지 고민이 됩니다! 여기서 제가 착각하고 잘못된 제안을 하고 있는부분이 있는지 아니면 다른 좋은 방법이 있는지 선배님들의 고견을 듣고 싶습니다!

개발자

#springboot

#no-offset

#무한스크롤

#mysql

#querydsl

답변 1

댓글 0

추천해요 1

조회 211

2년 전 · 라파엘 바란 님의 새로운 댓글

스프링에서 데이터 받을때 검증

클라이언트에서 벨리데이션으로 검증다 한상태에서 데이터를 전달 받았을때도 컨트롤러에서 null체크 같은부분 해야하나요?? 그리고 실무에서도 dto -> entity로 넘길때 entity.setName(dto.getName) 요런식으로 담아서 보내나요??? 컬럼이 많아질수록 코드가 길어져서 혹시 다른방법이 있나 여쭤봅니다

개발자

#spring-boot

#spring

#java

#jpa

답변 1

댓글 1

조회 136

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

데이터베이스 인덱스

데이터베이스에서 인덱스를 설정할때 1. 조회가 빈번한 2. 수정, 삽입 적은 3. 중복도 적은 컬럼을 설정해야하는걸로 알고 있습니다. 여기서 궁금한게 인덱스 설정한 컬럼에 대해 수정이 발생하면 인덱스 테이블에서는 soft delete를 하고 새로 추가가 되는걸로 아는데 이때 왜 soft delete를 하는건가요? b+tree가 삭제 삽입만 가능하다고 들은거같기도한데 그러면 삭제하고 삽입을 하면되는거 아닌가요?? 그냥 어떻게 동작하는지 알고있었지만 생각해보니 왜 이렇게 동작하는지는 이해를 못하고 있었던거같습니다.. 아시는분이 있다면 답변 부탁드립니다.

개발자

#데이터베이스

#인덱스

답변 1

댓글 0

조회 90

2년 전 · 연양갱 님의 답변 업데이트

sql에서 primary키를 varchar로 설정해도 되나요?

sql에서 컬럼을 primary 키로 설정할 때 varchar로 설정해도 되나요? Foreign 키로 연결할 거라서요!!

개발자

#sql

#primary-key

#varchar

#foreign-key

답변 1

댓글 0

조회 161

2년 전 · 슈퍼신찬맨 님의 새로운 답변

DB와 OS의 시간 동기화 문제

어느 순간 부터 개발 서버(제가 따로 사용 중)에서 사용하는 DB의 컬럼 중 now() 함수를 디폴트 값으로 사용하는 컬럼의 시간이 서버 OS의 시간 보다 13시간이나 당겨져서 나온다는 것을 알게되었습니다. DB를 재시작함으로서 시간 동기화가 다시 정상으로 돌아와 문제는 해결 됬는데 OS와 DB의 시간 동기화에 문제가 생길 수 있는 원인이 뭔지 찾기가 힘들어 질문을 남깁니다..!

개발자

#postgresql

답변 1

댓글 0

조회 93

2년 전 · 김재성 님의 새로운 답변

primary key 중복 데이터를 어떻게 처리하는게 좋을까요?

안녕하세요, 양이 많은 자료를 for 반복문으로 정리해서 테이블에 넣으려고 합니다. 그런데 이 테이블의 컬럼이 프라이머리키라서 중복값이 들어가면 에러가 떠요 ㅠㅠ 그래서 중복을 제거하려고 하는데 제거할 때 두 개 컬럼을 합쳐서 primary key로 지정하는 게 좋을지 아니면 코드로 중복체크 하는 게 좋을지 고민이 됩니다.. 사실 fetchall로 데이터 가져온 다음에 중복값이 있으면 continue 처리해도 되긴 하는데, 제가 원하는 방향이 for 반복문 안에서 sqlite 에러를 가져와서 continue 처리하는 것이라서요!

개발자

#sql

#primary-key

#duplicate-key-error

답변 1

댓글 0

조회 267

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

조회 884

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

flex-grow 스타일이 제대로 먹지 않는 것 같은데 이유 아시는 분 계실까요?

flex-grow를 쓰면 아이템이 화면에 꽉 차게 늘어나는 것으로 알고 있는데요. 아이템들의 사이즈가 동일하게 늘어나지 않는데 왜그런걸까요? 텍스트 길이에 따라 크기가 달라지는 것 같습니다.. 아이템의 개수가 2~3개로 가변적일 수 있어 컬럼을 쓰기엔 컬럼 개수를 지정해줄 수 없어 애매한 상황이에요.

개발자

#css

#flex

답변 1

댓글 0

조회 86

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

React에서 여러 API의 데이터를 합쳐서 사용하는 좋은 방법 추천해주세요.

여러 API에서 데이터를 가져와 프론트엔드에서 하나의 상태로 처리하려는 상황입니다. 이 경우, 각 API의 컬럼이 다르더라도 프론트엔드에서 공통 컬럼들만 합치려고 합니다. 예를 들어: API1: a, b, c의 값 API2: a, d, e의 값 API3: a, f, g의 값 이걸 하나의 상태로 처리하고 싶으면 어떻게 하는 방법이 좋을까요???

개발자

#react

#api

답변 3

댓글 2

조회 390

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

JPA 다이나믹 쿼리 파라미터 DTO 사용?

항상 선배님들의 답변으로 큰 도움을 얻고 있습니다! JPA queryDsl을 사용한 다이나믹 쿼리 생성시 코딩 패턴에 대한 질문 드리고 싶습니다. 제가 작업할 땐 보통의 자바사용법(?) 처럼 DTO를 사용해서 처리하고 있습니다. 근데 서칭을 하다보니 저와 같은 패턴은 잘 없고 파라미터에 필요한 만큼 변수를 받아 사용하시더라구요? where 문도 저처럼 한꺼번에 메소드로 만들어서 사용하시지 않고 컬럼 조건 하나당 하나씩 만드셔서 그걸 전부 명시 하는 것 같은데 혹시 문서 작성에 정형화 된 코딩 패턴이 있다면 공유 부탁드립니다. 아래 참고 링크 입니다. https://velog.io/@hyunho058/QueryDSL-Where%EC%A0%88-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0

개발자

#java

#jpa

#querydsl

답변 1

댓글 0

조회 115

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

ORM 데이터베이스 스키마(컬럼) 변경시 어떻게 대처하시나요?

안녕하세요! ORM을 사용하면 데이터베이스 스키마 변경에 유연하게 대처할수있는것으로 알고있습니다! 하지만 상식적으로 생각을 했을때 데이터가 존재하는 컬럼의 컬럼명을 변경할려면 엔티티명만바꾸어서 해결될것이아니고 해당 컬럼의 데이터를 모두 이관하는 작업까지 이루어져야할거같은데 다들 어떤식으로 대처하시나요? 경험있으신 선배님분들 계실까요???

개발자

#jpa

#springboot

#schema

답변 1

댓글 0

조회 151

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

하이버네이트 오라클 시퀀스 사용전략에 문제가 생겼어요

자바, 스프링부트 프로젝트에서 하이버네이트를 사용해서 작업하고 있습니다. 오라클 시퀀스를 테이블명_SEQ로 생성해놓고 엔티티 ID컬럼에 어노테이션을 붙였는데요 처음 두번까지는 1, 2로 ID 생성이 되다가 그 다음부터는 50단위로 생성이 됩니다. 52, 102, 152... 이런 식이에요. 이해가 깊지 않아 많은 가르침 부탁드립니다.

개발자

#java

#jpa

#hibernate

#springboot

답변 1

댓글 0

조회 395

2년 전 · 손정현 님의 답변 업데이트

수시로 변경되는 원천테이블 적재 방법

안녕하세요. 기존에 수시로 변경되는 원천테이블 때문에 정합성 이슈가 있는 시스템 개선을 담당하게 됐습니다. 이슈는 기존 원천데이터의 생성일이나 특정 컬럼의 날짜 값으로 전일 데이터를 가져오고 있는데, 이미 가져온 데이터에 변경이 이뤄져 원천과 타겟의 정합이 안맞아 발생하고 있습니다. 원천을 가져올 때, update 일자로 가져오면 편하겠지만, 타부서의 시스템이라 저희가 요청해도 API 수정이 필요해 받아들여지지 않을 가능성이 큽니다. 아무래도 원천의 인덱싱 문제도 있을테고요. 이 상황에서 변경되는 값에 대해서 어떤식으로 가장 효율적으로 가져올 수 있는지 방안이 생각이 안나 커리어리 선배님들에게 조언 부탁드리고자 질문 올립니다..ㅠ 현재 이야기 나온 방법은 무식하게 특정 기간의 데이터를 매번 가져와 머지 시키자는 방법이 나왔지만, 이것도 그 기간을 넘어간 데이터에 대해서는 정합성이 안맞을 거라… 다른 좋은 방안을 아시는 분이 있으시면 도움 한 번 부탁드립니다! 만약 정말 기간으로 계속 조회하는 방법 밖에 없다면.. 어쩔 수 없죠..ㅠ 타부서에게 애걸해볼 수 밖에요…

개발자

#java

#batch

답변 1

댓글 1

조회 101

2년 전 · 커리어리 Q&A 운영자 님의 새로운 댓글

SQL 두 테이블을 조인한 결과에서 중복된 레코드를 제외하고 카운트 하는 방법.

두 테이블을 조인한 결과에서 특정 컬럼값이 중복된 레코드를 제외하고 카운트를 하고 싶습니다. 다음 두 가지 방법이 떠오르는데 어떤 방식이 더 효율적인지 궁금합니다. (mysql) 1. 중복 데이터를 제거하고 조인한 뒤 카운트한다. 2. 조인한 뒤 group by를 통해 그룹핑 한 후 카운트한다. 감사합니다.

개발자

#mysql

답변 1

댓글 1

조회 180

2년 전 · psmon 님의 답변 업데이트

DB테이블 컬럼에 대해 질문드립니다

문의사항 이란 테이블에 어떤 문의사항인지에 대한 컬럼( 결제 문의, 시스템문의 등 )있다 가정 하겠습니다. 그 컬럼의 데이터 타입을 ENUM으로 잡고 한글로 값을 넣는게 잘못된건가요? 제가 볼땐 문의사항 내용도 한글인데 타입값은 한글로 넣으면 안되는 건지 궁금해서요.. 고수님들 답변 부탁드립니답!

개발자

#mariadb

#sql

답변 1

댓글 1

추천해요 1

조회 171

2년 전 · 김대현 님의 새로운 답변

SQL varchar(n)과 한글 글자 수 질문

테이블의 한 컬럼을 varchar(50)으로 설정 했습니다. 50자까지 들어갈 수 있는걸로 알고 있었는데 검색해보니 mysql 버전에 따라 저 숫자 50이 글자 수 일수 있고 byte일수도 있다는 것을 알았습니다. 일단 저는 글자 수로 들어갑니다. 한글 50자 까지 잘 들어가고 있습니다. 그래서 확인해보기 위해 length를 통해 들어간 데이터의 길이를 조회했는데요 대부분의 데이터가 50을 넘고 있었습니다. 한글은 * 3을 한 수치고 영어는 한글자에 1의 길이를 차지하는 것 같습니다. 왜 이런 일이 발생하는 걸까요? 조회한 쿼리문 select length(title) as length, title From Contents where title is not null; 결과 예시 row length | title 120 | 가나다라마바사아자차카타파하가가가가가가가가가가가가가가가가가가가가가가가가가가 6 | 인형 5 | hello 17 | test 중입니다

개발자

#sql

#varchar

#data-type

답변 2

댓글 0

조회 511

2년 전 · 엄홍재 님의 답변 업데이트

group by를 사용한 후 가장 최신데이터를 가져오고 싶어요.

group by를 이용해서 간단한 쿼리를 만들고 있는데요. group by를 사용하면 같이 합쳐지는 데이터들은 전부 사라지나요??ㅜㅜ 사라지면 남는 데이터는 무엇인가요? count(*)을 이용해서 개수를 새고 가장 최신순으로 들어온 데이터를 먼저 가져오고 싶어서 order by createdAt desc를 사용해도 이미 있던 데이터는 최신순 정렬이 안되더라고요. 제 추측으로는 id 값을 보면 group by를 하면 다른 컬럼의 데이터는 id 값이 가장 낮은걸 가져오는 것 같아요.

개발자

답변 1

댓글 0

추천해요 1

조회 338