Spring 18

스레드 개수 설정 및 성능 최적화와 방법들

1. 스레드란? 스레드는 프로그램에서 실행되는 가장 작은 단위의 작업 흐름입니다. 여러 개의 스레드를 사용하면 병렬 처리를 통해 성능을 향상시킬 수 있습니다. CPU가 여러 개의 스레드를 동시에 실행할 수 있기 때문에, 적절한 개수의 스레드를 사용하면 응답 속도를 개선하고 자원을 효율적으로 활용할 수 있습니다.  스레드 개수 설정 방법 및 적정 개수 판단 방법비동기 작업에서 스레드 풀(ThreadPool) 크기를 설정할 때,*"최적의 스레드 개수"**를 결정하는 것은 매우 중요한데, 이를 판단하는 방법을 설명할게요. 1. 스레드 개수 설정 기준 (CPU vs. I/O 작업에 따라 다름)스레드 개수를 설정할 때는 어떤 종류의 작업을 처리하는지에 따라 다르게 결정해야 함.작업 유형 설명 스레드 개수 설정 방..

업무 기록/ETC 2025.02.20

Spring Boot 비동기 처리(@Async)로 성능 향상 원리와 동기/비동기

1. 코드 작동 방식 이 코드는 이미지 다운로드 및 변환 작업을 비동기적으로 실행하는 역할을 합니다. 실행 흐름1. 클라이언트가 processImage(imageUrl)을 호출2. @Async가 적용된 메서드이므로 새로운 스레드에서 실행3.  메서드 실행 후 즉시 CompletableFuture 객체를 반환 (메인 스레드 블로킹 없음)4.  백그라운드에서 downloadAndProcessImage(imageUrl) 실행5.  작업 완료 후 processedImageUrl을 반환2. 비동기 성능 향상 원리 (동기 vs. 비동기)구분 동기 처리 (Synchronous) 비동기 처리 (Asynchronous)실행 방식하나의 작업이 끝날 때까지 대기여러 작업을 동시에 실행스레드단일 스레드에서 순차 실행별도의 스..

Spring 2025.02.19

NodeJS 이용한 엑셀 다운로드 및 차트 만들기

