[AWS] AWS RDS 설정 및 생성한 DB를 Mysql에서 접속하기
·
DevOps/AWS
이번 캡스톤디자인 프로젝트에서 개발 환경(dev)의 RDB와 운영 환경(prod)의 RDB를 분리하기 위해 RDS를 도입했습니다. RDS가 무엇인지 간단하게 설명드리겠습니다. AWS RDS (Relational Database Service) 아마존 관계형 데이터베이스 서비스(Amazon Relational Database Service) 또는 아마존 RDS(Amazon RDS)는 아마존 웹 서비스(AWS)가 서비스하는 분산 관계형 데이터베이스입니다. 애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순케 하도록 설계된 클라우드 내에서 동작하는 웹 서비스 데이터베이스 소프트웨어를 패치하거나 데이터베이스를 백업하거나 시점 복구를 활성화하는 것과 같은 복잡한 관리 프로세스들은 자동으로 관리..
[Spring] Lightsail 배포 서버에서 Spring Application 실행 시, Encoding UTF-8 인식을 하지 못하고 한글이 깨지는 현상
·
Java/Spring
현재 진행하고 있는 캡스톤디자인2 프로젝트에서 하나의 issue가 발생했습니다. 해당 프로젝트에서 음식 정보와 알러지 유형을 allergy.properties 파일에 따로 담아두고, @PropertySource, @Value 어노테이션을 통해 음식 정보와 알러지 타입을 불러오도록 설정파일을 만들어 주었습니다. Application 실행 시, Local 환경에서는 인텔리제이 설정(File Encoding -> UTF-8)을 통해 한글이 깨지지 않고 해당 정보들이 잘 읽어왔습니다. 하지만, Lightsail 서버에서는 한글이 다 깨지는 현상이 발생하여 Application이 실행되지 않았습니다. 시도 1. Lightsail에도 UTF-8 설정 (해당 블로그 참조 : https://chucoding.tisto..
[Spring] @PropertySource, @Value 어노테이션에 대해 알아보자
·
Java/Spring
개발을 할 때, Property 파일을 resource 폴더 내에 만들어 두고 필요할 때 해당 값을 많이 읽어옵니다. 주로 데이터베이스 연결 설정이나 Property 파일의 속성을 주입할 때 사용합니다. 즉, @PropertySource 어노테이션을 통해 외부의 설정 파일(.properties, .yml)을 읽어와 해당 정보를 사용할 수 있게 됩니다. 이제 @PropertySource, @Value에 대해 간단하게 설명 드리도록 하겠습니다. @PropertySource("value = "classpath:allergy.properties") classpath:allergy.properties 경로에 있는 설정 파일을 읽어옵니다. Environment 객체를 이용해서 해당 설정 값을 가져올 수 있습니다. ..
[Git] needs merge : you need to resolve your current index first
·
DevOps/Git
Lightsail 서버 git pull을 하려고 했을 때 발생한 Error입니다. 제 예상은 가상 서버에서 코드를 vi로 수정한 것이 원인이라고 생각하는데요. 다음과 같이 해결할 수 있습니다. git reset --merge 이 명령어 입력 후 원활하게 작업하실 수 있습니다. https://euna501.tistory.com/entry/Github-error-needs-merge
[Spring] JPA Auditing 기술을 사용하여 생성일자, 수정일자 컬럼의 데이터 형식을 깔끔하게 지정하는법
·
Java/Spring
JPA Auditing 기술은 엔티티를 생성 및 변경할 때, 생성시간, 수정시간 등을 자동으로 삽입해 주는 기능입니다. Audit은 감사하다, 추적하다의 의미를 지니는데, Auditing 기술을 이용하면 마지막에 데이터를 생성 및 수정한 사람과 시간을 추적할 수 있게 됩니다. 우선, Auditing 기술을 사용하게 위해, SpringApplication.class에 다음과 같은 어노테이션을 지정해줘야 합니다. @EnableJpaAuditing public class ExerciseApplication { public static void main(String[] args) { SpringApplication.run(ExerciseApplication.class, args); } } 다음으로 생성시간, 수..
[Spring] DTO, VO 이 둘의 차이에 대해 알아보자
·
Java/Spring
저는 DTO랑 VO를 구분하지 않고 비슷한 맥락으로 보고 있었는데요. 이 들의 차이를 구분하고 어떤 상황에서 DTO를 도입하고, VO를 도입해야 하는지 하나씩 알아보도록 하겠습니다. DTO(Data Transfer Object) 순수하게 데이터를 담아 계층 간으로 전달하는 객체, Getter/Setter 메서드만을 가집니다. "데이터 전달"이 주목적입니다. 이를 통해 보내는 쪽에서 setter를 이용하여 값을 담아 전달하고, 받는 쪽에서는 getter를 이용하여 값을 꺼내서 쓰게 됩니다. setter의 경우, 변조 가능성이 있기 때문에(setter 사용 지양) 생성자로 값을 넣어주면, 전달하는 과정에서 변조가 불가능합니다. VO(Value Object) DTO(Data Transfer Object)와는 ..
[Elasticsearch] Data Indexing, Searching By Query
·
Database/Elasticsearch
Elasticsearch는 관계형 데이터베이스와 다르게 쿼리(Query)와 필터(Filter)를 통해 데이터를 인덱싱 및 서칭 합니다. 쿼리와 필터는 모두 JSON형식으로 구현하며 이 QueryDSL(Domain Specific Language)라고 합니다. 쿼리와 필터는 각각 독립적인 요소로 실행되는데 이들에 대해 상세하게 설명드리도록 하겠습니다. 기본적인 형태소 분석 과정에 대해 설명드리자면, 대문자를 모두 소문자로 변환하고 중복 단어를 제거 후 분석 과정을 거치게 됩니다. 이러한 과정을 거치고 저장된 토큰을 텀(term)이라고 합니다. 이제 쿼리에 대해 하나씩 예시 코드와 함께 설명드리겠습니다. Indexing IndexQuery Indexing: 데이터를 검색될 수 있는 토큰으로 변환하기 위해 원..
[Spring] 웹 애플리케이션과 영속성 관리
·
Java/Spring
스프링 컨테이너의 기본 전략 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략 사용 트랜잭션을 시작할 때 영속성 컨텍스트(Persistance Context)를 생성하고 트랜잭션이 끝나면 영속성 컨텍스트를 종료합니다. 핵심 비즈니스 로직을 담당하는 Service 클래스에서 @Transactional 어노테이션을 통해 트랜잭션을 시작하게 되고, 서비스보다 상위 계층에 있는 Layer는 준영속 상태가 됩니다. 준영속 상태가 뭔지 설명드리기 전에 엔티티 생명주기에 대해 간략하게 설명드리겠습니다. 엔티티 생명주기 비영속(new/transient): new 키워드로 객체를 생성만 한 상태 (영속성 컨텍스트에서 관리 X, 1차 캐시, 변경 감지 등의 기능 적용 X) 영속(managed): 영속성 컨텍스트에 의..
[Java] EnumSet에 대해서
·
Java/Java Concept
캡스톤디자인2 Allercheck 프로젝트에서 핵심 기능을 구현하기 위해 EnumSet을 활용하였습니다. 핵심 기능의 일부를 위해 EnumSet을 적용하였는데, 간략하게 설명드리자면 데이터베이스에 음식에 관한 알러지 정보를 저장하기 위해 사용하였습니다. JPA에서는 EnumSet 자료 구조에 JSON 직렬화, 역직렬화를 제공하지 않아 직접 이 기능을 구현해야 하는 번거로움이 있었습니다. 이제 EnumSet이 무엇이고 왜 사용하는지에 대해 설명드리겠습니다. EnumSet EnumSet은 Enum 클래스와 함께 작동하는 특수한 Set Collection입니다. Set 인터페이스를 구현하고 AbstractSet에서 확장됩니다. 인스턴스를 생성할 수 있는 여러 정적 팩토리 메서드가 포함된 추상 클래스입니다. A..
2023 11월 회고록
·
일상/회고록
되게 오랜만에 회고록을 작성하는데, 글을 어떻게 써야 할지 감이 안 오네요.. 그래도 이번달에는 이사 예정도 있고, 학우들과 진행하고 있는 캡스톤 프로젝트도 마무리 지어야 될 거 같아서 미리 앞당겨서 글을 작성하려고 합니다. 벌써 올해가 끝나가네요. 믿기지가 않을 정도로 빨리 지나갔던 것 같습니다. 이제 서울 상경(?) 한 지 3달이 다 되어가는데, 아직까지도 생활적인 면에서는 불편함이 있네요. 더불어 지하철 파업 이슈로 2호선은 엄청 지옥인 거 같습니다 진짜로.. 하지만, 원래 계획이었던 캡스톤 프로젝트와 회사 업무를 병행하는 데는 크게 지장이 없기에 매우 흡족스러운 상황입니다. 아직 수습기간이 끝나지 않아, Git 계정을 최근에 받았기에 기본적인 Legacy 코드 분석과 개인 Local PC 환경에서..