분류 전체보기

외부활동/동아리

[SOPT] 라이온하트 2차 회고, 그리고 솝트 32기 회고

라이온하트 2차 회고 SOPT 32기 회고 IT 동아리 솝트에서 진행한 앱잼에서 누구보다 뜨거운 여름을 경험하였고이를 나중에도 떠올릴 수 있도록 5주간 라이온하트 서버를 개발하면서 배운 점들과 아쉬웠던 점 그리고 최종적으로 솝트 32기 활동을 돌아보는 과정을 글로 녹여내보려 한다. 상반기를 거의 솝트와 보냈기 때문에 사실상, 상반기 회고라고 생각한다. 지난 회고 [SOPT] 앱잼, 라이온하트 개발 중간 회고 SOPT 앱잼, 1차 회고 IT 동아리 SOPT에서 경험하게된 앱잼의 합숙 1주차가 지나며, 한 주간 라이온하트 서버를 개발하면서 겪은 감정과 경험을 글로 녹여내는 시간을 가지려고 한다. 🦁 라이온하트? pgmjun.tistory.com 📱 앱잼 과정 라이온 하트와 함께한 앱잼은 3주간의 세팅, 2주..

BackEnd/Spring

[Java/SpringBoot] 스프링부트 서버 배포 시, 한국 시간(KTC)으로 배포하는 가장 확실한 방법

스프링부트 서버 한국 시간(KTC)으로 배포하는 방법 문제 상황 🔥 라이온하트의 챌린지 기능요소 중, 출석체크 기능이 존재하기 때문에 DB에 출석 시간을 저장하는 로직이 존재한다. 때문에 EC2 인스턴스에서 timedatectl 설정과 localtime 설정(아래)을 통해 인스턴스의 시간을 한국 시간으로 맞춰놓았다. # ubuntu22.04 localtime 설정 sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 이렇게 설정하니 Database에 시간 값을 입력할 때, 한국 기준 시간이 제대로 입력되는 것을 확인할 수 있었다. 하지만 출석 체크 시간 필드가 존재하는 레코드를 자바의 엔티티 객체와 매핑하는 과정에서..

BackEnd/Spring

[SpringBoot] LogBack을 통한 로깅 설정

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

외부활동/동아리

[SOPT] 앱잼, 라이온하트 개발 중간 회고

SOPT 앱잼, 1차 회고 IT 동아리 SOPT에서 경험하게된 앱잼의 합숙 1주차가 지나며, 한 주간 라이온하트 서버를 개발하면서 겪은 감정과 경험을 글로 녹여내는 시간을 가지려고 한다. 🦁 라이온하트? 라이온하트는 예비 아버지를 위한 육아 아티클 서비스이다. 아버지들을 위한 육아 정보 커뮤니티가 거의 존재하지 않고, 아버지들은 정보를 얻을 수 있는 공간이 너무나도 적다. 가장 활발하게 정보가 유통되는 맘카페라는 공간을 이용하지 못하면 예비 아빠들은 스스로 정보를 찾아나서야 하는데 이것은 너무 막막한 상황이다. 때문에 예비 아버지들을 위한 하루 10분 육아 아티클 서비스 ‘라이온하트’는 세상에 너무나도 필요한 서비스라고 생각이 들었고, 이러한 생각에 지원하여 함께하게 된 라이온하트 서버파트에서 1주간 겪..

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. 디스크에 저장하는 것과 무슨차이가 있는데? 특정 프로그램을 실행하면, 아래와 같이 컴퓨터는 보조기억장치에 저장된 데이터를 ..

Language/JAVA

[Java] @NotBlank, @NotNull, @NotEmpty 차이

개발 중 RequestDto를 생성할 때, 값 검증을 위해 @NotBlank, @NotNull, @NotEmpty와 같은 어노테이션을 사용하는 경우가 많다. 해당 어노테이션은 Spring Validation 라이브러리에 포함되어있으며, 아래 코드를 build.gralde에 넣어 추가할 수 있다. build.gralde implementation 'org.springframework.boot:spring-boot-starter-validation' UserRequestDto.java public class UserLoginRequestDto { @Email(message = "이메일 형식에 맞지 않습니다") @NotBlank private String email; /*생략*/ } 위는 DTO에 @NotBl..

PgmJUN
'분류 전체보기' 카테고리의 글 목록 (3 Page)