BackEnd

BackEnd/Spring

[SpringBoot] LogBack을 통한 로깅 설정

스프링부트 LogBack 🔥 문제 의식 로그 관리를 효율적으로 해야겠다는 생각이 든 건 라이온하트 서버를 개발하는 과정에서였다. 서버 로직을 개발할 땐 크게 문제될 상황이 없었지만, 클라이언트 측에서 API를 연결하는 과정에서 로그를 확인해야하는 경우가 많이 발생했는데 로그 파일 하나에 모든 로그를 전부 기록하여 관리하다보니 1. 원하는 정보를 찾기 굉장히 어려웠고 2. 정리되지 않은 로그는 이해하기 굉장히 어려웠다. 이러한 이유에 의해 로그를 체계적으로, 그리고 효율적으로 관리하기 위한 방법을 생각했고 서버팀원인 혁준이형의 의견으로 LogBack이라는 것을 알게 되어 학습 및 적용해보았다. 그리고 미래의 나를 위해 그 과정을 간단히 기록해보고자 한다. 📝 로깅을 하는 이유 로깅이란 시스템이 동작할 때 ..

BackEnd/Spring

[SpringBoot] 스프링부트 예외 발생 시, Slack으로 알림 보내기 (feat. Slack WebHooks)

스프링부트 with Slack슬랙 WebHooks 사용하여 에러 로깅해보기 서버를 개발하다보면 미처 처리하지 못한 알 수 없는 에러가 발생하는 경우가 종종 발생한다. 이런 경우 로컬 환경이라면 금방 디버깅이 가능하지만, 서버를 배포해놓은 상황이라면 서버의 로그 파일을 통해 발생한 예외를 확인하거나, 모니터링 기능을 추가하여 해결하는 등 다양한 방법을 통해 해결해야한다. 이와 마찬가지로 슬랙을 통해서도 문제에 대한 해결책을 던져볼 수 있다. 예외가 발생하면 슬랙의 채널에 에러 로그가 전달되어 환경에 구분없이 빠른 조치와 해결이 가능하다! 꼭 한번 사용해보는 것을 추천한다. 패키지 구조 플로우 🌊SlackTestController에서 요청을 받아 Exception을 발생시킨다.ControllerExcepti..

BackEnd/Spring

[JPA] @Modifying 어노테이션 - clearAutomatically, flushAutomatically란?

Spring JPA, @Modifying 어노테이션 clearAutomatically, flushAutomatically JPA를 사용하여 개발하다보면 DB의 데이터를 수정 또는 삭제하기 위해 벌크 연산을 사용해야하는 상황이 종종 발생한다. 이때 여러분들은 @Modifying 어노테이션을 붙여주어야 한다는 이야기를 들어봤을 것이다. 벌크연산이란? 하나의 데이터가 아닌 여러 데이터를 한번에 수정하거나 삭제하는 연산 위 사진과 같이 JpaRepository를 상속받은 Repository 인터페이스의 메서드 중, 벌크연산을 수행하는 메서드의 상단에 @Modifying 어노테이션을 붙여주어야 한다. 실제로 Update 또는 Delete 쿼리에 해당 어노테이션이 붙어있지 않는다면 QueryExecutionRequ..

BackEnd/DB

[Redis] RefreshToken은 왜 Redis를 사용해 관리할까?

1. “왜?” 🤔 우리는 MySQL과 같은 일반 DB를 다룰 줄 아는데 사람들은 왜 굳이 리프레시 토큰을 Redis에 저장하여 사용하는지 이유가 궁금했으며, 왜 다들 Redis를 사용해서 리프레시 토큰을 저장하는 지 궁금했습니다. 2. Redis가 뭔데? 레디스는 디스크가 아닌 메모리에 데이터를 저장하는 In-Memory 방식의 데이터베이스입니다. 2-1. In-Memory? In-Memory 데이터베이스는 MySQL과 같은 다른 일반 DB들처럼 SSD, HDD와 같은 보조기억장치가 아닌, 프로세서가 직접 액세스할 수 있는 컴퓨터의 주 메모리인 RAM에 데이터를 저장합니다. 2-2. 디스크에 저장하는 것과 무슨차이가 있는데? 특정 프로그램을 실행하면, 아래와 같이 컴퓨터는 보조기억장치에 저장된 데이터를 ..

