2021-05-24-TIL
2021-05-24-TIL
Insert query using Spring JDBC Template
JdbcTemplate은 JDBC의 반복 코드(커넥션 획득, PreparedStatement 생성, 자원 반납, SQLException을 Spring의 DataAccessException으로 변환)를 대신 처리한다. INSERT는 update() 메서드로 실행하고, 반환값은 영향받은 행 수다. DB가 생성한 키(auto increment ID)가 필요하면 KeyHolder를 넘기거나 SimpleJdbcInsert의 executeAndReturnKey()를 쓴다.
1
jdbcTemplate.update("INSERT INTO card (title, contents) VALUES (?, ?)", title, contents);
https://www.baeldung.com/spring-jdbc-jdbctemplate
Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver")는 이름으로 클래스를 로딩하고 초기화한다. JDBC 드라이버 클래스는 static 초기화 블록에서 자신을 DriverManager에 등록하므로, 예전에는 이 한 줄로 드라이버를 등록했다. DriverManager Javadoc에 따르면 JDBC 4.0부터는 클래스패스의 드라이버를 서비스 제공자 메커니즘으로 자동 로딩하므로, 이 호출이 더는 필요하지 않다. 링크된 글은 이 메서드를 리플렉션의 출발점(이름으로 Class 객체 얻기)으로 설명한다.
https://jongminlee0.github.io/2019/06/29/reflection/
Spring JDBC Template
조회는 query()와 queryForObject()를 쓰고, 결과 행을 객체로 바꾸는 RowMapper를 함께 넘긴다. queryForObject()는 결과가 정확히 한 행이 아니면 예외를 던지므로(없으면 EmptyResultDataAccessException), 결과가 없을 수 있는 조회는 query()로 리스트를 받아 처리하는 편이 안전하다. ? 대신 이름으로 파라미터를 바인딩하려면 NamedParameterJdbcTemplate을 쓴다.
- https://www.baeldung.com/spring-jdbc-jdbctemplate
- https://www.javatpoint.com/spring-JdbcTemplate-tutorial
UPDATE query in Spring JDBC Template
UPDATE도 update()로 실행한다. 반환된 행 수가 0이면 대상 행이 없다는 뜻이므로, 존재하지 않는 ID를 수정하려는 요청을 이 값으로 걸러 낼 수 있다.
- https://www.tutorialspoint.com/springjdbc/springjdbc_update_query.htm
- https://www.netjstech.com/2016/11/insert-update-using-jdbctemplate-in-spring-framework.html
DELETE query in Spring JDBC Template
DELETE 역시 update("DELETE FROM card WHERE id = ?", id)로 실행한다. 여러 행을 한 번에 처리할 때는 batchUpdate()로 묶어 보내 네트워크 왕복을 줄인다.
- https://examples.javacodegeeks.com/enterprise-java/spring/jdbc/delete-records-in-database-with-jdbctemplate/
Spring Data JDBC
Spring Data JDBC는 JdbcTemplate 위에서 리포지토리 인터페이스(CrudRepository)만 선언하면 기본 CRUD를 만들어 준다. JPA와 달리 지연 로딩, 캐시, 변경 감지가 없어서 save()를 호출할 때만 SQL이 실행된다.
- https://brunch.co.kr/@springboot/105
Spring @RequestParam
@RequestParam은 쿼리 스트링이나 폼 데이터의 파라미터를 메서드 인자로 바인딩한다. 기본적으로 필수라서 값이 없으면 400 오류가 나고, required = false나 defaultValue를 지정하면 선택 파라미터가 된다. defaultValue를 주면 required는 자동으로 false가 된다.
- https://www.baeldung.com/spring-request-param
Entity to DTO
엔티티를 그대로 응답하지 않고 DTO로 바꾸는 이유는 API 스펙과 도메인 모델을 분리하고, 노출하면 안 되는 필드와 순환 참조를 막기 위해서다. 변환은 DTO의 정적 팩토리 메서드나 생성자로 직접 작성하거나, ModelMapper 같은 매핑 라이브러리로 자동화한다. 라이브러리는 코드를 줄여 주지만 필드 이름이 바뀌면 컴파일 오류 없이 값이 빠질 수 있다.
- https://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application
- https://dbbymoon.tistory.com/4
- https://www.amitph.com/spring-entity-to-dto/
Testing Web
Spring 가이드 “Testing the Web Layer”는 테스트 범위를 단계적으로 좁혀 간다. @SpringBootTest로 전체 컨텍스트를 띄워 실제 서버에 요청하는 테스트, @AutoConfigureMockMvc로 서버 없이 MockMvc로 요청하는 테스트, 그리고 @WebMvcTest로 웹 계층만 띄우고 서비스는 @MockBean으로 대체하는 테스트다. 범위가 좁을수록 빠르고, 넓을수록 실제 동작에 가깝다.
- https://spring.io/guides/gs/testing-web/
- https://reflectoring.io/spring-boot-web-controller-test/
Login in Spring Boot
Spring Boot 2.1과 Spring Security로 로그인을 붙이는 여러 방법을 단계별로 보여 주는 튜토리얼이다. HTTP 기본 인증에서 시작해, Spring Security가 자동 생성하는 로그인 폼, 직접 만든 로그인 폼, 마지막으로 OAuth 2.0을 이용한 SSO(Okta, GitHub 로그인) 순서로 진행한다. HTTP 기본 인증은 프로토콜에 내장된 단순한 방식이지만 보안상 강하지 않다는 점도 짚는다.
- https://dzone.com/articles/add-login-to-your-spring-boot-app-in-10-mins
취업관련
기업 평가 사이트
- 크레딧잡 : 입사자, 퇴사자 수 등 구체적인 수치가 나와서 기업의 미래에 대해서도 분석해볼 수 있음.
- 블라인드 : 실무자만 가입할 수 있지만 그만큼 신뢰성있는 정보를 제공.
- 잡플래닛 : 면접, 리뷰 등 기본적인 정보를 많은 양으로 제공받을 수 있음.
개발자 채용 사이트
- 원티드 : 개발자 친화적인 구직플랫폼. 한 번씩 코딩 콘테스트(주로 구름 플랫폼 사용)를 여는데, 거기에서 우수한 성적을 거두면 채용에 매우 유리. 상시채용 및 수시채용이 자주 올라와서 눈여겨볼만함.
- 프로그래머스 : 개발자만을 위한 구인구직 플랫폼. 상반기, 하반기에 프론트엔드/백엔드 데브매칭, 그리고 인턴십 매칭 프로그램이 각각 열린다. 그 외에도 개발자 채용 탭에서 수시채용 및 상시채용 정보가 많으므로, 눈여겨볼만 함.
댓글
아직 댓글이 없습니다