대기업 계열사 ecommerce 전문 부문 상품/전시 파트 1차 면접, 비대면 화상면접으로 진행 됨.

자기소개

경력기술서 4줄 요약 + 강점으로 소개

이직이 잦았는데 각 회사별 이직 사유를 말해달라

  1. 공간정보 기반 공공기관 SI 사업을 했는데, 매출의 2/3에 해당하는 프로젝트 수주가 실패하고, 회사가 기운이 약해지는 것을 느끼고 이직했다.
  2. 공공기관 si 에이젼시였는데, 기술 성장에 큰 도움이 없는 것이 느껴져서 이직을 결심했다.
  3. 입사 당시 예정된 프로젝트가 있었는데 엎어졌다. 시니어급이 줄 퇴사했고, 그 후로 기존 프로젝트의 개선에 힘썼지만, 시니어급의 부재가 좀 컸다. 그래서 이직을 결심했다.

di ioc에 대해서 설명해보라

DI는 의존성 주입으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입하는 방식이다. 결합도가 낮아지고 유연성이 높아진다.

(대답 못 하고 한참 버벅임) IoC는 긴장해서 기억이 안 난다.
(면접 망했음을 느낌)

이력서에 jvm 튜닝이 있던데, 어떻게 했나?

하남시청에서 운영하는 운동장 예약 시스템에서 예약 오픈일마다 서버가 뻗었다. 로그를 확인하니 JVM 문제인 것으로 확인되어 튜닝했고, 서버 메모리가 32기가나 되는데, jvm에서 1기가밖에 사용하지 않길래 4기가까지 확장했다.
heap 영역과 stack 영역, 새로운 객체 영역, 오래된 객체 영역에 대한 값을 테스트 해가면서 튜닝했다.

  • 그럼, 메모리를 많이 주게 되는데 GC가 오래 걸리거나 GC 하면서 뻗지 않는가?

깊은 GC 얕은 GC 설정이 있었던 걸로 기억나는데 정확하게 기억이 안 난다.
(2차로 망했음을 느낌)

Redis 어떻게 사용했는가?

WAS를 2대를 수기 배포를 하는 시스템이었고, 배포할 때 번갈아 가면서 배포하면 한쪽에서 세션이 끊기는 문제가 있었다.
WAS를 spring 설정에서 session clustering을 Redis에 연결해서 해결했다.

jsp는 잘 다루는가?

jsp는 스프링이랑 같이 사용했기 때문에 못 다룰 수가 없다고 생각하다.
(설마 model 1에 절차지향적인가?)

template engine에 대해서 아는가? FE는 좀 잘 다루는지?

이전에 근무한 회사에서 FreeMarker를 사용했고, JS template인 handlebar.js나 jquery template를 사용했다. 첫 회사에서 지도를 SPA로 개발했기 때문에 많이 다뤄봤다.

\pagebreak

infra, be, fe 어느 분야를 더 선호 하는가?

일단 spring be가 더 자신 있다.
그렇지만, 첫 회사에서 JS 많이 다뤄서 FE에도 관심이 있고. 인프라도 흥미가 있다.
어쨌든 spring BE를 더 선호한다.

이력서에 있는 대용량 데이터 처리 고도화에 대해 설명해달라

하루에 배송 추적하는 송장이 2,700건 정도 됐던 걸로 기억하는데, 2,700 건을 리스트에 담아서 한 건씩 건건히 API 조회를 하는 방식이었다.
정보를 제공해 주는 API를 개선할 수 없으니 우리 쪽 프로세스를 개선했다.
대상을 100건씩 쪼개서 spring async annotation으로 비동기 처리를 했다. 그리고 DB insert/update 할 때도 시간 소모가 많기 때문에, 한 트랜잭션에서 100건 쿼리 수행하고 트랜잭션을 닫는 처리를 했다.
MyBatis execute batch 옵션을 사용했는데, 해당 옵션을 사용하면 select 쿼리 결과를 재사용하는 특성이 있어서 select와 insert/update 하는 로직도 분리했다.

  • 혼자 처리한 업무인가?

그렇다.

현재 팀 구성이 어떻게 되는가?, 업무 중 협업은 어떻게 하는가?

총 4명으로 차장급 세 명과 일한다.
업무 이슈를 각자 나눠서 처리하는 중이라 협업할 기회가 없다.
그래도 물어보면 잘 대답해 주신다. 그치만 보통은 구글을 많이 참고하고, 최근에는 chatGPT도 활용한다.
개발 협업은 적은데, 마케팅이나 운영 MD, 기획팀과의 협업은 많이 하는 편이다. 주도적으로 커뮤니케이션을 해서 그들의 매출을 증가시키는 데 도움을 주고 있다.

조회쿼리 성능 개선 어떻게 할 것인가?

최근에 진행 중인 이슈인데, 지금 근무 중인 회사를 기준으로 얘기하자면 oracle DB를 사용 중이다. CPU 사용률이 높아서 Metarial view를 사용해서 조회 성능을 개선하는 중이다.

  • 운영자가 실시간 조회 성능 개선을 요구한다면 어떻게 할 것인가?

(한참 고민함)
현재 재직 중인 회사 쿼리를 기준으로 얘기를 하면, select 절에 있는 함수를 paging 처리 후로 다 빼고, inline sub query나 scalar sub query를 join으로 변경하는 방식으로 진행한다.

(원하는 답이 아닌 것도 알고, 정석적인 방법도 알지만 긴장해서 제대로 답 못함. 3차로 망했다)

\pagebreak

질문 할 것 있는가?

  • 사내 개발정보 공유하는 곳이 있다고 들었는데 얼마나 활성화?
    • 최근에 오픈을 했고, 팀별로 기술 자랑하는 분위기.
      우리는 신생팀이라 아직 발표는 안 했는데, 팀마다 월별로 발표도 한다.
  • git 사용한다고 들었는데, github, gitlab 어떤 것을 사용?
    • gitlab ent. 사용 중.
  • 들어갈 팀에 개발자가 몇 명이나 있고, 연령대 분포는 어떻게 되는지?
    • 개발자가 몇 명인지는 대답 못 듣고, 내가 중간쯤 된다고만 기억 남.
    • 아마 직원이 많아서 몇명이나 되는지 모르거나, 사람이 없어서 숨길 수도 있다고 생각됨.
  • 이전에 해결한 이슈나 앞으로 해결해 나가야 하는 이슈에 대해 알고싶다.
    • 상품, 전시는 검색이 꽃인데, 그쪽 관련해서 당장은 서베이 중이다. 곧 관련 이슈를 진행 할 예정이다.
      (조회 쿼리 대답 못한게 정말 ㅈ됨을 느낌)
  • 기술적인 의사 결정이 필요할 때 결정을 내리는 주체가 개인인지, 팀원 전체인지 알고 싶다.
    • 난감해함 (뭔가 잘못된 질문인가 싶음)
    • 당연히 혼자 결정하진 않는다. 탑다운도 아니고 바텀업도 아니다. 회의를 통해서 결정한다.

