본문 바로가기

분류 전체보기

(47)
[Spring] 변경 감지와 병합(merge) 변경 감지와 병합 📍 준영속 엔티티 영속성 컨텍스트가 더이상 관리하지 않는 엔티티 jpa가 관리하고 있지 않음 준영속 엔티티를 수정하는 방법 변경 감지 기능 사용 병합(merge) 사용 아래 예제를 통해 위의 방법을 적용해보면, 📍 상품 수정 코드 Controller @PostMapping("items/{itemId}/edit") public String updateItem(@PathVariable("itemId") Long itemId, @ModelAttribute("form") BookForm form) { Book book = new Book(); book.setId(form.getId()); book.setName(form.getName()); book.setPrice(form.getPrice()..
[Spring] AWS + Docker 이용해 서버 배포하기 도커를 사용한 서버 배포 ⚙️ 개발 환경 도커는 이미 깔려 있는 상태 (Mac OS) AWS EC2도 Amazone Linux 2 Spring boot Java 17 Gradle 📍 도커 파일 생성 Dockerfile FROM openjdk:17-alpine ARG JAR_FILE=/build/libs/sejongmate-0.0.1-SNAPSHOT.jar COPY ${JAR_FILE} /sejongmate.jar ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod", "/sejongmate.jar"] open jdk java17 버전의 환경 구성 build 되는 시점에 JAR_FILE 경로에 jar 파일 생성 JAR_FILE을 sejongmate.jar에..
[Spring CICD] AWS + Docker + Github Action 이용해 서버 자동배포하기 AWS + Docker + Github Action 사용한 서버 자동배포 [Spring CICD] ⚙️ 개발 환경 Docker AWS EC2 Amazone Linux 2 Github Action Spring boot Java 17 Gradle 📍 AWS EC2 인스턴스 생성하기 Amazone Linux 이미지를 프리티어로 사용함 키페어 생성해서 저장해놓기 (지워버리지 않도록 유의하기) 그 외에는 스토리지만 20GB로 변경하고 인스턴스 생성함 이후 보안 그룹 설정해주기 (개발 시 다른 개발자도 접근 가능하도록 모든 위치에서 접근 가능하도록 설정함) 📍 AWS EC2 인스턴스에 도커 설치하기 키페어가 있는 폴더 내부에서 아래의 명령어를 통해 ssh 접속 ssh -i "키페어 파일이름" "퍼블릭 DNS 주소"..
[Spring] jpa entity 설계 시 주의점 1. 엔티티에는 가급적 Setter를 사용하지 말자 => Setter가 모두 열려있는 경우, 변경 포인트가 너무 많아서 유지보수가 어려움 2. 모든 연관관계는 지연로딩(LAZY)으로 설정하자 => 즉시 로딩(EAGER)은 조회 시점에 FK로 연결되어 있는 테이블 정보까지 모두 조회되기 때문에 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어려움 (JPQL 실행시 1 + N(FK 테이블) 문제 발생) => 연관된 엔티티를 조회해야 한다면, fetch join 또는 엔티티 그래프 기능 사용 => @OneToOne, @ManyToOne 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야함 3. 컬렉션은 필드에서 초기화하자 => 컬렉션은 필드에서 바로 초기화 하는 것이 안전하다. => null pointe..
BFS 너비 우선 탐색 너비 우선 탐색이란? 시작점에서 가까운 정점부터 순서대로 방문하는 탐색 알고리즘 방법? 각 정점을 방문할 때마다 모든 인접 정점들을 검사 이 때 처음 보는 정점을 방문하면 이 정점을 방문 예정이라고 기록해 둔 뒤, 별도의 위치에 저장 인접한 정점을 모두 검사하고 나면, 지금까지 저장한 목록에서 다음 정점을 꺼내서 방문 즉, BFS의 방문 순서는정점의 목록에서 어떤 정점을 먼저 꺼내는지에 의해 결정 수행 예 C++ 코드 #include #include #include using namespace std; vector adj; // 너비 우선 탐색 구현 // start에서 시작해 그래프를 너비 우선 탐색하고 각 정점의 방문 순서를 반환 vector bfs(int start) { // 각 정점의 방문 여부 v..
대규모 데이터 처리의 어려운 점 소규모 서비스와 대규모 서비스의 차이 확장성 확보, 부하분산 필요 scale-out : 서버 역할을 분담 or 대수를 늘림 → 부하분산 하드웨어를 횡으로 나열해 확장성 확보(하드웨어의 성능 가격에 비례 X) 웹 서비스에 적합한 형태 + 비용 저렴 + 시스템 구성에 유연성 요청을 어떻게 분배할 지? 데이터 동기화는 어떻게 할 지? 다중성 확보, 고장에 견고해야 : 특정 서버가 고장나거나 성능이 저하되어도 서비스를 계속할 수 있도록 단점 서버 대수가 늘어나면 서버의 고장률도 필연적으로 올라감 어떤 서버가 무슨 역할을 하고 있는지 파악하기 어려움 → 감시용 소프트웨어/정보관리 툴 사용(효율적 운용 필요) 대규모 서비스가 되면 여러 기술자가 역할 분담해야함 → 표준화하가 쉽지 않음(팀 매니지먼트가 필요해짐) s..
C++ stl sort Sort 함수 sort 알고리즘은 헤더 파일에 속함 sort(start, end)를 이용해 [start, end) 범위의 인자를 오름차순으로 정렬 Quick sort 기반으로 구현되어 있어 O(nlogn)의 평균 시간복잡도를 가짐 1차원 배열에서 vector를 사용하는 경우, → begin() : 리스트의 시작 주소 리턴 → end() : 리스트의 끝 주소 리턴(마지막 값보다 한 칸 뒤 위치) 이므로, sort(arr.begin(), arr.end()) 의 형태로 정렬 가능 배열에서 쌍으로 값을 저장해야 할 경우(ex. 좌표), → vector 사용하면 됨 → 값을 줄 때는 make_pair(value1, value2) 사용 → pair에 저장한 값은 .first , .second 로 불러올 수 있음 →..
VAE (Auto-Encoding Variational Bayes) 리뷰 VAE에 대해 소개하기에 앞서, 먼저 Auto Encoder가 뭔지 설명해보면, Auto Encoder 란? 비지도학습으로 입력 데이터의 표현을 효율적으로 학습할 수 있는 인공신경망 (feature extractor) Encoder - z (latent variable) - Decoder 형태 output이 input의 형태로 나타나도록 하는 것이 목적이나, 그 과정에서 입력을 reconstruction해서 데이터를 효율적으로 representation 하는 방법 학습 차원을 축소(특징 추출)하기 위한 목적으로 만들어졌기 때문에 Encoder를 학습하기 위해 Decoder를 사용한 것으로 볼 수 있음 Variational Auto Encoder Decoder를 사용하기 위해 Encoder 활용 (Deco..