본문 바로가기

전체 글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.