본문 바로가기

회고

A사 v3 프로젝트

과거에 했던 프로젝트들을 정리하는 와중에 A사 프로젝트도 정리를 해야겠다는 생각이 들었다.

 

2017년 하반기에 A사 프로젝트에 파견되었다.

처음 도착했을때는 연구원들은 po에서 프로시저를 지원하지 않아 프로시저를 서비스로 나눠 변경하는 작업을 진행했다.

프로시저가 굉장히 길어서 참 섬세하게 작업을 했어야 했건 기억이 난다.

 

그리고 f/e 개발은 top를 사용해서 개발했는데, top가 결점이 많아서 너무 힘들었다.

첫 화면으로 top를 이용해 B전자에 시연할 화면을 개발이 필요했는데 top 본부장님이 내가 제일 잘하는 것 같다고 나에게 시연을 맡겼다. 그때는 javascript 자체가 처음이고, top가 편리한 툴도 아니었기에 굉장히 힘들었다.

시연 마감기간 맞추느라 엄청 식은땀 흘리면서 일했던 기억이 있다.

 

이때 얼굴인식 박명규 PL님에게 찜콩당해 파견된 V3 프로젝트중 가장 중요하고 핵심이 되는 얼굴인식 파트에 들어왔다.

필요한 화면들 개발하고, 박재관 수석님과 정영재 수석님과 친하게 지내서, 많이 배웠다.

박재관 수석님은 DB 튜닝쪽에 관해서 많이 알려주셨고, 정영재 수석님은 주식을 알려주셨다ㅎ

 

프론트 개발을 하다 출입조건 전송을 하는 서비스를 개발해야하는데, 출입 조건 전송은 B전자에 들어가는 출입 관련된 정보기 때문에 굉장히 중요한데다가 매일 2000만건 이상 전송을 해야하는 중요한 업무였다. 인사정보 전송, 사진 정보 전송 등 기기정보 전송하는데 기기가 thread 부하를 3개까지밖에 받지 못하는 이슈가 있었다. ProObject에 싱글톤 객체를 띄웠고, 그 객체에서 세마포어를 통해 3개까지만 서비스를 전송 하도록 만들었던 기억이 있다.

 

syncronize로 처음에 개발했는데, 검색을 하다보니 ReentrantLock을 통해서 제어하면 성능이 더 좋다는 걸 알았고 그걸로 100배 이상 개선을 해서 박명규 PL님에게 엄청 칭찬 받았던 기억이 있다. 멀티스레드 제어라 짧은 코드임에도 불구하고 굉장히 민감했던 코드이다. 

 

get 함수 하나만 봐도 이렇게 null체크를 자주 했어야 했다. 디버깅도 굉장히 어려워서 수석님들도 헷갈려했다. 개발 중에는 서비스 hotdeploy시 classloader가 새로 생겨 싱글톤객체가 다시만들어져 싱글톤이 깨지는 문제가 있었기도 했어서 개발하면서 여러모로 불편한 점들이 많았다. 

public boolean getSem(long mode, long priority) {
		long key = mode * keyTransfer + priority;
		ReqSemaphore sem = listSem.get(key);
		try {
			if (sem == null) {
				SOGet.lock();
				sem = listSem.get(key);
				if (sem == null) {
					sem = createSemaphore(mode, priority);
					SOAcq.lock();
					boolean result = sem.tryAcquire(pollingTime, TimeUnit.MILLISECONDS);
					SOAcq.unlock();
					SOGet.unlock();
					return result;
				}else{
					SOAcq.lock();
					sem = listSem.get(key);
					boolean result = sem.tryAcquire(pollingTime, TimeUnit.MILLISECONDS);
					SOAcq.unlock();
					SOGet.unlock();
					return result;
				}
			} else {
				SOAcq.lock();
				sem = listSem.get(key);
				boolean result;
				result = sem.tryAcquire(pollingTime, TimeUnit.MILLISECONDS);
				SOAcq.unlock();
				return result;
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return false;
	}

 

인사정보 전송, 사진 정보 전송, 기기정보 전송 3개의 세마포어를 관리하는 것을 FaLockLib에 넣어놨다.

프로젝트 1차 끝나고 교수님이 연구원들은 빠지라고 해서 아직도 남아있는지 궁금하다ㅎ

 

내가 어쩌다 B전자 시연을 대비하게 되어 급하게 처음으로 화면 개발을 하게 되었고 리드 개발자?가 되었기 때문에 팀원들에게 많이 알려줬고, 이 모습에 감동한 팀장님이 엄청 좋게 봐주셨고, 평가를 팀에서 제일 잘 받았기 때문에 나는 행복한 프로젝트였다. 이준성 팀장님이 자기가 나중에 창업할건데 무조건 나는 데리고 가신다고 항상 그러셨다. 팀장님이 다른팀으로 가시고 나중에 티맥스 데이 총 책임자가 되셨는데 그래서 2019 티맥스 데이 시연을 위한 은행 관련 개발을 내가 맡게 되었다.

'회고' 카테고리의 다른 글

와플웍스 구독형 서비스 오픈  (0) 2021.12.17
SPC 프로젝트  (0) 2021.12.08
협업툴 프로젝트  (0) 2021.11.14
2020년 7월까지의 회고  (0) 2020.08.20
TOP 모바일...  (0) 2020.05.11