https://youtube.com/shorts/8WJOxkySoVc?feature=share

 
 
 
728x90
반응형

'커리어 디버깅' 카테고리의 다른 글

[회고] 2023년 상반기  (0) 2023.07.02
[면접 회고] 20230530 COY 면접 회고  (0) 2023.05.30
[면접 회고] W사  (0) 2023.02.27
[면접 회고] C사  (0) 2023.02.27
2022년 회고 및 2023년 목표 설정  (0) 2023.01.03

읽코좋코

모든 전공 서적들이 빠르게 읽히지 않는데, 다른 전공서적에 비해 쉽게 읽히는 책이며 많은 공감을 하게 되었다. 제목과 내용은 동일하며 주제를 반복 강조하고 있다. 이를 위해 변수명, 함수명, 코드 컨벤션 그리고 리팩토링까지 설명하고 있다.
코드는 이해하기 쉬워야 한다, 다시 말해 코드를 읽는데 드는 비용을 줄여야 한다는 말이다. 코드 파악하는데 드는 비용이 작다는 말은 설계가 명확하고 간결하다는 의미를 내포한다.

이 책을 읽고 실제 코드로 적용할 생각을 하면 머리가 아프지만 읽는 중간 중간 이전에 보았던 코드들이 떠올랐다. 이전에 작성 했던 '성능과 가독성을 높이는 분기처리 방법'을 쓸 때 보다 시야가 더 넓어졌다. "왜?"에 대한 부분이 조금 모호했었는데, 그 부분을 채워주는 내용이였다. 그리고 내가 봐온 레거시 프로젝트들의 코드를 작성했던 개발자들에게 이 책을 던져주고 싶었다.


  1. 코드는 이해하기 쉬워야 한다
    인상 깊었던 내용은 6개월 뒤의 나 자신 또한 쉽게 이해되도록 코드를 작성하라는 내용이였다. 나 역시도 나름의 설명과 주석을 잘 붙여서 만들었다고 생각했지만 1년 뒤 해당 코드를 개선 하면서 다시 분석해 보는 헛수고를 했던 경험이 있었다. 짧은 코드가 더 좋은 코드가 아닌 읽는 순간 바로 이해되는 코드가 좋은 코드라는 뜻이다.
  2. 이름에 정보 담기
    • 구체적인 단어 사용하기
    • 이름 길이(짧은 범위에 잠깐 쓰이면 짧은 변수명, 사용 범위가 넓다면 긴 변수명, 약어 사용 지양하기 등)
    • 포맷팅으로 의미 전달하기(상수는 대문자, 클래스명은 카멜케이스 등)가 있었다.
  3. 오해할 수 없는 이름들
    • 경계를 포함하는 범위 : first, last
    • 경계를 포함/배제하는 범위 : begin, end 사용
    • 불린 : is, has, can, should 사용
    • get 남발하지 않기
    • 여러 개의 이름을 후보로 놓고 고민하기
    • '다른 사람들이 다른 의미로 해석할 여지가 있는가?'가 핵심이였다. 한 번쯤 더 생각해 보면 더 좋은 변수명을 만들 수 있다.
  4. 미학
    • 문서 작업을 하더라도 한눈에 보기 쉽게 쓰인 글이 잘 읽히듯 코드도 마찬가지다.
    • 좌우로 길게 늘어진 코드는 줄 바꿈을 하고 다른 코드들도 똑같이 맞추기
    • 헬퍼 메소드를 이용하여 지저분한 코드 깔끔하게 하기
    • 코드의 위아래 열을 맞추어 읽기 쉽게 하기
    • 코드의 순서를 '가장 중요한 것'에서 '가장 덜 중요한 것' 까지 순서대로 나열하기
    • 코드를 문단으로 만들기 (핸들러, DB 사용 등 문맥이 바뀌면 한 행을 띄우는 등 글을 쓸때 문단을 나누는 것과 동일)
    • 개인의 코드 스타일 VS 전체 코드의 일관성 = 일관성이 올바른 스타일보다 더 중요
  5. 주석에 담아야 하는 대상
    • 불필요한 설명 배제
    • 나쁜 이름에 대한 변명이 아니라 좋은 이름으로 바꿀 것
    • 작업중 생각한 통찰 등을 주석에 기록
      • ex: 하위클래스로 정리해야 할 것 같다
    • 상수의 의미를 설명할 것
    • 다른 개발자가 실수할 수 있는 부분을 예상해서 주석을 달라
      • ex : 1분 후 타임아웃 된다
    • 2, 3중 반복/조건문이 달린 함수는 무엇을 위한 것인지 요약 주석을 단다
    • 주석을 다는 것에 대한 두려움을 버려라
  6. 명확하고 간결한 주석 달기
    • 간단한 입출력 예시 사용
    • 코드의 수행 동작이 아니라 코드의 의도를 적어라
    • 파라미터에도 주석을 넣어라
    • 축약된 단어를 사용하라
      • ex : ~에서 불필요한 빈칸을 제거한다 -> 공백 제거
  7. 읽기 쉽게 흐름 제어 만들기
    • 조건문에서 유동적인 값은 왼쪽, 상대적으로 고정적인 값은 오른쪽에 쓰라
    • if/else 간단한 것을 먼저 처리하라
    • 삼항 연산자의 사용은 간단하게 쓸 상황이 아니라면 피하라
    • 중첩을 피하기 위해 함수를 중간에서 반환하라
    • 2중 if 문은 나누어서 중간에 반환하라
  8. 거대한 표현 잘게 쪼개기
    • 요약 변수 사용, 조건식의 반복되는 중요 비교 값을 상수로 만들기
    • 드모르간의 법칙 사용
    • short circuit 사용을 오용하지 말 것
      • 영리하게 작성된 코드가 혼란을 초래한다
    • 복잡한 논리를 간단하게 표현하기
    • 거대한 구문은 문맥에 따라 나누기
  9. 변수와 가독성
    • 불필요한 임시 변수, 중간 결과 저장 변수, 흐름 변수(boolean) 제거하기
    • 변수의 범위 좁히기
    • 클래스를 작은 단위로 나누기
    • 전역변수 사용 피하기
    • 변수에 다른 값을 여러번 할당하는 것 피하기
  10. 상관 없는 하위 문제 추출하기
    • 비즈니스 로직과 관계 없는 문자열 빈칸 제거, url 형식, 주소 형식등을 다루는 메소드는 분리하기
    • 재사용성을 위해 일반적인 목적을 가진 코드를 많이 만들기
    • 과유불급, 지나치게 나누지는 말기
  11. 한 번에 하나씩
    • 작성된 코드가 읽기 어렵다면, 수행하는 작업을 나열하라
    • 나열된 작업중 분리될 수 있다면 별도의 함수 또는 클래스로 나눠라
    • 파편화를 최소화 할 수 있다.
  12. 생각을 코드로 만들기
    • 논리를 명확하게 설명하기
    • 해결책을 말로 묘사하기
    • 언어에서 제공하는 라이브러리를 많이 사용해 보기
  13. 코드 분량 줄이기
    • 필요가 없는 기능을 구현하려고 애쓰지 말것
    • 코드 베이스를 작게 유지할 것
    • 요구사항에 질문을 던져 요구사항을 잘게 나누어 분석하기.
    • 표준라이브러리와 친해지기
  14. 테스트와 가독성
    • 테스트 코드는 특히 더 읽기 쉬워야 한다
    • 긴 테스트 내용은 다른 메소드로 만들기
    • 읽기 편한 에러 메세지 출력 폼 만들기
    • 좋은 테스트 입력 값 선택하기
    • 지금 작성하는 코드의 테스트 코드를 나중에 작성한다는 사실을 염두해 둘것
    • 지나친 테스트는 지양
  15. 분/시간 카운터 설계 및 구현
    • 실습 예제
 
