현재 근황
토이 프로젝트로 지금까지 방문한 나라 기록하는 서비스 만드는 중...이다. 역시 나는 갈 길이 멀다.
https://github.com/syk25/travel-tracker
기술스택 선정 이유
이번에는 프론트와 백부터 데이터베이스까지 다루고 있다. 프론트는 EJS, 백은 Node와 express, 데이버테이스는 PostgreSQL이다. 프론트는 아직 프레임워크가 익숙하지 않아서 우선 EJS를 사용했다.
백엔드의 경우, ① 프론트도 같이 개발하고 있는 점 ② express가 spring 대비 가볍다는 점 때문에 node와 express를 활용해서 개발했다.
데이터베이스는 SQL로 할 지 NoSQL로 할 지 고민했다. NoSQL은 데이터의 형태가 유동적이고 앞으로 변할 상황들이 많을 때 적합하지만 이번에는 나라별 이름과 코드가 테이블로 정리될 수 있기 때문에 RDBS를 사용하기로 했다. 최근에는 PostgreSQL이 유행하고 있다고 한다. 오픈소스이고 안정성도 있기 때문이다. 그래서 유행도 따라가고 데이터베이스를 다루는 경험도 늘리기 위해 PostgreSQL을 선택했다.
점점 많아지는 변수들.. 함수와 지역변수로 관리하자
변수들의 개수가 계속 늘어난다. 그것도 전역변수들이 말이다.
코드를 짤 때마다 전역변수를 추가하니 나중에 어떤 변수가 어떤 역할을 하는지 헷갈리게 되었다. 헷갈리는 것도 방지하고 전역변수를 사용하는 것을 줄이려면 함수선언과 지역변수를 활용하는 것이 좋을 것 같다. 함수는 개념상 작업 목적의 코드들을 묶어놓은 것이고 지역변수를 사용하면 한번만 쓰고 버릴 변수들을 신경 쓸 필요가 없기 때문이다.
예외처리 필요성
app.post("/add", (req, res) => {
const currentCountry = req.body.country.toLowerCase();
console.log(currentCountry);
const newCode = countryListNameToCode[currentCountry];
console.log(newCode);
// 나라를 발견하지 못했을 때의 예외처리도 필요함
// 나라를 검색하지 못했는데도 불구하고 추가한 나라의 수가 증가함
countries = [countries, newCode].join(",");
total += 1;
res.render("index", { total, countries });
});
지금까지 코딩테스트 문제를 풀거나 이론 공부를 했을 때는 예외처리가 왜 필요한지 잘 공감을 하지 못했던 것 같다. 그런데 작동하는 서비스를 만드려고 하니 경험을 하게 되었다.
위의 코드는 나라 이름을 입력했을 때 방문한 나라 리스트를 업데이트 하고 이와 연동해서 화면을 업데이트하는 로직이다. 나라의 이름이 정해져 있다고 하더라도 사용자가 이름을 잘못 입력 할 수도 있고 이는 전체 로직에서 예외에 해당한다.
그런데 내 코드는 예외처리가 되어 있지 않아서 사용자가 이름을 db에 저장된 이름과 다르게 입력하면 방문한 나라의 수를 증가시킨다. 이는 오류다.
예외처리가 되어 있다면 사용자에게 이름을 다시 입력해달라고 했어야했다. 그리고 나라의 수를 증가시키면 안되었다. 분기점을 만들어야했다.
사용성은 그렇다면 좋은가?
그렇다고 사용성도 좋은가? 그렇지도 않다. 현재 화면에서는 이름을 입력하고 추가 버튼을 눌러야만 나라가 추가된다. 사용자가 나라 이름을 직접적으로 암기하고 있어야한다. 전세계에 190개 정도의 나라가 있는데 일반인이라면 이걸 다 암기하지는 않는다.
게다가 나라를 하나씩 입력해야한다. 내가 만약 처음 사용하는데 여러개의 나라를 동시에 입력하고 싶다면? 일일이 나라이름을 찾아서 입력하고 싶은 사람은 없을 것이다.
그래서 차라리 나라를 클릭해서 다른 색으로 표시한 다음에 한번에 기록하는 방법이 더 좋을 것 같다.
총평
- 아이디어와 구현의 단계: 완성품 >>>>>>>>>>>>>>>>>> MVP >>>>>>>>>>>>>>>>>>>>>>>>>>>> 아이디어.
- 직접 만들기 전까지는 정말 아무것도 아니구나.
- 서비스가 편하고 직관적인 것일수록 많은 고민과 시도가 필요하다.
- 사용자들이 편하자고 만드는 건데 불편하면 아직 부족한거다.
- 예외처리 하자.