1. 프로젝트 기획 / 분석 : 23.01.25
-
System 이란? : 하나의 목적을 가지기 위한 체계적인 방, 통합된 행위에 대한 체계
-
System Integration(SI) : 시스템 통합
-
체계란? : 업무에 있어서 체계가 있어야 한다. 물품구매 시스템에서 역할자가 필요하다.
- 인력에 대한 결재가 필요하다. 이러한 구인 시스템이 필요하다. 이러한 것들을 업무 시스템이라고 말한다.
-
결론 : 회사에 이러한 시스템이 있어서 우리는 이러한 시스템을 전산화한다.
-
전산화를 위한 이유 : 하드웨어를 살펴 볼 것, 사원들이 사용하는 컴퓨터나 소프트웨어가 있어야 한다 소프트웨어를 만드는 업체 선정, 유지보수는 어떻게 할지, 사용방법에 대한 교육은 어떻게 할지?
-
하지만, 이러한 모든 업무는 복잡해서 그럴 때, 복잡한 것을 해결하기 위해 나타난 업체가 SI 업체이다. 그 모든 일을 내가 알아서 통합해주는 업체이다.
-
SI 업체는 시스템에 대한 분석도 제대로 하고 다른 회사와 비교하여 적용할 기술들을 알려주기도 한다. 단기간 내에 서버를 구축하기도 한다.
- 하지만, 우리는 시스템있는 것을 분석하지 않고 시스템이 없는 경우 기획한다!!
2) 시스템을 기획하는 방법 :
-
역할자 구분 짓기 : 누가 사용하는지 판단하기!
- ex) 뉴렉처 사이트 : 수강생, 방문객, 선생님 등등
- 하지만, 역할자에 따라 달라지는 것이 있다.
- 문서 작성 내용 - 문서이지만 웹에서는 화면을 의미한다.
- 설계는 항상 한글로 하자. 오해의 소지를 없애기 위해
- ‘관리’라는 의미 : 등록하고 삭제하는 것
- 대시보드 같은 것은 조회라서 관리와는 다른 의미이다.
3) 역할 나누기 (등록의 입장에서 생각해보기) :
-
선생님 : 강의, 숙제, 공지사항
-
관리자 : 공지사항
-
수강생 : 댓글등록, 숙제 제출, 강의수강, 질문 등록, 마이페이지 변경,
-
하지만, 수강생 입장에서는 등록인지 아닌지 판단이 안된다.
4) 다른 시스템 관계() :
-
역할자가 꼭 사람이 아니여도 된다! (위에서는 시스템의 주체가 사람이었다.)
- ex) 자동으로 청소하는 시스템 :
-
물리적인 시스템 :
- 역할자(구성요소)로 이루어져서 체계를 이루는 복/집합적인 집합체 : 시스템 (모듈화가 되어 있는 모든 것을 의미한다)
5) 시스템 설계 과정 :
-
먼저, 등록되어 있는 것이 필요한 것부터 생각하자! 이것이 DB 설계시, 키가 되는 entity가 된다.
-
앞에 등록 되어 있는 것이 꼭 필요한 경우도 있다.
-
즉, 우리는 우리의 시스템에서 역할자와 키가 되는 것이 무엇 있는지 찾아야 한다. 이것은 답이 없지만 본인에 필요성에 따라 관리하는 시스템에 포함시킨다.
-
예를 들어, 뉴렉처 사이트에서 모르는 것들을 모아서 문제로 만들어서 이런 것들을 시험으로 만든다! 사이트를 운영해볼 때는, 뭐가 필요한지 감이 안오기 때문에 기본적인 카테고리 형식이 필요하다!
6) 시스템 설계 실습 과정 :
-
등록하는 정보가 어떤 것인지 찾아보기!
-
명사 형태가 있고 동사형태가 있는데 다루는 데이터가 무엇인지 살펴보고 관리하는 대상은 명사 쪽이다.
7) 시스템 실제 설계 과정 :
-
처음에 주 기능에 대한 설계는 팀원들이 모여서 스터디를 하면서 만들고 나머지 기능은 각자 나눠서 만든다.
-
하지만, 추가적으로 기능을 대상(명사)에 대한 것을 먼저 만들고 행위(동사)는 나머지에 쏟아져서 나온다.
-
db 설계를 위해 생각해서 생각하기!
8) CSR, SSR :
-
CSR : 클라이언트 사이드 렌더링
-
SSR : 서버 사이드 렌더링
-
페이지를 만들 떄, 프로그램을 만드는데 문서를 만드는데 클라이언트에서 만드는지 서버에서 만드는지?
-
옛날 방식 : 서버에서 모든 페이지를 만들어서 보내주는 것.
-
요즘 방식 : 서버에서는 DB의 아직 렌더링 되지 않는 비어있는 문서를 만들어준다.
-
SSR : Client(할일이 없다.) vs Server(문서를 동적으로 만들어서 제공)!
-
CSR : Client(문서를 동적으로 만드는 일 - 바인딩하는 것) vs Server(API를 통해서 데이터를 제공하는 일(Restful data를 이용한다.))
-
하지만, SSR에서 CSR로 변화하는 이유는?
-
자바스크립트를 이용해야 사용자가 페이지를 강력하게 사용할 수 있다. 페이지를 계속 갱신해야하는 일이 많기 때문에(개인 SNS의 음악 같은 것 계속 플레이 ) CSR로 기술이 변화 된다.
-
Ajax : 비동기로 데이터(XML)를 요청해서 화면을 갱신하는 기술로서 자바스크립트로 이용한다.
-
그렇기 때문에, Ajax를 이용한 Single Page Application을 기반으로 한다!(하나의 페이지 처럼 움직일 수 있도록 하는 페이지)
2. [23.01.26]
1) 플젝 피드백 :
-
최신 UI로 만들기( 모바일에선 페이저보다는 무한 스크롤, )
-
최신UI 참고(무한스크롤,)
-
디테일한 피그마 화면필요
-
관리자의 활동 줄이기(손안대고 코풀기)-모든글을 일반인과 같이 볼 필요가있을까? (없음, 신고된글/필터링된글)
-
카테고리 범주 정확히
-
리스트-공동구매에 대한 목록 조회
-
상품 안에 공구/배달/코스코 나뉘어야함 (이름 다시정하기)
-
inform 이름바꿔야함, 경로도 바꾸기
-
html 파일명은 대쉬(-)로 구분자 넣기
-
member의 list.html 파일을 purchase 폴더에 넣어서 사용해보기!!
2) Servlet 강의 :
- 요즘에는 Servlet에서 List라는 데이터만 바로 넘겨준다!! 옛날 방식으로 이젠 모든 정보를 넘겨주진 않는다.
- [쌤 질문 1] :
- WAS(Web Application Server)와 비교 WS(Web Server)
- [쌤 질문 2] :
- 서블릿의 뜻은 Server Application Let 이라서 서버 어플리케이션을 조각? 단위로 개발하게 된다고 했는데
- 이것을 실행을 유도하는 주체는 누구? : 클라이언트의 요청
- 이것을 실제로 실행을 담당하는 주체는 누구? : 톰캣
- 이것이 실행되는 흐름?은 어떻게 되는지 : 클라이언트 요청 – 웹서버 어플리케이션 – 서블릿 컨테이너 – 웹서버어플리케이션 – 클라이언트
- 정리 :
-
웹서버는 실행환경 그자체이고 WAS는 서버 어플리케이션의 코드를 실행해서 실행 결과를 돌려주는 역할을 해준다.
-
원래는 WAS는 웹서버의 기능을 포함하고 있지 않다.
-
톰캣만 WAS이지만 웹서버의 기능을 포함하고 있는 것이다.
- 보통, 리소스가 있는 요청이 GET 요청이다.
- 결과 :
- 톰캣은 URL로 매핑된 정보(Servlet 코드)를 찾아서 실행!!
- 그 후에 :
- web.xml에서 servlet 태그에 의해서 컨테이너에 담겨져 있다가 servlet-mapping 태그에 의해서 그 컨테이너에 있는지 확인하고 없으면 메모리에 올려서 바로 이용할 수 있게 한다. 있으면 바로 사용한다.
-
[서블릿의 생명 주기] :
-
처음 만들어서 init()에서 시행하고 스레드에 올라가서 service() 함수가 실행되어 WAS에서 동작한다.
- time out 함수가 지나가면 destory() 함수가 진행된다,
- 부모가 갖고 있는 코드의 흐름? : HTTP Servlet이 갖고 있는 흐름 이지만 상속 받아서 새로운 서블릿을 만든다.
- 부모인 HttpServlet에서 상속받아서 새로 NanaServlet을 만들어서 사용한다.
- 자식 Servlet을 만들었기 때문에 서비스함수도 오버로드 함수로 만들어서 다시 사용한다.
- service 함수에서는 모든 동작을 컨트롤하고 doGet이나 doPost는
3) doGet, doPost, 스태틱 메서드 실습 코드 :
- ListServlet.java
package com.newlecture.web.api.menu;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.internal.compiler.ast.ArrayAllocationExpression;
import com.newlecture.web.entity.Menu;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/admin/menus")
public class ListServlet extends HttpServlet {
static List<Menu> list; // 스태틱 생성자는 어디인가 ? Collection도 객체 배열처럼 선언하고 나중에 할당한다!
// 스태틱 생성자 : 객체를 생성하지도 않았는데 메모리에 올라가 있다. 전역적으로 미리 실행된다.
// 스태틱 변수만 여기에서 초기화 할 수 있다. 전역이기 때문이다.
static {
list = new ArrayList<Menu>();
list.add(new Menu(1,"아메리카노", 4000, ""));
list.add(new Menu(2,"카페라떼", 4500, ""));
list.add(new Menu(3,"바닐라라떼", 4500, ""));
list.add(new Menu(4,"에스프레소", 3500, ""));
list.add(new Menu(5,"카페모카", 5000, "")); // list에 저장된 값을 return 할 수 없다는 것이다. 주소값을
// xml이나 json형태로 데이터를 렌더링해서 바꿔줘야 한다.!
}
public ListServlet() {
}
// GET/POST/PUT/DELETE // 그래서 Restful API가 가능한건가? 자바스크립트에 요청만 해주고 자바스크립트에서 사이트를 구성한다!
// SSR // CSR
// 나~ 메뉴 목록 줘 ~ : GET요청 /admin/menus?q=new&p=1&s=15 <-> /admin/menus
// 나 1번 메뉴 줘 ~ : GET 요청 /admin/menu/1
// 나 3번 메뉴 지워줘 : DELETE 요청 /admin/menus/3(3번을 지워줘 ) <- > /admin/menus/3/del
// 나 메뉴 하나 생성해줘 ~ 메뉴 내용 전달: POST 요청 /admin/menus /admin/menus
// 나 3번 메뉴 내용 이걸로 수정해줘~ : PUT 요청 /admin/menus/3 /admin/menus/3/edit
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String json = "(";
// son += "(\"id ;
for(menu m : list)
json += ?;
System.out.println("do Get call"); // 추가로 배울 것 : 리플렉션 ? 어노테이션 장점?
return json;
}
}
- menu.java
package com.newlecture.web.entity;
public class Menu {
private int id;
private String name;
private int price;
private String img;
// 생성자(기본, 오버로드)
// Getters/ Setters
// toString();
public Menu() {
}
public Menu(int id, String name, int price, String img) {
super();
this.id = id;
this.name = name;
this.price = price;
this.img = img;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getImg() {
return img;
}
public void setImg(String img) {
this.img = img;
}
@Override
public String toString() {
return "Menu [id=" + id + ", name=" + name + ", price=" + price + ", img=" + img + "]";
}
}
3. 데이터베이스 공부 : 23.01.27
1) SQL(Structed Query Langauge) 란?
-
DBMS에게 질의를 위한 명령어
-
‘시퀄’이라고 부른다!
2) Database와 DBMS 의 개념
- 중복을 없애는 방법으로 결함을 줄임.
- [Database] :
- 데이터를 한 곳에 모아 두는 것을 데이터 베이스라고 한다.
- 데이터들을 잘라서 모아두고 참조하게만 한다.
- 중복된 데이터를 가지고 있으면 데이터 결함이 발생한다! 그래서
- 네트워크로 연결해서 두고 어디 한 공간에 둔다. 창고에 두고 아무도 사용할 수 없게끔 자원을 관리하자!
- 그 관리자가 DBMS이다.
- [DBMS] :
- 오라클이 DBMS이지만 오라클이 MySQL을 이용한다!
- 하지만, 오라클은 비싸서 MySQL에서 만들어진 무료 버전 서버인 MariaDB를 이용해서 서비스를 만든다!
- [SQL(Structed Query Language)] :
- SQL 명령어를 통해서 DBMS를 이용한다.
- SQL의 DDL() : create/alter/drop
- SQL의 DML(조작어) : select/insert/update/delete
- SQL의 DCL(control = 권한부여) : grant/revoke
- [SQL을 배우고 나서 할 일] :
- DBA : 오라클을 설치하고 백업이나 스케쥴링을 하는 사람! 제품에 대해 아는 사람이다. Oracle DBA, MySQL DBA라고 불린다.
- PL SQL : 조건을 검사하거나 반복하는 일들을 함수로 만드는 사람! java나 c++들이 데이터를 가져가서 제어를 하였는데 DBMS에서 함수를 만드는 작업을 했다.
- stored 프로시저(저장 프로시저)를 가져가다가 조건이나 함수를 만드는 것을 DB에서 할 수 있는데 이것은 PL에는 제어구조가 포함되어 있다.
- 언어마다 제어문이 다르다.
- 10년 전에는 이용하면, 네트워크 환경이 쾌적하게 된다. 하지만, 요즘에는 이용하지 않는다. 그 이유는 뭘까?
- 10년 전에는 모든 데이터는 DB에만 있는데 요즘에는 데이터라는 개념이 달라졌다. 어플리케이션의 데이터는 Rest API 일 수도 있고 빅데이터라는 데이터가 있을 수 도 있고 마이크로하게 데이터를 이용해서 업무가 굉장히 많다.
- 마이크로한 서비스에서는 데이터를 여기저기 흩어 놓을 수 없어서 DBMS를 가져오는 방식을 JPA로 사용한다. JPA는 ORM인데 데이터베이스를 염두해두지않고 설계를 하고 자바 객체인 entity에 포커스를 두고 활용해서 데이터를 가져오는 것이다.(JPA 공부할 것!)
- 튜닝 : 특정 DB에만 데이터가 많이 쌓여 있기 때문에 데이터를 느려지게 실행계획을 보고 한줄만 보면 데이터를 불러오는 속도를 빠르게 만들어 줄 수 있다. 이러한 것을 이해해보려면 서비스를 직접 서비스해봐야한다.
- [오라클 실습 준비] :
- 오라클을 설치하지 않을 것이다. DBMS는 관리자이다. 쌤이 설치하신 DBMS를 같이 공유하여 사용하면 된다.