스프링/스프링 입문

AOP AOP가필요한상황 모든메소드의호출시간을측정하고싶다면? 공통관심사항(cross-cutting concern) vs 핵심관심사항(core concern) 회원가입시간, 회원조회시간을측정하고싶다면? 각 메소드들을 모두 수정한다. try{} 끝나면 finally {} 수행 문제 회원가입, 회원조회에시간을측정하는기능은핵심관심사항이아니다. 시간을측정하는로직은공통관심사항이다. 시간을측정하는로직과핵심비즈니스의로직이섞여서유지보수가어렵다. 시간을측정하는로직을별도의공통로직으로만들기매우어렵다. 시간을측정하는로직을변경할때모든로직을찾아가면서변경해야한다. -> AOP 로 해결! 공통 관심 사항과 핵심 관심 사항을 분리한다! 시간 측정 로직을 한군데에 모아 놓고, 원하는 곳에 적용한다. AOP는 클래스 위에 @Aspect 붙..
JPA JPA ORM : Object Relational databse Mapping 객체와 relational 데이터베이스 테이블을 매핑한다 SQL 쿼리도 JPA가 자동으로 형성해준다 build.gradle에서 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' 추가해주고, applocation.properties에서 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=none jpa가 날리는 쿼리 확인 가능 jpa는 자동으로 테이블 생성해주나, 이번 실습에선 이미 member테이블이 만들어져있는 상태이므로 자동으로 테이블 생..
H2 데이터베이스 설치, 실행 데이터베이스파일생성방법 jdbc:h2:~/test (최초한번) ~/test.mv.db 파일생성확인 이후부터는jdbc:h2:tcp://localhost/~/test 이렇게접속 테이블생성하기 테이블관리를위해프로젝트루트에sql/ddl.sql 파일을생성 drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), primary key (id) ); 순수 JDBC build.gradle 파일에 jdbc, h2 데이터베이스관련라이브러리추가 implementation 'org.springframework.boot:spring-boo..
@Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } localhost:8080으로 들어오면 이게 호출됨. -> home.html이 호출됨 엇 근데 우리 index.html 만들지 않았나? welcomePage 라며? localhost8080/ 으로 들어오면 컨트롤러 먼저 뒤지는데 그때 "/" 만나게 된 것!! 바로 그 컨트롤러 호출하고 끝! 회원 웹 기능 - 등록 아까 home.html에서 회원 가입 링크를 /members/new로 설정했잖아 그럼 그 url 매핑해줘야지! @GetMapping("/members/new") public String createForm(){ retu..
MemberController가 MemberService 통해서 회원가입하고 데이터를 조회할 수 있어야, MemberController가 MemberService를 의존한다고 표현. 스프링이 처음 뜰때, 스프링 컨테이너라는 통이 생긴다. 이렇게만 만들어놔도 @Controller 어노테이션이 있으면 MemberController라는 객체를 생성해서 스프링에 넣어두고 스프링 컨테이너가 관리를 한다. private final MemberService memberService = new MemberService(); 이렇게 MemberService 객체를 새로 생성해주면 후에 다른 주문서비스 같은 데서도 MemberService를 생성할 수도 있음. 객체 하나만 생성해서 공유해서 쓰는게 좋기 때문에 위 같은 방..
비즈니스 요구사항 정리 서비스 : 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직이 동작하도록 구현한 객체 ex) 회원은 중복 가입이 안된다. 도메인 : 비즈니스 도메인 객체 회원을 저장하는건 리포지토리로 설계 : 아직 데이터 저장소가 설정되지 않아서 구체적인 기술이 선정이 되면 바꿔 끼울거임 - 인터페이스로 설계! id : 시스템에서 설정해주는 아이디이다. null이 반환 될 가능성이 있으면 optional로 감싸준다. 회원 리포지토리 테스크 케이스 작성 테스트할 메소드를 작성하고 위에 @Test를 써준후 실행 가능. control + shift + 엔터 -> 다음 줄로 넘어감 반환타입이 optional, optional에서 값을 꺼낼땐 get()으로 꺼낼 수 있다. org.junit.jupiter...
정적 컨텐츠 : 파일을 그대로 웹브라우저에 내려주는 것 원하는 파일을 그대로 내려주면 됨. 다만, 따로 파일에 프로그래밍 할 수 없음. http://localhost:8080/hello-static.html 가 들어오면 톰캣은 hello-static.html이 왔다고 스프링으로 넘기고 스프링은 컨트롤러에서 hello-static이 있는지 확인. -> 우선 순위가 Controller 없으면 resources : static/hello-static.html을 찾아서 반환해줌 MVC와 템플릿 엔진 :서버에서 프로그래밍해서 html을 동적으로 바꿔서 내림 !템플릿엔진을 Model View Controller 방식으로 쪼개서 View를 템플릿엔진으로 html을 프로그래밍 한걸로 랜더링해서 클라이언트에게 html을..
Project : Gradle/Maven 이란 ? 필요한 라이브러리를 땡겨오고 라이브러리 라이프 사이클을 관리해주는 툴 요즘은 Gradle 을 많이 사용한다. Group : 보통 기업명을 적는다 Artifact : 빌드되어 나올때의 결과물 - > 프로젝트 명 과 같은것 Dependencies : 어떤 라이브러리르 땡겨서 쓸거냐 구조 .idea : 인텔리제이가 사용하는 설정 파일 src : main / test test : test 코드가 들어간다. resources : 자바 파일을 제외한 나머지 build.gradle repositories { mavenCentral() } 라이브러리 다운 받는 곳 : maven central 에서 다운 받으라고 설정 간단하게 해둔 것 gitignore : 깃 관리 실행..
born-A
'스프링/스프링 입문' 카테고리의 글 목록