일상/🏢 2022-23 실무경험

[8주차] 여의도 증권사 실무

letzgorats 2023. 2. 7. 09:57

02.06 (월)

- 어제 오전에는 MTS_퇴직연금 디폴트옵션 설계서를 프론트로부터 새로 받았다. 수정해야 할 부분과 추가해야할 부분 등 개정사안 등이 포함된 PPT였다. MTS단 개발자분들과 진교형과 내가 포함된 사내채팅방에서 PPT를 공유하고 각자 맡은 파트에 대한 개발을 시작하였다.

- MTS단 개발자 분께서 입금예정분 매수비율지정과 디폴트옵션 설정 YN값 내려오는 서비스가 나왔는지 물어봤고, 해당 파트에 대한 개발은 내가 한다고 말씀드렸다. 가입자가 DC인지 IRP인지에 따라 MTS로 로그인을 했을 때, 계좌정보를 조회하는 함수를 짜야했다.

- 테스트 하고 있는 휴대폰으로 증권사 어플을 들어가보면서 로그를 살펴봤다. 현재 로그인 정보 조회를 하는 쿼리는 Dao파일에 있었고 이 쿼리에 입금예정분매수비율지정과 디폴트옵션 설정 여부를 추가하든지 svc 자바파일에 코드로 짜든지 선택해야했다. 쿼리로 하면 조금 더 깔끔하게 보일 수는 있지만, 쿼리에 추가적인 정보를 뽑아내기에는 조금 어려워서 후자의 방법을 선택했다.

- 로그인한 계정 정보가 리스트 안에 담기는데 , 이 때 해시맵 형태로 담기는 것을 확인했다. 리스트를 돌면서 각 해시맵을 순회할때 해당 가입자의 정보를 뽑아내야 했다. 왜냐하면, 가입자가 DC와 IRP 둘 다 가입했을 수도 있기 때문에, for문을 돌아야했다. 

- for문 바깥쪽에 tempMap이라는 해시맵을 생성하고, for문 안에는 resultMap이라는 새로운 해시맵을 생성했다. tempMap에는 for문으로 list를 돌면서 i번째에 해당하는 해시맵을 할당해주고, resultMap은 list를 돌면서 바라보고 있는 가입자 정보 해시맵을 담을 맵이었다. tempMap에서 필요한 키값을 뽑아내고 똑같은 이름의 키값으로 resultMap에다가 put해주었다.

- Dao파일에 새로 삽입한 "입금예정분 매수비율 지정이 안되어 있는 가입자 조회" 쿼리와 "디폴트옵션상품 유무 존재 조회"를 하는 쿼리를 타도록 해줘야 했는데, 이 두 함수의 반환값을 모두 hashMap을 포함하는 list로 놓고, 각각 list2, list3라는 변수에 할당해주었다.

- 중간중간에 계속 로그도 찍어보면서 ppt에 나와있는 경우의 수를 파악해서 분기문을 짰다. IRP만 가입한 계정과 DC만 가입한 계정은 반복문을 한 번만 도니까 상관없는데, 두 개 다 가입한 가입자도 고려해야해서 코드가 길어졌다.

- 점심은, 권과장님과 둘이서 먹었다. 나는 미트볼 조림과 봄동 된장국이 있는 메뉴를 먹었는데, 봄동 된장국이 진국이었다. 샐러드바에 있는 식빵에 딸기잼도 후식으로는 제격이었다.

- 오후에는 다른 개발자분께서 MTS 테스트 아이디에서 퇴직연금 가입된 것이 다 초기화된 것 같다고, 다시 가입을 시켜달라는 요청을 받았다. 암호화 주민번호를 받고 update를 치려는데, select를 해보니까 이미 가입이 되어 있다고 나와서 재차 물어봤다. 아무것도 안했는데 다시 된다고 하셔서 감사했다..ㅎㅎ

- 다시 코드를 짜는 업무로 돌아와 코드를 짜서 실행을 시켜보는데, 난 IRP와 DC의 입금예정분 매수비율과 디폴트옵션 키값을 다 다르게 주었다. IRP는 IRP이름을 붙여서 주었고, DC는 DC이름을 붙여서 주었다.

