| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코틀린
- DevOps
- 자바
- OOP
- entity
- Stream
- Configuration
- javamailsender
- Spring Boot
- kotlin
- CI/CD
- Kubernetes
- 스프링 부트
- devpi
- java
- Token
- map
- JWT
- 토큰
- BEAN
- springboot
- 객체지향
- Component
- 오블완
- JPA
- 티스토리챌린지
- JPQL
- Spring
- 소프트웨어설계
- SpringFramework
- Today
- Total
목록전체 글 (62)
DeveloPiano
이전에 작업할때 기존에 개발되어 있던 페이지의 조회시간이 20초에서 40초 정도로 너무 오래걸리는 곳이 있었다.그냥 단순 DB 조회인데 왜이렇게 오래걸리지? 하며 궁금해졌고 원인을 찾아보았다. 쿼리문을 살펴보니 조회문의 조건절은 간단했다 그 중 날짜 관리하는 컬럼도 있었고 이 컬럼에는 인덱스 설정이 되어 있었다.그러나 쿼리문에는 이 날짜 컬럼에 day_only 라는 함수가 씌워져 있었고 그로인해 값이 변해 인덱스를 조회하지 못하고 모든 데이터를 전부 조회해가며 찾고 있는거 아닌가 하는 의심이 들었다.바로 함수를 제거하며 쿼리를 수정하고 조회해보니 조회시간이 3~10초로 줄어든 것을 확인할 수 있었다.문득 이 사례가 떠올라서 DB 인덱스 라는 것에 대해 정리를 해볼까 한다.인덱스란DB 인덱스란 데이터베이스..
1. 들어가며개발을 하다보면 HTTP 라는 용어를 쉽게 접할 수 있다. 그런데 TCP 라는 용어는 개인적으로 잘 접하지 않았던거 같았고 그러다보니 '저런게 있구나' 식으로 인지만 하고 있었지 정확히 무엇이고 또 어떤 역할인지 명확하게 알지 못하고 있었다.그러던 어느날 HTTP 와 TCP 의 차이점에 대해 생각해보는 시간이 생겼는데 그때 되어서야 'TCP가 뭐지?' 부터 시작해서 '관련성이 있던 거구나'로 오게되어 이번 기회에 한번 알아보았다. 2. HTTP와 TCP는 하는 일이 다르다HTTP란 간단히 말해 브라우저에서 서버로 필요한 정보를 요청하여 응답받기 위한 통신이고 TCP란 브라우저와 서버가 서로 주고받을 수 있게 연결되었는지 확인하고(양방향 통신) 데이터를 주고받는 동안 유실된 데이터가 없는지 추..
현업에서 DevOps 아키텍처를 처음 접하면 Terraform, Kubernetes, Helm, ArgoCD 등 처음 보는 도구들이 나열돼 있어서 당황하기 쉽다. 나도 처음에는 이렇게 생각했다.“그냥 GitHub Actions로 서버에 배포해도 잘 되는데, 굳이 이렇게 복잡하게 갈 필요가 있을까?”하지만 구조를 하나씩 따라가다 보니, 왜 이런 방식이 필요한지 자연스럽게 이해가 됐다. 그래서 이번 글에서는 내가 실제로 공부하면서 이해한 DevOps 아키텍처를 정리해 보려고 한다.1. DevOps 전체 아키텍처를 처음 봤을 때 느낌처음 접한 아키텍처 흐름은 대략 이런 느낌이다.Terraform이 AWS 인프라를 코드로 만든다.만들어진 인프라에 Ansible이 설정을 자동으로 깔아준다.Kubernetes 위에..
최근 서버에서 외부 SMTP 서버로 메일을 발송하는 과정에서TLS Handshake 단계에서 연결이 즉시 종료되는 문제가 발생했다. 초기에는 방화벽 또는 메일 서버 측 문제로 예상했지만,최종적으로는 IPv6 경로에서 TLS 통신이 지원되지 않는 도메인 제공 업체의 네트워크 환경 문제,그리고 SMTP EHLO 인사문자(IP 표기 문제) 가 복합적으로 작용한 것이 원인이었다.정리 차원에서 해당 문제를 해결하기까지의 과정을 기록한다.1. 문제 발생 상황운영 서버에서 다음 SMTP 서버를 이용해포트 465(SSL/TLS)로 메일을 전송하려고 할 때 다음 현상이 반복되었다.도메인 이름으로 연결 시도 → TLS Handshake 즉시 종료SSL 인증서도 내려오지 않음클라이언트 로그:no peer certificat..
Java에서 Map을 사용할 때, 특정 키가 존재하지 않을 때만 값을 넣고 싶을 때가 있습니다. 이럴 때 유용하게 사용할 수 있는 메서드가 바로 putIfAbsent()입니다.이번 글에서는 putIfAbsent()가 어떤 메서드인지, 언제 유용한지, 그리고 일반적인 put()과는 어떤 차이가 있는지를 알아보겠습니다.1. putIfAbsent()란?putIfAbsent()는 Java 8부터 사용 가능한 ConcurrentMap 인터페이스의 메서드이자, 이후 일반 Map 구현체에서도 활용되는 방식입니다."해당 키가 존재하지 않으면 값을 넣고, 존재하면 아무것도 하지 않는다."Map map = new HashMap();map.put("language", "Java");map.putIfAbsent("langua..
Spring을 처음 접하면 다양한 어노테이션들과 빈(bean), 의존성 주입, 그리고 리졸버 등 익숙하지 않은 개념들이 한꺼번에 등장해 혼란스럽기 쉽습니다. 이번 포스팅에서는 @Component, @Configuration 그리고 HandlerMethodArgumentResolver(커스텀 리졸버) 같은 핵심 개념들을 정리해 보겠습니다.1. 스프링 빈(Bean)과 @Component의 의미스프링 빈이란?스프링 컨테이너가 생성하고 관리하는 객체를 빈(Bean) 이라고 부릅니다. 이 객체들은 기본적으로 싱글톤(하나만 생성)으로 관리되며, 필요한 곳에 자동으로 주입됩니다.@Component@Component는 "이 클래스를 스프링 빈으로 등록해 주세요"라는 의미의 어노테이션입니다. 스프링은 컴포넌트 스캔(Co..
웹 개발을 진행하다 보면 프론트엔드와 백엔드가 완전히 분리된 SPA(Single Page Application) 구조가 아닌, HTML, CSS, JS 파일이 모두 resources 하위에 위치한 전통적인 Spring Boot 구조를 마주하게 됩니다.이런 구조는 일반적으로 다음과 같이 불립니다:모놀리식 아키텍처(Monolithic Architecture)멀티 페이지 애플리케이션(MPA)서버 사이드 렌더링(SSR: Server-Side Rendering) 방식즉, 하나의 애플리케이션에서 뷰 렌더링과 API 처리를 모두 담당하는 구조입니다. 서버가 직접 HTML을 생성해 클라이언트에 전달하고, 사용자는 요청할 때마다 새로운 HTML 페이지를 받는 방식입니다.form action 기반 vs JavaScript..
Spring JPA로 개발을 하다 보면 new Entity()를 통해 엔티티 객체를 직접 생성하고 싶은 유혹에 빠지기 쉽습니다. 그런데 실무에서는 보통 이렇게 하지 않도록 유도하거나 제한을 둡니다. 왜 그런 걸까요?이번 글에서는 다음과 같은 내용을 중심으로 정리해보겠습니다.@NoArgsConstructor(access = AccessLevel.PROTECTED)를 사용하는 이유무분별한 빈 객체 생성을 피해야 하는 이유static 팩토리 메서드가 필요한 이유기본 생성자에 protected를 설정하면 어떤 문제가 발생할까?JPA에서는 기본 생성자가 반드시 필요합니다. 그런데 그 생성자가 protected여서 다음 코드가 컴파일 에러를 발생시키는 경우가 있습니다.// 컴파일 에러 발생MemberEntity e..
Vue.js를 배우다 보면 computed라는 개념을 필수적으로 마주하게 됩니다. computed는 Vue의 핵심 기능 중 하나로, 복잡한 연산을 효율적으로 처리하고 뷰(View)에 반영하는 역할을 합니다.이번 포스팅에서는 computed가 무엇인지, 왜 필요한지, 그리고 실용적인 사용법까지 알아보겠습니다.computed란?Vue의 computed 속성은 종속된 반응형 데이터에 따라 자동으로 다시 계산되는 속성입니다. 보통 기존 데이터로부터 파생된 값을 계산할 때 사용됩니다.특징종속된 데이터가 변경되기 전까지는 계산 결과를 캐싱함관련된 데이터가 변경될 때만 다시 계산함일반적인 메서드(methods)와 다르게 호출 형태가 아니라 속성처럼 접근기본 사용법 이름: {{ fullName }} 여기서 ..
소프트웨어 개발에는 다양한 프로그래밍 패러다임이 존재합니다. 그 중에서도 객체지향 프로그래밍(OOP, Object-Oriented Programming)과 함수형 프로그래밍(FP, Functional Programming)은 대표적인 두 가지 방식으로 널리 사용됩니다.이 글에서는 두 패러다임의 개념과 철학, 그리고 주요 차이점에 대해 정리해 보겠습니다. 어떤 상황에 어떤 패러다임이 적합한지 판단하는 데 도움이 될 것입니다.객체지향 프로그래밍(OOP)이란?객체지향 프로그래밍은 현실 세계의 사물(객체)을 코드로 모델링하는 방식입니다. 프로그램을 **데이터(상태)**와 **행동(메서드)**을 포함한 객체들의 상호작용으로 구성합니다.핵심 개념클래스와 객체: 클래스는 설계도, 객체는 그 설계도로 만든 실체캡슐화(..
