코스의 마지막 파트인 메인 프로젝트를 시작하기 전, Pre-Project가 시작되었다. 이 프로젝트는 메인 프로젝트 시작 전 맛보기와 같은 파트이다. 프로젝트의 주제는 stackoverflow 사이트와 비슷한 질문 게시판을 만드는 것으로 정해져 있었다. 첫 프로
A software requirements specification (SRS) is a document that describes what the software will do and how it will be expected to perform. It also des
인증을 구현하다가 문득 로그아웃은 어떤 http 메서드를 사용해야하는지에 대해 의문이 들었다.로그인의 경우 지금까지 자연스럽게 POST 메서드로 요청을 받도록 구현해왔지만, 로그아웃의 경우 GET으로 작성하면서도 맞는건지 확신이 들지 않았다.그래서 찾아봤다.결론부터 말
메인 프로젝트의 경우 현직 개발자 멘토분이 지정되어 코드 리뷰를 해주셨다. 주변에 개발자로 일하는 지인이 없었기 때문에, 코드 리뷰를 통해 실무에 대한 이야기를 조금이나마 접할 수 있었다. 또한 실제로 코드 리뷰를 진행하는 기업들이 많기 때문에 코드 리뷰를 미리
Please set `java.io.tmpdir` property like following. tmpdir should be different from the OS default tmpdir. `java -Djava.io.tmpdir=${NGRINDER_HOME}/li
협업 시 코드의 안정성은 가장 중요한 요소 중 하나이다.여러 사람이 코드를 수정하기 때문에 다른 사람이 수정한 코드로 인해 테스트에 실패할 수 있다. 또한 내가 작성한 코드가 테스트를 통과하는지 다른 사람은 알 수 없다. 신뢰도, 안정성이 보장되지 않은 상태로 merg
Git Submodule 적용 계기 application.yml과 같은 설정 파일에는 DB 접속 정보, secret key 등 민감한 정보가 들어있기 때문에, 일반적으로 .gitignore를 통해 repository에 올라가지 않도록 한다.
대부분의 서비스는 회원 가입 시 환영인사/서비스 소개 등의 정보가 포함된 이메일을 전송한다. 이때, 회원 가입과 이메일 전송 비즈니스 로직을 함께 관리하면 어떤 문제가 생길까?현재 구현하려는 로직에서 높은 결합이 생길 경우 발생할 수 있는 문제는 다음과 같다.기본적인
Inline Embedding inline embedding은 이미지를 Base64로 encode하고, 이를 img 태그에 입력하는 방식이다. 하지만 inline embedding은 용량이 커지며, 많은 email client에서 Base64 encoded 이미지
이전 포스팅 >Spring Cache 적용으로 읽기 성능 최적화하기 (2) 이번엔 게시글에 대한 캐싱이다. 게시글 캐싱의 경우 마이페이지에 비해 고려해야할 사항이 많았다. 조회수 증가 좋아요 추가 이 두가지 요청은 빈번하게 일어나며, 이에 따라 게시글의 상태는 변
redis에 객체(dto)를 저장할 때 serializer를 통해 직렬화해주어야 한다.이 때, 선택할 수 있는 여러가지 직렬화 방법이 존재한다.Class Type을 지정해야 하며, redis에 객체를 저장할 때 class 값 대신 Classy Type 값을 JSON 형
Cache 적용으로 읽기 성능 최적화하기 1편나는 마이페이지와 게시글에 캐싱을 적용할 생각이다. 이유는 다음과 같다.마이페이지 조회가 빈번하게 일어난다.내가 개발하고 있는 서비스의 특성 상(운동 기록 플랫폼), 마이 페이지에 운동 기록과 인증 뱃지 등이 존재하기 때문에
캐시를 적용하면 읽기(조회) 성능을 향상시킬 수 있다.RDB의 경우, disk에 접근해야하기 때문에 상대적으로 연산 수행이 오래 걸린다. 반면 redis와 같은 캐시는 메모리에서 동작하기 때문에 상대적으로 빠르게 연산을 수행할 수 있다.일반적인 캐싱 동작 방식은 다음과
🚀 Pipeline 구축 Jenkins Item이란? >Jenkins에서 CI/CD 파이프라인은 Item을 통해 구성할 수 있다. Item을 여러개 생성해 여러개의 파이프라인을 생성할 수도 있으며, 각각의 파이프라인은 각각 작성된 pipeline script를
Jenkins의 장점 https://docs.docker.com/engine/install/ubuntu/ 최초 비밀번호 입력 최초에는 Administrator password를 입력해야 한다. 이 password는 /var/jenkins_home/secrets
회원의 누적 운동 시간을 포함하는 요청이 왔을 때, Dto에서도 totalRecord 필드를 바로 반환하고 있었다.스프링 Bean은 Singleton으로 관리되고, 이는 애플리케이션에 딱 하나만 존재한다는 뜻이다.이때 하나의 인스턴스의 필드를 여러 thread가 동시에
회원의 프로필 이미지를 업로드하는 기능을 구현하던 도중, 이전에 사용했던 방식의 문제점을 인지하게 되었다. 서버에 파일을 저장하면 발생하는 문제 >분산 환경에 적합하지 않다. 서버에 파일을 저장하면 당연하게도 다른 서버가 존재할 경우 해당 서버에서는 파일을 사
이번 프로젝트는 유저들간에 소통이 필요한 앱이기 때문에, 요구사항에 채팅 기능이 포함되어 있다.WebSocket의 개념과 사용 방법에 대해서는 이전에 포스팅한 적이 있다.Spring에서 웹 소켓(WebSocket) 사용하기Spring Scheduler에 대한 기본 사용
채팅 기능 구현하기 (1) - feat. Redis Pub/Sub, Scheduler채팅 기능을 구현하고, 채팅을 Redis 메모리에 저장하고, 일정한 주기에 따라 RDB와 Redis를 동기화하는 작업까지 마쳤지만, 하지만 여전히 고치고 싶은 부분이 있었다.바로 채팅