[BoostCourse] 예약관리시스템: 메인페이지


 JavaScript - FE


 이 프로젝트에서 JavaScript는

 1. 사용자의 요청(Request)를 받아 서버로 필요한 기능을 호출한다.

 2. 서버에서 응답(Response)한 값(Array 또는 Object)을 화면(HTML)에 데이터를 전달한다.


 두 가지의 작업을 하게 된다.


이러한 작업을 하기 위해서 배열(Array)과 객체(Object)를 조작하는 법을 배울 것이다.

 - 배열은 index를 주로 사용할때 사용

 - 객체는 key값을 주로 사용할 때 사용


[Abstract]

 1. 객체(Object)의 선언 및 프로퍼티(Property) 정의

 2. 객체의 메소드 추가

 3. 객체 탐색

  1) for - in

  2) Object.keys() & forEach()

  3) JavaScript에서 Array와 Object 구분방법

  4) Array와 Object가 복합적으로 있는 데이터 탐색



[객체(Object)의 선언 및 프로퍼티(Property) 정의]

 - key, value 구조의 자료구조

 - Object 형태는 {}로 자료를 표현, 서버와 클라이언트간에 이러한 데이터 타입으로 교환하는 JSON이라는 것이 있다.

 - 객체 생성시 프로퍼티(속성)을 정의, 또는 객체 생성 후 프로퍼티를 추가할 수 있다.


 - 왼쪽은 Car의 4개의 속성만을 갖고 있을 때 오른쪽은 color 속성이 추가 되었을때 결과값 





[객체의 메소드 추가]

 - 객체 생성 후 추가적으로 메서드를 추가하고 싶은 경우, 필요한 메서드 생성 후 메서드를 포함하여 객체를 새로 생성하여 적용한다.


[객체 탐색]

 - 객체 탐색 for - in, Object.keys() & forEach()

 - key: value 자료구조에서 value 타입이 number인 entry만을 가져오기




[Array & Object가 섞여 있는 객체 탐색]

 - 자바스크립트에서 Object, Array 구분방법
   (Object와 Array를 "object"로 인식하기 때문에 constructor 속성을 활용)


 - type이 sk인, name으로 구성된 배열만을 출력하기





[BoostCourse] 예약관리시스템: 메인페이지


 JavaScript - FE


 예약관리시스템: 메인페이지 프로젝트는 Spring Framework의 설정, MVC 패턴, 기존에 구축된 데이터 모델을 이용한 API 작성도 중요하지만 

View Layer에서 HTML, JavaScript도 해야할 작업이 많이 있다.


 여기서는 JavaScript의 역할은 사용자의 요청(Request)를 받아 Ajax 통신으로 Controller로 전달하는 일과 Contoller에서 응답(Response) 값을 배열(Array) 또는 객체(Object)타입으로 받아 HTML로 필요한 데이터를 출력하는 역할을 한다.


 정리하자면 JavaScript는

 1. 사용자의 요청(Request)를 받아 서버로 필요한 기능을 호출한다.

 2. 서버에서 응답(Response)한 값(Array 또는 Object)을 화면(HTML)에 데이터를 전달한다.


 두 가지의 작업을 하게 된다.


이러한 작업을 하기 위해서 배열(Array)과 객체(Object)를 조작하는 법을 배울 것이다.

 - 배열은 index를 주로 사용할때 사용

 - 객체는 key값을 주로 사용할 때 사용


 여기서는 배열의 선언, 주로 사용하는 함수, 탐색방법에 대해 알아본다.


[배열(Array)의 선언]


[배열의 함수]


[함수의 탐색]
 기존에 존재하는 for문이나 while문 외에 동적으로 사용할 수 있는 함수

 - forEach()


 - map()


[부스트코스] Full-Stack Web Developer 과정


커리큘럼 구성 학습파트 6개 + 프로젝트 6개




학습 1: 웹 프로그래밍 기초

 2018-05-03 ~ 15


 - 프로젝트 1: 나를 소개하는 홈페이지 구현 > 정리

   2018-05-12

   2018-05-14(수정)


