Spring

최현주·2023년 12월 22일
0

MySQL과 Oracle은 둘 다 관계형 데이터베이스 관리 시스템(RDBMS)으로서 데이터를 효율적으로 저장하고 관리하는 데 사용된다. 그러나 두 시스템 간에는 몇 가지 차이점이 있다.

비용 및 사용자 규모:

Oracle은 상업용 데이터베이스 시스템으로 유료이며, 대규모 기업 및 공공 기관에서 주로 사용된다.
MySQL은 오픈 소스이기 때문에 무료로 사용할 수 있으며, 주로 스타트업이나 중소 규모의 프로젝트에서 많이 사용된다.
시퀀스 및 Auto Increment:

Oracle은 시퀀스(Sequence)를 사용하여 유일한 값의 일련 번호를 생성한다.
MySQL은 Auto Increment라는 키워드를 사용하여 테이블에 자동으로 증가하는 값을 생성한다.
데이터베이스 생성 및 유지:

Oracle은 사용자마다 별도의 데이터베이스를 생성하고 유지한다.
MySQL은 여러 사용자가 동일한 MySQL 서버에서 각자의 스키마(데이터베이스)를 가질 수 있다.
코드 문법 및 SQL:

SQL 문법은 기본적으로 표준 SQL을 따르지만, Oracle과 MySQL 간에는 몇 가지 차이가 있을 수 있다. 특히, 일부 함수나 문법적인 차이점이 있을 수 있다.
버전 및 기능:

Oracle은 매우 강력한 기능과 안정성을 제공하는 대규모 데이터베이스 시스템이다.
MySQL은 경량이면서도 높은 성능을 제공하며, 많은 개선과 기능 업그레이드가 이루어져 왔다다.
라이선스:

Oracle은 유료이므로 라이선스 구매가 필요하다.
MySQL은 GPL(General Public License) 라이선스로 배포되며, 오픈 소스 커뮤니티에 의해 관리되고 지원된다.
결론적으로, Oracle은 대규모 비즈니스 애플리케이션과 대형 조직에 적합한 선택이며, MySQL은 가벼우면서도 비용 효율적인 솔루션으로 스타트업 및 중소 규모의 프로젝트에서 선호되는 경향이 있다.

☝정부에서 프레임워크에 손을 댄 이유

개발자들은 시간을 아낄 수 있는 장점이있다.
불필요한 코드를 짤 필요가없다




의존성 주입이란?
객체간의 결합도가 낮아야함. 높을수록 유지보수가 어렵다. 중간에 인터페이스를 둬서 해당 인터페이스의 내용이 어떤것이 바뀌든 상관없이 외부 객체에서 주입을 받아서 관계를 설정한다





영구적으로 데이터가 DB에있는한 보존이 된다.




<!-- S1. Spring 버전 변경
			-> 최신 Spring버전은 mvnrepository.com에서
					Spring Context 검색해서 버전 확인 -->
		<java-version>1.8</java-version>
		<org.springframework-version>5.3.23</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>

