[Fail Log] 나의 카카오 도전기(1) - 특정 고객 거래내역 조회 서비스 개발 명세
실패의 기억
이전에 카카오 페이의 자회사인 증권회사에 지원 하여 1차 테스트를 봤던 적이 있었다. 탈락했다. 이제 어느 정도 시간이 지났으니 해당 도전과정의 기록을 여기 블로그에 옮기고 싶어졌다. 아직 1년이 지나지 않았으니 문제가 바뀌지는 않았을지도 모른다. (설마..) 운이 좋으신 분들이 제 블로그에 찾아오신다면 지금의 글이 조금이나마 도움이 되기를 바란다. 나는 탈락햇으나 님들은 합격하시길..
https://github.com/chrisna2/FailButNotGiveUp
모든 내용을 정리한 저장소 이다. 참고 가능한 부분은 잘 참고 하시길 바란다.
특정 고객 거래내역 조회 서비스 개발 명세
사용한 개발 프레임워크
- Spring Boot
- Mybatis + MySql JDBC
- Spring boot starter aop
- Spring boot starter web
- Spring boot starter test + hamcrest
- html + Jquery
- logback
- Maven
- GIT + GutHub
- AWS EC2 linux + MySQL DBMS
- 접속 정보 IP : 52.79.240.193:3306
문제 해결 방법
서비스 개발 사전 작업 : Database 서버 및 프레임워크 구축
-
데이터를 어디에서도 확인이 가능 하도록 Database를 구축해야 했습니다. AWS EC2 리눅스(프리티어) 서버를 구축하고 MySql DB를 구축하여 해당 접속 정보를 properties.yml에 등록했습니다. 현재 이 해당 깃 허브를 통해 소스를 다운 받으시거나 빌드된 JAR파일을 보유하고 있다면 언제든 해당 DB에 접속이 가능합니다. 하지만 로컬의 DB를 구축한 상황을 가정해서 제가 구축한 DB의 schema.sql도 프로젝트에 함께 동봉했습니다. (src/main/resource/)
-
기본적으로 개발을 진행하기 위해서 프로젝트 내에 일을 구성할 수 있는 프래임워크가 구축이 되어야 합니다. 가장 일반적으로 필요한 것은 로그처리와 예외처리, 그에 대한 메세징처리, DataSource 설정, 플러그인 관리, 형상관리 그리고 프로젝트 디자인이 대표 적일 것입니다.
- 로그 처리 : 기본적인 플러그인은 logback을 사용 하였습니다. AOP 클래스를 활용하여 컨트롤러 호출시 마다. 호출된 컨트롤러 클래스와 메서드를 로그에 띄우고 컨트롤러 호출이 완료되어 화면에 리턴하는 데이터를 로그에 출력하도록 했습니다. SQL 출력로그는 제가 주로 사용하는 인터셉트 클래스를 활용하였고 현재 프로젝트에 맞게 간소화 시켜 사용했습니다. 현재 실행되는 쿼리의 내용과 그 SQL 처리 결과를 로그로 출력하는 기능을 가지고 있습니다.
- 예외 처리 : kakaoException 이라는 이름으로 예외 객체를 구성했으며 RuntimeException을 상속받았습니다. 원래는 문제 4번을 생각하고 만들어낸건데 httpStatus의 값을 바꾸는 부분을 고려하지 않아서 현재 프로젝트에서는 사용되지 않고 있는 상태 입니다.
- 메세징 처리 : kakaoException에 경우 단순히 예외처리 뿐 아니라 화면에 에러 메세지를 출력하는 기능도 고려 했기 때문에 예외가 발생시 해당 예외 내용에 대한 메세지를 출력하는 Handler클래스가 따로 구성했습니다. @ControllerAdvice REST API로서 에러가 발생시 그에 대한 메세지를 출력 하도록 설정 했습니다. kakaoException외에 MyBatisSystemException, SQLException에 대한 예외 발생시 해당 예외에 대한 메세징을 뿌려주는 기능을 담당합니다. 만약 메세지 테이블을 구성했다면 메세지코드로 해당하는 메세지를 뿌려주는 역활을 수행해야 합니다만 현재는 아주 간단하게 구성해 봤습니다.
- DataSource 설정 : Spring Boot 프로젝트에서 JPA가 아닌 Mybatis를 사용한 이유는 저에게 가장 익숙해서입니다. 최대한 짧은 시간에 과제를 제출하고 싶었고 그걸 위해서 저에게 가장 익숙한 Mybatis를 활용했습니다. JPA의 활용성을 모르지는 않지만 문제를 풀기위해 활용될 JAVA 람다식 프로그래밍보다 쿼리로 처리하는 것이 저에게는 익숙하고 편했기 때문입니다. MySql을 사용했기 때문에 mysql jdbc를 설정했습니다.
- 플러그인 관리 & 빌드 툴 : Apache Maven을 사용했습니다. Gradle이 더 좋다고는 해서 고려를 해봤지만, 위와 같은 이유로 아직 익숙하지 않아서 사용하지 않았습니다.
- 형상관리 : 저는 개발 커리어를 관리하기위 github을 애용하고 있습니다. 재직자 교육과정에서 수행한 프로젝트들 이나 개인적인 공부의 내용들을 github repository를 생성 저장하여 관리합니다. 지금 현업에서 SVN에 비해 잘 사용되고 있지 않아도 저에겐 SVN보다 GIT이 친근하게 다가옵니다. AWS EC2 서버를 따로 구성했기 때문에 SVN도 고려하기는 했지만, 평가하시기 불편할 것 같아서 그 생각은 정리했습니다.
- 프로젝트 디자인 : 가장 일반적인 MVC 패턴을 활용하여 구축하였습니다. 그리고 추가적으로 저는 DTO(VO)형 클래스가 남발되는 것을 별로 좋아하지 않습니다. 데이터의 형태가 항상 늘 클래스에 고정되지 않기 때문입니다. 따라서 현재 제 프로젝트에는 DTO 클래스가 없습니다. 대부분의 파라미터는 HashMap 형태입니다.
Comments