학습 2: DB연결 웹 어플리케이션

 2018-05-17 ~ 23


 - 프로젝트 2: To-Do List 구현 > 정리

   2018-05-23

   2018-05-29 (수정)

   2018-05-30 (수정)

   2018-05-31 (수정)
   2018-06-13 (피드백 오류 수정) > 정리
   2018-06-25 (피드백 오류 수정2) > 정리



학습 3: 웹 어플리케이션 개발 1

 2018-06-02 ~ 2018-07-10


 - 프로젝트 3: 예약 관리 시스템: 메인 페이지 > 정리

    1차 제출 Fail 피드백정리 > 프로그램 수정

    2차 제출 PASS > 피드백정리


학습 4: 웹 어플리케이션 개발 2

 2018-07-28 ~ 2018-07-29

 2018-09-03 ~ 2019-01-20


 - 프로젝트 4: 예약 관리 시스템: 상세 페이지 > 정리

    1차 제출 Fail > 피드백정리


학습 5: 웹 어플리케이션 개발 3


 - 프로젝트 5: 예약 관리 시스템: 예약하기



학습 6: 웹 어플리케이션 개발 4


 - 프로젝트 6: 예약 관리 시스템: 한 줄 평 작성


[Connect] 부스트코스 오프라인 스터디


 7월 초부터 시작된 부스트코스 온라인 스터디를 9월 말까지 강남역 11번 출구에 위치한 Hollys Coffee에서 

 (사실 다 못끝내서 메신저를 통해서 아직도 진행중이다.)


Full-Stack Web Developer 과정에 대한 주제로 https://www.edwith.org/에서 제공하는 강의를 통해 공부하고, 


프로젝트를 진행하면서 그에 대한 이슈를 논의하는 방식으로 스터디를 진행했다.


Connect 재단에서도 이 과정 속에서 오프라인 스터디라는 제공 및 관리가 처음이라 어색하기도 하였지만 


나름 노력을 많이 하려는 모습도 보였다.


구글 스프레드시트를 통해 매번 스터디 진행 과정에 대해서 회의록과 진도표를 작성하도록 하였고, 


중간 중간 강의 및 QnA 시간을 제공하여 기존 프로젝트를 진행하는데에 서포트가 되는 QnA와 


제공되는 프로젝트의 확장판으로 어떠한 내용이 들어갈 수 있는지에 대한 오프라인 서비스를 제공하였다.


그렇게 두 달이라는 시간이 흘러 Connect 재단에서 제공했던 오프라인 스터디의 기간이 끝이 나고 


오프라인 스터디 조장 활동을 증명하는 활동증서를 주셨다.


스터디 하면서 이런것까지 주시다니 생각했지만 


"조장 활동 증서"의 존재는 부스트캠프 가산점 및 입과비 면제, 부스트코스 일정 기간 동안의 무료 수강권이 주어진다. ㄷㄷ


부스트캠프를 갈 수 있을 지는 모르겠지만 남은 프로젝트 진행릉 위해 부스트코스 피드백을 받기 위해서는 좋은 것 같다. ㅎㅎ




[BoostCourse] 프로젝트 3 . 예약관리 시스템 : 메인페이지



 - 이전 글


 - 다음 글


 - Pass

 - Feedback



FeedBack 중


스크립트 파일 분할 작업 처리

 - 기존에는 script.js라는 파일 하나에 모든 JS가 작성되어있어 수정이 불편

 -> .js 파일의 기능별로 작성하여 불편함을 해소



불필요한 지역변수 선언

 - API 구현 시 return 값으로 Service쪽 메서드를 반환하는 작업에서 무의미한 코드가 존재

 -> return 값으로 서비스 함수를 바로 호출해서 넘기는 방향으로 수정


효율적이지 못한 로그확인 방법

 - API 구현 시 값이 제대로 넘어오는지 확인하기 위해서 System.out.println()을 통해 출력

 -> log4j, jUnit 활용 방법 생각



이래저래 일이 많아서 이제야 통과합니다...

