청아
1k
2017-11-07 14:09:31 작성 2017-11-07 20:06:14 수정됨
7
1571

프로젝트 발표


면접때 발표할 웹 프로젝트 때문에

지금 ㅠㅠ다시공부하고있는데

어디에 초점을 맞춰서 발표해야할지

모르곘습니다..

그래서 DAO 정의도 보고, 

MVC정의도 보고 이것저것 그냥 보고있는데,

프로젝트 설명할때 면접관에게 이야기해야될지

정말 난감하네요.....ㅠ

참고로 신입 면접이고


개발프로젝트나 경력 위주로 소개 준비 (PPT 없이 자유롭게 설명 )


이렇게 하라고 써있었습니다 ㅠㅠ


제가 지금까지 정리한 것인데


신발 쇼핑몰 프로젝트를 하였습니다. 나이키, 아디다스, 리복 등의 브랜드의 신발을 구매할 수 있는 종합 신발 쇼핑몰 사이트입니다. 제가 맡은 역할은 상세 검색 기능과 상담 게시판, 회원 가입 시 유효성 검사 체크입니다.

 사용 기술은 JAVA, SERVLET, JSP, HTML, CSS, JQUERY, MYBATIS FRAMEWORK, ORACLE 등을 사용 했고 MVC PATTERN 기반으로 구현했습니다.

 ER 다이어그램과 데이터 베이스 정규화를 통해 테이블을 설계 하고 JOIN 등을 사용하여 쿼리를 작성하고 JDBC 통신을 통해 해당 sql문을 서버로 보내 결과를 받는 등의 서블릿과 데이터베이스 간에 통신을 하였습니다.

이제 제가 구현한 기능을 설명해드리겠습니다.

첫째로는 상세검색 기능인데, 스니커즈, 슬리퍼, 브랜드 종류, 사이즈, 가격 등의 조건을 선택하여 검색하면 해당 조건에 해당하는 물품 리스트를 반환합니다.

 이 기능을 구현하기 위해, 페이징 알고리즘 로직을 구현하였습니다.

해당 로직은 조건으로 반환된 물품 리스트에서 페이지 번호를 선택하면 해당 페이지 번호에 해당하는 리스트를 가져오는 로직입니다.

 페이지 번호를 클릭 했을 때 페이지를 새로고침 하는 나머지, 이전에 선택된 조건 값이 사라지게 되었습니다. 조건 값들을 유지하기 위해 검색한 조건을 서버로 전달하고 다시 받으면서 자바스크립트로 체크해줘서 유지했었습니다.

 그런데 AJAX로 구현하면 조건 값이 사라지지 않고 물품 리스트만 갱신하도록 구현할 수 있다는 것을 알게 되었습니다. 다음에는 이런 경우에 꼭 적용할 수 있도록 할것입니다.

 두번째는 상담게시판 기능입니다.

상담게시판을 클릭하면 로그인한 유저 아이디를 넘겨주게 되고, 유저가 작성한 글과 답변만 보이게 됩니다.

상담 문의를 표현하는 클래스와 답변을 표현하는 클래스를 LEFT OUTER JOIN 한 결과를 반환하여 게시판 리스트 형태로 보여줍니다.

해당 객체 안에 답변 객체가 null 이면, 미답변, null이 아니면 답변 완료라고 표시합니다.

수정,삭제,글쓰기 기능을 구현하였는데, 해당 기능은 insert, update, delete 쿼리와 함께 수행이 됩니다. 해당 기능을 진행하면서 서블릿에서 JDBC를 사용하며 데이터를 다루면서, 게시판 CRUD의 기능을 구현해 볼 수 있었습니다.

 조금 아쉬웠던 점은 delete기능에서 실제로 데이터를 삭제하도록 구현을 했는데, 데이터는 유지하고 컬럼의 flag만 바꾸는 방법으로 삭제했어도 괜찮았겠다는 생각이 들었습니다. 왜?

 마지막으로 회원가입시에 아이디나 비밀번호 유효성을 체크하는 기능을 만들었는데

자바스크립트 정규표현식을 이용하여 만들었습니다.

input태그에서 초점이 해제될 때 자바스크립트에서 blur라는 이벤트를 통해 아이디 값을 정규표현식으로 유효성 검사를 했습니다.

검사 결과에 따라 span태그를 삽입하여, 다시 입력해야 하는지에 대한 정보를 알려주었습니다.

