JSP에서 스프링 시큐리티 사용하기 스프링 시큐리티 관련 정보를 출력하려면 시큐리티 관련 태그 라이브러리를 선언해야 한다. <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>..
UserDetailsService JDBC를 이용한 인증방식의 단점은 사용자의 여러 정보들 중에서 제한적인 내용만을 이용한다는 점이다. 스프링 시큐리티에서는 username이라고 하는 정보만을 이용하므로 이름이나 이메일 등..
기존의 테이블을 이용한 시큐리티 인증 방법 1. 테이블 설계 회원 테이블과 권한 테이블 -- 회원 테이블 create table tbl_member( userid varchar(50) not null primary key, userpw varchar(100) not null, user..
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reco..
JS 삽질기 js에 미숙하다 보니까 별것 아닌데 몇 시간을 삽질했다. 나는 여기서 a태그의 href속성을 받아오려고 했다. 모던 자바스크립트를 써보겠다고 화살표 함수를 고집했다. 자꾸 this값이 오지 않았다. 화살..
java.lang.AssertionError: Request processing failed; nested exception is java.lang.IllegalStateException: No primary or default constructor found for class com.coco.domain.BoardVO at org.junit.Asser..
MockMvc로 컨트롤러 테스트 중 에러 @Test public void getAllPostTest() { ModelMap result; try { result = mockMvc.perform(MockMvcRequestBuilders.get("/board/list")) .andReturn() .getModelAndView() .get..
MyBatis - Spring 연결 테스트 중에 이런 에러가 발생했다. INFO : org.springframework.test.context.support.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from locatio..
가끔 git add하다 보면 이런 에러가 발생한다. warning: Lf will be replaced by CRLF in README.md. The file will have its original line endings in your working directroy Window는 Line Ending으로 CR(Carr..
Ajax(Asynchronous Javascript XML) 비동기 통신. 클라이언트 - 서버 간에 XML 또는 JSON 데이터를 주고 받는 기술이다. 페이지 이동 없이 데이터 처리가 가능하다. 새로 고침 없이 화면이 변한다! 제이쿼리 - Aja..
UriComponentBuilder 게시물을 POST방식으로 처리하고 나서도 페이지나 검색 조건을 유지하기 위해서는 페이지 정보와 검색 조건, 검색 키워드 정보를 RedirectAttribute객체로 직접 지정해야 했다. @PostMapping(..
Presentation Layer 컨트롤러와 화면처리를 담당할 jsp가 프레젠테이션 계층이다. 컨트롤러를 완성하고 화면처리를 할 것이다. URL분기는 참고 달라진 점은 수정 페이지를 따로 만들지 않고 자바스크립트를 이용해..
Business Layer 비지니스 계층은 'Service'라는 이름을 주로 사용한다. BoardService라는 인터페이스를 만들고 BoardServiceImpl클래스가 구현하는 형태로 만들 것이다. 굳이 인터페이스를 중간에 두는 이유는 다..
영속 계층 구현 순서 VO 생성 @Data @Builder public class BoardVO { private Long bno; private String title; private String content; private String writer; private Date regdate; private Date moddate; }..
요구사항 사용자는 게시물을 등록할 수 있다. 사용자는 게시물을 조회할 수 있다. 사용자는 게시물을 수정할 수 있다. 사용자는 게시물을 삭제할 수 있다. 레이아웃 무료로 제공하는 부트스트랩을 이용할 것이다...
Model Servlet은 request.setAttribute()로 데이터를 전달한다면, 스프링은 Model객체로 데이터를 전달한다. Controller @GetMapping("/testModel") public void model(SampleDTO sampleDTO,Model model) { Sample..
스프링 MVC 이미지 출처 스프링의 목적은 웹이 아니다. 위에 보이는 것처럼 스프링 웹은 스프링의 기능 중 하나일 뿐이다. 스프링 MVC 프로젝트를 생성하면, 자바 영역(POJO)과 웹 영역을 연동해서 프로젝트를 구..
자동 수집 DTO @Data public class SampleDTO { private String name; private int age; } 컨트롤러 @GetMapping("/autoCollect") public void parameterAutoCollect(SampleDTO dto) { SampleDTO parameters = dto..
log4jdbc-log4j2 해당 라이브러리를 이용하면 콘솔에서 SQL문과 결과를 가지런하게 확인할 수 있다. 우선 메이븐 설정을 추가한다. 링크 org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4.1 1.16 RootConfig.java..
마이바티스는 무엇인가? 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및..
의존성 주입의 세 가지 방식 스프링 DI에는 세 가지 방식이 있다. set메서드 주입 필드 주입 생성자 주입 이 중에서 필드 주입이 사용하기 가장 간단하지만, 생성자 주입을 사용하라고 권장되고 있다. 참고 세 가..
스프링 5.0 pom.xml 설정 XML설정 && 자바 설정 둘 중 하나를 골라서 설정해야 한다. 나는 java 클래스를 이용해 설정했다. 선택한 두 개의 root-context.xml과 web.xml을 삭제한다. 추가 해당 경로의 servlet...
스프링이라는 프레임 워크 image Wikipedia 프레임워크의 사전적 의미는 뼈대, 근간이다. 이까짓 뼈대가 왜 필요하나? a,b,c, ...z가 함께 일하는데 모두가 다른 방식으로 일한다면 어떨까? 뭐 그럭저럭 흘러는..
페이징 구성 화면으로부터 페이지 번호와 몇 개의 게시물을 볼 것인지(기본1, 10) 데이터를 받는다. 컨트롤러는 페이징 하는 서비스 메서드를 호출한다. 화면에서 받은 페이지 데이터를 인자로 입력한다. 요청 받..
c 게시글 삭제할 때 고민했던 점 삭제 했을 때 원글만 지운다. 원글은 '삭제된 글입니다.'라고 띄우고 답글은 살려두는 형태 답글까지 지운다. 원글을 지우면 답글까지 지워지는 경우. 페이스북의 경우는 답글..
com.test.dao.BoardDAOTest @Test public void deleteTest() throws ClassNotFoundException { Class.forName(DRIVER); String sql = "DELETE FROM t_board WHERE bno = ?"; log.info(sql); try( Connection conn..
com.test.dao.BoardDAOTest 테스트 코드 @Test public void updateTest() throws ClassNotFoundException { Class.forName(DRIVER); String sql = "UPDATE t_board " + " set title = ?, content= ?" + " where bn..
com.test.BoardDAO @Test public void getPostTest() throws ClassNotFoundException { Class.forName(DRIVER); String sql = "SELECT * FROM t_board" +" WHERE bno > 0 AND bno = ?"; log.info(sql); try( Conne..
게시물 등록 DAO 테스트 @Test public void insertTest() throws ClassNotFoundException{ Class.forName(DRIVER); String sql = "INSERT INTO t_board(title, content, imgName, id, p_bno)" +" VALUES(?,?,?,?,?..
Servlet/JSP 답변형 게시판 만들기 - 게시글 목록 개발 순서 VO DAO 테스트 DAO Service Controller View com.coco.vo.BoardVO 테이블 이름과 동일하게 변수를 선언한다. public class BoardVO { private int bno;..
MySQL에서 계층형 쿼리 문제 이 게시판은 자바 웹을 다루는 기술을 참고해서 만들었다. 처음부터 난관이었던 게 책은 Oracle SQL을 사용하는 반면 나는 MySQL을 쓰고 싶었다. MySQL을 고집한 이유는 첫 프로젝트..
1. 구조 모델2 방식인 MVC구조로 만들 것이다. 컨트롤러와 DAO 사이에 왜 Service가 필요할까? 트랜잭션Transaction 때문이다. 조승우가 자주 가는 커뮤티니 사이트를 예로 들어보자. 조승우는 커뮤니티 사이트에..
모델 ? 어떤 일이든 주로 사용하는 방식이 있다. 그들만의 룰. 우리는 '표준'이라고 한다. 웹 개발도 마찬가지다. 꼭 그래야만 할 필요는 없지만 웬만하면 이런 구조로 만들자, 고 하는 '표준'이 있다. 이것을 모..
JSTL(JSP Standard Tag Library) EL이나 액션 태그를 이용해도 여전히 자바 코드를 사용할 수밖에 없는 상황이 있다. 이를테면 반복문이나 조건문 같은 것을 쓸 때. 이것을 제거하기 위해 커스텀 태그가 등장했다...
표현언어 EL 액션태그에 이어서 JSP에서 자바 코드를 없애려는 노력은 계속되었다. EL은 좀 더 편리하게 자바 표현식을 다루기 위해 JSP2.0부터 도입되었다. 데이터를 출력하는 역할을 한다. 특징 기존 표현식보다..
액션 태그 JSP는 비즈니스 로직과 화면 개발을 분리하려는 목적으로 개발되었다. 그러나 여전히 스크립트릿<%%>같은 녀석들이 HTML 영역을 침범했다. 방역하고 방역해도 죽지 않는 코로나처럼. 죽일 순 없으니 마..
JSP? 먼 옛날. 서블릿 위에 html태그를 써서 화면으로 전달하던 시절. 디자이너와 개발자는 서로 얼굴 붉힐 일이 많았을 것이다. 이런 일이 있었다. 디자이너는 오늘 일찍 퇴근해서 애인과 종로에서 가장 오래된..
Servlet Listener API 서블릿에서 발생하는 이벤트를 처리할 수 있도록 제공하는 리스너 Listener의 메서드 서블릿 관련 Listener 추상 메서드 기능 ServletContextAttributeListener attributeAdded() attributeR..
서블릿 필터 요청/응답과 관련된 작업을 미리 처리한다. 이를테면 setCharacterEncoding()같은 귀찮은 작업을 필터에 설정해두면 요청/응답할 때 알아서 한다. Request Filter - Response Filter 필터는 크게 요청..
Servlet Scope! 서블릿 속성attribute 세 가지 ServletContext HttpSession HttpServletRequest 각 속성을 setAttribute()로 바인딩하고 getAttribute()로 꺼내서 쓴다. 서블릿 스코프scope란, 서블릿 속성에 접근..
스프링 시큐리티 한글 설정 게시판에 스프링 시큐리티를 접목하여 로그인한 사용자만 게시물을 등록할 수 있게 했다. 그런데 갑자기 한글 인코딩이 되지 않는 문제가 발생했다. https://stackoverflow.com/questio..
어떤 현실을 꿈꾼다. 꿈꾸는 지금은 거의 판타지에 가깝지만, 불가능하지는 않은 현실. 말하자면 내가 먼나라에 서 있다는 꿈. 그것은 꿈꾸는 지금은 판타지지만 분명히 가능한 판타지다. (그런데 <가능한 판..
서블릿과 DB를 연동해서 ID 체크를 하고, 로그인 상태를 유지하는 예제다. 순서는 이렇다. login.html에서 아이디와 비밀번호를 입력한다. LoginServlet은 입력 받은 ID로 DB에 조회한다. 없는 아이디라면 login.h..
쿠키를 사용하지 않겠다고 설정한 브라우저에서는 쿠키는 물론 세션도 사용할 수 없다. 이런 경우, encodeURL()로 직접 서버에서 브라우저로 응답을 보낸 후, URL Rewriting을 이용해 JSESSIONID를 서버로 전송하..
Session ** 웹 페이지들 사이에서 공유하는 정보를 서버에 저장해두고, 웹 페이지들을 매개한다는 점에서 세션도 쿠키와 다르지 않다. 다른 점이라면 쿠키는 클라이언트 PC에 저장되고, **세션은 서버 메모리에 저..
세션 트래킹 HTTP프로토콜 방식으로 통신하는 웹 페이지는 서로 어떤 정보도 공유하지 않는다. 쿠팡 메인 페이지에서 로그인하고 주문 페이지에서 또 다시 로그인하지 않아도 되는 이유는 세션 트래킹Session Tra..
이미지 출처 : https://www.oreilly.com/library/view/head-first-servlets/9780596516680/ch05s10.html javax.servlet.ServletContext 특징 서블릿 - 컨테이너 연동을 위해 사용한다. 컨텍스트(웹 애플리케이..
바인딩 웹 프로그램 실행 시 자원(데이터)을 서블릿 관련 객체에 저장하는 방법 GET방식으로 많은 데이터를 전달하기에 한계가 있다. 많은 양의 데이터를 전달할 때 바인딩binding을 사용한다. 그냥 key-value다...
커넥션 풀 웹 애플리케이션이 실행됨과 동시에 연동할 데이터베이스와 미리 연결 해둔다. 필요할 때마다 미리 연결해놓은 상태를 이용해 빠르게 데이터베이스 관련 작업을 할 수 있다. 요약하자면 미리 데이터베..
Forward 하나의 서블릿에서 다른 서블릿 또는 JSP와 연동하는 방법을 포워드라고 한다. 요청에 대한 추가 작업을 다른 서블릿에서 수행하게 한다. 요청에 포함된 정보를 다른 서블릿, JSP와 공유할 수 있다. 요청..
비즈니스 로직 클라이언트로부터 받은 요청을 처리하는 과정을 비즈니스 로직이라 한다. 이를테면 쇼핑몰에서 클라이언트가 1번 상품 정보를 요청한다. 그럼 서버는 데이터베이스에 1번 상품 정보를 조회한다. 조..
자바 웹을 다루는 기술을 정리한 내용입니다. GET 방식 서블릿에 데이터를 전송할 때 데이터가 URL 뒤에 따라 붙는다. 여러 개의 데이터를 전송할 때는 '&'로 구분한다. 보안 취약 전송할 수 있는 데이터는 최..
서블릿의 기본 기능 톰캣과 같은 Web Application Server(이하 WAS)가 처음 나왔을 때 웹 브라우저 요청을 쓰레드 방식으로 처리하는 기술이 서블릿이었다. 서블릿은 자바로 웹 프로그래밍을 하는 데 있어서 가장..
자바 웹을 다루는 기술을 정리한 내용입니다. Servlet이란? 이전에 정적인 웹을 너머서 동적 웹 프로그래밍을 위한 자바 클래스다. 클라이언트 요청에 따라 서버에서 동적으로 서비스를 제공하는 클래스 서블릿..
잘못된 내용이 있을 수 있습니다. 해싱과 해시함수 해싱이란 해시함수를 이용해서 데이터를 헤시테이블에 저장하고 검색하는 기법이다. 해시함수는 데이터가 저장되어 있는 곳을 알려주므로 다량의 데이터 중에서..
예외 Exception 이미지 출처 예외 클래스 다이어그램 자바에서 에러는 크게 두 갈래로 나눌 수 있다. error exception 예외exception는 처리할 수 있지만, 에러는 손 쓸 방법이 없다. Exception은 RunTimeExceptio..
Stream 스트림이란, 데이터 소스가 무엇이든 같은 방식으로 다룰 수 있게 추상화한 것이다. 특징 데이터 소스를 변경하지 않는다. Read only 재사용 불가 작업을 내부 반복으로 처리 반복문을 메서드 내부로 숨겨..
자바의 정석을 정리한 내용입니다. 람다식Lambda Expression 자바는 두 번의 큰 변화가 있었다. JDK1.5의 지네릭스. JDK1.8의 람다. 람다의 등장으로 객체지향언어를 너머 함수형 언어가 가진 기능까지 갖..
제네릭 메서드 static void sort(List , Comparator<? super T> c) 메서드 선언부 반환타입 앞에 지네릭을 사용하는 것을 지네릭 메서드라 한다. 지네릭 클래스에 적용된 타입 매개변수와 지네릭 메서드의 적용된..
참고 : 자바의 정석 와일드 카드 기호 '?' 표현하는데, 와일드카드는 어떤 타입도 될 수 있다. 아래 코드를 보자. package com.javaex.generics; import java.util.ArrayList; import java.util.List; public cla..
자바의 정석을 참고했습니다. Generics 컬렉션 클래스에 컴파일 시 타입 체크를 해주는 기능. 장점 타입 안정성을 높여서, 의도하지 않은 타입의 객체가 저장되는 것을 막는다. 지네릭 클래스 class Box { T item..
이미지 출처 : https://adrianmejia.com/data-structures-for-beginners-trees-binary-search-tree-tutorial/ 트리구조. TreeMap 이미지 출처 : https://www.java8net.com/2020/02/treemap-in-java.html TreeMap은..
HashMap 출처 : https://medium.com/tanay-toshniwal/count-distinct-elements-in-input-sequence-using-java-hashmaps-373a58697dd2 HashMap은 Hashtable의 페이스리프트 버전이다. Map을 구현한 클래스의 특징은..
TreeSet TreeSet은 이진 검색 트리binary search tree라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스다. 이진 검색 트리는 정렬, 검색, 범위 검색Range Search에 높은 성능을 보인다. TreeSet은 이진 검..
HashSet HashSet은 Set인터페이스를 구현한 가장 대표적인 컬렉션이다. 다시 상기하자면, Set은 중복 허용 X 순차 저장 X 중복된 데이터를 저장하려고 하면 false를 반환한다. HashSet의 특징을 이용하면 중복을..
public interface Comparator { int compare(Object o1, Object o2); } public interface Comparable { public int CompareTo(Object o); } Comparable 기본 정렬 기준을 구현할 때 사용한다. Comparator 기본 정..
Arrays 배열을 다루기 편한 static메서드를 제공한다. 배열의 출력 toString() static String toString(boolean[] a) static String toString(byte[] a) static String toString(char[] a) ... ... static String..
ArrayList ArrayList는 컬렉션 프레임워크에서 가장 많이 사용하는 클래스다. Object를 이용해 순차적으로 데이터를 저장한다. 저장 공간이 없으면 동적으로 크기가 늘어난다. 새로운 배열을 만들어서 기존의 배열..
자바의 정석을 정리한 내용입니다. 출처 : https://gohighbrow.com/stacks-and-queues/ 스택은 마지막에 저장한 데이터를 가장 먼저 꺼내는 Last in first out(LIFO)구조. 큐는 처음 저장한 데이터를 가장 먼저..
자바의 정석을 정리한 내용입니다. Collections Framework는 다수의 데이터를 다루는 데 필요한 다양한 클래스를 제공한다. 핵심 인터페이스 상속계층도 이미지 출처 : http://dinfree.com/lecture/language/11..
자바의 정석을 정리한 내용입니다. 내부클래스의 종류 내부 클래스는 단순히 클래스 내에 선언된 클래스다. 내부 클래스의 장점 1.내부 클래스에서 외브 클래스 멤버에 쉽게 접근 가능 2.코드 복잡성을 줄인다(..
이미지 출처 : https://learn-tech-tips.blogspot.com/2016/07/object-oriented-programming-abstract-class-vs-interface.html 추상 클래스abstract class 추상 클래스란? 미완성 클래스 즉, 완성되지 않은 abst..
자바의 정석을 정리한 내용입니다. JVM 메모리 구조 JVM은 프로그램을 수행하는데 필요한 메모리를 할당 받는다. JVM은 이 메모리를 여러 영역으로 나누는데, 주요 영역 세 가지다. Method area 클래스가 사용..
이번 시간에는 어떻게 컴퓨터가 수치 데이터를 나타내고 저장하는지 알아본다. 참과 거짓은 이진수 0과 1로 나타낼 수 있다. 이진수에서 0과 1을 비트라고 부른다. 8비트를 다룬다면 0-255 사이의 숫자를 표현할..
CrashCourse Computer Science 강의를 듣고 정리했습니다. 정확하지 않은 내용이 있을 수 있습니다. 2가지의 전기적 상태만으로 우리는 중요한 정보를 표현할 수 있다. 우리는 이것을 두 가지 상태를 일컫는 이진B..
이 글은 CrashCourse ComputerScience강의를 제멋대로 정리한 글입니다. 정확하지 않은 정보가 있을 수 있습니다. 첫 강의에서 20세기 초반부까지 컴퓨터의 역사에 대해 살펴봤다. 계전기 tabulating machines 같..
스프링 시큐리티 로그인 방법 중에 JDBC를 이용한 로그인 인증 테스트를 진행했다. 그런데 하루종일 dataSource를 찾을 수 없다는 에러 NoSuchBeanDefinitionException: No bean named 'dataSource' available 가..
netstat명령어로 모든 포트를 확인할 수 있다. 좀더 자세하게, 내가 원하는 포트를 찾으려면 '-nap|grep 포트넘버'를 추가하면 된다. hoon@hoon-MS-7C51:~$ netstat -nap|grep 8080 $ netstat -nap|grep 8080 이..
자바의 정석을 정리한 내용입니다. 다형성? 운전하는 법은 한 번만 배우면 어떤 자동차든 운전할 수 있다. 자동차 브랜드나 내부 구현에 따라 달라지지 않는다. 동일한 인터페이스를 가지고 있기 때문이다. 이..
자바의 정석을 정리한 내용입니다. 상속Inheritance 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 코드를 공통적으로 관리할 수 있기 때문에 유지보수 하기 쉽다. class Child extends Parent..
자바의 정석을 정리한 내용입니다. 제어자Modifier Non-Access-Modifiers 접근 제어자가 아닌 제어자들로는 static, final, abstract, synchronized......등이 있다. 몇 가지만 소개한다. static 멤버변수, 메..
** 이 글은 Youtube채널 CrashCourse - Computer Science 영상을 보고 제 맘대로 정리한 내용입니다. 정확하지 않은 정보가 포함되어 있을 수 있습니다. ** Computer is Everywhere. 스마트폰이나 컴퓨터에는 수십..
자바의 정석을 정리한 내용입니다. 객체지향 코드 재사용 유지보수 용이 신뢰성 높은 프로그래밍 클래스와 객체 클래스란 객체를 정의해놓은 일종의 설계도다. 도대체 클래스를 왜 만드는데? 클래스는 일종의..