사실 요즘 고민이 많다. 지난 2년 남짓 블록체인 회사에서 백엔드 개발을 했는데 사실 사수도 없고 블록체인에 대해서도 잘 모르겠고 무사히 프로젝트 수행한 것만 해도 기적이라 생각된다 (아니면 정부 과제가 다 이런가?😓). 백엔드 개발을 하면서 좋은 아키텍처나 설계 예제를 찾게 되는데 국내 자료는 절대적으로 자바, 그리고 더 나아가서는 JVM 기반으로 되어 있어서 Node.js로 되어 있는 예제를 찾기 힘들었다. 그래서 이 기회에 스프링 사용법을 배워보기로 했다. 또한 사수가 없고 개발자마다 하나의 프로젝트에 투입되어 있는 상황이라 코드 리뷰를 받아보지 못해 누군가와 같이 코드 품질을 향상하기 위해 고민하고 싶어 강의를 수강하게 되었다.
1강 웹 개발 시작하기에서 기본적으로 JDK에서 제공하는 com.sun.net.httpserver.HttpServer class를 사용하여 todo 리스트 CRUD API를 구현하는 과제를 수행했다. 소스 코드는 1주 차 과제에 있다. 잘은 모르겠지만 단일 쓰레드 HttpServer를 main 함수에서 띄우고 handler를 등록하는 메인 로직을 구현했다. 여기서 쓰레드에 대한 부분을 잘 모르겠다. Node.js는 이벤트 루프를 사용하는 Reactor pattern의 구현체를 엔진으로 사용하기에 별로 고민해 볼 기회가 없었다. 메인 드라이버 코드는 다음과 같고
try {
HttpServer httpServer = HttpServer.create(new InetSocketAddress(PORT), 0);
httpServer.createContext(BASE_PATH, TaskFactory.taskHandler());
httpServer.start();
} catch (Exception e) {
e.printStackTrace();
}
핸들러의 라우팅 로직은 TaskHandler 객체 안에서
@Override
public void handle(HttpExchange httpExchange) throws IOException {
Parser parser = new Parser(httpExchange);
String method = parser.getMethod();
String path = parser.getPath();
String body = parser.getBody();
switch (RequestType.of(method, path)) {
case GET_TASKS -> handleGetAllTasks(httpExchange);
case GET_TASK_BY_ID -> handleGetTaskById(httpExchange, parser.getId(TASKS_PATH));
case POST_TASK -> handleCreateTask(httpExchange, body);
case PUT_PATCH_TASK -> handleUpdateTask(httpExchange, parser.getId(TASKS_PATH), body);
case DELETE_TASK -> handleDeleteTask(httpExchange, parser.getId(TASKS_PATH));
default -> handleNotFound(httpExchange);
}
}
와 같이 구현했다.
코드 리뷰를 반영하면서 이펙티브 자바를 잘 알고 있으면서 고민되는 부분들을 best practice에 맞게 깨끗하고 깔끔하게 처리했을 것이라는 생각을 했다. 그 책 스터디도 병행할 시간이 됐으면 한다. 현재 PR이 머지되는 것을 대기 중이다.
개인적으로 넥스트스텝의 TDD 강의에서 외에는 지난 2년 조금 남짓 개발자로 일하면서 자바 개발을 할 기회가 없었다. 전에 잠깐 "자바 웹 프로그래밍 Next Step"을 공부하려고 했는데 다시 도전할 밑천이 생기고 있는 것 같다.
오랜만에 코드 리뷰를 받을 기회가 생겼는데 미리미리 과제를 시작했으면 하는 아쉬움이 있다. 더 여러 번 핑퐁 리뷰-반영 루프를 거쳐야만 남은 수강 기간에 실력 향상을 최대화할 수 있을 것 같다.
이직을 위해 준비해야 할 것이 너무 많고 땅기는 기술적 주재들도 너무 많다. 특히 아직 주니어이기에 많이 끌리는 시스템 디자인이나 팀 리더쉽과 같은 영역을 공부하고 고민해도 지금 당장 결과를 보기 힘들 것 같다. 하지만 2~3년 후에 좋은 매실을 걷었으면 한다.