[BoostCourse] REST API


 1. REST API의 등장

  - 클라이언트의 종류가 웹 브라우저, 안드로이드 앱, IOS 앱 등 다양해지면서 이러한 클라이언트들에게 정보를 제공하는 방식을 하나로 일원화시키려 했다.

  - 일원화시키는 방식 중에 대표적인 방식이 HTTP 프로토콜로 API를 제공하는 것이다.

  - HTTP 프로토콜로 제공하는 API를 REST API라고 한다.


 2. API의 개념

  - Application Programming Interface의 약자

  - 어떠한 기능을 구현하기 위해 정리해놓은 라이브러리 (function)

  - 응용프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스


 3. REST API란?

  - REST 형식의 API

  - 핵심 컨텐츠 및 기능을 외부 사이트에서 활용할 수 있도록 제공되는 인터페이스


그래서 REST 방식이란건 뭔데? 


 4. REST의 특징 및 스타일 (제약조건)


  - client-server 

  - stateless

  - cache

  - uniform interface **

  - layered system

  - code-on-demand (optional)


 위 해당 사항을 지킨 API만이 RESTful API이다.


** HTTP 프로토콜을 사용하면 위 조건을 충족시킬 수는 있으나 문제는 uniform interface의 조건은 충족하기 어렵다. ** 


uniform interface의 스타일


  - 리소스가 URI로 식별되어야 한다.

  - 리소스를 생성, 수정, 추가하고자 할 때, HTTP메시지에 표현(GET, PUT, POST, DELETE) 을 해서 전송해야 한다.

  - 메시지는 스스로 설명할 수 있어야 한다. (Self-descriptive message)

  - 애플리케이션의 상태는 Hyperlink를 이용해 전이되야 한다. (HATEOAS)


 * HATEOAS: 웹 페이지 자체에 관련된 링크가 있는 것을 말한다.


5. REST 구성

 - 자원(Resource) - URI

 - 행위(Verb) - HTTP METHOD

 - 표현(Representations)


6. REST API 디자인 가이드

 1) URI는 정보의 자원을 표현

 2) 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.


 6-1. REST API 중심 규칙

  1) URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다는 명사를 사용)

GET /member/delete/1


  2) 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)로 표현

DELETE /members/1


* HTTP Method

 Method

 역할 

 POST 

 POST를 통해 해당 URI를 요청하면 리소스를 생성 

 GET

 GET를 통해 해당 리소스를 조회, 리소스 조회 후 해당 도큐먼트에 대한 자세한 정보를 가져온다. 

 PUT 

 PUT를 통해 해당 리소스를 수정 

 DELETE 

 DELETE를 통해 리소스를 삭제 


* URI는 자원을 표현하는데 집중, 행위에 대한 정의는 HTTP Method를 이용하는 것이 REST API를 설계하는 중심 규칙


 6-2. URI 설계 시 주의할 점

  1) 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용

  2) URI 마지막 문자로 슬래시(/)를 포함하지 않는다.

  3) 하이픈(-)URI 가독성을 높이는데 사용

  4) 밑줄(_)은 URI에 사용하지 않는다.

  5) URI 경로에는 소문자가 적합


 6-3 리소스 간의 관계를 표현하는 방법

  GET /users/{userid}/devices

  GET /users/{userid}/likes/devices


 6-4 자원을 표현하는 Collection과 Document

 http:// restapi.example.com/sports/soccer

 http:// restapi.example.com/sports/soccer/players/13


7. HTTP 응답 상태 코드

상태코드 

 

 200 

클라이언트의 요청을 정상적으로 수행 

 201

클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨
(POST를 통한 리소스 생성 작업 시) 

 400

클라이언트의 요청이 부적절할 경우 사용 

 401 

클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용 

(로그인 하지 않은 유저가 로그인 했을 떄, 요청 가능한 리소스를 요청 했을 때)

 403

유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드

(403보다는 400이나 404을 사용할 것을 권고, 403 자체가 리소스가 존재한다는 뜻이기 때문)

 405

클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드 

 301

