🚀 프로젝트
[Spring] 스프링 스케쥴러 사용해서 일정 주기로 메소드 실행하기 (Scheduler)
프로젝트 개발 중 엔티티를 생성한지 3일 이후에 자동으로 해당 엔티티 필드를 갱신해 만료 상태로 만드는 로직이 필요했다 PostgreSQL 에서는 내장 스케쥴러가 없다는 말도 있고 스케쥴러 사용하는 법이 까다로워서 로깅도 같이 하기 위해 그냥 스프링 내장 스케쥴러를 사용하기로 했다 ⚙️ Dependency @Scheduler 는 Spring Boot Starter 에서 기본으로 제공하는 어노테이션이다 🔨 전역 설정 📝 MyApplication @EnableScheduling //scheduler 사용 @EnableJpaAuditing //jpa entity 자동 감시 @SpringBootApplication public class MyApplication { public static void main(S..
[Spring/Nginx] MultipartFile 최대 용량 설정하기 (MaxUploadSizeExceededException / Request Entity Too Large)
❌ 에러 상황 org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field multipartFiles exceeds its maximum permitted size of 1048576 bytes. AWS S3 파일 업로드 중 발생한 문제 MaxUploadSizeExceededException AWS S3 와 연동해서 파일을 업로드 할 때 http 41..
[Spring] JPA + Lombok 사용할 때 @OneToOne 에서 발생하는 StackOverflowError 해결
JPA 와 Lombok 을 같이 사용중이라면 발생할 수 있는 에러 ❌ 원인 @OneToOne 또는 @OneToMany 를 통해 연관관계를 정의했고 이후 데이터를 꺼내올 때 hashCode 또는 toString 을 호출하면서 무한 순환 참조에 의해 스택 오버플로우가 발생하는 에러이다 java.lang.StackOverflowError: null at com.tikitaka.naechinso.domain.member.entity.Member.toString(Member.java:21) ~[main/:na] at java.base/java.lang.StringConcatHelper.stringOf(StringConcatHelper.java:453) ~[na:na] at com.tikitaka.naechinso..
[Spring] 문자 인증 구현하기 (Redis + 네이버 클라우드 플랫폼 SMS API)
지금 하는 중인 프로젝트가 원래는 아이디 + 비밀번호 기반 로그인이여서 메일 기반 인증과 OAuth 를 준비중이었는데 다시 문자 인증 기반 로그인으로 기획이 변경되었다 문자 인증 같은 경우는 예전 프로젝트에서 네이버 SMS API를 통해 구현해 본 적이 있어서 그다지 어렵지는 않지만 마침 만드는 김에 복습하는 차원으로 구현하고 나서 글을 적어보기로 했다 ⚙️ Dependency //webflux implementation 'org.springframework.boot:spring-boot-starter-webflux' //redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' 서버 상에서 http 요청을 보내고 응답받기..
[Gosrock] 고스락 티켓 2.0 프로젝트 관련 글 정리
📚 사용 언어 / 프레임워크 Nodejs + Nestjs PostgreSQL Socket.io Redis Docker 📝 관련 포스팅 Socket.io 사용하여 실시간 공연 입장 시스템 구현하기 Guard 사용중인 Controller 내부 특정 메소드에 모든 접근 허가하기 (NoAuth) PageDto를 이용한 페이지네이션 구현하기 (Paging) ✨ 웹 사이트 주소 https://gosrock.band/ 고스락 티켓 22번째 정기공연 [We are GOSROCK, Invites you] gosrock.band
[Gosrock/Nestjs] PageDto를 이용한 페이지네이션 구현하기 (Paging)
고스락 티켓 예매 페이지 22th 프로젝트의 일부인 페이지네이션 / 페이징 구현에 대한 글입니다 어드민 페이지에서 내가 구현한 티켓 서비스의 티켓을 특정 조건에 맞게 N개 가져올 필요가 있었다 그래서 페이지네이션을 제네릭을 이용하여 구현하게 되었다 언제 들었는지 기억은 안나지만 이런 말이 문득 생각난다 개발자가 힘들수록 사용자는 편리해진다 페이지네이션도 그렇다 서버 개발자는 페이징 구현이 귀찮고 짜증나지만 그것을 사용하는 프론트 개발자는 편할지어니,,,,,, 🔨 PageOptionsDto 구현 📝 enum.ts enum PageOrder { ASC = 'ASC', DESC = 'DESC' } 오름차순 / 내림차순 옵션을 위한 Enum 이다 📝 page-options.dto.ts export class P..
[Gosrock/Nestjs] Guard 사용중인 Controller 내부 특정 메소드에 모든 접근 허가하기 (NoAuth)
고스락 티켓 예매 페이지 22th 의 일부인 @NoAuth 데코레이터 구현에 관한 글입니다 우선 이 글은 Nestjs 에서 AuthGuard 등의 Custom Guard 구현에 대해 알고 있다고 가정하고 작성했습니다 📝 Reference Guards - https://jakekwak.gitbook.io/nestjs/overview/guards 🔍 문제 상황 우선 고스락 티켓 프로젝트에서는 AccessTokenGuard 라는 커스텀 가드를 구현했고 이는 Role 기반으로 엑세스 토큰에서 유저와 그 권한을 뽑아와서 해당 요청 메소드에 접근 권한이 있는지 확인하고 접근 인가 / 불가 처리를 하는 것이다 자세한 것은 고티켓 팀장님의 포스팅을 참고하십쇼 https://devnm.tistory.com/16?cate..
[Gosrock/Nestjs] Socket.io 사용하여 실시간 공연 입장 시스템 구현하기
학교 컴공 밴드 동아리 고스락 여름방학 프로젝트인 고스락 티켓 예매 페이지 22th 의 일부인 socket 구현에 대한 글입니다 nestjs + socket.io 를 사용하여 구현하였습니다 📝 Reference nestjs + socket.io(EventsGateway) - https://www.youtube.com/watch?v=gkJ1N6PDCEc&t=690s chat app with nestjs - https://www.youtube.com/watch?v=7xpLYk4q0Sg&t=722s docs nest js (gateway) - https://docs.nestjs.com/websockets/gateways 💻 socket.io 모듈 설치 npm i @nestjs/websockets @nestjs..