전체 글 243

[Spring] HttpSession과 Session Clustering

세션(Session)은 다양한 의미로 사용됩니다. 터미널에서의 세션, 웹에서의 세션 등 여러 맥락에서 세션은 상태를 유지하기 위한 방법을 제공합니다. 이 글에서는 Spring에서의 세션 동작 방식과 세션 클러스터링(Session Clustering)에 대해 다뤄보겠습니다.HttpSessionHTTP 프로토콜은 본질적으로 무상태(Stateless) 프로토콜이다. 이는 각 요청이 독립적으로 처리되며, 서버가 특정 사용자의 요청 순서나 상태를 기억하지 않는다는 의미이다. 즉, 사용자는 매 요청마다 자신의 신원을 식별할 수 있는 정보를 서버에 전달해야 한다.HTTP 요청이 상태를 유지하지 않기 때문에, 서버와 클라이언트는 추가적인 메커니즘을 통해 상태를 유지해야 한다. 이때 가장 많이 사용하는 방법이 쿠키(Co..

Development/Spring 2024.08.06

공부하며 얻은 잡다한 지식들 (2024.09.13 update)

기술적 내용보다는, 개발하면서 뭔가 편리한? 사람마다 다른? 이렇게 구현된 숨은 이야기들? 등 잡다한 것들을 적어놓는 글 입니다.QueryDSL은 주로 READ, JPA는 나머지를 쓰는 편이다.IntelliJ에서 하나의 창에서 여러 Gradle을 추가할 수 있다. 이를 통해 한 번에 여러 패키지 관리가 가능하다.Window는 파일 확장자를 3글자로 맞추는 걸 좋아한다. 그렇다고 application.yaml과 application.yml의 차이는 없다.spring에서 application.properties과 yml는 file encoding이 ISO-8xxx와 UTF-8 차이가 있다.맥북은 터미널에 복사 붙여넣기를 하면 서식까지 복사가 되는 경우가 있어서 '\'로 여러 명령어를 입력할 때 끝에 공백이 ..

Development/Tip 2024.08.06

[CT] 프로그래머스 2023 KAKAO BLIND RECURITMENT 택배 배달과 수거하기 java 풀이

코딩테스트 연습 - 택배 배달과 수거하기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀다가 다른 사람 풀이를 보니 현타가 와서.. 작성하는 글.다른 사람 풀이class Solution { public long solution(int cap, int n, int[] deliveries, int[] pickups) { long answer = -1; int deliver = 0, pickup = 0; for(int i = n-1; i >= 0; i--){ ..

Development/PS 2024.08.06

[Redis] Redis 기초

Redis는 매우 빠른 성능과 다양한 기능으로 인해 현대적인 애플리케이션 개발에서 중요한 역할을 하고 있습니다. 이 글에서는 Redis가 무엇인지, Redis의 특징과 활용 사례를 살펴보고자 합니다.RedisRedis는 REmote DIctionary Server의 약자로, 데이터를 키-값 쌍으로 저장하는 인메모리 데이터베이스이다. 이는 Java의 Map 인터페이스와 비슷한 방식으로 데이터를 저장하고 조회할 수 있는 기능을 제공한다. Redis는 단순한 키-값 저장소를 넘어서 다양한 데이터 구조를 지원하며, 고성능과 유연한 사용성을 제공하는 것으로 널리 알려져 있다.Redis의 특징인메모리 데이터베이스Redis는 데이터를 메모리(RAM)에 저장하는 인메모리 데이터베이스이다. 이로 인해 디스크 기반 데이터..

Development/Tip 2024.08.05

이벤트 드라이븐 아키텍처와 메세지 큐

이벤트 드리븐 아키텍처(Event-Driven Architecture, EDA)는 시스템에서 발생하는 이벤트(상태 변화나 행동)를 기반으로 동작하는 소프트웨어 설계 스타일입니다. 이는 비동기적으로 이벤트를 처리하며, 대규모 시스템에서 대용량 트래픽을 효과적으로 처리하고 서비스 간의 느슨한 결합을 통해 독립적으로 동작할 수 있도록 합니다. 이 글에서는 이벤트 드리븐 아키텍처의 주요 개념, 장점과 단점, 그리고 이를 실제로 구현할 때 사용하는 RabbitMQ와 Kafka에 대해 다룹니다.전통적인 요청-응답 모델의 한계동기적 통신:전통적인 아키텍처는 주로 HTTP와 같은 동기적 요청-응답 모델을 사용한다.클라이언트가 요청을 보내면 서버는 요청을 처리한 후 응답을 반환한다. 이 방식은 클라이언트가 응답을 기다리..

Development/Tip 2024.08.02

[Diary] AWS EC2에서 겪은 포트포워딩 문제: 리눅스 네트워크 인터페이스 eth0와 enX0

AWS EC2 인스턴스를 사용하여 웹 애플리케이션을 배포할 때, 퍼블릭 IPv4 DNS 주소를 통해 애플리케이션에 접속할 수 있습니다. 하지만 사용자는 종종 주소 끝에 애플리케이션이 동작하는 포트 번호를 추가해야 합니다. 이 문제를 해결하기 위해 포트포워딩을 설정하여 포트를 입력하지 않으면 자동으로 웹 서버 포트로 리디렉션 하도록 하려 했으나, 네트워크 인터페이스 이름을 잘 못 설정하여 동작하지 않았습니다. 이 글에서는 AWS EC2에서 포트포워딩 설정 중 발생한 문제와 그 해결 과정을 공유하고자 합니다.문제 상황 재현: EC2에 접속하여 포트포워딩 진행포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 80포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩 명령어를 다음과 같이 입력하였다.s..

Development/Diary 2024.08.01

[Spring] MSA와 Spring Cloud

현대의 소프트웨어 개발은 급변하는 요구사항과 복잡한 시스템 구조로 인해 기존의 모놀리식 아키텍처로는 대응하기 어려운 상황에 직면해 있습니다. 이러한 문제를 해결하기 위해 등장한 개념이 바로 마이크로서비스 아키텍처(MSA, Microservices Architecture)입니다.MSA는 애플리케이션을 작은 독립적인 서비스로 분리하여 개발, 배포, 확장이 용이하게 합니다. 이를 통해 개발팀은 민첩성을 높이고, 시스템의 안정성과 유연성을 확보할 수 있습니다. 하지만 MSA의 도입은 단순히 아키텍처를 나누는 것만으로는 충분하지 않습니다. 각 마이크로서비스 간의 통신, 구성 관리, 서비스 디스커버리 등 다양한 운영 문제를 효율적으로 해결하기 위한 툴과 프레임워크가 필요합니다.Spring에서 Spring Cloud..

Development/Spring 2024.07.31

[Tip] 소프트웨어 버전 번호 별 의미

소프트웨어 버전 관리에서 버전 번호는 일반적으로 세 자리의 숫자로 구성되며, 각 숫자는 각각 주 버전, 마이너 버전, 패치 버전을 나타냅니다. 버전 번호의 구성형식: 주 버전.마이너 버전.패치 버전 (Major.Minor.Patch)주 버전 (Major)의미: 주 버전의 변경은 대규모 업데이트나 중요한 변경 사항을 나타냅니다. 이는 API의 호환성을 깨트릴 수 있으며, 이전 버전과의 역호환성을 보장하지 않을 수도 있습니다.변경 이유: 완전히 새로운 기능이나 아키텍처 변경, 혹은 기존의 기능을 크게 변경하여 사용자나 다른 소프트웨어가 큰 영향을 받을 수 있는 경우 주 버전이 증가합니다.예시: 1.0.0에서 2.0.0으로의 변경은 소프트웨어가 근본적으로 많이 변했고, 사용자는 코드 수정이 필요할 수 있음을 ..

Development/Tip 2024.07.31

[Diary] 지저분한 Service 메서드 코드 Command DesignPattern 적용기

이 글에서는 설문조사 웹 애플리케이션 개발 프로젝트에서 서비스 레이어 메서드의 로직이 가독성이 떨어지고, 유지보수가 어려운 상황을 개선하기 위해 Command 디자인 패턴을 적용한 경험을 공유하고자 합니다.Command 패턴Command 패턴은 행동 패턴 중 하나로, 요청을 객체의 형태로 캡슐화하여 여러 가지 다른 요청이 나중에 필요할 때 실행되거나 취소될 수 있도록 하는 패턴이다. 이 패턴을 사용하면 요청하는 객체와 요청을 수행하는 객체 사이의 결합을 느슨하게 만들 수 있다.Command 패턴의 핵심 아이디어는 작업을 요청하는 객체를 독립적으로 처리할 수 있게 하는 것이다.Command 패턴의 구성 요소Command 인터페이스:실행될 동작을 정의하는 인터페이스이다. 일반적으로 execute() 메서드를..

Development/Diary 2024.07.22

[Spring] MVC 패턴과 Spring MVC

이 글에서는 웹 애플리케이션에서 흔히 사용되는 디자인 패턴인 MVC 패턴과, Spring 에서는 어떻게 이 패턴을 구현하는지에 대해 알아보고자 합니다.디자인 패턴: MVC 패턴MVC란 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나이다.MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리한다.Model데이터와 비즈니스 로직을 담당한다.데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행한다.View사용자 인터페이스를 담당한다.사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현한다.ControllerModel과 View 사이의 상호작용을 조정하고 제어한다.사용자의 입력을 받아 Model에 전달..

Development/Spring 2024.07.22