728x90
반응형

분류 전체보기 157

[백엔드] Blog - 모든 엔티티 생성 시간, 업데이트 시간 설정하기 @CreatedDate, @LastModifiedDate, BaseEntity

BaseEntity다른 엔티티에서 BaseEntity를 상속하여 필드에 엔티티 생성 시간, 업데이트 시간을 추가할 수 있다. @MappedSuperclass 자동으로 엔티티 생성 시간과 업데이트 시간을 설정하도록 할 수도 있는데 다음과 같은 어노테이션이 필요하다.@CreateDate, @LastModifiedDate 하지만 이 두 가지만 설정하고 테스트를 해보면 어노테이션이 동작하지 않는 것을 알 수 있다. 어노테이션들이 동작하기 위해서 추가로 두 가지 설정이 필요하다. 1@EntityListeners(AuditingEntityListener.class) BaseEntity 클래스에 이 어노테이션을 붙여서 엔티티를 DB에 적용하기 이전에 콜백을 요청할 수 있도록 한다. 2@EnableJpaAuditing..

백엔드 2024.09.24

[백엔드] Blog - 전역 예외 커스텀 처리하기 @RestControllerAdvice, @ExceptionHandler

목차1. ExceptionAdvice1.1. handleGlobalException 메서드1.2. handleMethodArgumentNotValid 메서드 1. ExceptionAdvice (전역 예외처리 핸들러)최근에 개발한 블로그 프로젝트에서 사용한 커스텀 전역 예외처리 핸들러이다.  @Slf4jLombok의 어노테이션으로, 클래스에 로깅 기능을 추가한다. 이 어노테이션을 사용하면 log 객체를 생성하지 않고도 로깅할 수 있다.ResponseEntityExceptionHandler 내부에도 logger가 정의되어 있기는 하나 이 어노테이션이 사용하기 편리하다.  @RestControllerAdvice(annotations = {RestController.class})전역적으로 @RestControl..

백엔드 2024.09.24

[백엔드] Blog - 실행 오류 정리 (application.yml, SDK, test)

프로젝트를 git clone 하고 실행시킬 때 IntelliJ IDEA에서 발생했던 오류를 정리했습니다. 애플리케이션 실행 오류오류 내용 아래로 스크롤하다 보면 다음과 같은 오류 나옴 해결 실행 버튼 옆의 구성 편집 누르기  환경 변수 옵션 추가 및 설정application.yml 파일에 존재하는 다음 내용 환경 변수에 추가 (또는 yml 파일을 직접 수정){DATASOURCE_URL}{DATASOURCE_USERNAME}{DATASOURCE_PASSWORD}{JWT_SECRET_KEY}{JWT_ACCESS_TOKEN_TIME}{JWT_REFRESH_TOKEN_TIME} 오류 내용 다음과 같은 오류 또는 기타 오류 발생 시 해결 프로젝트 구조에서 적절한 SDK 선택 (Java 21 버전 중 선택) 오류 ..

백엔드 2024.09.19

[백엔드] 회원탈퇴(Soft delete) 및 회원복구

Soft delete란?데이터를 완전히 삭제하지 않고 논리적으로 삭제되었음을 나타내는 필드를 두어 데이터를 비활성화하는 방식이다.다음과 같은 상황에서 사용된다.회원 삭제를 호출했지만 회원 정보를 가지고 있어야 하는 경우회원 탈퇴 복구 기능이 필요한 경우“회원 탈퇴 후, 30일 뒤 영구삭제” 이런 상황에서 사용된다.  이전에 진행했던 프로젝트에서는 isDeleted(삭제여부)와 deletedAt(삭제시간) 필드를 두었다. 로직 회원 삭제 API가 호출되면 Spring Security가 요청에 포함되어 있는 JWT 토큰을 통해 유저를 인증하고 인증된 유저의 정보(Developer 객체)를 @AuthUser를 통해 파라미터로 주입한다. 메서드 내에서는 주입된 developer 객체의 id를 가져와 Servic..

백엔드 2024.09.08

[벡엔드] 카테고리 Java Enum 활용

