분류 전체보기 (22) 썸네일형 리스트형 Docker 도입하여 개발 환경을 셋팅해보자 Docker란 무엇인가? 필수 용어 컨테이너 하나의 컴퓨터 환경 내에서 독립적인 컴퓨터 환경을 구성 컴퓨터 환경 내에서 여러개의 미니 컴퓨터 환경을 구성할 수 있는 형태 여기서 Docker에서는 미니 컴퓨터를 컨테이너라고 부른다. 컨테이너의 독립성 독립적인 컴퓨터 환경이라 ?? 어떤 것이 독립적인가 디스크 (저장 공간)네트워크 (IP,PORT) 이미지자 이제 컨테이너라는 미니 컴퓨터 안에 무언가를 설치해야지 돌아갈 것 아니냐 그러면 예를 들어서 내가 만든 SpringBoot application 서버 , 내 db 서버 , redis 서버 등등 이 하나의 서버를 이미지로 만들 수 있다. 이미지? 그럼 뭐가 좋은건데이미지를 만들면 복잡한 설치 과정을 거칠 필요 없이 손쉽게 실행이 된다.왜? 이미지에는 프.. 자바의 제네릭이란? 잊고 있었던 사람 손~! 여기로 들어온 자네, 혹시 자바 라이브러리를 쓰다 ArrayList, HashMap 같은 표현을 본 적이 있는가? 만약 여기서 T, K, V 같은 문법이 무엇을 의미하는지 잘 몰랐다면, 당신은 아직 **자바 제네릭(Generics)**의 개념을 제대로 이해하지 못하고 있었을 가능성이 있다. 이 문법들은 단순한 기호가 아니라, 데이터 타입을 안전하고 유연하게 다루기 위해 자바가 제공하는 핵심 기능이다 오늘은 제네릭이 나오는 본질적인 이유와 문법에 대해서 알아보도록 하자사실 필자도 제네릭을 직접 사용하며 코드를 작성해 본 경험은 많지 않다. 하지만 라이브러리나 자바에서 제공하는 클래스와 함수를 따라가다 보면, 자연스럽게 제네릭을 자주 접하게 된다.이 궁금증을 풀고, 왜 제네릭이 필요한지 명확히 이해하기 위해.. 좋아요 버튼의 숨겨진 딜레마: DB Lock 관련 프로젝트 도중 동시성 문제가 발생했을 때 syncronized와 수동적 Transaction 제어를 통해서 문제를 해결하였다..(해결한건가?) 여기서의 문제점은 동일한 JVM에서 실행 중인 스레드들 사이에서만 동기화 문제가 해결 된다는 점이다. 이러한 구성에서는 전 포스팅에서 말한 해결방법을 가지고 문제를 해결 할 수 있다!! 하지만! 이렇게 여러개의 서버로 확장이 일어났을 때는 동기화 문제가 해결되지 않는다.. 그러면 애플리케이션 레벨이 아닌 DB 레벨에서 제어를 하는것이 더 일관성있고 동기화 문제를 해결하는데 있어서 더 좋은 선택인거 같다!! 데이터베이스 DB LOCK 여러 DBMS마다 락의 종류와 분류하는 방식이 다른긴 하겠지만 내가 사용하는 MySQL 의 대표적인 락에 대해서 알아보도록.. 안전한 파일 업로드에 대한 처리란 무엇일까? chapter 2 2024.11.10 - [프로젝트] - 안전한 파일 업로드에 대한 처리란 무엇일까? chapter 1 에서는 대용량 파일 크기 제한에대해서 고려해보았다.이번 포스팅에서는 파일 업로드시고민 할 수 있고 발생할 수 있는 Trade-off에 대해서이야기 해보고자 한다.실제로 내가 겪었던 문제들과 해결 방안이다. 발생했던 문제 일단 현재 발생했던 문제의 로직과 구조를 알아보면 음악 파일과 이미지 파일을 네이버 클라우드의 Object Storage에 저장한다. 로직의 순서가TrackService 의 업로드 로직이다 음악 파일 저장 -> 이미지 파일 저장 -> Track 객체 저장 순서로 로직이 구성되어져 있다. 각 단계에서 발생할 수 있는 Case 들을 나눠보자!!Case 1: 음악 파일 저장 시 예외 .. 좋아요 버튼의 숨겨진 딜레마: @Transactional과 synchronized가 함께 풀지 못한 동시성 이슈 프로젝트를 진행하면서 발생했던좋아요 기능에 대한 동시성 이슈에 대해서 알아보자!! 먼저 내 프로젝트의 좋아요 기능은좋아요 토글 기능으로 만들어져 있다(즉 좋아요 추가 API, 좋아요 삭제 API를 분리한 것이 아닌 토글 형식으로 좋아요 유무를 통해 판단) 발생했던 문제 일단 문제를 말하기 전에웹 어플리케이션 서버가 어떤식으로 동작하는지에 대해서 간단하게 알아보자! 기본적으로 WAS는 스레드를 사용하여 여러 요청을 동시에 처리하는데이유는 사용자의 요청을 병렬로 처리하면 성능적인 면에서도 이점을 보기 때문이다이는 당연하다한 사람이 모든 주문을 처리하는 레스토랑여러 명의 직원이 동시에 주문을 처리하는 레스토랑은성능적인 면에서 이득을 볼 수 있다. 사실 위의 그림은 매우 간단하게 만들어서 완벽한 아키텍쳐.. 동적 쿼리와 배치 사이즈 최적화로 1+N 문제 해결 및 성능 개선 프로젝트 기능나의 MySongSpace의 기능은 필터 기능이다 여기서 필터기능이란 사용자가 원하는 장르,분위기,검색어를 통해서 동적으로 데이터를 조회하는 기능을 말한다. 동적 쿼리를 적용하기 위한 QueryDsl과자바의 Page 인터페이스를 통해서Offset 기반 페이징을 구현하였다. 기본적으로 Track를 Genre와 Mood의 관계 설명하자면 @OneToMany(mappedBy = "track", cascade = CascadeType.ALL) private List genres = new ArrayList(); @OneToMany(mappedBy = "track", cascade = CascadeType.ALL) private List moods = new ArrayList().. Offset 페이징에서 효율적인 대댓글 처리 방법 프로젝트 기능 이번에 트랙에 대한 사용자의 댓글을 만들면서 만들고 싶었던 무한 대댓글 로직을 만들어 보았다.먼저 제대로 된 이야기 전에트랙과 Comment의 관계에 대해 살펴보자Track과 Comment는 1:다 관계로 이루어져 있다. 페이징을 고려하지 않고 만든 로직부터 내 페이징의 기준에 맞춰서 만들었던 로직의 절차거기서 나온 문제점들에 관하여 이야기 해보자 1. 페이징을 고려하지 않고 만들었던 로직 public List getComments(Long trackId) { Track track = trackRepository.findById(trackId) .orElseThrow(() -> new TrackNotFoundException(TRACK_NOT.. 안전한 파일 업로드에 대한 처리란 무엇일까? chapter 1 현재 MySongSpace 프로젝트에는사용자가 트랙(본인이 작업한 음악 파일)을 업로드 하는 기능이 있습니다. 트랙 업로드 시 클라이언트를 통해 트랙의 이미지 커버 파일과 음악 파일 두 가지를 서버로 전송하는 과정에서, 고려해야 할 주요 사항과 발생 했던 문제점에 대해 이야기 보겠습니다. 문제 발생 및 고려 했던 점 1. 대용량 파일, 어디까지 허용해야 할까? 30분 이상의 음악 파일이나 매우 높은 해상도의 이미지 파일을 업로드하면 서버와 네트워크에 과도한 부하를 줄 수 있지 않을까? 대용량 파일은 업로드 과정에서 서버 메모리를 압박할 가능성이 높다라고 판단동시 접속자가 많은 상황에서 대형 파일 업로드는 네트워크 병목 현상을 유발 할 수 있다 판단 생각했던 해결 방안 1. Chunk 기반 .. [Spring JPA] JPA 상속 관계 매핑 냉장고 관리 어플리케이션 프로젝트에서 보관소를 냉장고, 냉동고, 실온 (세부 보관소)로 구분하는 작업을 진행하게 되었다.. 이 관점에서 보면, 보관소는 큰 개념이고 냉장고, 냉동고, 실온 (세부 보관소) 들은 그 안에 속하는 서로 다른 유형이라는 생각이 들었고 설계를 할 때 어떤식으로 해야하는지에 대해서 고민을 하게 되었다.. (하나의 테이블을 가지고 필드하나로 구분할까?) (각각의 테이블을 만들어서 설계하는 것이 용이한가...) 등등.. 단순하게 생각을 했을 때 하나의 테이블에서 필드하나로 구분한다고 가정하면 매우 쉽다 하지만 추후 확장에 대해 문제점이 발생할 수 있다고 생각했다!! 초기에는 냉장고, 냉동고, 실온 저장소가 각각의 고유값, 보관소 이름, 저장공간 등과 같은 기본적인 옵션을 가지고 있을 .. PATCH 와 PUT의 차이 (유효성 검사와 쓰임에 대해서) 개인적인 생각... PUT(Replace) 클라이언트가 보낸 데이터는 리소스의 전체를 나타내야 한다. 클라이언트가 보낸 데이터로 리소스가 대체됩니다.(전체가 바뀌는 작업) PUT 요청은 리소스를 완전히 대체하여 클라이언트가 보낸 데이터로 리소스를 설정한다. PATCH (Modify) PATCH 메서드는 리소스의 일부를 수정(Modify)합니다. 클라이언트가 보낸 데이터는 리소스의 일부분을 나타냅니다. 즉, 클라이언트가 보낸 데이터로 리소스의 일부가 변경됩니다. 따라서 PATCH 요청은 리소스의 일부분만을 업데이트하고, 나머지는 그대로 유지합니다. 위의 내용까지는 이해가 된다... 그러면 서버 입장에서 밑에와 같은 (PUT과 PATCH) 모두 같은 DTO로 받는다고 가정했을 때 PATCH메서드 에서는 어떤 값을 수정하는지 어.. 이전 1 2 3 다음