- 그러니까 당연히 코드는 길어질 수 밖에 없었고, 생각해보니까 MTS단에서도 반환값을 통해 코드의 통일성도 위배시킬 수 있었다. 키 값이름을 통일한다면, IRP 가입자이든지, DC 가입자이든지 상관없이 가입자만 분간하면 바로 해당 변수를 뽑아낼 수 있기 때문에, 백엔드 단에서 동일한 키 값을 줘야했다.

- 그리고 가입자 정보가 리스트에 들어오는데, IRP와 DC 둘 다 가입한 계정이라도, 각각 다른 해쉬맵으로 따로 들어오기 때문에, 불필요한 분기문을 없앨 수 있었고, 변수도 통일하니 코드가 정말 간결해졌다.

- 180줄이 넘어가는 코드였지만,  40줄 내외로 완전 단축할 수 있었다. 모든 처리를 마치니까 알고리즘에 대한 효율성을 다시 생각해보게 되었다. 나는 분기를 자세히 나누고 코드가 길어지더라도 주석을 달면 가독성이 좋다고 생각했지만, 실상은 코드가 간결하면 간결할 수록 가독성이 좋고, 주석처리로 비효율적인 코드를 포장한다고 한들 쓰이지 않은 코드가 너무 많으면, 결국 안 좋은 코드라는 것을 인지했다. 
- 물론, 이게 말로 표현하면 "당연히 코드가 짧은게 효율적인 것인데 바보냐" 라고 생각할 수 있다. 나도 그랬다. 그러니까 하고자 하는 말이 무슨 의미냐면, 코드가 세부적으로 과하게 친절한 것은 오히려 독이 될 수 있다는 말이다. 

- 자바에서 객체를 스트링화하는 가장 확실한 방법은 String.valueOf(객체)이다.
- <String, String> 형태의 HashMap이라도, 뽑아내면 우선은 일단 객체다.
- HashMap에 get과 put은 상호관계이다.
- List <Map<String, String>> results = new ArrayList<Map,String,String>>(); 는 리스트안에 맵형태를 저장하는 형태이다.

02.07 (화)

- 아침에 와서 어제 냉장고에 넣어놨던 맥반석 달걀과 셀렉스 음료를 먹으며 하루를 시작했다. 차장님이 저번주 금요일날 주신 것인데, 아침에 배고플 때 먹으려고 했었던 식량이다 ㅎㅎ

- 오전에는 어제 완료한 입금예정분 매수비율과 디폴트옵션 지정여부에 대한 서비스가 어디서 내려오는지 MTS단 개발자님에게 알려드렸다.

- 블로그에 어제 했던 내용을 살짝 정리하고, 디폴트옵션 지정여부 쿼리를 플랜별 디폴트옵션이 무엇이 있는지로 쿼리를 짰었는데, 가입자별 디폴트옵션 상품 보유여부 쿼리로 바꿀 필요가 있었다.

- 해당 쿼리를 바꾸기 이전에 다른 개발자분님과 대면으로 현재 상황에 대해 토의했다. 얘기를 나눠본 결과 생각보다 해야 할 것이 좀 있었다. 먼저, 퇴직연금 메뉴를 들어갔을 때, 처음으로 태우는 TR이 있다. 이 때, 가입자 계좌정보가 저장되는데, 이 때 내가 준 디폴트옵션지정여부랑 입금매수비율 지정여부 키,값도 들어간다. 가입자가 지정을 안했다면, 지정을 하라고 유도하는 팝업이 나오는데, 가입자가 지정화면으로 이동하지 않고 현재화면에 머무르면 상관없지만, 지정화면으로 가서 변경을 하고 왔을 때는 변경된 값으로 계좌정보가 갱신되어야 하는데, 다시 TR을 태울 때면, 기존에 초기에 메뉴에 들어왔을 때의 계좌정보로 정보가 저장된다는 점이였다.

