전체 글298 [웹프로젝트] 10. 마이페이지(3) 프로필이미지 변경 요청 ㅁ myinfo.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>style> #profileImg{ width:250px; height:250px; border:1p.. 2024. 10. 29. [웹프로젝트] 9. 마이페이지(2) 수정 요청 ㅁ myinfo.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>style> #profileImg{ width:250px; height:250px; border:1.. 2024. 10. 29. [웹프로젝트] 8. 마이페이지(1) 조회 ㅁ views/member에 myinfo.jsp를 만든다. %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>style> #profileImg{ width:250px; height:25.. 2024. 10. 29. [웹프로젝트] 7. 회원가입(3) - 암호화 후 로그인 ㅁ 회원가입을 암호화해서 지금 로그인이 안되는 상태다.- 지금 쿼리는 아이디와 비번으로 찾고 있는데, 실제 db에 저장된 비번은 암호문이기 때문에 평문값으로 조회할 수가 없다.- 평문을 암호화해서 조회할 수도 없다. SHA 방식은 가능. 그러나 BCrypt 방식은 똑같은 평문을 암호화할 때마다 ㅁ배번 다른 암호문 나오기 때문에 그렇게는 불가능하다.- 우선은 아이디 가지고 조회를 한다.그리고 b~에서 제공하는 특정 메소드를 사용해서 평문값과 암호문값이 일치하는지 비교해볼 수 있다. ㅁ member-mapper.xml xml version="1.0" encoding="UTF-8"?>DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http:.. 2024. 10. 29. [웹프로젝트] 6. 회원가입(2) - 암호화 ㅁ 암호화- 어떠한 값(평문)을 다른사람들이 알아볼 수 없는 암호문으로 변경하는 과정- DB 같은 저장소에 개인정보 중 보호해야되는 값들은 암호문으로 보관해야됨. - 암호화: 평문 -> 암호문- 복호화: 암호문 -> 평문 - 양방향 암호화 방식: 암호화, 복호화 둘 다 가능.- 단방향 암호화 방식: 암호화만 가능. - 옛날에는 양방향 암호화 방식으로 비밀번호를 처리했다.그래서 비밀번호 찾기하면 기존 비번을 알려줄 수 있었다.평문을 유추할 수 있다는 것은 보안에 취약하다는 뜻이다.그래서 단방향 암호화 방식으로 보안정책이 바뀌었다.이때 많이 사용하던 방식이 SHA 암호화 방식이다. (해쉬알고리즘) - 그런데 SHA방식도 취약점이 있었다.매번 똑같은 평문을 입력하면 매번 똑같은 암호문을 만들어준다.ex) 11.. 2024. 10. 28. [웹프로젝트] 5. 회원가입 ㅁ member 폴더 우클릭 signup.jsp 생성 %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body> div class="container p-3"> jsp:in.. 2024. 10. 28. [웹프로젝트] 4. 로그인, 로그아웃, 회원가입 ㅁ header.jsp 전 후 %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">script src="https://ajax.googleapis.com/ajax/li.. 2024. 10. 28. [웹프로젝트] 3. 단위테스트? 멤버 mapper ㅁ 회원서비스 한다. ㅁ - 원래 개발은 쿼리부터 하고 dao 메소드 만들고- 쿼리테스트라고해서 지금 실행할 이 쿼리문ㅇ ㅔ문제가 없는지 일괄적으로 테스트를 해볼 수 있다. 그걸 쿼리테스트라고 한다. ㅁ member-mapper.xml xml version="1.0" encoding="UTF-8"?>DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >mapper namespace="memberMapper"> resultMap id="memberResultMap" type="MemberDto"> result column="user_no" propert.. 2024. 10. 25. [웹프로젝트] 2. 헤더, 푸터, 메인페이지, 에러페이지 ㅁ header.jsp, footer.jsp 생성 ㅁ header.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">script src="https://aj.. 2024. 10. 25. [웹프로젝트] 1. 세팅 ㅁ sql developer에서 계정 생성- db가 먼저다. create user spring identified by spring;grant connect, resource to spring; ㅁ 샘플 스크립트 실행- 실수로 관리자 계정에 설치하면 오라클 다시 설치해야 한다.삭제구문 때문이다. ~ 테이블들이 많이 있다. -----------------삭제--------------------접속유저의 모든테이블 및 제약조건 삭제BEGIN FOR C IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP EXECUTE IMMEDIATE ('DROP TABLE '||C.TABLE_NAME||' CASCADE CONSTRAINTS'); END LOOP;END;/-.. 2024. 10. 25. 파일업로드(11) 분할 2024. 10. 25. 파일업로드(10) 분할 2024. 10. 25. [Spring] 파일 업로드(9) 에디터로 파일업로드 ㅁ main.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 25. [번외] 에디터 ㅁ summernote 홈페이지( https://summernote.org ) - ctrl + shift + r 강력 새로고침. 캐시 다 날림. ㅁ 첨부파일 업로드 프로젝트 main.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>In.. 2024. 10. 24. [Spring] 파일 업로드(7) 첨부파일 목록 조회 ㅁ main.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 24. sql developer에서 설치한 글꼴이 안 뜰 때(D2Coding) ㅁ D2Coding 폰트 다운- D2Coding 다운로드 깃허브 주소( https://github.com/naver/d2codingfont ) ㅁ D2Coding 폰트를 다운받고 윈도우에 설치했는데도 sql developer의 글꼴 목록에 나타나지 않는다. - 우클릭 - 추가 옵션 표시 - 모든 사용자용으로 설치 - sql developer를 껐다가 다시 킨다.- 상단의 도구 메뉴 - 환경설정 - 코드 편집기 - PL/SQL 구문 색상 - 글꼴의 글꼴 이름에서 이제 D2Coding이 보인다. 2024. 10. 24. [Spring] 파일 업로드(6) 비동기식으로 첨부파일 업로드 ㅁ main.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 24. [Spring] 파일 업로드(5) 다중 파일 업로드 ㅁ main.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js">scr.. 2024. 10. 24. [Spring] 파일 업로드(4) 한 개의 첨부파일 업로드(3) ㅁ 그런데 첨부파일 업로드할 때마다 이 긴 코드를 매번 작성해야 한다.- 모듈화 하는 것이 좋다. util성 클래스로 만든다.- 페이징 처리, 파일 업로드는 매번 똑같은 코드가 작성된다. ㅁ BoardController package com.br.file.controller;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PostMapping;import .. 2024. 10. 24. [Spring] 파일 업로드(3) 한 개의 첨부파일 업로드(2) ㅁ 화면에서 업로드한 첨부 파일이 내가 지정한 경로에 내가 지정한 이름으로 저장은 되었다.- 이제 db에 insert한다. ㅁ 현재 게시글 등록 요청이라는 하나의 기능이다. board에도 attachment에도 isnert를 해야 한다.- 하나의 기능에 2개의 sql문을 실행해야 한다.- 하나의 기능이기 때문에 service는 하나다. 실행할 sql문은 2개니까 2개의 dao를 호출해야 한다. ㅁ DB ㅁ board가 부모고 attachment가 자식이라 board에 먼저 insert를 해야 한다.- attachment의 ref_board_no 컬럼은 board의 board_no를 참조하고 있다. (외래키 제약조건) ㅁ 쿼리를 미리 생각해본다 - mapper 파일 안에 세미콜론은 없어야 한다... 2024. 10. 24. [Spring] 파일 업로드(2) 한 개의 첨부파일 업로드 ㅁ main.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body> h2>1. 한 개의 첨부파일 업로드 테스트h2> h2>2. 다중 첨부파일 업로드 테스트h2> h2>3. 비동.. 2024. 10. 23. [Spring] 파일 업로드(1) 세팅 ㅁ 5번째 프로젝트- 다 써볼 예정. + 파일 업로드 ㅁ sql develoer- sbatis 계정으로 테이블 2개, 시퀀스 2개를 더 만든다.- 총 테이블 3개(NOTICE, BOARD, ATTACHMENT)와 시퀀스 3개(seq_notice, seq_bno, weq_fno)가 있다. create table board ( board_no number primary key , board_title varchar2(100) not null , board_content varchar2(4000) ); create table attachment ( file_no number primary key , file_path varchar2(200) , original_name varchar2(200).. 2024. 10. 23. [Spring] AOP 트랜잭션 처리 ㅁ 하나의 서비스에 하나의 쿼리만 실행시, 쿼리가 성공적으로 수행되면 자동으로 스프링에서 커밋처리가 된다.- 그런데 하나의 서비스에 여러 dml문을 수행할 때가 있다.여러 dml문이 정상적으로 다 완료되었을 때만 커밋이 진행되어야 한다.중간에 하나라도 예외가 발생하면 rollback해서 모든 dml문들이 취소되어야 한다.- 첫번째 dml문이 성공적으로 수행되어도 두번째 dml문에서 예외가 발생하면 이 기능은 실패한 것이다. ㅁ NoticeService package com.br.sbatis.service;import java.util.List;import com.br.sbatis.dto.NoticeDto;public interface NoticeService { // 전체목록조회 ListN.. 2024. 10. 23. [Spring] @Around ㅁ AfterLoggingAdvice는 잠시 끈다. @Aspect를 주석처리한다.- 빈으로도 등록하고 AOP로도 등록해야 한다. - @Aspect가 AOP로 등록하는 어노테이션이다.- 빈 등록은 3가지 방법이 있는데 자바 방식으로 SpringBeanConfig 클래스를 만들었었다. ㅁ com.br.sbatis.aop에 AroundLoggingAdvice 클래스를 만든다. package com.br.sbatis.aop;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import lombok.extern.slf4j.Slf4.. 2024. 10. 23. [Spring] AOP(2) @Before Advice, @After Advice 2024. 10. 23. [Spring] AOP(1) 세팅 ㅁ AOP- 지금까지 작성한 컨트롤러, 서비스, dao의 코드는 이 프로그램이 제대로 작동하기 위해 필수로 필요한 핵심 로직(비즈니스 로직)이다.- 그런데 핵심로직 내에서 매번 공통적으로 처리해야 하는 로직(공통 로직)이 있을 수 있다.대표적인게 로깅 처리와 트랜잭션 처리다. - 컨트롤러의 각 메소드에서 요청시 전달값을 받고 있다.요청시 전달값, 조회된 결과값을 로그로 확인해보는 것이 좋다. - 각각의 url 요청 때마다 요청시 전달값, 어떤 클래스의 어떤 메소드가 동작하는지 등의 정보를 알기 위해 로그를 출력한다면 컨트롤러의 모든 메소드에 로그 출력문을 일일이 작성해야 한다. - 그러지 않고 url 요청 때마다 컨트롤러 측의 메소드가 동작될 때 무조건 로그가 출력되게끔 공통 로직을 핵심 로직과 분.. 2024. 10. 22. [Spring] MyBatis(8) 게시글 일괄삭제 ㅁ list.jsp %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> c:set var="contextPath" value="${pageContext.request.contextPath}" /> DOCTYPE html>html>head>meta charset="UTF-8">title>Insert title heretitle>head>body> h3>공지사항 목록 페이지h3> c:choose> c:when test="${ empty list }"> 존재하는.. 2024. 10. 22. [Spring] MyBatis(7) 상세페이지 -> 수정페이지 ㅁ notice-mapper.xml xml version="1.0" encoding="UTF-8"?>DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >mapper namespace="noticeMapper"> resultMap id="noticeResultMap" type="NoticeDto"> result column="no" property="no" /> result column="title" property="title" /> result column="content" property="content" /> resultMap> se.. 2024. 10. 22. [Spring] MyBatis(6) 목록페이지 -> 등록페이지 ㅁ notice-mapper.xml xml version="1.0" encoding="UTF-8"?>DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >mapper namespace="noticeMapper"> resultMap id="noticeResultMap" type="NoticeDto"> result column="no" property="no" /> result column="title" property="title" /> result column="content" property="content" /> resultMap> se.. 2024. 10. 22. [Spring] MyBatis(5) 쿼리 로그찍기 2024. 10. 22. 이전 1 2 3 4 5 6 ··· 10 다음