본문 바로가기
회고

개인프로젝트 후기

by 코리늬 2019. 2. 5.

개인프로젝트 - 후기

회사에 입사한지 일주일 후에 개인과제를 부여 받았다.

주제 : 대량 알림톡 발송 웹 어플리케이션 제작

기간 : 2019/01/08 ~ 2019/01/31

개발환경

  • 언어 : Java, Js

  • DB : MySql

  • Server : Tomcat

  • IDE : eclipse, MySql Workbench

  • 기타 : 부트스트랩, Ajax


조건

  1. 대상에게 대량 알림톡을 보낸다(대상은 주소록과, 엑셀 파일을 통해 관리한다).

  2. 알림톡 내용은 지정된 템플릿 코드에 해당하는 알림톡만 보낼 수 있다.

  3. 알림톡 전송 실패시 문자발송으로 부달처리를 한다.

  4. 전송여부를 결과페이지에서 확인할 수 있어야 한다.

    로그인, 회원가입

- 인증번호 발송시 카톡 알림. 카톡 실패시 문자발송.

- 비밀번호는 SHA-256을 사용해 암호화해 저장

- Ajax로 데이터를 받아 js에 적용시킬 때도 데이터를 받아오는 부분, 자바단에서 다시 리턴을 해주는 부분, 리턴을 한 데이터를 js에 적용시키는 부분 모든 부분에 애를 먹었다.

- 유효성 검사는 정규표현식 사용




이렇게 로그인을 완성하고 본 내용인 대량 알림톡을 발송해야 하는데 그 진행과정이 머릿속에서 잘 생각나지 않았다. 이 부분이 가장 어려웠다.

메인페이지

메인페이지에서는 사용자의 아이디와 메뉴바의 버튼을 클릭시 각각의 기능들로 포커싱된다.


주소록 추가시 아래와 같은 창이 떠서 주소록관리를 하게 되고, 이미 추가된 사용자의 경우 세션을 통해 데이터를 가져온다.

목록은 js를 사용해 페이징 처리를 했다.


카테고리 별로 선택을 하면 그 만큼 타겟이 선택되고, 주소록에서 추가한 대상은 추가 후 자동으로 동기화된다.

선택을 완료했으면 제목과 템플릿 코드를 선택하고 발송을 하면된다.

마지막은 파일 타겟팅으로 excel 파일을 업로드하면 excel 파일의 데이터가 자동으로 보여진다. 마찬가지로 ajax와 js를 사용해 불러오고 페이징 처리를 했다.

마지막 결과 페이지에서는 발송 결과에 대해 보여준다.

6명에 대해서만 올바른 데이터를 넣었고 3명은 톡 차단을 한 상태이다. 성공 3 후 나머지 대상에 대해서는 자동 문자발송 처리를 한다.

실패 케이스는 발표 당일 수정을하다가 꼬여버려서 아직도 원인을 못찾았다.

스레드를 사용했는데 아무래도 그 부분에서 문제가 생긴 것 같다.


발송하기 로직

발송을 한 후 실패한 대상에 대해 부달처리를 어떻게 할지 많은 고민이 있었다.
내가 구현할 수 있어야 하고 효율적이어야했다.
또한 회사 동기들과 DB를 같이 사용하기 때문에 내것이란 것을 구분지을 수 있어야했다.

발송 시나리오

- 발송시 해당되는 데이터들을 발송엔진에 insert한다. 
- 발송할 때 구별을 하기위한 나만의 데이터를 같이 넣는다. etc1에는 seokhun을 etc2에는 시퀀스번호, etc3에는 발송 성공여부 N
- 발송을 한 후에는 발송이 실패한 대상의 에러코드와 etc2, etc1, 발송엔진의 해당 ID값 등등을 불러온다.
- 불러온 데이터들을 문자 발송엔진에 insert한다.
- 위 과정들을 스케줄러를 사용해 반복한다.

느낀점

DB설계를 어떻게 해야할지 막막해서 우선 로그인, 회원가입 기능을 만들면서 생각하기로 했고, 막바지에 부트스트랩을 사용해 css를 입히면 될거라고 생각했지만, 나중에 큰 오산이 되었다. → 설계의 중요성(처음에 잘하자..)

스프링 프로젝트를 너무 오랜만에 해보려니 설정부터 쉽지 않았다. 설정을 완벽하게 하고 경로를 잡는데만 2일이 걸렸다.

로그인, 회원가입을 하면서 기본적으로 MVC패턴으로 작성을 했다. 실제적인 로직이 들어가 있는 부분은

(ex : UserDao, UserDaoImpl) Dao를 interface로 설정해 DaoImpl에서 재정의를 해주는 식으로 작성했다.

  • 하지만 왜 이런식으로 작성하는지는 모르고 남들이 쓰니까 하고 사용해 이제서야 다시 찾아봤다.

MVC 패턴은 View는 자신이 요청할 Controller만 알고 있어야 하고, Controller는 화면에서 넘어오는 매개변수로 Serivce객체를 호출하는 역할을 한다. 불필요하게 HttpServlet을 상속 받을 필요 없는 순수 자바 객체로 구성되어야 한다고한다. → 모듈화를 통해 어디서든 재사용이 가능한 클래스 파일

이로 인해서 Service를 인터페이스로 구현한다. 하지만 나는 절차지향 형식의 코딩에 가까웠던 것 같다. 모르고 사용하면 안쓰는 것만 못한 것 같다.


애초에 주소록 추가에서 개인 추가와 파일 추가를 두가지 다 넣어서 한번에 타게팅해서 보내는 방식으로 했어도 괜찮았을 것 같다.


그리고 야근을 하면서 느꼈지만, 능률이 정말 떨어지는 것 같다. 머리가 안돌아가는 느낌이었다.

다음날 30분이면 할 일을 1시간 이상 걸려서 하는 것 같은데 야근을 한다고 좋은게 아니니 주어진 시간에 문제를 해결하기 위해 노력하자.

개선해야 할 점

  • 시간이 촉박해 충분히 생각을 하지 않고 코드를 작성함 → 결국 코드를 엎어버리게 됨 → 야근

  • 하나의 메소드가 수행하는 역할이 너무 많아짐 → 가독성 저하, 메소드가 무거워짐 → 메소드 추출 필요

  • 생각한 내용을 코드로 구현하기 어려움 → 자료구조, 스프링 공부

  • 에러를 테스트 할 때마다 톰캣을 껏다 키며 돌려봐야함 → 시간이 오래걸림 → TDD도입의 시급함


이번에 프로젝트를 하면서 그냥 혼자 진행하니 버전관리를 안해도 되겠지, 했는데 큰 실수였다 ㅎ
덕분에 마지막 날 에러가 난 부분에 대해 기존 자료가 없어서 해결을 못하는 꼴이 되었으니,,,
버전관리를 꼭 하자,,,,
+ 주석을 열심히 달자. 내가 뭘 했는지 까먹는다..

너무 부족한 점이 많아서 갈길이 멀다.


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

2021 상반기 회고 (feat. 이직)  (4) 2021.07.21
2020년 회고 (feat. 만 2년 주니어 개발자)  (0) 2021.01.05
2019년 회고  (4) 2019.12.31
2018년 회고  (6) 2018.12.30

댓글