- 해야 할 것을 정리하자면, common 파일에서 TR을 타는 로직을 고려해야했었다. 처음 한 시도는 common파일에 각 메뉴를 누를 때마다 타는 TR의 svc파일에 따라 기존에 짰던 함수를 타게 하는 로직을 만들어서 해당 메뉴를 누르면, 그런 작업이 되도록 했는데, 또 궁금한게 생겨서 설계서를 작성한 프론트단에 물어봤다.

- 지정하지 않은 고객이 메뉴를 눌렀을 때, 팝업발생을 야기했던 메뉴로의 화면 전환이 되지 않고 고객이 다른 메뉴를 눌러서 이동하게끔 처음 화면에 머무르는 것이 목적인데, 각 메뉴 중에서는 한 번 누르고 세부 메뉴 창이 나오는 것도 있어서 마땅히 TR이 정해지지 않은 초기 메뉴는 어떤식으로 처리해줘야 할지 난감했다.

- 결국 다시 태우는 것 밖에 답이 없었는데, 그럼 변경을 했을 때, 어떤식으로 해야 하는지를 고민해봤다. 근데, 생각해보면,  어차피 DB는 공통으로 사용하기에 가입자가 값을 바꾸면 DB에 있는 값도 당연히 바뀌는 것이 맞았다. 해당 처리는 MTS단에서 해결해주는 것으로 결론을 내렸고, 우선 해당 부분은 그렇게 정리가 됐다.

- 부장님과 차장님과 진교형이랑 같이 넷플릭스 이야기, 주말에 무엇을 했는지, 저번주 술 먹은 얘기 등등 하면서 점심을 사내식당에서 함께했고, 오후업무에 들어가기 전에 조금 잤다.

- 오후에도 마찬가지로 계속해서 해당 업무를 진행했고, 중간에 TR을 태울 때 필요한 파라미터에 대한 질문이 들어오면, 답을 해주었다. 오후에는 데이터가 변경되었을 때, 잘 바뀌는지 테스트하기 위해 하드코딩으로 값을 바꿔보면서 MTS단과 소통했는데, 다행히 테스트는 잘 된 것 같았다. 하지만, 재기동을 했을 때만 그랬다.

- 재기동없이 간편메뉴를 재입장했을 때는, 재기동할 때 처럼 값이 바뀌도록 하는 방법을 MTS단에서 찾아본다고 하고, 다시 모여서 토의를 해봤다. 이 때, 다시 서로 이해한 부분이 달랐던 것을 인지하고 잘 해결해나갔다.

- MTS단과 테스트를 할 때, 입금예정분매수비율 지정이 안되어 있는데, 되어 있다는 값을 출력하는 데이터에 대해서도 로그를 찍어보며 오류가 어디인지 찾아갔다.

- Common 공통 파일 수정, 디폴트옵션 쿼리 수정, 그리고 오전에 잠깐 진교형이 말하셨던 각 상품마다 수익률을 전체로 계산하는 쿼리를 짜고 페이지에 적용하는 업무 중에 1개는 해결한 것 같고, 다른 2개는 내일 마저 하기로 했다.

- MTS 관련한 프로젝트 1차개발이 이제 거의 마무리 단계인 것 같다. 이렇게 협업하는 소중한 기회에 감사하다.   


02.08 (수)

- 오전에 도착해서 어제 잘못 짰던 "가입자별 디폴트옵션 여부" 쿼리를 다시 짰다. 로그를 뜯어보면서 필요한 부분만 쿼리로 작성하면 됐다. 가입자 디폴트옵션 테이블을 불러와서 플랜번호에 따라 어떤 디폴트옵션상품을 가지고 있는지에 대한 쿼리를 짜서 기존 쿼리를 대체했다.

- 중간에, MTS 단 개발자분께서 ppt설계서에 있는 내용에 대해 질문하셨는데, 가입자가 복수 이상의 디폴트 옵션을 보유한다면, 어떤 값으로 그것을 판단해야 하는지 물어보셨다. MTS 매수 쪽은 내가 해서 그런것 같은데, 진교형한테 물어보니까 이미 예외처리를 해놨다고 하셔서 별다른 조치를 안해도 됐었다.

