목록분류 전체보기 (39)
csct3434
단일 책임 원칙 일반적인 해석 (오해) : ‘하나의 컴포넌트는 오로지 한 가지 일만 해야 하고, 그것을 올바르게 수행해야 한다’ 실제 정의 : ‘컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다’ 아키텍처에서 단일 책임 원칙의 의미 컴포넌트를 변경할 이유가 한 가지라면, 어떤 다른 이유로 소프트웨어를 변경하더라도 해당 컴포넌트에 대해서는 신경쓸 필요가 없다는 것 컴포넌트의 의존성 각각은 이 컴포넌트를 변경하는 이유 하나씩에 해당 컴포넌트 A : 모든 컴포넌트에 의존하고 있기 때문에 다른 어떤 컴포넌트가 바뀌든지 같이 변경해야 함 컴포넌트 E : 의존하는 컴포넌트가 없기 때문에 E를 변경할 이유는 새로운 요구사항에 의해 E의 기능을 바꿔야 할 때 뿐 의존성 역전 원칙 의존성 역전 원칙의 정의 : '코드상의..
웹 계층에서는 클라이언트로부터 요청을 받아 도메인 계층에 있는 서비스로 요청을 보냄 서비스에서는 필요한 비즈니스 로직을 수행하고, 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출 사실 계층형 아키텍처는 견고한 아키텍처 패턴이다 계층을 잘 이해하고 구성한다면 웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있음 도메인 로직에 영향을 주지 않고 웹 계층과 영속성 계층에 사용된 기술을 변경 가능 잘 만들어진 계층형 아키텍처는 선택의 폭을 넓히고, 변화하는 요구 사항과 외부 요인에 빠르게 적응할 수 있음 계층형 아키텍처의 함정 계층형 아키텍처는 데이터베이스 주도 설계를 유도한다 우리가 만드는 대부분의 애플리케이션의 목적은 보통 비즈니스를 관장하는 규칙이나 정책을..
equals() 두 객체의 동등성을 비교하기 위해 오버라이딩하는 메서드 동등성 : 두 객체가 동등한 정보를 가지고 있는 지(equals) 동일성 : 두 객체가 동일한 객체인지 (==) Object 클래스의 equals()는 기본적으로 동일성을 비교하기 때문에, 객체의 동등성을 비교하려면 equals() 메서드를 재정의해야 함 hashCode() Object 클래스의 hashCode() 메서드는 네이티브 메서드로, 객체의 주소 값을 이용하여 생성한 해시 코드를 반환 주의할 점은, 객체의 주소 값을 이용하는 것이지 주소 값 자체가 해시 코드 값이 아니라는 점이다. equals() 메서드 오버라이딩 시 주의사항 Object 클래스의 hashCode() 메서드 주석을 보면, 빨간 글씨로 equals() 메서드를..
인트로 Offset 페이징과 No-Offset 페이징의 성능을 비교하기 위해 더미 데이터를 추가하던 중, 호기심이 생겨 다양한 방식으로 적재 속도를 비교해 보았습니다. 실행 환경 PC : Apple M2 Pro (저전력모드) Tool : IntelliJ Datagrip Docker : MySQL 8.0.31 더미 데이터 1,000만 건의 Article 레코드 외래키 제약조건 1개, Check 제약조건 2개가 존재 성능 측정 1. 개별 Insert from datetime import datetime #SQL 파일 생성 sql_file_path = 'individual_insert.sql' with open(sql_file_path, 'w') as sql_file: # 1부터 10000000까지의 데이터 ..
인생 처음으로 오픈소스 프로젝트에 기여를 했다! 🎉 주석에 있던 오타를 정정한 게 전부였지만, 오픈소스 기여 경험이 없었고 그 대상도 자바 개발자라면 한번쯤 들어본 AssertJ 라이브러리여서 몹시 두근거렸다 ❤️🔥 검토되는 데 오래 걸릴 줄 알았는데, 잠깐 사이에 AssertJ 레포지토리에 내 아이디가 떠있어서 정말 신기했다 😁 예전에 지나가다 본 블로그에서 대형 프로젝트에 이런 식으로 기여했다는 글을 보고 정말 부러웠는데, 나도 우연히 발견한 오타로 오픈소스 프로젝트에 기여해 볼 수 있어서 참 즐거웠다 :) 정말 사소한 기여였지만, 오픈소스 기여의 첫걸음을 떼었기에 나에게는 의미가 큰 경험이었다 👊
문제 상황테스트 코드를 작성하던 중, 실제 엔티티의 생성 시간과 DB에 저장된 값이 일치하지 않는 오류가 발생했습니다.로그를 확인해 보니, DB에 저장된 값은 22초인데 실제 생성 시간은 21.805265로 약 0.2초의 오차가 있었습니다.문제 원인JPA Auditing에서 LocalDateTime은 기본적으로 MySQL의 datetime과 매칭되는데, 이는 실제로 datetime(0)에 해당합니다.여기서 0은 반올림 자리수를 나타내는 값으로, 소수점 첫번째 자리에서의 반올림을 의미합니다.이로 인해, MySQL에 21.805265 값이 전달되어도 22.0으로 반올림 되어 오차가 발생하게 됩니다.해결 방법1. datetime 반올림 자릿수 변경datetime의 반올림 자리수를 변경하여 JPA Auditin..
문제 상황 AWS EC2 t2.micro 인스턴스 상에서 gradle로 프로젝트 빌드 시 인스턴스가 다운되는 문제 발생 configuring 혹은 initializing 단계의 0%에서 더 이상 진행되지 않음 "gradlew clean" 실행 시, 인스턴스가 다운되는 문제 발생 문제 원인 EC2 인스턴스의 메모리가 부족한 것이 원인 t2.micro (혹은 t3.micro)의 메모리 크기는 1GB AWS에서 제공하는 Ubuntu AMI에는 SWAP 메모리가 설정되어 있지 않음 문제 해결 해결 방법 SWAP 메모리 설정을 통한 메모리 추가 확보 SWAP 메모리 권장 크기 메모리가 2GB 이하인 경우, 메모리의 2배를 권장 t2.micro (혹은 t3.micro)의 경우 RAM이 1GB이므로, 스왑 메모리의 ..
스프링부트 프로젝트에 Certbot으로 Let's Encrypt에서 발급받은 SSL 인증서를 사용하여 HTTPS를 적용하는 방법이다. 서버 환경 : Ubuntu 22.041. Nginx 설치sudo apt-get updatesudo apt-get install nginx2. Nginx 리버스 프록시 설정sudo vi /etc/nginx/conf.d/default.confserver { listen 80; server_name {도메인이름.com}; # 도메인 주소 입력 location / { proxy_pass https://localhost:8080; # 스프링 서버의 포트번호가 8080이 아니면 맞춰서 수정 proxy_set_header X-Real-IP ..
9월 21일에 ICPC 대회 팀이 꾸려졌다. 백준 다이아 티어 승준이, 골드 티어 정현이, 그리고 플레인 내가 한 팀이 되었다. 연습을 시작한 것은 약 대회 1주일 전인 9월 27일부터 준비를 했다. 2번 정도 모여 ICPC 기출문제를 풀었다. 결과는 두번 다 2솔을 했다. 준비 과정에서 스스로의 한계를 많이 느꼈다. 가장 큰 부분은 알고리즘을 4개월간 벼락치기로 공부해놓고 복습을 하지 않아, 여태까지 배워온 알고리즘 지식들을 거의 전부 까먹은 점이다. 다시 기초부터 지식을 메꾸기에는 시간이 부족했다. 어쩔 수 없이 계란으로 바위치기 식으로 연습에 임했고, 문제들에 부딪히면서 마음이 심란했다. 예선 결과는 3솔. 결국 내 손으로 푼 문제는 하나도 없었다. 객관적으로 봤을 때 내가 팀에 기여한 점은 없었다..