ALL Post 204

의존성 주입(DI)

의존성 주입의 세 가지 방식 스프링 DI에는 세 가지 방식이 있다. set메서드 주입 필드 주입 생성자 주입 이 중에서 필드 주입이 사용하기 가장 간단하지만, 생성자 주입을 사용하라고 권장되고 있다. 참고 세 가지 모두 테스트 해 볼 것이다. 흐름 Market이라는 클래스를 만들고, 마켓에서 판매할 상품인 고기와 야채, 스낵 클래스를 주입하는 테스트를 해볼 것이다. Lombok과 spring-test 라이브러리를 이용할 것이다. 📖스프링 설정 참고 상품 마켓에서 판매할 고기와 야채를 클래스로 정의한다. @Component @ToString public class Vegetable { } @Component @ToString public class Snack { } @Component @ToString p..

Spring legacy 2020.09.12

Spring 5.0 Setting & Lombok

스프링 5.0 pom.xml 설정 🚥 XML설정 && 자바 설정 둘 중 하나를 골라서 설정해야 한다. 나는 java 클래스를 이용해 설정했다. 선택한 두 개의 root-context.xml과 web.xml을 삭제한다. 추가 해당 경로의 servlet.xml까지 삭제한다. 그 다음 삭제한 xml들을 대체할 자바 클래스를 생성한다 RootConfig.java package com.coco.config; @Configuration //참조할 패키지 @ComponentScan(basePackages = {"com.coco.sample"}) public class RootConfig { } ServletConfig.java @EnableWebMvc @ComponentScan(basePackages = {"com...

Spring legacy 2020.09.12

스프링이란?

스프링이라는 프레임 워크 image 🌍Wikipedia 프레임워크의 사전적 의미는 뼈대, 근간이다. 이까짓 뼈대가 왜 필요하나? a,b,c, ...z가 함께 일하는데 모두가 다른 방식으로 일한다면 어떨까? 뭐 그럭저럭 흘러는 가겠지만... 지금은 상상할 수 없는 어떤 무시무시한 일들이 벌어질지도 모르겠다. a와 w가 밤새 개발한 다음, 이제 우리 코드를 합쳐 보자! 했을 때, a의 방식과 w의 방식이 전혀 달라서 대략난감한 경우 말이다. 흠. 이렇게 하자고 했잖아! 난 이게 더 좋단 말이야! 이런이런. 프레임워크는 독재차처럼 흐름을 제어한다. 개발자는 프레임워크가 제어하는 흐름을 따라 개발할 수밖에 없다. 위에서 예로든 a부터 z로 이루어진 알파벳 팀 모두가 Spring을 쓴다고 해보자. 그럼 a와 w는..

Spring legacy 2020.09.12

Servlet/JSP 답변형 게시판 만들기 - 페이징

페이징 구성 화면으로부터 페이지 번호와 몇 개의 게시물을 볼 것인지(기본1, 10) 데이터를 받는다. 컨트롤러는 페이징 하는 서비스 메서드를 호출한다. 화면에서 받은 페이지 데이터를 인자로 입력한다. 요청 받은 페이지의 게시물을 DB에 조회한다. 게시물 개수가 100개가 넘고, 현재 조회하고 있는 페이지에서 '이전 페이지'버튼이 활성화 되어야 하는지 '다음 페이지'버튼이 활성화되어 있어야 하는지 연산해서 화면으로 데이터를 보낸다. 화면은 전달 받은 데이터를 띄우고, next, prev 버튼 사용 여부를 결정한다. SQL 우선 limit을 이용해 페이징 쿼리를 만든다. limit 0, 10은 1페이지 limit 10, 10은 2페이지 limit 20, 10은 3페이지 limit..

게시글 삭제할 때 고민했던 점

❓ 🤯 게시글 삭제할 때 고민했던 점 삭제 했을 때 원글만 지운다. 원글은 '삭제된 글입니다.'라고 띄우고 답글은 살려두는 형태 답글까지 지운다. 원글을 지우면 답글까지 지워지는 경우. 페이스북의 경우는 답글까지 지우는 형태다. 반면 네이버는 답글은 두고 원글만 지운다. 뭐가 더 좋은 방법일까? 상황에 따라 다를 것이다. 나는 1번 원글만 지우는 방식을 선택했다. 댓글의 권한은 댓글을 쓴 사람에게 있다고 보기 때문이다. 어떻게 ? 처음 생각한 방식은 쿼리를 두 번 날리는 것이다. 1. 카운트 쿼리를 날린다. 2. 이 결과가 0보다 크다면, 답글이 존재하는 것이므로, delete가 아닌, 기존의 데이터를 없애고 '삭제된 게시물입니다.' 라는 문구로 update 한다. 3. 결과..

Servlet/JSP 답변형 게시판 만들기 - 게시글 삭제

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 = DriverManager.getConnection(URL,USER,PW); PreparedStatement pstmt = conn.prepareStatement(sql); ) { assertNotNull(conn); pstmt.setInt(1, 44); assertTrue(pstmt.executeUpdate()==1); } catch(Exception ..

Servlet/JSP 답변형 게시판 만들기 - 수정

com.test.dao.BoardDAOTest 테스트 코드 @Test public void updateTest() throws ClassNotFoundException { Class.forName(DRIVER); String sql = "UPDATE t_board " + " set title = ?, content= ?" + " where bno = ?"; log.info(sql); try( Connection conn = DriverManager.getConnection(URL,USER,PW); PreparedStatement pstmt = conn.prepareStatement(sql); ) { pstmt.setString(1, "update"); pstmt.setString(2, "con...ten..

Servlet/JSP 답변형 게시판 만들기 - 조회

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( Connection conn = DriverManager.getConnection(URL,USER,PW); PreparedStatement pstmt = conn.prepareStatement(sql); ) { pstmt.setInt(1, 7); ResultSet rs = pstmt.executeQuery(); assertNotNull(rs); rs.next(); ..

게시글 목록

Servlet/JSP 답변형 게시판 만들기 - 게시글 목록 개발 순서 VO DAO 테스트 DAO Service Controller View com.coco.vo.BoardVO 테이블 이름과 동일하게 변수를 선언한다. public class BoardVO { private int bno; private int p_bno, level; //level은 답글의 개수다. private String title, content, imgName, id; private Date regdate; ...Getter Setter toString 생성자 생략... level은 답글의 개수를 나타내는 칼럼이다. 실제로 존재하지 않는 컬럼이지만 쿼리로 직접 만들어서 쓴다. com.test.dao.BoardDAOTest 게시물 목..