- 점심은 사내식당에서 혼자 여유롭게 먹었다. 오늘은 안동찜닭덮밥과 고추장찌개, 이색경단 떡, 샐러드 등을 선택했는데, 푸짐하게 잘 먹은 것 같았다.

- 어제는 꽤 늦게 자서 너무 피곤했다. 그래서 점심을 먹자마자 그냥 자리에 앉아서 잠을 잤다. 잠을 거의 1시간을 내리 잤는데, 꿈도 꿀 정도로 깊게 잤다. (물론, 꿈을 꾸면 얕게 잔 것이라고 하지만, 평소에는 잠깐 눈만 붙였다면, 오늘은 완전 의자를 뒤로하고 죽은듯이 잔 것 같다.) 

- 오후 1시가 돼서 깼는데, 정말 피곤함이 확 몰려왔다. 물을 마시면서 잠을 깨고 오후업무에 돌입했다. 점심 직전에 매수 등록과 관련한 데이터 요청이 다른 개발자분으로부터 들어왔다. 내 쪽에서는 데이터가 잘 매수 되면서 취소도 잘 되는데, MTS단에서는 데이터가 잘 안 쏴지는 것이 문제였다.

-  후에는 이것 때문에 엄청 바빴는데, 오후 1시 15분부터 MTS단 개발자분과 계속 소통했다. 매수쪽은 내가 맡았지만, 매도 쪽은 또 다른 개발자분이 한 것이라서 MTS단에서 테스트를 했을 때 안된다면, 나중에 매도도 안될 가능성이 있기에, 매도 파트 코드를 짠 개발자분에게도 상황을 공유하고 서로 토의를 했다. 

- MTS단 개발자분과 매도 파트를 맡은 다른 개발자분과 사내챗으로 끊임없이 계속 소통을 했다. 데이터를 쏴주고 로그를 찍어주고 값도 변경해보면서 상황을 공유했다.

- 백단에서 디폴트옵션 상품이 많을 때 배열에 담아서 쏴주는데, 한 inblock안에 어떤 것은 배열로 들어가고 어떤 것은 그냥 뽑아낼 수 있는 것처럼 하면 뽑아내는게 불가능하다고 해서 inblock을 하나 더 생성해야 한다고 하셨다.

- 다른 개발자분과 현 상황에 대해 대면으로 소통하면서 기존 교체매매 운용지시 등록 TR과 비교하기도 하면서 이런식으로 하면 될 것 같다고 방향을 정했다. 근데, 결국 로직은 똑같은 것이여서 분명 지금 방식도 안 되지는 않을 것 같았다.

- 상품이 2개이상이어도 모든 파라미터는 배열인건 마찬가지이고 해당 배열 파라미터에 담긴 객체 자체는 string 형태이기에 콤마로 이어붙여서 for문으로 받으면 됐었다.

- 결국 MTS 개발자분과 다른 개발자분끼리도 만나서 상황을 공유하고 말해봤더니 오후 4시 26분 드디어 데이터를 성공적으로 쐈다고 전해들었다.

- 다시 제대로 데이터가 쏴졌는지 로그를 확인해달라고 하셔서 시간을 공유하면서 로그를 봐드렸고, 데이터가 잘 출력되는 것을 확인하고 서로 수고했다는 말과 함께 성공을 맛봤다.

 -진교형이 고생했다고 다른 개발자분들에게도 커피를 사주셨다. 총 4잔이었는데, 개인카드로 긁고 나중에 영수증을 청구하면 회사에서 돈이 들어온다고 하셨다. 그래도 뭔가 개인카드로 그냥 사주시는 느낌이긴 하다. ㅎㅎ달고나 라떼를 거의 처음 먹는 것 같은데, 이걸 점심에 먹었으면 진짜 잠이 바로 깼을 것 같을 정도로 진짜 무척 달았다.

