전체 글171 PresignedUrl 활용하여 업로드 API 개선 및 서버 부하 줄이기 서론 (들어가기 앞서)현재 제가 재직 중인 회사는 온라인 강의 서비스와 커뮤니티 서비스를 운영합니다. 저희 고객 분들은 온라인으로 줌 강의를 수강하고, 모임 인증 사진을 커뮤니티에 사진을 업로드하곤 합니다. 문제는 모임이 끝나는 시점에 여러 명의 사용자가 동시 다발적으로, 동시에 업로드를 진행한다는 점입니다. 이로 인해 짧은 시간에 서버로 부하가 몰렸습니다.현재 AWS S3 서비스를 이용 중인데, 기존에는 S3로 파일을 업로드할 때 WAS를 경유하는 구조였습니다. 특히 요청이 밀리다보면 뒤 요청은 TimeOut 에러로 인해, 아예 처리되지 않는 문제가 발생했습니다. 프론트엔드 서버에서부터 백엔드 서버, S3로 업로드 하는 각 단계에서 네트워크 송/수신을 처리하기 위한 시간이 들며, 업로드를 처리하는 평균.. Infra 2024. 10. 22. 윈도우함수(Window Function)로 중복 닉네임 처리하기 서론 (들어가기 앞서)기획자님 : 상용 DB에 중복 닉네임이 존재합니다. 중복된 닉네임을 뒤에 가입한 순서대로 숫자 001, 002, 003 등으로 붙여주세요.얼마 전, 회사에서 중복 닉네임을 일괄 변경하는 작업에 대한 요청이 있었습니다. 이미 기존에 중복된 닉네임에 가입 순서를 기준으로 001, 002, 003 뒤에 숫자를 붙여서 수정하는 것이 요구사항이었습니다. 물론 실제로는 이것보다 친절하고 자세하게 설명해주셨죠. 순간 고민이 됐습니다. 쿼리로 한 번에 처리할 순 없을까? 🤔 찾아 보니, 윈도우 함수 내 순위함수 기능을 사용하면 쉽게 값을 정해줄 수 있었습니다 🥹 그래서 이번 시간에는 윈도우함수의 순위함수를 사용하여, 위 요구사항에 만족하는 쿼리를 작성하는 방법에 대해 함께 알아보도록 하겠습니다.. DB 2024. 9. 27. [Spring] Spring Boot 환경설정 가이드 1. Spring Initializr 활용하여 Spring Boot 프로젝트 생성하기1.1 프로젝트 정보(스펙) 설정하기Spring Initializr는 Spring Boot 프로젝트를 빠르고 쉽게 생성할 수 있는 도구입니다. 먼저, Spring Initializr 웹 사이트에 접속합니다. 다음은 프로젝트 설정의 각 요소에 대한 설명입니다.Project: Maven 또는 Gradle 빌드 시스템 중 하나를 선택합니다. 일반적으로 Gradle을 많이 사용합니다.Language: Java, Kotlin, Groovy 중 선택합니다. 대부분 Java를 선택합니다. Spring Boot Version: 최신 버전 또는 안정적인 버전을 선택하는 것이 좋습니다.Project Metadata:Group: 보통 패키지.. Framework/Spring 2024. 9. 23. [Spring] Spring 프레임워크란 무엇인가? 서론오늘은 자바 백엔드 진영의 대표적인 프레임워크인 스프링에 대해서 알아보도록 하겠습니다.본론스프링의 어원과 탄생 배경스프링(Spring)이란 영어로 봄을 말합니다. 왜 봄이라고 이름을 지었을까요? 스프링 프레임워크가 등장하기 전인 2000년대 초로 돌아가보면, EJB(Enterprise Java Beans)라는 자바 기업용 애플리케이션 프레임워크를 활용하여 어플리케이션 개발을 했습니다. EJB는 당시 자바의 표준이었죠. 하지만 너무 무겁고 복잡하고 비효율적이었습니다. 이에 불만을 느낀 로드 존슨이란 개발자가 EJB 없이도 고품질의 애플리케이션을 만들 수 있다는 것을 "Expert One-on-One J2EE Design and Development"란 책을 통해 증명해냅니다.로드 존슨은 순수한 자바 코.. Framework/Spring 2024. 9. 20. [Spring] IoC와 DI란 무엇인가? 제어의 역전 (IoC, Inversion of Control)개발자가 작성한 객체나 메서드의 제어를 개발자가 아니라 외부(프레임워크)에 위임하는 설계 원칙을 제어의 역전이라고 한다.관련 용어빈 (Spring Bean)스프링이 IoC 방식으로 관리하는 오브젝트를 뜻한다. 자바 빈과 구분 짓기 위해, 스프링 빈이라고도 부른다.참고로 스프링 내 모든 오브젝트가 전부 빈이 아니다. 그 중에서 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만을 빈이라고 부른다.빈 팩토리 (Bean Factory)스프링의 IoC를 담당하는 핵심 컨테이너를 말한다.스프링 컨테이너의 최상위 인터페이스로, 스프링 빈을 관리하고 조회하는 역할을 담당한다. 대표적으로 getBean() 메소드를 제공한다.애플리케이션 컨텍스트 (Applic.. Framework/Spring 2024. 9. 20. [Test] Spring Boot 환경에서의 유닛테스트와 통합테스트, 슬라이스 테스트 서론오늘은 Spring Boot 환경에서 유닛 테스트와 통합 테스트, 각각의 테스트 과정에서 활용되는 어노테이션과 메서드들은 무엇이 있는지 정리해보겠습니다.대상독자테스트코드를 처음 작성해보시는 분들, Slice Test를 처음 들어보시는 분들, 테스트코드를 하고 싶지만 심리적인 장벽 때문에 아직 시도해보지 못한 분들에게 이 글을 추천합니다.이론유닛 테스트(Unit test)와 통합 테스트 (Integration test)꼭 짚고 넘어가야 하는 유닛 테스트와 통합 테스트의 정의에 대해서 알아봅시다.유닛 테스트보통 개발자가 테스트 코드를 짠다고 하면, 유닛 테스트 짜는 것을 말합니다. 코드 레벨에서의 테스트를 하며, 특정 함수나 클래스와 같이 작고 고립된 코드의 기능을 확인하는 자동화된 테스트를 진행합니다... Framework/Spring 2024. 9. 19. [소프트웨어 공학] 유스케이스 분석 소개유스케이스 분석이란 무엇일까?유즈케이스 분석, 어떻게 해야 할까?유즈케이스 분석, 왜 해야 할까?유스케이스 다이어그램의 활용유스케이스와 객체지향유즈케이스 분석, 왜 해야 할까?애자일 방법론과 유즈케이스 분석애자일 방법론과 유즈케이스 분석의 연관성은 유연한 요구사항 관리와 고객 중심 개발이라는 공통 목표를 갖는다는 점에서 공통 분모가 존재합니다. 두 가지 모두 사용자에게 가치를 제공하는 데 초점을 맞추고, 지속적인 피드백을 통해 요구사항을 반영하고 발전시키는 과정에서 강력한 시너지를 냅니다.고객 중심 개발유즈케이스 분석은 고객이나 사용자 관점에서 시스템이 제공해야 하는 기능을 명확하게 정의하도록 도와줍니다. 이를 통해, 개발 팀이 실질적으로 고객이 원하는 것을 제공하는 데 집중할 수 있습니다. 애자일의.. CS 2024. 9. 7. [리팩토링 2판] Chapter 6 기본적인 리팩터링 기본적인 리팩토링이제부터 리팩토링의 기법들을 하나씩 소개할건데 가장 기본적이고 많이 사용하는 리팩토링부터 배워보자. 이 책에서 가장 추천하는 리팩토링 기법은 함수 추출하기 (6.1절) 과 변수 추출하기 (6.3절) 이다. 리팩토릭은 원래 코드를 변경하는 작업인 만큼 이 두 리팩토링을 반대로 변경하는 기법도 있다. 함수 인라인하기 (6.2절) 과 변수 인라인하기 (6.4절) 도 자주 사용한다.추출 한다는 건 결국 이름짓기 이다. 코드 이해도가 높아지다 보면 이름을 바꿔야 할 때가 많다.함수 선언 바꾸기 (6.5절) 는 함수의 이름을 변경할 때, 함수의 인수를 추가하거나 제거할 때 많이 쓰인다. 바꿀 대상이 변수라면 변수 이름 바꾸기 (6.7절) 기법을 사용하고 이는 변수 캡슐화하기 (6.8절) 과 관련이 .. 기타 2024. 8. 26. [Kotlin] 자주 쓰이는 코틀린 문법 정리 1. 코틀린 스코프함수 (apply, run, with, let) letlet 함수는 수신 객체(it)를 인자로 받아 블록 내부에서 처리한 후, 결과를 반환합니다.fun main() { val name: String? = "Kotlin" val length = name?.let { println("Name is $it") it.length } println("Length of name is $length")}applyapply 함수는 객체 초기화 시 주로 사용되며, 객체 자신을 반환합니다. 블록 내부에서는 객체를 this로 참조합니다.class Person { var name: String = "" var age: Int = 0 var address: String = "" override fun toS.. Language/Java & Kotlin 2024. 8. 23. [리팩토링 2판] Chapter 3 코드에서 나는 악취 냄새 나면 당장 갈아라. (켄트 백 할머님의 육아 원칙)이제 리팩토링을 어떻게 작동하는지 감이 왔을 것이다. 하지만 리팩토링 적용 방법을 아는 것과 제때 적용할 줄 아는 것은 다르다. 리팩토링을 언제 시작하고 언제 끝내는 지를 아는 것도 매우 중요하다.여기서 딜레마는 리팩토링의 기법 중 인스턴스 변수를 삭제하고 상속 계층을 만드는 것을 설명하기는 쉽지만 이런 일들을 언제 적용 하는지 에 대한 명확한 규칙은 없다. 나 같은 경우는 프로그래밍의 미학이라는 애매모호한 개념에 기대서 이유를 설명하는 경우가 많은데 이도 적합 하지는 않다.그러므로 구체적인 적용 시점에 대해 논의를 해보자. 이 책의 초판을 집필히면서 켄트 백을 만나러 갔었는데 그 당시의 켄트 백은 갓 태어난 딸을 돌보고 있었다. 딸의 기저귀 냄새에.. 기타 2024. 8. 12. [리팩토링 2판] Chapter 2 리팩터링 원칙 TL:DR;리팩토링의 본질을 잊지말자. 리팩토링은 개발 기간을 단축하고자 하는 것이다.리팩토링의 동력은 경제적인 효과를 늘 생각하자.리팩터링 정의리팩터링의 정의[명사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법[동사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.리팩터링과 재구성누군가 “리팩터링하다가 코드가 깨져서 며칠이나 고생했다”라고 한다면, 십중팔구 리팩터링한 것이 아니다. 이는 기존 동작이 보존되지 않았기 때문이다.코드베이스를 정리하거나 구조를 바꾸는 모든 작업을 재구성이라는 포괄적인 용어로 표현하고, 리팩터링은 재구성 중 특수한 한 형태로 본다.한 번에 바꿀 수 있는 작업을.. 기타 2024. 8. 12. [리팩토링 2판] Chapter 1 리팩토링: 예시 (리팩토링의 리듬) Chapter 1. 리팩터링: 첫 번째 예시TL:DR;리팩토링의 첫번째 단계는 기존 로직에 대한 테스트 코드를 작성하는 것이다. 그리고 단계별로 리팩토링할 때마다, 다시 실행하여 테스트가 깨지지 않는지 확인한다.리팩토링을 효과적으로 하는 핵심은, 단계를 잘게 나눠야 더 빠르게 처리할 수 있고, 코드는 절대 깨지지 않으며, 이러한 작은 단계들이 모여서 상당히 큰 변화를 이룰 수 있다는 사실을 깨닫는 것이다.좋은 코드를 가늠하는 확실한 방법은 얼마나 수정하기 쉬운가다. 코드를 수정하기 쉬운 정도야말로 좋은 코드를 가늠하는 확실한 방법이라고 믿는다. 코드는 명확해야 한다. 코드를 수정해야 할 상황에, 고쳐야 할 곳을 쉽게 찾을 수 있고 오류 없이 빠르게 수정할 수 있어야 한다. 건강한 코드베이스는 생산성을 극.. 기타 2024. 8. 5. 이전 1 2 3 4 ··· 15 다음 반응형