organize/스프링

스프링 프로젝트 정리 1

001cloudid 2024. 9. 18. 16:07
728x90

DAO(Data Access Object)

데이터베이스에 접근하는 역할을 하는 객체

데이터의 CRUD 작업을 시행하는 클래스

데이터베이스 작업

 

예시1)

package com.mystroy001.dao;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

import com.mystroy001.domain.MemberDTO;

public class MemberDAO {//DB 작업
	
	//멤버변수 정의 javax.sql.DataSource
//	private DataSource dataSource;
	//스프링에서 디비연결 정보를 받아서  sql 문을 실행하는 프로그램 제공
	private SimpleJdbcTemplate jdbcTemplate;
	
	//set 메소드
	@Inject
	public void setDataSource(DataSource dataSource) {
//		this.dataSource = dataSource;
		jdbcTemplate = new SimpleJdbcTemplate(dataSource);
	}

	String sql = "insert into members(id,pw,name,date) values(?,?,?,?)";
	public void insertMember(MemberDTO memberDTO) {
		System.out.println("MemberDAO insertMember()");
		jdbcTemplate.update(sql, memberDTO.getId(),memberDTO.getPw(),memberDTO.getName(),memberDTO.getDate());
	}

}

 

예시2)

package com.mystory001.dao;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.mystory001.domain.MemberDTO;
@Repository
public class MemberDAO {
	
	//마이바티스 멤버 변수 정의 → 객체 생성을 자동으로 전달(주입) 받음
	@Inject
	private SqlSession sqlSession;
	//com.mystory001.mapper.memberMapper를 변수로 치환해서 사용
	private static final String namespace = "com.mystory001.mappers.memberMapper";

//	public void insertMember(MemberDTO memberDTO) {
//		System.out.println("MemberDAO insertMember()");
//		
//		sqlSession.insert(namespace+"insertMember", memberDTO); //sql구문(전체파일이름.sql 구문이름, 값)
//	}
	
	public void insertMember(MemberDTO memberDTO) {
		System.out.println("MemberDAO insertMember()");
		
		sqlSession.insert(namespace+".insertMember", memberDTO);
		
	}
	
	public MemberDTO userCheck(MemberDTO memberDTO) {
		System.out.println("MemberDAO userCheck()");
		
		return sqlSession.selectOne(namespace+".userCheck", memberDTO);
		//selectOne() : 리턴 결과가 1개
		//selectList() : List형으로 리턴
		//selectMap() : Map형으로 리턴
	}

	public MemberDTO getMember(String id) {
		System.out.println("MemberDAO getMember()");
		return sqlSession.selectOne(namespace+".getMember", id);
	}

	public void updateMember(MemberDTO memberDTO) {
		System.out.println("MemberDAO updateMember()");
		sqlSession.update(namespace+".updateMember", memberDTO);
	}

	public void deleteMember(MemberDTO memberDTO) {
		System.out.println("MemberDAO deleteMember()");
		sqlSession.delete(namespace+".deleteMember", memberDTO);
	}

	public List<MemberDTO> getMemberList() {
		System.out.println("MemberDAO getMemberList()");
		return sqlSession.selectList(namespace+".getMemberList");
	}

}

 

DTO(Data Transfer Object)

데이터를 전달하기 위한 객체. 데이터 은닉과 캡슐화

멤버변수를 접근하지 못하게함

 

예시)

package com.mystroy001.domain;

import java.sql.Timestamp;

public class MemberDTO {
	
	//데이터 은닉과 캡슐화
	//멤버변수 변수를 아무나 접근 못하게 막아줌 => 데이터 은닉
	
	private String id;
	private String pw;
	private String name;
	private Timestamp date;
	
	//데이터 접근을 위한 public 메소드 정의(getter, setter)
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Timestamp getDate() {
		return date;
	}
	public void setDate(Timestamp date) {
		this.date = date;
	}

}

※lombok을 이용하면 getter/setter를 사용하지 않아도 됨

 

Service

처리 작업

 

예시1)

package com.mystroy001.service;

import java.sql.Timestamp;

import javax.inject.Inject;