728x90
반응형

토비의 스프링 3.1 VOL.1

스프링 사용자로서 항상 읽어야봐야 한다라는 소리에 두권을 샀지만, 엄청 어렵다는 소문에 읽을 엄두를 못 내던 책이다. 한 권에 800 페이지가 넘는 굉장한 분량에 두번의 정독 시도를 헛탕쳤었다. [유튜브] "개발바닥" 채널에서 저자 이일민님의 인터뷰와, 그 분이 이제는 스프링 부트 인강을 내시면서 이 책을 다시 시도하였고. 이번에는 1독을 끝냈다.
이제 4년차에 들어서면서 읽어보니 '어느 정도 개발을 했고, 좋은 구조와 효율을 고민해본 사람이 봐야 깊은 뜻을 더 잘 이해할 수 있겠구나' 라고 느꼈다.

이 책은 객체지향적 설계, 리팩토링, 테스트주도개발의 중요성에 대해 꾸준히 강조하고 있다. 단순하게 스프링 프레임워크의 기능 / 개념에 대한 설명도 깊게 나와있지만, 이 책의 요점은 스프링이 왜 이렇게 발전했고, 어떤 패러다임을 녹여서 만든건지 엿볼 수 있도록 도와주는 책이다. 따라서 개발 철학에 더 중점을 두고 읽어야 하는 책이라고 생각 된다.

마틴 파울러와 켄트 백이 강조하던 내용이 녹아 있으며, 아래와 같은 조언을 책 전반에 걸쳐 꾸준히 강조하고 있다.

  • '고정된 작업 흐름을 갖고 있으면서 여기저기서 자주 반복되는 코드가 있다면, 중복되는 코드를 분리할 방법을 생각해보는 습관을 기르자.'
  • '비슷한 기능이 새로 필요할 때마다 앞에서 만든 코드를 복사해서 사용할 것인가? 물론 아니어야 한다. 한두 번까지는 어떻게 넘어간다고 해도, 세번 이상 반복된다면 본격적으로 코드를 개선할 시점이라고 생각해야 한다.'

인상 깊었던 문장

인상 깊었던 문장들은 다음과 같다. 다 읽어보면 떠오르는 것이 있다. 그렇다, 대부분의 레거시 프로젝트의 소스들은 아래에서 하지 말라는 대로 개발되어 있다.

  계층형 아키텍쳐
  관심, 책임, 성격, 변하는 이유와 방식이 서로 다른 것들을 분리함으로써 분리된 각 요소의 응집도는 높여주고 서로 결합도를 낮춰줬을 때의 장점과 유익이 무엇인지 살펴봤다. 성격이 다른 모듈이 강하게 결합되어 한데 모여 있으면 한 가지 이유로 변경이 일어날 때 그와 상관이 없는 요소도 함께 영향을 받게 된다. 따라서 불필요한 부분까지 변경이 일어나고 그로 인해 작업은 더뎌지고 오류가 발생할 가능성이 높아진다. 어느 부분을 수정해야할지를 파악하기도 쉽지 않다.
  따라서 인터페이스와 같은 유연한 경계를 만들어 두고 분리하거나 모아주는 작업이 필요하다.
또, 흔히 저지르는 실수 중의 하나는 프레젠테이션 계층의 오브젝트를 그대로 서비스 계층으로 전달하는 것이다.
서블릿의 HttpServletRequest나 HttpServletResponse, HttpSession 같은 타입을 서비스 계층 인터페이스 메소드의 파라미터 타입으로 사용하면 안 된다.
계층의 경계를 넘어갈 때는 반드시 특정 계층에 종속되니 않는 오브젝트 형태로 변환해줘야 한다.
스프링을 사용하면 이런 데이터 중심의 코드를 만들 수 있을 뿐만 아니라, 실제로 매우 흔하게 발견된다.
데이터와 업무 트랜잭션 중심의 개발에 익숙한 사람들이 많고 이런 아키텍쳐를 의도적으로 선호하는 개발자도 많기 때문이다.
개발자들끼리 서로 간선없이 자신에게 할당된 기능을 독립적으로 만드는 데도 편하다.
최소한의 공통 모듈 정도만 제공되는 것을 사용하고, 그 외의 기능은 단위 업무 또는 웹 화면 단위로 만들어 진다.

하지만 이런 개발 방식은 변화에 매우 취약하다.
객체지향의 장점이 별로 활용되지 못하는데다 각 계층의 코드가 긴밀하게 연결되어 있기 때문이다.
중복을 제거하기도 쉽지 않다.
업무 트랜잭션에 따라 필드 하나가 달라도 거의 비슷한 DAO 메소드를 새로 만들기도 한다.
또한 로직을 DB와 SQL에 많이 담으면 담을수록 점점 확장성이 떨어진다.
DB는 확장에 한계가 있을 뿐 아니라 확장한다 하더라도 매우 큰 비용이 든다.
잘 작성된 복잡한 SQL 하나가 수백 라인의 자바 코드가 필요한 비지니스 로직을 한번에 처리할 수도 있다.
하지만 과연 바람직한 것일까?
이런 복잡한 sql을 누구나 쉽게 이해하고 필요에 따라 유연하게 변경할 수 있을까?
또, 복잡한 sql을 처리하기 위해 제한된 자원인 DB에 큰 부담을 주는 게 과연 바람직한 일인지 생각해볼 필요가 있다.
데이터 중심 아키텍쳐의 특징은 계층 사이의 결합도가 높은 편이고 응집도는 떨어진다는 접이다.
화면을 중심으로 하는 업무 트랜잭션 단위로 코드가 모이기 때문에 처음엔 개발하기 편하지만 중복이 많아지기 쉽고 장기적으로 코드를 관리하고 발전시키기 힘들다는 단점이 있다.
스프링은 그 개발철학과 목표를 분명히 이해하고 사용해야 한다.
자바의 근본인 OOP 원리에 충실하게 개발할 수 있으며,
환경이나 규약에 의존적이지 않은 POJO를 이용한 애플리케이션 개발은
엔터프라이즈 시스템 개발의 복잡함이 주는 많은 문제를 해결할 수 있다.
POJO 방식의 개발을 돕기 위해 스프링은 IoC/DI, AOP, PSA와 같은 기능 기술을 프레임워크와 컨테이너라는 방식을 통해 제공한다.
728x90
반응형

