Home
감자누리의 개발일지
Cancel

항해 플러스 1주차 회고

1. 문제 (과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제) 이번 주차를 지나며 겪었던 문제가 무엇이었나요? 동시성 테스트를 진행하면서 스레드를 순차적으로 처리하는 문제 2. 시도 문제를 해결하기 위해 어떤 시도를 하셨나요? synchronized에서 ReentrantLock으로 변경하여 동시성 테스트시 순차성 보장하도록 수정 3. 해결 ...

항해 플러스를 시작하는 마음

1. 지금까지의 회고 기술 회사가 아니다 보니 기술적으로 도전적인 과제를 진행하기 힘들었고, 선임이 없다보니 방향성을 잡기가 힘들었습니다. 개발자라기 보단 회사원으로써 주어진 일만을 수행하는 느낌이라 성장에 한계가 있었고, 수동적인 태도만을 가지게 된 것 같습니다. 개인적으로 프로젝트도 진행하지만, 어떤식으로 구축해야할지 피드백이 부족하...

TDD(7장) 정리

대역 대역 필요성 테스트 작성하다 보면 외부 요인이 필요한 시점이 있는데, 다음이 주요 예 테스트 대상에서 파일 시스템을 사용 테스트 대상에서 DB로부터 데이터를 조회하거나 데이터를 추가 테스트 대상에서 외부의 HTTP 서버와 통신 테스트 대상이 위와 같은 외부 요인에 의존하면 테스트 작성 후 실행하기 힘들다. TDD는 테스트 작...

TDD(6장) 정리

테스트 코드의 구성 기능에서의 상황 기능은 주어진 상황에 따라 다르게 동작한다. 기능 예시 파일에서 숫자를 읽어와 숫자의 합을 구한다. 한 줄마다 한 개의 숫자를 포함한다. 이 기능을 구현하려면 고려할 것 파일이 없는 상황을 처리해야 한다. 데이터를 읽을 파일이 없다면 인자가 잘못되었다는 익셉션을 발생한다. 문제 상황...

TDD(5장) 정리

JUnit 5 모듈 구성 크게 세가지 JUnit 플랫폼: 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공 JUnit 주피터(Jupitor): JUnit 5를 위한 테스트 API와 실행 엔진을 제공 JUnit 빈티지(Vintage): JUnit 3과 4로 작성된 테스트를 JUnit 5 플랫폼에서 실행하기 위한 ...

TDD(4장) 정리

기능 명세 사용자가에게 제공할 기능을 구현하려면 기능을 크게 두 가지로 나누어 생각해 볼 수 있다. 그것은 입력과 결과이다. 예를 들어 로그인 기능을 생각해보자. 입력 : 아이디와 암호 결과 : 아이디와 암호가 일치하면 성공, 일치하지 않으면 실패 3장에서 살펴본 만료일 계산 기능의 입력과 결과는 다음과 같다. 입력 : 첫 납부...

TDD(3장) 정리

테스트 코드 작성 순서 쉬운 경우에서 어려운 경우로 진행 예외적인 경우에서 정상인 경우로 진행 초반에 복잡한 테스트부터 시작하면 안 되는 이유 초반부터 다양한 조합을 검사하는 복잡한 로직을 작성하면 해당 테스트를 통과하기 위해 한 번에 구현해야 할 코드가 많아진다. 테스트를 통과시키기 위해 복잡한 규칙을 구현해...

TDD(1장, 2장) 정리

TDD는 Test-Driven Development의 약자로 우리 말로는 테스트 주도 개발 이라고 표현한다. 자바로 프로그래밍하려면 JDK가 필요하듯 TDD를 하려면 지정한 방식으로 코드를 작성하고 실행할 수 있는 도구가 필요하다. TDD를 위한 다양한 도구가 존재하는데 자바에서는 주로 JUnit을 사용함 JUnit과 TDD에 대한 내용...

쿠키, 세션, 토큰, 캐시, CDN

목적: 효율적인 웹 운영과 사용을 위해 데이터가 저장되는 다섯 가지 개념인 쿠키, 세션, 토큰, 캐시, CDN 에 대해 알아봅니다. 반복되는 작업을 줄일수록 좋습니다. 웹사이트에 접속할때 마다 매번 로그인해야 한다면 웹사이트를 이용하는 것은 스트레스 일 것입니다. 때문에 이러한 정보는 한 번 작성하거나 사용한 뒤에는 반복적으로 작업하지 ...

선착순 쿠폰 발급 시스템 (3) LOCUST 부하 테스트 구축

