Adventure Time - Finn 3
본문 바로가기

JAVA71

세션스토리지로 필터 만들기 관리자 페이지에서 후원순과 최신순으로 가져온 데이터를 금액으로 필터링하여 출력해 보고자 한다 필터링 방법을 세션스토리지를 활용하여 제작해보았다 세션 스토리지 사용: sessionStorage.setItem('userInfoObj', JSON.stringify(userInfoObj)); 세션 스토리지 데이터 확인: const userInfoObj = JSON.parse(sessionStorage.getItem('userInfoObj')); sponsorListDate.js console.log("[로그] sponsorListDate.js"); $(document).ready(function(){ $("#btnDate").click(function(){ console.log("[로그] sponsorListD.. 2024. 2. 12.
후원 SQL 변경 문제점 : 같은 금액이면 등수가 같게 나온다 같은 금액이면 REG_DATE 로 확인해서 먼저 등록한사람의 등수가 더 높게 만들기 ------v1-- SELECT NVL( S.LOGIN_ID,'탈퇴한 사용자') AS LOGIN_ID, SUM(S.AMOUNT) AS TOTAL, NVL( M.NAME,'탈퇴한 사용자')AS NAME, RANK() OVER (ORDER BY SUM(S.AMOUNT) DESC) AS RANKING FROM SUPPORT S LEFT OUTER JOIN MEMBER M ON S.LOGIN_ID = M.LOGIN_ID GROUP BY S.LOGIN_ID, M.NAME; 동일한 후원 금액을 가진 사용자 중에서 REG_DATE를 기준으로 먼저 등록한 사용자가 더 높은 등수를 갖도록 하려.. 2024. 2. 10.
밸런스 게임 후원 트리거 V1~V3 후원 트리거 만들기 후원이 발생하면 해당 유저가 후원했던 총 후원 금액이 얼마 이상이면 등급업 4등급까지 있을 예정 V1 CREATE OR REPLACE TRIGGER SUM_SUPPORT_TRIGGER BEFORE INSERT ON TEEMO.SUPPORT FOR EACH ROW DECLARE --변수 선언 TOTAL NUMBER; BEGIN IF INSERTING THEN --INTO 변수 대입 SELECT SUM(AMOUNT) INTO TOTAL FROM TEEMO.SUPPORT WHERE LOGIN_ID = :NEW.LOGIN_ID; --SUPPORT에 INSERT된 LOGIN_ID의 AMOUNT의 총액을 가져온다 IF(TOTAL>=0) THEN TOTAL := TOTAL+ :NEW.AMOUNT;.. 2024. 1. 31.
MVC 주의사항 MVC M SQL DAO -> 인자로 DTO를 받는다 (결합도를 낮추기 위해) DTO를 임의로 바꾸거나 값을 변경하면 안됨 ==>C 가 DAO 진입전에 전부 세팅해줘야함 V .jsp JAVA가 보이면 안됨 EL JSTL 커스텀태그 내부에서 JSTL,EL 사용가능 C .jsp apple.do AppleAction(C) banana.do bananaPage.do BananaAction(C) banana.jsp (v->c->c->v) 컨트롤러 이동 규칙 1. test.jsp 어떤 페이지를 보여주는 용도의 Action(C)이 존재함 mypagePage.do MypagePageAction(C) 회원의 정보가 필요해~~ mDTO=mDAO.selectOne(mDTO); req.setAttribute("data",mD.. 2024. 1. 25.
HandlerMapping 스프링 FC(프론트 컨트롤러)에서 HandlerMapper가있다 HM 핸들러 현재 FC는 forward를 받기위해 if를 사용했다 Action action =handler.getAction(commend); ActionForward forward = action.execute(request,response); 핸들러에게 부탁을 해서 받아오겠다 스프링엔 있지만 자바에는 없기때문에 만들어 보았다 class HandlerMapper 생성 HandlerMapper 는 pojo이다 사용자의 요청정보에 알맞는 Controller(==Action 객체)를 반환 private Map mappings; 커맨드에 인해 알맞는 액션을 반환하기위해 map이 가지고있음 하지만 객체 생성이 안되어있기때문에 생성자를 이용해 new.. 2024. 1. 19.
서블릿 - 리스너 외부의 자극,액션, 수행을 감지 -모니터링함 외부의 요청, 자극, 수행, 액션등을 항상 감지(모니터링)하는 것 : 해당 리스너가 언제 반응할지 설정하며 생성함 -> "서블릿 컨테이너가 시작될때" 로 설정함 == 톰캣이 시작될때 실무에서 사용되는 리스너 서블릿 컨테이너가 실행될때 Lifecycle - 90퍼 이상 사용 서블릿컨테이너에 변화가생겼을대 Changes to attributes 세션이 생겼을때 Lifecycle 세션이 변화가 생겼을때 Changes to attributes 리퀘스트가 생겼을때 Lifecycle 리퀘스트가 변화가 생겼을때 Changes to attributes 리스너 생성 -> "서블릿 컨테이너가 시작될때" 로 설정함 == 톰캣이 시작될때 public void contextIniti.. 2024. 1. 18.
서블릿 - 필터 request.setCharacterEncoding("UTF-8"); 매번 넣어줘야했다 그래서 필터를 이용해서 UTF-8을 해주도록했다 필터 설정 생성시 fliter mapping에 대해 어떤요청을 처리할 것인지 정한다 *.do *.jsp 생성하면 서블릿을 상속받았다 그래서 어노테이션이 있음 @WebFilter({ "*.do", "*.jsp" }) 중괄호는 .메서드가 여러개라서 new가 미리 작성되었음 서블릿 컨테이너(톰캣)가 싱글톤 유지 + 제때에 메서드를 수행시켜줌 컨테이너의 역할 == 객체를 생성(new를 대신해줌) 및 관리(싱글톤 유지) 및 수행(.메서드()를해줌) ★ 필터는 타고타고 다닐수있음 뜻 : 다음 필터가 존재한다면 , 그곳으로 이동해라 더이상 수행할 필터가 없다면 원래 수행하던 요청으로.. 2024. 1. 18.
SQL 작성 --QUESTIONS-- --문제 전체 조회-- SELECT Q.QID, Q.TITLE, C.CATEGORY, COALESCE(S.SID, 0) AS SAVE_SID --코우얼레스 FROM QUESTIONS Q JOIN CATEGORY C ON Q.CATEGORY = C.CGID LEFT JOIN SAVE S ON S.QID = Q.QID AND S.LOGIN_ID = 'user' WHERE Q.Q_ACCESS = 'T'; --COALESCE와 NVL 차이점 --둘다 NULL 값을 처리하기 위한 함수 -- COALESCE : --여러 개의 인수를 받아 첫 번째로 NULL이 아닌 값을 반환합니다 --인수로 전달된 값들 중에서 NULL이 아닌 첫번째 값을 반환하며 모든 값이 NULL인 경우에는 NULL을 반.. 2024. 1. 17.
밸런스 게임_V2 - 모델 뼈대 공통 지문 문제조회 : QuestionDTO in : x searchCondition - 문제전체조회 out : qid, title,category / save QuestionDAO - selectAll() //승인 난 문제 문제상세조회 : QuestionDTO in : qId searchCondition - 문제상세조회 out : qId, title, answer_A, answer_B, explanation, category QuestionDAO - seleceOne() 회원 회원상세 : MemberDTO in : loginId searchCondition - 유저조회 out : loginId,name,email,adderss,gender,age,geade,mAdmin MemberDAO - select.. 2024. 1. 12.
밸런스 게임 - DTO모음 AnswerDTO(답변) private int aId; private int mId; private int qId; private String answer; //------------java------- private String searchCondition; private int answerCntA; private int answerCntB; CommentDTO (댓글) private int cId; private int qId; // questions 테이블의 idx를 참조 private int mId; // users 테이블의 idx를 참조 private String content; //---------java---------- private String searchCondition; private.. 2024. 1. 12.
서블릿 index - 컨트롤러 .do 파라미터를 줄일수 있음 서블릿은 하나만 -낫 포조는 무겁기 때문에 단 하나만 두는것이 원칙 나머지를 포조로하면 경량화가 된다 전달할 데이터가 있으면 무조건 포워드 alert(); request의 데이터를 곧바로 뽑아올 수 있는 EL(표현언어) 형태 ${} ↑ request,session,application 에 저장된 attribute를 곧바로 작성 test.jsp라는 페이자 존재할때, 이 페이지를 갈 수 있는 액션은 단 1개 존재해야함 ==forward.setPath("test.jsp")단 한개라는 뜻! /슬래시 스프링 프레임 워크는 경로관리를해줌 절대경로 가장 첫페이지 엄청 중요 절때 못찾음 프론트 컨트롤러에 스텍틱이없음 객체가 수행하고 있음 누가 하는거임? utile은.. 2024. 1. 11.
커뮤니티 MVC - 2 중요★ (컨트롤러) 컨트롤러를 서블릿으로 가져오는 것이 mvc2 의 시작이다 해당 서블릿은 .do에 반응하기 때문에 앞으로 요청을 ,do로 바꿔줄예정 기능 로그인 회원가입 마이페이지 이름변경 -삭제가능 로그아웃 댓글 출력(이름으로)-탈퇴한 사용자는 탈퇴한 사용자라고 출력 댓글작성(로그인시만 가능) 유저들 출력 erd CREATE TABLE MEMBER( MID VARCHAR(30) PRIMARY KEY, MPW VARCHAR(20) NOT NULL, NAME VARCHAR(20) NOT NULL ); CREATE TABLE REPLY( RID INT PRIMARY KEY, WRITER VARCHAR(20) NOT NULL, CONTENT VARCHAR(50) NOT NULL ); crud 회원가입 -c 로그인 -r 유저출력.. 2024. 1. 10.
톰캣 포함 MVC - 2 M DTO > 테이블 DAO 인자를 DTO boolean DTO AL : 결합도를 낮추기 위함 V 사용자 편의성 UL/UX 유효성 검사 안내 웹 접근성 표준 지침 C controller.jsp 에서 action 파라미터 받아서 if 분기 처리하여 코드를 작성 문제점 1)하나의 기능을 수정한다고해도, 전체 프로금이 동작 xxx :응집도가 낮아서 문제인 상황 2) .jsp는 V 을 의미함 C는 JAVA 코드를 사용함 => .java 페이지를 활용하는 것이 바람직함 ↓ MVC 2 패턴 controller.jsp --->> controller.java로 변경 각각의 if문 내부의 기능들을 클래스화(모듈화,컴포넌트화): 응집도가 높아짐 == 유지보수에 용이 jsp 내장객체를 사용해야함 request, 그래서 그냥.. 2024. 1. 10.
밸런스게임 - ERD DB 설계 요구사항 [유저] 유저는 게임을 할수있다 유저는 게임하기시 본문제 모음에서 랜덤으로 중복되지않게 나와야한다 유저는 질문 종류를 확인할 수있다 유저는 문제의 결과를 확인할때 해당 문제를 푼 유저들의 답변 %를 볼 수있어야한다 유저는 문제의 결과를 볼때 해당 문제의 댓글을 확인할 수 있다 [회원] 회원의 개인정보가 보관되어야한다 회원의 정보는 ID,이름,주소,전화번호,이메일 ,성별,나이 회원은 ID로 식별가능하다 회원으로 내가 푼 문제를 확인 가능하다 회원은 찜을 할 수 있다 회원은 찜을 제거할수있다 회원은 탈퇴가가능하다 회원은 댓글을 달수있다 회원은 관리자 문제제출 게시판에 문제를 올릴수있다 회원은 문제제출시 제목 답변 A,답변 B , 설명을 작성해야한다 회원은 관리자와 유저로 나뉜다 회원은 후.. 2024. 1. 9.
밸런스게임 - LP 중간 프로젝트 기능구현 리스트 COMMON 회원가입 - C 로그인 - R 마이페이지 - R - 개인정보수정( 이름변경 ) -U → 회원탈퇴(로그아웃처리) -D 로그아웃 USER 문제풀기 - R → 결과출력 - R → 문제찜 - C,U 문제제출 - C 찜 목록 - R 완료된 지문 출력(내가 푼 지문들) - R 모든 지문 출력 - R 후원하기 - C ADMIN 유저관리 → 회원조회 - R → 회원강퇴 - D 문제조회(페이지조회) - R 문제생성 - C 문제상세보기시 - R 문제수정 - U 문제삭제 - D 문제승인여부 - R 승인하기 - C 거절하기 - D 2024. 1. 9.
커뮤니티 톰캣이용 MVC - 1 기능 로그인 회원가입 마이페이지 이름변경 -삭제가능 로그아웃 댓글 출력(이름으로)-탈퇴한 사용자는 탈퇴한 사용자라고 출력 댓글작성(로그인시만 가능) 유저들 출력 erd CREATE TABLE MEMBER( MID VARCHAR(30) PRIMARY KEY, MPW VARCHAR(20) NOT NULL, NAME VARCHAR(20) NOT NULL ); CREATE TABLE REPLY( RID INT PRIMARY KEY, WRITER VARCHAR(20) NOT NULL, CONTENT VARCHAR(50) NOT NULL ); crud 회원가입 -c 로그인 -r 유저출력 - r 유저 삭제 -d 유저이름변경 -u 마이페이지- r 댓글출력 - r 댓글 상세 - r 댓글 생성 - c 댓글 삭제 -d 댓글.. 2024. 1. 9.
밸런스게임 UF 목적 및 의도 : 밸런스 게임을 통해 자신이 선택한 결과와 다른사람들이 선택한 결과를 확인 할 수 있으며 댓글을 달 수 있다 중간 프로젝트 기능구현 리스트 COMMON 회원가입 - 페이지 이동, 회원가입처리 로그인 - 페이지이동, 로그인처리 마이페이지 - 개인정보수정( 이름변경 ) → 회원탈퇴(로그아웃처리) 로그아웃 USER 문제풀기 → 결과출력 → 문제찜 문제제출 찜 목록 완료된 지문 출력(내가 푼 지문들) 모든 지문 출력 후원하기 ->유저는 쿠키 같은걸 구매(1개에 10원) -> 문제에 후원(여기가 애매함)-> 문제 생성한 사람에게 전달 ->생성한 사람은 쿠키로 돈을 벌 수 있다 -> 관리자는 3퍼센트를 가져간다 (기대효과 : 문제 생성을 유도 하여 사이트를 더욱 활성화 시킬 수 있다 -> 사용자가 .. 2024. 1. 7.
웹크롤링 연습 기존 제작했던 프로그램에 크롤링 데이터 가져와서 db에 저장해보기 client package client; import ctrl.CTRL; public class Test { public static void main(String[] args) { CTRL app=new CTRL(); app.start(); } } ctrl package ctrl; import java.util.ArrayList; import model.BoardDAO; import model.BoardDTO; import model.Crawling; import model.MemberDAO; import model.MemberDTO; import view.VIEW; public class CTRL { private MemberDAO m.. 2023. 12. 26.
웹크롤링 스크랩핑이란? 데이터를 많이 모으는 작업 크롤링이란? 데이터를 정제하고 원하는 형태로 가공하는 작업 => 데이터를 많이 모아서 원하는 output으로 정제, 가공하는 작업 빅데이터에서 많이 활용되는 기술 : 웹으로부터 데이터를 많이 모아서 가공할 예정 크롤링할 타겟 웹 페이지를 알아야한다 "주소"를 알아야한다 =="URL" URL은 "페이지"로 구성되어있다 개발자가 페이지를 코드로 작성하면 웹 브라우저라는 sw가 코드를 해석해서 UI로 보여준다 final String url ="http://www.cgv.co.kr/movies/?lt=1&ft=0"; 웹페이지 정보를 JAVA에서는 Document라고 함 Document doc =null; 우리가 사용할 웹 페이지 정보 (Document)타입은 Java에서.. 2023. 12. 26.
계시판 만들기 - DB MemberDTO mid mpw name BoardDTO bid title writer content regdate 로그인 로그아웃 글 작성 - 반드시 로그인해야함 글 목록 출력 - 작성자 검색 - 글 제목 검색 - 시간순 정렬 - 글 작성자의 이름을 출력 글 내용 보기 - 내 글이라면 변경 및 삭제 가능 글 내용 변경 - 내 글만 변경 가능 글 삭제 - 내 글만 삭제 가능 이름으로 검색 제목으로 검색 client package client; import ctrl.CTRL; public class Test { public static void main(String[] args) { CTRL app=new CTRL(); app.start(); } } ctrl package ctrl; import java... 2023. 12. 20.
MVC - 자판기 프로그램 (var.4) 상품추가,삭제는 앞에서 했으니 생략하였습니다 var.4 - 장바구니 기능 추가 상품목록전체출력 Product selectAll 가격검색출력 [사용자] 상품선택 [사용자] Product selectOne 장바구니에 저장된 상품 구매 [사용자] Product U 재고추가 [관리자] Product U 회원가입 [로그아웃 상태일때] 로그인 [로그아웃 상태일때] 로그아웃 [로그인 상태일때] 비밀번호변경 [로그인 상태일때] 회원탈퇴 [로그인 상태일때] ▼▼▼ adminView 재고추가 userView 가격검색출력 상품선택 장바구니에 저장된 상품 구매 commonView // 공통 사용 상품목록전체출력 상품번호 입력 상품번호 유효성검사 없는상품 안내 재고 입력 재고 유효성검사 성공! 실패... 번호 입력 번호 유효성.. 2023. 12. 18.
MVC - 자판기 프로그램 (var.3) MemberDTO MemberDAO C 회원가입[로그아웃 상태] R ID중복검사/로그인[로그아웃 상태],로그아웃[로그인 상태] U 비밀번호변경[로그인 상태] D 회원탈퇴[로그인 상태] U 비밀번호변경[로그인 상태] ctrl 로그인 상태 확인하기 현재 비밀번호 입력받기 틀렸다면 메뉴로 돌아가기 맞으면 바꿀비밀번호 입력받기 변경 한글코딩 user!=null 일때 변경 가능 현재 비밀번호 입력 if(아니면) continue 맴버DTO.setPw(바꿀 비밀 번호 입력) 맴버DTO.setSearchCondition("비번변경") 맴버DAO.update(맴버DTO) model if(searchCondition 비번 변경) 아이디로 찾아서 datas.setPw(맴버DTO.getPw) D 회원탈퇴[로그인 상태] var.. 2023. 12. 15.
MVC - 자판기 프로그램 (var.2) 추가 기능 메뉴검색 기능 이름검색 여러개가 나올 수 있기 때문에 selectAll ProductDTO를 인자로 넘길때 searchConditon = "이름검색" 검색하고 싶은 이름은 매개변수 name을 이용 재고있는것만 여러개가 나올 수 있기 때문에 selectAll ProductDTO를 인자로 넘길때 searchConditon = "품절제외" [관]메뉴가격변경 변경이기 때문에 update를 사용 ProductDTO를 인자로 넘길때 searchConditon = "가격변경" 검색하고 싶은 가격은 매개변수 price을 사용 client package client; import ctrl.Ctrl; public class Client { public static void main(String[] args) {.. 2023. 12. 14.
MVC - 자판기 프로그램 (var.1) LP 메뉴추가[관] 메뉴목록출력 메뉴선택 메뉴재고변경[관] 메뉴삭제[관] ------------------- 메뉴검색 메뉴 가격 변경[관] ------------------- 장바구니 Client package client; import ctrl.Ctrl; public class Client { public static void main(String[] args) { Ctrl app=new Ctrl(); app.start(); } } Ctrl package ctrl; import java.util.ArrayList; import model.ProductDAO; import model.ProductDTO; import view.View; public class Ctrl { private ProductDAO.. 2023. 12. 13.
MVC var.3 2023.12.13 추가 웹 개발에서는 기본생성자를 사용하는 것을 원칙으로 한다!! : new 할때 생성자의 인자로 넣는 값중에서 어떤 값이 정말 유효한 값인지 파악하는 시간을 줄이기위함 모델 : 응집도를 높이기 위해 같은메서드에 만든다 client public class Client { public static void main(String[] args) { StudentCtrl app=new StudentCtrl();//설치 app.startApp();//실행 } } model package model; public class StudentDTO { private int num; // PK private String name; private int score; private String searchC.. 2023. 12. 12.
MVC - var.2 , var.3 모델에서 R: 데이터 반환이 목표 update에서 var.1 처럼 하면 이름변경시 점수입력 받는 인자를 이름(String)으로 오버로딩하여 해결할 수 밖에 없다 하지만 오버로딩으로 해결하면 기능변경시 실수가 자주 발생하기때문에 현업에서 사용되지 않는 방법이다 메서드를 오버로딩하여 여러개를 작성하면 "응집도가 낮아짐" 유지보수에 불리한 코드 ver 1은 결합도가 높은 코드 :코드에 변경사항이 발생했을떼 ,함께 바꿔야하는 코드가 많은 경우를 의미함 좋은 코드란? 외워 - 유지보수가 용이한 코드 2023. 12. 12.
개발 패턴 : MVC var.1 mvc패턴을 사용 하지 않을 때 팀플할때 코드가 Test.java 파일 1개 1) 다른 사람이 코드 작성중일때 - 실행 불가능 2) 다른 사람과의 동시간 형상(버전)관리가 불편함 프로그램 코딩을 M V C Model 데이터와 관련된 작업을 처리하는 부분 "나는 항상 정확한 값을 받았다" CRUD 구현 View 사용자와 관련된 작업을 처리하는 부분 "세상에 정상적인 사용자는 없다." 사용자의 모든 입력 값에 대해서 검사 == 유효성 검사 사용자에게 친절한 프로그램이 될수있도록 고민하는 역할 ==사용자 편의성 == UI/UX Controller M-V이어주는 역할 M과 V는 절대로 직접 결합되어서는 안됨! 절대 안됨!! Controller를 통해서만 결합될 수 있습니다!! 하나의 프로그램에서 Model,Vi.. 2023. 12. 11.
예외처리 예외란? 예외,에러,오류,이슈,문제,컴플레인,... 프로그램을 비정상적으로 종료되게하는 문제들 =>사용자가 원할때 종료하는 것이 바람직함 Exception 예외가 발생되면 캡쳐 =>원인파악=>해결책 예외처리를 왜해야하는가? 프로그램은 절대 비정상 종료되면 안됨 1) 예외가 발생되면 무시하고 다음 스텝으로 이동 2) 예외가 발생할수 있으니까, 제대로 사용해~ 하고 안내 > 정수 정수를 입력해주세요 1~10사이로 입력해주세요! 정수입력 >> 5 5를 입력했습니다! 한글코딩 1~10사이의 정수를 입력해야합니다. 정상입력해야 종료됩니다 while try 정수입력 >> 정수 catch 정수를 입력해주세요 1~10사이로 입력해주세요! try 정수입력 >> 5 break 5를 입력했습니다! public class T.. 2023. 12. 11.
서점 - 배스트셀러 추가 package team3_1; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; class Book { private int id;// key private String publisher;// 출판사 private String writer;// 작가 private int price;// 가격 private String bookTitle;// 책제목 private String genre;// 장르 private int inventory;// 재고 public Book(int id, String publisher, String writer, int price, String bookTitle, String genre, .. 2023. 12. 10.
서점 - 배스트 셀러 미완 배스트 셀러 제외 완성 - 2023.12.10 package team3_1; import java.util.ArrayList; import java.util.Scanner; class Book { private int id;// key private String publisher;// 출판사 private String writer;// 작가 private int price;// 가격 private String bookTitle;// 책제목 private String genre;// 장르 private int inventory;// 재고 public Book(int id, String publisher, String writer, int price, String bookTitle, String genre,.. 2023. 12. 10.