확실히 비즈니스 모델이 SW인 회사와 그렇지 않은 회사는 같은 질문도 의도나 원하는 대답이 다르 다는 것을 느꼈다. 가고 싶은 회사로 이직하기 위해 기본기 공부와 코테 준비를 하는 것도 중요하지만, 면접 경험 역시 계속 쌓는게 좋다는 것을 느꼈다.


질문 내용

  • 당사에 와서 어떤 일을 하고 싶은지
  • 이직할 때 회사를 고르는 기준이 무엇인지
  • 왜 이직 하는지
  • 그 동안 뭘 했는지
  • 졸업하고 분야를 전향하기 전에는 뭐를 했는지
  • 초등학교때부터 개발하는 애도 있는데 무슨 경쟁력이 있다고 하는지
728x90
반응형

'커리어 디버깅' 카테고리의 다른 글

[면접 회고] 20230530 COY 면접 회고  (0) 2023.05.30
[면접 회고] 20230420 EI사 1차  (0) 2023.04.20
[면접 회고] C사  (0) 2023.02.27
2022년 회고 및 2023년 목표 설정  (0) 2023.01.03
[코테 회고] 2022 10 01  (0) 2022.10.01

역대급으로 면접을 잘 보았고, 면접이나 처우 협의 경험을 기록 해둬야 할 것 같아서 남겨둔다. 계약 연봉만 따지면 조금이나마 인상이지만, 인센이나 성과금, 현금성 복지 그리고 업무 환경으로 따지면 낮아지는 이직이 되었다.

면접관님과의 대화에서 OOP 잘 쓰는 사람들과 일 하는게 쉽지 않을 것이라는 생각이 들었고, 아키텍쳐 공부 역시 꼭 해야겠다는 생각이 들었다. 그리고 잘하는 동료와 좋은 경험을 할 수 있는 환경에서 근무를 하려면 아무래도 다음 이직은 중견 이상으로 가야겠다는 결론이 났다. 면접관님이나 그분이 말씀 하시는 환경 또한 좋지만  IntelliJ 개발 환경 그리고 실 사용자의 규모에서 나오는 경험은 못 잃겠다는게 결론이였다.