카테고리를 테이블로 관리했을 때의 문제점 카테고리의 클래스를 구현하는 도중 문득 카테고리 각각을 테이블로 만드는 것이 상당히 비효율적이라고 느껴졌습니다. 그러한 이유는 다음과 같습니다.  카테고리 변경이 거의 일어나지 않음본 프로젝트 특성상, 한 번 정의된 카테고리 추가/삭제가 거의 발생하지 않는다. 따라서 카테고리 CURD는 프로젝트 초기 이후 거의 사용되지 않는다.관계 관리의 복잡성 증가Developer : DevLanguage의 관계는 다대다 관계이다. 연관관계 메서드 등을 구현하기 위해 코드가 길어지며, 운영 단계에서 중간엔티티가 증가한다.성능 이슈테이블을 Join & Group by 하며 성능 부하가 발생한다. Java Enum 도입이러한 비효율을 해결하기 위해 다음 기술 블로그를 레퍼런스하여 ..

백엔드 2024.09.06

[42서울] minitalk 구현(Makefile 포함)

서론minitalk 과제는 SIGUSR1, SIGUSR2를 사용해서 클라이언트 프로그램에서 서버 프로그램으로 메시지를 보내고 서버 프로그램은 해당 메시지를 출력하는 프로그램을 작성하는 과제이다. 이 과제에서는 pid 값, signal 및 kill 함수 등에 대해 배우게 된다. 개념pid프로세스 id이다. 쉘에서 ps 명령을 통해서 pid를 확인할 수 있으며 getpid() 함수를 사용해서 자신의 pid 값을 가져올 수도 있다. kill 함수#include int kill(pid_t pid, int sig); pid에 해당하는 프로세스(또는 그룹)로 sig에 해당하는 값을 보낸다. https://www.ibm.com/docs/hr/zos/2.4.0?topic=functions-kill-send-signal..

[42서울] minishell 테스트 케이스

서론끝내고 싶다. 테스트 케이스leaksminishell 프롬프트에 각종 명령이나 동작 사용하고 leaks minishell 으로 확인해보자.공백 입력 릭cd 릭자식 프로세스 릭 exit status각종 명령이나 동작 사용하고 echo $? 로 exit status 확인해보자.bash 출력값과 미니쉘 출력값이 다를 경우(특히 오류 메시지) 대부분 exit status가 잘못됐을 수 있다. exit status 값을 strerror 인자로 넘겨서 오류 메시지를 출력하는 것이 좋다.파이프라인 뒤에 exit status항상 0예시(앞의 명령이 올바른 경우): ls | echo $?예시(앞의 명령이 잘못된 경우): aaaaa | echo $?시그널 처리 후 exit status 확인cntl + c, cntl +..

[42서울] so_long 그래픽, mlx 라이브러리

서론so long 과제의 그래픽을 구현한 부분에 대한 글을 써보려 한다. 프로그램이 시작하면 map을 입력받고 유효성을 검사한다. 이후 map에 대한 그래픽을 화면에 띄우게 된다. 화면에 띄우기 위해 MiniLibx(mlx 라이브러리)를 사용한다. mlx 라이브러리기본적인 렌더링을 위한 작은 그래픽 라이브러리윈도우 생성, 그리기, 이벤트관리 등 작업 가능  이전 포스팅에서는 check_map에 내한 내용까지를 다루었다.2024.07.22 - [대외활동/42서울] - [42서울] so_long (맵 유효성 검사(BFS)) [42서울] so_long (맵 유효성 검사(BFS))서론이번엔 42서울 2서클까지의 과제들 중 리트라이를 가장 많이 했던(무려 5번..!) so_long에 대한 글을 서보려고 한다. s..

[42서울] so_long 맵 유효성 검사(BFS)

서론이번엔 42서울 2서클까지의 과제들 중 리트라이를 가장 많이 했던(무려 5번..!) so_long에 대한 글을 서보려고 한다. so long은 지도가 그려진 파일을 입력받아 클리어 가능하다면 화면에 게임을 출력하는 과제이다. 지도 파일의 예시는 다음과 같다.0은 빈공간,1은 벽,C는 수집품,E는 맵의 출구,P는 주인공의 시작지점이다.주인공은 모든 수집품을 모아야 맵의 출구로 나갈 수 있다. 그 전에는 출구 위로 지나갈 수 없다.구현mainso_long의 시작이다. argv의 인자로 .ber 확장자인 파일 이름을 입력받는다. 입력받은 파일은 so_long 게임의 지도(map)가 된다. 이전에 so_long 평가를 갔었는데 main 문에 핵심 로직이 다 담기며 가독성이 좋고 간결한 코드를 보게 되어 영감..

728x90
반응형