H2 데이터베이스 설치아래의 링크에서 1.4.200 버전을 설치한다. 만일 이미 설치후 실행까지 했다면 ~/test.mv.db 파일을 꼭 삭제 해야한다.https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com 맥 사용자의 경우 cmd에서 권한주기 : chmod 755 h2.sh실행방법h2가 설치된 경로에 있는 bin 폴더에 들어가 아래의 명령어를 cmd에서 입력맥 : ./h2.sh윈도우 : h2.bat 스프링 통합 테스트@SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행함@Transactional : 테스트 케이스에 해당 어노테이션이 존재하면 @test 어노테이션이 붙어있는 테스트 ..
Spring MVC란? 어플리케이션의 확장을 위해 Model, View, Controller 세가지 영역으로 분리한 것으로, 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치치 않아 유지보수에 용이하다. 또한, 컴포넌트간의 결합성이 낮아 프로그램 수정이 용이하다. Model : 로직(Business & DB)을 처리하기 위한 모든 것으로 Cotroller로 부터 넘어온 data를 이용하여 이를 수행후 그에 대한 결과를 다시 controller에 리턴한다. (Dao, Service) View : 모든 화면 처리를 담당한다. Client의 요청에 대한 결과뿐 아니라 controller에 요청을 보내는 화면단도 jsp에서 처리한다. 결과 출력을 위한 코드만 존재한다. (JSP) Controller : Cli..
AOP란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 객체지향을 보완하는 수단으로 흩어진 관점(Aspect)를 모듈화 하여 비즈니스 로직을 해치지 않고 재사용 하는 프로그래밍 기법이다. Spring AOP란? Spring AOP는 스프링 프레임워크에서 제공하는 기능 중 하나로 관점 지향 프로그래밍을 지원하는 기술이다. Spring AOP는 로깅, 보안, 트랜잭션관리 등과 같은 공통적인 관심사를 모듈화하여 코드 중복을 줄이고 유지 보수성을 향상하는데 도움을 준다. 핵심 기능의 관점에서 보았을 때, BoardService, UserService, XXXService는 공통된 요소가 없다. 그러나 부가기능 관점에서 바라보면 각각의 Service는 b..
Reflection API 구체적인 클래스 타입을 알지 못해도 메서드, 타입, 변수 등 해당 클래스의 정보에 접근할 수 있게 해주는 자바 API 스프링 프레임워크, 마이바티스, 하이버네이트 등의 라이브러리에서 사용 JVM에서 실행되는 애플리케이션의 런타임 동작을 검사하거나 수정할 수 있는 기능이 필요한 경우 사용 리플렉션을 사용해 개발자가 등록한 빈을 애플리케이션 내에서 사용할 수 있음 대표 예시 스프링 프레임 워크 : DI에서 사용 MVC : View에서 넘어오는 데이터를 객체에 바인딩 할 때 사용 Hibernate : @Entity 클래스에 setter가 없으면 해당 필드에 값을 바로 주입 JUnit : ReflectionUtils 클래스를 내부적으로 정의하여 사용 주의사항 오버헤드 발생 : 성능 저..
의존성 주입에는 4가지의 방법이 존재한다. 필드 주입(Field Injection) 수정자 주입(Setter Injection) 생성자 주입(Constructor Injection) 일반 메서드 주입(Method Injection) 필드 주입(Field Injection) 필드에 @Autowired를 붙여 바로 주입하는 방법 특징 코드가 간결해진다. 그러나 외부에서 변경이 불가능 하여 테스트하기 어렵다. DI 프레임워크 없이 아무것도 할 수 없다. 애플리케이션의 실제 코드와 상관없는 특정 테스트를 하고싶을 때 사용 정상적으로 작동되게 하려면 결국 setter가 필요 @Autowired(required=false) 옵션 처리를 통해 의존관계가 필수가 아님을 명시할 수 있음 @Service public cl..
스프링에서 어노테이션을 활용한 빈 등록 방법은 크게 2가지가 존재한다 @Configuration + @Bean @Component (@Controller, @Service, @Repository) 오늘은 첫 번째 방법으로 스프링이 어떻게 빈을 등록하고 싱글톤으로 관리하는지 알아본다. @Configuration + @Bean 스프링 컨테이너는 @Configuration이 붙어있는 클래스를 자동으로 빈으로 등록후 해당 클래스를 파싱해서 @Bean이 있는 메서드를 찾아 빈을 생성한다. // 빈으로 등록할 클래스 public class MyBean { public void sayHello() { System.out.println("hi~!"); } } @Configuration public class Confi..
스프링 빈과 의존관계 스프링 빈을 등록하는 2가지 방법 컴포넌트 스캔과 자동 의존관계 설정 우리가 만들었던 MemberController가 MemberService를 통해 가입하고, 데이터를 조회할 수 있어야하는데, 이러한 관계를 MemberController가 MemberService를 의존하는 관계라고한다. 먼저, 아래 코드와 같이 새롭게 객체를 생성해서 사용할 수 있다. @Controller public class MemberController { private final MemberService memberService = new MemberService(); } 그러나 이렇게 객체를 새로 생성한다면, 해당 컨트롤러(멤버 컨트롤러)말고 다른 여러 컨트롤러들이 해당 서비스를 가져다 쓸 수 있다. 고..
회원 관리 예제 - 백엔드 개발 비즈니스 요구사항 정리 데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않았으나 개발을 해야하는 상황(가상의 시나리오) 웹 애플리케이션 계층 구조 일반적으로 웹 애플리케이션 계층 구조는 컨트롤러, 서비스, 리포지토리, 도메인, DB로 구성된다. 컨트롤러: 웹 MVC의 컨트롤러 역할, API 개발 서비스: 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직을 구현한 클래스 (ex:회원의 가입 여부 확인 로직) 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 회원, 주문, 쿠폰 등 주로 데이터베이스에 저장하고 관리되는 비즈니스 도메인 객체 아직 데이터 저장소가 선정되지 않았으므로 인터페이스로 구현 클래스를 변경할 수..
웹 개발은 크게 아래 3가지로 나뉜다. 정적 컨텐츠 파일을 그대로 웹브라우저에 내려주는 것 스프링부트에서는 기본적으로 /static or /public or /resources or /META-INF/resources의 경로에 위치한다. css, js, ttf 등등등 바뀌지않는 리소스 파일들이 위치하는 곳이다. 아래의 문서에 더 자세한 내용이 있다. https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content Spring Boot Features Graceful shutdown is supported with all four ..
프로젝트 생성 사전 준비 Java 11 설치 IDE : IntelliJ 또는 Eclipse 설치. - 요즘은 IntelliJ를 많이 사용하고, 강의 내용에 따라가기 힘들 수 있으므로 나또한 IntelliJ 커뮤니티 버전으로 듣는다. 과거에는 Spring 프로젝트를 밑바닥부터 다 만들었지만 요즘은 Spring boot를 사용해 프로젝트를 생성한다. 아래의 링크는 Spring boot기반으로 Spring 프로젝트를 빌드해주는 스프링에서 운영하는 사이트다. https://start.spring.io/ Project 과거(레거시 프로젝트) - Maven : 정형화된 빌드 시스템, 플러그인으로 구동되어 build 진행 요즘 - Gradle : JVM 기반의 빌드 시스템, Task 기반으로 작업 수행. 캐시를 이용..