재밌고 어려운 IT를 이해해보자~!

xml, annotation(@) 본문

코리아IT핀테크과정

xml, annotation(@)

언제나즐거운IT 2024. 2. 28. 11:17

스프링은 .xml + @ 을 사용해서 구성한다!

 

스프링 설정시 주의사항

스프링설정시 드라이버끼리 모호성 발생할수있음
DB는 한개만 넣자

fisnish 누르고 오른쪽 하단에 퍼센테이지가 찰때까지 기다린다.
[boot]가 떠야 성공~

 

 

컨테이너
1. 톰캣 : 서블릿 컨테이너, 웹 서버, 내장되어 있음            → web.xml
Servlet 클래스를 new 해줌
FrontController 등
2.  스프링 컨테이너 :  POJO 클래스를 new 해줌              → applicationContext.xml
DAO, DTO, Action(Controller) 등
※ 코드내에서 new 역할을 담당하는 컨테이너
3. 루트(최상위) 컨테이너 : .jar(라이브러리)를 관리해줌        → pom.xml 
얘도 스프링 컨테이너라고 불러서 헷갈린다 ..........
※ 설정 관련 컨테이너 

 

간단히 얘기하면

라이브러리 얘기 -> 3번
객체가 뉴가 안된다 -> 2번

 

pom.xml] xml은 설정파일!


스프링 프레임워크에서는 클릭하면 해당 라이브러리들을 알아서 주입해줌
다만 MySQL or 최신 라이브러리들은 개발자가 추가로 설정해야할수도있음
톰캣을 내장서버로 제공하고있음을 확인

컨테이너는 설정파일을 필요로한다!!!!!!!!!!
▶설정들이 많아진다면 개발자에게 부담이 된다.
▶.xml에 작은 에러라도 발생한다면, 프로그램이 실행 XXX

스프링에서 과도한 설정을 줄여주기위해 @(어노테이션) 기능을 개발함!!!!

부트는 @ 위주로 실행

@ 은
개발자 가독성 증가
+
.xml 로의 접근을 줄여줌
▶ .java 에 작성함!!!!!!
자바 코드와 설정을 개발자가 한번에 확인할수있음
자바코드에만 접근하면되니까 .xml을 덜 열어봄(오류확률 낮아짐)

스프링 프레임워크에서는 클릭하면 해당 라이브러리들을 알아서 주입해줌 
다만 MySQL or 최신 라이브러리들은 개발자가 추가로 설정해야할 수도 있음

 

BoardService boardService =(BoardService)factory.getBean("boardService");
MemberService memberService =(MemberService)factory.getBean("memberService");

 

원래라면 DAO를 new키워드를 사용해 객체를 만들었지만

앞으로는 싱글톤 유지를 위해서 

 

@과 xml을 사용해 로그인, 게시글작성, 게시글 전체 목록 출력을 만들어보자!

 

JDBCUtil.java

