스웨거 typescript-api로 자동화 하는법 (Swagger)
·
Spring/Swagger
들어가며Sopt에서 Lococo를 개발하면서 스웨거가 단순히 문서화 툴일 뿐만 아니라, 클라쪽에서 자동화로 뽑아서 코드를 작성해줄 수 있는 툴이 있음을 알게되었었다. 그래서 NestJS의 공식 문서를 보다가, 흥미로운 내용이 있어서 포스팅을 작성하게 되었다. @nestjs/swagger, FastAPI, Springdoc-openapi 같은 것들이 대표적인데, 이런 프레임워크들은 컨트롤러/라우트 정의를 읽어서 OpenAPI 문서를 뽑아주기까지 할 수 있다.https://docs.nestjs.com/openapi/introduction Documentation | NestJS - A progressive Node.js frameworkNest is a framework for building efficie..
Spring Boot 4.0 RC1 릴리즈 (Spring)
·
Spring/CS 개념
서론링크드인을 살펴보다가 2025년 10월 24일에 Spring Boot 버전이 메이저로 올라간 사실을 알게됐다. 정확히는 Spring Boot 4.0.0‑RC1이 릴리즈 되었다는 소식이었고, LTS(장기지원) 버전은 아니지만 메이저 버전 변경이라는 점에서 관심을 가지고 찾아보게 되었다. 이번 포스팅은 버전 4.0에서 주목할 만한 몇 가지 변경사항을 추려보고 앞으로 프로젝트 진행 시 참고할 만한 기능이 있는지, 그리고 Spring Boot가 어떤 방향으로 나아갈거같은지, 공유하고자 작성하게 되었다. (물론 RC 버전이라 확정이 아님을 감안해주면 좋을거같다본론2025년 10월 23일(미국 기준)에 Spring 공식 블로그에는 “Spring Boot 4.0.0‑RC1 available now”라는 글이 올..
Instagram Basic Display API vs Graph API 무슨 차이가 있을까 (OAuth)
·
Spring/OAuth
들어가며글로벌 크리에이터, 브랜드를 연결해주는 서비스 Lococo를 개발하면서, 크리에이터는 브랜드가 올린 "캠페인"이라는 것에 신청하고, 해당 제품에 대한 후기를 SNS에 업로드하는 로직이 있었다. 때문에 업로드한 SNS에 대한 정보를 가져오기 위해서는 SNS 연동이 필수적이였는데, 해당 포스팅은 Instagram 연동을 하면서 고민했었던 내용을 작성해보려한다본문인스타그램 연동을 위해 공식 문서를 봐도 공식문서를 보면, Facebook 로그인을 통한 Instagram API랑 Instagram 로그인을 통한 Instagram API가 별도로 존재하는걸 알 수 있었다. 이 글에서는 내가 겪었던 혼란 포인트들을 공유하면서, 상황에 따라서 어떤 플로우를 선택해야 하는지와 OAuth 차이를 정리해보려고한다로그..
userId를 매번 입력받지않고도 로그인한 유저 정보를 가져올 수 있을까 ? (JWT)
·
Spring/JWT
들어가며스프링 시큐리티는 SecurityContext에 인증 객체(Authentication)를 저장한다public String getCurrentUser() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // Principal 객체 (UserDetails 구현체) 가져오기 Object principal = authentication.getPrincipal(); if (principal instanceof UserDetails userDetails) { return "현재 로그인한 사용자: " + userDe..
슬랙 웹훅으로 신고하기 기능 구현하기 (Webhook)
·
Spring/Webhook
들어가며먼저 링크 서비스에 기획에 대해서 가볍게 설명하려고 한다Leenk 서비스는, Leets라는 동아리를 운영하는 입장에서 생각했을때 동아리 원들의 커뮤니케이션 수단을 개발해서 제공해준다면 어떨까 ?? 라는 생각이 들어 시작하게된 서비스다예쁜 디자인 + 랜딩 사이트 만들어주셔서 개큰감사 🙇🏻‍♂️ (Shout out to 도연, 한별)https://leets-makers.framer.website/ Leets MakersGachon University IT Collaboration Club, Leets Makers' Landing Page - Made by. Makers' Designer, Doaeng.leets-makers.framer.website동아리원들이 자유롭게 사진을 공유하고, 모각작과 ..
디스코드를 활용한 500 에러 알림 자동화 (Webhook)
·
Spring/Webhook
들어가며지금 해당 API 500 뜨는데 원인 알 수 있을까요지금 오류 로그 한번만 확인해주실래요 ??해당 API 500 뜨는데 원인이 뭘까요백엔드로 다른 파트와 개발을 진행하다보면, 플젝을 진행하면서 위와 비슷한 말들을 수도 없이 들었을 것이라고 생각한다. 물론 500 에러가 최대한 발생하지 않도록 세부적으로 예외처리를 최대한 처리해줘야 되겠지만, 비즈니스 로직단에서 잡을 수 없는 에러나 특수한 상황에서 발생하는 에러들은, 서비스단에서 예외를 던져주기보다는 GlobalExceptionHandler에서 처리되는 것으로 알고있다. 때문에 위처럼 커스텀되지 않은 상황에서의 에러는 500을 뱉게 된다 termius에 들어가서.... 서버 ssh 환경으로 들어간 뒤에.... dokcer 명령어를 입력해서.......
Caffeine + Redis 2-Level 캐싱 (Spring)
·
Spring/캐싱
들어가며이번 포스팅은 게시글 조회에서, 게시글이 10개, 100개일때와 수천 개 이상이 되는 순간을 고민했을때의 대용량 데이터의 조회 API(게시글 상세, 전체 목록 등) 을 위해서 Redis를 활용한 캐싱을 적용하며, 고민했던 내용을 담아보려한다캐싱을 적용해야하는 이유는 무엇일까 ?서론에서도 짧게 작성했었지만, 게시글 상세 조회나 전체 목록 조회는 로직 자체는 단순할지 모르지만, 많은 사용자들이 짧은 시간 안에 반복적으로 호출하게 된다면 ? 그 게시글이 1,000개, 10,000개가 된다면 ? 과 같은 고민을 하게된다면 이는 DB에 부하가 크게 가게되어, 무리를 줄것이라고 생각했다. 이럴 때 캐싱을 적용하면, 이미 조회된 결과를 메모리나 외부 캐시에서 즉시 꺼내 쓰기 때문에 평균 응답 속도가 눈에 띄게..
AOP 활용해서 Request 로그 추적 (Spring)
·
Spring/AOP
들어가며먼저, AOP를 사용해야겠다라고 생각했던 이유는 Redis 캐싱을 적용해서, 게시글 상세 조회나 전체 목록 조회 등의 내용의 응답 시간을 단축 시켰는데, 실제로 구체적인 Request 로그로 확인해보고 싶었기에 해당 내용에 대해서 공부한 뒤 적용해봤다(Redis 캐싱은 Caffeine + Redis 을 합친 2-Level 캐시로 구현했는데, 구현한 내용은 다른 포스팅에서 작성해보려한다)AOP의 개념먼저 AOP와 해당 기능을 사용했을때 장점에 대해서 얘기해보려 한다AOP란 ?관점(Aspect)지향 프로그래밍으로, 관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍이다.여기서 관점은, 부가 기능과 그 적용처를 정의하고 합쳐서 모듈로 만든 것을 의미한다 즉, 정리하자면 비즈니스 핵심적인 기능은 아닐..
Swagger : CORS, Network Failure, URL scheme must be "http" or "https" 트러블 슈팅 (Spring)
·
Spring/CORS
문제 상황더미데이터를 넣고, Try it out으로 테스트를 하던 중에,로컬 환경이 아닌, 배포를 해놨었던 배포 서버 환경에서 아래 사진처럼 CORS, Network Failure, URL scheme must be "http" or "https" for CORS와 같은 에러가 발생했다트러블 슈팅서버도 정상적으로 실행되고 있었고, 도커 컨테이너에도 문제가 없었기에, SwaggerConfig 아니면 SecurityConfig 문제라고 생각하고 트러블 슈팅을 시작했었다. 실제로 SOPT에서 2주동안 진행되는 합동세미나에서 운영하는 서버였기에 corsConfig는 전체 허용이 되어있어 Swagger 설정 문제일거같다고 느낌은 왔었다 😬 그러던중, 스웨거에 서버 URL이 http로 되어있는걸 확인하고 경로가 ..
JPA 연관관계 및 각종 속성 설정 (Spring)
·
Spring/연관관계
들어가며게시글을 100개 작성한 유저가 회원 탈퇴를 한다고 할때, 해당 유저가 작성한 남은 게시글은 어떻게 처리해야 될까 ?SOPT 이번주차의 키워드 과제였다. 개인적으로 생각했었던 내용은, 단순히 코드를 설계하는 것이 아니라 하나의 어노테이션을 써도 그것을 왜 사용하는지, 또 특정 메서드를 구현한다고 할때 다른 방식들은 어떤 것들이 있을지, 등등을 계속 고민하게하는 SOPT의 특성에 잘맞는 키워드 과제라고 생각했다 👀실제로 위 사진의 코드처럼 User와 Post 엔티티 간의 관계를 설정해줬을 때, 단방향이 아닌 양방향 연관관계로 설계하게 되면 mappedBy, @JoinColumn, 그리고 순환참조를 피하기 위한 Jackson 어노테이션들까지 신경 써야 할 요소가 많아진다이번 포스팅에서는 위 코드에 ..