면접 내용

  • 간단한 자기소개
    • 4년 차 개발 SI, SM로 2년 재직, 이후 쇼핑몰에서 이벤트/프로모션, 결제, 물류/배송 담당으로 기능개선 작업을 주로 했다.
  • 재직중인 팀 구성은 어떻게 되는지?
  • 현재 재직 중인지
  • 이직 사유
    • 이커머스 플랫폼 프로젝트 예정이었으나 엎어지고, 외주 개발로 돌리게 됨.
    • 주요 3인이 퇴사함.
    • 할 수 있는 것이 크지 않을 것으로 보여서 이직을 고려함.
    • 본가가 이사할 예정이 되어서 자취할 겸 이직할 곳을 구하게 되었다.
  • 결혼했는가?
    • ㄴㄴ
    • 근방에 여자친구가 살고, 해당 동네 근처에 친구들이 많다
  • 자취는 부모님과 합의 됐는가?
    • 그렇다
  • 그럼 결혼은 언제?
    • 3년 내?
  • 회사 내에서 다른 문제는 없었는가?
    • 지금 사용하는 기술 스택이 자바 1.7, 스프링 3.1.1, 마이바티스 초반 버젼을 사용하는데 기술적으로 성장을 원해 이직을 고려했다.
  • 지금 해당 회사에서 사용하는 기술과 비슷하다. 어떤 회사인지 알아봤느냐?
    • OOOO, OOO을 만드는 회사로 알고 지원했다.
  • 핵심 기술은 OOOO로 A, B, C, D등이 핵심 기능이다.
  • 자바는 1.8 사용. 스프링 5점, 마이바티스 10점대로 대로 버전 업 진행 중.
  • 전의 회사에서는 어떤 것을 위주로 했는가?
    • 공공기관 SI/SM, 간단한 업무 프로세스로 게시판, 체육시설/교육프로그램/공간 대실/예약시스템, 공공 API 공고, SNS 게시물 스크래핑 등
  • 두 번째 회사를 짧게 다니고 이직한 사유
    • 7개 프로젝트를 유지보수했는데, 업무가 간단하고 단조로웠다.
  • 첫 회사, SI?
    • 솔루션 기반 지리정보 시스템이지만 프로젝트마다 커스터마이징이 심해 거의 항상 새로 개발했다.
  • 스프링 부트 써봤는가?
    • ㄴㄴ
  • 스프링 부트는 쉽다, 레거시가 어렵다. MVC 썼는가?
    • ㅇㅇ
  • DB는?
    • Oracle
  • sql은 어떻게 다뤘는가?
    • ANSI JOIN으로 사용했다.
  • PL/SQL은?
    • 손댈 일이 거의 없어서 사용해보지 않았다.
  • 우리도 PL/SQL은 별로 안 쓴다, 다른 DB는 뭐 써봤나?
    • MySQL, MariaDB, Tibero, PostgreQSL
  • PostgreSQL?
    • GIS 할 때 써드파티가 많아서 사용했다.
  • MySQL을 쓴다.
  • JPA는?
    • 인강으로 공부만 해봤다
  • Stored Procedure는?
    • 안 해봤다
  • OOP는 들어봤을 텐데 추상화의 개념이 뭐냐?
    • 예제로 자주 나오는 예시인데, 자동차에 엔진이 있고 이 엔진이 작동하는 메소드를 인터페이스로 만들고 실제로 구현은 상속받아서 구현한다. A 엔진을 사용하다 B 엔진을 사용하고 싶으면 엔진 인터페이스를 상속받는 엔진 B를 만들어서 A를 B로 교체한다.
  • 그런 식의 개발을 해봤는가?
    • S3 전환을 할 때, 파일 저장하는 Util 클래스를 로컬 파일 시스템에서 S2 환경으로 전환하면서 개발 해봤다.
  • 자바 개발자들중 절차적으로 개발 하는 경우가 많고, 설계에 대한 경험이 별로 없는 사람이 많더라. 리팩토링은 좀 해봤는가?
    • 기능개선 중에 절차지향적 소스가 많았고, API 송신 후 DB에 저장하는 프로세스를 OOP로 개선한 적 있다.
    • API 송/수신, 데이터 처리, 저장하는 로직을 역할별로 클래스를 분리한 적 있다.
  • MSA는 어느 정도 아는가?
    • 회원계 서버, 상품계 서버, 결제계 서버 따로 분리해서 클라이언트 - 서버간 API 통신, 서버간 API 통신하는 구조인 것만 알고 있다.
  • 정규화 등 잘 설계된 테이블이 있다 치고, SQL을 짤 때 어떻게 짜는가? Index나 WHERE 절을 어떻게 거는지
    • 마스터 테이블의 where 절을 먼저 만들고,
    • inner join이나 left outer join, on으로 테이블을 연결
    • where 절에 join 테이블 조건 거는 방식으로 만든다.
    • 기존에 자주 사용하는 쿼리 템플릿이 있는 경우에는 그 쿼리 위에 with as 절로 대상을 먼저 만든 뒤 조회 함.
  • 트랜잭션 관리는 해본 적 있는가? commit이나 rollback 등
    • java src 상으로는 최근에 배송 송장 상태 업데이트 배치 프로그램에서 MyBatis에서 Execute Type BATCH를 사용했고,
    • 해당 옵션은 SELECT 절이 반복되면 쿼리 결과를 재사용하는 문제가 있음.
    • 그래서 메인 메소드에서 SELECT하는 메소드 따로, UPDATE하는 메소드를 따로 호출, UPDATE 메소드에서 Transactional required_new 옵션을 걸어줬다.
    • 원하는 답이 맞는지는 모르겠다.
  • 나쁘지 않은 대답이다. 형상 관리나 배포 CI/CD 는? 젠킨스 써봤는가?
    • SVN이나 GIT 사용했고, 젠킨스는 잘 아는 것은 아니고 stage, dev 환경 분리할 때 기존에 있던 설정을 복사해서 옵션 바꿔 만들어 본 경험이 있다.
  • Redis는 어떻게 사용해보았는가?
    • 이전 시스템에서는 수기 배포를 했고 한쪽 서버를 재시작하면 세션이 끊기는 문제가 있었다.
    • 세션 클러스터링용으로 레디스를 사용, 조악한 UX 문제를 해결하는 데 사용했다.
  • Jira 사용?
    • ㅇㅇ
  • AWS EC-2만 써봤냐?
    • EC-2, S3, Code Deploy, Cloud Front 써봤다.
  • FE 개발할 때 스크립트는 어떤걸 쓰는가?
    • 타입 스크립트는 사용 안 해봤고, 되도록 ES 6 이상 사용하려고 하는데, 아무래도 JAVA만 만지다 보니 부족하다.
    • async, await만 사용하는 정도
  • 가족 관계? 사랑을 많이 받았을 것 같은 느낌이다
  • 음악과 졸업?
    • 실용음악 기타로 입학, 졸업할 때는 미디/전자음악로 졸업했다.
  • 방향을 바꾼 이유는?
    • 친구랑 같이 카페에서 공부하다 호기심이 생겨서 좀 배워봤고, 친구 권유로 국비 지원 학원을 다녔다.
  • 국비를 다니고 개발자를 하기로 마음먹었느냐?
    • 40명 중에 20명은 수업을 못 따라오고, 5명 정도 반 안에서 잘하는 것으로 두곽을 냈는데 그 5명이랑 나랑 크게 차이가 없는 것으로 느껴졌다. 나쁘지 않게 하는 것 같은 생각이 들었다. 적성에도 잘 맞는 편이였다.
  • 적성이 맞는가?
    • 구체적 예시는 없지만 적성에 맞다.
  • 음악 한 것은 아깝지 않은가?
    • 딱히 그렇게 생각하지 않는다.
  • 방통대 편입해서 졸업한 것 같은데 할만했는가?
    • ㅇㅇ, 퇴근하고 공부하는 게 할만 했다.
  • 요새도 공부 하는가?
    • 주말에 모여서 각자 공부하는 스터디를 하는데, 주제를 같이 하는 건 아니고 개발자들끼리 모여서 공부하고 있다.
    • 지금은 토비의 스프링 책을 읽고, Vue.js 인강 보고 있다. 이전에는 OOP 책 읽고, 알고리즘 강의 들었다.
  • FE에 관심 있는가?
    • 없진 않다. 예전엔 react 강의도 봤었고, 재직회사에서 추후 vue를 쓸 예정이라 결제를 했다.
  • 공부 계속 해라 ㅇㅇ. 본인도 50대인데 지금도 공부하고 있다.
    • ㅇㅇ 아버님이 퇴직하기 전까지 퇴근하면 항상 공부하셔서 보고 자란 게 그거다.
  • 좋다.
  • 연봉이 굉장히 세다, 소득 증빙 가능하냐?
    • ㅇㅇ
  • 연봉이 쎈데 왜 나오냐?
    • 새로운 환경에 들어가서 자극도 받고 싶다.
  • 전 직장 연봉도 다 증빙 가능한가?
    • ㅇㅇ
  • (10초간 정적)
  • DB 설계를 할 때 논리적 다이어그램을 그리고 물리적 설계를 할 것이고 그 후 테이블간의 종속관계나 트리거등을 만드는데
    게시판 설계를 한다면 어떻게 할 것이냐?
    • {메뉴 : PK, 메뉴 명(게시판 타이틀)}
    • {게시물 : 메뉴 FK, 게시물 PK, 게시물 타이틀, 게시물 내용, 게시자, IP, 작성시간}
    • {첨부파일 : 게시물 FK, 첨부파일 PK, 원 파일명, 저장명, 저장경로, 확장자, 용량}
    • {댓글 : 게시물 FK, 댓글 PK, 게시자 명, 댓글 내용, IP, 시간}
  • IDE 뭐 써봤?
    • 지금은 IntelliJ, 이전에는 이클립스 썼다.
  • 우리는 이클립스 쓴다. 500여 개 기업에 납품하는데 고객사에서 유료 툴을 쓸 수가 없다.
  • 프로세스 다이어그램이나 시퀀스 다이어그램은 그릴 줄 아느냐?
    • 컨플루언스에서 Draw.IO 플러그인으로 그렸음. 신규 기능 개발 시 작성하는데 많이 그려보진 않았다.
  • 문서 작성은 잘하는가?
    • 많이 안 해봐서 시간이 조금 걸리는 편이다.
  • 설계할 연차는 아닌데 히스토리가 나쁘지 않은 것 같다.
  • 질문?
    • VCS, 협업툴, IDE, 기술 스펙은 이미 들었고,
    • 야근 수당이나 식대?
      • 야근은 잘 안 하지만 야근 신청서를 작성해야 한다.
    • jira를 20년 사용했다고 했는데, 몇 번째 회사인가?
      • 본인도 온 지 4개월 됬으며, 10번째쯤 되는 것 같다.
    • 조직 변화가 많은 상황인가?
      • 어디나 마찬가지로 개발자 이직이 많다 보니 엄청 뽑고 엄청 나갔다. 연구소는 안정적인 편.
    • 일하게 될 팀 구성은?
      • 웹 기반 SaaS OOO 솔루션으로 {A, B, C} 파트가 있고 파트는 아직 정해지지 않았다. 총 11명 정도 있다.
      • 아마 B나 C를 할 것 같다.
      • 클라우드 기반 MSA로 고도화 예정이다.
    • 개인장비는?
      • I7 씽크패드 노트북 1대, 모니터 1대, 연구소는 전화기가 없음.
  • 더 대화하고 싶은데 다음 면접자가 있는지 확인해 보겠다
    • (다음 면접자 대기 중이라고 함)
  • 회사 구조 설명
    • 관리/영업은 50여 명, 연구소는 20명 정도 있고, SI은 140명, SM은 20여 명
    • 수행팀은 SI, 제품팀은 운영/개발, 연구소에서는 새로운 기능 개발 중심이지만 지금은 사람이 없어서 수행팀, 제품팀 지원을 자주 한다.
    • 협업 도구는 자체 개발 한 것과 레드마인을 쓴다.
  • 개인차가 조금 있지만 기본 연봉 테이블이 있다. 면접관 마음에 드는 데 붙여줄테니 처우 협의는 알아서 해라. 또 봤으면 좋겠다.

 

