본문 바로가기

Programming/Framework

(27)
DAY 147. Spring DI(Dependency Injection) 의존성 주입 Spring DI(Dependency Injection) IoC 구현의 핵심 기술이다. 사용하는 객체를 직접 생성해서 만드는 것이 아니라, 컨테이너가 빈의 설정 정보를 읽어와서 자동으로 해당 객체에 연결하는 것이다. 이렇게 의존성을 주입 받게 되면 해당 객체를 수정해야 할 상황이 발생했을 때, 소스 코드의 수정을 최소화 할 수 있다. 객체 간의 종속 관계 (결합도) 한 클래스에서 필드 객체를 생성할 때 발생하는 두 객체 간의 관계를 말하며, 각 객체 간의 내용이 수정될 경우 영향을 미치는 정도를 말한다. 하나의 클래스가 변경되면, 두 개의 객체가 서로 연관 관계가 있다고 가정할 경우, 하나의 클래스를 수정하면 참조하고 있는 다른 클래스도 수정해야하는 경우가 발생하는데, 이런 경우를 객체 간의 결합도가 높..
DAY 146. Spring IOC(Inversion of Control) Spring IOC (Inversion of Control) 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에 직접 관리하는 것 스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지 해당 객체에 대한 관리를 직접 수행한다. 기존 웹 애플리케이션 개발자가 소스코드를 통해서 객체 생성, 객체 소멸 등 직접 코드로 작성 했었다. 스프링 프레임워크 개발자는 소스코드만 작성하고 객체 생성, 객체 소멸, 라이프 소멸은 프레임 워크(컨테이너)에서 제어한다. why? -> 객체 간의 결합도를 낮추기 위함이다. IoC 컨테이너 - 스프링에서 관리하는 객체를 Bean(빈) 이라고 한다. - 빈들을 관리하는 의미로 컨테이너를 ..
DAY 145. Spring 개요 Spring Framework 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크이다. 동적인 웹 사이트 개발을 위한 서비스 제공을 하고 있고, 대한민국 공공기관 웹 서비스 개발 시 사용 권장되는 전자정부 표준 프레임워크의 기반 기술로서 사용된다. ✔️ DI (Dependency Injection) 의존성 주입 - 설정 파일이나 어노테이션을 통해 객체 간의 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요 없다. - 결합도를 느슨하게 낮출 수 있는 장점이 있다. - 컨테이너가 객체를 관리하고 의존성 관계를 정리해주는 역할이다. - spring에서는 설정 파일을 통해 읽어서 ApplicationContext 컨테이너가 객체들 간의 관계를 정리해주는 방식이다. (xml, java, @) - 직..
DAY 141. TDD 방식으로 게시글 상세조회 기능(댓글 포함) 01. Reply.java 클래스 생성 - com > kh > mybatis > board > model > vo 밑에 생성 02. BoardServiceTest.java에 findBoardByNoTest() 메소드 생성 - Board 객체 선언 - service 객체에 findBoardByNo() 메소드를 가지고 보드를 조회하도록 한다. ▼ 최종 코드 @ParameterizedTest @ValueSource(ints = {122}) public void findBoardByNoTest(int no) { Board board = null; board = service.findBoardByNo(no); // board는 Null이 아니며, 추출한 no들 값이 내가 테스트하는 no와 같은가? assertTh..
DAY 140. TDD 방식으로 게시판 페이징 기능 00. 시작하기에 앞서 ▶ 기존 Servlet/JSP 방식 - 기존에 Servlet/JSP 에서는 쿼리문에서 RowNum 컬럼과 서브쿼리를 통해서 페이징 처리를했다. DB 쿼리가 바뀌면 페이징을 위해서 수정 작업이 지속적으로 필요하다. ▶ Mybatis 방식 - 하지만, Mybatis에서는 페이징 처리를 위해서 RowBounds 클래스를 제공해준다. - 쿼리문 조회 결과를 가지고 RowBounds를 만들어서 session 객체에 매개값으로 넘겨주면, session 객체에서 쿼리문을 실행하여 쿼리 조회해서 나온 결과를 RowBounds 내용을 가지고 페이징에 필요한 데이터를 가져다 준다. - 즉, 조회된 결과에서 내가 만든 RowBounds를 가지고 원하는 데이터만 가져온다. ※ 한 줄 요약! - RowB..
DAY 139. TDD 방식으로 게시판 필터 기능 만들기 웹 페이지에서 흔하게 볼 수 있는 형식 중 하나인 필터 기능을 TDD 방식으로 구현해보자. 체크되는 필터에 해당하는 내용만 게시판 글로 볼 수 있는 기능이다. 1. 기존 DB에 TYPE 컬럼 추가 ALTER TABLE BOARD ADD TYPE VARCHAR2(2) DEFAULT 'B1'; -- 위 쿼리문을 지우는 쿼리문 ALTER TABLE BOARD DROP COLUMN TYPE; - 데이터 베이스에 BOARD 테이블이 이미 생성되어 있는 경우, 필터에 사용할 컬럼을 추가하자. - 데이터 베이스 준비(구분할 수 있도록 적정량의 TYPE 컬럼 값을 B1, B2, B3, ...여러 개 준비) 체크박스를 사용한다고 가정, 체크 박스 필터에 걸리는 내용만 조회하도록 한다. 이 때,
DAY 138. Mybatis - 동적 SQL 동적 SQL? 동적으로 제어할 수 있는 구문을 제공하여 좀 더 쉽게 쿼리를 구현하는 기능을 지원한다. (일반적으로 검색 기능이나 다중 입력 처리 등을 수행할 경우, SQL 실행하는 DAO를 여러 번 호출하거나, batch 기능을 이용해서 버퍼에 담아서 한번에 실행 시키는 방식으로 쿼리를 구현함) ▷ 즉, 실행하는 시점에 파라미터 값이나, 특정 조건에 따라서 쿼리문이 만들어져서 실행되는 쿼리문을 동적 SQL이라고 한다. ▷ 하나의 SQL을 가지고 여러 가지 케이스를 처리할 수 있다. ▶ if 동적 쿼리를 구현할 때 가장 기본적으로 사용됨 특정 조건을 만족할 경우 안의 구문을 쿼리에 포함시킴 만약 if문의 test 속성의 조건을 만족하지 않으면 쿼리에 포함시키지 않는다. ▶ 다중 if 필요로 하는 조건이 1..
DAY 137. Mybatis - xml 파일 만들기 mybatis-config 설정하기 01. mybatis-config.xml 파일 만들기 src > main > resources 폴더 생성하고 그 하위에 만들었다.