본문 바로가기

spring21

스프링 DB 2편 - 3 JPA JPA에서 가장 중요한 부분은 객체와 테이블을 매핑하는 것인데 애노테이션을 이용해서 객체와 테이블을 매핑할 수 있다. 간단한 내용이니 간략히 보면 @Data @Entity public class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "item_name", length = 10) private String itemName; private Integer price; private Integer quantity; public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.ite.. 2023. 1. 5.
스프링 DB 2편 - 2 MyBatis 1. 기본설정 build.gradle에 마이바티스 implementation을 해주면서 시작하자. //MyBatis 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' application.properties에는 # MyBatis mybatis.type-aliases-package=hello.itemservice.domain mybatis.configuration.map-underscore-to-camel-case=true logging.level.hello.itemservice.repository.mybatis=trace xml 작성시 리턴 타입에서 패키지 명을 뺄 수 있는 첫 번째 옵션 DB의 스테이.. 2023. 1. 3.
스프링 DB 2편 - 1 JdbcTemplate 기본기능 - JDBC를 사용할 때 템플릿 콜백 패턴을 사용해 직접 사용할 때 발생하는 반복 작업을 대신 처리해준다. - 동적 SQL을 해결하기 어렵다. private final JdbcTemplate template; public JdbcTemplateItemRepositoryV1(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } 관례적으로 JdbcTemplate은 dataSource가 필요한데 관례적으로 JdbcTemplate은 생성자 주입을 통해 생성한다. save() @Override public Item save(Item item) { String sql = "insert into item(it.. 2022. 12. 21.
스프링 DB 1편 - 3 5. 자바 예외 이해 https://github.com/effectiveJava-study/java-study/blob/main/week9/%EB%B0%B1%EA%B8%B0%EC%84%A0%20%EC%9E%90%EB%B0%94%20%EC%8A%A4%ED%84%B0%EB%94%94%209%EC%A3%BC%EC%B0%A8%20-%20%ED%98%B8%EC%A7%84.md GitHub - effectiveJava-study/java-study: 자바 기초 스터디 자바 기초 스터디. Contribute to effectiveJava-study/java-study development by creating an account on GitHub. github.com 상위 예외를 catch로 잡으면 하위 예외가 모두.. 2022. 12. 12.
스프링 DB 1편 - 2 3. 트랜잭션 이해 트랜잭션은 DB의 핵심 개념으로 여러개의 작업을 하나의 작업단위로 묶어 성공하면 Commit, 실패하면 Rollback 하는 과정을 말한다. 트랜잭션은 ACID라는 것이 있는데 원자성: 모두 성공하거나 실패 일관성: 일관성 있는 데이터베이스 상태 격리성: 동시에 실행되는 트랜잭션이 서로에게 영향을 미치지 않도록. (트랜잭션 격리수준을 선택할 수 있다) 지속성: 트랜잭션을 성공적으로 끝나면 항상 기록되어야 한다. 위의 네 가지 중 격리성을 완벽히 보장하려면 동시처리 성능을 많은 부분 포기해야 하므로 ANSI 표준은 격리 수준을 4단계로 정의한다. 1. READ UNCOMMITED(커밋되지 않은 읽기) 2. READ COMMITTED(커밋된 읽기) 3. REPEATABLE READ(반복 .. 2022. 11. 30.
스프링 DB 1편 - 1 1. JDBC의 이해 먼 과거의 DB 접근법은 두 가지 문제가 있었다. 1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함께 변경해야 한다. 2. 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 응답 받는 방법을 새로 학습해야 한다. 그래서 JDBC(Java Database Connectivity)(1997)가 등장했다. 대표적으로 3가지 기능을 표준 인터페이스로 제공한다. java.sql.Connecition java.sql.Statement java.sql.ResultSet 이렇게 만들어진 인터페이스를 각각의 벤더에서 구현해서 라이브러리로 제공한다. JDBC의 등장으로 공통적인 부분들에 대해선 편해졌지만 각각의 데이터베이스마다 S.. 2022. 11. 2.
mvc2 - 타입컨버터 쿼리 파라미터로 숫자를 보낸다고 생각하면 @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request){ String data = request.getParameter("data"); Integer integer = Integer.valueOf(data);//숫자 타입으로 변경 System.out.println("integer = " + integer); return "ok"; } 다음과 같이 서블릿을 이용한 타입 변환을 해야했지만 @RequestParam으로 받아준다면 @GetMapping("/hello-v2") public String helloV2(@RequestParam Integer data){ System.out.print.. 2022. 3. 2.
API 예외 처리 지난 mvc2 필터, 인터셉터 포스팅 말미에 서블릿 컨테이너까지 예외가 올라갔다가 다시 실행되는 추가 프로세스를 ExceptionResolver를 직접 구현함으로써 나름 간단히 해줬지만 이제 스프링이 제공하는 ExceptionResolver를 사용해보려고 한다. API 예외 처리 - 스프링이 제공하는 ExceptionResolver1 스프링 부트가 기본으로 제공하는 ExceptionResolver는 다음과 같다. 아래 세 개는 기본적으로 ExceptionResolver에 등록되어 있다. 1. ExceptionHandlerExceptionResolver @ExceptionHander를 처리한다. API 예외 처리는 대부분 이 기능으로 해결한다. 2. ResponseStatusExceptionResolver.. 2022. 3. 1.
mvc 1 - 스프링 MVC 스프링 MVC의 동작 원리에 대해 알아보자. FrontController Pattern으로 만든 수제 MVC와 실제 구현 되어 있는 MVC 구조는 동일하다. DispacherServlet 서블릿 등록 DispacherServlet도 부모 클래스에서 HttpServlet을 상속 받아서 사용하고 서블릿으로 동작한다. 1. 스프링 부트는 DispacherServlet을 서블릿으로 자동으로 등록하면서 모든 경로에 대해서 매핑한다. - 더 자세한 경로가 우선순위가 높기 때문에 기존에 등록한 서블릿도 함께 동작한다. 2. 서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출된다. 스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버.. 2022. 2. 24.
mvc2 - 필터, 인터셉터, 예외처리 서블릿 필터 로그인 되어 있는 사용자만 이용 가능한 URL이 있다고 생각해보자. 우리의 로그인 로직을 보면 @GetMapping public String items(Model model) { //로그인 여부 체크 List items = itemRepository.findAll(); model.addAttribute("items", items); return "items/items"; } @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model) { //로그인 여부 체크 Item item = itemRepository.findById(itemId); model.addAttribute("item", item); ret.. 2022. 2. 21.
mvc1- 서블릿, JSP, MVC 서블릿 서블릿 만으로 웹 애플리케이션을 만든다고 하면 HTML 폼을 자바 코드에 직접 넣어줘야 한다. @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {.. 2022. 2. 19.
HTTP 웹 기본지식-3 헤더 HTTP 헤더 용도 - HTTP 전송에 필요한 모든 부가정보 - 표준 헤더가 매우 많다. - 필요시 임의의 헤더 추가도 가능하다. 우선 과거에 쓰이던 HTTP 규약부터 알아보자 RFC2616(과거) 헤더 분류 - General 헤더: 메시지 전체에 적용되는 정보, 예)Connection: close - Request 헤더: 요청 정보, 예)User-Agent:Mozilla/5.0 - Response 헤더: 응답 정보, 예)Server: Apache - Entity 헤더: 엔티티 바디 정보, 예)Content-Type: text/html, Content-Length: 3423 HTTP BODY - 메시지 본문은 엔티티 본문을 전달하는데 사용 - 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터 - 엔티티.. 2022. 2. 17.