package com.spring.biz.common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCUtil {
	
	static final String driverName="com.mysql.cj.jdbc.Driver";
	static final String url="jdbc:mysql://localhost:3306/chalKag";
	static final String user="root";
	static final String passwd="1234";
	
	public static Connection connect() {
		Connection conn=null;
		
		try {
			Class.forName(driverName);
			
			conn=DriverManager.getConnection(url,user,passwd);
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		
		return conn;
	}
	
	public static void disconnect(PreparedStatement pstmt, Connection conn) {
		try {
			pstmt.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}

 

JDBCUtil은  앞으로 MySQL에 맞춰서 작성한다.

 

BoardService.java

package com.spring.biz.board;

import java.util.ArrayList;

public interface BoardService {
	ArrayList<BoardDTO> selectAll(BoardDTO bDTO);
	BoardDTO selectOne(BoardDTO bDTO);
	
	boolean insert(BoardDTO bDTO);
	boolean update(BoardDTO bDTO);
	boolean delete(BoardDTO bDTO);
}

BoardServiceImpl.java

package com.spring.biz.board;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("boardService")
public class BoardServiceImpl implements BoardService {

	@Autowired
	private BoardDAO bDAO;
	
	@Override
	public ArrayList<BoardDTO> selectAll(BoardDTO bDTO) {
		// TODO Auto-generated method stub
		return bDAO.selectAll(bDTO);
	}

	@Override
	public BoardDTO selectOne(BoardDTO bDTO) {
		// TODO Auto-generated method stub
		return bDAO.selectOne(bDTO);
	}

	@Override
	public boolean insert(BoardDTO bDTO) {
		// TODO Auto-generated method stub
		return bDAO.insert(bDTO);
	}

	@Override
	public boolean update(BoardDTO bDTO) {
		// TODO Auto-generated method stub
		return bDAO.update(bDTO);
	}

	@Override
	public boolean delete(BoardDTO bDTO) {
		// TODO Auto-generated method stub
		return bDAO.delete(bDTO);
	}

}

새로운 녀석이 생겼다!

앞으로는 DAO를 통해서 메서드를 사용한느 것이 아닌 보드서비스와 보드서비스임플을 사용해 다양한 메서드를 사용한다. 그리고 이부분엔 아마 공통 로직이 들어가게 될 것같다.

Member부분도 마찬가지!

 

전체적인 CTRL 부분인 USER03.java에 다음처럼 작성했다.

User03.java

package test;

import java.util.ArrayList;
import java.util.Scanner;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

import com.spring.biz.board.BoardDTO;
import com.spring.biz.board.BoardService;
import com.spring.biz.member.MemberDTO;
import com.spring.biz.member.MemberService;

import ch.qos.logback.core.recovery.ResilientSyslogOutputStream;

public class User03 {

	public static void main(String[] args) {
		
		AbstractApplicationContext factory=new GenericXmlApplicationContext("applicationContext.xml");
		
		BoardService boardService =(BoardService)factory.getBean("boardService");
		MemberService memberService =(MemberService)factory.getBean("memberService");
		
		Scanner sc=new Scanner(System.in);
		
		ArrayList<BoardDTO> datas=boardService.selectAll(null);
		for(BoardDTO data:datas) {
			System.out.println(data);
		}
		
		
		
		
		MemberDTO loginedUser = new MemberDTO();
		MemberDTO memberData = new MemberDTO();
		BoardDTO boardData = new BoardDTO();
		System.out.println(loginedUser);
		while(true) {
			System.out.println("==============게 시 판 ==============");
			System.out.println(" 1. LOGIN");
			System.out.println(" 2. WRITE");
			System.out.println(" 3. SHOW ALL CONTENTS");
			System.out.println("SELECT NUMBER");
			int ans = sc.nextInt();
			if (ans == 1) {
				System.out.println(" ID 입력");
				String ID = sc.next();
				System.out.println(" PW 입력");
				String PW = sc.next();
				memberData.setMid(ID);
				memberData.setPassword(PW);
				memberData = memberService.selectOne(memberData);
				if (memberData != null) {
					System.out.println("로그인완료~");
					loginedUser = memberData;
					continue;
				}
				else {
					System.out.println("ㅡㅡ 틀렸음");
				}
			}
			else if (ans ==2) { 
				if (loginedUser.getMid() == null) {
					System.out.println("로그인 후 이용해주세요");
					continue;
				}
				System.out.println("WRITE TITLE");
				String title = sc.next();
				System.out.println("WRITE CONTENTS WHATEVER U WANT");
				String contents = sc.next();
				boardData.setTitle(title);
				boardData.setContent(contents);
				boardData.setWriter(loginedUser.getName());
				boolean flag = boardService.insert(boardData);
				if (flag) {
					System.out.println("게시글이 입력되었습니다~");
				}
				else {
					System.out.println("뭔가 잘못됌 FAIL");
				}
			}
			else if (ans == 3) {
				System.out.println("====전체 게시글 목록입니다 ====");
				for(BoardDTO data:datas) {
					System.out.println(data.getTitle());
				}
			}
		}
		
	//	factory.close();
	}
	
}

 

 

 

'코리아IT핀테크과정' 카테고리의 다른 글

Data Base Connection Pool  (0) 2024.03.04
AOP(Aspect-Oriented Programming)  (2) 2024.02.29
스프링 설치  (0) 2024.02.27
Dependency Injection(의존 주입)  (0) 2024.02.27
스프링 프레임워크, Bean태그, 결합도  (2) 2024.02.26
Comments