[Nearby] Spring Boot에서 Apple ID Token을 검증하고 소셜 로그인 구현하기
·
Back-end/Spring
기존 카카오 로그인에 Apple 로그인을 추가한 배경AppJam에서 만들었던 Nearby의 후속 스프린트를 시작하면서 Apple 로그인을 추가했다. 서버에는 이미 카카오 OIDC 로그인이 구현돼 있었다. 회원 조회와 생성, Nearby 토큰 발급처럼 두 로그인에서 공통으로 쓰는 흐름은 최대한 재사용하고, 제공자마다 달라지는 ID Token 검증 로직은 따로 두기로 했다.이번에 구현한 범위는 다음과 같다.POST /api/login/apple 추가카카오 로그인 경로를 POST /api/kakao/login에서 POST /api/login/kakao로 변경카카오와 Apple 로그인을 LoginController로 통합Apple OIDC ID Token의 서명과 클레임 검증기존 소셜 회원 조회 및 신규 회원 ..
[gRPC] RMI와 비교하며 이해하는 gRPC — Proto부터 Stub, Server 구현까지
·
Back-end/DevOps
공부하게 된 계기‘서버 아키텍처’ 라는 과목을 수강하면서 RMI를 gRPC로 변경하는 과제 덕분에 공부를 시작하게 되었다. 처음에는 Spring이 다 있는데 무슨 처음 들어보는 걸로,,,? 라는 생각했었다. 하지만 Spring은 애플리케이션 프레임워크이고, gRPC는 원격 통신 기술을 위한 gRPC 프레임워크다. 서로 대체하는 관계가 아닌 필요하면 서로 사용할 수 있는 기술이였다. 교수님께서는 주로 RMI 를 사용하시니까 내가 배우는 내용과 gRPC를 비교 해가며 공부해 볼까 한다.gRPC사용 이유.proto에 서비스를 한 번 정의하면 언어별 플러그인을 통해 메시지 클래스, 클라이언트 Stub, 서버 구현용 기반 코드를 생성할 수 있다. 실제 비즈니스 로직은 개발자가 구현한다.이렇게 생성된 클라이언트와 ..
[SOPT] 38기 Server YB 파트 면접 합격 후기
·
회고/기타
SOPT 38기 YB에 합격했었다! 면접 때 너무 떨려서 끝나고도 걱정했는데, 합격해서 정말 다행이다. 기억이 더 흐려지기 전에 면접 준비 과정과 실제로 받았던 질문들을 남겨보려고 한다.면접 준비 — 내적 친밀감 쌓기면접에서 조금이라도 덜 긴장하려고 인스타그램과 유튜브로 회장단, 파트장님 얼굴을 계속 봤다. 이름도 외우면서 혼자 열심히 내적 친밀감을 쌓았다. 😂다른 기수 후기를 보니 기술 질문도 많이 받았다고 해서 기술 면접 공부도 하고 갔다. 그런데 이번에 내가 받은 질문은 대부분 경험이나 생각에 관한 것이었다. 준비한 걸 많이 이야기하지 못한 건 조금 아쉬웠다. 그래도 기수나 면접에 따라 질문이 달라질 수 있으니, 다른 후기들도 참고해서 준비하면 좋을 것 같다.면접 전 아이스브레이킹본격적인 면접에 ..
외부 API 호출 없이 장소 주소로 도시별 현재 시각 계산하기
·
Back-end/Spring
문제 발생 상황Nearby 프로젝트에서는 스페인, 영국, 프랑스의 도시별 현지 시각이 필요했다.SOPT AppJam 데모데이에서는 한국에서 실시간 시연을 진행했기 때문에 애플리케이션의 Clock, HTTP 응답 직렬화, 일부 DB 마이그레이션에 KST 기준이 적용되어 있었다.하지만 서비스를 해외 도시로 확장하려면 특정 국가의 시간대에 종속되지 않는 기준이 필요했다. 이에 서버가 생성하는 시각은 UTC를 기준으로 관리하고, 화면에 보여줄 때 장소가 위치한 도시의 시간대로 변환하기로 결정했다.도시별 현재 시각을 계산할 때 기준이 되는 값은 Instant다.Clock.instant() ↓Instant ├─ atZone(Europe/Madrid) ├─ atZone(Europe/London) ..
[SOPT] 38기 Server YB 서류 합격 후기
·
회고
사실 SOPT 합격한 지는 꽤 오래됐지만... 바쁘다는 핑계로 이제야 적는다...(누군가에게 도움이 될 수 있으면 좋겠다..!)SOPT 서류를 준비한다면 서류 합격 후기 한 글만 찾아보기보다는 정말 많은 글을 찾아보는 걸 추천한다.사람마다 경험도 다르고, 같은 질문이어도 풀어가는 방식이 다 달라서 여러 글을 읽어보는 게 확실히 도움이 많이 됐던 것 같다.서류 TipSOPT에 관심이 있는 분들이라면 알겠지만 서류 합격부터 쉽지 않다... 그렇기에 나는 처음부터 무조건 서류에서 합격한다는 마인드로 적었다. 또한 매 기수마다 키워드가 제시되는데, 이 키워드를 내 경험에 잘 녹여내는 것도 중요하다고 생각한다. 여기에 각 파트별 인재상까지 자연스럽게 넣을 수 있다면 훨씬 좋다!나는 글을 적으면서 내가 하고 싶은 ..
AI가 코드를 너무 많이 쓴다면? Ponytail
·
Tools/AI
​개발 커뮤니티를 자주 보셨다면 이 이미지를 한 번쯤 보셨을 것 같습니다.저도 요즘 AI 코딩 에이전트를 사용할 때 Ponytail을 거의 항상 붙여서 사용하고 있습니다. 직접 진행 중인 Nearby 프로젝트에도 적용해 봤는데요.처음에는 규칙이 프롬프트에 추가되니 입력 문맥이 조금 길어지는 것처럼 보였습니다. 그런데 막상 작업을 계속해 보니 생성되는 코드와 수정 범위가 줄어들면서, 전체 작업 시간과 비용은 오히려 줄어드는 게 체감됐습니다.왜 이런 차이가 생겼는지, 바이브 코딩을 하는 사람에게도 Ponytail이 의미가 있는지 한번 정리해 보겠습니다.​1. Ponytail은 무엇인가요?Ponytail은 AI 코딩 에이전트가 ‘가장 게으른 시니어 개발자’처럼 생각하도록 만드는 오픈소스 스킬입니다.여기서 게으..
Spring Boot 요청 처리 흐름: DispatcherServlet부터 JSON 응답까지
·
Back-end/Spring
Spring Boot로 REST API를 만들면 컨트롤러 메서드 몇 줄만으로 JSON을 반환할 수 있다.존재하지 않는 주소에 접속하면 오류 페이지나 JSON 오류 응답도 자동으로 만들어진다. 하지만 이 과정은 컨트롤러 하나가 전부 처리하는 것이 아니다.컨트롤러 뒤에서는 다음 구성요소들이 역할을 나눠 요청을 처리한다.DispatcherServletHandlerMappingHandlerAdapter@ResponseBodyJackson 기반 HttpMessageConverterErrorMvcAutoConfigurationSpring Web Starter이 글에서는 HTTP 요청이 컨트롤러에 도달하고, Java 객체가 JSON으로 변환되어 반환되기까지의 흐름을 살펴본다.이 글은 Servlet 기반 Spring ..
모듈식 모놀리스와 헥사고날 아키텍처로 구성된 Nearby 서버 구조 분석하기
·
Back-end/Architecture
아키텍처 선택 이유SOPT에서 세미나, 솝커톤, 합동 세미나 모두 모두 레이어드 아키텍처를 사용해왔다. 하지만 이번 AppJam에서는 새로운 구조를 직접 경험하고, 기존 방식과 어떤 차이가 있는지 알아보고 싶었다.처음에는 어떤 아키텍처가 있고 어떤 걸 선택해야 하는지 또 각 아키텍처가 어떤 특징을 가지는지 충분히 알지 못 하였다. 이후 서버 리드가 제안한 모듈식 모놀리스와 헥사고날 아키텍처의 도입 배경을 듣고, 새로운 구조를 학습할 좋은 기회라고 생각해 해당 아키텍처를 적용하게 되었다.아키텍처를 이해하고 프로젝트 구조를 파악하는 과정에서 가장 많은 도움을 받은 글은 다음 글이었다.미리 회고하자면아키텍처를 선택한 이후 가장 큰 문제는 이를 실제 코드로 구현하는 방법이었다. 팀 내에 모듈식 모놀리스와 헥사고..
Appjam 전 간단한 프로젝트를 연습하려고 했었다...
·
Back-end
사실... Appjam 합숙 전에 모든걸 다 끝내고 들어가려 했으나 못 했고 회고식아니면 나중에라도 더 구체화 시켜서 올려보려고 한다... 아래 있는 글들은 우선 먼저 적어놨던거라도 올리고자 이렇게 적게 되었다.https://github.com/guswnsj0112/spring-auth-board계기이번 SOPT 38기 AppJam에서 운 좋게 Server로 참여 할 수 있게 되었다. 하지만 가장 큰 문제가 있었다. 바로 내가 백엔드를 올해 처음한다는 점이였다. 물론 파트장님께서는 세미나 때 친철하고 잘 알려주셨긴 했지만 학기 중 시간 관리를 못 했던 나에게는 아직 미숙한 부분이 많이 보였다. 그래서 Appjam 시작 전까지는 인증/인가, 엔터티 등 다양한걸 공부해서 가려고 한다.구조우선 서버 리드님과 ..
DDD(Domain-Driven Design)란? 핵심 개념과 계층형 아키텍처
·
CS/Architecture
DDD(Domain-Drvien Design, 도메인 주도 설계) 란?도메인 모델을 기반으로 복잡한 소프트웨어 시스템을 설계하고 개발하는 방법론도메인(Domain)소프트웨어가 해결하고자 하는 문제 영역→ 도메인이 무엇인지 보다는 도메인에 포함되는 것이 무엇인가 정의를 내리는게 더 중요!예를 들어 여행 애플리케이션은 예약, 결제, 여행 일정, 회원 관리 등의 하위 도메인으로 나눌 수 있다. 예약 도메인 안에는 예약 요청, 확정, 취소와 같은 상태와 행위가 존재할 수 있다.이처럼 여러 도메인들이 상호작용하며, 비즈니스 도메인별로 나누어 설계하는 것을 도메인 주도 설계라고 한다.도메인과 객체의 차이점객체(Object)객체는 프로그램에서 특정 개념을 표현하기 위해 상태와 행동을 하나로 묶은 단위이다.객체는 현실..