스프링/0. 입문, 전체방향 21

21강. AOP

Aspect Oriented Programming 측면 지향 프로그래밍 공통관심사항과 핵심관심사항 분리 뭔가 좀 함수마다 공통사항? 예를들어 모든 함수의 실행시간을 측정하고 싶다거나 그런거에 쓰는 듯. 어디까지나 보조역할 @Aspect //AOP 한다는 뜻. @Component //이거 해두면 @Bean으로 따로 등록 안해도 됨. public class TimeTraceAop { @Around("execution(* hello.hellospring..*(..))") //여기서 특정함수나 클래스 지정 가능. 이거는 hello.hellospring 안의 모두 public Object execute(ProceedingJoinPoint joinPoint) throws Throwable{ long start = ..

20강. 스프링 JPA

public interface SpringDataMemberRepository extends JpaRepository, MemberRepository { //JPQL select m from Member m where m.name = ? //저 함수 이름만 보고도 이렇게 짜줌. 매개변수, 반환타입, 이름만 보고 알아서 짜주는 듯 @Override Optional findByName(String name); } 스프링 JPA는 저렇게 인터페이스로 만들어 놓고, JpaRepository , 먼저만들어놓은MemberRepository{ findByName() } 인터페이스가 인터페이스 상속받을때는 extends 이렇게 JpaRepository를 상속받으면 알아서 구현해줌. JpaRepository는 Jpa라이..

19강. JPA

코드도 줄고, 이제 쿼리도 알아서 날림. 객체 중심으로 설계, 생각 가능. build.gradle에 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 얘 추가. implementation 'org.springframework.boot:spring-boot-starter-jdbc' 이것까지 포함이라 이거는 주석처리 해도 됨. 그 다음 application.properties spring.jpa.show-sql=true 이렇게 하면 jpa가 날리는 sql 볼 수 있음. spring.jpa.hibernate.ddl-auto=none jpa는 객체를 보고 테이블을 알아서 만들어 주는데, 우리는 이미 만들어 줬으니 저거 none 해두면 ..

18강. Jdbc 템플릿

실무에서 자주 씀 public class JdbcTemplateMemberRepository implements MemberRepository{ private JdbcTemplate jdbcTemplate; @Autowired public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } @Override public Member save(Member member) { SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); //간단 jdbc인서트. 인서트용 객체 jdbcInsert.withTableName("mem..

17강. spring 종합 테스트

@SpringBootTest // spring 환경까지 포함해서 테스트. @Transactional //이거는 @Test 함수 끝낸 후 날린 DB 쿼리를 롤백 class MemberServiceIntegrationTest { @Autowired MemberService memberService; //내가 테스트 하는 것 이므로 테스트는 편한 방법으로. @Autowired MemberRepository memberRepository; @Test void 회원가입() { //테스트때는 한국인 기업이면 한글로도 쓴다고 함. //given 주어진 상황 Member member = new Member(); member.setName("hello2"); //when 실행했을 때, 검증 Long saveId = me..

16강. 순수 JDBC

옛날에 쓰던 방식. build.gradle에 라이브러리를 추가 해야 함. implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' spring.datasource.username=sa implementation 'org.springframework.boot:spring-boot-starter-jdbc' 기본적으로 java에서 db 쓸려면 저게 필요함. runtimeOnly 'com.h2database:h2' h2 db를 쓴다. 저거 해주고 gradle 새로고침 해줘야 적용됨. 아마 저 정보보고 웹에서 다운로드? 인듯. spring.datasource.username=sa 이것도 써야 함..

15강. H2 DB

H2는 되게 가볍다고 한다. 일단 설치. (1.4.2.0) 연결 누르면 홈 디렉토리에 test.mv.db 라고 생김 그 뒤부터는 jdbc:h2:tcp://localhost/~/test 이걸로 접속해야 소켓 통해서 접속할 수 있음. 웹콘솔이랑 어플리케이션이랑 충돌날 수 있어서 이걸로 해야 함. 기본적인 member 테이블 생성 create table member ( id bigint generated by default as identity, name varchar(255), primary key(id) ); bigint : long generated by default as identity : null로 왔을 때 자동증가 인듯? 보통 이런거 어떤 커맨드 했는지 관리 해 두기도 함. 프로젝트 최상위에 sq..

14강. 간단한 웹 기능 -조회

@GetMapping("/members") public String list(Model model){ List members = memberService.findMembers(); model.addAttribute("members",members); //스프링에서 값은 Model을 통해 넘김. //model에 addAttribute로 키와 함께 값을 추가해주면, 그게 //자동으로 같이 넘어가는 듯. return "members/memberList"; // return으로 간 경로는 Mapping을 안 거치고 템플릿으로 찾는 듯? } # 이름 th는 thymeleap고, th:each는 thymeleap의 문법, 반복문인데, "member:${members}" members에서 member로 반복. 그러니..

13강. 간단 회원 웹 기능 -등록

@Controller public class HomeController { @GetMapping("/") //최상위에서 호출. localhost:8080 바로 가면 이거 호출 public String home(){ return "home"; } } @Controller 여러개 등록 가능. 파일도 다른거임. Hello 회원 기능 회원 가입 회원 목록 home은 그냥 링크만 있는 간단한. thymeleaf는 써놓긴 했는데 쓰진 않은듯? @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { t..

12장. 스프링 빈 등록. 자바 코드로 직접

먼저 기존 자동 연결은 한번 지워봄. public class MemberService { //Ctrl + Shift + T 테스트 바로 만들기. private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository){ this.memberRepository = memberRepository; } } public class MemoryMemberRepository implements MemberRepository{ } 컨트롤러는 그대로 둬야 함. 컨트롤러를 통해 최초로 연결되서 그러는 듯. @Controller public class MemberController { private final..