```

            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArgument>-Xlint:all</compilerArgument>
                <showWarnings>true</showWarnings>
                <showDeprecation>true</showDeprecation>
            </configuration>

<!-- 	S3. 필요한 기본 API 추가 -->
		      <!-- mybatis -->
      <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.4.6</version>
      </dependency>

// S4. Controller 생성
// 기존의 기능별 Controller 대신 기능을 모아놓은 업무 단위별 Controller로 생성
// ex) BoardController, MemberController, ProductController ..
// 기존의 기능별 Controller -> Method 형태로 변환

@Controller // Controller 역할을 하는 class임을 명시

package kr.board.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

// S5. entity 생성
// Board == BoardDTO
// DB연결 부분 버전이 높아질수록 개체와 테이블간의 관계가 긴밀해지기 때문에
// class이름을 테이블 이름과 같게 만들기

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Board {
	
	private int num;
	private String title;
	private String writer;
	private String content;
	private String b_date;
	

// S6. Mapper 만들기
// BoardMapper == BoardDAO
// interface로 생성하는 이유
// 1. 기존의 BoardDAO의 메소드들이 하던 역할들을 Spring 내부의 API가 진행
// 2. 코드를 작성할 필요 X -> 형태만 가지고있은 추상메소드로 변경
// 3. 추상메소드로 변경이 되면서 class -> interface로 변경

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<!-- S7. BoardMapper.xml 생성 -> namespace 해당 인터페이스 경로로 지정 -->
<mapper namespace="kr.board.mapper.BoardMapper">


</mapper>

// S8. Method 형태로 기존 POJO만들기
	@RequestMapping("/boardList.do") // S9. HandlerMapping역할
	public String boardList(Model model) {
		
		// 가상의 데이터
		Board board1 = new Board(1, "게시판실습1", "최현주", "게시판실습내용1", "2023-12-29");
		Board board2 = new Board(1, "게시판실습1", "최현주", "게시판실습내용1", "2023-12-29");
		Board board3 = new Board(1, "게시판실습1", "최현주", "게시판실습내용1", "2023-12-29");
		
		List<Board> boardList = new ArrayList<Board>();
		
		boardList.add(board1);
		boardList.add(board2);
		boardList.add(board3);

<!-- S10. web.xml 은 Tomcat이 구동 될 때 가장 먼저 읽는 파일  -->
	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>

<!-- S11. DispatcherServlet == FrontController
			- 기존 FrontController를 Spring에서는 DispatcherServlet이라고 명칭
			- DispatcherServlet은 servlet-context.xml을 읽어서 실행 -->
	<!-- Processes application requests -->

<!-- S12. controller를 스캔
		- DispatcherServlet이 업무를 진행할 POJO를 찾을 수 있도록 Controller들을 스캔
		- 여러가지 클래스 중에서 @Controller가 되어있는 클래스들만 스캔해서 객체를 생성 -->
	<context:component-scan base-package="kr.board.controller" />

<!-- S13. ViewResolver -->
	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

// S14. 객체바인딩(Model)
		// - Model : Spring에서 제공하는 메모리
		// - model.addAttribute(담고싶은 객체)s
		// - request.getAttribute(객체이름), ${}
		model.addAttribute("boardList", boardList);
		
		return "BoardMain";


구조 외워!!

enctype="multipart/form-data"

파일받아오는 코드이기때문에 없애야해

inject
BoardMapper객체를 매번 새롭게 생성하는 것이아니라 이미 생성된 객체를 주입하는것

<!-- S15. ContextLoaderListener : 
		- 스프링 컨테이너에서 가장 먼저 만들어지는 객체
		- DB연결을 담당하는 객체 -->

<!-- S17. HikariCP
			- spring과 mybatis의 중복되는 역할을 각자 담담
			- spring  : DB연결(HikariCP API) -> zero overhead로 성능이 좋은 CP
			- mybatis : SQL과 Mapping하는 역할
			
			- DB연결을 하기 위해서 HikariCP에서 필요한 class 2개
			1. HikariConfig : DB의 접속정보를 가지고 있는 class 2개
			2. HikariDataSource : DB의 접속정보를 가지고 Connection Pool을 만들어줄 Class -->
            

<!-- S18. 기타 DB관련 API추가 -->
		      <!-- mysql JDBC Driver -->
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.49</version>
      </dependency>

// S19. SQL문장을 실행시킬 추상메소드 만들기
	// SQL문장을 실행시킬 수 있는 추상메소드, 그래서 메소드의 이름과 sql문장의 id이름과 동일하게 설정

// S22-2. SQL문장 작성하기 -> annotation방식
	@Select("select * from Board")
	public List<Board> getBoard();
	
	@Insert("insert into board values(default, #{title}, #{writer}, #{content}, default)")
	public int boardInsert(Board board);
	
	@Select("Select * from board where num=#{idx}")
	public Board getDetail(int idx);
	
	@Delete("Delete from board where num=#{num}")
	public int boardDel(int num);

// S23. BoardMapper 선언
	// Autowired : 이미 만들어져있는 객체가 필요해서 외부에서 주입받기 위한 어노테이션
	@Autowired
	private BoardMapper boardMapper;
	
	@RequestMapping("/")
	public String welcome() {
		return"redirect:/boardList.do";

<!-- S24. 한글인코딩
			: request요청이 들어오기전에 tomcat이 시작되자마자 한글 인코딩 진행
			: CharacterEncodingFilter class가 Spring Container 안에 생성
			: 모든 요청은 한글인코딩을 하고 FrontController로 이동 -->
profile
갓벽한 개발자

0개의 댓글