세션 방식 로그인 세션은 인증된 사용자의 정보를 SESSION ID와 매핑하여 서버에 저장하고 클라이언트에게 식별자와 문자열로 이루어진 SESSION ID를 응답헤더에 넣어 전송한다. 매 응답마다 SESSION ID 만 보내기때문에 네트워크 부하가 커지지 않고 서버에 저장되므로 클라이언트의 웹브라우저의 호환성 문제가 해결된다. 그리고 많은 정보의를 유지할 수 있게 된다. 하지만 서버에 데이터 저장량이 많아지므로 서버 메모리에 부담이 갈 수 있다. 백엔드 개발을 하다보면 로그인 구현은 필수라고 해도 과언이 아니다. 지금까지 진행했던 여러 프로젝트에서 로그인 기능이 없었던 프로젝트는 거의 없는 것 같다. 이렇게 아무렇지 않게 사용했던 세션에 대해 의문점이 생겼다. session.getAttribute("us..
무중단 배포란? 무중단 배포는 사용자에게 서비스 중단 없이 새로운 버전의 소프트웨어를 배포하는 방법입니다. 서비스를 운영 중일 때 새로운 버전을 배포하기 위해서는 1. 기존 서비스를 종료 2. 새로운 서비스 시작 두개의 프로세스를 지나쳐야 한다. 이렇게 되면 1번과 2번 사이의 과정에서 다운타임이 필연적으로 발생하며, 다운타임 동안 사용자들은 서비스를 이용할 수 없다. 이 다운타임을 해결해주는 방법이 바로 무중단 배포이다. 즉, 말그대로 중단이 없는 배포를 무중단 배포이다. 다운타임 시스템을 이용할 수 없는 시간. 무중단 배포 구현 방식에는 여러가지 기술이 존재한다. - AWS에서 Blue-Greem 무중단 배포 - 도커를 이용한 무중단 배포 - L4, L7 스위치를 이용한 무중단 배포 - Nginx를 ..
이전에 진행했던 프로젝트때도 그렇고 이번 프로젝트에도 ci-cd 파이프라인을 구축하는데 github action, AWS S3, AWS CODEDEPLOY 를 사용했다. 소프트웨어 아키텍처는 아래와 같이 구성하였다. 하지만 이는 세팅 과정이 너무 길고 복잡하다는 생각이 들었다. 더 좋은 방법이 없을까 찾아보다 Docker를 사용하기로 했고 이전과 달리 너무 편해진 파이프라인 구축 과정을 기록하기 위해 글을 쓴다. 그 전에 cicd에 대해 알아보자 CICD 란 무엇인가? CI/CD는 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는 것을 말한다. CI (Continuous Integration) CI (Continuous Int..
코드를 짜다보면 게시글과 같은 엔터티를 등록할 때 파일을 추가로 업로드하는 경우가 매우 많다. 이번 프로젝트에서도 공연 포스트를 DB에 저장하면서 썸네일 이미지와 내용에 들어갈 이미지 등이 AWS S3에 함께 저장되었다. 마찬가지로 조회할 때도 AWS S3에서 조회하는 로직과 DB에서 포스트를 조회하는 로직이 함께 수행된다. 이때 외부에서 리소스를 조회해오는 로직과 DB에서 조회해오는 로직을 한 트랜잭션에 묶으면 안 좋지 않을까?? 문득 이런 생각이 들었고 구글링 해보니 역시나 다른 사람들도 이미 고민했던 흔적들이 보였다. 왜 한 트랜잭션에 묶으면 좋지 않을까?? 트랜잭션의 특징에 주목할 필요가 있다. 한 트랜잭션이 시작되면 DB와의 커넥션을 맺고 트랜잭션이 끝날때까지 커넥션을 끊지 않는다. 아래 코드에..
이전에 했던 프로젝트들에 대해선 테스트코드는 작성하지 않았다. 작성했다 해도 왜 테스트코드를 작성하는지도 잘 모르고 대충 끄적여본게 다였다. tickerBell 프로젝트를 진행하면서 통합테스트, 단위테스트를 진행하며 완성도 높은 프로젝트를 완성해보려 한다. 우선 단위테스트에 많이 사용하는 Mock, Mockito에 대해 소개하고자 한다. Mock이란? Mock은 한글로 "모의, 가짜의"라는 뜻으로 테스트할 때 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효용성을 높이기 위해 사용한다. 예제를 보면서 왜 Mock을 사용하는지 알아보자 @Service public class StudyService { public Student getStudent() { // DB에서 study 테이블 조회 (부하..
프로젝트를 ec2에 배포해 뒀는데 자꾸 서버가 뻗는 현상이 발생했다. 처음 켰을 땐 속도도 빠르고 괜찮다가 2~3시간 뒤 접속해보면 느려져있고 다음 날 접속하면 뻗어있었다. 처음 켰을 땐 괜찮다가 시간이 지나 뻗는걸 보아 메모리 누수가 일어나나 싶었다. 그래서 찾아보게된 자바 메모리 누수(memory leak).. 메모리 누수(memory leak)란? CS 의미로 살펴볼 때, 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. JAVA는 기본적으로 Garbage Collection을 지원한다. 하지만 더 이상 사용되지 않는 객체들이 가비지 컬렉터에 의해 회수되지 않고 계속 누적이 되는 현상을 말한다. Java GC의 회수 대상이 되지 않는 경우에 대해 알아보자 1. 무의미한 Wrap..