Spring

본 포스팅은 김영한님의 강의를 듣고 공부를 위해 포스팅되었습니다! 대부분의 스프링 어플리케이션은 웹 어플리케이션. but 웹이 아닌 어플리케이션도 개발 가능. 웹 애플리케이션은 보통 여러고객이 동시에 요청을 한다. 순수DI 컨테이너인 AppConfig는 요청할때마다 객체를 생성한다. -> 메모리 낭비가 심함. 이를 해결하기 위해서는 한개의 객체만 생성하고 공유하도록 설계하게한다. -> 싱글톤패턴 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 -> private생성자를 이용하여 외부에서 생성못하게 막음. public class SingletonService { private static final SingletonService instance = new SingletonSe..
본 포스팅은 김영한님의 강의를 듣고 재구성하였습니다. 스프링 컨테이너의 생성 ApplicationContext -> 스프링 컨테이너 ApplicationContext -> Interface 스프링 컨테이너는 애노테이션기반의 자바클래스 뿐만 아니라 XML을 기반으로 만들 수 있다. 방금 예제에서 Appconfing 를 사용했던 방식이 전자에 해당. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); new Annotaion~ 은 ApplicationContext의 구현체이다. TMI) 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory , ApplicationContext 로 ..
도메인 협력관계 - 기획자도 같이 보는 회원클래스 다이어그램 -> 인터페이스, 구현체 정적 회원객체 다이어그램 -> 실제 동적시간에 확정된 객체들 동적임 실행해봐야 알 수 있음. 회원도메인 설계의 문제점 이 코드의 설계상 문제점은?? 다른 저장소로 변경할 때 OCP 원칙 준수하고있는지? DIP를 잘 지키고 있는지? 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음. 1. 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. 3. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 4. 주문 결과 반환: 주문 서비스는 할인 결과를 포함한..
Spring 의 탄생 배경 EJB 답답해서 만듦 표준 인터페이스 -> JPA JPA를 구현한 구현체들이 존재 Spring + JPA 둘다 중요 스프링 생태계 스프링 -> 여러가지 기술들의 모음 스프링 프레임워크 - 핵심 스프링부트 - 여러 기술을 사용할 수 있게 도와줌 스프링 데이터 - CRUD 편하게 도와줌 스프링 세션 - 세션기능을편안 시큐리티 - 보안 문서 - api 문서 스프링 배치 - 배치처리 특화 스프링 프레임워크 핵심기술 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹기술 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 트랜잭션, JDBC, ORM지원, XML지원 기술 통합 테스트 스프링 기반 테스트 지원 언어 코틀린, 그루비 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원 T..
AOP(Aspect Oriented Programming)가 필요한 상황 - 모든 메서드의 호출시간을 측정하고 싶다면?? 문제 시간을 측정하는 기능은 핵심 관심 사항이 아님. 시간을 측정하는 로직은 공통 관심 사항 시간 측정 로직과 핵심 비즈니스 로직이 섞여 유지보수가 어려움 시간을 측정하는 로직을 별도의 로직으로 만들기 어려움. 또 변경할 땐 또 모든로직 찾아가면서 변경해야함. -> 이런 문제를 해결하기 위한게 AOP 공통관심사항과 핵심관심사항을 분리 적용할 곳에 지정 해줌. @Aspect @Component public class TimeTraceAop { @Around("execution(* hello.hellospring..*(..))") public Object execute(Proceeding..
JPA는 기존 반복코드도 줄여주고, 기본적인 sql문도 jpa가 직접 만들어서 실행해준다. JPA사용시 sql과 데이터중심 설계에서 객체 중심의 설계로 패러다임 전환할 수 있다. JPA사용시 개발 생산성을 크게 높일 수 있다. JPA -> 자바진형의 표준인터페이스 구현해서 씀. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' build.gradle에 라이브러리 추가.(기본적으로 jdbc도 포함) spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=none properties에서 설정 추가 1. jpa가 날리는 sql을 볼 수있음. 2. 객체를 보고 테이블도 만듦. but table..
순수 JDBC -> DB시간에 해봤던 과제 같다.... JDBC template: spring이 중복을 제거해 JDBC의 (편리하게 가능) JPA라는 기술이 쿼리를 다 날려주는. 스프링 데이터 JPA (jpa를 편리하게 쓸수있게 감싼 기술) h2 database 사용 drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), primary key (id) ); 자바에서는 Long 이지만 DB에서느 bigint 타입. generated by default as identity -> 값세팅하지 않고 인서트하면 db가 자동으로 ID값을 채워줌. impl..
회원 등록 기능 package hello.hellospring.controller; public class MemberForm { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 1. 컨트롤러에 MemberForm을 만들 이유가 있나요? -> 사실 컨트롤러에 MemberForm 대신에 Member를 그대로 받아도 기술적인 문제는 없습니다. 다만 지금은 예제이지만, 실무에서는 컨트롤러에 넘어오는 정보가 Member가 필요한 데이터 이상으로 많은 데이터들이 들어옵니다. 예를 들어서 회원 정보 뿐만 아니라 약관 정보도 들어오고, 화면을 처리하기 위..
@Controller public class MemberController { } @controller 지정시 생기는일 1. spring 시작시 spring container라는 통이 생김. 2. @Controller 어노테이션이 있으면 MemberContoller 객체를 생성해서 넣어둠. 3. 스프링이 관리 -> 스프링컨테이너에서 스프링 빈이 관리된다 라고 표현. @Controller public class MemberController { private final MemberService memberService = new MemberService(); } 처음에 MemberController에서 MemberService 를 가져와서 써야됨. new를 통해 객체를 생성해서 사용할 수 있음. But 여..
비즈니스 요구사항 데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현(ex: 회원중복가입X) -> 비즈니스적인 용어사용하기 리포지토리: DB에 접근, 도메인 객체를 DB에 저장하고 관리 -> 기계적인, 개발적인용어선택 도메인: 비즈니스 도메인 객체 예)회원, 주문, 쿠폰 등등 주로 DB에 저장하고 관리됨 회원리포지토리 -> interface로 설계 why?? 아직 DB선정 X 우선 메모리 구현체로 만듦 향후에 구체적 기술이 선정되면 바꿀거임 따라서 인터페이스를 사용 Optional java8에들어간기능 Null이반환될때 처리방법 -> Optional을 많이사용 감싸사 반환하면 클라이..
1. 정적 컨텐츠 - 그냥 서버에서 파일을 그대로 웹브라우저에 주는것 2. MVC와 템플릿 엔진 - 서버에서 파일을 그대로 주는 것이 아닌 서버에서 프로그래밍을 해서 동적으로 바꿔서 주는것 - Controller model, view 로 나뉨 차이: 파일을 그대로 전달, 반면 서버에서 변형을 해서 html에 내려줌 3.API JSON 데이터 포맷 로 전달 서버끼리 통신할때 1. 정적 컨텐츠 - 스프링 부트는 자동 제공 - static 폴더에서 찾아 제공 - 웹에서 주소에 원하는 파일 넣으면 그대로 반환 해줌 -> 정적컨텐츠를 제공하는 기능 - localhost:8080/hello-static 요청 내장톰켓서버가 스프링에게 넘김 - spring 은 먼저 controller쪽에 hello-static 있는지..
start.spring.io 스프링 프로젝트 생성 Maven 보다 Gradle Project를 많이씀 Dependencies-> 어떤 라이브러리를 쓸지 Spring Web, Thymeleaf src-> main, test 폴더로 나눔. main 밑에 java , resource build.gradle-> 자동설정 git.ignore -> git 관리 의존이 필요한 라이브러리는 싹다 가져옴 예를들어 톰캣서버를 설치해서 설정해줘야 했는데 내장 되어 있음. log로 찍어야됨. print로 X 스프링 부트 라이브러리 spring-boot-starter-web spring-boot-starter-tomcat:톰캣(웹서버) spring_webmvc:스프링 웹 MVC spring-boot-starter-thymele..
LTSGOD
'Spring' 카테고리의 글 목록 (2 Page)