클라이언트가 요청한 리소스에 대한 URI가 변경되었을 때 사용하는 응답 코드

(응답 시 Location Header에 변경된 URI를 적어 줘야 함)

 500

서버에 문제가 있을 경우 사용하는 응답 코드 


* 참고

https://ko.wikipedia.org/wiki/REST

https://meetup.toast.com/posts/92

https://www.edwith.org/boostcourse-web/lecture/16740/

[BoostCourse] 프로젝트 3. 예약관리 시스템 : 메인페이지



 - 이전 글


 - 다음 글


 - 기능 구현은 했으나 상세부부분을 수정해서 다시 제출하도록 한다.

 - 구현 방식을 정리

Project3 설정 및 구조 설계.pdf


1. List<DTO> 방식으로 JS에서 리턴받아 String 방식으로 처리했으나 Map 방식으로 API 수정


 - /api/promotions


 - /api/categoeis

- /api/products

 * index 컬럼이 하나 더 있는 이유는 product 데이터를 호출 했을 때 같은 product에 장소만 달라질 수 있다. 

 * 이와 같은 경우 본인은 id를 홀 짝으로 나눠서 <ul class="lst_event_box"> 태그 좌측, 우측으로 나눠 넣었었는데, 장소가 달라도 같은 product이기 때문에 한쪽으로 쏠리는 문제가 발생했다.


 * 그래서 데이터를 좌측, 우측으로 구분해서 넣을 구분자가 필요해, 임의로 쿼리에 rownum을 통해 임시로 만들었다.

 * 같은 product이면서 장소가 다를 경우 id가 같음에도 product 하나하나를 구분할 수 있는 index를 생성


 * 물론 다른 방법이 있을 수도 있다.


2. API 호출과 결과값을 받는 JS 쪽 구조 변경

 - 공통 모듈로 사용할 수 있는 코드로 최대한 작성



3. 자바스크립트 구조 변경 및  Promotions 캐러셀 슬라이드 구현

 - 작성중

 - 찾아본 참조 사이트

  1) https://freefrontend.com/css-carousels/

  2) http://hong.adfeel.info/frontend/%EA%B0%84%EB%8B%A8%ED%95%9C-carousel-%EC%98%88%EC%A0%9C/

  3) https://www.cssscript.com/top-10-javascript-css-carousels/


 - 결국 그냥 내가 하던데로 하게됨... CSS 적용 되게 하기가 힘듬..



자바스크립트 구조

1. commons.js, validations.js, ajax.js

2. scriptStart.js

3. categories.js, promotions.js, products.js







[BoostCourse] 프로젝트 4. 예약관리 시스템 : 상세페이지


 - 이전 글


 - 다음 글


리뷰 결과 -> Fail

다시 제출


1. 슬라이드

  - 캐러샐 방식으로 구현해야 하는데... 다시 하게 되었다...


 2. Java 컨벤션

  - 내가 보기편하려고 띄어쓰기로 여러 줄 맞춰 놓은게 문제가 될 줄이야...


 3. .gitIgnore 파일 생성

  - eclipse workspace에 생성해 놓았다.. 프로젝트 안에 생성해야 하는데 그 위에 생성해 놓았을 줄이야..

 - 코드 리뷰


 * 찾아본 코드 컨벤션

  - 코드 컨벤션에 대한 피드백은 뭐가 맞는지 잘 모르겠다.


https://www.oracle.com/technetwork/java/javase/documentation/codeconventions-141270.html#18761


 5. 주석!?!?



 6. js 파일명.. 



 7. 스크립트쪽 주석

  - 그래.. 가독성이 안좋을 수 있지.. 제출할 땐 지워야 겠네..



 8. 이건...

   - Oracle nvl 함수의 기능을 생각한거였는데 ...

   - null이 아니면 그 문자열 그대로 출력하기 위함

   - 유효성 검사를 위한 함수는 아니었기에 피드백에 의아함을 느낀다..




9. 추가로 공부해야 할 사항

 - JUnit Test를 공부할 것


+ Recent posts