BackEnd/AWS

[AWS] AWS IAM 생성하기

AWS IAM 생성법 오늘은 AWS의 IAM에 대해서 알아보려고 한다. IAM이란 무엇일까? 🤔 AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하면 사용자가 액세스할 수 있는 AWS 리소스를 제어하는 권한을 중앙에서 관리할 수 있습니다. 이라고 AWS 페이지에서 설명합니다. 쉽게 말해서 AWS에 접속 및 로그인을 통해 AWS의 기능을 사용하는 것이 아니라, IAM이라는 인증 도구를 사용하여, 사용자가 권한을 부여한 특정 기능에 대해서만 접근할 수 있도록 제어하는 AWS의 열쇠같은 역할입니다. 열쇠는 열 수 있는 문과 그렇지 않은 문이 나뉘어져 있죠! 마찬가지로 AWS의 IAM도 계정의 주인이 ..

BackEnd/Spring

[트러블슈팅] [스프링부트] 자바 Collection 객체, @RequestBody로 받기 (feat. Jackson-databind)

문제상황 ⛔️ public class CompetitionAttendRequestDto { private Long cmptId; private Long orgId; private List cmptEventIds; 위와 같이 컬렉션 타입의 변수 List cmptEventIds 를 가진 dto를 @RequestBody를 통해 json으로 데이터를 전달받아 dto클래스로 매핑하는 상황에서 컬렉션 타입 변수에 의해 매핑 관련 오류가 발생 List 타입의 컬렉션 객체를 json으로 받아 매핑할 때, 위처럼 대괄호로 묶어주면 된다고 알고 있었지만 실패 실패한 직후 오류 로그 기본 생성자와 같은 생성자가 존재하지 않는다는 등의 문구가 보여 넣어봤지만 여전히 같은 결과.. 해결 ✅ 몇분동안 삽질하다가 jackson-d..

BackEnd/Spring

[트러블슈팅] [JPA] 변경 감지(Dirty Checking)가 작동하지 않는 경우 해결법 (feat. @Transactional)

JPA Dirty Checking jpa는 변경감지(dirty checking) 라는 기능을 가지고 있다. 이는 영속성 컨텍스트에 올라가있는 엔티티에 대해, 값을 수정하였을 때 해당 트랜잭션이 끝날 때, 변경된 값을 확인하여 DB에 변경 사항을 자동으로 반영해주는 아주 간편한 기능이다. 본인또한 이 기능을 사용하여 Entity의 값을 update 해주려고 하였지만, 왜인지 작동하지 않았다. 그리고 운좋게도 구글링을 통해 그 이유를 알 수 있었다. 문제 상황 위와 같은 데이터의 값을 변경감지를 통해 변경하도록 구현한 코드에서 변경감지가 작동하지 않았던 상황이다. 최리더라는 값을 김리더로 변경하여 update에 보내주면 함께 보낸 PK로 Entity를 조회하고, 조회한 Entity의 orgLeaderName..

BackEnd/Spring

[SpringBoot] [트러블슈팅] 스프링 Response 시, 한글 깨지는 오류 해결

스프링부트 Response 시, 한글 깨지는 오류 해결 문제 상황 ⛔️ 스프링을 통해 RestAPI 서버 개발 도중, 한글로 작성한 Response Body의 값이 "??? ???." 등과 같이 출력되는 현상을 마주했다. 아무래도 response의 Content-Type이 utf8이 아니기 때문에 발생하는 것이 아닐까 의심을 했고, 정답이었다. 때문에 response 응답에 Content-Type 헤더를 추가해주어야 했다. 해결 방법 💭 해결 방법은 Controller의 RequestMapping 어노테이션 단에, @RequestMapping(value = "/competition", produces = "application/json; charset=UTF8") 위와 같이 produces 프로퍼티를 추..

PgmJUN
'BackEnd' 카테고리의 글 목록 (2 Page)