- 내일은 각 디폴트옵션상품에 들어가는 여러 pdf파일 경로등을 결과 데이터에 들어가는 작업을 해야할 것 같다. 이 또한 쿼리를 다시 짜고 java파일도 만져가면서 고려해야할 사항이 많은 것 같다. 내일은 더 집중해서 잘해봐야겠다!


02.09 (목)

- 오전은 MTS단 개발자분이랑 소통하면서 서로 데이터가 제대로 넘어가는지 확인하는 작업을 했다.

- 테스트계정이 갑자기 퇴직연금 계좌가 아니라고 뜨는 이슈도 요청받아 해결해주고, 어제부터한 디폴트옵션 Y, N이 제대로 됐는지 확인했고, 변경했을 때 데이터가 제대로 바뀌는지도 테스트 했다.

- 하다가 의구심이 들었다. 분명, 입금매수분 비율이 미지정된 가입자인데, 데이터가 지정됨을 뜻하는 Y로 넘어가고 있었다. 쿼리는 정말 틀린게 없었는데, 왜 그렇게 넘어가는지 이해가 되지 않았다. 오전은 쿼리를 살펴보면서 코드 분기문에서도 로그를 찍어보면서 제대로 분기가 되는지 체크했다.

- 쿼리에서 <>를 씀으로써 분기를 했을 때 이중부정으로 들어갔는데, 그냥 쿼리에 해당하는 한 줄을 = 로 바꿔주고 그대로 분기조건을 고쳐주니까 정상적으로 작동됐다.결국 점심을 먹고나서야 데이터 변경이 제대로 완료되는 것을 확인할 수 있었다. 아 오늘 점심은 혼밥을 했다. 샐러드바에는 붕어빵이 나왔는데, 엄청 맛있지는 않았다! ㅋㅅㅋ

- 오후에는 디폴트옵션매수 결과데이터에 pdf 가 들어가는 것 이외에, pdf 경로가 들어가는 작업을 진행했다. 쿼리를 짜야하는 것이 가장 우선이었다. 기존 쿼리의 적절한 위치에 파일경로들도 추가할 수 있도록 쿼리를 짜서 중간에 넣는 것이 핵심인데, 마스터 테이블을 기준으로 어느 위치에 쿼리를 추가해야하는지가 관건이었다.

- 각 디폴트옵션상품마다 많은 상품이 있으므로, 매 상품마다 파일경로를 넣어줘야 했고, 파일종류에 따라 다른 파일경로가 있으므로, 고려해야할 조건이 꽤 있었다. 상품설명서 pdf 파일경로를 추가하는 작업은 기존 쿼리에 마스터 테이블이 보여서 비교적 쉽게 쿼리를 짤 수 있었다. 그런데, 각 상품에 대한 PDF 파일 경로 뿐만 아니라, 그 상품들을 포함하는 하나의 디폴트옵션 상품설명서의 PDF 파일 경로도 데이터로 보냈야 했다. 각 디폴트옵션마다 여러 상품이 있는데, 데이터를 바깥쪽으로 1개만 디폴트옵션 설명서 경로를 넣어야 할지, 아니면 각 상품마다 똑같은 디폴트옵션 설명서 경로를 각각 다 넣어야 할지는 MTS단 개발자분과 소통해야 했다.

- 해당사항을 바깥쪽으로 넣어달라는 MTS쪽 요청에, 우선 각 상품의 pdf 파일경로를 추가하고 빌드한 채로 전달한 후, 각각의 키값을 알려드렸다. 바깥쪽으로 한번만 넣어달라는 요청에, 디폴트옵션 설명서 파일 경로 관련한 쿼리는 Dao파일이 아닌 SVC 파일에서 따로 결과 해시맵에서 뽑아내어 for문을 돌면서 각 디폴트옵션 코드에 해당하는 설명서 파일 경로를 추가했다. 

- 작업이 완료되고 전달하니까, 곧 데이터 구조를 메시지로 보내시면서 MTS단 개발자분께서 생각해보니까 이런 식으로 데이터가 오면, 차라리 안에다 다 넣는 것이 나을 것 같다고 구조변경을 요청하셨다. 결국 쿼리를 또 건들여야 했다.

