출근하자마자 보통은 일정을 정리하는데
나도 모르게 배치 작업부터 확인하다가 일정 작성을 평소보다 늦게 했다.
특정 데이터를 찾으라고 멘션이 같이 걸렸는데
내가 이걸 어떻게 찾아! 라고 생각은 했는데(안해봄)
일단 다른분들은 출근하지 않으셨기 때문에 시키는건 다 해봤는데
엑셀에 현재 페이지에 있는 DB 100여개 중 62번쨰 쯤 발견할 수 있었다.
실제로 DB를 보면서 특정 형태의 데이터를 찾아내는건 힘들 것 같았는데
생각보다 어렵지 않았고 처음 해보는 일이라 성취감도 있었다.
db에 대해 전달드리니 바로 마이그레이션까지 진행하라고 하셨는데
마이그레이션은 문제가 없었지만 데이터가 일치하지 않는 문제가 있어서 곤란헀다.
알아본 결과 현재 사용하는 운영 데이터와는 조금 다른 방향에서 데이터를 가져와서 쓰고 있기 때문에 지금 데이터베이스에 있는 것을 그대로 사용하면 서로 없는 부분이 발생하는 것이었다.
결국 이사님이 결론을 내려주신 방법대로
inner join 형태로만 넣기로 했는데
내가 요약을 그렇게 적어서 그렇지 사실은 그런건 없었고
import를 할 데이터를 통으로 가져온 다음
externer key를 사용해 upsert를 진행해버렸는데
여기서 트릭은 하나의 다른 필드 또한 필수로 되어있기 때문에
해당 필드를 넣지 않고 upsert를 진행해서
사실은 update나 다름없는 진행을 할 수 있었고
자연스럽게 inner join처럼 처리되었다.
하지만 이걸 진행하기 위해 데이터를 복사했는데
수만개의 데이터를 복사했는데 대략 50%정도 더 양이 늘어나버렸고
왜 이런 문제가 생겼는지를 검색해도 답은 나오지 않았다.
대충 DB 데이터 복사 증가 등의 키워드였는데
결국 포기하고 문제 데이터를 계속 확인해본 결과
데이터 내부에 들어있는 “xxx” 형태의 경우 “가 엑셀에서 줄바꿈을 해버렸다.
결국 cvs?형태를 포기하고 엑셀 타입으로 변환하기를 누르니 정상적인 값이 들어갔고
해당 값에서 필요없는 필드들을 제거하고 필요한 필드만 남긴채로 inspector를 사용해 import upsert했다.
오전 회의를 진행하고 추가적인 마이그레이션 또한 내가 진행하게 되었는데
해당 부분을 해결하기 위해 개체, 필드를 생성하고 다시 마이그레이션을 진행했다.
이제 마이그레이션도 자주 해서 적응이 되었기 때문에
40분만에 개체, 필드생성 및 마이그레이션을 끝내버렸고
해당 부분의 실제 인터페이스는 없어도 테스트 및 개발이 진행 가능하기 때문에
해당 부분의 우선순위는 뒤로 미뤄두기로 했다.
csv형태로 가져와서 대량 마이그레이션을 진행했던 필드 중 하나가
공백으로 들어가는 문제가 있었는데 사실 null이라 임의로 공백처리했지만
x, y 형태의 픽리스트 느낌으로 데이터를 사용하고 싶어 하셨기 때문에
해당 필드의 데이터의 공백값을 다시 원하시는 값으로 변경하고 마이그레이션을 다시 진행했다.
이제 개체, 필드 생성 및 마이그레이션이나 간단한 인터페이스는 숙달된 것 같은데
신기하게도 업무는 계속해서 난이도가 증가되었다.
이번에는 보안 보안 보안인 데이터를 뚫고(?) 접속해서 DB를 파악해야 했는데
일단 첫번째로 오라클은 제대로 들어본적도 몇번 없었는데
오라클 DB로 하라고 해서 오라클 db를 검색하고 계속 헛짓을 하다가
데이터 접근은 db가 아니라 오라클 SQL Developer로 접근해야 한다는 것을 알 수 있었다.

오라클을 다운받은 다음 이번에는 VPN으로 로그인하고
DBSafer를 실행했지만 내 계정 VPN으로는 이상하게 막혀있었다.
이게 여러 회사가 협력해서 진행하는 느낌이라 그런지
자꾸 보안접속 부분에서 되다 안되다 하는 문제가 발생하는 것 같은데
다행히 확인 결과 이사님 계정으로는 VPN이 살아있어서
DBSafer로 접속한 다음 OTP까지 입력해서 오라클 DB에 드디어 접속할 수 있었다.
오라클 DB 또한 SQL server와 큰 차이는 없어보였는데
여기서도 권한이 아직 주어지지 않았기 때문에 실제 값은 볼 수 없었고
해당 부분의 권한이 없다는 것을 이사님이 메일로 보내시는 것을 보고
다음에 다시 오라클을 만질 일이 생기겠구나 생각하며 넘어갔다.
퇴근 근처 시간에 다시 또 회의가 잡혔는데
40분가량 회의를 진행해서 평소보다 늦게 퇴근할 수 밖에 없었다.
사실 기회가 있으면 야근도 한두번 할 생각은 있었지만
버스 피크타임만 아슬아슬하게 피해서 회의가 끝나버리니 뭔가 김이 빠졌다.
이제 무시무시한 중개서버와 Auth2만 어떻게 해결하면
간단한 인터페이스는 어찌저찌 처리가 가능하지 않을까 싶기도 한데
여유시간이 생기면 Auth2부터 빨리 확인해서
네번째 개인 프로젝트(?)가 들어오면 팀장님에게 질문하지 않고 처리할 수 있도록 해봐야겠다.
(1).백준 21200번 Forced Choice는 타겟 카드를 제외한 나머지 카드를 제거해야 하는 문제로
주어진 리스트에 타겟 카드가 들어있는지를 includes로 확인하고
있을 경우 KEEP을 반환하고 없을 경우 REMOVE로 제거하는 방식으로 문제를 해결했다.
const input = `10 3 4
2 1 5
5 2 3 7 8 10
3 2 7 10
1 8`.split('\n').map(el => el.split(' ').map(Number))
const [cardNum, target, turn] = input.shift()
const result = []
for(let i = 0 ; i < input.length ; i++){
input[i].shift()
if(input[i].includes(target)){
result.push('KEEP')
}
else{
result.push('REMOVE')
}
}
console.log(result.join('\n'))'회고' 카테고리의 다른 글
| [개발일지] - 110 (0) | 2023.10.18 |
|---|---|
| [개발일지] - 109 (2) | 2023.10.17 |
| [개발일지] - 107(주말) (0) | 2023.10.15 |
| [개발일지] - 106(주말) (0) | 2023.10.14 |
| [개발일지] - 105 (0) | 2023.10.13 |