전체 글 12

인덱스(Index) 알아보기

인덱스 이해하기인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 위 정의를 이해하기 위해 예시를 보자.500 페이지 분량의 책이 있다. 여기서 특정 원하는 내용을 찾기 위해서는 어떻게 할까?일반적으로는 직접 페이지를 넘겨 확인할 것이다. 책의 내용을 기억하고 않다면 최대 500페이지까지 확인해야 원하는 내용을 확인할 수 있다. 책에서는 이러한 불편함을 방지하기 위해 목차를 통해 독자가 찾는 내용을 쉽게 확인할 수 있다. DB의 인덱스는 책의 목차와 같은 역할을 한다. 즉, 인덱스는 특정 정보를 빠르게 찾기 위해서 사용된다. DB에서 인덱스는 왜 필요할까?테이블을 편의상 A라 가정해보자.A 에서 이메일을 통해 행 정보를 찾게 되면 어떻..

DB 2025.04.17

JAVA 모의 면접 스터디 회고

활동 내용기술 스택이 JAVA 인데 막연히 사용하는 느낌이 들어 JSCODE 모의 면접 스터디 - JAVA 에 참여했다. 질문 예시자바의 장점은 무엇인가요?JVM 구조는?Synchronized 기능과 역할에 대해 설명해 주세요. 총 5주간 주 1회, 2시간씩 진행했고 주마다 회차별 질문들을 나눠 공부하고 모의면접을 실시했다. 다른 부분도 부족하지만3~5명 팀 단위 모의 면접을 통해 학습한 것들을 말하는 방식으로 진행되는 스터디였다. JAVA에 대한 면접도 이뤄졌지만 전반적인 면접 연습을 이외 인성 면접과 주어진 형식 이외 질문도 했습니다.모의면접 이외에도 약 30분은 멘토님들과 Q&A 시간을 가졌고 개별 질문도 Slack을 통해 모두가 공유할 수 있단 점도 체계적이었습니다.   느낀 점15~20분 모의 ..

카테고리 없음 2025.04.12

Java에서 멀티 스레드와 동기화 처리

배경Java에서는 멀티스레드 환경에서 동시성 이슈를 마주할 수 있습니다. 어떤 원인 때문에 이러한 문제를 만나고 어떻게 해결할 수 있는지 확인해 보겠습니다.   동기화란?동기화란 스레드 간 공유 자원을 안전하게 접근할 수 있게 해주는 매커니즘입니다. 여러 스레드가 동시에 값을 바꾸려고 할 때 원자성과 가시성을 보장하는 게 특징입니다.그렇다면 원자성과 가시성은 무엇이고 어떤 문제로 인해 원자성과 가시성을 보장해야 하는지 순차적으로 알아 보기 위해 다음과 같은 순서로 진행하겠습니다. 공유자원과 임계영역경쟁 상태원자성과 가시성동기화 - 블로킹/논블로킹 공유자원과 임계영역 공유 자원(Shared Resource) : 여러 스레드가 동시에 접근할 수 있는 자원임계 영역(Critical Section) : 공유자원..

Java 2025.04.10

Thread와 Thread Pool

대부분 웹 사이트나 애플리케이션은 동시에 여러 작업을 처리합니다. 어떻게 동시에 처리할 수 있을까요? 특정 작업에 대한 처리는 스레드가 담당하며 수많은 요청, 동시 작업에 대해 효율적으로 수행하기 위해 나온 것이 스레드 (Thread Pool)입니다."왜 스레드가 필요하고, 스레드 풀을 왜 써야 하는가?"에 대해 보겠습니다.대부분 웹 사이트나 애플리케이션은 동시에 여러 작업을 처리합니다. 어떻게 동시에 처리할 수 있을까요? 특정 작업에 대한 처리는 스레드가 담당하며 수많은 요청, 동시 작업에 대해 효율적으로 수행하기 위해 나온 것이 스레드 (Thread Pool)입니다. "왜 스레드가 필요하고, 스레드 풀을 왜 써야 하는가?"에 대해 보겠습니다.  스레드(Thread)란?스레드는 하나의 프로세스 내에서 ..

Java 2025.03.27

자바 제네릭(Generics)의 이해와 활용

