목록JAVA/스프링 입문 (22)
It won't hurt to try

스프링 입문 수업에서 밑의 순서대로 구현을 진행하고 있다. memoryMemberRepository -> Jdbc -> JdbcTemplate -> JPA JPA를 마지막에 다룬 이유는 뭘까? JdbcTemplate를 사용했을때 Jdbc를 편리하게 사용할 수 있어서 좋았지만, sql을 구현해야 하기 때문에 귀찮은 점이 있었다. sql도 인터페이스에서 자동으로 생성해준다면 생산성이 더 오를텐데 이 점이 아쉬웠다. JPA는 sql을 자동으로 생성해주고 디비에 접근해서 값을 들고와준다. 아주아주 편하다. JPA vs Mybatis ? 처음 사이드 프로젝트를 진행했을때 Mybatis를 사용했었다. 불편하지는 않았지만, Mybatis는 결국 sql을 작성해야 했다. xml형식으로,, 전세계적으로 JPA는 Myba..
jdbcTemplate를 설명하려면 이전에 익혔던 순수jdbc와의 비교가 필요하다. save @Override public Member save(Member member) { SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id"); Map parameters = new HashMap(); parameters.put("name", member.getName()); Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); member.se..

이제부터 스프링 통합 테스트를 진행한다. jdbc커넥션 정보는 스프링이 갖고 있기때문에 순수 자바 테스트는 불가능한 상태이다. 그래서 스프링 통합으로 테스트를 진행하려고 한다. 소스코드 설명 위의 두 소스를 비교한다. 두 소스는 디비와 연결하기 전과 후의 테스트소스의 모습이다. 어노테이션 @SpringBootTest 테스트클래스에 이 어노테이션을 사용하면, 스프링 부트 컨테이너에 있는 디비커넥션 정보등을 사용할수 있게된다. @Transactional 이 어노테이션에 테스트클래스에 있으면, 테스트마다 트랙잭션을 열고 끝나면 롤백한다. 디비에 데이터가 남지 않아서 유용하다. 테스트 테스트 전에 디비안의 데이터를 클리어시킨다.

application.properties에서 spring 데이터소스의 설정을 한다. spring.datasource.url : jdbc URL spring.datasource.driver-class-name : 접속하고자 하는 DB의 드라이버 build.gradle에 아래 내용을 추가해준다. jdbc, h2관련 라이브러리를 추가한다. implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' Datasource를 JdbcMemberRepository에 주입하려고한다. 위에서 application.properties를 통해서 spring.datasource에 대한 정보를 spring에게 주..

지금까지는 메모리를 통해서 회원정보를 저장했었다. 하지만 데이터의 휘발성때문에 메모리를 통한 저장이 아닌, 데이터베이스를 통해서 데이터를 관리하기로 했다. 그래서 일단 H2데이터베이스를 사용해서 관리해보려고 한다. 이번시간은 H2데이터베이스를 설치하는 시간이다. http://www.h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console app..

thymeleaf를 사용해서 회원의 아이디와 이름을 출력하는 화면이다. # 이름 member.getId() 대신에 member.id라고 적어도 된다. 자바의 property방식인 getter/setter이기 때문에 id에 접근할때 getId()에 접근하게 된다. th:each를 사용하면 loop문을 사용할수 있게 된다. 자세한 사용방법은 밑의 자료처럼 thymeleaf iteration관련한 여러 자료들을 참조하면 좋다. https://www.baeldung.com/thymeleaf-iteration 단축키 Shift + option + ↑/↓: 행 이동 Cmd + e : 최근에 본 리소스들 확인

홈컨트롤러를 추가해준다. 홈화면이기 때문에 맵핑 url은 /로 해준다. 리턴은 home.html이다. 코드해설 MemberController @GetMapping("/members/new") public String createForm() { return "members/createMemberForm"; } @PostMapping("/members/new") public String create(MemberForm form) { Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; } MemberForm members/createMemberForm.html me..

component사용 없이 스프링 빈을 등록하는 방법이 있다. @Configuration 스프링에서 제공하는 config어노테이션이다. 이 안에서 @Bean 이 선언된 함수의 리턴을 통해 스프링 빈에 등록되게 된다. DI(Dependency injection) 클래스를 다른 클래스에 의존하게 만드는 것. 3가지 방법이 있다. final injection setter injection 생성자 injection 단축키 Cmd + p : 어떤 함수의 파라미터에 어떠한 값이 들어가야할지 모를때, 자료형을 알려준다.