Spring

Spring/스프링 핵심 원리 - 기본편

[Spring] 스프링 핵심 원리 - 기본편: 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

스프링 핵심원리 - 기본편을 정리한 글입니다. 저번에 작성했던 회원, 주문 할인 정책을 객체 지향 원리를 적용해보자. 이번에는 새로운 할인 정책을 추가해야 한다. 막상 할인을 적용해보면 DIP, OCP를 위반하는 문제가 생긴다. 이번 장에서 이런 DIP, OCP를 해결하는 과정과 스프링이 왜 필요한지 이해해보자. 마지막에 순수한 자바 코드를 스프링 컨테이너에서 동작하도록 바꿔보자. 새로운 할인 정책 개발 이전에 구현했던 회원 주문 할인 정책에서 중요한 부분이 있었다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 ..

Spring/스프링 핵심 원리 - 기본편

[Spring] 스프링 핵심 원리 - 기본편: 스프링 핵심 원리 이해1 - 예제 만들기

스프링 핵심원리 - 기본편을 정리한 글입니다. 지금부터 역할과 구현을 나눠서 개발을 진행할 것이다. 주의할 점은 스프링의 도움 없이 순수한 자바만 사용하여 개발할 것이다. 실제 요구사항이 변경됐을 때 다형성, OCP, DIP가 잘 지켜지면서 유연하게 대처가 되는지 알아볼 것이다. 시작하기 전에 스프링 없이 순수한 자바로 진행할 것이지만, 초기에 편리함을 위해 스프링 부트를 사용하여 세팅한다. 나중에 스프링을 적용할 때 라이브러리들이 필요하기 때문에 일단 스프링 부트를 사용하여 초기 세팅을 한다. 프로젝트 생성 준비물 Java 11 설치 IDE: 인텔리제이 https://start.spring.io 에서 스프링 프로젝트 생성 Dependencies는 아무것도 선택하지 않으면 스프링 부트가 스프링 핵심 라이..

Spring/스프링 핵심 원리 - 기본편

[Spring] 스프링 핵심 원리 - 기본편: 객체 지향 설계와 스프링

스프링 핵심원리 - 기본편을 정리한 글입니다. 스프링의 탄생 2000년 초반에 자바 표준 기술 중 EJB(Enterprise Java Beans)라는 기술이 있었다. 지금으로 치면 스프링, JPA 등을 합쳐놓은 기술이다. EJB가 가지는 장점들, 컨테이너, 트랜잭션 관리, 분산 기술, ORM이 있었기 때문에 비싼 값에도 많이 사용되었다. 많이 사용되는데도 불구하고 여러 단점이 있었다. EJB는 배우기 매우 어렵고, 복잡하고 느리다. 즉, 개발자들이 사용하기 어려웠다. EJB에 의존하여 코드를 짜야하는 불편함을 해결하기 위해 개발자들이 순수한 자바(POJO, Plan Old Java Object)로 개발하고자 하였다. 이런 와중에 개빈 킹과 로드 존슨이라는 두 명의 개발자가 오픈소스를 만들기 시작한다. 스..

Spring/스프링 입문

[Spring] AOP가 필요한 상황과 AOP 적용

