JAVA/Spring & Vue APP 프로젝트(백엔드)(18)
-
21.03.06 Untact프로젝트(첨부파일 다운로드, 게시물 리스트에서 첨부 이미지 가져오는 쿼리를 게시물 마다 1번씩 실행하지 않도록 로직 수정, 관리자 회원가입 등 )
#NOTE -resource파일: 프로그램 구성을 위한 파일 ex) logo.png -업로드: 고객의 활동에 따라 변동되는 파일 servlet: multipart: max-file-size: 50MB max-request-size: 50MB SELECT * FROM genFile WHERE 1 AND relId IN #{relId} AND relTypeCode = #{relTypeCode} AND typeCode = #{typeCode} AND type2Code = #{type2Code} ORDER BY relId, fileNo #주요 소스코드 공지사항 자유게시판 글쓰기 NO. ${article.id} ${article.regDate} ${article.extra__boardName} ${article...
2021.03.06 -
21.03.05 Untact프로젝트(게시물 수정 페이지에서 기존에 업로드된 파일 노출, 수정, 삭제, 용량 표시 등 )
#NOTE DAO.java 수준에서는 동일 함수명이 존재해도 문제는 없음 But, DAO.xml 수준에서는 동일 함수명이 존재하면 문제 발생 #주요 소스코드 제목 내용 ${article.body} 첨부파일 ${inputNo} ${file.fileName} ( ${Util.numberFormat(file.fileSize)} Byte ) 삭제 수정 public ResultData addArticle(Map param) { articleDao.addArticle(param); int id = Util.getAsInt(param.get("id"), 0); changeInputFileRelIds(param, id); return new ResultData("S-1", "성공하였습니다.", "id", id); } ..
2021.03.05 -
21.03.04 Untact프로젝트(파일업로드 ajax방식으로 처리, 파일 반복문 처리, 파일 저장까지)
#NOTE 글작성 -첨부파일 생성 글삭제 -첨부파일 삭제 글수정 -첨부파일 생성 -첨부파일 수정(덮어쓰기) -첨부파일 삭제 순서: 파일업로드 => 글저장 - 파일이 먼저 생성된 후에, 관련 데이터가 생성되는 경우에는, file의 relId가 일단 0으로 저장된다. - 즉, ajax로 파일업로드는 하였지만, 파일업로드가 글작성보다 먼저 진행됐기 때문에 업로드된 파일들에는 relId가 일단 0으로 저장된 상태이다. - 글저장은 아직 진행이 안되었기 때문에 신규 글의 ID를 지금부터 가져와서 파일의 relId로 업데이트해 주어야 한다 - 따라서, 이것을 뒤늦게라도 로직을 통해 고쳐야 한다. 파일 업로드를 ajax로 하는 이유? - vue,안드로이드,리엑트 등은 파일전송을 ajax로 해야하기 때문 구아바(gua..
2021.03.04 -
21.03.02 Untact프로젝트(관리자 메인화면 구현 ~ 첨부파일 업로드 및 리스팅시 섬네일 노출까지)
#NOTE URI는 인터넷 상의 자원을 식별하기 위한 문자열의 구성쯤으로 해석 될 수 있겠다. URI의 한 형태인 URL은 인터넷 상의 자원 위치를 나타낸다. URL는 URI의 한 형태로, 바꿔 말하면 URI는 URL을 포함 하는 개념이다. container: @media, max-width, min-width가 걸려있음 즉, 반응형이 적용되어있는 것 그냥 con이 container의 줄임말 공지사항 자유게시판 바뀔때마다 실행되는 함수 select에서 디폴트로 선택되어 있는 옵션이라는 의미 일반 jsp에서 첨부파일 기능을 구현하려면 많은 로직이 필요함 스프링에선 보다 적은 로직으로 구현이 가능함 input type="file"을 하려면 form 전송방식은 무조건 POST여야 한다. 또한, form 속성에..
2021.03.02 -
21.02.28~03.01 Untact프로젝트(페이징~history.back(), location.replace() 도입까지)
# NOTE /* 랜덤 게시물 추가하는 쿼리(새로운 방식) */ INSERT INTO article (regDate, updateDate, boardId, memberId, title, `body`) SELECT NOW(), NOW(), FLOOR(RAND() * 2) + 1, FLOOR(RAND() * 2) + 1, CONCAT('제목_', FLOOR(RAND() * 1000) + 1), CONCAT('내용_', FLOOR(RAND() * 1000) + 1) FROM article; 다이나믹 SQL -와 같이 특정 조건 등에 의해 쿼리를 동적으로 수정하도록 한 SQL 우리가 앱을 개발하고, 그 앱이 우리 서버와 통신하려면 CORS를 꼭 허용해주어야 한다. 기본적으로 타 사이트에서 우리 서버에 있는 데이..
2021.03.01 -
21.02.25~27 Untact프로젝트(회원가입~인터셉터 도입까지)
@Controller public class UsrMemberController { @Autowired private MemberService memberService; @RequestMapping("/usr/member/doJoin") @ResponseBody public ResultData doJoin(@RequestParam Map param) { if (param.get("loginId") == null) { return new ResultData("F-1", "loginId를 입력해주세요."); } Member existingMember = memberService.getMemberByLoginId((String) param.get("loginId")); if (existingMember != ..
2021.02.27 -
21.02.24 Untact프로젝트(게시물 삭제, 수정, 현재날짜 적용 등)
@RequestMapping("/usr/article/doDelete") @ResponseBody public Map doDelete(int id) { boolean deleteArticleRs = deleteArticle(id); Map rs = new HashMap(); if (deleteArticleRs) { rs.put("resultCode", "S-1"); rs.put("msg", "성공"); } else { rs.put("resultCode", "F-1"); rs.put("msg", "해당 게시물은 존재하지 않습니다."); } rs.put("id", id); return rs; } @RequestMapping("/usr/article/doModify") @ResponseBody public M..
2021.02.24 -
21.02.23 Untact프로젝트(개발환경 셋팅부터 게시물 추가까지 구현)
# NOTE 프레임워크? - 이미 완성된 프로젝트 - 특정 틀이 비워져있고 그 틀을 채워가는 개념 - 이미 정해진 틀(소스코드 양식)에 맞게 작성하고 끼워 넣으면 됨 - 스프링부트에는 톰캣이 이미 내장되어있음 고객? => 브라우저 컨트롤러 - 거름망 - 업무배분 서비스 - 핵심로직 DAO(Data Access Object) - 문서고지기 - 창고지기 DTO(Data Transfer Object) DB - 창고 어노테이션 - 이 클래스가 컨트롤러 클래스라는것을 알려주는 것 - 어떤 클래스를 만들면 스프링에게 이 클래스의 용도를 알려주어야 함 # 소스코드 package com.sbs.untact.controller; import org.springframework.stereotype.Controller; i..
2021.02.23