Spring/스프링입문

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/스프링입문' 카테고리의 글 목록