public class StringPrinter { private String value; public StringPrinter(String value) { this.value = value; } // 중복 public void print() { System.out.println(value); }}public class IntegerPrinter { private int value; public IntegerPrinter(int value) { this.value = value; } // 중복 public void print() { System.out.println(value); }} 자바를 사용하다 보면 여러 타입을 지원하는 유연한 코드를 작성해야 할 때가 많습니다. 예..

Java 2025.03.20

@Embedded, @Embeddable 주의사항(JPA 변경 감지 실패)

문제 상황동시성 학습 과정에서 강좌의 최대 수강 인원과 현재 수강한 인원에 대해 엔티티 필드로 넣지 않고 @Embedded를 통해 엔티티에 값 객체를 사용하여 책임을 나눠 구현했습니다.비즈니스 로직은 수강 신청을 할 때, 현재 수강 인원이 최대 수강 인원보다 작다면 수강 신청을 성공하고 강좌에 대해 현재 수강 인원을 증가합니다.해당 기능을 구현하고 테스트하니 로직이 정상적으로 실행되지 않는 문제가 발생했는데 이에 대해 알아봅시다.@Embeddable@Getter@NoArgsConstructor(access = PROTECTED)public class EnrollmentCapacity { @Column(nullable = false) private int maxCapacity; @Colum..

카테고리 없음 2025.02.06

운영 서버와 모니터링 서버 구축(엑추에이터, 프로메테우스, 그라파나)

🔫 시작하기 인프런 워밍업 클럽 2기를 마치고 수료식에서 네트워킹을 하면서 박우빈님이 해주신 말이 생각나 적용하게 되었습니다.단순 개발은 누구나 할 수 있지만 이를 유지보수하는데 실력 차이가 드러난다고 했습니다.그래서 단순 개발을 떠나 장애 대응, 성능 개선 등에 대한 고민이 필요하다고 생각하여 성능 테스트에서 지표를 확인하는 용도로 모니터링에 대한 구성을 적어 봅니다.원리와 개념보다는 서버에서 구성하여 테스트하기 위함과 구현에 있어 작성했습니다. 물론 보안 문제에 대한 고려를 일부 배제한 점은 참고해 주세요.자료는 하단 참고에서 사용했습니다.   🆘 구조 다음과 같은 구조로 설계했습니다.(그림 출처는 참조 자료) 엑추에이터의 접근을 허용하면 외부에서 애플리케이션의 중요 정보를 노출할 수 있기에 포트..

서버 2024.11.06

스프링 테스트 환경 통합해서 비용 줄이기(통합 테스트)

배경현재 3 Tier Architecture인 Presentation layer ↔ Business layer ↔ Persistence layer 구조를 이루고 있습니다.CouselController, CounseService, CounselRepository 총 3개에 클래스에 대해 테스트를 작성합니다.아래 예시 코드를 보면 CounselService의 createCounsel 메서드를 보면 내부적으로 counselRepository의 save 메서드를 호출합니다. 이와 같이 PostService에서 PostRepository 의존성 주입 이후 사용되기에 테스트를 위해서는 범위를 CounselService와 CounselRepository까지 고려해야 합니다.@Service@RequiredArgsCon..

spring 2024.07.09

EC2에서 Google Text-To-Speech 설정 + Docker 사용

프로젝트를 진행하면서 텍스트에 대한 음성 파일도 제공하기 위해 google TTS API를 사용하기로 했습니다.로컬 PC에서는 찾은 정보로 어렵지 않게 구현할 수 있었습니다. 그런데 개발 서버 EC2에도 적용하기 위해 설정하면서 문제가 발생했습니다  EC2에서 google cloud의 TTS API 사용 문제 발생실제 개발 서버인 EC2에서도 해당 API를 사용하기 위한 설정을 하는 도중 문제가 발생했다.  gcloud init 실패  EC2 amazon linux2 를 사용했는데 참고로 기본 설정이 python2.7.X로 되어 있다.문서를 보면 python3.8 이상 버전에서만 사용 가능하다고 한다. 높은 버전의 파이썬을 설치해도 기본 설정으로 적용되지 않았는데 알고 보니 설치된 파이썬이 적용되지 않았..

서버 2024.04.22

JWT란?

JWT(Json Web Token)문서에 따르면 JWT는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준이라고 한다. session과 같이 인가에 필요한 요소이다.JWT의 구성 요소는 header, payload, signature 이루어져 있으며 ‘.’을 기점으로 나눠져 있다.디코딩된 JWT는 오른쪽과 같은 구조를 지닌다.  header header는 일반적으로  토큰 유형(JWT)과 사용되는 서명 알고리즘(예: HMAC SHA256 또는 RSA)의 두 부분으로 구성된다.alg 는 사용되는 암호화할 서명 알고리즘으로 보통 HS256을 사용하며 RSA도 사용할 수 있다고 한다.HS256**(HMAC with SHA-256)**은 header와 pa..

IT 지식 2024.02.22