728x90
반응형

'커리어 디버깅' 카테고리의 다른 글

[면접 회고] 20230420 EI사 1차  (0) 2023.04.20
[면접 회고] W사  (0) 2023.02.27
2022년 회고 및 2023년 목표 설정  (0) 2023.01.03
[코테 회고] 2022 10 01  (0) 2022.10.01
[채용 과제 회고] 2022 09 22 P사  (0) 2022.09.22

 

계열사 채용 사이트에서 직접 지원, 3주 만에 메일로 과제 받았음. 과제 내용은 공개된 곳에 게시하지 말라고 해서 서술하지는 못하지만, java, 네트워크에 대한 이해도가 높고 기초지식이 많이 요구되는 내용이었음. 5일 기한이 주어졌고, 재직 중인 회사 작업 일정 때문에 월요일 연차 사용하고 금요일 저녁부터 월요일까지 3일간 문제 해결하는 데 시간 썼음.

공고가 1년 차부터이고, 전체 구현 완료 여부가 합격/불합격의 기준은 아니라는 조건 때문에 쉽게 생각했는데, 생각보다 쉽지 않았음. '내가 java에 대해서 아직 잘 모르는구나'라고 느끼게 되었음. 확실히 코테보다 기술 과제가 더 어려운 듯?
제출 직전에 소스 최대한 정리 했는데, 불필요한 import랑 미사용 메소드라니 섬세하지 못했다는 생각이 들었음. 근데, 나는 System.out.println 이런 건 습관적으로 쓰지 않는데, (System.out.println 치는 것보다 logger.debug 치는 게 더 경제적이기 때문에) 혼용해서 사용했다는 의견은 좀...그렇지만 이 정도로 디테일하게 리뷰를 해줬다는 점에서 대체 이 회사는 어떤 회사인지 궁금하고, 다른 큰 테크기업이 많지만, 이 회사에서 일해보고 싶다 생각함. 아, 제일 중요한 건 기초부터 다시 공부해야 할 것 같은데, 공부할 게 너무 많아서 어디서부터 손대야 할지, 그리고 회사에서 야근이 많은데 과연 투자 투자할 수 있는적인 시간이 얼마나 확보가 될지 너무 막막하다.

 
728x90
반응형

'커리어 디버깅' 카테고리의 다른 글

[면접 회고] C사  (0) 2023.02.27
2022년 회고 및 2023년 목표 설정  (0) 2023.01.03
[코테 회고] 2022 10 01  (0) 2022.10.01
패션 쇼핑몰 1년 회고  (0) 2022.09.14
2022 07 13 채찍  (0) 2022.07.13

1년 회고

현 회사를 1년간 재직 하면서의 회고를 하려 함. 앞으로 성장/공부/이직을 어떤 목표와 방향, 자세로 해야 할지를 목표를 세우려 보니 3년간의 과거를 되돌아볼 필요를 느꼈고, 현재 재직 중인 회사부터 첫 회사까지의 회고를 해보기로 함. 보통 회고는 연말에 하거나 프로젝트가 끝나고 하던데, 지금 나의 시점에서는 재직 회사 1년 회고부터 과거를 되짚어 볼 필요가 있다고 생각했음. 사실 이직하지 않아야 할 사유를 찾는 중인데, 이직 해야 할 사유밖에는 보이지 않음...


이전 직장의 이직 사유

  • 올드한 스펙의 프로젝트 SM에 불만족(java 1.7, spring 3.대)
  • 복지는 괜찮은데, "회사에 다닌다"는 것보단 "프리랜서로 일을 쳐낸다"는 느낌이었음
  • 8개월 만에 협업이 뭔지 잊음
  • 처음엔 열정젹이었으나, 이전 프리랜서 개발자의 코드를 수정하면서 점점 "작동만 하면 돼!"하고 작업하는 모습에서 염증을 느낌

현 직장의 선택 사유

  • 규모가 크진 않아도 자사 서비스 운영업무를 함
  • 시스템의 크라우드 전환 예정
  • 유지보수를 한다고 해도 할 수 있는 일의 범위가 꽤 넒은 것
  • 기존 시스템은 올드하지만, 신규 프로젝트가 예정 중임
  • 유명 커머스 시니어들과 함께 입사 예정

회사의 업무 외적 장/단점

  • 직원 휴게실에서 커피 무료, 간식이 500원 미만
  • 직원 휴게실은 직원이 직접 청소해서 위생이 안 좋음
    • 사무실에서 쥐 나옴
  • 직원 할인
    • 준명품 의류 브랜드 50~70% 할인가 구매 가능
  • 성과금 200% 확정
    • ㅈ소기업 3년차 연봉 치고는 굉장히 많이 받는 편
  • 야근 수당, 택시비 지원 없음
  • 야근 식대 8천 원 -> 강남 물가로는 먹을 게 없음

이 회사에서 배운 것

  • Git, GitHub, Jenkins를 실무에서 사용하긴 처음
    • PR, 코드리뷰, Jenkins 설정 등 해봄
    • 코드리뷰를 받기 위해, 리뷰어의 시간을 절약해주는 방법도 나름대로 생각해 봄.
  • aws, ec2 클라우드 환경, 블루/그린 무중단 배포, auto scaling의 경험, 클라우드 환경의 얉은 경험.
  • 하드 코드/중복 코드 제거/구조화, 10년 전 기술
  • 기획/MD, CS 직군과의 협업, 많은 실제 사용자의 피드백
  • 티몬 출신 팀장님한테 배운것
    • 모듈화, 경제적으로 개발하기 위한 고민.
    • 고민이 길어지면 조언을 구할 것, 그리고 그 조언에서 배운 것들.
    • 아직 이해하진 못하지만 시스템 아키텍쳐 적인 것들
    • TC, 개발 산출물
  • nhn 출신 과장님한테 개발 외적으로 배운 게 좀 있음
    • TC, 회의록, 개발 철학 (아무래도 작은 규모의 SI, SM에서는 이런 문서와 효율성 좋은 코드보다는 작동하는 코드 결과만 만들면 되기 때문에 경험할 수 없었음)
    • 기본적이지만 작은 규모의 회사에선 배울 수 없는 사소한 것들, 근데 이제 안 계심
  • 절차지향 코드 작성
    • oop, class 사용법 다 까먹을 정도
    • (반어임)
  • 이전에 유지보수하던 외주 개발자들이 10년 차 이상이라 했는데, 소스 코드를 보니 아무리 연차가 쌓여도 개발을 잘하는 건 아니라는 것을 알게 되었다. 그리고 nhn 출신 과장님한테 성장을 잘하려면 개인의 노력도 중요하지만, 업무 환경도 중요하다는 가르침(?)을 받았다.
  • 일 잘하는 시니어가 되기 위해서는 개발도 잘 알아야 하지만 회사, 사업, 생태계, 흐름 이런 것에 관심도 갖고 알아야 한다는 걸 느꼈다.

