분류 전체보기 365

[CI/CD] Github Actions을 활용한 CI/CD 구축

오늘은 캡스톤디자인2(AllerCheck) 프로젝트에서 CI/CD를 구축하기 위해 Github Actions를 도입하였는데요. 이 과정에 대해 상세히 포스팅해보려고 합니다.  우선 Github Actions, CI/CD가 무엇인지 간략한 정리와 함께 Github Actions에서 사용하는 개념도 함께 정리해 보도록 하겠습니다. Github Actions소프트웨어 개발 워크플로우를 자동화하는 도구, 이를 통해 빌드, 테스트, 배포 등의 작업을 자동화하고, 프로젝트의 생산성과 효율성을 향상시킬 수 있습니다.워크플로우는 Github 저장소에서 직접 관리되며, 이벤트에 따라 자동으로 실행됩니다. 예를 들어 푸쉬나 풀 리퀘스트와 같은 Github Event에 의해 트리거 되거나, 스케줄에 따라 실행되도록 설정할 ..

DevOps 2023.12.01

[AngularJS] AngularJS Framework에 대해 알아보자

AngularJS는 JavaScript 기반의 오픈소스 프론트엔드 웹 애플리케이션 프레임워크의 하나로, 싱글 페이지 애플리케이션 개발 중에 마주치는 여러 문제들을 해결하기 위해 개발되었으며, 주로 구글과 개별 커뮤니티, 여러 회사에 의해 유지보수 되고 있습니다. 추가적으로, 리치 인터넷 애플리케이션에 공통적으로 사용되는 구성 요소들과 더불어 클라이언트 사이드의 MVC(Model-View-Controller), MVVM(Model-View-View-Model) 구조를 위한 프레임워크를 제공함으로써 이러한 애플리케이션들의 개발 및 테스트를 단순화할 수 있습니다. (https://ko.wikipedia.org/wiki/AngularJS) BootStrap AngularJS BootStraper가 수행하는 작업..

[AWS] AWS RDS 설정 및 생성한 DB를 Mysql에서 접속하기

이번 캡스톤디자인 프로젝트에서 개발 환경(dev)의 RDB와 운영 환경(prod)의 RDB를 분리하기 위해 RDS를 도입했습니다. RDS가 무엇인지 간단하게 설명드리겠습니다. AWS RDS (Relational Database Service) 아마존 관계형 데이터베이스 서비스(Amazon Relational Database Service) 또는 아마존 RDS(Amazon RDS)는 아마존 웹 서비스(AWS)가 서비스하는 분산 관계형 데이터베이스입니다. 애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순케 하도록 설계된 클라우드 내에서 동작하는 웹 서비스 데이터베이스 소프트웨어를 패치하거나 데이터베이스를 백업하거나 시점 복구를 활성화하는 것과 같은 복잡한 관리 프로세스들은 자동으로 관리..

DevOps/AWS 2023.11.26

[Spring] Lightsail 배포 서버에서 Spring Application 실행 시, Encoding UTF-8 인식을 하지 못하고 한글이 깨지는 현상

현재 진행하고 있는 캡스톤디자인2 프로젝트에서 하나의 issue가 발생했습니다. 해당 프로젝트에서 음식 정보와 알러지 유형을 allergy.properties 파일에 따로 담아두고, @PropertySource, @Value 어노테이션을 통해 음식 정보와 알러지 타입을 불러오도록 설정파일을 만들어 주었습니다. Application 실행 시, Local 환경에서는 인텔리제이 설정(File Encoding -> UTF-8)을 통해 한글이 깨지지 않고 해당 정보들이 잘 읽어왔습니다. 하지만, Lightsail 서버에서는 한글이 다 깨지는 현상이 발생하여 Application이 실행되지 않았습니다. 시도 1. Lightsail에도 UTF-8 설정 (해당 블로그 참조 : https://chucoding.tisto..

Java/Spring 2023.11.25

[Spring] @PropertySource, @Value 어노테이션에 대해 알아보자

개발을 할 때, Property 파일을 resource 폴더 내에 만들어 두고 필요할 때 해당 값을 많이 읽어옵니다. 주로 데이터베이스 연결 설정이나 Property 파일의 속성을 주입할 때 사용합니다. 즉, @PropertySource 어노테이션을 통해 외부의 설정 파일(.properties, .yml)을 읽어와 해당 정보를 사용할 수 있게 됩니다. 이제 @PropertySource, @Value에 대해 간단하게 설명 드리도록 하겠습니다. @PropertySource("value = "classpath:allergy.properties") classpath:allergy.properties 경로에 있는 설정 파일을 읽어옵니다. Environment 객체를 이용해서 해당 설정 값을 가져올 수 있습니다. ..

Java/Spring 2023.11.25

[Spring] JPA Auditing 기술을 사용하여 생성일자, 수정일자 컬럼의 데이터 형식을 깔끔하게 지정하는법

JPA Auditing 기술은 엔티티를 생성 및 변경할 때, 생성시간, 수정시간 등을 자동으로 삽입해 주는 기능입니다. Audit은 감사하다, 추적하다의 의미를 지니는데, Auditing 기술을 이용하면 마지막에 데이터를 생성 및 수정한 사람과 시간을 추적할 수 있게 됩니다. 우선, Auditing 기술을 사용하게 위해, SpringApplication.class에 다음과 같은 어노테이션을 지정해줘야 합니다. @EnableJpaAuditing public class ExerciseApplication { public static void main(String[] args) { SpringApplication.run(ExerciseApplication.class, args); } } 다음으로 생성시간, 수..

Java/Spring 2023.11.24

[Spring] DTO, VO 이 둘의 차이에 대해 알아보자

저는 DTO랑 VO를 구분하지 않고 비슷한 맥락으로 보고 있었는데요. 이 들의 차이를 구분하고 어떤 상황에서 DTO를 도입하고, VO를 도입해야 하는지 하나씩 알아보도록 하겠습니다. DTO(Data Transfer Object) 순수하게 데이터를 담아 계층 간으로 전달하는 객체, Getter/Setter 메서드만을 가집니다. "데이터 전달"이 주목적입니다. 이를 통해 보내는 쪽에서 setter를 이용하여 값을 담아 전달하고, 받는 쪽에서는 getter를 이용하여 값을 꺼내서 쓰게 됩니다. setter의 경우, 변조 가능성이 있기 때문에(setter 사용 지양) 생성자로 값을 넣어주면, 전달하는 과정에서 변조가 불가능합니다. VO(Value Object) DTO(Data Transfer Object)와는 ..

Java/Spring 2023.11.17

[Elasticsearch] Data Indexing, Searching By Query

Elasticsearch는 관계형 데이터베이스와 다르게 쿼리(Query)와 필터(Filter)를 통해 데이터를 인덱싱 및 서칭 합니다. 쿼리와 필터는 모두 JSON형식으로 구현하며 이 QueryDSL(Domain Specific Language)라고 합니다. 쿼리와 필터는 각각 독립적인 요소로 실행되는데 이들에 대해 상세하게 설명드리도록 하겠습니다. 기본적인 형태소 분석 과정에 대해 설명드리자면, 대문자를 모두 소문자로 변환하고 중복 단어를 제거 후 분석 과정을 거치게 됩니다. 이러한 과정을 거치고 저장된 토큰을 텀(term)이라고 합니다. 이제 쿼리에 대해 하나씩 예시 코드와 함께 설명드리겠습니다. Indexing IndexQuery Indexing: 데이터를 검색될 수 있는 토큰으로 변환하기 위해 원..

[Spring] 웹 애플리케이션과 영속성 관리

스프링 컨테이너의 기본 전략 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략 사용 트랜잭션을 시작할 때 영속성 컨텍스트(Persistance Context)를 생성하고 트랜잭션이 끝나면 영속성 컨텍스트를 종료합니다. 핵심 비즈니스 로직을 담당하는 Service 클래스에서 @Transactional 어노테이션을 통해 트랜잭션을 시작하게 되고, 서비스보다 상위 계층에 있는 Layer는 준영속 상태가 됩니다. 준영속 상태가 뭔지 설명드리기 전에 엔티티 생명주기에 대해 간략하게 설명드리겠습니다. 엔티티 생명주기 비영속(new/transient): new 키워드로 객체를 생성만 한 상태 (영속성 컨텍스트에서 관리 X, 1차 캐시, 변경 감지 등의 기능 적용 X) 영속(managed): 영속성 컨텍스트에 의..

Java/Spring 2023.11.14