SpringBoot, NodeJS 코드로 Excel 파일을 생성하는 코드 이다. 여러 부분으로 나누어서 기록 후 보기위해 작성하였다. 상황에 따라 년, 월에 따라 엑셀을 자동으로 다운로드 받게 된다. 여기서는 NodeJs 단에 js 부분만 기록하였다. 1. 버튼 클릭 이벤트 핸들러 설정 $("#btnExcelDownSend").click(function(e){ e.preventDefault(); // ... }); $("#btnExcelDownSend").click: id가 "btnExcelDownSend"인 요소가 클릭되었을 때의 이벤트를 처리합니다. e.preventDefault(): 클릭 이벤트의 기본 동작을 중단시킵니다. 이 경우에는 버튼 클릭에 따른 기본 동작(예: 폼 제출)을 방지합니다. 2...

업무 기록/WEB 2023.11.16

프로젝트 요약 정리 SpringBoot 와 Redis 연결 및 업데이트

들어가며 회사에서 URL 호출 방식의 API로 짧은 시간에 다량의 내용을 보내는 부분이 있다. 기존 웹서버는 jsp로 구현된 내용을 이번에 Spring Boot와 Node Expressjs 를 이용하여 DB와 Redis에 새로운 인증 API 키를 갱신하는 기능을 개발하게 되었다. 초기 Redis 값을 가저와 해당 필요한 부분만 Update 를 하는 방식을 생각하였지만 여러 문제가 있어 Json 형태의 Redis를 읽어와 해당 새로운 키 값을 만들고 가저온 정보에서 해당 필요 내용을 수정해 새로운 key, value를 만들기로 하니 여러 시행착오 끝에 문제를 해결할 수 있었다. Redis Config 여기서는 Redis Sentinel 및 Lettuce를 사용하여 Redis 데이터베이스의 고가용성을 확보하..

업무 기록/API 2023.10.25

Spring Security 인증처리 SecurityContextHolder.getContext(), getAuthentication(), getPrincipal()

Spring Security 컨텍스트에서 현재 인증된 사용자의 사용자 이름(사용자 ID)을 얻는 데 사용되다. 사용자가 인증되었고 연관된 UserDetails 개체가 있다고 가정하면. 이 코드는 UserDetails 개체에서 사용자 이름을 추출하여 userId 변수에 할당하는 것이다. ✔ 예제코드 @GetMapping("") public ResponseVO getUserInfo() { String userId = ((UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername(); System.out.println("getUserInfo"); log.debug("getUserInfo[" + us..

업무 기록/WEB 2023.07.31

Spring 클론코딩 프로젝트 MovieController 랜덤출력

✔ 사전 준비(MovieService) // 나라&장르 랜덤출력 하기위한 부분 @Transactional(readOnly = true) public List searchCri(String genre, String country) { //빈 웹툰리스폰스 리스트 List result = new ArrayList(); List result2 = new ArrayList(10); List movieList2 = movieRepository.findByMovGenreContainingAndMovCountryContaining(genre, country); for(Movie m : movieList2){ double sum = 0; int starCount = 0; for(Star star : m.getStar()..

Spring 시험 (7번), Thymleaf 이용 리스트 출력

영화 테이블을 만들어라 (영화번호, 제목, 국가, 장르, 개봉일, 런닝타임) 더미 데이터의 수는 상관 없다. 이를 어떠한 방식으로든 리스트로 출력해라 ✔ 영화 테이블 생성 (Entity) - sql 을 만들지 않고 @Table 을 이용하여 컬럼(제목, 국가, 장르, 런닝타임) 선언 package com.koreait.task7.domain; import lombok.Getter; import lombok.Setter; import lombok.ToString; import net.bytebuddy.asm.Advice; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedD..

Spring 2023.01.09

Spring Project Board 2 (Repository, DTO, PageController) - 타임리프 SQL 출력

MockMvc 웹 어플리케이션을 어플리케이션 서버에 배포하지 않고 테스트용 MVC 환경을 만들어 요청 및 전송, 응답기능을 제공하는 유틸리티 클래스 Query DSL - JPA를 좀 더 효율적으로 사용할 수 있는 라이브러리 - 오픈소스 프로젝트로 JPQL을 Java 코드로 작성할 수 있도록 함 - 정적 타입을 이용해서 SQL과 같은 쿼리를 생성해줌 @ConfigurationPropertiesScan - @EnableConfigurationProperties를 이용해 설정 프로퍼티 클래스를 사용하는 경우 클래스가 많아지면 코드가 무거워지고 복잡해짐 ✔ Repository @RepositoryRestResource//내가 설정한 REST 기능을 부여함(기본적인 API 자동 생성) public interfac..

Spring 2023.01.08

Spring Project Board(게시판) 1

✔ 게시판 프로젝트 게시판 프로젝트 개발환경 - 개발도구 : 인텔리제이 - 소스코드 관리 : Git - Git 호스팅 : GitHub - Git GUI : 깃크라켄 (https://www.gitkraken.com/) - SDK : JDK 17 목표 - 누구나 사용하기 쉽게 명확한 기능의 요구사항을 만듬 - 요규사항을 구현하는데 도움이 되는 각종 문서 작업을 경험 - 자바 + 스프링부트로 요규사항을 실제로 구현하는 기술적인 방법을 습득 - 최신 버전의 기술을 사용하면서 기술 동향을 파악하고 새로운 기술들을 익혀봄 - 기획과 문서 작성부터 개발, 형상관리, 테스트. 배포까지 개발 프로세스 전반을 경험 문서작업 https://www.diagrams.net/ (draw.io) : 도메인과 ERD 설계 구글 시트..

Spring 2023.01.02

Spring 유용한 Setting, 사이트

✔ Intellij 유용한 세팅 - File -> Settings -> Plugin -> 검색 1. Atom Material Icons Intellij 파일을 가시성을 높여주는 Plugins 2. One Dark theme 코드의 색을 바꿔 가시성을 높여주는 기능 3. Grep Console 콘솔창 내 많은 코드가 있는 경우 콘솔창 의 가시겅을 높여주는 기능 ✔ 유용한 사이트(mookaroo) CSV, SQL, JSON, XML 등 다양한 더미 데이터를 손쉽게 만들어 주는 사이트 https://www.mockaroo.com/schemas/new Mockaroo - Random Data Generator and API Mocking Tool | JSON / CSV / SQL / Excel www.mocka..

Spring 2022.12.29

Spring 타임리프 이용 기본

✔ 템플릿 엔진 템플릿 엔진 - 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어 - 서버 템플릿 엔진 - velocity : 과거 스프링에서 많이 사용하던 엔진. 현재 권장하지 않음 - freemarker : 템플릿 엔진으로 많은 기능을 지원. Apache 템플릿 엔진으로 템플릿 및 변경 데이터를 기반으로 텍스트, 메일, 파일등을 생성하는 Java 라이브러리를 제공 - thymeleaf : 스프링 부트에서 적극 지원하고 있는 엔진. 문법이 쉽지 않음. react, vue의 경험이 있다면 최적의 템플릿 엔진 - mustaches : 문법이 다른 템플릿 엔진보다 쉽다. 비즈니스 로직을 사용할 수 없음. view의 역할과 서버의 역할이 명확하게 구분됨 타임리프(Thymeleaf) 타임..

Spring 2022.12.19

Spring Join

✔ Category Join @Entity // JPA를 사용해서 DB 테이블과 메핑할 클래스를 연결 @NoArgsConstructor // 파라미터가 없는 기본 생성자를 생성 @AllArgsConstructor //모든 필드 값을 파라미터로 받는 생성자를 만들어줌 @Data @Builder // 연속적으로 실행하게 해주는 기능 ex) method.method ...... @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) @EntityListeners(AuditingEntityListener.class) public class Category extends BaseEntity implements Auditable { // ctrl + sh..

Spring 2022.12.13

Spring (리스너, 연관 관계 메핑, 어노테이션)

✔ 리스너 특징 리스너(특정 이벤트를 받기 위해 대기) 이벤트 종류 //Post - `직 후` Pre = '직 전' 1. PostLoad : 엔티티가 영속성 컨텍스트에 조회된 직후 2. PrePerList : 새로운 인스턴스를 merge할 때 수행. persist() 메소드를 호출해서 엔티티를 영속성 컨텍스트에 관리하기 직전에 호출 3. PreUpdate : flush, commit를 호출해서 엔티티를 데이터베이스에 수정하기 직전에 호출 4. PreRemove : remove 메소드를 호출해서 엔티티를 영속성 컨텍스트에서 삭제하기 직전에 호출 5. PostPersist : flush, commit를 호출해서 엔티티를 데이터베이스에 저장한 직후에 호출 6. PostUpdate : flush, commit를..

Spring 2022.12.13

Spring (Enum, Query Method 기본, Optional, @Bean)

✔ Enum Class 기본 Enum 클래스 - 열거체를 비교할 때 실제 값과 타입까지 체크할 수 있는 클래스 enum 열거체이름 { 값1, 값2, 값3 ... } 열거체이름 변수명; for(int i=0; i{ usersRepository.delete(selectUser); } ); } @Test public void login(){ //userid , hp, email Optional users = usersRepository.findByUseridAndUserpw("apple","2222"); users.ifPresent( selectUser ->{ System.out.println("userid : " +selectUser.getUserid()); System.out.println("hp : " ..

Spring 2022.12.11

Spring 데이터 관리(데이터 출력(모든), 삭제, 정렬, 검색, 저장, 불러오기, 존재 확인, 페이지 생성)

✔ 모든 데이터 출력 @Authored : 메서드가 자동으로 호출되고, 인스턴스가 자동으로 주입, 변수 및 메서드에 스프링이 관리하는 BEAN을 자동으로 매핑해준다. 🔏 모든 데이터 출력1 lic class AdminUserRepositoryTest extends Day4ApplicationTests { @Autowired // 메서드가 자동으로 호출되고, 인스턴스가 자동으로 주입 , // 변수 및 메서드에 스프링이 관리하는 Bean을 자동으로 매핑해주는 개념 private AdminUserRepository adminUserRepository; // // findById() 리터널이 optional @Test public void crud1(){// 모든 데이터 출력 adminUserRepository..

Spring 2022.12.09

Spring Added dependencies 등 간편하게 사용

✔ Maven repository 통하지 않고 인텔리제이에서 바로 Added dependencies 하는 법 file -> New Project -> Added dependencies 를 원하는 부분을 Dependencies에서 찾아 삽입해주면 된다. ✔ 결과 -> build.gradle을 보면 바로 들어간것을 볼 수 있다. 버전은 따로 없고 Spring에 맞는 적절한 내용이 들어간것을 볼 수 있다. repositories { mavenCentral() } //버전은 따로 없고 spring에 맞는 내용이 자동으로 들어간다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation '..

Spring 2022.12.08

Spring PostController

✔ post방식의 postController package com.koreait.day2.controller; import com.koreait.day2.model.Member; import org.springframework.web.bind.annotation.*; @RestController // rest로 호출할 수 있는 기능이다. url 호출기능이다 @RequestMapping("/api") // http://localgost:8888/api public class PostContorller { // url로 호출을하면 get방식이다. - > url 사용 // http://localhost:8888/api/postmethod @RequestMapping(method = RequestMethod.P..

Spring 2022.12.08

Spring(스프링 프로젝트 구조 , GetController) , @RestController, @RequestMapping, @RequestParam, @GetMapping

✔ 스프링 프로젝트 구조 스프링 프로젝트 구조 src > main > java : 자바 코드 src > main > resources > application.properties : 설정정보 src > main > resources > static : 정적 컨텐츠(html, css, js) src > main > resources > templates : 동적 템플릿 src > test > java : 테스트용 자바코드 작성 build.gradle : 버전 관리 테이블 정의서 (엔티티정의서) - 보통 엑셀로 작성하며 테이블 및 컬럼명과 데이터 타입등을 작성해놓은 문서 ERD(Entity Relationship Diagram) - 개체-관계 모델, 테이블간의 관계를 설명해주는 다이어그램 - DB의 구조를 ..

Spring 2022.12.08