분류 전체보기 (33) 썸네일형 리스트형 Spring Websocket Trobleshooting!! (feat. Decorator Pattern) 글을 쓰게된 배경 Spring Websocket을 공부하기 위해 간단한 채팅서버를 만들기로 결정했다. 처음에 생각했던 것과 다르게 직접 찾아보니, 너무나 쉽게 채팅서버를 만들 수 있었다. (물론 간단한 채팅서버다.) 채팅서버를 만드는 과정은 Spring 공식 문서와 블로그 글들을 참고했다. 만드는 과정은 간단했지만, 채팅서버가 내가 원하는대로 동작하지 않았다. 문제를 해결하기 위해 공식 문서와 코드를 참고했고, 원인을 찾아 문제를 해결했다. 이 과정에서 배운점들을 기록하고 공유하고 싶어 글로 남기게 됐다. 만난 문제 Spring 공식문서를 참고하면 정말 몇 줄 안되는 코드로 간단한 채팅서버를 만들 수 있다. 추가로 블로그 글도 많은 도움이 되었다. 위 링크의 내용을 간략하게 요약하면 다음과 같다. 1. .. 좋은 Software Engineer가 되기 위한 태도 최근에 더 좋은 Software Engineer가 되려면 어떻게 해야 할까 고민이 많아졌다. 그러다 우연히 좋은 글을 발견했다. 이를 기록하고 공유하고 싶어 글을 쓰게 되었다. 이 글은 원본 글을 한국어로 해석하고 마지막에 내 의견을 덧붙인 글이다. 나와 비슷한 고민을 하시는 분들께 조금이라도 도움이 됐으면 좋겠다. 원문 : https://www.linkedin.com/pulse/16-things-practice-become-better-software-architect-ahad-khan-csm/ 16 things to practice to become a better software architect Dear Curious Learners, Richard Monson-Haefel famously quo.. Spring Cloud GateWay의 non-blocking server Spring Cloud GateWay를 사용한 프로젝트를 진행하면서 로깅을 통해 내부적으로 netty가 사용되는걸 확인했다. 하지만 netty가 무엇인지 정확한 개념이 없었다. 그래서 관련 내용을 공부했고 해당 내용을 공유하려한다. 공식문서에 따르면 Spring Cloud GateWay는 Spring WebFlux 위에서 동작한다. This project provides a library for building an API Gateway on top of Spring WebFlux Spring WebFlux의 중요한 특징 중 하나는 non-blocking server를 사용한다는 것이다. 여기서 궁금증이 생겼다. non-blocking server와 blocking server의 차이점은 무엇이고, sp.. @SpringBootTest의 비밀! Spring과 JUnit을 사용해 개발하면서 통합 테스트를 위해 @SpringBootTest를 많이 사용해왔다. 하지만 누군가 @SpringBootTest에 대해 물어보면 Spring의 통합 테스트를 도와주는 애노테이션이라고 밖에 말할 수 없었다. 그래서 @SpringBootTest가 정확히 어떤 기능을 제공하고 내부적으로 어떻게 동작하는지 궁금해졌다. 이번 글을 통해 공부한 내용을 공유하겠다. 공식문서에서 설명하는 @SpringBootTest 가장먼저 공식문서를 통해 정확히 어떤 기능을 제공하는지 알아봤다. Annotation that can be specified on a test class that runs Spring Boot based tests. Provides the following fea.. Git Submodule 이용해 중요 정보 관리하기 팀 프로젝트를 진행하다 보니 설정 파일에 AWS 비밀번호, JWT secret key와 같이 중요한 정보들이 들어가게 됐다. 우리 팀은 GitHub을 이용해 소스 코드를 관리하고 있었다. 이런 중요한 정보를 GitHub에 올리면 문제가 발생할 것 같았다. 문제를 해결하기 위해 프로젝트에서 중요한 정보를 관리하는 다양한 방법에 대해 알아봤다. 그 결과 Git Submodule을 이용해 중요 정보를 관리하게 됐다. 이 과정에서 한 고민과 Git Submodule 사용 꿀팁과 주의할 점을 공유하겠다. 중요 정보 관리하는 다양한 방법 중요 정보 관리하는 방법은 크게 4가지 존재한다. 첫 번째는 Jasypt(Java Simplified Encryption)를 이용해 중요 정보를 암호화할 수 있다. 중요한 정보를 .. Linkocean 프로젝트 회고 2022.07.21 ~ 22022.8.16까지 기획과 첫 번째 버전의 Linkocean 서비스를 개발했다. Linkocean 서비스는 소셜북마킹 서비스다. Linkocean 서비스를 개발하면서 좋았던 경험과 아쉬웠던 경험을 공유하려 한다. 좋았던 경험 Querydsl 제대로 사용하기 (feat : 테스트 코드의 중요성) Linkocean은 사용자가 원하는 북마크를 쉽게 찾을 수 있게 하려면 다양한 필터링 기능을 개발해야 했다. 다양한 필터링 기능을 순수 JPQL을 이용하면 중복 코드가 많아지는 단점이 있어 Querydsl을 사용했다. 하지만 Querydsl에 익숙하지 않아 첫 버전의 코드는 Querydsl의 장점 중 하나인 동적 쿼리를 제대로 활용하지 못했다. 그 결과 아래 그림과 같이 수많은 메서드가 .. [JWT 로그인 구현기] (3) Redis 도입하기 전편에서 refresh token을 MySQL에 저장했다. 그런데 내가 개발한 애플리케이션에서는 사용자 로그인, 토큰 재발급 요청이 들어올 때마다 refresh token 값이 수정된다. 쉽게 말해 MySQL IO 연산이 너무 자주 일어난다. 이는 성능적으로 문제가 있음을 느꼈고 개선하고 싶었다. 그래서 이번 편에서는 전편에서 생긴 성능 문제를 해결하기 위해 고민하고 공부한 내용을 공유하려 한다. Redis 성능에 대해 문제가 생길 것 같다고 생각한 이유는 MySQL은 데이터를 SSD, HDD에 저장하기 때문이다. 성능을 어떻게 올릴 수 있을까 고민하고 공부하면서 Redis를 알게 됐다. Redis? Redis는 Remote Dictionary Server로 key-value로 데이터를 저장하는 서버이다.. [JWT 로그인 구현기] (2) JWT 로그인 개발하기 전 편에서 사용자 인증 방식으로 Token 기반 방식인 JWT를 이용해 로그인 기능을 개발했다. 그리고 멘토님께 받은 피드백으로 글을 마무리했다. 이번 글에서는 멘토님께 받은 피드백을 계기로 JWT를 이용한 로그인 기능을 고도화하면서 고민한 내용을 공유하려고 한다. Jwt 반환 방식 처음 개발한 JWT 로그인에서는 발급한 JWT를 어떻게 클라이언트로 보낼지 고민하지 않고 헤더에 'token'이라는 이름으로 반환했다. 이 부분을 멘토님께 피드백을 받고 관련 내용을 공부하면서 적합하다고 생각하는 방식으로 수정했다. JWT를 내려주는 방식으로 응답 메시지의 바디, 헤더, 쿠키로 3가지 선택지가 존재한다. 선택에 있어 중요한 부분은 JWT를 클라이언트가 안전하게 보관할 수 있을지다. 선택을 위해 3가지 방법의 .. 이전 1 2 3 4 5 다음