반응형
목록
분류 전체보기 (292)
[꼼꼼한 개발자] 꼼코더
💡 Controller의 작성 스프링 MVC의 Controller는 하나의 클래스 내에 여러 메서드를 작성하고 @RequestMapping 등을 이용하여 URL을 분기하는 구조로 작성하기 때문에 하나의 클래스에서 필요한 만큼 메서드의 분기를 이용하는 구조로 작성된다. 과거에는 이 단계에서 Tomcat(WAS)을 실행하고 웹 화면을 만들어 결과를 확인하는 방식의 코드를 작성해 왔었다. 하지만 시간이 오래 걸리고, 테스트를 자동화하기에 어려움이 많아 앞으로 할 예제에서는 WAS를 실행하지 않고 Controller를 테스트할 방법을 학습해 보자 🧐 BoardController의 분석 작성 전에는 ‘원하는 기능을 호출하는 방식에 대해 테이블로 정리 후 코드로 작성’하는 것 이 좋다. 테이블에서 From 항목은 ..
👷🏻♂️ 비즈니스 계층의 구현과 테스트(테스트 코드 작성) BoardMapper와 BoardService, BoardMapperServiceImpl에 대한 구조 설정이 완료되었으므로 테스트 클래스를 작성해 본다. 👨🏻💻 BoardServiceTests 작성 src/test/java → org.zerock.service → BoardServiceTests 클래스 작성 💁🏻♂️ 결과 BoardServiceTests의 첫 테스트는 BoardService 객체가 제대로 주입이 가능한지 확인하는 작업 정상적으로 BoardService 객체 생성 후 BoardMapper가 주입되었다면 아래와 같이 BoardServiceService 객체와 데이터 베이스 관련 로그가 같이 출력된다. 👨🏻💻 등록 작업의 구현과..
🧑🏻💼 비즈니스 계층 비즈니스 계층은 ‘고객의 요구사항을 반영하는 계층’이다. 프레젠테이션 계층과 영속 계층의 중간다리 역할을 하게 된다. 영속 계층은 데이터 베이스를 기준으로 설계를 나누어 구현하지만 비즈니스 계층은 ‘로직을 기준으로 해서 처리’하게 된다. 💁🏻♂️ 쇼핑몰에서 상품을 구매 예시를 들어본다. 해당 쇼핑몰의 로직은 ‘물건을 구매한 회원에게 포인트 적립’이라고 한다면 영속 계층의 설계는 ‘상품’과 ‘회원’으로 나누어 설계하게 된다. 반면 비즈니스 계층은 ‘상품 영역’과 ‘회원 영역’을 동시에 사용해서 하나의 로직으로 처리하게 되므로 다음과 같은 구조를 만들게 된다. 현제 예제는 단일한 테이블을 이용하고 있기 때문에 위와 같은 구조는 아니지만 설계를 할 때는 원칙적으로 영역을 구분해서 작성..
✅ 영속 영역의 CRUD 구현 영속 영역은 웹 프로젝트 구조에서 마지막 영역이지만 실제로 구현시 가장 먼저 할 수 있는 영역이기도 한다. 영속 영역은 기본적으로 CRUD 작업을 하기 때문에 테이블과 VO(DTO) 등 약간의 준비만으로도 비즈니스 로직과 무관하게 CRUD 작업을 작성할 수 있다. MyBatis는 내부적으로 JDBC의 PreparedStatement를 활용한다 파라미터를 처리하는 ‘?’에 대한 치환은 ‘#{속성}’을 이용해서 처리한다. 💡영속성(persistency)이란? 데이터를 영구적으로 저장하는 것을 의미. 따라서 영속성 컨텍스트란 직역 하자면 데이터를 영구적으로 저장하는 환경 정도로 해석될 수 있다. 📸 create(intsert) 처리 tbl_board 테이블은 PK칼럼으로 bno를..
🏚 영속/비즈니스 계층의 CRUD 구현 이번 파트에서는 단순한 1개의 테이블만 사용하기 때문에 데이터베이스에 테이블, 시퀀스, 약간의 데이터들이 생성되었다면 코드를 이용하여 데이터에 대한 CRUD 작업을 진행한다. 영속 계층의 작업은 항상 다음과 같은 순서로 진행한다. 테이블의 칼럼 구조를 반영하는 VO(Value Object) 클래스의 생성 MyBatis Mapper 인터페이스의 작성/XML 처리 작성한 Mapper 인터페이스의 테스트 위의 과정 전에 JDBC 연결을 테스트하는 과정을 거치는 것이 좋지만, SQL Developer의 연결 자체가 이미 JDBC 연결을 이용하기 때문에 예제에서는 별도의 과정을 생략하고 진행하겠다. 🤝영속 계층의 구현 준비 대부분 웹 애플리케이션의 최종 목적은 데이터베이스에..
👷🏻♂️ 예제 프로젝트 구성 Spring LegacyProject로 ex02 프로젝트 생성한다. 생성 시 pom.xml 수정 → 데이터베이스 관련 처리 → 스프링 MVC 처리 순으로 진행한다. 👨🏻💻 pom.xml 수정 스프링 버전과 java 버전등을 수정한다 스프링 관련 추가 라이브러리는 spring-tx, spring-jdbc, spring-test가 필요하다. MyBatis를 이용할 것이므로 HikariCP, MyBartis, mybatis-spring, Log4jdbc 라이브러리들도 추가한다. 테스트와 Lombok을 사용할 것이고 사용을 위하여 jUnit 버전을 변경하고, Lombok을 추가한다. 서블릿은 3.0으로 수정해 준다. 서블릿 3.0버전과 JDK 8 기능을 활용하려면 Maven 관련..
👷🏻♂️ 프로젝트를 위한 요구사항 프로젝트 진행 전에 고객의 요구사항을 인식하고, 이를 설계하는 과정이 필요하다. 이를 흔히 요구사항 분석 설계라고 한다. ‘고객이 원하는 내용이 무엇이고, 어느 정도까지 구현할 것인가'에 대한 프로젝트 범위를 정하는 것이 목적이다. 요구사항은 너무 방대해질 수 있으므로, 단계를 정확히 구분해 주는 것이 좋다. 따라서 경험이 풍부하다면 초기 버전을 많은 기능을 포함시킬 수 있지만 경험이 적다면 최대한 단순하고 눈에 보이는 결과를 만들어 내는 형태로 진행하는 것이 좋다. 요구사항은 온전한 문장으로 정리하는 것이 좋다. 주어는 ‘고객’이고 목적어는 ‘대상’이 된다. 여기서의 ‘대상’은 결국 데이터의 베이스 설계와 시스템 설계에서 가장 중요한 용어가 된다. 다른 용어로는 도메..
👀 스프링 MVC 프로젝트의 기본 구성 스프링 MVC를 이용하는 프로젝트의 구성을 이해하는 것은 전체 데이터 흐름을 보는 것이다. 브라우저에서 전송한 데이터를 스프링 MVC의 어떤 단계를 거쳐 실행되는지 이해해야 문제 발생 시 빠른 대처와 대안을 찾을 수 있기 때문이다. 일반적인 웹 프로젝트는 3-tier(티어) 방식으로 구성된다. 🖥 Presemtatiom Tier(화면계층) 화면에 보여주는 기술을 사용하는 영역 예제에서는 Servlet/JSP나 스프링 MVC가 담당하는 영역 프로젝트의 성격에 맞춰 앱으로 제작하거나 CS(Client-Server)로 구성되는 경우도 있다. 이전 글들에서 스프링 MVC와 JSP를 이용한 화면 구성이 이에 속한다 👷🏻♂️ Business Tier(비즈니스 계층) 순수한 ..