들어가며Collection 프레임워크를 공부해보다가, 문득 생각이 들었다.Collection 은 종류는 엄청 다양하고 많지만, 위 인터페이스 별로 성능이 얼마나 차이가 날까?? 라는 궁금증이 생겼다. 누가봐도 Collection 은 배열보다 많이 쓰일 것이고, 안 쓰는 사람이 없을 것이다.그리고 간단하게 보면 그냥 Collection 은 성능은 둘째 치고, 본인 비즈니스에 맞게 즉 상황에 맞게 사용하는 것이 베스트다. 그래서 어떤 상황에서 어떤 Colleciton 을 써야 성능이 더 좋을까 라는 주제를 가지고 글을 써보았다. 본론 List 는 인터페이스로 위 List 를 구현하는 구현체는 아주 다양하게 존재한다.위 사진은 List 의 간단한 Hierarchy 로 List 는 순서가 존재해야 하니 Seq..
1. 들어가며실무를 하며 느끼는게 하나가 있다.내가 생각한대로 개발 일정 및 개발 요구사항이 평온하게 진행되는 경우는 없다고 느꼈다. 그렇기에 실질적인 요구사항에 맞춰 개발하는 나로써는 항상 이러한 고민을 하게 된다. '어떻게 하면 유동적으로 코드를 변경할 수 있을까?''어차피 요구사항이 계속 추가될걸 예상하고, 어떻게 코드를 추상화시켜서 내가 덜 고생할 수 있을까?' 라는 고민이 요즘들어 많이 든다. 평소에는 내가 코드를 짜는 방식은 일단, 작동은 되게 만들어 둔 후, 천천히 리팩토링 및 고도화를 시키는게 나만의 코딩 방식이였다. 하지만...바뀌는 요구사항들 및 버려지는 내 코드들을 보며, 느끼게 되었다. 처음부터 내가 코드 설계를 쪼금만 더 잘했다면??? 덜 고생하지 않았을까? 하는 생각을 한다. ..
들어가며 Aws 에서 서버를 구성하고 네트워크 구축을 하다보면 로드밸런서 라는 단어를 빈번하게 들어볼 것이다 처음에는 그냥 부하 분산을 해주는 것 정도로만 알고 있었는데 뭔가 조금 더 궁금해졌다.그래서 책을 보며 정리를 해보았다. 로드밸런서서비스의 안정성이나 가용량을 높이기 위해 서비스를 이중화 할때 는 서비스 자체적으로 HA 클러스터를 구성하기도 한다 하지만 복잡한 고려 없이 이중화를 손쉽게 구현하도록 로드밸런서가 많이 사용된다로드 밸런서는 다양한 구성 방식과 동작 모드가 있으며 각 방식과 모드에 따라 서비스 흐름이나 패킷 내용이 달라진다 서비스에 따라 적용해야 하는 구성 방식과 동작 모드가 각각 다르고 고려해야 하는 지점도 다르다따라서 로드 밸런서의 구성과 동작 모드를 이해해야만 서비스에 필요한 구..
들어가며영속성 전이는 엔티티의 영속성 상태 변화를 줄 때 연관된 엔티티에도 함께 적용하는 것이다예를 들어 엔티티를 저장할 때 연관된 엔티티도 함께 저장하고, 엔티티를 삭제할 때 연관된 엔티티도 함께 삭제하는 것이 영속성 전이 이다 영속성 전이를 적용하는 방법은 간단하다@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)@JoinColumn(name = "user_id")private User user; 연관관계 설정시 옵션에 cascade 속성값을 지정해주면 된다cascade = CascadeType.(*) 위 설정을 PERSIST 로 하게되면 연관된 엔티티도 함께 저장을 시킨다 EntityManger em = EntityManagerFact..
NGINX란?트래픽이 많은 웹사이트 서버인(WAS)를 도와주는 비동기 이벤트 기반구조의 경량화 웹 서버 프로그램이다. 클라이언트로부터 http 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, 또는 Reverse Proxy Server로 활용하여 WAS의 부하를 줄일 수 있는 로드밸런서 역할을 하기도 한다. 필자가 NGINX 를 사용하는 이유는 도메인 연결을 했을 때 뒤에 포트가 보이는 상황을 방지하고자서버 내부에 NGINX 를 사용하여 포트를 감추는 역할로 사용하였고 리버스 프록시를 사용하여 들어오는 요청을 매핑 해주는 역할로 사용하였다. 필자의 리눅스 서버는 Ubuntu20 버전이다. nginx 설치nginx 설치 전 apt 를 업데이트를 시킨다.$..
들어가며Nginx는 sites-available에 .conf 파일을 작성하여 설정을 한 후에 실제 연결되어야 하는 파일을 심볼릭 링크 설정을 통해 sites-enabled 폴더로 연결할 수 있습니다. Nginx 설정 경로 에서1) /etc/nginx/sites-available 에 전체적인 설정파일이 있고2) /etc/nginx/sites-enable 에 현재 활성화 중인 파일들이 있다. /etc/nginx/sites-available 위 경로에 있다는 전제 하에 작업을 하겠다.vi test.confserver { listen 80; server_name www.도메인이름.com; root /var/www/html; index index.html index.htm; loca..
들어가며 미니 프로젝트를 진행하며 원하는 기능에서 api 퍼포먼스(=성능) 가 생각했던 것 보다 나오지 않았다.-> Chrome 개발자도구 네트워크 탭의 통해 load 를 통해 api 응답이 몇초만에 왔는지 확인할 수 있었다. 그래서 위 api 성능을 더 잘내기 위해 어디서 시간초를 많이 소요하는지 체크를 해보고 싶었다.그래서 방법을 찾던 중에 Aop 를 사용하여 간단하게 로깅을 할 수 있다는 것을 알았다. 그래서 나중에 혹시또 사용할 수도 있으니 사용했던 방법을 기록해보려고 한다. build.gradle 추가 implementation 'org.springframework.boot:spring-boot-starter-aop' application.yml 로깅 추가logging: level: ..
들어가며업무를 하며 form 데이터를 서버에 보내야 할일이 생겼다.form 에서 User 가 Sign 을 하면 그 Sign 한 값을 서버로 보내야 했다. 위 사인한 값을 추출해서 서버로 보내야 했고, 서버로 값을 같이 보내기 위해 아래 방법을 사용했다.function onSignSave() { const canvas = document.getElementById('drawCanvas'); const dataUrl = canvas.toDataURL(); // 숨겨진 input 필드에 Data URL 저장 document.getElementById('signImg').value = dataUrl;} 위 코드를 사용하고 사용하여 input 폼에 Value 를 줘서 서버로 보내지게 만들었..