또한 동시에 아이디가 중복되었는지 검사하기 위하여 ajax기술을 사용하여 해당 아이디로 member 테이블에 select 결과가 있는지를 확인합니다.

 프로젝트가 끝나고 나중에 공부를 하다 보니까 포커스가 해제될 때 검사하는 방법도 있지만 입력마다 실시간으로 검사하는 keyup 이벤트에 관한 방법도 있었습니다. 사용자가 다 입력하기 전에 비밀번호 불일치 여부를 미리 파악할 수 있기 때문에 더 효율적일 수 있었다는 생각이 들었습니다. 다음에는 이런 방법을 통해 구현해보고 싶습니다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


사용한 개발 패턴 설명

1)     HttpServlet 상속한 DispatcherServlet

처음에 클라이언트 요청이 들어올 때, 서블릿 컨테이너는 servlet 인터페이스에 정의된 메서드를 호출하기 때문에 서블릿 객체는 반드시 servlet 인터페이스를 구현해야 합니다.

그래서 서블릿 컨테이너에 의해 호출 될 수 있도록 HttpServlet 을 상속하여, 해당 클래스의 메서드를 오버라이딩 하였습니다.

 

2)     Redirect : 상담 게시판에서 글쓰기를 다한 후에, 특정 결과를 jsp로 화면에 html문서를 바로 출력해주는 것이 아니라 갱신된 리스트를 보여주기 위해 서블릿에서 리스트를 가져오는 것을 수행하는 서블릿을 호출하는 url을 호출합니다.(ServletResponse의 sendRedirect()를 통해) 그러면 다시 해당 url의 서블릿이 호출되어 리스트를 가져와서 화면에 리스트를 보여주게 됩니다.

3)     MVC 패턴 : MVC 패턴이 나타나게된 배경은, 시스템 변경이 잦은 상황에서 유지보수를 쉽게 하기 위해 중복 코드의 작성을 최소화 하고 객체 역할 간 의존성을 최소화 하기 위하여 만들어졌다.

컨트롤러 : 클라이언트 요청을 받았을 때, 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출한다. 또한 모델이 업무 수행을 완료한 결과를 화면을 생성하도록 뷰에게 전달한다. 즉 클라이언트 요청에 대해 모델과 뷰를 결정하여 전달하는 조정자의 역할.

모델 : 데이터 저장소와 연동하여 데이터를 다루는 일을 합니다. 데이터 변경작업등 ..

뷰 : 모델이 처리한 데이터나 작업 결과를 사용자에게 출력할 화면을 만드는 일을 합니다. Html, css, javascript 등을 사용해서요.

 

장점 : 1. 뷰를 분리했기 때문에 뷰 모델, 컨트롤러에 상관없이 뷰교체를 통해 사용자 화면을 쉽게 바꿀 수 있습니다.

2. 원 소스 멀티 유즈. 모델 컴포넌트가 작업한 결과를 다양한 뷰 컴포넌트를 통하여 출력할 수 있습니다. Html, xml, json

 

3. 다른 프로젝트에서 모델 컴포넌트를 재사용할 수 있어 개발 속도가 빨라지고, 자바 개발자와 프론트 개발자 분업화가 쉬워져 개발 속도가 빨라집니다.

4. 코드 들이 역할 단위로 쪼개져 있어서 유지보수 하기가 쉽다.

DTO: 값 객체로 객체와 객체 사이에 데이터를 전달하는 용도로 사용된다. 예를 들어 모델에 매개변수로 값객체를 넘겨줄 때나, 아니면, 모델에서 값객체를 만들어서, 컨트롤러에 반환할 때나….

Jsp: 서블릿 자바 파일을 만들기 위한 템플릿으로, 만들어진 자바 서블릿은 컴파일러를 통해 클래스 파일로 컴파일 되고, 웹 브라우저로 출력할 html을 만들어줍니다. 즉 jsp가 실행되는 것이 아니고 서블릿이 실행된다. 또한 개발자가 직접 out.write를 작성할 필요 없이 자동으로, jsp 엔진이 그러한 코드를 서블릿을 만들 때 만들어 줘서, 편리하다.

*jsp에서 자바 객체를 표현하려면? 스크립트릿 <%%>이나 표현식 <%=%>을 써주면된다.