1년동안 한 일

페이징 처리

처음 소스 받고 한 일은 이벤트 페이지의 하단의 상품 목록 페이징 처리하는 업무였다. 세상에 상품 목록을 가져오는데 페이징 처리가 안 돼 있다니.. 이때 삽질을 많이 했는데 원인은 당연히 페이징 처리가 어려운 게 아니라, 처음 보는 프로젝트 구조였다. 도메인별로 MVC 패턴의 구조화를 해두는 게 정석이라면, 이 회사의 소스는 기능별로 비지니스 로직이 FE, controller, service, SQL, db function에 파편화되어있었다. ORM을 MyBatis를 사용하는데, DAO를 한곳에서 query id, hash map으로 받아 사용하는 방식은 처음 봤는데, DAO에서 반환하는 객체는 쿼리 결과가 single row인지 multi row인지 단일 컬럼인지 구분도 안 되었다. 따로 변환하는 메소드가 있었고, 심지어 DB insert 후 PK를 가져오는 것도 불가능했다. 2 ~ 3일이면 가능해야 할 페이징 처리하는데 구조 문제로 7일 정도 걸렸던 것 같다. 아 물론 소스 파악할 시간도 없이 작업을 했으니 공수가 오래 걸릴 수밖에 없기도 했지만.

불필요한 로그

나는 과거의 내 자신이 로그 성애자인 줄 알았음. 근데 여기 소스를 보고 그 생각이 달라짐. FE에서 console.log 수십 줄은 물론이고 BE에서 System.out으로 생성한 로그는 페이지 한번 이동하는데 300~500줄씩 됐었음. File IO로 리소스를 잡아먹는 구구절절한 로그는 성능 저하의 원인이었고, 트래픽이 몰리는 시간이면 서버 응답이 15초 이상 걸리는 기능도 있었다. 이런 상태를 보기 힘들어서 log4j를 적극 활용, 지금은 로컬이나 개발 서버에서 필요한 로그만 남기고 운영 서버에선 결제 관련 통신 로그를 제외하고는 아무것도 출력되지 않는다. 그리고 지금은 디버거 모드를 적극 활용중.

그 외

쓰다보니 시간이 너무 오래 걸린다, 아래 기능들도 기억이 흐려지기 전에, 시간 나면 상세하게 서술 해 보자.

  • 이벤트 기능 구조화
  • AWS 전환
    • redis session
    • 파일 시스템의 S3 API 전환
  • 수기 업무 기능 추가
    • 월 정산
    • 고객 데이터 추출
  • SVN -> GIT 전환
  • 마켓팅 설문조사 기능
  • 오프라인 매장 방문 고객 온라인 가입시 혜택 지급 기능
  • 택배사 전환
    • 기존에 CJ 택배로 하드코딩된 배송 시스템을 롯데 택배로 전환하면서 추후 다른 타 택배사 배송 기능도 추가 가능하도록 구조화
  • 추가구성상품
  • CJ 풀필먼트

 


놀랄 노에 노할 노, 충격 적인 코드 퀄리티

하드코딩이 심각한 소스는 MVC 구조를 무시하고 있었다. FE에서 데이터를 처리, 외부 시스템 API 요청을 하거나, Service/DAO/ mapper 계층을 무시하고 비지니스 로직이 controller나 SQL, DB function으로 처리하는 로직이 많았다.
심지어 jsp안에서 jstl이나 el 문법을 사용하지 않고 절차지향으로 짜인 java 코드는 간단한 UI를 수정하는 데 걸림돌이 되어 공수가 배가 되는 경우도 있었다.
그리고 OOP를 전혀 사용하지 않는 소스는 controller에서 request parameter를 String Array로 받고, SQL 결과를 Map으로 받아서 처리하는 방식이였다. 처리 못 할 것은 없지만, 작업하는데 신경써야 할 것도 많고 소요 시간이 물리적으로 오래 걸리 수밖에 없는 구조였다. 일부 기능은 class를 쓰도록 수정을 했지만 10년 가까이 이런 방식으로 유지보수 된 소스는 OOP로의 수정이 무색했고, 이런 낮은 퀄리티의 소스는 시간이 지나 익숙해지기는커녕 마주하면 피가 거꾸로 솟는 게 뭔지 실제로 경험하게 해줬다.
그 외에도 사용하지 않거나 중복되는 쿼리/메소드/클래스/jsp, 메소드 명이나 주석과 실제 기능이 다른 경우도 많았다. 이런 중복 되는 코드는 또 에디터로 일괄 수정을 할 수 없도록 변수명이 다르거나 일부 조건만 다른, 사람이 손으로 수정할 수밖에 없는 소스다. 정말 고난이도 고난이라고 느꼈음.

이건 내 사정이고요

사실 낮은 퀄리티에서 오는 기술 부채는 개발팀이 감당해야 할 일이고, 협업 관계의 기획, MD, 마케팅 직무의 사람들은 알바가 아니였다. 당장 매출을 올려야 하는 이 사람들은 우선순위를 무시하고 급하게 요청하는 일이 많았고, 당장 퇴근 직전에 데이터를 뽑아 달라고 한다든지, 배포 직전에 기능이나 문구를 수정해 달라는 등의 요청은 작업의 흐름을 끊었고 어디까지 작업했는지 잊는 일도 비일비재했다. 이런 사정 속에서 MD 팀장은 개발팀에서 나오는 실수나 기술 부채를 해결하느라 늦어지는 일정을 정말 좋아했는데, 그 이유는 나도 모르겠다. 아니, 알고 싶지도 않다.

 


이직 결심

이유는 여러 가지가 있지만 가장 큰 이유는 성장에 대한 욕심이 크다. 그렇다면 성장할 수 없다고 느낀 이유를 고민해봤다.

middle, senior의 부재

개발팀의 인원은 총 4명으로 CTO 역할을 하는 팀장님, 프리랜서로 기존 시스템을 유지보수하다 정규직 입사하게 된 차장님, 신규 프로젝트의 빌드를 목적으로 이직한 과장님, 그리고 나 이렇게 구성됐었다. 신규 프로젝트는 엎어지다시피 해서 과장님은 저번달 말에 이직했고, 팀장님은 이번달 말에 퇴사 의사를 표했다. 차장님께도 분명 배울 건 있지만, 사실상 로직 적이나 아키텍쳐적인 도움보다는 SQL적 도움을 받을 수 있는 분이다. 같이 고민해주거나 조언을 구할 사람이 한 명 밖에 없다는 건 내가 잘못된 방향으로 가더라도 잡아줄 수 없는 환경이라고 생각했다.

