developer501의 등록된 링크

 developer501로 등록된 네이버 블로그 포스트 수는 159건입니다.

ManagementCurriculumDao [내부링크]

package com.myspring.gachon.admin.curriculum.dao; import java.util.List; import net.sf.json.JSO...

ManagementCurriculumDaoImpl [내부링크]

package com.myspring.gachon.admin.curriculum.dao; import java.util.List; import org.apache.ibatis.m...

ManagementCurriculumService [내부링크]

package com.myspring.gachon.admin.curriculum.service; import java.util.List; import net.sf.json.J...

ManagementCurriculumServiceImpl [내부링크]

package com.myspring.gachon.admin.curriculum.service; import java.util.List; import net.sf.json.J...

ManagementCurriculumVO [내부링크]

package com.myspring.gachon.admin.curriculum.vo; import org.apache.ibatis.type.Alias; @Alias(value...

AdminCurriculumXml(Mapper) [내부링크]

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.a...

ManagementCurriculumController [내부링크]

package com.myspring.gachon.admin.curriculum.controller; import javax.servlet.http.HttpServletReq...

MovieChartController [내부링크]

package com.myspring.standard.web.movie.movieChart; import java.util.List; import org.springframew...

MovieChartDAO [내부링크]

package com.myspring.standard.web.movie.movieChart; import java.util.List; import org.apache.ibati...

MovieChartService [내부링크]

package com.myspring.standard.web.movie.movieChart; import java.util.List; import javax.servlet.ht...

Ajax 기본형 [내부링크]

// Ajax 기본형1 function selectYearMst(s_year) {  var schoolYear = s_year; var dataForm = {  majo...

Type분기문 예제 [내부링크]

function yearType(type) {  if (type == "All") {  inputTextInit("#MST"); selectYearMst(); }  el...

페이지 url로 parameter 넘기기 [내부링크]

// 다음페이지 url로 ? 이후에 값 넘기기 function detailBtnClick(pieceNum){  var pieceNumber = piec...

selected class 삽입, 삭제 [내부링크]

<!-- 좌석선택의 인원수 선택 구분 --> <Script> $(function() {  $(".adult li").click(funct...

Modal hide and show [내부링크]

<!-- modal show / hide --> <script> function showModal(modalId){  $('#'+modalId).modal...

6. 클래스 [내부링크]

6.10.1 정적멤버, static (= 클래스멤버) * 정적멤버 : 클래스 고정 멤버, 객체 생성안하고 사용 가...

7. 상속 [내부링크]

7.1 상속(Inheritance) : 부모클래스의 멤버를 자식 클래스에 물려 주는 행위 * 부모클래스 (= 상위...

8. 인터페이스 [내부링크]

8.1 인터페이스의 역할 : 개발코드와 객체가 통신하는 접점에서 객체의 사용방법을 정의 * 개발코드 - 인터...

자바 스터디 1주차 키워드 [내부링크]

1. String 문자열 비교 (값 비교 vs. 주소값 비교) - 아래 소스는 static final 에 대한 예제포함 2. 배열...

2019.11.06 (수) 개발일지 [내부링크]

오늘부턴 개발일지를 자기전에 작성하고 자기로 결정했다 (30분 이내) 뭔가 그날그날 공부 한 것들이 머릿...

2019.11.12(월) 개발일지 [내부링크]

오늘은 뭔가 색다른 시간을 가졌다 일단 node.js를 설치했고, npm이란 것을 첨으로 써봤다 그리고 node를 ...

2019.12.08(일) 개발일지 (todo list 예제 종료, Vue + Typescript를 이용한 새로운 프로젝트 시작) [내부링크]

이번에 사용될 technical range는 아래와 같다 1. Spring 2. Spring boot 3. Mybatis 4. SwaggerUI 5...

입력단어의 가운데 글자 반환 [내부링크]

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자...

나누어 떨어지는 값 오름차순 정렬 [내부링크]

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solut...

물품 지원이 가능한 부서의 수 구하기 [내부링크]

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요 금액을 조사했습...

짝수, 홀수 여부 판단 [내부링크]

정수 num이 짝수일 경우 Even을 반환하고 홀수인 경우 Odd를 반환하는 함수, solution을 완성해주세요. ...

가장 작은 수를 제거한 배열 [내부링크]

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단...

[todolist] Vue cli + vuetify [내부링크]

* 07/15 코드리뷰에 대한 수정사항입니다. 1. v-on:이벤트명 = "메소드명" 형태를 맞춰줘...

[todolist] typescript + decorator [내부링크]

* 07/21 코드리뷰에 대한 수정사항입니다. 1. nextTick() 비동기로 처리되는 Javascript 특성 상, UI가...

[todolist] DB, API 연동하기 (base-api 서버단) [내부링크]

* 07/28 코드리뷰에 대한 수정사항입니다. 1. restful api 규격에 관한 7가지 rules 수정사항 : api/adm...

[todolist] DB, API 연동하기 (base-admin 프론트단) [내부링크]

* 07/28 코드리뷰에 대한 수정사항입니다. 6. id 값을 DB에서 auto-increment로 생성해야 한다 최초 개발...

[todolist] DB, API 연동하기 (최종) [내부링크]

* 08/02 코드리뷰에 대한 수정사항입니다. 전체적인 문제점 → TodoPage.vue에서 TodoList.vue로 fi...

[8/9 ~ 8/11] SUPER관리자와 일반관리자(사용자) 분리 및 권한부여 이슈 [내부링크]

* 이슈제목 : SUPER관리자와 일반관리자(사용자) 분리 및 권한부여 * 진행일자 : 8/9 ~ 8/10 * 이슈메...

vue에서 Vuex store의 사용자 정보 호출하기 [내부링크]

Vuex 의 store를 사용하여 로그인한 사용자의 id, 이름, 권한 등을 가져와 화면단에서 사용할 수 있다 위 ...

[Inflearn] 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의 [진행 계획 및 환경설정] [내부링크]

실제로 프로젝트 구축 단계에서 환경설정에 많은 노력이 들어가는 듯 하다 물론 스프링부트를 사용하기 때...

[Inflearn] 스프링 부트와 JPA 활용1 - 도메인 분석 설계 [요구사항분석 / 도메인모델과 테이블 설계] [내부링크]

1. 요구사항 분석 2. 도메인 모델과 테이블 설계 [ 컬럼 타입에 관한 설명 ] 1과 *의 표시는 1:N의 표현으...

[Inflearn] 스프링 부트와 JPA 활용1 - 도메인 분석 설계 [엔티티 클래스 개발] [내부링크]

엔티티 클래스 개발 예제에서는 설명을 쉽게하기 위해 엔티티 클래스에 Getter, Setter를 모두 열고, 최...

[Inflearn] 스프링 부트와 JPA 활용1 - 도메인 분석 설계 [엔티티 설계시 주의점] [내부링크]

4. 엔티티 설계시 주의점 1) 모든 연관관계는 지연로딩으로 설정해라 (매우중요) - 즉시로딩(EAGER)는...

[Inflearn] 스프링 부트와 JPA 활용1 - 애플리케이션 아키텍쳐 [내부링크]

애플리케이션 아키텍쳐 계층형 구조 사용 - controller, web: 웹 계층 - service: 비즈니스 로직, 트랜잭션...

[Inflearn] 스프링 부트와 JPA 활용1 - 회원 도메인 개발 [내부링크]

1. 회원 리포지토리 개발 2. 회원 서비스 개발 * 주입 방법 3가지 1) Autowired 테스트를 하거나 할 때 pr...

[Inflearn] 스프링 부트와 JPA 활용1 - 상품 도메인 개발 [내부링크]

1. 비지니스 로직 추가 - 엔티티 안에서 해결 할 수 있는 것에 대해서는 해당 엔티티 내에 비지니스 로직이...

Intellij 단축키 (2021.08.23 기준) [내부링크]

ctrl + space : basic code complition(the name of any class, method or variable) ctrl + shift + space...

[Inflearn] 스프링 부트와 JPA 활용1 - 주문 도메인 개발[주문, 주문상품 엔티티 개발] [내부링크]

주문, 주문상품에 대한 엔티티를 개발 해 보자 여기서는 [생성 메서드, 비지니스 로직, 조회로직]으로 나누...

[Inflearn] 스프링 부트와 JPA 활용1 - 주문 도메인 개발[주문 서비스 개발] [내부링크]

이번엔 지난 포스팅에서 만든 Order 엔티티와 OrderItem 엔티티를 이용 하는 주문 서비스(OrderServic...

Interceptor sample (Spring 5.3.9ver) [내부링크]

1. MyInterceptor 2. WebMvcConfig

[Inflearn] 스프링 부트와 JPA 활용1 - 주문 도메인 개발[주문 기능 테스트] [내부링크]

주문 서비스 개발에 대한 테스트 코드를 작성하여, 정상적으로 수행되는지 확인 해 보자 OrderService.ja...

[설계/리뷰] App / AppVersion 도메인 설계 [내부링크]

이번에 Base쪽에 App / AppVersion 도메인 설계와 구현을 담당하게 됐다 해당 서비스는 App에 대한 정...

[9/23 ~ 10/08] 앱 관리, 앱 버전관리 메뉴 설계 및 개발 [내부링크]

* 이슈제목 : 앱 관리, 앱 버전관리 메뉴 설계 및 개발 * 진행일자 : 9/23 ~ 10/08 * 이슈메뉴 : 관리자 - ...

[Inflearn] 스프링 부트와 JPA 활용1 - 주문 도메인 개발[주문 검색 기능 개발] [내부링크]

주문 검색 기능을 개발 해 보자 검색할 조건은 상태값과 주문명 2가지 이다 이번 포스팅에서는 동적 SQL...

[Inflearn] 웹 계층 개발 [회원 등록] [내부링크]

웹 계층에 대해서는 thyme-leaf를 사용하는데, 크게 주요하게 다룰 내용은 아니라 그냥 소스로 대체한다 다...

[Inflearn] 웹 계층 개발 [상품 등록] [내부링크]

1. ItemController.java 2. BookForm.java [실행 결과]

[Inflearn] 웹 계층 개발 [상품 수정] [내부링크]

1. 수정 Form 호출 + model을 이용해 기존 데이터 불러오기 [설명] 수정하고자 하는 상품의 id를 가져와 f...

[Inflearn] 웹 계층 개발 [중요! 변경 감지와 병합(merge)] [내부링크]

1. Merge에 대하여 위와 같이 item.getId가 있는 경우 MERGE하게 되는데, merge에 대해서 자세히 알...

[Inflearn] 웹 계층 개발 [상품 주문] [내부링크]

1. 상품 주문 화면 (회원, 상품이 등록되어 있을 때, 특정 회원이 상품을 주문하는 화면) 2. 상품 주문 .or...

[Inflearn] 웹 계층 개발 [주문 목록 검색, 취소] [내부링크]

1. 주문 목록 검색 2. 주문 목록 취소

URI Convention [내부링크]

기본적으로 restful 한 uri 생성 규칙을 이용해서 작업하고 있다 기본적인 REST Resource Naming Gu...

v-model로 넘기는 데이터가 숫자형이라면 .number를 붙여 표현하자 [내부링크]

위와 같이 v-model로 넘기는 데이터가 숫자형이라면, 아래와 같이 .number를 붙여서 표현하자

AWS 배포자동화 실제로 구축하기⑤ - ECR 이미지 태그 변경 + Task-Definition.json 생성하기 [내부링크]

현재까지 구축한 Github Actions와 ECR, ECS 간에는 몇가지 문제점이 있다 문제점 ①. 새로운 PUSH 명령에 따라, ECR에 업로드 되는 이미지 태그명이 이상하다 2번째 untagged는 원래 latest였다. 하지만 새로운 이미지가 같은 naming(latest) 으로 들어오는 바람에 untagged로 자동 변경 되었다. 기존 deployment.yml 의 이미지 태그명을 latest로 하드코딩 했기에 발생한 현상이다 문제점 ②. 새로운 PUSH 명령에 따라, ECS에 의해 EC2에 배포가 자동으로 되지 않는다 아래와 같이 index.html을 수정하고 커밋/푸시 하고, 실제 반영이 됐는지 확인 해 보자 <body> 영역의 <p> 태그 내용이 반영되지 않았다는 것을 알 수 있다 이제.......

AWS 배포자동화 실제로 구축하기⑥ - 도메인 Route53 등록 및 ELB 연결하기 [내부링크]

우선 아래 네트워크 아키텍처를 살펴보면, internet 브라우저를 통해 들어온 접근에 대해 ELB가 받아 연결된 라우팅 테이블을 통해 EC2에 요청을 보낸다 즉, 우리는 ELB가 가장 앞단에서 요청을 받는 구조이다 이전 포스팅에서 배포 테스트를 할때 아래와 같이 브라우저에 LB의 DNS를 치고 들어갔었다 이제 무료 도메인을 발급받고 Route 53에 등록하고 ELB 에 연결해서, 도메인으로 접속 해 보겠다 1. 무료 도메인 발급받기 https://www.freenom.com/ 에 접속한다 > 우측 상단의 Sign in을 클릭하고 > 아래 Use social sign in 으로 진행한다 로그인 후 [Services > Register a New Domain] 을 클릭한다 사용하고 싶은 도메인을 check .......

AWS 배포자동화 실제로 구축하기⑦ - ACM SSL 인증서 발급 및 HTTPS 리다이렉션 [내부링크]

아래 스크린샷을 보면 동일한 도메인이지만 https 접근은 차단되었고, http 접근은 정상적으로 노출되고 있다 http와 https에 대한 차이점, 구조, 동작원리는 잘 정리된 포스팅이 있어 링크 남긴다 우리는 https 접근을 위해 우선 ACM (AWS Certificate Manager)로 SSL 인증서를 발급받고, 로드 밸런서의 리스너를 적절히 수정해서 http → https로 리다이렉션하여 안전하게 https 페이지를 호출하도록 하는 작업을 할 예정이다 1. ACM을 통해 SSL 인증서 발급받기 [AWS Certificate Manager 콘솔 > 인증서 요청] 을 선택한다 도메인 이름에는 [*.ceaserdemo.ml] 과 [ceaserdemo.ml]을 입력한다 같은 도메인 내 여러 사이트 보호할 수 있도록.......

AWS 배포자동화 실제로 구축하기 - CloudFront의 이해 [내부링크]

이 [배포자동화 실제로 구축하기 시리즈] 의 처음 아키텍처 포스팅에서 프론트앤드는 아래와 같이 S3 에 업로드 된 vue 소스를 불러와 Route53과 연결짓는다 하지만, 여기서 한 단계 더나아가 CloudFront를 이용해서 웹 페이지 배포하는 작업을 하고자 한다 CloudFront가 무엇이고 사용하는 이유에 대해서는, 예전 AWS 사용중인 서비스 간단정리 포스팅에서 잠시 언급한 적이 있었다 이번 게시물에서도 짧게 복습하고, 다음 포스팅에서 실제로 Vue.js 웹 페이지를 S3에 직접 접근하는 것과 CloudFront 캐싱을 통해 접근 하는 것에 차이가 있는지 확인 할 것이다 1. CloudFront 란? CloudFront는 AWS에서 사용하는 강력한 CDN (Contents Delivery .......

AWS 배포자동화 실제로 구축하기⑧ - S3 + CloudFront로 Vue.js 정적 웹 페이지 배포하기 [내부링크]

지난 포스팅에서 CloudFront에 대해서 알아봤다 이제 이 시리즈의 마지막으로, CloudFront를 이용 해 Vue.js 정적 웹 페이지를 배포 해 보겠다 (앞서 생성했던 도메인과 연결해서, 실제 서비스 구축을 연상케 하도록 할 예정!) 추가로 간단한 이미지를 업로드 하고, S3에 직접 접근했을 때와 CloudFront를 통해 접근했을 때를 비교 해 보자 1. S3 버킷 생성하기 우리는 기존에 S3 버킷을 생성하고, 키 값을 보관하는 작업을 했었다 (참고) 동일하게 생성하되, 이번엔 액세스 권한과 객체 소유권에 대해서 조금 더 자세히 알아보자 아래와 같이 입력하고 생성한다 모든 퍼블릭 액세스 차단에 체크를 해도 CloudFront에서 접근이 되지만, 우리는 S3.......

AWS 배포자동화 실제로 구축하기 - 마무리 하며 [내부링크]

총 12개의 포스팅을 끝으로 [AWS 배포자동화 실제로 구축하기] 시리즈를 마무리 한다 사실 우연한 계기로 AWS 배포 자동화 구축을 담당하게 되었고, 관련 지식이 1도 없는 상태에서 너무나 막막했었다 지금 생각해보면 정말 잘되어 있는 AWS Docs도 있고, 구글에는 국내외 훌륭한 선배 개발자들이 올려놓은 포스팅과 stack overflow가 있는데 무엇이 그렇게 겁이 났을까 싶다 물론 AWS가 제공하는 정말 많은 옵션이 있고, 아키텍처는 정답이 없기 때문에 쉽지만은 않았다 때로는 내가 하고 있는게 이게 맞는건가? 망망대해를 떠도는 기분이 들 때도 있었다 내용이 스킵된 자료들도 많았고, 스킵한 옵션들로 인해 전체 리소스를 삭제하고 다시 만.......

[Efficiency] 최대 매출 구하기 (Sliding Window) [내부링크]

설명 현수의 아빠는 제과점을 운영합니다. 현수 아빠는 현수에게 N일 동안의 매출기록을 주고 연속된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다. 만약 N=10이고 10일 간의 매출기록이 아래와 같습니다. 이때 K=3이면 12 15 11 20 2510 20 19 13 15 연속된 3일간의 최대 매출액은 11+20+25=56만원입니다. 여러분이 현수를 도와주세요. 입력 첫 줄에 N(5<=N<=100,000)과 K(2<=K<=N)가 주어집니다. 두 번째 줄에 N개의 숫자열이 주어집니다. 각 숫자는 500이하의 음이 아닌 정수입니다. 출력 첫 줄에 최대 매출액을 출력합니다. 예시 입력 1 예시 출력 1 이중 for문으로도 해결 할 수 있.......

[Efficiency] 연속 부분수열 [내부링크]

설명 N개의 수로 이루어진 수열이 주어집니다. 이 수열에서 연속부분수열의 합이 특정숫자 M이 되는 경우가 몇 번 있는지 구하는 프로그램을 작성하세요. 만약 N=8, M=6이고 수열이 다음과 같다면 1 2 1 3 1 1 1 2 합이 6이 되는 연속부분수열은 {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}로 총 3가지입니다. 입력 첫째 줄에 N(1≤N≤100,000), M(1≤M≤100,000,000)이 주어진다. 수열의 원소값은 1,000을 넘지 않는 자연수이다. 출력 첫째 줄에 경우의 수를 출력한다. 예시 입력 1 예시 출력 1 쉽게 떠올릴 수 있는 이중 for문의 경우 O(n^2)의 방식이 있지만, 입력에서 N과 M의 값이 충분히 크기 때문에 이럴때는 O(n) 으로 해결 해야 한.......

[AWS Builders] IAM 정책과 역할(3) - IAM역할(Role) [내부링크]

이상하게 글을 올리고 이미지가 사라졌다.......ㅜㅜ 이미 실습 후에 비용이 나갈 수 있어 자원을 다 삭제한 상태인데 ㅠㅠㅠ 그냥 개인적인 참고사항으로만 볼 용도의 포스팅이므로 IAM에 관해서는 추후 다시 업로드 하던지 해야겠다 해당 포스팅은 AWS Builders Korea Program 세미나의 "보안의 기본! 최소권한 원칙을 위한 IAM 이해하기"에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 이번 포스팅에서는 권한을 부여하는 가장 안전한 방법인 Role과 부여받은 역할에 대한 역할 전환에 대해 알아본다 IAM 역할 (ROLE) 앞서 알아온 정책과 IAM자격증명과 마찬가지로 역할(Role) 역시 권한.......

AWS 배포자동화 실제로 구축하기 - 아키텍처 [내부링크]

이번 포스팅부터는 그동안 공부했던 것들을 토대로 github / gitlab 같은 형상관리 툴을 이용해서, AWS에 자동으로 배포되도록 파이프라인을 구축해 보고자 한다 (총 12회 분량) 실제 구축 사례를 포스팅으로 남기는 이유는 이렇다 이런 이유로 이번 시리즈는 굉장히 자세하게 배경지식과 캡처를 포함해서 작성하려고 한다 스압의 부담감에 뒤로가기를 누르기보다는 찬찬히 따라하며 읽어보면, 어느새 성공적인 인프라 구축이 가능할 것이라 생각한다 (화이팅!... 사실 나에게 하는 말임) 개인적으로 구상한 아키텍처는 아래와 같다. 툴은 Draw.io를 사용했다 (직접 구성한 구성도라 잘못된 점이 있다면, 말씀 부탁드립니다) 이하 포스팅은 각 파.......

AWS 배포자동화 실제로 구축하기① - 네트워크 구축하기 [내부링크]

회사마다, 아키를 구성하는 사람마다 naming rule은 다른 것 같다 보통 [리소스명-프로젝트 이름-스테이징 서버]의 형태로 네이밍을 하는 듯 하다 여기서는 demo라는 프로젝트에 별도 스테이징 서버는 없으므로, 가급적 [리소스명]을 앞에 두는 것으로 하겠다 1. VPC 생성하기 [VPC 콘솔] 에서 VPC를 생성한다 VPC가 생성됐다 2. Subnet 생성하기 그럼 이제 2개의 Available Zone (a/b)에 각각 1개의 public subnet과 private subnet을 구성하자 위와 같이 총 4개의 서브넷을 생성한다 반드시, vpc는 앞서 생성한 vpc를 설정 해야한다 서브넷 4개가 생성됐다 3. 라우팅 테이블 생성하기 기본적으로 VPC를 생성하면서 1개의 라우팅 테이블이 생성.......

AWS 배포자동화 실제로 구축하기② - ECR 생성하기 [내부링크]

이번 포스팅에서는 private ECR을 생성하고, EC2를 생성하여 docker 환경을 구축한 뒤, 실제 생성한 ECR에 붙어 이미지를 업로드 하는 것까지 구축한다 생성했던 EC2 자원과 docker 컨테이너는 삭제한다 (어차피 ECS 생성 할 때, EC2는 오토스케일링 그룹과 함께 자연적으로 생성되므로 더이상 필요 없다) 1. ECR 테스트용 EC2 생성하기 테스트용 EC2기 때문에 프리티어에서 이용할 수 있는 t2.micro 작은 크기의 EC2를 하나 띄운다 인스턴스 구성은 기존에 생성한 [VPC (Demo-VPC)]를 선택하고, 서브넷은 [public-subnet-2a]를 선택한다 IP자동할당은 [활성화]를 선택한다 SSH 접근을 위한 22번 포트와, 기존에 생성했던 보안그룹 (ecs-ec2-demo.......

AWS 배포자동화 실제로 구축하기 - S3 생성하고, 키 값 보관하기 [내부링크]

앞선 포스팅을 통해 네트워크를 구성하고, EC2를 통해 ECR에 도커라이즈 한 이미지 파일을 업로드까지 해보았다 이번 포스팅은 쉬어가는 타임으로, 기존에 생성했던 각종 키 들을 s3에 보관하는 실습을 하겠다 이전 작업 과정에서 aws 배포용 IAM 계정 (deployer)의 액세스/시크릿 키와 EC2 pem키가 생겼다 물론 개인 pc에서 조심히 관리할 수 있겠지만, 팀프로젝트의 경우 이런 파일들은 공유 리소스에서 private하게 관리되는 것이 좋다 S3 버킷을 private하게 생성하고, 해당 위치에서 파일들을 보관 해 보자 나중에 S3는 vue 화면단 소스의 배포용 버킷으로도 사용되므로, 미리 생성해두어도 좋다 기본적으로 S3의 정책은, ALL DENY다 이 버.......

AWS 배포자동화 실제로 구축하기③ - Github Actions + ECR [내부링크]

이번 포스팅에서는 실제 개발자가 github에 개발 소스를 push 했을 때, Github Actions를 사용하여 Docker 이미지를 빌드하고 AWS ECR (Elastic Container Registry) 에 푸시하는 방법에 대해 다룬다 대상 ECR은 앞서 생성한 ECR (AWS 배포자동화 실제로 구축하기(2) - ECR 생성하기) 을 사용한다 웹서버는 nginx를 이용하며, 도커파일을 참고하면 된다 간단히 오늘 해 볼 프로세스는 아래와 같다 Github ACtions가 push 명령이 on 되면, test와 formatting, code analysis를 진행하고, 순차적으로 build와 push 명령에 따라 ECR에 도커이미지를 publish 하게 된다 1. Github Demo Repository 생성 아래와 같이 Github에 Demo Repository를 하나.......

AWS 배포자동화 실제로 구축하기④ - ECS, ELB, EC2 인스턴스 생성하기 [내부링크]

이제 ECS를 생성하고, 앞서 ECR에 올린 이미지를 pull 하여 배포할 차례이다 이번 포스팅에서는 클러스터(ECS Cluster), 서비스(Service), 작업명세 (Task Definition)를 생성하고, ELB를 생성한 뒤 연결한다 기본적으로 ECS의 배포는 최소 2개 이상의 인스턴스를 연결하는 것이 권고사항이므로, 이번 인프라 구축에서도 EC2 2개를 생성하고, Auto Scaling Group으로 묶는다 1. EC2 인스턴스 SSH 접근을 위한 키페어 생성 [EC2 콘솔 > 네트워크 및 보안 > 키페어] 에서 [ec2-demo] 키페어를 생성하자 2. ECS 클러스터 생성 [ECS 콘솔 > 클러스터 > 클러스터 생성] 으로 이동한다 두번째 EC2 Linux + 네트워킹을 선택한다 아래와 같이.......

AWS 배포자동화 실제로 구축하기 - 인스턴스 유형 별 가용영역 확인 이슈 [내부링크]

ECS 작업을 하던 와중에 정상적으로 작업정의, 서비스, 클러스터를 구성했음에도 PENDING > STOPPED 상태로 넘어가는 이슈를 만나게 됐다 이상하다.. 하면서 찾아보며 이것저것을 둘러보던 중, Auto Scaling Group 에 아래와 같은 Failed 메시지를 발견했다 설명은 아래와 같다 내가 설정한 서브넷의 가용영역은 ap-northeast-2a / 2b 인데, 내가 설정한 instance의 유형 t2.medium은 supported 되지 않는다는 내용이었다... 확인 해 보니, 2a와 2c에서만 지원하네요 하하.. 아놔 ㅠㅠ 다되는거 아니었군... [EC2콘솔 > 인스턴스 유형] 으로 이동해서 2a, 2b에 해당하는 가장 작은 사이즈의 유형을 확인하고 다시 구축해야하겠다 사실 프리.......

[AWS Builders] 1일차 종료 주저리 주저리 [내부링크]

AWS 세미나에 대한 1차 기초 실습을 끝마쳤다.. 기본적인 내용들이라 사실 금방 금방 적용할 수 있었지만, 일부 놓치고 있던 옵션들이나 팁들을 알 수 있어 좋았다 아래 포스팅들은 똑같이 따라하면 100% 되도록, 실습한 내용을 캡처 했다 관련 자원들을 모두 날렸기 때문에 보안상의 이슈도 없을 듯 해서 전체공개로 돌렸다 이번 세미나에서는 필요하다 느끼는 3일차 까지만 신청했다 끝까지 완강해서 좋은 경험과 지식이 되었으면 좋겠다 굿빰!

[AWS Builders] AWS Basic Networking Design 알아보기 - VPC EndPoint [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 AWS Basic Networking Design에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 1~4 까지는 앞선 포스팅에서 다뤘던 AWS 네트워크 구성에 대한 내용이므로 빠르게 지나간다 VPC EndPoint는 5번부터 시작이다 (내용만 확인하고 싶다면 빠르게 체크하면 된다) 1. VPC 생성하기 아래와 같이 단일 public subnet 1개만을 갖는 VPC를 생성 해 보자 AZ는 2a 1개로 두고, private subnet 은 없다 구성을 완료하면 아래와 같은 아키텍처 상태가 된다 2. 서브넷 추가하기 AZ 2c 영역에 서브넷을 하나 추가한다 (서브넷 추가는 이전 포스팅 네트워크 구성에서 자.......

[AWS Builders] AWS Basic Networking Design 알아보기 - VPC Peering [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 AWS Basic Networking Design에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) AWS 네트워크 구성은 지난 VPC EndPoint 포스팅을 참고 해 구축 해 보면 된다 해당 포스팅에서는 VPC Peering 에 대해서만 다룬다 VPC Peering 으로 양방향 통신하기 서로다른 VPC의 자원을 필요로 할때 2가지 방법! 1) Internet Gateway : 서로다른 VPC가 인터넷을 통해 자원을 주고 받을 수는 있으나, 통신 속도나 보안면에서 이슈가 있을 수 있고, private zone의 자원은 참조 할 수 없다 2) VPC Peering : 별도의 물리적 장비는 아니고 논리적 장비 개념이라 별도 대.......

[AWS Builders] AWS Basic Networking Design 알아보기 - 네트워크 개론, 다양한 게이트웨이, 추가 서비스 [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 AWS Basic Networking Design에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 기본적인 VPC에 대한 설명은 앞선 포스팅에서 많이 다루었기 때문에, 개인적으로 수강하며 추가적으로 알게 된 사항에 대해서만 정리한다 1. VPC의 개요 VPC 내의 모든 EC2 인스턴스 들은 사설 IP가 부여되는데, 사설 IP는 물리적인 케이블, 와이파이 등을 통해 연결된 네트워크 망에서 인터넷을 타고 외부로 나갈 때 사용하는 것이 아니라 내부적인 용도로만 사용하는 IP다 반대도 공인 IP는 인터넷을 사용하고 외부로 나갈 수 있는 IP이다 BYOIP를 이용해 현재 사용하.......

[AWS Builders] AWS EC2를 이용한 Immutable Infrastructure 구성하기 - Route53, ALB [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 EC2를 이용한 Immutable Infrastructure 구성에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) - 목표 아키텍처 1. Network 구성 (수동으로 일일히 생성하진 않고, 만들어진 템플릿 환경을 이용할 예정) 1) Template 받기 a. CloudFormation Template ← Link 로 부터 download받기 (받아서 yml 파일로 바꾸어 저장!) b. Terminal을 사용한다면, 아래 command를 통해 다운로드 받기 이 파일을 열어보면, git으로부터 읽어와 cats, dogs, frontend를 배포하는 과정이 기술되어 있다 오늘 어떻게 ec2 가 프로비저닝 될때, git에서 불러와 배포하게 되는.......

[AWS Builders] Mutable vs. Immutable [내부링크]

앞선 immutable structure 포스팅에서 계속 등장하는 용어인 "Immutable"이 뭘까? 그냥 쉽게 생각해서 이렇게 생각하면 된다 Mutable은 한번 설치 한 이후, 계속해서 그위에 변경을 하는 것 Immutable은 변경이 필요한 경우, 기존 인스턴스를 삭제하고 변경이 반영된 새로운 인스턴스를 실행하는 것 각각의 장단점은 아래와 같다 1. Mutable 장점 : 변경이 필요할때마다 반영하면 되므로 상대적으로 관리가 용이하다 단점 : 변경점 관리가 어렵고, 여러개 인스턴스를 동일한 상태로 관리하기가 어렵다 2. Immutable 장점 : 여러개의 인스턴스를 동일한 상태로 관리할 수 있다 단점 : 지속적으로 변경이 적용된 최신화 된 템플릿 관리가.......

[AWS Builders] Linux / Windows 공유 파일 시스템 환경 구성하기 - Amazon FSx [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 워크로드에 적합한 스토리지 선택하기에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 캡처 이미지가 스압이 있지만, 실제 내용은 별거 없다.. 찬찬히 읽어보며 따라 가 보자! (쫌매우신기 함...) - 목표 아키텍처 Amazon FSx for window 를 통하여 Linux 호스트와 Window 호스트에 공유 파일 시스템 환경을 구성한다 아래 아키텍처를 보고 목표를 이해 해 보자 a) 가용영역 a1과 c1에 각각 서브넷을 구성하고, Windows host ec2와 Linux host ec2를 생성한다 b) 이 두 ec2에 공유 파일 시스템 FSX를 구성하고, 여기에 접근할 수 있도록 Active Dire.......

[AWS Builders] IAM 정책과 역할(1) - 사용자/사용자 그룹 생성 [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 "보안의 기본! 최소권한 원칙을 위한 IAM 이해하기"에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) IAM 사용자 4명을 생성하고, 2개 그룹을 생성 한 후 권한을 제어하고 부여하는 실습을 하려고 한다 이번 포스팅은 기본이 되는 사용자와 그룹을 생성하는 사전 준비 과정만을 다룬다 1. IAM 사용자 (User) 생성 IAM 사용자 (User) 란 AWS Identity and Access Management(IAM) 사용자는 AWS에서 생성하는 엔터티로, 사람 또는 애플리케이션이라고 보면 된다 (이름 + 자격증명) 우선 아래 4명의 사용자를 추가한다 [IAM 콘솔] - [사용자 추.......

[AWS Builders] IAM 정책과 역할(2) - IAM 정책(Policy) [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 "보안의 기본! 최소권한 원칙을 위한 IAM 이해하기"에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 이번 포스팅에서는 앞서 생성한 사용자와 그룹을 이용 해, 6가지 타입의 정책 분류와 정책부여를 통한 권한관리에 대해 알아본다 IAM 정책 (Policy) 1. IAM 정책 분류 (6가지) IAM 정책은 크게 권한을 제한하는 용도의 가드레일 (Guardrail) 과 권한을 부여하는 용도(Grant)로 나뉜다 : 이번 포스팅에서 다루게 될 정책 * 권한을 부여하는 정책 (Grant) 1. 자격증명 기반 정책 (Identity-based policies) a. AWS 관리형 정책 (AWS Manage.......

[AWS Builders] 클라우드 기초와 AWS클라우드 컴퓨팅 [내부링크]

들어가기 전에 2022.03.29~31 까지 3일간 AWS 에서 제공하는 세미나에 참석한다 우선 첫 날 첫 타임은 전체적으로 개론의 내용이라 간략하게 정리했고, 사실 어떤 서비스가 있는가? 에 대해 훑고 지나가는 형태기 때문에 자세히 볼 내용은 없다 (현재 진행중인 AWS를 활용한 인프라 구축을 마무리 짓고 관련 내용을 정리할 것이므로 그걸 보는 게 나을 듯) 해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 모듈1. 클라우드 컴퓨팅 및 AWS 소개 1. 클라우드 컴퓨팅이란? 인터넷을 통해 클라우드 서비스 공급자로.......

[AWS Builders] AWS 네트워크 구성하기 (VPC, Subnet, Routing Table, 보안그룹) [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) -. AWS 자원 레벨 각 Area 내에서 배포가 가능하다는 의미이다 ex. VPC는 하나의 리전에서 (리전레벨에서) 배포가 가능하다. a리전에서 배포된 VPC는 b리전에서 배포될 수 없다 -. 실습 아키텍처 - IAM에서 Administrator 계정을 만들어, 해당 계정으로 작업하는 것이 권장된다 (root 계정은 권장하지 않음) 1. VPC 생성하기 (+ 퍼블릭 서브넷 1개 추가하기) 사용자의 AWS 계정 전용 가상 네트워크, 이 네트워크 내에서는 AWS 리소스는 서로 통신 할 수 있다 Def.......

[AWS Builders] CIDR 주소 범위 이해하기 [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) : 아이피 주소들의 그룹 CIDR(Classless Inter-Domain Routing)은 네트워크의 주소와 크기를 표현하는 방식 중 하나이다. 앞선 실습에서 생성한 VPC는 16을 서브넷 값으로 하는 IP 주소 범위이다. 중요 한 건 / 다음의 숫자인데, 이 숫자는 아래 예에서 볼 수 있듯 각 자리 8비트 중에서 몇자리를 고정으로 보고, 몇자리를 가변 범위를 볼지를 결정하는 것이다 8자리.8자리.8자리.8자리 이므로, 앞에 16자리가 고정 범위라는 이야기고, 뒤에 16자리가 가변범위라.......

[AWS Builders] AWS 웹 서버 생성하기 (EC2) [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) -. 웹서버 인스턴스 실습 아키텍처 이제 아래와 같이 본격적으로 네트워크 기반에 컴퓨터 머신 EC2 웹서버를 올리고자 한다 1. EC2 생성하기 EC2(Elastic Compute Cloud) 란, AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공한다 * C2를 사용하면 아래와 같은 장점이 있다 - 하드웨어 선투자 필요성 없이 빠르게 애플리케이션을 개발하고 배포할 수 있다 - 원하는 만큼 가상 서버를 구축하고 보안/네트워크 구성과 스토리지 관리가 가능하다 - 갑작스러운 트래.......

[AWS Builders] AWS 로드밸런서 구성하기 (ELB) [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) -. 실습 아키텍처 1. ELB (Elastic Load Balancing) 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수, 가상 어플라이언스와 같은 여러 대상에 자동으로 분산시켜주는 AWS 리소스 ELB는 단일 가용영역 부터 여러 가용영역까지 다양한 애플리케이션 부하를 처리할 수 있다 하나의 서버에 장애가 있을 경우에도 서비스의 안정성을 보장 할 수 있다 (고가용성, 자동조정, 강력한 보안) 종류로는 아래 4가지가 있다 - Application Load B.......

[AWS Builders] AWS 모니터링 (Amazon SNS, CloudWatch) [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 1. Amazon SNS란 : 발행자에게서 구독자 (혹은 생산자에게서 소비자 라고도 함) 에게 메시지 전달 기능을 제공하는 관리 서비스 발행자는 비동기적으로 '토픽' 에 메시지를 전송하는 방법으로 구독자와 통신한다 (토픽은 논리적인 액세스 포인트와 소통 채널을 의미) 고객은 특정 SNS 토픽을 구독하면, 발행된 메시지를 지원하는 프로토콜을 통해 메시지를 받을 수 있다 이 프로토콜은 Amazon Kinesis Data Firehose, Amazon SQS, AWS Lambda, HTTP, e.......

[AWS Builders] AWS 오토스케일링 (Auto Scaling) [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) -. 오토스케일링 실습 아키텍처 이제 아래와 같이 기존에 설계된 아키텍처에 오토스케일링 그룹을 생성하고, 실제 부하테스트를 통해 정상적으로 스케일 업/아웃이 이루어지는지 확인한다 1. 오토스케일링 (Auto Scaling의 개념) 애플리케이션의 로드를 처리 할 수 있는 정확한 수의 EC2 인스턴스를 보유 할 수 있도록, 유동적으로 Scale up/out을 하여 보장하는 개념 Auto Scaling Group 이라는 EC2 인스턴스 그룹을 생성하고, 최소~최대 인스턴스 수를 지정할.......

[AWS Builders] AWS 정적 웹사이트 호스팅 (S3) [내부링크]

해당 포스팅은 AWS Builders Korea Program 세미나의 클라우드 기초와 AWS 클라우드 컴퓨팅에 대한 발표 자료와 강의를 토대로 작성되었습니다 (관련 자료의 사용을 허가 받았습니다) 1. Amazon S3란? : 한줄로 설명하면 AWS에서 제공하는 객체 스토리지 서비스로, 트래픽 증가에 따른 장비 증설이나 접근제어, 파일의 저장과 검색에 대한 서비스를 제공한다 S3에 대해 정리된 몇 가지 포스팅을 함께 첨부한다. S3를 왜 써야하고, 특징은 어떤 것이 있는지 잘 정리되어있다 * 두두네 클라우드 : https://datalibrary.tistory.com/185 * 생활코딩 : https://opentutorials.org/course/608/3006 2. S3 버킷 생성하기 바로 본론으로 들어가 보자 크.......

다수 게시판에서 공유하는 페이징 넘버링 해결 방법 (feat, AtomicInteger) [내부링크]

1. 이슈 상황 [공지사항, FAQ, 이벤트] 게시판에서 동일한 DB 테이블을 보고 있고, 화면 상 [번호(No)] 컬럼이 필요 했다 대략 위와 같이 하나의 board 테이블에 type으로 데이터를 구분하고 있었다 2. 해결 방안에 대한 아이디어 1) DB로 해당 데이터의 노출 번호를 저장하여 관리한다 - 데이터가 삭제되고 추가된다면, id는 auto-increment 값이므로 1, 2, 3, 5, 8, ... 과 같이 이상한 데이터 배열이 만들어진다 (X) 2) 화면 단에서 처리 - 아래와 같이 [전체 개수 - 인덱스 - (페이지번호*각페이지당 게시글 갯수)] 와 같은 계산식을 만들어, 매 게시판마다 넣어줘야 한다 (가능은 한데, 이건 좀 불편하다..., X) 3) 서버 단에서 처리 - 하나.......

데이터 존재 유무 확인 exists + 성능이슈 [내부링크]

Spring JPA에서 데이터 존재 유무 확인을 위해 exists 를 사용 할 수 있다 이런 경우 JPA에서 제공하는 existsBy~ 메소드 쿼리를 사용 할 수 있다 하지만 조건문이 3개 이상인 경우, 또는 필드명이 길거나 조건문 자체가 복잡한 경우 표현이 어렵다는 단점이 있다 이때 @Query를 붙여, JPQL 형태로 작성하는데, select의 exists를 지원하지 않아 count를 사용하여 exists를 대체한다 콘솔에 위와 같은 query가 찍힌다 이 쿼리를 exists 문으로 바꾸면 대략 아래와 같다 이 두 쿼리는 같은 결과를 갖지만, 데이터 양이 많아졌을 경우 성능에서 큰 차이를 보인다 이유는 exists는 첫번째 결과에서 바로 true를 리턴하지만, count의 경우는 총 몇건.......

[11/15 ~ 12/01] 약관 메뉴 설계 및 개발 [내부링크]

1. 리스트 - 이용약관 동의 / 개인정보 수신 및 이용 동의 / 프로모션 정보 수신 동의 / 위치정보 이용약관 동의 4가지를 enum으로 정의해서 사용 - 서비스도 당장은 관리 테이블이 없으므로 CUBEWIZ enum 으로 정의해서 사용 - 기본 리스트 조회, row 삭제, 엑셀다운로드, 필터, 페이징 제공 2. 등록 / 수정 - 약관 이름, 타입, 개정일자, 필수동의 여부, 설명, 사용여부 등록 - 필수동의는 약관 동의 시 validation check 에 사용 (필수/선택) - 개정일자는 datepicker 사용 3. 약관보기 및 동의 - 약관 동의를 필수로 받아야 하는 항목에 유효성 검사 체크 (반대는 그냥 패스) - 약관 동의에 [필수]/[선택] 표시 - 전체선택 / 개별선택 체크박.......

undefined, null 방지 간단 피드백 (NPE) [내부링크]

이 내용은 동료 개발자의 코드리뷰에서 가져온 내용임을 밝힌다 || "" 를 사용 한 것은 null 또는 undefined을 방지 하기 위함으로 해석된다 위와 같은 상황에선 itemText?.toLowerCase() 또는 (itemText || "").toLowerCase() 와 같이 사용하는 것이 더 좋은 방법이다 ?. 는 undefined이 올 수 있음을 의미한다

save vs. saveAll 의 퍼포먼스 차이 [내부링크]

최근 약관관리 도메인을 개발하던 중, [약관 동의] 처리를 일괄로 해야하는 케이스가 발생했다 아래와 같이 다수개 체크박스를 선택하여 동의처리를 하는 상황이었다 우선 처음 작성한 코드는 아래와 같다 이 소스를 아래와 같이 변경 했다 차이를 살펴보자 우선 첫번째 소스는 foreach를 돌리며 termsAdminMapRepository에 하나하나 save()를 날리고 있다 두번째 소스는 .toList()로 리스트 형태로 만든 다음, saveAll()을 하고 있다 콘솔에는 동일하게 save 가 찍히고, 동작에도 큰 문제는 없다 사실 그렇게 대량의 데이터가 아닌 고작 4건의 데이터일 뿐이기에 더욱이 문제 상황은 발생하지 않을 것이다, 그렇지만 두번째 방식이 올바른 방향.......

AWS 사용 중인 서비스 간단 정리 [내부링크]

현재 회사에서 사용중인 AWS 자원에 대해 간단히 정리하고자 한다 전체적인 사용중인 서비스 항목은 아래 이미지에서 확인 할 수 있다 1. EC2 기본적으로 한대의 컴퓨터라고 생각하면 간단하다 1) 인스턴스 각각 서버를 EC2에 세팅하고 퍼블릭 IPv4 주소를 할당한다 (현재 prod/qa/sandbox 3대 사용중) 퍼블릭 IPv4는 매번 바뀌기 때문에, 탄력적(Elastic IP)를 할당하여 고정 IP로 사용한다 각각의 인스턴스에 대해 시작/재시작/중지를 수행 할 수 있고, 각각의 인스턴스 상태를 확인 할 수 있다 간단한 데모 서비스만 구축한 상태기 때문에 서버 이중화는 특별히 하진 않은 상태이다 현재는 Docker를 이용해서 기존 이미지를 바라보도록 한 것.......

orphanRemoval = true 와 CascadeType.REMOVE [내부링크]

정말 정말 헷깔리는 옵션에 대해서 완벽하게 정리가 되어 기록으로 남기려고 한다 일단 상황을 아래 두 도메인 코드를 통해 확인 해 보자 간단하게 설명하면 app - app version의 관계는 @OneToMany 관계이고, 확인 해 볼 케이스는 2가지다 1. 부모 app 을 삭제 했을 경우, app version 이 삭제 되는 케이스 2. 부모 app을 통해서 자식 app version 엔티티를 컨트롤 (CRUD) 하는 케이스 (샘플이므로 app id = 4 인 것을 하드코딩 했다... 귀차니즘 ㅠㅠ) 1. 부모 App을 삭제 했을 경우, App Version이 삭제 되는 케이스 1) cascade = CascadeType.REMOVE 2) orphanRemoval = true CascadeType.REMOVE 와 orphanRemoval = t.......

tsconfig.json 타겟을 지정하여 빌드 퍼포먼스 높이기 [내부링크]

tsconfig.json의 include와 exclude를 활용하여 빌드 퍼포먼스를 높일 수 있다 위와 같은 주제로 git MR이 올라와 관련 내용을 정리 하고자 한다 (https://github.com/microsoft/TypeScript/wiki/Performance#misconfigured-include-and-exclude) [tsconfig.json 또는 jsconfig.json에 대한 구성] 타입스크립트와 자바스크립트 사용자는 tsconfig.json 또는 jsconfig.json 파일을 통해 그들의 컴파일 환경을 구성할 수 있다 쉽게 생각해서 include / exclude를 통해 컴파일 구성에서 포함 시킬지 제외시킬지를 결정할 수 있는 설정인데, 타입스크립트 단이냐 자바스크립트 단이냐의 차이일 뿐이다 tsconfig.json https://github.com/microsoft/Ty.......

fork-ts-checker-webpack-plugin 추가하여 빌드 퍼포먼스 높이기 [내부링크]

fork-ts-checker-webpack-plugin 을 추가하여 빌드 퍼포먼스를 높일 수 있다 위와 같은 주제로 git MR이 올라와 관련 내용을 정리 하고자 한다 https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#readme Fork TS Webpack Plugin 0. Webpack 이란? 모든 file을 module로 인식하며, 필요한 모든 모듈을 dependency graph에 따라 번들링 하는 도구를 말한다 - 결과물 : bundle 1. 특징 1) 타입스크립트 타입 체크 속도 향상 (별도 프로세스로 동작) 2) 프로젝트 참조나 incremental 모드와 같은 최신 타입스크립트 지원 * 프로젝트 참조 : https://www.typescriptlang.org/docs/handbook/project-references.html 타입스크립트 프로그.......

[GIT] CI/CD [내부링크]

최근 회사 프로젝트에서 인프라 담당을 하게 되면서 관련된 내용을 공부하고 정리하는 시간을 갖고자 한다 CI/CD 의 개념 애플리케이션 개발단계를 자동화하여 보다 짧은 주기로 제공하기 위한 방법이다 애플리케이션 통합 및 테스트 단계부터 제공 및 배포에 이르는 라이프 사이클 전체에 걸쳐 지속적인 자동화와 모니터링을 제공한다 코드 통합 과정에서 개발/운영 팀에 발생할 수 있는 인테그레이션 헬(Integration Hell)을 해결 하기 위한 솔루션이다 인테그레이션 헬 (integration Hell) 개발 / 운영 조직에서 코드 통합 (Merge) 과정에서 발생하는 문제를 말한다 통합 프로세스가 갖춰지지 않은 개발환경에서는 Merge 작업에서 오랜 시간 (.......

엔티티 명은 테이블명과 동일하게 하자 [내부링크]

아래는 flyway에 작성된 app_version create script 이다 아래는 AppVersion.java 엔티티를 작성한 코드이다 위와 같이 name에는 테이블명과 동일하게 써주어야 한다

1:N 연관관계 엔티티 분석 (단방향 매핑) [내부링크]

1:N 연관관계의 엔티티 간에는 어떻게 매핑을 해주어야 할까 1. 우선 App의 엔티티를 살펴보자 1) @Enumerated 엔티티를 사용해서 Enum type을 정의한 것 외에는 별다른게 보이진 않는다 2) 생성자를 두어 AppSimpleDTO를 통해 들어오는 파라미터 데이터를 각 필드에 set 해준다 3) change 메소드를 두어, update 시에 값 변경을 위해 setter 대신 사용한다 2. AppVersion 엔티티를 보자 1) @Getter, @Builder, @Entity, @NoArgsConstructor, @AllArgsConstructor 는 별도 롬복 포스팅에서 다룬다 2) @ManyToOne 다대1 연관관계 세팅에 대해 알아보자 우선 FetchType.Lazy를 써서, AppVersion 엔티티 호출 시, App이 항상 호출 되는 것이 아니라.......

@PrePersist를 활용해서 등록/수정자 시간을 넣어보자 [내부링크]

관리자 생성 시, Admin 엔티티를 통해 등록자/시간과 수정자/시간을 자동 세팅 되도록 해 보자 이때 중요한 건 setter를 두지 않고, 자동으로 세팅하되 java time 을 이용하여 생성하고, 추후 변경사항에 대해서는 updated만 수정하도록 한다 위 소스에서 createdBy와 created는 updatable = false를 주어 해당 컬럼은 수정이 안되도록 했다 또한 onCreate() 메소드 위에 @PrepPersist가 붙어 있는 걸 볼 수 있는데, @PrePersist : DB에 해당 테이블에 데이터를 밀어 넣을 때, 해당 연산을 동시에 같이 실행하라는 어노테이션을 말한다 즉 DB Insert 시에 Instance.now 시간을 created와 updated에 동시에 setting해서 insert하란 뜻이다 그.......

Boolean과 boolean의 차이 [내부링크]

BooleanBuilder를 이용해서 파라미터를 받아, jpaQueryFactory에서 데이터를 뽑아내는 JPA작업을 하게 됐다 아래 코드를 보자 재밌는 점은 available 파라미터가 Boolean type이란 것이다 boolean과 Boolean은 무엇이 다를까 우선 boolean은 default가 false인 primitive 자료형이다 즉, false와 true 중 하나는 무조건 갖기 때문에 null이 들어갈 수 없다 만약 위의 파라미터를 boolean available로 받았다면, if(available != null) 구문에서 이미 비교할 수 없다는 에러가 발생 하게 될 것이다 반면 Boolean은 참조형 타입이기 때문에 false, true, null이 모두 들어갈 수 있다 위의 경우는 available이 들어오지 않으면 null이 되어 sel.......

@Transactional(readOnly = true) [내부링크]

read만 하는 경우, @Transactional(readOnly=true) 을 붙여 개발하는 것이 좋다 해당 어노테이션은 트렌젝션 내에서 데이터를 읽기만 할 건지를 설정하는 것인데, DB 중에 read와 write 락을 따로 사용하는 경우, 해당 트랜젝션 내에서 의도치 않게 데이터가 변경되는 것을 막아줄 수 있다 또한 하이버네이트를 사용하는 경우에는 FlushMode를 Manual로 변경하여 Dirty Checking을 생략 해 주거나, DB에 따라서는 DataSource의 Connection 레벨에서도 설정되어 약간의 최적화가 가능하다 현재 하이버네이트를 사용하고 있지 않아 해당사항은 없지만, 혹시나 발생할 수 있는 쓰기 오류에 대한 방지 차원에서라도 해당 어노테이션은 붙여 개발.......

vue 에서 활용 가능한 에디터 3가지 [내부링크]

1. Toast Editor https://ui.toast.com/tui-editor 2. Vue2 editor 3. TipTap editor

윤년, 평년 구하기 [내부링크]

윤년 평년 구하기 (param = 년도) 1. 윤년은 4년에 한번 발생 (year % 4 == 0) 2. 1의 ...

2016년 a월 b일의 요일 맞추기 (윤년) [내부링크]

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b...

a와 b 사이에 속한 모든 정수의 합 [내부링크]

두 정수 a, b가 주어졌을 때, a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요....

각 자리수를 큰 것부터 작은 것 순으로 정렬 [내부링크]

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운...

시저암호 (알파벳 일정거리 Shift, feat. ASCII) [내부링크]

문제 설명 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 ...

IntelliJ DataGrip 에서 DB 연결시, Listener Refuse 문제 해결방법 [내부링크]

IntelliJ IDE에서 Database를 사용하거나, DataGrip에서 사용하고자 할 때 아래와 같이 Listener ...

STS(이클립스) 디버그 모드로 톰캣 구동 시, Breakpoint 에러 해결 방법 [내부링크]

STS 디버그 모드로 톰캣을 구동 하던 중, 아래와 같은 얼럿 메시지가 떴다 ㅇ_ㅇ... 뭔데..이거;; Unab...

[IntelliJ Error] Execution failed for task ':compileJava'. [내부링크]

기존에 회사에서 개발했던 소스를 git에 올렸고, 집에 돌아와 pc로 git repository의 소스를 내려받아 빌드...

Lombok 플러그인 설정 [내부링크]

Spring Boot Starter 이용 시, 아래와 같이 Dependencies에 Lombok을 추가하고 Generate 로 프로젝트...

사용자 커스텀 템플릿 등록하여 사용하기 (ft. Live Template) [내부링크]

테스트 코드 작성 시, 아래와 같이 @Test 어노테이션이나, public void~ 구문, //given~when~then 과 같은...

Git flow 사용해보기 [내부링크]

박스여우 [BoxFox] 님의 글 아래 글은 Git flow을 주제로 박스여우님께서 이해하기 쉽게 작성한 포스팅...

[Git] 원격 저장소 연결 및 끊기 ( git remote remove & add) [내부링크]

최근에 gitlab으로 연결된 프로젝트를 import 받아 github에 shared 해봤더니 원격 저장소 (remote reposit...

.gitIgnore 설정 및 적용, 잘못 올라간 github 파일 삭제방법 [내부링크]

오늘은 버전관리에 있어서 불필요한 파일들에 대해 예외처리를 하는 작업을 했다 최근에 만든 SpringMave...

web 기본 디렉토리 구조 변경 [내부링크]

지난번 spring 기본 환경세팅을 하던 도중, 아래와 같은 이슈를 받았다 오잉; 왜 web폴더가 /src/main/weba...

[Spring Framework] 스프링 프레임워크 구축부터 시작하기(예제 소스 포함) [펌] [내부링크]

이하 자료는 https://bestheroz.blog.me/ 블로그 님의 자료를 퍼온 자료이며, 이후 진행할 프로젝트의 기본...

Spring 정적 리소스 자원 매핑 (js, css, img) [내부링크]

이번 글 부터는 캡처 보다는 소스코드를 직접 붙여넣어 포스팅 하겠다 뭔가, 나중에 복붙하여 쓰기 어려울...

STS 4에서 Spring Legacy Project 사용하기 [내부링크]

이전 글의 템플릿을 만드는 과정에서 STS 4를 설치 했다 그런데!! Spring Legacy Project 항목이 없...

무료 라이센스) DB관리 툴 [DBeaver] 사용하기 [내부링크]

나는 DB관리를 위해서 그동안 몇가지 프로그램을 사용해 봤다 회사에서 Oracle + PL/SQL을 3년간 ...

Spring POST방식으로 전달 시, 한글깨짐 현상 해결법 (Form Submit 전송) [내부링크]

현재 개발 중인 Sample 프로젝트의 회원 가입 페이지에서, DB INSERT 시 회원이름 한글깨짐 현상...

Gradle spotless apply 대체 plugin [내부링크]

Base-api Gradle spotless apply 대체 plugin 세팅법 base-api 개발 후 gitlab에 push 하면 아래와 같이 ...

[Mysql] Default Timezone 설정 방법 [내부링크]

최근 계속 해서 DB의 기본 시간을 UTC로 할거냐, KST로 할거냐 그리고 그 변환은 어떻게 하느냐에 ...

Spring Boot DevTools 세팅과 사용이유 [내부링크]

devtools 를 추가해 놓으면 console.에 restartedMain으로 시작되는 걸 볼 수 있는데, 화면단의 변경 사항...

Burp Suit 환경세팅 및 사용법 [내부링크]

Burp Suit 을 세팅하고 사용 해 보자 1. 설치 URL : https://portswigger.net/burp/communitydownload...

.find 와 .some ES6 javascript [내부링크]

이번에 팀원의 코드리뷰를 하다가 위와 같은 changes를 발견했다 .find와 .some의 차이가 뭐길래 바꾸었을...

[JavaScript] encodeURI() , encodeURIComponent() 차이점 알고 사용하기 [내부링크]

URI 전체를 인코딩 할때 -> encodeURI() 사용 URI 파라메터를 인코딩 -> encodeURIComp...

DB 튜닝 (USE_HASH) [내부링크]

데이터 추출 요청 JIRA가 와서 SQL을 신나게 짜서 돌렸다 (오 좋아 벌써 다짰어 이러면서..) 근데 ...

[Mysql] MySQL NULL 처리 (IFNULL, CASE, COALESCE)_ft. Oracle NVL, DECODE [내부링크]

Oracle에서는 NVL(), NVL2(), DECODE()를 이용해서, NULL인 경우 값을 치환 할 수 있다 ...

[Mysql] DATE_FORMAT() [내부링크]

1. DATE_FORMAT(시간 값, 원하는 포멧) - Mysql의 날짜함수, 시간함수 - 설명 : 날짜를 지정된 ...

[Mysql] STR_TO_DATE() [내부링크]

1. STR_TO_DATE(문자열, 포멧) - Mysql DATE_FORMAT() 함수의 반대라고 생각 - 설명 :...

[Mysql] UTC Time to KST Time, TimeZone을 이용한 시간변환 (CONVERT_TZ) [내부링크]

JAVA 탭에 "[Java8 날짜와 시간 API ①] Java8 이전, 기존 날짜 API의 문제점과 한계점&q...

Log4J vs. SLF4J vs. Logback 도대체 무슨차이야? [내부링크]

현재 회사에서는 log4J 를 사용하여 로그를 남기고 있다 하지만 이번에 구축하는 템플릿 프로젝트에서는 l...

Logback을 사용해야 하는 이유 [내부링크]

앞선 포스팅에서 Logback에 대해 언급했었다 사실 Log4J나 Logback이나 로깅의 목적면에서는 동일한 역...

logger.isDebugEnable() 체크가 필요한 이유 [내부링크]

아래 새로운 Issues가 올라왔다 (사실 올라온지 좀 됐는데, 다른걸 하느라 좀 늦게 처리했다..) 일단 이슈...

DTO와 VO에 대한 생각 [내부링크]

사실 나의 경우 VO를 데이터 보관/수집 용도로 사용 했고, DTO 역할 또한 VO로 대체했었다 그러다보...

Collections Framework (업데이트 중) [내부링크]

배열과 컬렉션즈 프레임워크 (Intro) 1. 컬렉션 프레임워크의 사용 이점 : 배열은 정해진 크기를 변경 할 ...

JAVA Collections Framework 를 활용한 정렬방법 (Collections.sort()) [내부링크]

- Java 정렬 방법 Java 에서의 정렬은 java.util.Collections클래스의 static 메소드인 sort()를 이용한...

Collections.sort 예제 (오름차순/내림차순/역순) [내부링크]

1. 정렬 방법 오름차순 : Collections.sort( arrayList ); 내림차순 : Collections.sort( arrayList, ...

리플렉션(Reflection) 과 동적 객체 생성 (1) [내부링크]

소스리뷰를 하던 중 targetType.getDeclaredConstructor().newInstance(); 구문을 통해 생성자를 호출...

Stream 매칭(allMatch(), anyMatch(), noneMatch()) [내부링크]

Stream API는 특정 조건을 만족하는 요소들을 얻을 수 있도록 세가지 매칭 메소드를 제공한다 아래 ora...

리플렉션(Reflection) 과 동적 객체 생성 (2) [내부링크]

1장 포스팅에서 잠깐 언급했던 코드리뷰 소스의 일부를 확인 해 보자 MapperUtils.toObject(item, Mine...

[Java8 날짜와 시간 API ①] Java8 이전, 기존 날짜 API의 문제점과 한계점 [내부링크]

* 아래 샘플 예제들에 대한 소스는 git 주소를 참고하세요 이번에 간단한 고객사 개발요청 건을 수정하다가...

JAVA BigDecimal을 이용한 double type zero(0) 비교 [내부링크]

회사에서 이슈 처리 내용 중 하나를 간단하게 정리하고자 한다 주요 이슈내용은 mobile로부터 value를 받아...

Interceptor (Spring Framework 5.3.9)_HandlerInterceptor [내부링크]

1. 인터셉터 컨트롤러(Controller)의 '핸들러(Handler)'를 호출하기 전과 후에 요청과 응답을 ...

DTO를 이용하여 파라미터 받아오는 방법 vs. URL에 파라미터를 싣어 보내고 받는 방법? [내부링크]

1. 정석적인 방법 받아오는 변수가 password 뿐이므로, 1개의 변수를 위해 DTO를 생성해야 하는 번거로...

[JPA/QueryDSL] Native Query를 JPA+QueryDSL로 변경하기 [내부링크]

아래와 같이 회원에 대한 리스트를 출력할 때, 로그인한 계정 권한에 따라 노출시키는 회원이 달라져야 하...

[QueryDSL] 동적 쿼리를 위한BooleanBuilder, BooleanExpression의 활용 [내부링크]

기존에 작성하던 쿼리문은 WHERE 절 밑에 여러 조건을 AND절로 작성함으로써 다수의 조건을 걸 수 ...

[JPA] deleteAll vs. deleteAllInBatch vs. native query 어떤게 맞아..? [내부링크]

JPA에서 데이터를 일괄 삭제 할일이 있었다 이때 deleteAll과 deleteAllInBatch, native query 를 ...

[이슈] Create 시에 MemberForm 객체를 생성해서 사용할까? Member Entity를 사용하는게 나을까? [내부링크]

create 시에 MemberForm 객체를 생성해서 파라메터로 사용했었다 그런데 기존에 있는 Member Entity를 ...

Computed get 과 Watch 차이 명확히 알고 적절히 사용하기 (2) [내부링크]

지난 글에서 computed get과 method에 대해 비교 했다 이번에는 computed get과 watch 에 대해서 알아보고 ...

Computed get 과 method 차이 명확히 알고 적절히 사용하기 (1) [내부링크]

SELECT BOX를 만들 때, store에 저장된 권한에 따라(일반 계정일 때) SUPER 계정을 보이지 ...