분류 전체보기(250)
-
AOP(Aspect Oriented Programming)
AOP? → 공통 관심사항을 분리하는 방식 공통 관심사항을 추출할 수 있는 이유에는 proxy(대리자)가 있다. 프록시는 런타임 위빙(Runtime Weaving)을 수행한다. 런타임 위빙이란, Runtime때 실제 객체를 가상의 객체로 적용시키는 과정이다. Spring에서는 이 런타임 위빙을 1) JDK Dynamic Proxy 2) CGlib Proxy 두가지 방법으로 구현한다. 두번째 방법인 CGlib(Code Generator Library)는, 이미 스프링이나 하이버네이트에 내장되어있다. DI로 주입받은 객체를 출력해보면 CGLIB이 생성한 가짜 객체가 등장함을 알 수 있다. 즉, memberService가 아닌 다른 객체가 Injection 되어있다. 타겟을 감싸는 프록시가 런타임에 생성되면,..
2022.03.02 -
Spring JDBC Template
스프링 JDBC는 DB접근 기술로.. 이전의 방대한 양의 코드를 간결하게 줄여준다. 커넥션 객체 얻고~ Try catch 하고~ 쿼리문 날리고 ~ 자원 반납하는 과정이 획기적으로 줄어들었다. **다만 쿼리문은 직접 날려야 한다. 사용하기 위해서는 build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리를 추가해야 한다. implementation 'org.springframework.boot:spring-boot-starter-jdbc' 위처럼 라이브러리를 등록하면, Spring Boot는 이를 사용하는데 필요한 라이브러리를 자동으로 가져온다. Spring Boot는 spring-boot-starter라는 사전에 정의한 의존성 조합을 제공한다. Jdbc 등 프로젝트에 설정해야 하는 대부..
2022.02.25 -
Spring 통합 테스트
기존의 테스트 코드는, 해당 테스트 클래스 내에서 단독으로 진행되었다. 이번에는 Spring 서버를 띄운 상태로 테스트를 진행하였다. 1. @SpringBootTest 이 어노테이션은 Spring Main Application(@SpringBootApplication 어노테이션)을 찾은 뒤 동일 패키지의 하위 모든 Bean을 찾아온다. package first.firstspring; @SpringBootApplication public class FirstSpringApplication { public static void main(String[] args) { SpringApplication.run(FirstSpringApplication.class, args); } } *Bean을 스프링이 자동으로 ..
2022.02.25 -
백준 1931번: 회의실 배정
문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거..
2022.02.18 -
Optional<T>
Optional 타입의 객체에는 모든 타입의 참조변수를 담을 수 있다. 참조변수를 직접 담지 않고 Optional에 담는 이유는 1) Null을 직접 다루는 것은 NullPointerException의 위험이 존재한다. Optional을 이용하면 Null을 간접적으로 다룰 수 있다. 2) 위와 같은 이유로, Optional을 사용하지 않으면 Null 체크를 if문 등으로 해주어야 하는데, 이는 코드가 지저분하다. Optional 객체 생성하기 String str = "abc"; Optional opt = Optional.of(str); Optional opt2 = Optional.ofNullable(null); // 가능 Optional opt2 = Optional.of(null); // NullPoin..
2022.02.16 -
스프링 웹 개발 방식 - 정적컨텐츠, MVC 패턴, API
1. 정적컨텐츠 정적 컨텐츠는 서버에서 가공하지 않은 파일을 사용자에게 그대로 보내주는 방식 2. MVC와 템플릿 엔진 서버에서 프로그래밍을 통해 HTML을 동적으로 변경하여 사용자에게 전송하는 방식. 이를 위해 Model – View – Controller로 관심사를 나눈다. Controller는 내부 동작을 처리하며, Model은 데이터를 담아 controller에 전달해주는 역할을, View는 사용자에게 보여지는 부분을 담당한다(화면 출력). Model은 분리된 코드를 연결하는 역할(데이터 저장 및 전송)을 수행한다. 클라이언트로부터 입력 받은 데이터는 Model에 저장되어 Controller로 전달된다. Controller는 작업 결과를 Model에 저장하며 이 Model은 출력 파트(View)로..
2022.02.16