AOP가 필요한 상황 모든 메서드의 호출 시간을 측정하고 싶을 때 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶을 때 단순 측정 public Long join(Member member) { // 같은 이름이 있는 중복 회원X long start = System.currentTimeMillis(); try{ validateDuplicateMember(member); // 중복 회원 검증 memberRepository.save(member); return member.getId(); } finally { long finish = System.currentTimeMillis(); long timeMs = ..

Spring/스프링 입문

[Spring] 스프링 DB 접근 기술

H2 데이터베이스 웹 콘솔로 접근 https://www.h2database.com/html/download-archive.html h2 데이터베이스 설치 bin 폴더에서 h2.bat파일 실행 (window) 처음에 데이터베이스 파일을 만들어야 한다. 연결 화면 -> test.mv.db 파일이 생성된다. JDBC URL을 jdbc:h2:~/test처럼 접근하면 애플리케이션과 웹 콘솔이 동시에 접근하면 오류가 발생할 수 있다. JDBC URL을 jdbc:h2:tcp://localhost/~/test와 같이 바꿔서 연결한다. 파일에 직접 접근하는 것이 아니라 소켓을 통해서 접근하면 여러 군데서 접근할 수 있다. 테이블 생성 generated by default as identity -> 값을 정하지 않고 in..

Spring/스프링 입문

[Spring] 회원 관리 기능(등록, 조회) - 웹 MVC 개발

홈 화면 추가 package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } controller 패키지에 HomeController 생성 Hello Spring 회원 기능 회원 가입 회원 목록 resources/templates 에 home.html 작성 동작 원리 localhost:8080 호출 -> HomeController에..

Spring/스프링 입문

[Spring] 자바 코드로 직접 스프링 빈 등록하기

직접 스프링 빈 등록하기 @Service, @Repository를 지우고 실행 -> 에러 발생 service 패키지에 SpringConfig 클래스 생성 package hello.hellospring.service; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfig { @Bean p..

Spring/스프링 입문

[Spring] 컴포넌트 스캔과 자동 의존관계 설정

회원 서비스가 실행되기 위해서 MemberController가 MemberService를 통해서 회원 가입하고 MemberService를 통해서 데이터(MemberRepository)를 조회할 수 있어야 한다. 이렇게 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다. 회원 서비스를 제대로 동작시키기 위해서 Controller와 Service에 대한 의존성을 주입해야 한다. 의존성 주입(Dependecy Injection, DI) 의존성 주입(DI)란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하는 것이다. DI의 장점은 유연성을 확보하고 결합도를 낮출 수 있게 해 준다. ..

Spring/스프링 입문

[Spring] 회원 관리 예제

비즈니스 요구사항 정리 회원 도메인과 리포지토리 만들기 회원 리포지토리 테스트 케이스 작성 회원 서비스 개발 회원 서비스 테스트 비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 데이터 저장소가 선정되지 않음. 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체 ex) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 클래스 의존관계 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민 중인 상황으로 가정..

Spring/스프링 입문

[Spring] 스프링 웹 개발 기초

스프링 웹을 개발하는 방법은 여러 가지가 있다. 정적 콘텐츠 - 파일을 웹 브라우저에 그대로 내려주는 것. MVC와 템플릿 엔진 - 가장 많이 개발하는 방식 - html을 그대로 내리는 것이 아니라 서버에서 동적으로 바꿔서 내리는 것. - Model, View, Controller API - 데이터 포맷으로 client에게 전달하는 방식 정적 콘텐츠 (Static Content) 스프링 부트는 정적 콘텐츠를 기본으로 제공한다. 정적 콘텐츠 생성하기 정적 컨텐츠 입니다. resource/static 에 hello-static.html 파일을 생성한다. 주소창에 localhost:8080/hello-static.html 입력면 위와 같은 화면을 볼 수 있다. 동작 방식 웹 브라우저에서 localhost:80..

Spring/스프링 입문

[Spring] 프로젝트 환경 설정

프로젝트 생성 요즘 spring은 spring boot를 기반으로 프로젝트를 만든다. spring boot를 기반으로 프로젝트를 만들어 주는 https://start.spring.io에서 프로젝트를 생성한다. Project 필요한 라이브러리를 당겨와서 빌드하는 liftcycle까지 관리해주는 tool이다. 과거에는 Maven을 많이 썼지만, 요즘엔 Gradle을 많이 쓴다. Spring Boot Spring Boot 버전을 선택해야 하는데 SNAPSHOT은 만들고 있는 버전이고, M1은 정식 릴리즈된 버전이 아니다. Project Metadata project의 정보를 담는 곳이다. Group : 회사명 등 Artifact : 빌드된 결과물, 프로젝트명 Dependencies spring boot를 기반..

또 고민 중
'Spring' 카테고리의 글 목록