본문 바로가기

분류 전체보기

(84)
request user-agent User-Agent는 웹 클라이언트가 서버에 요청보낼 때 자신을 식별하는 문자열 ex)Chrome Chrome-IE WOW64Windows on Windows라는 뜻FireFox FireFox-
apsharing certbot 인증서 갱신 어느날 메일이 날라왔다 프로젝트를 배포하고 그냥 두지 않는 편인데 (비용문제 ..ㅠㅠ)apsharing은 DB를 안써서 그런지 적은 비용이 들어서 그냥 계속 두고 있었다.그러니 인증서를 갱신해보자  1. 해당 프로젝트를 설치한 서버로 들어가기2. 도커 로그인 하기 3. nginx 서버 실행하기 4. certbot renew 실행하기   생각보다 매우 간단하다
람다식 람다식자바는 람다식을 익명 구현 객체로 변환한다익명 구현 객체란 이름이 없는 인터페이스 구현 객체를 말한다익명구현 객체를 람다식으로 표현하려면 인터페이스는 단 하나의 추상 메소드만 가진다인터페이스가 함수형 인터페이스임을 보장하기 위해서는 @FunctionalInterface 어노테이션을 사용한다(선택사항)메소드 참조메소드를 참조해서 매개변수의 정보 및 리턴 타입을 알아내 람다식에서 불필요한 매개변수 제거 정적 메소드를 참조할 경우클래스::메소드 인스턴스 메소드인경우참조변수:: 메소드 매개변수의 메소드인 경우클래스:: 메소드 생성자인 경우클래스 :: new
BudgetKeemi project BudgetKeemi 개발 일지프로젝트 제목BudgetKeemi개발일자2024.08.24 ~ 2024.09.14기술Java 21, Gradle , Spring framework, Git, H2, JQuery설명사용자가 자신의 수입과 지출을 관리할 수 있는 웹 어플리케이션입니다. 소셜 로그인, 예산 금액과 기간 설정, 월 별 수입/지출 확인, 지출 통계 등의 기능을 포함하고 있습니다.이슈 해결https://dev-hwa.tistory.com/117https://dev-hwa.tistory.com/118https://dev-hwa.tistory.com/119https://dev-hwa.tistory.com/120배운점 ERD 설계의 중요성 ToastUI 사용 경험 AJAX 에러 메시지 처리 빌더 패턴 사용 ..
돈 관련 필드 타입 BudgetKeemi 프로젝트에서의 고민 BudgetKeemi는 사용자가 자신의 수입과 지출을 관리할 수 있는 웹 어플리케이션이다.예산 설정, 월별 수입/지출 확인, 지출 통계 등의 기능을 포함한다. 처음에 ERD를 설계할 때 가장 고민했던 건 돈 관련 필드는 타입을 어떻게 지정해야할까? 였다.후보로는 int, long, float, double , BigDecimal 등이 있었다. BigDecimal에 대해 알게 된 점 BigDecimal은 조사하면서 알게된 타입이다.특징은 불변 성질을 가지고 있고 매우 큰 숫자도 표현할 수 있다는 것이다.BigDecimal은 큰 숫자를 배열에 나누어서 저장하고 내부적으로 임의 정밀도 연산을 사용해 계산을 아주 정확하게 할 수 있다. 금융 계산에 필수적인 타입이다.그러..
@NotNull @NotEmpty @NotBlank BudgetKeemi 프로젝트에서의 고민데이터를 검증하다 보면 @NotNull, @NotEmpty, @NotBlank 이 세 가지 어노테이션을 자주 사용하게 된다.하지만 이 어노테이션은 서로 다른 특징을 가지고 있어 가끔 헷갈린다.@NotNull @NotEmpty @NotBlank의 특징 @NotNull:  값이 Null을 허용하지 않는다@NotEmpty: 값이 Null 이나 ""(빈문자열)을 허용하지 않는다@NotBlank:  값이 Null 이나 ""(빈문자열)," "(공백)을 허용하지 않는다문제점나는 이 3가지를 자주 헷갈리곤 해서 허용하지 않는 범위가 가장 넓은 @NotBlank를 자주 사용했다. 그러던 도중에 이번 프로젝트에서 문제가 발생했다.UnexpectedTypeException 예외가 발생..
클라이언트? 서버? 구현 문제 BudgetKeemi 프로젝트에서의 고민가끔가다 어떤 기능을 클라이언트에서 구현할지, 서버에서 구현할지 고민될 때가 있다.나도 BudgetKeemi 프로젝트를 진행하면서도 이러한 고민을 했다.(물론 데이터 검증을 진행하는 경우 서버에서 검증하는 것은 당연하다.) 이 프로젝트에서는 거래내역 데이터를 날짜 기준 오름차순 또는 내림차순으로 정렬해야하는 경우가 있었다. 이런 상황에서 어떻게 해야할까우선 둘의 차이점을 알아보자클라이언트에서 구현1. 유연성2. 서버 부담 감소3. 빠른 구현- > 소규모 서비스의 경우의문점2번 서버 부담 감소에서는 의문이 들었다.정렬 혹은 분류되지 않은 대량의 데이터를 받는게 더 부담이 아닐까?서버에서 구현1. 성능 최적화2. 일관성 유지3. 데이터 처리 로직 분리-> 정렬하는 것이..
서비스 계층 간의 의존성 BudgetKeemi 프로젝트에서의 고민코드를 작성하다보면 내가 사용하는 언어와 프레임워크 특징을 잘 사용하고 있는가에 대한 의문이 들때가 있다. 포트폴리오 만드는 취준생 입장에서 코드 리팩토링이나 비지니스 로직을 추가하는 경우가 많이 없다보니 내가 지금 작성한 코드가 일으킬 사이드 이펙트를 상상하기 힘들다.하지만 각 계층의 역할을 이해하고 구조를 고민하면 더 좋은 코드를 작성할 수 있다.그래서 늘 구조를 설계할 때 신중해야한다. 이번에는 서비스와 컨트롤러 간의 의존성 분리에 대해서 생각해보았다Spring MVC 패턴 개발에 자주 쓰이는 MVC 패턴은 컨트롤러, 서비스, 레포지토리 이 세가지 계층을 떠올리게 한다.각 엔티티마다 하나의 컨트롤러, 서비스, 레포지토리를 만들어서 서로 의존하면 참 좋겠지만 그..
JPA- 영속성 컨텍스트의 동일성 보장 영속성 컨텍스트 사용시 이점으로 언급되는 동일성 보장 왜 이점인지 알아보자 !! 영속성 컨텍스트 개념- 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 엔티티 매니저를 통해 접근이 가능 동일성 보장?- 영속성 컨텍스트 안에 데이터가 하나씩 존재하도록 하는 규칙- 중복 불허용 및 데이터 관리에 최적 궁금점 영속성 컨텍스트가 없어도 primary key가 있으면 동일성을 보장하지 않을까?  DB에서 직접 조회하는 경우- 동일한 ID를 가진 데이터를 여러번 조회하면 새로운 객체로 반환User user1 = database.findUserById(1);User user2 = database.findUserById(1);  >> user1과 user2는 같은 primary key를 가진 다른 메모리의 객체  영..
MusicCommunitySheets 프로젝트 배포 과정 리마인드하기 사용 기술: AWS EC2, MySql, Nginx, Spring boot, Docker, Git Actions 1. Spring boot 프로젝트- 도커파일 생성 (최상단 폴더)FROM eclipse-temurin:17-jdk-jammyARG JAR_FILE=build/libs/*.jarARG PROFILESCOPY ${JAR_FILE} app.jarENV TZ Asia/SeoulENTRYPOINT ["java","-Dspring.profiles.active=${PROFILES}","-jar","app.jar"] 2. AWS-ec2 인스턴스 생성-8080, 443, 80 포트 열기-탄력적 IP 연결- C:\Users\YourUsername\.ssh에  key 저장3. 인스턴스3-1. 접속- 쉘스크립트 ..