본문 바로가기

개발/백엔드14

spring boot - 공통 api 에러 처리 공통 Api를 만들었을 때 에러를 어떻게 처리해야 할지 어려운 경우가 있습니다. 이때 exceptionHandler로 해결을 할 수 있습니다.에러코드에러가 나는 경우에 대해서 오류를 내려줘야 합니다. 지금은 코드가 몇 개 없지만 나중을 위해 enum으로 만들어 두도록 하겠습니다. 로그인이 필요한 기능인데 로그인하지 않은 경우 내려주는 코드를 만들어 줍니다. httpStatusCode : 실제로 내려주는 에러 코드errorCode : 임의로 지정해 준 코드description : 에러 설명 쓰기 편하게 인터페이스도 만들어 줍니다. 그리고 인터페이스를 상속받습니다. 이제 result 부분을 꾸며주겠습니다. 인터페이스를 받고 code롸 description을 출력합니다. "오류"만 내려주면 조금 슬프니 저희가.. 2024. 11. 22.
spring boot - 공통 api 만들기 사람들이 항상 올바른 요청만 한다면 정말 행복한 세상이 될 것입니다. 하지만 인증 번호를 틀리거나 해킹을 하거나 로그아웃이 되었는데 그걸 모르고 권한이 없는 요청을 하기도 하죠. 그런 일이 발생했을 때도 제대로 된 응답을 내려주기 위해 Api 응답을 잘 꾸며주도록 하겠습니다.구조 만들기저는 다음과 같은 구조를 만들 것입니다.{ "result": { "result_code" : 200 "result_message" : "OK" "result_description" : "유저 등록 완료!" }, "body": { ~~~ }} body는 응답에 따라 달라질 수 있습니다. 우선 result부분부터 만듭니다. 그리고 Api 클래스를 만듭니다. body는 바뀔 수 있기 때문에 generic으로 만들어 줍니다.. 2024. 11. 15.
spring boot - 비동기 작업 처리 서버를 만들다 보면 비동기로 처리해야 하는 일들이 있습니다. 이 경우 Async를 이용해서 비동기로 작업을 처리할 수 있습니다.동기와 비동기동기와 비동기의 차이점을 간단히 짚고 넘어가겠습니다. 보통 프로그램은 위에서부터 아래로 순서대로 명령을 처리합니다. 이것을 동기(syncronous)적으로 처리한다고 합니다. 이 경우 작업이 오래 걸리는 일이 있으면 그 일을 처리할 때 까지 다음 일을 진행할 수 없습니다.서버에서 메일을 보낸다고 가정해 봅시다. 보통 메일을 보내면 메일을 수신하는 데 5초 정도의 시간이 걸립니다. 이것을 동기로 처리하면 서버가 작업을 완료하고 응답을 보내는 데 5초 정도의 시간이 걸린다는 것입니다. 그럼 유저들은 5초 동안 서버가 멈춘 것 같은 느낌이 들 것입니다. 하지만 메일은 보통.. 2024. 11. 8.
spring boot - DTO 스프링으로 정보를 전달하다 보면 유저들에게 보여줘도 되는 정보가 있고 안되는 정보가 있습니다.예를 들어 현재 로그인을 한 상태인지, 로그인을 했다면 그 유저가 누구인지 알고 싶습니다. api를 호출해서 유저의 정보를 받아옵니다. 백엔드에서는 로그인을 했다면 해당 유저의 정보를 넘겨줍니다.그럼 다음과 같이 값이 내려옵니다. 유저의 정보를 알고 싶은 것인데 work나 streak같은 다른 정보들은 사실 필요가 없습니다. 그리고 비록 해시를 했다고는 해도 비밀번호가 내려오는 것은 문제가 있어 보입니다.이럴 때 필요한 정보만 DTO에 넣어서 내려주면 됩니다.DTODTO(Data Transfer Object) 클래스에 넘겨줄 정보를 넣어둡니다. converter 클래스를 만들어 줍니다. 이 클래스에서 entity.. 2024. 10. 15.
spring boot - intercepter 백엔드를 개발하다 보면 특정 유저(관리자, 로그인 한 유저 등)만 사용할 수 있는 api가 있습니다.로그인 한 유저만 사용할 수 있는 controller를 만들어 보겠습니다. intercepter를 이용해 해당 유저만 통과시키도록 하겠습니다.intercepter저희는 intercepter를 만들어서 예외처리를 할 것입니다. 해당 기능을 해 줄 파일 하나를 만듭니다. 그리고 HandlerInterceptor를 상속하고 preHandle를 사용해 controller진입 전에 체크를 해 줄 것입니다. HttpMethod.OPTIONS.matches(request.getMethod()) : 서버와 통신할 때 예비 요청을 보내 잘 통신되는지 확인한 다음 본 요청을 보냅니다. 이때, 예비 요청은 OPTIONS로 보.. 2024. 9. 28.
spring boot - 1 : N 관계 만들기 데이터베이스에서는 두 엔티티가 1:N관계를 이룰 수 있습니다. spring boot에서 이것을 만들어 봅시다.엔티티 만들기todo list를 만든다 가정하겠습니다. 유저는 여러개의 일을 가질 수 있습니다.우선 user와 work db를 간단히 만듭니다. 각 work가 어떤 user와 연결되었는지 알기 위해서 work에 user_id를 넣어줍니다. 이것이 foreign key가 됩니다. spring boot에서는 다음과 같이 만들어 줍니다. user에 @OneToMany 어노테이션을 걸어줍니다.@JoinColumn을 사용해 user_id와 연결된다고 알려줍니다.user에서 user_id를 만들어 주었으니 work에는 따로 만들지 않습니다.데이터user 데이터를 하나 만들어 주겠습니다.  그리고 work 데.. 2024. 9. 25.