import com.mystroy001.dao.MemberDAO;
import com.mystroy001.domain.MemberDTO;

public class MemberService {//처리작업

	//MemberDAO 객체 생성 → 멤버 변수
//	MemberDAO memberDAO = new MemberDAO();
	private MemberDAO memberDAO;
	
	//set메소드 정의
	@Inject
	public void setMemberDAO(MemberDAO memberDAO) {
		this.memberDAO = memberDAO;
	}
	
	public void insertMember(MemberDTO memberDTO) {
		System.out.println("MemberService insertMember()");
		//가입날짜 설정
		memberDTO.setDate(new Timestamp(System.currentTimeMillis()));
		System.out.println(memberDTO.getDate());
		memberDAO.insertMember(memberDTO);
	} 

}

 

예시2)

package com.mystory001.service;

import java.sql.Timestamp;
import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.mystory001.dao.MemberDAO;
import com.mystory001.domain.MemberDTO;

@Service
public class MemberService {
	
	//MemberDAO 객체생성 - 멤버변수
	//@Inject - MemberDAO 클래스 찾기 - @Repsitory 애노테이션 찾기 - 자동으로 객체 생성
	//servlet-context에 component-scan 추가
	@Inject
	private MemberDAO memberDAO;
	
	public void insertMember(MemberDTO memberDTO) {
		System.out.println("MemberService insertMember()"); 
		
		memberDTO.setDate(new Timestamp(System.currentTimeMillis())); //가입날짜 설정
		
		memberDAO.insertMember(memberDTO); //insertMember()메소드 호출
	}

	public MemberDTO userCheck(MemberDTO memberDTO) {
		System.out.println("MemberService userCheck()");
		
		//userCheck 메소드 호출
		return memberDAO.userCheck(memberDTO);
	}

	public MemberDTO getMember(String id) {
		System.out.println("MemberService getMember()");
		return memberDAO.getMember(id);
	}

	public void updateMember(MemberDTO memberDTO) {
		System.out.println("MemberService updateMember()");
		memberDAO.updateMember(memberDTO);
	}

	public void deleteMember(MemberDTO memberDTO) {
		System.out.println("MemberService deleteMember()");
		memberDAO.deleteMember(memberDTO);
	}

	public List<MemberDTO> getMemberList() {
		System.out.println("MemberService getMemberList()");
		return memberDAO.getMemberList();
	}
	
	

}

웹 동작 원리 정리

  1. 클라이언트가 정보를 요청
  2. 웹 브라우저가 DNS에게 특정 사이트의 주소를 요청
  3. DNS가 웹 브라우저에게 사이트의 IP주소를 응답
  4. 웹 브라우저가 웹 서버에게 IP 주소를 이용하여 html 문서를 요청
  5. 웹 애플리케이션 서버와 데이터 베이스에서 웹 페이지 작업을 처리
  6. 작업 처리 결과를 웹 서버로 보내줌
  7. 웹 서버는 웹 브라우저에 응답
  8. 웹 브라우저 화면에 웹 페이지를 출력

 

여기서 4~6번 과정을 스프링으로 나타내면

  1. Controller에서
    DB 작업이 없으면 곧바로 요청한 주소를 리턴
    DB 작업이 필요할 경우 Service에서 Controller의 DB 작업
  2. Service에서는 DAO 메소드 호출
  3. DAO에서는 mapper.xml db작업을 호출?

즉, 화면 → Controller → Service → DAO → mapper.xml순으로 데이터이동.

리턴해야하는 것이 있을 경우 예를 들어 아이디 찾기와 같은 정보를 대조하고 해당 정보가 있는 것이 있으면 정보를 보여줘야할 경우에는 Controller → Service → DAO → mapper.xml → DAO → Service → Controller → 화면 으로 데이터가 이동

728x90

'organize > 스프링' 카테고리의 다른 글

프레임워크, Spring과 Spring Boot  (1) 2024.10.04
redirect, redirect와 RequestDispatcher  (0) 2024.10.03
페이지 처리  (0) 2024.10.02
1. 개발을 위한 준비  (0) 2024.08.27
spring(스프링) 프로젝트 생성  (0) 2024.02.03