[개발 일기] 2025.07.02 - SSL 암호화하면 헤더도 암호화되나요?
·
개발 일기
💡 개요 문득 궁금해진 것이 JWT는 사실 암호화되지 않은 토큰이다. 즉, 누구나 토큰 내부의 클레임, 예를 들어 이메일이나 사용자 ID처럼 회원을 식별할 수 있는 정보를 조회할 수 있다. 물론 JWT를 암호화해서 사용하는 방법도 있다. 그게 바로 JWE 인데, JWE는 토큰 자체를 암호화해, 토큰을 탈취하더라도 내부 정보를 볼 수 없도록 한다. 그런데 실제 현업에서는 JWE보다는 JWT + HTTPS 조합을 더 많이 사용한다. 왜 그럴까? 그 이유는 어차피 HTTPS을 적용하면 클라이언트와 서버 간의 통신 전체를 암호화하기 때문이다. 즉, 공격자가 토큰을 가로채더라도, HTTPS 환경이라면 애초에 토큰을 탈취하기 어렵고, 설령 탈취하더라도 내용을 들여다볼 수 없다. 나는 개발할 때 보통..
[개발 일기] 2025.07.01 - boolean 타입을 리턴할 때 is 조심! (Feat: @Getter)
·
개발 일기
💡 개요 보통 boolean 자료형을 다룰 때, Java에서는 변수명을 is...로 시작하는 경우가 많다. 하지만 이런 변수를 백엔드(Spring Framework)에서 프론트엔드(Flutter)로 JSON 형태로 전달할 때, 변수명이 자동으로 바뀌는 경우가 있다. 오늘은 이 현상의 원인과 주의할 점을 정리해 보자. 🛠️ Flutter bool 아래 클래스는 로그인을 성공할 경우 프론트엔드에 응답하는 DTO이다. @Getterpublic class AuthLoginResponse { private String email; private String memberName; private String accessToken; private String refreshUUID; ..
[개발 일기] 2025.06.30 - 딥링크는 전역 위치에서 사용하세요
·
개발 일기
💡 개요 서비스 단에서는 딥링크를 직접 감지하지 말고, 앱 전역에서 감지 후 service로 위임하세요. Flutter에서 딥링크를 사용할 때, 왜 서비스 클래스(NaverLoginService 등)에서 직접 콜백을 받는 방식이 권장되지 않을까? 🛠️ 딥링크 Flutter에서 딥링크를 사용하는 이유는 외부 앱이나 브라우저에서 특정 화면이나 기능으로 직접 이동시키기 위함이다. 그리고 현재 글에서 언급한 것 처럼 이런 고민을 하는 이유는 main.dart와 같은 클래스에서 콜백 응답 데이터를 받는 것 보단, NaverLoginService.dart와 같이 목적에 더 적합한? 클래스에서 받고싶기 때문이다. 아마 자바를 기준으로 말하자면 응집도를 높이기 위함이 아닐까 싶다. 🤔 왜 서비스 단에..
[개발 일기] 2025.06.29 - GitHub Action?
·
개발 일기
💡 개요 난 매번 배포할 때 마다 Jenkins을 사용했다. 그런데 OKKY에서 GitHub Action과 Jenkins에 대해 비교하는 글을 보고 이번 기회에 GitHub Action에 대해 정리해보기로 했다. 🛠️ GitHub Action GitHub Action은 말 그대로 GitHub에서 지원하는 자동배포 기술이다. 위 이미지는 GitHub 공식 문서에서 가져온 GitHub Actions workflow 이미지인데, 용어가 좀 어색하니까 쉽게 정리해 보자.Event“언제 실행할까?”를 정하는 트리거GitHub Actions가 시작되는 조건을 의미한다. (특정 브랜치에 push or pull request)Runner워크플로를 실제로 실행하는 컴퓨터(서버)GitHub에서 제공하는 기본 ..
[개발 일기] 2025.06.28 - 조금 이따가 해드릴께요~
·
개발 일기
💡 개요 요즘 백준 서버가 많이 힘든 것 같다.. 코드를 제출하면 채점까지 거의 2시간이나 걸릴 때도 있는데, 신기하게도 결국 2시간 뒤에는 정상적으로 결과가 나온다. 그렇다는 건, 내가 보낸 요청이 2시간 동안 서버 어딘가에 보관되어 있다는 뜻 아닐까? 비슷한 경험이 어제 밤에도 있었다. 쿠팡에서 환불을 신청했는데, 시스템상으로는 바로 완료되었지만 실제로 내 계좌에 돈이 들어온 건 오늘 점심쯤이었다. 이렇게 요청과 실제 결과 사이에 시간 차이가 생기는 이유는 뭘까? 🛠️ 메시지 큐 위와 같은 상황이 발생하는 이유는, 아마도 RabbitMQ나 Kafka와 같은 메시지 큐를 사용하고 있기 때문일 가능성이 높다. 그렇다면 메시지 큐에는 어떤 데이터가 들어갈까? 바로 클라이언트의 요청이다...
[개발 일기] 2025.06.27 - Stateful과 Stateless의 차이
·
개발 일기
💡 개요 Flutter에서 StatefulWidget과 StatelessWidget이 밥 먹듯이 나온다. 오늘은 이 둘의 차이를 확실하게 알고 넘어가자. 🛠️ StatefulWidget StatefulWidget은 이름 그대로 상태(State)를 가지고 있는 위젯이다. 그렇다면 여기서 말하는 ‘상태’란 무엇일까? ‘상태’란 UI에 표현되는 데이터나 값의 변화를 의미한다. 이 상태가 변경되면, 해당 위젯도 함께 다시 그려지면서 변화된 내용을 반영하게 된다. 즉, 상태가 변할 때마다 UI도 함께 업데이트되는 위젯이 바로 StatefulWidget이다. 그렇기 때문에, 사용자와의 상호작용을 통해 변화가 생기는 경우(예: 버튼 클릭, 입력값 변경 등)에는 StatefulWidget을 사용하게 ..