재밌고 어려운 IT를 이해해보자~!
xml, annotation(@) 본문
스프링은 .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 |