본문 바로가기

분류 전체보기

(81)
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. 접속- 쉘스크립트 ..
MusicSheetsCommunity project MusicSheetsCommunity project 개발 일지프로젝트 제목MusicSheetsCommunity개발 일자2024.06~07개발 목적iframe 사용,게시판, 사용자 관리자 기능 기술 구현기술Java 17, Gradle, Spring, JPA, Git Actions, Docker, AWS Ec2, AWS S3, H2(local),My sql , Bootstrap, Javascript, JQuery설명youtube에 업로드된 영상 악보를 저장 및 관리하고 공통 관심사를 가진 사용자끼리 소통하는 커뮤니케이션 형성아쉬운 점초반에 웹 디자인을 직접 구현한다고 시간을 많이 소비함.참조 코드에 따라 JavaScript와 JQuery를 혼용해서 사용throw exception 사용으로 인한 excepti..
NGINX 기초 개념웹 서버 소프트웨어로 리버스 프록시, 로드밸런서 등의 기능을 수행함 정보master와 workers 프로세스 구성프로세스의 갯수는 설치 환경의 cpu에 알맞게 설정/etc/nginx/nginx.conf에서 확인 기본 로직클 -> master -> worker1 -> worker2 -> 처리  설정 파일directives함 (simple/block)- simple ex) root ... ;  - block ex) location / { ... } 기본 위치- etc/nginx/nginx.conf- include로 설정 파일 분리 ex) include /etc/nginx/conf.d/*.conf; server block-listen 80  (80포트로 받겠다)- server_name ex) server..
JsonEOFException 문제사항Json 예시 [{ "id":1 , "name":"Lucy" }]  Json을 역직렬화하려는 도중 계속해서 오류가 났다 ㅠㅠcohttp://m.fasterxml.jackson.core.io.JsonEOFException: Unexpected end-of-input: expected close marker for Object (start marker at [Source: (String)"{"id":14"; line: 1, column: 1]) at [Source: (String)"{"id":14"; line: 1, column: 9] 문제 코드@Test public void testSingleObjectJsonParsing(List jsonList) throws IOException { ..