- 우선, 내일은 디폴트옵션 상품 설명서 파일 경로와 관련한 쿼리에 대해 고민하고 만들어봐야 한다.


02.10 (금)

-  오늘은 금요일답게 팀끼리 1시간 동안 이야기를 나눴다. 오늘은 오랜만에 5명이서 다 모여서 이야기를 나눴다. 오늘은 내 월급날이기도 했는데, 대출금에 일부 금액을 넣고 생활비로 쓸 돈과 투자를 할 돈의 일부를 차장님의 개인 추천으로 국내주식 2종목에 과감히 투자했다.( 지금은 떨어지고 있지만, 연말에는 오를 것 같다 ㅎㅎ )  

- 오전에 다같이 투자를 하고 디폴트옵션 상품 설명서 파일 경로와 관련한 쿼리를 오전부터 짰다. 마스터 테이블이 기존 테이블에 있긴 했는데, 서브 쿼리 바깥쪽에 있어서, 해당 쿼리를 수정했야 했었다. 쿼리를 이해하면서 티베로에 찍어보면서 결국 제대로 값이 나오는 쿼리를 짤 수 있었다. 정말 기분이 좋았다. sql에 대해서도 계속해서 공부해보고 싶은 마음이 든다.

- 오전에 작업을 완료하고 MTS단 개발자 분께 데이터가 잘 나오는지 확인부탁드린다는 메시지를 남겼다. 근데, 아마 휴가이신지 하루종일 말씀이 없으셨다.(아마 월요일날 확인하시지 않을까 싶다)

-  점심은 사내식당에서 과장님과 진교형이랑 같이 먹었다. 부타마요동을 먹었는데, 나는 이 부타마요동이 정말 맛있다. 뭔가 진짜 단백질을 먹는듯한 느낌이다.

- 오후에는 진교형이 다른 개발자분과 소통한 수익률 관련한 쿼리를 나에게 넘겨주셨다. 디폴트옵션 잔고형황 화면구성을 변경해야 했는데, 쿼리는 내가 짜게 하고 jsp는 다른 개발자분께서 한다고 하셨다. 그래서, 티베로를 켜놓고 쿼리를 짜보면서 테스트해나갔다.

- 원하는 칼럼만 있으면 되므로, 하나하나 출력되도록 하다 보니까, 어느새 디폴트옵션 수익률을 원하는 형태로 테이블을 뽑아낼 수 있었고, 쿼리를 다른 개발자분께 넘겨줄 수 있었다. (중간에 괄호 이슈로 대체 왜 안되는지 이해가 안가서, 사수인 진교형을 한 번 불렀는데, 쿼리 다 짜놓고 괄호의 위치 때문에, 소수점 계산이 잘 안 됐었다. 괄호 위치를 한 칸 오른쪽으로 옮기니까 딱 원하는 테이블이 나와서 진교형이 탕비실로 끌려가고 싶냐고 하셨다. ㅋㅅㅋ)

- 쿼리를 넘겨주고, 이제는 운용지시에서 jsp단에서 messageBox가 뜨는 작업을 하기 위해 진교형에게 업무 설명을 들었다. 이중 보안을 해주자는 의미로, 지금도 막혀있긴 하지만, 입력과 동시에 메시지 박스가 뜨도록 하는 것인데, 일반매수, 스위칭 매수, 디폴트옵션 매수 운용지시에서 해당 작업을 완료해야 했다. 다음주에도 해당 작업을 이어나가면 될 것 같다.

- 이 날은 퇴근을 하고 문래역에서 닭갈비집 알바를 해야해서 칼퇴를 하고, 바로 닭갈비 집으로 향했다!

 

- 2개월 째 달성이다..! 연차와 반차를 하루도 안 썼다..! 요즘 나를 위해서 휴식이 필요할까 싶다가도, 나중에 상반기 면접을 봐야 될 수도 있으니 아껴야겠다..! 2월은 밖의 활동을 자주하자!

반응형