부하 테스트 LOCUST 구축 LOCUST ? 로커스트는 HTTP 및 기타 프로토콜을 위한 오픈 소스 성능/부하 테스트 도구로 사용하기 편하며, 스크립트로 작성 및 확장 가능하다. 테스트 시나리오를 파이썬 코드로 작성이 가능하다. 분산환경에서 확장이 가능하다. (많은 부하를 테스트 할때 부하를 발생시키는 서버를 여...

선착순 쿠폰 발급 시스템 (2) 환경 구성

선착순 쿠폰 발급 이벤트 한정된 수량의 쿠폰을 먼저 신청한 사용자에게 제공하는 이벤트 요구 사항 이벤트 기간 내에(예시 2024-02-01일 오후 1시~ 2024-02-10일 오후 1시) 발급 선착순 이벤트는 유저당 1번의 쿠폰 발급 선착순 쿠폰의 최대 쿠폰 발급 수량 설정 쿠폰 발급 기능 쿠폰 발급 기능 ...

선착순 쿠폰 발급 시스템 (1) 발급 처리 구성도

구성도 순서 유저의 요청을 받는 API 서버와 쿠폰을 실제로 발급하는 쿠폰 서버가 별도로 존재 API SERVER는 유저들의 요청을 처리해서 Redis Cache를 통해 발급 대상을 검증한다. 검증된 대상은 쿠폰 발급 대기열 큐에 대기를 시킨다. 선착순 쿠폰 발급 성공 여부를 반환한다. 대기 큐를 인터페이스로 사용하여 ...

모던 자바 (3) 함수형 프로그래밍

Functional; JDK 8,9,10 깨끗한 코드를 넘어서 아름다운 코드를 작성하기 위한 여정; 명령형과 선언형; Ticket 서비스 개발 업무를 HM에게 지시 할 때 명령형; How 어떻게? 첫 번째, Front에서 티켓 예매를 진행하기 위해서 Reservation 정보를 Request Message를 보내야 하니, 필요한 메시지 구조...

Telemetry

모니터링(Monitoring) VS 가시성(Observability) 모니터링(Monitoring) 목적: 시스템의 상태, 성능 지표, 이벤트 등을 실시간으로 추적하고 모니터링하여 시스템이 정상적으로 동작하는지 확인하는 데 사용 주로 사전에 정의 된 지표를 사용해서 시스템의 현재 상태를 실시간으로 감시하고 알림을 생성하는 데 중점을 둔다....

1월 회고록

2024년 새해를 맞이하며 2024년 한 해를 시작함과 동시에 팀을 옮기게 되었다. 새로운 팀, 환경 그리고 업무까지 모든 것이 새롭게 변경되면서 적응과 동시에 전 담당자의 부재로 작년 미뤄졌던 사업들을 직접 담당하여 처리하면서 정신없이 2월을 맞이하게 되었다. 이전 팀에서는 좀 더 도전적인 것에 초점을 맞췄다면, 이번 팀에서는 표준과 안전성에 방...

모던 자바 (2) 인터페이스와 클래스

도입 자바 8에서 람다와 함수형 프로그래밍을 도입하면서 인터페이스에 변화가 생김. 자바 7부터 시작된 인터페이스 변경은 자바 8에서 대대적으로 이루어짐. 이 변화는 함수형 프로그래밍과 스트림 등의 배경이 되었고, 컬렉션 프레임워크 개선의 기반이 됨. 인터페이스 사용 시 문제점 인터페이스는 주로 여러 구현체를 통일된 명세서로 정...

모던 자바 (1) 자바의 발전 과정

자바의 연대표 자바는 1996년 1월 23일에 처음 출시되어, 27년의 기간 동안 많은 변화를 거치며 지금도 지속적인 변화가 일어나고 있는 언어입니다. 자바의 발전 역사: 1996년: 자바 1.0 출시 1997년: 자바 1.1 출시, Swing GUI 라이브러리 도입 1998년: 자바 1.2 출시, JavaBeans, JDBC 등...

ILIKE 쿼리 문

회사에서 검색 조건에 대소문자를 구분하지 않고 검색을 하고 싶다는 요청이 왔는데, 현재 회사에서 사용하는 PostgreSQL에서 지원하는 ILIKE문을 사용하게 되었다. PostgreSQL에서만 사용가능한 다양한 절이나 함수들이 존재하는 만큼 유용하게 사용할 수 있는 것 같다. 관련 해서는 또 다른 게시물로 작성 해야겠다. 개요 ILIKE...

코틀린 문법 총 정리 (1) JAVA, Kotlin 언어들의 특징

JAVA, Kotlin 언어들의 특징 차이점 언어 및 생태계 자바 자바는 객체지향 프로그래밍 언어로 JVM(JAVA Virtual Machine)에서 실행. 엔터프라이즈 애플리케이션 및 안드로이드 앱 개발 등 다양한 분야에서 사용 가능 코틀린 JetBrains에서 개발한 JVM 및 안드로이드에서 실행되는 공식적인 안드로이드 ...

캐시 전략

1. 읽기 주도형 캐시 (Read-Heavy Caching) 특징: 주로 데이터 읽기 연산이 많은 환경에서 사용됩니다. 데이터가 빈번히 읽혀지지만 자주 변경되지 않을 때 유리합니다. 장점: 데이터 접근 시간을 대폭 줄여주고, 데이터베이스 부하를 감소시킵니다. 단점: 데이터가 변경되었을 때 캐시 일관성 유지가 중요해지며 관리가 복잡해질 수...

제네릭 타입

Java의 제네릭(generics) 기능은 타입 안전성, 코드 재사용성 및 가독성을 향상시키는 강력한 도구입니다. 올바르게 사용하면 많은 프로그래밍 오류를 예방하고, 더욱 깔끔하고 관리하기 쉬운 코드를 작성할 수 있습니다. 제네릭 장점 및 특징 1. 타입 안전성 확보 목적: 런타임에 발생할 수 있는 잘못된 타입 사용에 의한 오류를 ...

e.printStackTrace()의 문제점과 해결을 위한 @Log4j2와 @Slf4j

e.printStackTrace()의 문제점과 해결을 위한 @Log4j2와 @Slf4j e.printStackTrace() 메소드의 사용은 여러 문제점을 가지고 있습니다. 가장 큰 문제는 이 메소드가 스택 트레이스를 표준 오류 스트림으로 출력한다는 것입니다. 이것은 다음과 같은 이유로 바람직하지 않습니다: 통제되지 않은 로깅: e.printS...

MAC host파일 수정방법

host 파일 수정 host 파일이란? host 파일은 운영 체제가 도메인 이름을 IP 주소에 매핑할 때 사용하는 파일입니다. host파일의 형식은 다음과 같습니다. IP주소 host이름 예를 들어, 다음과 같은 내용을 host파일에 추가하면, www.naver.com을 방문할 때 127.0.0.1로 지정된 컴퓨터에 연결하게 됩니다. 1...

Redisson을 이용한 선착순 쿠폰 발급 시스템

Redisson을 이용한 선착순 쿠폰 발급 시스템 (쿠폰 개수 정해진 경우) Redisson 설정 파일을 작성 application.yml spring: redis: host: localhost port: 6379 database: 0 password: redisson: config: cluster: ...

K6 부하테스트

부하 테스트란? 부하 테스트는 시스템, 애플리케이션, 또는 네트워크가 실제 운영 환경에서 예상되는 부하 하에서 어떻게 작동하는지 평가하는 과정. 이러한 테스트를 통해 성능 문제를 식별하고, 시스템의 용량 한계를 이해할 수 있음. 부하 테스트 종류: 스모크 테스트(Smoke Test) 최소 부하 상태에서 시스템에 오류가 발생하는지 확인하는 ...

JPA 실습1

JPA 실습1. JPA 설정 plugins { id 'java' } group = 'jpa-basic' version = '1.0.0' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') ...

JPA 소개 TIL(2023.11.29)

공부 시작 회사에서 Mybatis만 쓰다가 도메인 기반 설계를 하면서 자연스럽게 객체 중심의 개발과정에서 ORM의 중요성을 깨닫고, 신규 서비스에는 JPA를 적용해보기 위해 TIL 정리를 시작하게 되었다. 기존 한방 쿼리들 물론 성능적 이점이 있지만, 매번 매핑으로 받는 스트레스와 쿼리 result를 다시 객체로 변환하는 불편함등등… JPA...

8월 회고록

8월은 정말 바빴다. 대규모 MSA 전환 프로젝트 이후 처음으로 ISMS 심사를 앞두고 있어서 마음 한 켠은 늘 긴장 상태였다. 내가 맡고 있는 부분은 내부 고객이 사용하는 관리 도구(Back Office)의 인증(Authentication) 및 인가(Authorization)와 공통 라이브러리를 개발하는 것이다. 비용 문제로 API 게이트웨이가 없...

Redis 소개

Redis 소개 Redis의 역사 2009년 이탈리아의 개발자 Salvatore Sanfilippo가 개발한 오픈 소스 인 메모리 Key-Value 구조의 데이터베이스 2015년 현재까지 Redis Labs에서 지원 가장 인기 있는 Key-Value 구조의 저장소 Redis의 특징 오픈 소스 기반의 인 메모리 Key-Va...

Spring Security Architecture

Spring Security Architecture 이 가이드는 Spring Security의 기본 설계와 기본 구성 요소에 대한 입문서입니다. 우리는 응용 프로그램 보안의 매우 기본적인 부분만 다룹니다. 그러나 이를 통해 Spring Security를 사용하는 개발자들이 겪는 혼란을 해소할 수 있습니다. 이를 위해 웹 응용 프로그램에서 보안이 어떻...