4) 모델(jsp)에서 사용할 도메인 클래스를 정의하고 생성하기

 모델(jsp)에서 화면을 만들 때 사용할 제품,회원 등의 도메인 클래스를 정의하였습니다. 도메인 객체는 모델에서 JDBC 통신을 통해, 데이터베이스에서 받은 레코드를 도메인 객체에 담아서 반환합니다.

4)     DAO 만들기 : 서블릿에서, 데이터베이스와 연동하여 데이터를 처리하는 부분은ㄹ 분리시켰습니다. DAO는 데이터베이스를 이용하여 어플리케이션 데이터를 생성, 조회, 변경, 삭제하는 역할을 수행합니다. 하나의 테이블에 해당하는 DAO를 분리한 후에 여러 모델에서 공통으로 사용하여, 재사용성을 높이고 유지보수를 쉽게 하였습니다. 예를 들어 제품DAO를 만들고 제품과 관련된 쿼리를 수행하는 메서드를 안에다가 정의하고, 해당 쿼리가 필요한 서비스에서 해당 DAO객체를 만들어서 사용하였습니다. -> 상세 검색 서비스에서 프로덕트 객체를 가져올 때, 제품 상세 페이지에서 프로덕트 객체가 필요할 때 등등…

 


일단 이런식으로 정리했는데ㅠ ㅠ어떻게 발표를해야할지 감이안옵니다...

0
0
  • 댓글 7

  • 초코쪼꼬
    6k
    2017-11-07 14:19:19

    면접때 이걸 전부 발표하시게요? 너무 긴거 같은데..


    핵심기능과 본인이 처리하는 방식 정도만 요약해보는건 어떨까요?

    0
  • 드림팀팝
    493
    2017-11-07 14:49:15

    음..  면접이 브리핑 형식으로 지정이 된건가요?

    보통 경력직 면접의 경우는 저렇게 소개 형식이 아니라

    질문에 대한 답변 위주로 진행 되는 경우가 많은것 같은데...

    그리고 3년정도의 경력이신거 같은데 경력에 비해서 너무 기초적인 기술들이 나열되어 있어

    오히려 역효과가 나지 않을까 싶습니다.

    페이징 알고리즘이니, 조인쿼리니 서블릿과 데이터베이스간의 통신이니

    유저아이디를 넘기고, 객체를 널체크 라던가...

    먼가 신입 개발자가 포트폴리오 소개하는듯한 느낌이 강합니다. 

    오히려  본인이 개발 진행시 담당하신 부분을 간략히 정리하는게 나을듯 싶습니다.

    0
  • Mommoo
    838
    2017-11-07 16:30:18 작성 2017-11-07 16:31:06 수정됨

    일일이 정리하고 외워서 발표하는 거는, 전문성이 떨어져 보일 수 있어요..

    그리고, 면접관은 청아님이 구현하신 프로젝트의 기능이 궁금한게 아닙니다.

    프로젝트를 통해서 뭐를 얻었는지를 어필 하셔야죠.

    청아님이 프로젝트를 진행하면서 발생한 이슈 해결이나, 사용하신 기술, 느낀점 등을 토데로

    이해하신 내용을 말로 풀어 설명하는게 나아 보입니다.

    본인의 '이해도'를  보여주세요.

    0
  • 허허
    1k
    2017-11-07 17:01:21

    좀 더 압축하시면 좋을것같아요

    상세 질문이 들어오면 풀어서 설명 ^^ 합격하세용

    0
  • 사랑하는나의
    126
    2017-11-07 17:54:31

    엄청 귀여우십니다 ^^;;

    0
  • 청아
    1k
    2017-11-07 19:54:24

    드림팀팝>

    아 저 신입 면접 보는거구요 ㅎㅎ

    10분간 면접때 발표하라고 해서 미리 준비하고 있었어요..

    경력이 아니더라도 너무 기초적인 기술일까요?말씀하신대로

    기능에 대한 설명위주로 말하는게 나을까요??

    0
  • 청아
    1k
    2017-11-07 19:57:14 작성 2017-11-07 20:07:05 수정됨

    Mommoo >> 음 감사한데 혹시 예를 들어서 설명해주실수있으신가요????ㅠ 누가 저보고 프로젝트 문제점 같은거 이야기하면 좋다고하길래 그랬는데 위의 프로젝트 문제점 이야기한거 어떤가요????

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.