본문 바로가기

Backend/Spring

(25)
[Spring/SpringBoot] 예외처리 Controller 정의하기 안녕하세요. 이번 포스팅에서는 restful service에서 발생하는 예외처리를 하는 방법에 대해 알아보려 합니다. 우선 사용할 샘플 코드는 다음과 같습니다. @GetMapping("/Account/{id}") public Account retrieveUser(@PathVariable int id) { Optional findAccount = accountRepository.findById(id); if(findAccount.isEmpty()) return null; return findAccount.get(); } 저의 Account Controller에서 /Account/{id}라는 주소로 GetMapping을 받겠습니다. 내부적으로는 JpaRepository를 구현한 accountRepositor..
[Spring] 전통적인 Spring의 Transaction과 JPA의 OSIV 전략 오늘은 Spring의 전통적인 Transaction 처리의 과정과 JPA의 OSIV전략에 대해 이해해보는 포스팅을 진행해보겠습니다. 스프링을 사용해보신 분이라면 @Transactional이라는 어노테이션을 많이 보셨을 겁니다. Transaction이란 어떠한 일을 처리하는 단위를 말합니다. 가령 저희가 "6번 게시글을 수정한다"라는 로직을 수행하려면 1. "6번 게시글을 가져온다" 2. "6번 게시글을 수정한다" 3. "수정된 6번 게시글을 DB에 commit 한다" 이렇게 하나의 로직의 처리 묶음을 하나의 Transaction이라 합니다. 그러면 Spring에서는 Transaction 처리를 어떤 순서로 진행할까요? 전통적인 Transaction 처리부터 알아보겠습니다. 저희가 Spring Applic..
[SpringBoot] PasswordEncoder 사용하기 안녕하세요. 이번 포스팅에서는 Password Encoder를 활용하여 Database에 raw값이 아닌 Hashing이 완료된 비밀번호 값을 저장하는 방법에 대해 알아보겠습니다. 기본적으로 DB에 비밀번호를 바로 저장하게 되면 굉장히 위험합니다. 물론 현재 제공 중인 서비스가 개인정보를 많이 포함하고 있지 않다고 하더라도, 보통 사람들은 여러 사이트의 비밀번호를 동시에 사용하기 때문에 굉장히 위험한 상황이 발생됩니다. https://www.boannews.com/media/view.asp?idx=78058&page=1&kind=1 페이스북, 내부 서버에 사용자 비밀번호를 평문으로 저장해왔다 페이스북이 수천만 개가 넘는 사용자 비밀번호를 평문으로 보관해왔던 사실을 인정했습니다. 페이스북 라이트, 공식 페..
[SpringBoot] 블로그 프로젝트 #3 AccountController, Create, Read 코드 작성하기 안녕하세요. 이번 포스팅은 저번 포스팅에 이어 본격적으로 Account Controller에 대해 설계를 시작해보도록 하겠습니다. 기본적으로 Rest API 설계를 다음의 원칙으로 진행하겠습니다. 1. Controller는 url 매핑 이외의 비즈니스 로직에 대해 알면 안 된다. 2. 모든 비즈니스 로직은 Service에서 처리한다. 3. Service에서 Repository와 연결되는 코드는 모두 private접근자를 사용하여 외부에서 접근이 불가능하게 설계한다. 4. RequestDto와 ResponseDto를 설계하여 Entity를 전달받거나 Entity를 반환하지 않는다. 이 정도의 큰 틀을 잡고 시작하겠습니다. 우선 User package에 Dto package, UserService, User..
[Spring/JPA] 영속성 컨텍스트 이해하기 안녕하세요. 이번 포스팅에서는 Spring Data JPA의 영속성 컨텍스트에 대해 이해하는 시간을 가져보도록 하겠습니다. 영속성 컨텍스트란? 영속성(persistency)이란 데이터를 영구적으로 저장하는 것을 의미합니다. 따라서 영속성 컨텍스트란 직역하자면 데이터를 영구적으로 저장하는 환경 정도로 해석될 수 있습니다. 기본적으로 JPA는 객체지향 언어인 JAVA와 Database 사이의 패러다임 불일치를 해결하기 위해서 도입된 규약입니다. 해당 내용을 기억하면서 본 포스팅을 이해하시면 좋을 것 같습니다. 만약에 저희가 Spring framework를 사용하여 웹 개발을 진행하고 있다고 가정해보겠습니다. 저희는 database에서 특정 id값을 갖는 데이터를 수정해달라는 요청을 받으면, database에..
[SpringBoot] 블로그 프로젝트 #2 JPA 설정 및 Entity 생성 저번 포스팅에 https://chanho0912.tistory.com/23 [SpringBoot] 블로그 프로젝트 #1 JSP 설정 본 포스팅은 https://chanho0912.tistory.com/19?category=866707 [SpringBoot] 블로그 프로젝트 #0 Github 연동하기 본 포스팅은 https://chanho0912.tistory.com/18 [SpringBoot] SpringBoot와 Mysql 연동 기본.. chanho0912.tistory.com JSP 설정을 마쳤습니다. 이번에는 JPA 기본 설정 및 Entity class를 한번 작성해볼게요! 우선 이번 포스팅에 필요한 JPA dependency를 추가해주겠습니다. build.gradle buildscript{ ext..
[SpringBoot] 블로그 프로젝트 #1 JSP 설정 본 포스팅은 https://chanho0912.tistory.com/19?category=866707 [SpringBoot] 블로그 프로젝트 #0 Github 연동하기 본 포스팅은 https://chanho0912.tistory.com/18 [SpringBoot] SpringBoot와 Mysql 연동 기본적인 세팅을 완료했으면 Mysql연동을 진행해 볼게요. https://chanho0912.tistory.com/4 [Spring/SpringBoot] IntelliJ.. chanho0912.tistory.com 해당 포스팅이 완료되었다고 가정하고 진행하겠습니다. 이번에는 JSP 설정을 진행해보겠습니다. 우선 SpringBoot는 기본적으로 JSP를 권장하지 않습니다. 따라서 사용하시기에 앞서 몇 가지 설..
[Spring] Spring, Postman을 통해 Http통신 테스트 Http란? Http(Hyper Text Transfer Protocol)이란 HTML(웹 문서를 만들기 위한 언어)를 만드는데 쓰이는 통신 프로토콜입니다. 통신 프로토콜이란 서로 다른 두 컴퓨터나 통신 장비 사이에 메시지를 주고받는 양식 혹은 규칙의 체계로 이해할 수 있습니다. 즉 Client(user)와 Server간에 주고받는 메시지들을 어떠한 방식으로 요청하고 응답할지에 대한 약속입니다. Http 통신에는 기본적으로 다음 네가지 메소드를 많이 활용합니다. Get Post Put Delete 순서대로 Get method은 순수하게 데이터를 읽어오고 싶을 때 주로 사용됩니다. sql문의 SELECT문을 생각하시면 됩니다. Post method는 데이터를 입력하고 싶을 때 주로 사용됩니다. sql문의 ..