Burninghering's Blog
article thumbnail
MaBatis로 DAO작성하기
패캠 챌린지 2023. 5. 11. 15:56

변환 에러를 피하기 위해 게시물 번호를 Integer를 썼다. 사용자가 요청한 데이터를 DTO에 담아서 서비스 계층으로 서비스 계층에서 Repository 계층으로 데이터를 전달할 필요가 있다 각 계층으로 분리를 해놨기 때문에 계층 간 데이터를 전달하는 객체가 DTO 컨트롤러의 실행 흐름 제어 : Redirect & Forward 관심사, 역할에 따라 계층을 분리해놨고 각 계층 간 데이터를 전달할 필요가 있기 때문에 그 데이터를 담을 객체를 DTO라고 한다. xml문 작성하기 1.mapper > boardMapper.xml 파일 생성하기 2.xml 코드 따오기 3.select문 만들기 4.console로 가서, board 테이블을 검색하는 select sql문을 만들어서 복사해서 가져와서 붙여넣어주기 s..

article thumbnail
MyBatis
패캠 챌린지 2023. 4. 28. 18:03

SQL Mapping이라는 것은 java 코드와 sql 코드를 맵핑해준다는 것 SQL문은 별도의 XML파일로 분리해놓는다 pom.xml web.xml sevlet-context.xml index.jsp menu.css LoginController.java UserDao.java User.java UserDaoImpl.java loginForm.jsp root-context.xml mybatis-config.xml

article thumbnail
서비스계층(Layer)의분리, Transactional
패캠 챌린지 2023. 4. 5. 11:53

컨트롤러에서 DB를 직접 관여하지 않고, UserDAO (Repository)를 통해 DB를 조작하였다. @Controller - Presentation Layer @Repository - Persistence Layer(영속계층), Data access Layer 컨트롤러는 DB 조작 없이 본연의 역할에 집중하도록 관심사를 분리한 것이다. 사용자의 이력을 다루게 되었다 컨트롤러에서 Dao를 주입한다 회원가입 할 때 사용자의 이력까지 다루는 것은 비즈니스 로직이다. (컨트롤러 내, DAO 내에도 위치하면 X) 비즈니스 로직을 담당할 객체를 하나 더 만들어야 한다. 비즈니스로직의 메소드명은 업무 용어와 같다. (UserDao의 메소드는 SQL적) 트랜잭션을 비즈니스 계층에 적용한다 회원 가입, 유저 이력까..

article thumbnail
AOP
패캠 챌린지 2023. 4. 4. 21:39

before & after코드 추가 -> 공통 코드 중복 만약 변경 사항이 생기면 똑같은 곳을 여러번 고쳐야한다. 조금 더 현명한 방법으로 해결하려고 한다 그것이 AOP 코드들을 따로 분리해냈다 하나의 메서드에 핵심기능/부가기능으로 두 개의 관심사가 있다. 서로 다른 관심사가 하나의 메서드에 있다면 관심사를 분리해줘야한다. 분리해야 하는 것 : 1. 관심사 / 2. 변하는 것/변하지 않는 것 / 3. 중복 코드 메서드 호출 부분 -> reflection API를 호출해서 메소드를 호출할 수 있도록 한다. 실습 package com.fastcampus.ch3.aop; import java.lang.reflect.Method; public class AopMain { public static void mai..

article thumbnail
Transaction, Commit, Rollback
패캠 챌린지 2023. 4. 3. 22:31

insert, update, select 등 명령 하나 하나가 Tx이다. 계좌 이체(update)는 출금 따로 입금 따로 작업을 할 수 없기 때문에 같이 묶어야 한다. 둘 다 성공하던가 / 하나만 실패해도 취소 -> All or Nothing 둘 이상의 작업을 어떻게 트랜잭션으로 묶을까? 우선 속성부터 배워보자 원자성 일관성 - 계좌 이체 전 과 후의 총 금액이 같아야한다. 고립성 - 서로의 작업(Tx1, Tx2)이 영향을 주면 안된다. (작업에 따라 Isolation Level을 적절하게 선택) 영속성 커밋을 해버리면, 롤백이 불가하다 자동 커밋 - 명령을 실행할 때마다 바로 커밋을 해버림 -> 롤백 불가 수동 커밋 - 내가 직접 커밋 명령을 내려줘야 커밋이 되는 것 각 트랜잭션을 고립시키는 정도를 나..

article thumbnail
DAO의 작성과 적용
패캠 챌린지 2023. 3. 30. 00:01

컨트롤러가 직접 DB에 접근하게 되면, 메소드가 중복된다. 중복을 제거하려면? 공통 부분을 따로 분리해낸다. 계층의 분리! UserDao를 통해 DB에 접근한다면 중복코드가 제거된다. 이 UserDao를 영속 계층(Persistence Layer), Data Access Layer 라고 하고, 컨트롤러 부분은 Presentation Layer라고 한다. 데이터를 보여주는 계층이다. 이렇게 분리해내는 이유는 1.관심사의 분리 / 2. 변하는 것과 변하지 않는 것 / 3. 중복, 공통 코드 1,3번이다. 나중에 MySQL을 쓰던지 Oracle을 쓰던지, 인터페이스를 사용하면 UserDao가 바뀌어도 상관없다. UserDao.java를 만들고, UserDaoImpl을 만들었다. UserDao를 인터페이스로 만..

스프링으로 DB 다루기
패캠 챌린지 2023. 3. 29. 00:54

스프링으로 DB를 다루기위해, TDD코드에 테이블에 회원 정보를 추가하는 메소드를 만들고 매개변수로 User를 주었기 때문에 User클래스를 만들어준다(테이블의 컬럼과 똑같이 만들어준다) 그리고나서 insertUser메소드를 만들어준 뒤 Test코드로 insertUserTest()코드를 만들어준다. public class DBConnectionTest2Test { @Autowired DataSource ds; @Test public void insertUserTest() throws Exception{ User user = new User("kim","1234","abc","aaa@aaa.com",new Date(),"fb",new Date()); int rowCnt=insertUser(user); as..

article thumbnail
Spring으로 DB 연결하기
패캠 챌린지 2023. 3. 28. 17:08

package com.fastcampus.ch3; import java.sql.*; public class DBConnectionTest { public static void main(String[] args) throws Exception { // 스키마의 이름(springbasic)이 다른 경우 알맞게 변경해야 함 String DB_URL = "jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8"; // DB의 userid와 pwd를 알맞게 변경해야 함 String DB_USER = "hyerin"; String DB_PASSWORD = "hyerin"; Connection conn = DriverManager...