퀄리티

프로젝트를 구성하는 파일 중 아무거나 열어도 3~4000줄은 기본이였다. 10년 가까이 SI/SM으로 개발된 소스는 퀄리티를 전혀 신경 쓰지 않고 개발되었다. 당연하게도 외주 개발자들은 퀄리티보다 기능 구현이 최우선이였고, JAVA 코드를 적극적으로 사용한 JSP 파일은 물론이고, MVC 패턴이 무색하게 비지니스 로직은 JSP, Controller, SQL에 퍼져있었다. Java를 쓰면서 OOP를 무시한 소스는 소스 파악이 힘들고 유지보수도 쉽지 않았다. 심지어 SQL로 처리하는 로직이 많아 동시 접속자 수가 많아지면 DB 서버의 CPU 점유율이 90%를 쳤고, 언제 터질지 모르는 시한폭탄은 java 소스로 변환하기도 쉽지 않았다. 레거시 개선이 실력 향상에 도움이 된다고 하지만, 혼자 작업 해야 할 범위가 너무 많고, 개편 하기 전에 신규 프로젝트가 인수인계가 더 빠를 것이기 때분에 의미가 없어 보임.

깊이와 효율성

내가 할 일의 범위가 넓은 것이 장점일 줄 알았지만, 상품, 결제, 이벤트, 정산, 회원의 도메인들과 UX, UI, 자사의 비즈니스에 대한 이해보다는 간단한 수정이지만, 반복된 소스로 간단한 노가다만 하는 경우가 많았다. 물론 이런 문제도 보이는 데로 어느 정도 구조화를 했지만 워낙 중복 소스가 많다 보니 깊이 없는 개선 작업의 끝은 보이지 않았다.
그리고 소스의 퀄리티가 낮다 보니 파악도 쉽지 않고 퀄리티를 높이기도 쉽지 않았다. 간단한 기능 하나를 수정하려 해도 FE, controller, service, SQL, db function까지 수정해야 하는게 천지. 멘틀까지 구조를 바꿔야 하는 소스는 오히려 내가 버그를 더 만드는 게 아닌가 싶은 생각밖에는 안들었고, 반복되는 소스가 10개가 넘어가게 되면 내가 뭘 수정하고 있었는지도 헷갈려서 작업 효율성 또한 많이 떨어졌다. 소스의 효율성과 개발적 깊이를 올리기에 쉽지 않을뿐더러 내 시간을 투자해서(야근, 주말 특근) 퀄리티를 올린다고 해서 겨우 3년 차가 혼자 고민한 게 과연 나이스한 방법일지, 내 성장에 도움이 될지 모르겠다.

기술 스택

신규 프로젝트를 기대하고 이직해 왔지만 1년 동안이 지나면서 바뀐 상황을 보니 신규 프로젝트에 내가 개발자로 기여하지 않게 될 것으로 사실상 확정이다. 신규 프로젝트는 외주 개발이 확정되었고, 개발팀의 역할은 사실상 현 시스템 유지보수, 신규 프로젝트 완성 시 인수인계 및 유지보수 전환의 방향으로 된 것. 거버넌스를 나눠 내부 개발을 하기엔 개발팀에 사람도 없고, 채용공고를 내도 지원하는 사람이 없다.
그리고 신규 프로젝트 개발이 외주로 완성돼서 인수인계하는 시기를 예상하면 적어도 1년, 사실 그 이상을 예상하는데, 그동안 java 1.7에 spring 3.1, mybatis 프로젝트를 유지보수하면 5년 차가 되도록 트렌디한 기술은 접할 수 없을 것이고 빅테크까진 아니더라고 더 큰 기업으로의 이직의 하는데 필요한 경험은 못 할 것이라고 생각된다.
다양한 기술 스택을 원하는 요즘 공고는 물론 모든 기술을 원하는 것은 아니겠지만 jpa, redis, spring boot, java 1.8 이상 정도는 경험해야한다고 생각한다. 지금 프로젝트 스펙으로는 아무것도 경험할 수 없고, 개인 프로젝트를 진행해서 공부한다고 해도 회사에서 요구하는 것은 실무 경험이기 때문에 도태되고 있다는 느낌이 강하다.

오히려 내가 해볼 수 있는게 많으니 성장의 기회다??

오히려 문제가 많고, 고칠 게 많은데다 혼자 손대야 할 도메인이 많기 때문에 내 성장에 도움이 된다는 의견이 있는데 짧은 식견과 현실적 상황을 보면 동의가 잘 안된다. 어차피 신규 프로젝트를 하는데 굳이 내가 시스템을 구조를 파악하고, 개선한다? 이미 많은 기능이 비효율적으로 개발되었는데 하나하나 개선한다고 그 노력이 UX와 매출에 긍정적 영향을 미친다? 신규 프로젝트 끝나기 전에 그 성과가 크게 눈에 띌지 의문이다.


 

남은 한해 계획

암튼 잘하는 사람들이랑 일하는 회사로 이직하고 싶다 보니 나도 잘해야 하는데, 암튼 쉽지 않음. 당장 큰 기업으로 이직은 어려울 것 같으니 꾸준히 공부해야 함. 꾸준한 공부는 실패하지 않을 것이라 믿고 있음. 욕심이 많으면 해야지 어쩌겠어?
근 몇 개월간 공부해야 할 것들이 정~~말 많다고 느꼈다. 프로그래밍 언어나 프레임웤(당장 실무에서 쓰는), 웹 관련 기술, CS, 인프라, 포트폴리오 등등.. 하나의 주제를 파기보다는 여러 분야를 두루두루 기반을 쌓아야겠다 싶음. 특별한 일정의 변수가 없다면, 야근 + 출퇴근 이동시간 하면 하루에 3시간 정도의 공부할 시간이 확보되는 데 어쨌든 시간을 잘 쪼개서 이직 + 기반 공부를 하겠다고 다짐했다. 중고등학교, 편입해서 방통대 다닐 때보다 더 공부 많이 하는 듯...

  • 자소서 재정리 (9월 말 예상)
  • 10월까지 프로그래머스 코테 레벨 2 풀기
    • 11월부터 레벨 3 시작
  • 12월 까지 jpa 학습 -> 포폴 준비
  • CS -> 간간히 블롣그 올리며 얉게라도 공부하기
  • 3개월에 한번 회고하기
  • 다 중요하지만 건강은 꼭 챙겨야 함. 주에 3일 런닝 꼭 하기..!
 
728x90
반응형

'커리어 디버깅' 카테고리의 다른 글

[면접 회고] C사  (0) 2023.02.27
2022년 회고 및 2023년 목표 설정  (0) 2023.01.03
[코테 회고] 2022 10 01  (0) 2022.10.01
[채용 과제 회고] 2022 09 22 P사  (0) 2022.09.22
2022 07 13 채찍  (0) 2022.07.13

+ Recent posts