본문 바로가기

분류 전체보기298

스프링 정리2 - 로깅 [Spring] MVC2 (1) 로깅, ajax  ㅁ 새로운 패키지 생성시 베이스 패키지를 com.br.ajax로 지정했다.- 이제 모든 클래스는 전부 com.br.ajax를 베이스 패키지로 해야 한다.빈 스캐닝을할 때 베이스 패키지를 기준으로 하기 때문에 2번째 레벨 등에서 쪼개지면 안 된다. - 빈등록이 제대로 되려면 베이스 패키지로 com.br.ajax를 가지고 있어야 한다.  ㅁ 디버깅- 디버깅(데이터가 잘 담겼는지 확인하는 등)할 때 이때까지 System.out.println문을 사용해 왔다.이 메소드가 잘 실행되는지 확인용으로 디버깅용으로 출력문을 작성했었다.- 기본적으로 이 출력문은 운영되는 서버의 콘솔에 출력된다.개발이 다 끝나고 실제 배포되면 운영되는 서버의 콘솔창에 출력된다. - 과부하.. 2024. 11. 14.
[문제] 1대1 채팅방 상대의 사번이 보이지 않고 내 사번이 보임 ㅁ 문제 발생   - 사번이 B0001인 사원으로 로그인해서 사번이 B0005인 사원과 1:1 채팅방을 만들었다.- B0001인 사원은 상대방인 B0005가 잘 보인다.     - 사번이 B0005인 사원으로 로그인하고 메신저 페이지로 왔다.상대방 사번인 B0001이 보여야 하는데 내 사번인 B0005가 보인다.      // 2. 로그인한 유저가 속한 채팅방 리스트 조회하기. List list = chatService.selectChatRoomList(userNo); // 로그인한 유저가 속한 채팅방 DTO가 list로 담김.  List> list2 = new ArrayList(); // 응답 페이지로 넘길 list.   for(ChatRoomDto c : list) {    Map map = new .. 2024. 11. 14.
스프링 정리 - MVC ㅁ 아이콘- 파일에 X가 붙어있으면 xml 파일을 의미한다.- 파일에 M이 붙어있으면 Maven을 의미한다. (pom.xml 파일) - 파일에 커피콩 모양과 s가 같이 있으면 spring bean configuraiton file이다. - 폴더에 패키지가 포함되어 있으면 소스파일이 보관되는 폴더다.- 폴더에 s가 붙어있으면 스프링과 관련된 문서가 포함되어 있다는 뜻이다.  ㅁ 수시로 project-clean, maven-update project, 프로젝트 새로고침.    ㅁ 스프링 특징- IOC와 DI가 스프링의 가장 기본적이면서 중요한 특징이다.- 개발자가 직접 객체를 생성해서 쓰지 않고 스프링에게 받아서 쓴다.  (1) IOC- 제어의 역전.- 컨트롤의 제어권이 개발자가 아닌 프레임워크에 있다.- .. 2024. 11. 13.
파이널 프로젝트 받아오기 [초대받은 팀원 입장]    ㅁ https://moca7.tistory.com/334- 여기서 sts4 설치부터 한다.- sts4 설치하고 워크스페이스 선택해서 실행까지 일단 한다.  ㅁ https://moca7.tistory.com/229- 세미 설정 때처럼 C:\workspaces에 final-workspace 폴더를 만든다.- sts4로 워크스페이스를 C:\workspaces\final-workspace로 선택하고 실행(launch)한다.이러면 C:\workspaces\fianl-workspace에 ".metadata" 폴더가 만들어진다. - 이 글의 워크스페이스 세팅, 서버 세팅은 건너뛴다. - 프로젝트를 깃에서 가져온다.현재 C:\workspaces\semi-workspace에 프로젝트는 없는 .. 2024. 11. 8.
Spring Boot 프로젝트에 Swagger 적용하기 https://velog.io/@gmlstjq123/SpringBoot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90-Swagger-UI-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0 https://colabear754.tistory.com/99   ㅁ 의존성을 추가할 파일- Gradle : build.gradle 파일에 의존성 추가.- Maven : pom.xml 파일에 의존성 추가. - 의존성을 추가한다는 것은 프로젝트에서 사용할 외부 라이브러리나 코드를 프로젝트에 포함시킨다는 의미다.     ㅁ 라이브러리 (Springdoc-openapi 사용) - Springfox, Springdoc 라이브러리에서 Swagger UI를 제공한다. - Spri.. 2024. 11. 7.
파이널 프로젝트 만들기 (스프링 부트) [프로젝트를 만들어서 깃에 올리는 사람 입장]   (0) 깃에 워크스페이스가 아닌 프로젝트를 올린다.- 팀원 중 한명만 프로젝트를 올리고 다른사람을 초대할 수 있다.- 다른 팀원들은 모두 다 워크스페이스를 각자 만들어야 한다. 워크스페이스 세팅도 각자 해야 한다.- 워크스페이스 세팅, 서버세팅은 다 각자해야 한다. - 프로젝트는 한명이 만든다. 프로젝트 이름은 팀명을 따서 각 팀별로 다르게 만든다. - 스프링 부트 프로젝트다. STS4, 스프링 부트 버전 3.2.11, 자바 17버전을 사용한다.   (1) C:\workspaces에 final-workspace 폴더를 만든다.   (2) sts4로 워크스페이스를 C:\workspaces\final-workspace로 선택하고 실행한다.- 이러면 C:\wo.. 2024. 11. 6.
디비 - 로컬 디비였었다. 이번엔 디비 서버를 둔다.- aws rds의 db.- 테스트      - 나중에 우리끼리 할때도 hikafrimaxiumi pllo size는 꼭 1.뻗을수있다.다 같은 db서버를 쓰고 있어서 다른팀 것도 뻗을 수 있따.    ㅁ - 서버는 계속 켜둘거라 ip주손느 바뀔일 없다.localhost를 13.125.128.181 아이디 비번을 각자 팀 아디 비비ㅓㄴ을 ㅗ하면 될거에여ㅛ.   - 회원가입하고 글도 썼다.=- 첨부파일 다운은 내가 올린건 되지만 남이 올린건 안된다.그사람 pc의 c의 upload에 저장되어있다.=- 나중에 할때는 깃에 올릴거라 된다.            ㅁ 디비 백업- 서버 고장날 수 있음. 백업해야 함.- 도구 - 데이터 익스포트 접속에서 선택하고스키마 부터.. 2024. 11. 6.
[스프링부트] 10. 트랜잭션 처리 ㅁ (스프링) root-context.xml  xml version="1.0" encoding="UTF-8"?>beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:aop="http://www.springframework.org/schema/aop"  xmlns:tx="http://www.springframework.org/schema/tx"  xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/sprin.. 2024. 11. 6.
[스프링부트] 9. 웹소켓 ㅁ   - 채팅 웹소켓- 핸들러 패키지의 chatendchcoghandler 복사해온다.   package com.br.boot.handler;import java.util.ArrayList;import java.util.List;import org.springframework.web.socket.CloseStatus;import org.springframework.web.socket.TextMessage;import org.springframework.web.socket.WebSocketMessage;import org.springframework.web.socket.WebSocketSession;import org.springframework.web.socket.handler.TextWebSocket.. 2024. 11. 6.
[스프링부트] 8. Scheduler ㅁ 스프링 프로젝트에서 스케줄러 클래스를 가져와서 복붙한다    - 스케줄러 클래스 복붙해와서 package 선언부를 바꾸고 import를 다시한다.     ㅁ BoardScheduler  package com.br.boot.scheduler;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import com.br.boot.service.BoardService;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;@Slf4j@RequiredArgsConstructor // final 필드에 .. 2024. 11. 6.
[스프링부트] 7. Interceptor ㅁ 스프링 프로젝트에서 로그인 체크 인터셉터 클래스를 복사해서 붙여넣기 한다.   - 패키지선언부를 수정한다. - import보면 javax로 되어있다. 스프링 때는 톰캣 9버전이어서 javax 패키지에서 import 했었다.지금 쓰는 스프링 부트 버전(3.2.11)은 톰캣 10버전이어서 jakarata 패키지에서 import 해야 한다.- ctrl shift o로 다시 import 한다.    ㅁ(스프링) servlet-context.xml  xml version="1.0" encoding="UTF-8"?>beans:beans xmlns="http://www.springframework.org/schema/mvc"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst.. 2024. 11. 6.
[스프링부트] 6. 파일업로드 처리 ㅁ 지금까지- ~~를 진행했다. - 근데 파일업로드 관련해서도 세팅한게 있었다.라이브러리를 추가햇었고, root-context.xml에 파일업로드를 위한 빈을 하나 등록했었다. MultiPartResolver라는 빈.여기서 파일 하나당 몇메가로 할건지 설정값을 했었다. - 부트에서는 파일업로드 관련 라이브러리가 추가되어있어서 우리가 추가할 필요 없다.MultiPartResolver  클래스도 이미 빈으로 등록되어서 부트에서 가지고 있다.다만 설정값들이 존재하지 않아서 설정값만 aplication.properties에 작성한다.  ㅁ (스프링) root-context.xml  xml version="1.0" encoding="UTF-8"?>beans xmlns="http://www.springframewo.. 2024. 11. 6.
[스프링부트] 4.마이바티스 라이브러리 추가(연동) ㅁ - ~ 패키지 통으로 추가한다.- 프로젝트 생성시 dependency를 추가할 수 있는 창이 떴었다.그 창을 다시 띄운다.- 패키지익스플로럴 우클릭 - spring - add starters 클릭- mybatis 검색해서 나오는거 체크- oracle 검색해서 sql안의 oracle driver 체크-         - pom.xml 체크하고 finish.    ㅁ pom.xml  xml version="1.0" encoding="UTF-8"?>project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.o.. 2024. 11. 6.
[스프링부트] 3. 패키지 안 클래스들 migration ㅁ 패키지 생성  - com.br.boot안에 현재 donfig, controller 패키지가 있다. - com.br.boot.dao- com.br.boot.dto- com.br.boot.handler- com.br.boot.interceptor- com.br.boot.scheduler- com.br.boot.service- com.br.boot.util - 마음대로 하지 복사하지말고 순서대로 복사한다. import~      - package com.br.spring.dto;를  package com.br.boot.dto;로 바꾼다.     ㅁ 롭복  - 생성자가 안보인다. 롬복은 추가만 하면되는게 아니고 설치까지 해줘야한다.       - maven dependencies를 열어본다.저 경로로 간다... 2024. 11. 6.
[스프링 부트] 정적자원 디렉토리 등록하기 (WebMvcConfigurer) ㅁ- 기본적으로 Spring Boot는 src/main/resources/static 디렉토리를 정적 자원의 기본 위치로 사용하지만, 다른 위치에 있는 정적 자원을 등록할 수 있다.- WebMvcConfigurer를 구현하여 WebMvcConfigurer의 addResourceHandlers 메서드를 오버라이드하여 정적 자원의 경로를 추가할 수 있다.     ㅁ 기존 spring legacy project에서 views와 resources 가져오기  (1) spring legacy project에서 src/main/webapp/WEB-INF/views 폴더 안의 폴더들과 main.jsp를 복사한다.   - 저 7개의 파일을 STS4 패키지 익스플로러의 src/main/webapp/WEB-INF/views.. 2024. 11. 5.
[스프링 부트] migration ㅁ 스프링 부트- 스프링 레거시 프로젝트랑 같은데 스프링 부트 프로젝트를 하면 설정이 굉장히 간결해진다.- logback.xml을 제외하고 xml 파일들이 사라진다. 하나의 properties 파일에 설정하면 끝이다.- 스프링 부트도 하나의 프레임워크인데 스프링을 가져다 쓰고 있다. 스프링 기술들을 쓰는데 설정이 간편해진다.- sts3에서도 부트프로젝트를 할 순 있지만 sts4로 한다. - 우리가 쓰는 5.3.27버전은 11버전 이하를 호환이 잘된다.Spring Boot 3는 Spring Framework 6을 기반으로 하고 있으며, Java 17 이상에서만 지원된다.- 스프링 부트는 어떤 버전이 좋은지도 다 나와있어서 버전 관리하기도 용이하다.      ㅁ sts4 설치     - 작업 탐색기에서 상단.. 2024. 11. 5.
[스케줄러] ㅁ 사용자가 요청을 보내지 않아도 내가 원하는 시간에 내가 원하는 코드가 실행되게끔 등록할 수 있다.- 생각보다 스케쥴러 기법도 많이 쓴다.- 스프링에서도 제공하지만 오라클에서도 제공해서 쓸 수 있다. 우리는 스프링의 스케줄러를 써본다.   ※ Scheduler- 특정 날짜, 특정 시간, 일정 주기마다 어떤 작업을 묵시적으로 실행시켜주는 주체.- 별도의 액션이 없어도 알아서 특정시간이 되면 자동 실행된다.  ※ Spring Scheduler (1) 매번 묵시적으로 실행시키고자 하는 작업들을 정의할 클래스를 만들기- 그리고 그 클래스를 빈으로 등록한다. 빈등록은 3가지 방법이 있었다. (2) 해당 클래스 내에 각 작업별 메소드를 작성하기- 반환형은 반드시 void여야 하고, 매개변수는 없어야 한다. 메소드.. 2024. 11. 5.
[인터셉터] ㅁ 브라우저 주소창에 url을 직접 써서 요청해보기    - 로그인 후 이용가능한 페이지들의 url을 기억했다가 직접 주소창에 써서 요청하면 보여진다.  - 절대 그렇게 포워딩 되어서는 안된다. alert 띄우면서 메인페이지로 보내야 한다.        - 컨트롤러에서 url 요청이 오면 별도의 조건처리 없이 무조건 이동되게 하고 있다.이 페이지에 진입할 권한이 있는지를 체크해야 한다.- 세션으로부터 로그인한 회원정보가 없다면 컨트롤러의 이동시키는 메소드에서 이동이 불가능하게끔 막아두면 된다.  - 근데 로그인 후에 이용할 수 있는 페이지들이 더 있을건데 매번 그 메소드들마다 일일이 작성하기에는 번거롭다.- 인터셉터 기술을 사용한다. 필터로도 가능한데 필터와 인터셉터간에 시기가 다르고 컨테이너 차이도 있.. 2024. 11. 5.
[웹소켓] 2. ㅁ 퇴장하기 버튼을 눌러서 웹소켓 연결 해제를 먼저 해본다.   ㅁ room.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>    .chat{width:400px; margin:auto; pad.. 2024. 11. 4.
[웹소켓] 1. ㅁ 통신 방식  (1) HTTP통신 (기본통신방식) : 비연결 통신  - HTTP통신은 한번 요청 보내고 처리되면 연결이 끊긴다.그래서 기본적으로 지속적으로 데이터를 주고받을 수가 없다. 근데 채팅은 지속적으로 메세지를 주고받아야 한다.- HTTP통신도 지속적으로 데이터를 주고받을 수는 있다. ajax로 데이터를 지속적으로 주고받으면 된다. setInterval로 1초마다 댓글을 조회 했었다.ajax와 setInterval를 같이 사용해서 주기적으로 요청을 보내 응답을 받으면 된다. (polling 방식) 1초마다 메세지를 조회하면 마치 메세지를 주고받는 것처럼 표현할 수 가 있다.그런데 단점이 네트워크 리소스를 많이 사용해서 비효율적이다.- 요청해서 응답을 받으면 끝이다. 연결이 끊긴다. 이게 반복적으.. 2024. 11. 4.
[웹프로젝트] 20. 게시글 수정 ㅁ 기존의 게시글 수정보다 어렵다.- 한 게시글에 첨부파일이 여러개 있다. 다중파일 관련 수정이라 수정하기 기능의 로직이 전보다 어렵다.    ㅁ modify.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.. 2024. 10. 31.
[웹프로젝트] 19. 게시글 삭제 ㅁ detail.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>    #reply_area tbody>tr>th:nth-child(1){width:120px} /* 댓글쪽 스타일 */style>.. 2024. 10. 31.
[웹프로젝트] 18. 게시글 댓글 작성 (상세페이지) ㅁ 비회원이면 textarea와 등록하기 버튼이 활성화 안되게끔 한다.- 댓글 등록하고 다른 페이지로 이동하지 않고 그 페이지 그대로 보여줄 것이다. ajax로 요청한다.  ㅁ detail.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>Inser.. 2024. 10. 31.
[웹프로젝트] 17. 게시글 댓글 조회 (상세페이지) ㅁ detail.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>    #reply_area tbody>tr>th:nth-child(1){width:120px} /* 댓글쪽 스타일 */style>.. 2024. 10. 31.
[웹프로젝트] 16. 게시글 조회수 증가 ㅁ BoardController package com.br.spring.controller;import java.util.ArrayList;import java.util.List;import java.util.Map;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.a.. 2024. 10. 31.
[웹프로젝트] 15. 게시글 상세 페이지 ㅁ 쿼리 미리 실행해보기   - 항상 pk는 조회하는 습관을 들여야 한다. 당장 필요없어도 조회.- 산술식 함수는 별칭부여. - 게시글에 대한 데이터는 중복 조회된다.첨부파일에 대한 데이터는 매행 각기 다른 정보가 조회된다. - 그냥 join 말고 left join을 해야 첨부파일 데이터가 없는 데이터도 조회된다.첨부파일이 없는 데이터도 조회되어야 한다.     ㅁ board-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="boardMapper"> .. 2024. 10. 30.
[웹프로젝트] 14. 게시글 작성 ㅁ board-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="boardMapper">  resultMap id="boardResultMap" type="BoardDto">    result column="board_no" property="boardNo" />    result column="board_title" property="boardTitle" />    result column="user_id" property="boardWriter.. 2024. 10. 30.
[웹프로젝트] 13. 게시판 검색 ㅁ 검색 요청시 검색 결과가 화면에 뿌려진다. 그 검색 결과에도 페이징처리를 해본다.- 검색 결과를 별도로 search.jsp 등의 페이지로 만들지 않고 /board/list.do를 재활용한다.    - 작성자, 제목, 내용으로 검색할 수 있다.     ㅁ 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.. 2024. 10. 30.
[웹프로젝트] 12. 게시판 목록 조회 ㅁ 이제 게시판 서비스     - 게시판리스트페이지_list.html - 페이징 바의 페이지 숫자를 누를 때마다 /board/list.do를 요청한다. page라는 key값으로 내가 요청하는 페이지 번호를 넘길 예정이다.- 하나의 게시글에 첨부파일이 여러개일 수 있다.         ㅁ 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}".. 2024. 10. 29.
[웹프로젝트] 11. 회원탈퇴 ㅁ 화면       ㅁ 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" property="userNo" />    result column="user_id" property="userId" />    result column="user_pwd" property="userPwd.. 2024. 10. 29.