본문 바로가기

전체 글57

트래픽을 안정적으로 처리하려면 어떻게 해야할까? - 01 읽기 부하 공부하다보면 트래픽 대응이 어느 정도 패턴화 되어있다는 생각이 든다. 내용을 정리도 할 겸, 이와 관련된 고민을 하는 누군가에게 도움이 되었으면 해서 글을 작성해본다.정답이 아니며, 어떤 문제들이 발생하며 비상 사태가 발생했을 때 평소 어떤 부분에 관심을 가져야 문제 해결을 빠르게 할 수 있을지 힌트가 되었으면 한다.3-tier architecture를 배경으로 가정하고 글을 작성하였다.트래픽이라고 묶어서 호칭하지만, 서비스에 가해지는 부하는 읽기/쓰기에 따라 해결책이 나뉘어 진다.문제를 인지할 수 있어야 하고, 이를 위한 모니터링 환경이 필수로 준비되어 있어야 한다.모니터링을 토대로 서비스의 병목 지점을 찾아야 한다.읽기 부하 해소하기서버 스펙을 어떻게 구성했냐에 따라 다르겠지만, 소규모 서비스에서도 .. 2024. 10. 27.
Udemy - Java 멀티스레딩, 병행성 및 성능 최적화 - 전문가 되기 수강 후기 글또 9기에서 지원받은 Udemy 강의에 대한 리뷰입니다. (강의를 제공받고 리뷰를 작성하는 조건) Udemy의 [【한글자막】 Java 멀티스레딩, 병행성 및 성능 최적화 - 전문가 되기] 강의에 대한 수강 후기입니다. (https://www.udemy.com/course/java-multi-threading) 강의 대상 (강의 설명에 써있는 내용)배울 내용Java에서 잘 설계된 올바른 멀티스레드 애플리케이션을 자신 있게 구축하는 방법현대 소프트웨어 아키텍처 및 스레드를 이용한 난이도가 낮은 수준의 프로그래밍에 대한 전문가 수준의 실무 지식클라이언트에게 사랑 받는, 성능과 반응성이 좋은 애플리케이션을 만드는 방법병행성 및 병렬 실행 프로그래밍을 이용해 컴퓨터와 Java 언어를 활용하는 방법이 과정의 대상.. 2024. 5. 13.
Udemy - 개발자 영어 수강 후기 글또 9기에서 지원받은 Udemy 강의에 대한 수강 후기입니다. (강의를 제공받고 리뷰를 작성하는 조건) Udemy의 [개발자 영어] 강의에 대한 수강 후기입니다. (https://www.udemy.com/course/devenglish) 세 줄 평주니어 개발자 영어 학습, 활용 팁에 가깝다.내용은 좋으나 제목과 안맞는다.제목을 바꾸면 4/5점, 아니면 2/5점 강의 대상(강의 설명에 써있는 내용)배울 내용효율적인 영어 독해 방법을 배우게 됩니다.프로그래밍 과정에서 영어로 이름 짓는 방법과 주석/커밋/오류 메시지를 제대로 만드는 방법을 배우게 됩니다.검색 엔진을 활용하고 문제 해결을 위한 효과적인 검색 방법을 배우게 됩니다.좋은 질문과 좋은 대답의 특성을 확인하고 실제 공동체를 활용하는 방법을 배우게 됩.. 2024. 5. 12.
1분기 회고같은 글또 9기 돌아보기 이번이 벌써 네 번째 글또인 9기의 마지막 글이다. (중간에 구멍이 좀 있지만) 완주를 기념으로 지원서와 제출했던 글들을 돌아보고 회고해보려 한다. 간단히 타임라인으로 쭉 적어봤다. 글또 9기 지원 이전까지 나에게 글또는 2주에 한 번 글을 작성해야하는 모임... 정도의 느낌이었다. 글의 질도 중요하지만 양적인 부분을 채움으로써 이룰 수 있는 성장이 있다고 생각하고, 글또를 통해 양을 채워 성장을 이루는게 목표였다. 나는 6기부터 글또에 참여했고, 이번 기수(9기)는 4번째였다. 지원서 질문지에 목표가 뭔지 물었는데, 나는 “꾸준함”을 키워드로 적었다. 이번 9기를 통해 양을 채우는 시스템을 만들어보는게 목표였다. 이 꾸준함을 달성하기 위한 Action plan도 세웠다. 퇴근 전 글쓰기 (하루 업무 정.. 2024. 4. 14.
Spring Boot 애플리케이션 docker 이미지 크기 줄여보기 도커 교과서 책을 읽고 Spring Boot 애플리케이션을 빌드하는 과정을 최적화 해봤다. 간단한 Dockerfile에서 조금씩 발전시키는 형태로 글을 작성했으며, 글에서 등장하는 명령어를 실행한 프로젝트는 Spring-initializr를 통해 생성한 간단한 프로젝트를 베이스로 사용했다. 불필요한 기능이 빠지면 이는 자연스레 보안 위협 감소로 이어진다. 때문에 작은 사이즈의 이미지로 시작해서 필요한 기능만 추가하는 방향으로 나아가는 것이 옳다. 나의 첫 Dockerfile을 되짚어 보면 아마 이런 식으로 작성했던 것 같다. # 베이스 이미지 설정 FROM gradle:8.6-jdk21 # 작업 디렉토리 설정 WORKDIR /app # 모든 파일 복사 COPY ./ /app # 애플리케이션 빌드와 JAR.. 2024. 3. 31.
초간단 TLS, mTLS, E2EE 스터디 중 mTLS라는 키워드를 접했다. TLS, E2EE와 어떤 차이점이 있는지 궁금해 찾아보게 되었고 간단히 정리해본다. mTLS는 mutual TLS의 약자로 양방향 TLS를 수행하는 “상호 인증”으로 이해하면 된다. mTLS를 알기 위해 TLS를 알아야 하고, TLS를 알기 위해선 공개 키 암호화를 알아야 한다. 공개 키/대칭 키 암호화와 TLS (Transport Layer Security) 공개 키 암호화 암호화: 원본 데이터를 알아볼 수 없게 바꿈 / 복호화: 다시 데이터를 원본으로 만듦 비대칭 암호화라고도 불리는 공개 키 암호화 방식은 공개 키와 비밀 키를 만들고(각 1개씩 2개), 공개 키는 외부에 공개, 비밀 키는 내부에서만 사용하는 방식으로 이루어진다. 복호화에 사용하는 키와 암호화에.. 2024. 3. 17.
HTTP 쿠키와 보안 그리고 CSRF 이 글에서는 백엔드 개발자 입장에서 쿠키를 사용하기 위해 알아야 하는 기초적인 지식을 다뤘습니다. 쿠키란 무엇인가 쿠키란 웹 사이트가 사용자의 웹 브라우저에 저장하는 작은 데이터 조각이다. 사용자가 사이트를 방문할 때마다 웹 서버로 전송되어 사용자의 이전 활동, 로그인 상태 등을 기억하게 해준다. 쿠키의 주요 목적은 웹 상에서 사용자의 상태를 유지하는 것이다. 왜 상태를 유지해야 할까? 웹 사이트가 데이터를 주고받는 HTTP 통신은 Stateless 프로토콜이다. 각 요청은 독립적이고 서로 상태를 공유하지 않는다. 이러한 특성은 설계를 단순화 시키지만 클라이언트의 이전 요청을 기억하지 않기에, 사용자의 상태를 유지하기 위한 추가적인 메커니즘이 필요하게 된다. 이 상태 유지를 돕는게 쿠키이다. 쿠키는 st.. 2024. 2. 18.
JWT 겉핥기 회사에서 마주치게 되는 기술들을 가볍게 익히고 조금씩 깊이 들어가는 순으로 공부해보려 한다. 이 글에서는 왜 쓰는지, 어떤 장단점이 있는지보다는 어떻게 쓰는지에 초점을 맞춰 글을 작성한다. JWT란? JSON Web Token의 약자로, 정보를 안전하게 전송하기 위한 토큰 기반 인증 및 권한 부여 개방형 표준(RFC 7519)이다. 이름에서 알 수 있듯, JSON 형태로 이루어진 토큰이다. 종종 JWT 토큰이라고 읽기도 하는데 올바른 표현은 아니다. (JSON Web Token Token이라는 의미가 됨) 구성 JWT는 헤더(Header), 페이로드(Payload), 서명(Signature) 세 가지 부분으로 구성된다. 세 부분을 하나로 이어 하나의 문자열을 만든다. 최종 형태는 xxx.yyy.zzz 형.. 2024. 2. 4.
Spring Boot Cache 사용하기 사전 준비 starter를 사용하여 프로젝트를 생성할 때 Spring Cache Abstraction을 추가해준다. build.gradle에 아래 의존성이 추가된다. implementation 'org.springframework.boot:spring-boot-starter-cache' 사용 방법 사용 방법은 굉장히 간편하다. 캐시를 활성화하기 위해 @EnableCaching 어노테이션을 추가한 후, 캐시를 사용하고싶은 메서드 위에 @Cacheable 어노테이션을 추가해주면 된다. @EnableCaching @Configuration public class CacheConfig { } @RequiredArgsConstructor @Service public class BookService { privat.. 2023. 12. 10.